这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
scripting:world:player [2024/03/23 21:32] – bibiboxs | scripting:world:player [2024/05/05 11:29] (当前版本) – bibiboxs | ||
---|---|---|---|
行 20: | 行 20: | ||
> 当玩家离开房间时调用。 | > 当玩家离开房间时调用。 | ||
- | - **Reason:**离开原因(int) | + | - **Reason:**离开原因(int)(0=断开连接;1=被服务器踢出;2=被服务器封禁) |
行 31: | 行 31: | ||
> | > | ||
> *如果有自定义输出聊天样式的需求,可以通过`return 0`然后使用`Message(" | > *如果有自定义输出聊天样式的需求,可以通过`return 0`然后使用`Message(" | ||
+ | > | ||
+ | > **注意:沙盘引擎默认聊天消息经过了`Native.FormatRichText()`格式化,这将使文本支持[URL\@AT\Emoji]等高亮显示,如果有自定义Chat需求并希望支持这些功能,可以使用此API格式化一次。** | ||
```javascript | ```javascript | ||
行 38: | 行 40: | ||
// | // | ||
Message(" | Message(" | ||
- | return 0; //这里如果不写return或返回1,则不屏蔽《沙盘引擎》默认聊天输出 | + | |
} | } | ||
``` | ``` | ||
行 71: | 行 73: | ||
```javascript | ```javascript | ||
function OnPlayerTypingChange( player: Player, state: bool ) | function OnPlayerTypingChange( player: Player, state: bool ) | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### OnPlayerVoiceStateChange( player, state ) | ||
+ | |||
+ | > 当玩家语音聊天状态发生改变时调用(正在语音聊天)。 | ||
+ | |||
+ | ```javascript | ||
+ | function OnPlayerVoiceStateChange( player: Player, state: bool ) | ||
``` | ``` | ||
行 108: | 行 120: | ||
> 当玩家抬起**服务器监听的原生公开按键**时调用,只有服务器监听的原生按键才会触发。 | > 当玩家抬起**服务器监听的原生公开按键**时调用,只有服务器监听的原生按键才会触发。 | ||
+ | |||
+ | |||
+ | |||
+ | ### OnPlayerWorldChange( player, world ) | ||
+ | |||
+ | > 当玩家世界ID发生改变时调用。 | ||
+ | |||
+ | |||
+ | |||
+ | ### OnPlayerColorChange( player, color ) | ||
+ | |||
+ | > 当玩家颜色发生改变时调用。 | ||
行 183: | 行 207: | ||
``` | ``` | ||
- | |索引|版本| | + | | 索引 | 版本 |
- | | ------------ | + | | ---- | -------------------- | |
- | |0|概念版(Demo)| | + | | 0 | 免费版(Demo\Steam) | |
- | |1|标准版(Steam)| | + | | 1 | 标准版(Steam) |
- | |2|黄金版(Steam)| | + | |
行 200: | 行 223: | ||
``` | ``` | ||
- | |索引|账户类型| | + | | 索引 | 账户类型 |
- | | ------------ | + | | ---- | ------------------------------------- | |
- | |0|概念版、本地用户(可能非安全的)| | + | | 0 | 本地用户,非Steam用户(可能非安全的) | |
- | |1|Steam用户(受SteamID保护)| | + | | 1 | Steam用户(包含免费版+标准版) | |
行 225: | 行 248: | ||
```javascript | ```javascript | ||
player.FPS: int | player.FPS: int | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### player.Stats | ||
+ | |||
+ | > 设置玩家自定义信息\状态(短文本,将显示在[TAB]菜单的用户名附近)。 | ||
+ | > | ||
+ | |||
+ | ```javascript | ||
+ | player.Stats = ""; | ||
``` | ``` | ||
行 236: | 行 270: | ||
> | > | ||
> **注意:如果世界被修改时玩家绑定的`Character`已存在,那么将同步`Character`修改为新的World,并且不会解除绑定控制。如果不希望这样,可以提前`player.SetEntity(null)`解除绑定,再修改World。** | > **注意:如果世界被修改时玩家绑定的`Character`已存在,那么将同步`Character`修改为新的World,并且不会解除绑定控制。如果不希望这样,可以提前`player.SetEntity(null)`解除绑定,再修改World。** | ||
+ | > | ||
+ | > **==注意:`player.UniqueWorld`的机制是`10000 + player.ID`,因此应该避免手动将世界设置为`10000`及以上的数值。==** | ||
```javascript | ```javascript | ||
行 246: | 行 282: | ||
> 获取玩家**私人同步世界ID**,此项与`player.World`功能相似,不同的是,如果将某个对象设置为`player.UniqueWorld`,则指定对象只有此玩家可见,哪怕此玩家仍然在默认世界(0)。 | > 获取玩家**私人同步世界ID**,此项与`player.World`功能相似,不同的是,如果将某个对象设置为`player.UniqueWorld`,则指定对象只有此玩家可见,哪怕此玩家仍然在默认世界(0)。 | ||
+ | > | ||
+ | > **==注意:`player.UniqueWorld`的机制是`10000 + player.ID`,因此应该避免手动将世界设置为`10000`及以上的数值。==** | ||
```javascript | ```javascript | ||
行 318: | 行 356: | ||
> 获取玩家控制焦点坐标,如果玩家正在控制一个角色,则两者坐标相同(同步于此属性)。 | > 获取玩家控制焦点坐标,如果玩家正在控制一个角色,则两者坐标相同(同步于此属性)。 | ||
- | > | + | > |
> 在玩家不同视角模式(`Client.Camera.Mode`)下(鸟瞰、第三人称),此部分的坐标获取方式会发生变化。 | > 在玩家不同视角模式(`Client.Camera.Mode`)下(鸟瞰、第三人称),此部分的坐标获取方式会发生变化。 | ||
- | > | + | > |
> 主要表现于:【鸟瞰】基于陆地坐标;【第三人称】屏幕准星焦点 | > 主要表现于:【鸟瞰】基于陆地坐标;【第三人称】屏幕准星焦点 | ||
```javascript | ```javascript | ||
player.FocusPos: | player.FocusPos: | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### player.Angle | ||
+ | |||
+ | > 获取玩家**屏幕方向**角度。 | ||
+ | |||
+ | ```javascript | ||
+ | player.Angle: | ||
``` | ``` | ||
行 332: | 行 380: | ||
> 获取玩家正在使用的引擎语言(如果中途改动语言,不会更新)。 | > 获取玩家正在使用的引擎语言(如果中途改动语言,不会更新)。 | ||
- | > | + | > |
> 根据《沙盘引擎》语言机制,通常应该采用此方法作为玩家语言的判定。 | > 根据《沙盘引擎》语言机制,通常应该采用此方法作为玩家语言的判定。 | ||
行 358: | 行 406: | ||
player.IsTyping: | player.IsTyping: | ||
``` | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### player.VoiceState | ||
+ | |||
+ | > 获取玩家语音聊天状态(是否正在语音聊天)。 | ||
+ | > | ||
+ | > **注意:玩家必须`player.SetVoiceAuthority(true)`给予语音权限(默认),且由玩家主动触发按键才会进行聊天。** | ||
+ | |||
+ | ```javascript | ||
+ | player.VoiceState: | ||
+ | ``` | ||
+ | |||
行 409: | 行 470: | ||
player.AudioReverbExternal = 16; //Forest | player.AudioReverbExternal = 16; //Forest | ||
``` | ``` | ||
+ | |||
行 471: | 行 533: | ||
- | ### Player.Unban() | + | ### Player.BanUUID() |
+ | |||
+ | > 封禁指定**完整UUID**的玩家(仅在当前服务器运行时生效,重启服务器后将清空封禁列表)。 | ||
+ | |||
+ | ```javascript | ||
+ | function Player.BanUUID( uuid: string ) | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### Player.UnbanUUID() | ||
+ | |||
+ | > 取消封禁指定**完整UUID**的玩家(仅在当前服务器运行时生效,重启服务器后将清空封禁列表)。 | ||
+ | |||
+ | ```javascript | ||
+ | function Player.UnbanUUID( uuid: string ) | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### Player.UnbanName() | ||
> 取消封禁指定**完整名称(被封禁时)**的玩家(仅在当前服务器运行时生效,重启服务器后将清空封禁列表)。 | > 取消封禁指定**完整名称(被封禁时)**的玩家(仅在当前服务器运行时生效,重启服务器后将清空封禁列表)。 | ||
+ | > | ||
+ | > **==此方法只能取消由`player.Ban()`执行封禁的玩家,具体逻辑仍然基于UUID。==** | ||
```javascript | ```javascript | ||
- | function Player.Unban( name: string ) | + | function Player.UnbanName( name: string ) |
``` | ``` | ||
行 528: | 行 612: | ||
> 从服务器封禁指定玩家(仅在当前服务器运行时生效,重启服务器后将清空封禁列表)。 | > 从服务器封禁指定玩家(仅在当前服务器运行时生效,重启服务器后将清空封禁列表)。 | ||
+ | > | ||
+ | > 如果希望实现持久化的封禁列表,请考虑自行实现维护一个`txt|json`文件表,在每次服务器建立后读取文件+遍历执行`Player.BanUUID()`。 | ||
```javascript | ```javascript | ||
行 948: | 行 1034: | ||
function player.GetCinematicBorder(): | function player.GetCinematicBorder(): | ||
``` | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### player.SetVoiceMode() | ||
+ | |||
+ | > 设置玩家语音聊天模式,**默认关闭**。 | ||
+ | > | ||
+ | > ==**如果希望激活语音聊天功能,请为玩家设定一个非关闭的语音模式。**== | ||
+ | |||
+ | ```javascript | ||
+ | function player.SetVoiceMode( mode: int = 0 ) | ||
+ | ``` | ||
+ | |||
+ | | 索引 | 语音聊天模式 | ||
+ | | ---- | -------------- | ------------------------------------------------------------ | | ||
+ | | 0 | 关闭 | ||
+ | | 1 | 全局模式 | ||
+ | | 2 | (频道)组模式 | 发送与接收相同频道组(`VoiceGroup`)的聊天,除特定情况及权限、禁言等 | | ||
+ | |||
+ | |||
+ | |||
+ | ### player.GetVoiceMode() | ||
+ | |||
+ | > 获取玩家语音聊天模式。 | ||
+ | |||
+ | ```javascript | ||
+ | function player.GetVoiceMode(): | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### player.SetVoiceWorldMode() | ||
+ | |||
+ | > 设置玩家语音聊天世界模式开关(3D空间音频,跟随玩家的实体对象)。 | ||
+ | > | ||
+ | > **此选项可能在部分玩法中提高玩家沉浸感,就像其他玩家真的在不远处说话一样。** | ||
+ | > | ||
+ | > *(可通过`GameRule > voice_worlddistance `控制3D空间声音的传播距离)* | ||
+ | |||
+ | ```javascript | ||
+ | function player.SetVoiceWorldMode( active: bool ) | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### player.GetVoiceWorldMode() | ||
+ | |||
+ | > 获取玩家语音聊天世界模式开关。 | ||
+ | |||
+ | ```javascript | ||
+ | function player.GetVoiceWorldMode(): | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### player.SetVoiceAuthority() | ||
+ | |||
+ | > 设置玩家语音聊天**权限**开关(或理解为静音),默认开启(`true`)。 | ||
+ | > | ||
+ | > **==注意:此选项必须设置为`true`,玩家才有资格进行说话,否则玩家将无法在语音聊天中说话。==** | ||
+ | > | ||
+ | > ==**(此选项并非是玩家麦克风控制开关,安全考虑,只有玩家自行按住【说话按键】时才会录入音频)**== | ||
+ | |||
+ | ```javascript | ||
+ | function player.SetVoiceWorldMode( active: bool ) | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### player.GetVoiceAuthority() | ||
+ | |||
+ | > 获取玩家语音聊天**权限**开关。 | ||
+ | |||
+ | ```javascript | ||
+ | function player.GetVoiceAuthority(): | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### player.SetVoiceIgnore() | ||
+ | |||
+ | > 设置玩家屏蔽指定玩家语音开关,可用于屏蔽其他玩家的语音输出,但不会屏蔽自身对其他玩家的声音。 | ||
+ | |||
+ | ```javascript | ||
+ | function player.SetVoiceIgnore( player: Player, active: bool ) | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### player.GetVoiceIgnore() | ||
+ | |||
+ | > 获取玩家语音聊天**权限**开关。 | ||
+ | |||
+ | ```javascript | ||
+ | function player.GetVoiceIgnore( player: Player ): bool | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | |||