meta data for this page
📚 差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
scripting:world:player [2024/12/09 22:19] – bibiboxs | scripting: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, | + | ### OnPlayerWorldChange( player, |
- | > 当玩家按下**服务器监听的原生公开按键**时调用,只有服务器监听的原生按键才会触发。 | + | > 当玩家世界ID发生改变时调用。 |
- | ### OnPlayerNativeKeyUp( player, | + | ### OnPlayerColorChange( player, |
- | > 当玩家抬起**服务器监听的原生公开按键**时调用,只有服务器监听的原生按键才会触发。 | + | > 当玩家颜色发生改变时调用。 |
- | ### OnPlayerWorldChange( player, | + | ### OnPlayerNameChange( player, |
- | > 当玩家世界ID发生改变时调用。 | + | > 当玩家名称发生改变时调用。 |
- | ### OnPlayerColorChange( player, | + | ### OnPlayerBackpackPropOperation( player, |
- | > 当玩家颜色发生改变时调用。 | + | > 当玩家背包请求操作物品时调用。 |
+ | > | ||
+ | > 此方法可配合`player.GetBackpackTempProp()`使用。 | ||
+ | - `isMain`:是否为左键(主要)点击(否则为右键) | ||
+ | - `isShift`:是否按住Shift键 | ||
+ | - `return`:默认返回`true`,决定是否允许后续操作 | ||
- | ### OnPlayerNameChange( player, name ) | ||
- | > 当玩家名称发生改变时调用。 | + | ### OnPlayerBackpackPropDiscard( player, prop, isDelete ) |
+ | |||
+ | > 当玩家背包请求扔掉物品时调用。 | ||
+ | |||
+ | - `isDelete`:是否为请求删除物品(否则视为丢弃) | ||
+ | - `return`:默认返回`true`,决定是否允许后续操作 | ||
行 354: | 行 387: | ||
```javascript | ```javascript | ||
player.Character: | player.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 |
- | > 设置& | + | > 获取玩家**视角焦点实体**,如果不存在则返回`null`。 |
+ | |||
+ | ```javascript | ||
+ | player.FocusEntity: | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### player.FocusEntityDistance | ||
+ | |||
+ | > 获取玩家**视角焦点实体检测距离**,此数值直接影响`FocusEntity`的检测结果,默认距离为`3.0`(`0.0~512.0`)。 | ||
+ | > | ||
+ | > **注意:对于远距离视角、鸟瞰视角等情况,应该在合理范围内调高此数值,否则可能距离过短导致无法正确检测。** | ||
+ | |||
+ | ```javascript | ||
+ | player.FocusEntityDistance: | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### player.FocusVAngle | ||
+ | |||
+ | > 设置& | ||
+ | |||
+ | ```javascript | ||
+ | player.FocusVAngle: | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### player.FocusHAngle | ||
+ | |||
+ | > 设置& | ||
+ | |||
+ | ```javascript | ||
+ | player.FocusHAngle: | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### player.FocusEulerAngle | ||
+ | |||
+ | > 设置& | ||
> | > | ||
- | > 在玩家不同视角模式(`Client.Camera.Mode`)下,坐标获取方式会发生变化。 | + | > 在玩家不同视角模式(`Client.Camera.Mode`)下,坐标处理方式会发生变化。 |
+ | |||
+ | [note2] | ||
+ | 注意:多数情况下,应该使用`Client\Camera`实现视角相关逻辑。 | ||
+ | [/note] | ||
```javascript | ```javascript | ||
player.FocusAngle: | player.FocusAngle: | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### player.FocusAngleForward | ||
+ | |||
+ | > 获取玩家**控制焦点**前方向量。 | ||
+ | > | ||
+ | > 在玩家不同视角模式(`Client.Camera.Mode`)下,坐标处理方式会发生变化。 | ||
+ | |||
+ | ```javascript | ||
+ | player.FocusAngleForward: | ||
``` | ``` | ||
行 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(" | Player.Search(" | ||
Player.Search(" | Player.Search(" | ||
+ | Player.Search(" | ||
``` | ``` | ||
行 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 ) | ||
+ | ``` | ||
行 1203: | 行 1330: | ||
### player.SetVoiceAuthority() | ### player.SetVoiceAuthority() | ||
- | > 设置玩家语音聊天**权限**开关(或理解为静音),默认开启(`true`)。 | + | > 设置玩家语音聊天**权限**开关(静音\禁言),默认开启(`true`)。 |
> | > | ||
- | > **==注意:此选项必须设置为`true`,玩家才有资格进行说话,否则玩家将无法在语音聊天中说话。==** | + | > **==注意:此选项必须设置为`true`,玩家才有资格进行说话,否则玩家将无法在语音聊天中说话(禁言Muted)。==** |
> | > | ||
> ==**(此选项并非是玩家麦克风控制开关,安全考虑,只有玩家自行按住【说话按键】时才会录入音频)**== | > ==**(此选项并非是玩家麦克风控制开关,安全考虑,只有玩家自行按住【说话按键】时才会录入音频)**== | ||
```javascript | ```javascript | ||
- | function player.SetVoiceWorldMode( active: bool ) | + | function player.SetVoiceAuthority( active: bool ) |
``` | ``` | ||
行 1242: | 行 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: | ||
+ | ``` | ||
+ | |||
+ | - `observerMode`:观察模式,默认为`0`(0=可读写,1=只读) | ||
+ | |||
+ | |||
+ | |||
+ | ### player.GetBackpackOtherTarget() | ||
+ | |||
+ | > 获取玩家**额外的观察背包实例**。 | ||
+ | |||
+ | ```javascript | ||
+ | function player.GetBackpackOtherTarget(): | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### player.SetBackpackTempProp() | ||
+ | |||
+ | > 设置玩家**临时背包物品**(随鼠标移动的临时选项),可设置为`null`。 | ||
+ | |||
+ | ```javascript | ||
+ | function player.SetBackpackTempProp( prop: Prop ) | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### player.GetBackpackTempProp() | ||
+ | |||
+ | > 获取玩家**临时背包物品**(随鼠标移动的临时选项),如不存在则为`prop.IsValid() == false`。 | ||
+ | |||
+ | ```javascript | ||
+ | function player.GetBackpackTempProp(): | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### player.ReturnBackpackTempProp() | ||
+ | |||
+ | > 尝试返回玩家**临时背包物品**(随鼠标移动的临时选项),尝试自动将临时物品添加到背包。 | ||
+ | > | ||
+ | > 此方法与玩家**存在临时物品时关闭背包**效果相同,如果有空位则自动添加到背包并移出临时物品,如果没有空位则触发丢弃事件。 | ||
+ | > | ||
+ | > **注意:有时可能希望处理玩家的背包(例如清空背包),但有可能玩家正在操作临时物品,这样的话`Backpack`常规方式不会处理到临时物品,因此需要留意玩家手中的临时物品。** | ||
+ | |||
+ | ```javascript | ||
+ | function player.ReturnBackpackTempProp(): | ||
+ | ``` | ||
+ | |||
+ | - `return`:是否正常返回(如果没有临时物品,也会返回`true`) | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||