meta data for this page
  •  

📚 差别

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

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
scripting:world:player [2024/08/11 20:22] bibiboxsscripting:world:player [2025/06/14 04:24] (当前版本) bibiboxs
行 54: 行 54:
 ``` ```
  
 +
 +
 +### OnPlayerNetworkCMD( cmd, arg0, arg1, arg2 )
 +
 +> 当接收到来自玩家客户端发送的**CMD消息**时调用,**这是客户端与服务端传输自定义信息的方式之一**。
 +>
 +> **对于一些特殊情况,可以利用`json to string`进行更详细的内容传输。**
 +
 +[note2]
 +
 +注意:`CMD\RPC`传输支持几个基础类型(`int | float | string | bool`)。
 +
 +[/note]
  
  
行 93: 行 106:
 ```javascript ```javascript
 function OnPlayerVoiceStateChange( player: Player, state: bool ) function OnPlayerVoiceStateChange( player: Player, state: bool )
 +```
 +
 +
 +
 +### OnPlayerFocusEntityChange( player, entity )
 +
 +> 当玩家焦点对象发生改变时调用。
 +
 +```javascript
 +function OnPlayerFocusEntityChange( player: Player, entity: Entity )
 ``` ```
  
行 111: 行 134:
 ### OnPlayerKeyDown( player, keyTag ) ### OnPlayerKeyDown( player, keyTag )
  
-> 当玩家按下**服务器绑定按键**时调用,只有服务器绑定的按键才会触发。+> 当玩家按下**服务器监听按键**时调用,只有服务器监听的按键(`RegisterKeyListener`)才会触发。
  
  
行 117: 行 140:
 ### OnPlayerKeyUp( player, keyTag ) ### OnPlayerKeyUp( player, keyTag )
  
-> 当玩家抬起**服务器绑定按键**时调用,只有服务器绑定的按键才会触发。+> 当玩家抬起**服务器监听按键**时调用,只有服务器监听的按键(`RegisterKeyListener`)才会触发。
  
  
  
-### OnPlayerNativeKeyDown( player, keyTag )+### OnPlayerWorldChange( player, world )
  
-> 当玩家按下**服务器监听的原公开按键**时调用,只有服务器监听的原生按键才会触发+> 当玩家世界ID发改变时调用。
  
  
  
-### OnPlayerNativeKeyUp( player, keyTag )+### OnPlayerColorChange( player, color )
  
-> 当玩家抬起**服务器监听的原公开按键**时调用,只有服务器监听的原生按键才会触发+> 当玩家颜色发改变时调用。
  
  
  
-### OnPlayerWorldChange( player, world )+### OnPlayerNameChange( player, name )
  
-> 当玩家世界ID发生改变时调用。+> 当玩家名称发生改变时调用。
  
  
  
-### OnPlayerColorChange( player, color )+### OnPlayerBackpackPropOperation( player, slot, isMain, isShift )
  
-> 当玩家颜色发生改变时调用。+> 当玩家背包请求操作物品时调用。 
 +
 +> 此方法可配合`player.GetBackpackTempProp()`使用。
  
 +- `isMain`:是否为左键(主要)点击(否则为右键)
 +- `isShift`:是否按住Shift键
 +- `return`:默认返回`true`,决定是否允许后续操作
  
  
-### OnPlayerNameChange( player, name ) 
  
-> 当玩家名称发生改变时调用。+### OnPlayerBackpackPropDiscard( player, prop, isDelete ) 
 + 
 +> 当玩家背包请求扔掉物品时调用。 
 + 
 +- `isDelete`:是否为请求删除物品(否则视为丢弃) 
 +- `return`:默认返回`true`,决定是否允许后续操作 
  
  
行 234: 行 267:
 | 索引 | 版本                 | | 索引 | 版本                 |
 | ---- | -------------------- | | ---- | -------------------- |
-| 0    | 免费版(Demo\Steam) | +| 0    | 标准版(Demo\Steam) | 
-| 1    | 标准版(Steam)      |+| 1    | 白金版(Steam+DLC)      |
  
  
行 251: 行 284:
 | ---- | ------------------------------------- | | ---- | ------------------------------------- |
 | 0    | 本地用户,非Steam用户(可能非安全的) | | 0    | 本地用户,非Steam用户(可能非安全的) |
