沙盘引擎 (SEngine)

创意诞生沙盘世界,不止如此想象!

用户工具

站点工具


scripting:world:player

📚 差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
scripting:world:player [2023/12/14 10:54] bibiboxsscripting:world:player [2024/05/05 11:29] (当前版本) bibiboxs
行 20: 行 20:
 > 当玩家离开房间时调用。 > 当玩家离开房间时调用。
  
-- **Reason:**离开原因(int)+- **Reason:**离开原因(int)(0=断开连接;1=被服务器踢出;2=被服务器封禁
  
  
行 31: 行 31:
 > >
 > *如果有自定义输出聊天样式的需求,可以通过`return 0`然后使用`Message("颜色代码+[玩家名]:内容XXX")`等方式实现自定义。* > *如果有自定义输出聊天样式的需求,可以通过`return 0`然后使用`Message("颜色代码+[玩家名]:内容XXX")`等方式实现自定义。*
 +>
 +> **注意:沙盘引擎默认聊天消息经过了`Native.FormatRichText()`格式化,这将使文本支持[URL\@AT\Emoji]等高亮显示,如果有自定义Chat需求并希望支持这些功能,可以使用此API格式化一次。**
  
 ```javascript ```javascript
行 38: 行 40:
     //举一反三,也可以扩展出私聊、团队信息、前缀、关键词替换等     //举一反三,也可以扩展出私聊、团队信息、前缀、关键词替换等
     Message("[DIY CHAT] " + player.Name + ": " + text);     Message("[DIY CHAT] " + player.Name + ": " + text);
- return 0; //这里如果不写return或返回1,则不屏蔽《沙盘引擎》默认聊天输出+    return 0; //return 0 == ignore engine default chat message
 } }
 ``` ```
行 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 )
 +
 +> 当玩家颜色发生改变时调用。
  
  
行 129: 行 153:
 > 获取玩家唯一标识值。 > 获取玩家唯一标识值。
 > >
-> 此值并非是安全唯一的,玩家更换设备、账号等行为后会发生改变。+**特别注意:此值并非是绝对安全的,玩家(尤其是Demo版玩家)更换设备、账号、手动修改等行为后会发生改变,通常只有Steam用户的UUID是相对唯一且安全的**
  
 ```javascript ```javascript
行 172: 行 196:
 player.UserData: string player.UserData: string
 ``` ```
 +
 +
 +### player.GameEdition
 +
 +> 获取玩家用户游戏版本类型(非版本号)。
 +>
 +
 +```javascript
 +player.GameEdition: int
 +```
 +
 +| 索引 | 版本                 |
 +| ---- | -------------------- |
 +| 0    | 免费版(Demo\Steam) |
 +| 1    | 标准版(Steam)      |
 +
 +
 +
 +### player.Authority
 +
 +> 获取玩家用户类型。
 +>
 +
 +```javascript
 +player.Authority: int
 +```
 +
 +| 索引 | 账户类型                              |
 +| ---- | ------------------------------------- |
 +| 0    | 本地用户,非Steam用户(可能非安全的) |
 +| 1    | Steam用户(包含免费版+标准版)        |
  
  
行 193: 行 248:
 ```javascript ```javascript
 player.FPS: int player.FPS: int
 +```
 +
 +
 +
 +### player.Stats
 +
 +> 设置玩家自定义信息\状态(短文本,将显示在[TAB]菜单的用户名附近)。
 +>
 +
 +```javascript
 +player.Stats = ""; //string
 ``` ```
  
行 204: 行 270:
 > >
 > **注意:如果世界被修改时玩家绑定的`Character`已存在,那么将同步`Character`修改为新的World,并且不会解除绑定控制。如果不希望这样,可以提前`player.SetEntity(null)`解除绑定,再修改World。** > **注意:如果世界被修改时玩家绑定的`Character`已存在,那么将同步`Character`修改为新的World,并且不会解除绑定控制。如果不希望这样,可以提前`player.SetEntity(null)`解除绑定,再修改World。**
 +
 +> **==注意:`player.UniqueWorld`的机制是`10000 + player.ID`,因此应该避免手动将世界设置为`10000`及以上的数值。==**
  
 ```javascript ```javascript
行 214: 行 282:
  
 > 获取玩家**私人同步世界ID**,此项与`player.World`功能相似,不同的是,如果将某个对象设置为`player.UniqueWorld`,则指定对象只有此玩家可见,哪怕此玩家仍然在默认世界(0)。 > 获取玩家**私人同步世界ID**,此项与`player.World`功能相似,不同的是,如果将某个对象设置为`player.UniqueWorld`,则指定对象只有此玩家可见,哪怕此玩家仍然在默认世界(0)。
 +
 +> **==注意:`player.UniqueWorld`的机制是`10000 + player.ID`,因此应该避免手动将世界设置为`10000`及以上的数值。==**
  
 ```javascript ```javascript
行 285: 行 355:
 ### player.FocusPos ### player.FocusPos
  
-> 获取玩家鼠标焦点世界坐标,如果玩家正在控制一个角色,则两者坐标相同。+> 获取玩家控制焦点坐标,如果玩家正在控制一个角色,则两者坐标相同(同步于此属性) 
 +
 +> 在玩家不同视角模式(`Client.Camera.Mode`)下(鸟瞰、第三人称),此部分的坐标获取方式会发生变化。 
 +
 +> 主要表现于:【鸟瞰】基于陆地坐标;【第三人称】屏幕准星焦点
  
 ```javascript ```javascript
 player.FocusPos: Vector player.FocusPos: Vector
 +```
 +
 +
 +
 +### player.Angle
 +
 +> 获取玩家**屏幕方向**角度。
 +
 +```javascript
 +player.Angle: float
 ``` ```
  
行 296: 行 380:
  
 > 获取玩家正在使用的引擎语言(如果中途改动语言,不会更新)。 > 获取玩家正在使用的引擎语言(如果中途改动语言,不会更新)。
-+>
 > 根据《沙盘引擎》语言机制,通常应该采用此方法作为玩家语言的判定。 > 根据《沙盘引擎》语言机制,通常应该采用此方法作为玩家语言的判定。
  
行 320: 行 404:
  
 ```javascript ```javascript
-player.IsTyping: bool;+player.IsTyping: bool 
 +``` 
 + 
 + 
 + 
 +### player.VoiceState 
 + 
 +> 获取玩家语音聊天状态(是否正在语音聊天)。 
 +
 +> **注意:玩家必须`player.SetVoiceAuthority(true)`给予语音权限(默认),且由玩家主动触发按键才会进行聊天。** 
 + 
 +```javascript 
 +player.VoiceState: bool 
 +``` 
 + 
 + 
 + 
 +### player.CameraMode 
 + 
 +> 获取(只读)玩家相机模式(参考`Client.Camera.Mode`)。 
 + 
 +```javascript 
 +player.CameraMode: int
 ``` ```
  
行 328: 行 434:
  
 > 设置玩家的相机自由模式开关(`Client.Camera.FreeMode`)。 > 设置玩家的相机自由模式开关(`Client.Camera.FreeMode`)。
-> 
  
 ```javascript ```javascript
行 365: 行 470:
 player.AudioReverbExternal = 16; //Forest player.AudioReverbExternal = 16; //Forest
 ``` ```
 +
  
  
行 427: 行 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 )
 ``` ```
  
行 484: 行 612:
  
 > 从服务器封禁指定玩家(仅在当前服务器运行时生效,重启服务器后将清空封禁列表)。 > 从服务器封禁指定玩家(仅在当前服务器运行时生效,重启服务器后将清空封禁列表)。
 +>
 +> 如果希望实现持久化的封禁列表,请考虑自行实现维护一个`txt|json`文件表,在每次服务器建立后读取文件+遍历执行`Player.BanUUID()`。
  
 ```javascript ```javascript
行 904: 行 1034:
 function player.GetCinematicBorder(): bool function player.GetCinematicBorder(): bool
 ``` ```
 +
 +
 +
 +### player.SetVoiceMode()
 +
 +> 设置玩家语音聊天模式,**默认关闭**。
 +>
 +> ==**如果希望激活语音聊天功能,请为玩家设定一个非关闭的语音模式。**==
 +
 +```javascript
 +function player.SetVoiceMode( mode: int = 0 )
 +```
 +
 +| 索引 | 语音聊天模式   | 说明                                                         |
 +| ---- | -------------- | ------------------------------------------------------------ |
 +| 0    | 关闭           | 不会发送与接收任何语音聊天                                   |
 +| 1    | 全局模式       | 发送与接收所有聊天,除特定情况及权限、禁言等                 |
 +| 2    | (频道)组模式 | 发送与接收相同频道组(`VoiceGroup`)的聊天,除特定情况及权限、禁言等 |
 +
 +
 +
 +### player.GetVoiceMode()
 +
 +> 获取玩家语音聊天模式。
 +
 +```javascript
 +function player.GetVoiceMode(): int
 +```
 +
 +
 +
 +### player.SetVoiceWorldMode()
 +
 +> 设置玩家语音聊天世界模式开关(3D空间音频,跟随玩家的实体对象)。
 +>
 +> **此选项可能在部分玩法中提高玩家沉浸感,就像其他玩家真的在不远处说话一样。**
 +>
 +> *(可通过`GameRule > voice_worlddistance `控制3D空间声音的传播距离)*
 +
 +```javascript
 +function player.SetVoiceWorldMode( active: bool )
 +```
 +
 +
 +
 +### player.GetVoiceWorldMode()
 +
 +> 获取玩家语音聊天世界模式开关。
 +
 +```javascript
 +function player.GetVoiceWorldMode(): bool
 +```
 +
 +
 +
 +### player.SetVoiceAuthority()
 +
 +> 设置玩家语音聊天**权限**开关(或理解为静音),默认开启(`true`)。
 +>
 +> **==注意:此选项必须设置为`true`,玩家才有资格进行说话,否则玩家将无法在语音聊天中说话。==**
 +>
 +> ==**(此选项并非是玩家麦克风控制开关,安全考虑,只有玩家自行按住【说话按键】时才会录入音频)**==
 +
 +```javascript
 +function player.SetVoiceWorldMode( active: bool )
 +```
 +
 +
 +
 +### player.GetVoiceAuthority()
 +
 +> 获取玩家语音聊天**权限**开关。
 +
 +```javascript
 +function player.GetVoiceAuthority(): bool
 +```
 +
 +
 +
 +### player.SetVoiceIgnore()
 +
 +> 设置玩家屏蔽指定玩家语音开关,可用于屏蔽其他玩家的语音输出,但不会屏蔽自身对其他玩家的声音。
 +
 +```javascript
 +function player.SetVoiceIgnore( player: Player, active: bool )
 +```
 +
 +
 +
 +### player.GetVoiceIgnore()
 +
 +> 获取玩家语音聊天**权限**开关。
 +
 +```javascript
 +function player.GetVoiceIgnore( player: Player ): bool
 +```
 +
 +
 +
 +
 +
 +
 +
 +
 +
  
  
scripting/world/player.1702522478.txt.gz · 最后更改: 2023/12/14 10:54 由 bibiboxs