meta data for this page
📚 差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
| scripting:world:player [2025/08/02 23:17] – bibiboxs | scripting:world:player [2025/08/29 15:50] (当前版本) – bibiboxs | ||
|---|---|---|---|
| 行 12: | 行 12: | ||
| ### OnPlayerJoin( player ) | ### OnPlayerJoin( player ) | ||
| - | > 当新玩家加入到主机房间时调用。 | + | > 当新玩家**加入主机**时调用,此事件通常较少使用。 |
| > | > | ||
| - | > ==注意:此时玩家只是连接成功,并非加载完成,完整加载使用`OnPlayerComplete`。== | + | > 注意:此时玩家只是连接成功,并非加载完成,完整加载使用`OnPlayerComplete`。 |
| 行 20: | 行 20: | ||
| ### OnPlayerComplete( player ) | ### OnPlayerComplete( player ) | ||
| - | > 当玩家完全加载完成时调用。 | + | > 当玩家**完全加载**时调用。 |
| > | > | ||
| - | > ==此事件是获取玩家完全载入状态的正确方法。== | + | > 通常情况下,应该使用此事件作为玩家的**入口事件**。 |
| 行 28: | 行 28: | ||
| ### OnPlayerPart ( player, reason ) | ### OnPlayerPart ( player, reason ) | ||
| - | > 当玩家离开房间时调用。 | + | > 当玩家**离开主机**时调用。 |
| + | > | ||
| + | > 注意:如果玩家是主机,且直接关闭游戏进程时,此方法可能**不会按照预期**工作。 | ||
| - **Reason:**离开原因(int)(0=断开连接;1=被服务器踢出;2=被服务器封禁) | - **Reason:**离开原因(int)(0=断开连接;1=被服务器踢出;2=被服务器封禁) | ||
| 行 38: | 行 40: | ||
| > 当玩家发送消息时调用。 | > 当玩家发送消息时调用。 | ||
| > | > | ||
| - | > 此事件拥有返回值机制,如果返回为`false`则不使用内置的聊天输出机制(将不会输出任何消息),默认返回`true`。 | + | > 此事件有**返回值机制**,如果返回为`false`则不使用内置的聊天输出(不会输出任何消息),默认返回`true`。 |
| > | > | ||
| - | > *如果有自定义输出聊天样式的需求,可以通过`return 0`然后使用`Message(" | + | > 如果有**自定义聊天样式**需求,可以通过`return 0`然后使用`Message(" |
| > | > | ||
| - | > **注意:沙盘引擎默认聊天消息经过了`Native.FormatRichText()`格式化,这将使文本支持[URL\@AT\Emoji]等高亮显示,如果有自定义Chat需求并希望支持这些功能,可以在手动发送Message前使用此API格式化一次。** | + | > 注意:默认聊天消息经过了`Native.FormatRichText()`格式化,这将使文本支持`[URL\@AT\Emoji]`等高亮显示,如果有自定义输出需求并希望支持这些功能,可以在手动发送Message前使用API格式化一次。** |
| + | |||
| + | [note] | ||
| + | 游戏聊天框默认支持`UBB|HTML`格式的消息,如果不希望玩家随意使用,可以通过`Misc.IsUBBText()`或其他方式检测文本,并决定哪些内容允许被发送。 | ||
| + | [/note] | ||
| ```javascript | ```javascript | ||
| 行 268: | 行 274: | ||
| | ---- | -------------------- | | | ---- | -------------------- | | ||
| | 0 | 标准版(Demo\Steam) | | | 0 | 标准版(Demo\Steam) | | ||
| - | | 1 | 白金版(Steam+DLC) | + | | 1 | 白金版(Steam+DLC) |
| 行 284: | 行 290: | ||
| | ---- | ------------------------------------- | | | ---- | ------------------------------------- | | ||
| | 0 | 本地用户,非Steam用户(可能非安全的) | | | 0 | 本地用户,非Steam用户(可能非安全的) | | ||
| - | | 1 | Steam用户(标准版\白金版) | + | | 1 | Steam用户(标准版\白金版) |
| 行 328: | 行 334: | ||
| > | > | ||
| > **注意:如果世界被修改时玩家绑定的`Character`已存在,那么将同步`Character`修改为新的World,并且不会解除绑定控制。如果不希望这样,可以提前`player.SetEntity(null)`解除绑定,再修改World。** | > **注意:如果世界被修改时玩家绑定的`Character`已存在,那么将同步`Character`修改为新的World,并且不会解除绑定控制。如果不希望这样,可以提前`player.SetEntity(null)`解除绑定,再修改World。** | ||
| - | > | + | > |
| > **==注意:`player.UniqueWorld`的机制是`10000 + player.ID`,因此应该避免手动将世界设置为`10000`及以上的数值。==** | > **==注意:`player.UniqueWorld`的机制是`10000 + player.ID`,因此应该避免手动将世界设置为`10000`及以上的数值。==** | ||
| 行 340: | 行 346: | ||
| > 获取玩家**私人同步世界ID**,此项与`player.World`功能相似,不同的是,如果将某个对象设置为`player.UniqueWorld`,则指定对象只有此玩家可见,哪怕此玩家仍然在默认世界(0)。 | > 获取玩家**私人同步世界ID**,此项与`player.World`功能相似,不同的是,如果将某个对象设置为`player.UniqueWorld`,则指定对象只有此玩家可见,哪怕此玩家仍然在默认世界(0)。 | ||
| - | > | + | > |
| > **==注意:`player.UniqueWorld`的机制是`10000 + player.ID`,因此应该避免手动将世界设置为`10000`及以上的数值。==** | > **==注意:`player.UniqueWorld`的机制是`10000 + player.ID`,因此应该避免手动将世界设置为`10000`及以上的数值。==** | ||
| 行 374: | 行 380: | ||
| > 获取玩家绑定的实体对象(角色)。 | > 获取玩家绑定的实体对象(角色)。 | ||
| + | > | ||
| + | > 此方法也可以设置赋值对象(等同于`player.SetEntity(value, | ||
| ```javascript | ```javascript | ||
| 行 394: | 行 402: | ||
| > 设置玩家**是否为管理员**,管理员可通过`TAB`菜单进行基础的玩家管理。 | > 设置玩家**是否为管理员**,管理员可通过`TAB`菜单进行基础的玩家管理。 | ||
| - | > | + | > |
| > 通常情况下,此属性是一个验证管理员权限的**预制抽象属性**,开发者可考虑自行编写更高级的管理员系统。 | > 通常情况下,此属性是一个验证管理员权限的**预制抽象属性**,开发者可考虑自行编写更高级的管理员系统。 | ||
| + | > | ||
| + | > 如果服务器由**本地主机**建立,主机玩家会自动激活此属性。 | ||
| ```javascript | ```javascript | ||
| 行 450: | 行 460: | ||
| > 获取玩家**视角焦点实体检测距离**,此数值直接影响`FocusEntity`的检测结果,默认距离为`3.0`(`0.0~512.0`)。 | > 获取玩家**视角焦点实体检测距离**,此数值直接影响`FocusEntity`的检测结果,默认距离为`3.0`(`0.0~512.0`)。 | ||
| - | > | + | > |
| > **注意:对于远距离视角、鸟瞰视角等情况,应该在合理范围内调高此数值,否则可能距离过短导致无法正确检测。** | > **注意:对于远距离视角、鸟瞰视角等情况,应该在合理范围内调高此数值,否则可能距离过短导致无法正确检测。** | ||
| 行 577: | 行 587: | ||
| ```javascript | ```javascript | ||
| player.CameraMode: | player.CameraMode: | ||
| - | ``` | ||
| - | |||
| - | |||
| - | |||
| - | ### player.AudioReverbInternal | ||
| - | |||
| - | > 设置玩家的音频混响模式(建筑内部),枚举索引参考[《AudioReverbPreset》](https:// | ||
| - | > | ||
| - | |||
| - | ```javascript | ||
| - | player.AudioReverbInternal = 3; //Room | ||
| - | ``` | ||
| - | |||
| - | |||
| - | |||
| - | ### player.AudioReverbExternal | ||
| - | |||
| - | > 设置玩家的音频混响模式(默认,建筑外部),枚举索引参考[《AudioReverbPreset》](https:// | ||
| - | > | ||
| - | |||
| - | ```javascript | ||
| - | player.AudioReverbExternal = 16; //Forest | ||
| ``` | ``` | ||
| 行 932: | 行 920: | ||
| - | ### player.RunTask() | + | ### player.RunTaskAction() |
| - | > 为玩家执行一次**倒计时任务**(例如拆除炸弹+UI进度条),每个玩家同一时间只能执行一个任务 | + | > 为玩家执行一次**倒计时任务**(UI进度条+倒计时),每个玩家**同一时间**只能执行一个任务 |
| ```javascript | ```javascript | ||
| - | function player.RunTask( time: float, title: string, onComplete: Action, theme: int = 0 ) | + | function player.RunTaskAction( tag: string, |
| ``` | ``` | ||
| - | - **`theme`:**范围0~4,表示不同的颜色 | + | - `tag`识别标签,仅供参考记录 |
| + | - `time`倒计时时间(秒) | ||
| + | - `title`文本标题(支持宏文本) | ||
| + | - `theme`范围0~4,表示不同的颜色 | ||
| ```javascript | ```javascript | ||
| - | player.RunTask(5, "正在安装C4...", () => { | + | player.RunTaskAction(" |
| - | //C4 Setup | + | //OnComplete |
| }); | }); | ||
| ``` | ``` | ||
| 行 950: | 行 941: | ||
| - | ### player.StopTask() | + | ### player.StopTaskAction() |
| > 停止玩家**倒计时任务**。 | > 停止玩家**倒计时任务**。 | ||
| ```javascript | ```javascript | ||
| - | function player.StopTask() | + | function player.StopTaskAction() |
| ``` | ``` | ||
| - | ### player.AddGuider() | + | ### player.UpdateTaskActionData() |
| - | > 为玩家建立一个指引目标(屏幕边缘箭头),允许附加指引文字(支持宏文本)。 | + | > 更新玩家**倒计时任务**信息。 |
| - | > | + | |
| - | > 补充:指引有3种不同的样式选择(`0, | + | |
| ```javascript | ```javascript | ||
| - | function player.AddGuider( index: int, target: any, style: int = 0, text: string = "", | + | function player.UpdateTaskActionData( title: string, theme: int = -1 ) |
| - | /* | + | ``` |
| - | index:指引索引(如索引已存在指引,将会替换修改,一个index只能存在并表示一个指引实例),相当于一个标签作用 | + | |
| - | target:目标对象(可以是Vector|Entity等类型,分别表示静态坐标与动态跟随目标) | + | |
| - | style:指引样式 | + | |
| - | text:指引文字 | + | |
| - | autoDestroy:到达指引目标附近是否自动移除指引,默认为false | + | |
| - | */ | + | |
| - | // | + | - `title`文本标题(支持宏文本) |
| - | ``` | + | - `theme`颜色主题,默认`-1`不进行修改 |
| - | ### player.RemoveGuider() | + | ### player.GetTaskActionTag() |
| - | > 为玩家移除一个指引目标(屏幕边缘箭头)。 | + | > 获取玩家**倒计时任务**标签。 |
| ```javascript | ```javascript | ||
| - | function player.RemoveGuider( index: int ) | + | function player.GetTaskActionTag(): string |
| ``` | ``` | ||
| - | ### player.ExistGuider() | + | ### player.ExistTaskAction() |
| - | > 获取玩家**指定索引**的指引实例是否存在。 | + | > 获取玩家**倒计时任务**是否**存在**并进行中。 |
| ```javascript | ```javascript | ||
| - | function player.ExistGuider( index: int ): bool | + | function player.ExistTaskAction(): bool |
| ``` | ``` | ||
| 行 1167: | 行 1150: | ||
| - `return`:是否正常返回(如果没有临时物品,也会返回`true`) | - `return`:是否正常返回(如果没有临时物品,也会返回`true`) | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||