-| 1    | Steam用户(包含免费版+标准版)        |+| 1    | Steam用户(标准版\白金版)        |
  
  
行 354: 行 387:
 ```javascript ```javascript
 player.Character: Character player.Character: Character
 +```
 +
 +
 +
 +### player.IsAdmin
 +
 +> 设置玩家**是否为管理员**,管理员可通过[TAB]菜单进行基础的玩家管理。
 +
 +> 通常情况下,此属性是一个验证管理员权限的**预制抽象属性**,开发者可考虑自行编写更高级的管理员系统。
 +
 +```javascript
 +player.IsAdmin = false;
 ``` ```
  
行 380: 行 425:
 ### player.FocusPos ### player.FocusPos
  
-> 获取玩家控制焦点坐标,如果玩家正在控制一个角色,则两者坐相同(同步于此属性)。+> 获取玩家视角焦点坐标(屏幕中心、准星&位置)。
 > >
-> 在玩家不同视角模式(`Client.Camera.Mode`)下(鸟瞰、第三人称),坐标获取方式会发生变化。+> 在玩家不同视角模式(`Client.Camera.Mode`)下(鸟瞰、第一人称、第三人称),坐标获取方式会发生变化。
 > >
-> 主要表现于:鸟瞰】基于陆地坐标;【第三人称屏幕准星焦点+> 主要表现于:[鸟瞰]鼠标坐标、[第三人称]屏幕准星坐标
  
 ```javascript ```javascript
行 392: 行 437:
  
  
-### player.FocusAngle+### player.FocusEntity
  
-> 设置&获取玩家**控制焦点(游戏视角+屏幕方向)**角度(`Vector2(x, y)`)。+> 获取玩家**视角焦点实体**,如果不存在则返回`null`。 
 + 
 +```javascript 
 +player.FocusEntity: Entity 
 +``` 
 + 
 + 
 + 
 +### player.FocusEntityDistance 
 + 
 +> 获取玩家**视角焦点实体检测距离**,此数值直接影响`FocusEntity`的检测结果,默认距离为`3.0`(`0.0~512.0`)。 
 +>  
 +> **注意:对于远距离视角、鸟瞰视角等情况,应该在合理范围内调高此数值,否则可能距离过短导致无法正确检测。** 
 + 
 +```javascript 
 +player.FocusEntityDistance: float 
 +``` 
 + 
 + 
 + 
 +### player.FocusVAngle 
 + 
 +> 设置&获取玩家**控制视角上下角度**(`Camera.VAngle`)。 
 + 
 +```javascript 
 +player.FocusVAngle: float 
 +``` 
 + 
 + 
 + 
 +### player.FocusHAngle 
 + 
 +> 设置&获取玩家**控制视角横向角度**(`Camera.HAngle`)。 
 + 
 +```javascript 
 +player.FocusHAngle: float 
 +``` 
 + 
 + 
 + 
 +### player.FocusEulerAngle 
 + 
 +> 设置&获取玩家**控制焦点(游戏视角+屏幕方向)**XY角度(`Vector2(x, y)`)。
 > >
-> 在玩家不同视角模式(`Client.Camera.Mode`)下,坐标获取方式会发生变化。+> 在玩家不同视角模式(`Client.Camera.Mode`)下,坐标处理方式会发生变化。 
 + 
 +[note2] 
 +注意:多数情况下,应该使用`Client\Camera`实现视角相关逻辑。 
 +[/note]
  
 ```javascript ```javascript
 player.FocusAngle: Vector2 player.FocusAngle: Vector2
 +```
 +
 +
 +
 +### player.FocusAngleForward
 +
 +> 获取玩家**控制焦点**前方向量。
 +>
 +> 在玩家不同视角模式(`Client.Camera.Mode`)下,坐标处理方式会发生变化。
 +
 +```javascript
 +player.FocusAngleForward: Vector2
 ``` ```
  
行 484: 行 587:
 [note2] [note2]
 注意:此模式不会修改鼠标可见状态,因此通常应该手动关闭鼠标可见(Client),已达到随鼠标自由旋转。 注意:此模式不会修改鼠标可见状态,因此通常应该手动关闭鼠标可见(Client),已达到随鼠标自由旋转。
-[note]+[/note]
  
 ```javascript ```javascript
行 538: 行 641:
 ### Player.Search() ### Player.Search()
  
-> 寻找一个玩家实例(通过模糊查找,通常根据玩家名称,不区分大小写),不存在则返回`null`。+> 寻找一个玩家实例(通过模糊查找,通常根据玩家名称\ID,不区分大小写),不存在则返回`null`。
  
 ```javascript ```javascript
行 549: 行 652:
 Player.Search("Tomm"); //Tommy(相似匹配) Player.Search("Tomm"); //Tommy(相似匹配)
 Player.Search("To"); //Tommy(以最先搜索到的为主) Player.Search("To"); //Tommy(以最先搜索到的为主)
 +Player.Search("0"); //By ID
 ``` ```
  
行 651: 行 755:
  
 ### player.SetObserver() ### player.SetObserver()
 +
 +[note2]
 +此方法已过时,已在新版本移除。
 +[/note]
  
 > 设置玩家视角观察对象(`Client.Camera.Target`)。 > 设置玩家视角观察对象(`Client.Camera.Target`)。
 +
 +> 设置为`null`可恢复观察控制`character.Entity`。
  
 ```javascript ```javascript
行 662: 行 772:
 ### player.GetObserver() ### player.GetObserver()
  
-> 获取玩家视角观察对象(`Client.Camera.Target`),如不存在则返回`null`。+[note2] 
 +此方法已过时,已在新版本移除。 
 +[/note] 
 + 
 +> 获取玩家视角观察对象(`Client.Camera.Target`),如未观察其他角色则返回`character.Entity`,否则返回`null`。
  
 ```javascript ```javascript
行 831: 行 945:
 ``` ```
  
 +
 +
 +### player.NetworkRPC()
 +
 +> 为玩家发送一条RPC指令。
 +>
 +> 目标玩家客户端脚本通过`OnServerNetworkRPC()`接收数据。
 +>
 +> **注意:`CMD\RPC`方法仅支持基础类型,并且会自动类型转换。**
 +
 +```javascript
 +function NetworkRPC( rpc: string, arg0: any, arg1: any, arg2: any )
 +```
  
  
行 839: 行 966:
 > 目标玩家客户端脚本通过`OnServerStreamData()`接收数据。 > 目标玩家客户端脚本通过`OnServerStreamData()`接收数据。
 > >
-> **注意:这里不应该放置特别大的数据内容,否则可能造成网络阻塞。**+> **注意:这里不应该放置特别大的数据内容(4096),否则可能造成网络阻塞。**
  
 ```javascript ```javascript
 function player.SendData( number: float, data: string = "" ) function player.SendData( number: float, data: string = "" )
 +```
 +
 +
 +
 +### player.ClientExec()
 +
 +> 为玩家发送一条**客户端脚本代码**,目标玩家**客户端**将执行对应的脚本代码。
 +>
 +> **注意:这里不应该放置特别大的数据内容(2048),否则可能造成网络阻塞。**
 +
 +```javascript
 +function player.ClientExec( code: string )
 ``` ```
  
行 963: 行 1102:
 ```javascript ```javascript
 function player.FocusCamera() function player.FocusCamera()
 +```
 +
 +
 +
 +### player.RunTask()
 +
 +> 为玩家执行一次**倒计时任务**(例如拆除炸弹+UI进度条),每个玩家同一时间只能执行一个任务
 +
 +```javascript
 +function player.RunTask( time: float, title: string, onComplete: Action, theme: int = 0 )
 +```
 +
 +- **`theme`:**范围0~4,表示不同的颜色
 +
 +```javascript
 +player.RunTask(5, "正在安装C4...", () => {
 +    //C4 Setup
 +});
 +```
 +
 +
 +
 +### player.StopTask()
 +
 +> 停止玩家**倒计时任务**。
 +
 +```javascript
 +function player.StopTask()
 ``` ```
  
行 1053: 行 1220:
 ### player.AddGuider() ### player.AddGuider()
  
-> 为玩家建立一个指引目标(屏幕边缘箭头)。+> 为玩家建立一个指引目标(屏幕边缘箭头),允许附加指引文字
  
 ```javascript ```javascript
-function player.AddGuider( index: int, target: any, autoDestroy: bool = false )+function player.AddGuider( index: int, target: any, text: string = "", autoDestroy: bool = false )
 /* /*
  index:指引索引(如索引已存在指引,将会替换修改,一个index只能存在并表示一个指引实例),相当于一个标签作用  index:指引索引(如索引已存在指引,将会替换修改,一个index只能存在并表示一个指引实例),相当于一个标签作用
  target:目标对象(可以是Vector|Entity等类型,分别表示静态坐标与动态跟随目标)  target:目标对象(可以是Vector|Entity等类型,分别表示静态坐标与动态跟随目标)
 + text:指引文字
  autoDestroy:到达指引目标附近是否自动移除指引,默认为false  autoDestroy:到达指引目标附近是否自动移除指引,默认为false
 */ */
行 1162: 行 1330:
 ### player.SetVoiceAuthority() ### player.SetVoiceAuthority()
  
-> 设置玩家语音聊天**权限**开关(或理解为静音),默认开启(`true`)。+> 设置玩家语音聊天**权限**开关(静音\禁言),默认开启(`true`)。
 > >
-> **==注意:此选项必须设置为`true`,玩家才有资格进行说话,否则玩家将无法在语音聊天中说话。==**+> **==注意:此选项必须设置为`true`,玩家才有资格进行说话,否则玩家将无法在语音聊天中说话(禁言Muted)。==**
 > >
 > ==**(此选项并非是玩家麦克风控制开关,安全考虑,只有玩家自行按住【说话按键】时才会录入音频)**== > ==**(此选项并非是玩家麦克风控制开关,安全考虑,只有玩家自行按住【说话按键】时才会录入音频)**==
  
 ```javascript ```javascript
-function player.SetVoiceWorldMode( active: bool )+function player.SetVoiceAuthority( active: bool )
 ``` ```
  
行 1201: 行 1369:
 function player.GetVoiceIgnore( player: Player ): bool function player.GetVoiceIgnore( player: Player ): bool
 ``` ```
 +
 +
 +
 +
 +### player.TestVisiblePoint()
 +
 +> 检测玩家相机是否能看到指定坐标(模糊检测,边缘检测并非绝对准确,模拟本地`Camera.TestVisiblePoint()`)。
 +
 +```javascript
 +function player.TestVisiblePoint( pos: Vector ): bool
 +```
 +
 +
 +
 +### player.SetBackpackOtherTarget()
 +
 +> 设置玩家**额外的观察背包实例**(除本地对象外的另一个背包)。
 +>
 +> 此功能可扩展许多玩法,例如:商店、交易、背包共享等。
 +>
 +> 如果没有设置其他背包实例,玩家背包UI将仅显示自身对象背包。
 +
 +```javascript
 +function player.SetBackpackOtherTarget( otherBackpack: Backpack, observerMode: int = 0 )
 +```
 +
 +- `observerMode`:观察模式,默认为`0`(0=可读写,1=只读)
 +
 +
 +
 +### player.GetBackpackOtherTarget()
 +
 +> 获取玩家**额外的观察背包实例**。
 +
 +```javascript
 +function player.GetBackpackOtherTarget(): Backpack
 +```
 +
 +
 +
 +### player.SetBackpackTempProp()
 +
 +> 设置玩家**临时背包物品**(随鼠标移动的临时选项),可设置为`null`。
 +
 +```javascript
 +function player.SetBackpackTempProp( prop: Prop )
 +```
 +
 +
 +
 +### player.GetBackpackTempProp()
 +
 +> 获取玩家**临时背包物品**(随鼠标移动的临时选项),如不存在则为`prop.IsValid() == false`。
 +
 +```javascript
 +function player.GetBackpackTempProp(): Prop
 +```
 +
 +
 +
 +### player.ReturnBackpackTempProp()
 +
 +> 尝试返回玩家**临时背包物品**(随鼠标移动的临时选项),尝试自动将临时物品添加到背包。
 +>
 +> 此方法与玩家**存在临时物品时关闭背包**效果相同,如果有空位则自动添加到背包并移出临时物品,如果没有空位则触发丢弃事件。
 +>
 +> **注意:有时可能希望处理玩家的背包(例如清空背包),但有可能玩家正在操作临时物品,这样的话`Backpack`常规方式不会处理到临时物品,因此需要留意玩家手中的临时物品。**
 +
 +```javascript
 +function player.ReturnBackpackTempProp(): bool
 +```
 +
 +- `return`:是否正常返回(如果没有临时物品,也会返回`true`)
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +