meta data for this page
📚 差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
scripting:world:player [2025/05/30 22:38] – bibiboxs | scripting:world:player [2025/07/26 22:49] (当前版本) – bibiboxs | ||
---|---|---|---|
行 159: | 行 159: | ||
> 当玩家名称发生改变时调用。 | > 当玩家名称发生改变时调用。 | ||
+ | |||
+ | |||
+ | |||
+ | ### OnPlayerBackpackPropOperation( player, slot, isMain, isShift ) | ||
+ | |||
+ | > 当玩家背包请求操作物品时调用。 | ||
+ | > | ||
+ | > 此方法可配合`player.GetBackpackTempProp()`使用。 | ||
+ | |||
+ | - `isMain`:是否为左键(主要)点击(否则为右键) | ||
+ | - `isShift`:是否按住Shift键 | ||
+ | - `return`:默认返回`true`,决定是否允许后续操作 | ||
行 166: | 行 178: | ||
> 当玩家背包请求扔掉物品时调用。 | > 当玩家背包请求扔掉物品时调用。 | ||
- | - `isDelete`:是否为请求删除(否则视为丢弃) | + | - `isDelete`:是否为请求删除物品(否则视为丢弃) |
+ | - `return`:默认返回`true`,决定是否允许后续操作 | ||
行 436: | 行 449: | ||
### player.FocusEntityDistance | ### player.FocusEntityDistance | ||
- | > 获取玩家**视角焦点实体检测距离**,此数值直接影响`FocusEntity`的检测结果,默认距离为`2.0`。 | + | > 获取玩家**视角焦点实体检测距离**,此数值直接影响`FocusEntity`的检测结果,默认距离为`3.0`(`0.0~512.0`)。 |
> | > | ||
> **注意:对于远距离视角、鸟瞰视角等情况,应该在合理范围内调高此数值,否则可能距离过短导致无法正确检测。** | > **注意:对于远距离视角、鸟瞰视角等情况,应该在合理范围内调高此数值,否则可能距离过短导致无法正确检测。** | ||
行 737: | 行 750: | ||
player.SetEntity(chara); | player.SetEntity(chara); | ||
} | } | ||
- | ``` | ||
- | |||
- | |||
- | |||
- | ### player.SetObserver() | ||
- | |||
- | [note2] | ||
- | 此方法已过时,已在新版本移除。 | ||
- | [/note] | ||
- | |||
- | > 设置玩家视角观察对象(`Client.Camera.Target`)。 | ||
- | > | ||
- | > 设置为`null`可恢复观察控制`character.Entity`。 | ||
- | |||
- | ```javascript | ||
- | function player.SetObserver( character: Character ) | ||
- | ``` | ||
- | |||
- | |||
- | |||
- | ### player.GetObserver() | ||
- | |||
- | [note2] | ||
- | 此方法已过时,已在新版本移除。 | ||
- | [/note] | ||
- | |||
- | > 获取玩家视角观察对象(`Client.Camera.Target`),如未观察其他角色则返回`character.Entity`,否则返回`null`。 | ||
- | |||
- | ```javascript | ||
- | function player.GetObserver(): | ||
``` | ``` | ||
行 783: | 行 766: | ||
### player.Ban() | ### player.Ban() | ||
- | > 从服务器封禁玩家(仅在当前服务器运行时生效,重启服务器后将清空封禁列表)。 | + | > 从服务器封禁玩家(仅在服务器运行时生效,重启服务器将清空封禁列表)。 |
> | > | ||
> 如果希望实现持久化的封禁列表,请考虑自行实现维护一个`txt|json`文件表,在每次服务器建立后读取文件+遍历执行`Player.BanUUID()`。 | > 如果希望实现持久化的封禁列表,请考虑自行实现维护一个`txt|json`文件表,在每次服务器建立后读取文件+遍历执行`Player.BanUUID()`。 | ||
行 790: | 行 773: | ||
function player.Ban( reason: string = " | function player.Ban( reason: string = " | ||
``` | ``` | ||
- | |||
- | |||
- | |||
- | ### player.CreateNativeMenu() | ||
- | |||
- | > 为玩家建立一个`NativeMenu`菜单([NativeMenu菜单](scripting/ | ||
- | |||
- | ```javascript | ||
- | let view = { | ||
- | Cover: 5, | ||
- | Tag: " | ||
- | Title: " | ||
- | Info: " | ||
- | Width: 500, | ||
- | Align: 1, | ||
- | Layout: 1, | ||
- | Items: [ | ||
- | { | ||
- | Text: " | ||
- | OnClick: () => { | ||
- | DLog(" | ||
- | } | ||
- | },{ | ||
- | Input: " | ||
- | Restrict: " | ||
- | OnFocus: (text) => { | ||
- | DLog(" | ||
- | } | ||
- | },{ | ||
- | Text: " | ||
- | OnClick: () => { | ||
- | Vehicle.Create(10, | ||
- | player.DestroyNativeMenu(); | ||
- | } | ||
- | } | ||
- | ] | ||
- | }; | ||
- | |||
- | player.CreateNativeMenu(view); | ||
- | ``` | ||
- | |||
- | |||
- | |||
- | ### player.DestroyNativeMenu() | ||
- | |||
- | > 为玩家关闭`NativeMenu`菜单,用法与[客户端NativeMenu](scripting/ | ||
- | |||
- | |||
- | |||
- | ### player.SetNativeMenuText() | ||
- | |||
- | > 为玩家关闭`NativeMenu`菜单,用法与[客户端NativeMenu](scripting/ | ||
行 871: | 行 802: | ||
```javascript | ```javascript | ||
function player.Subtitle( text: string ) | function player.Subtitle( text: string ) | ||
- | ``` | ||
- | |||
- | |||
- | |||
- | ### player.StoryDialog() | ||
- | |||
- | > 为玩家发送一条**故事对话框**消息,并加入到队列中,等待上次对话框结束后陆续执行。 | ||
- | > | ||
- | > **解释:此方法执行后可能不会立即显示,默认会加入到队列中,按加入顺序依次执行历史对话框。** | ||
- | |||
- | ```javascript | ||
- | function player.StoryDialog( title: string, text: string, avatar: int = -1, sound: int = -1, buttons: any = null, onComplete: Action = null ) | ||
- | ``` | ||
- | |||
- | - **title:**标题、故事对话人昵称 | ||
- | - **text:**主要文本内容(可用`html`语法,以及`\n`换行) | ||
- | - **avatar:**故事对话人形象图片ID(基于Texture文件机制),默认为`-1` | ||
- | - **sound:**故事对话时音频ID(例如配音等,基于Sound文件机制),默认为`-1`,仅在当前对话框生命周期有效,对话结束(或切换对话框)后将自动停止播放 | ||
- | - **buttons:**附加按钮(最多支持3个),以数组的形式传递数据(见下方示例) | ||
- | - **onComplete:**对话结束时触发事件 | ||
- | |||
- | ```javascript | ||
- | player.StoryDialog(" | ||
- | { | ||
- | Button: " | ||
- | Action: () => { | ||
- | DLog(" | ||
- | } | ||
- | },{ | ||
- | Button: " | ||
- | Action: () => { | ||
- | DLog(" | ||
- | } | ||
- | } | ||
- | ], () => { | ||
- | DLog(" | ||
- | }); //1 | ||
- | player.StoryDialog(" | ||
- | player.StoryDialog(" | ||
- | ``` | ||
- | |||
- | |||
- | |||
- | ### player.NextStoryDialog() | ||
- | |||
- | > 为玩家切换下一个**故事对话框(如有队列)**,相当于自动为玩家执行了跳过方法,并且会忽略Buttons焦点(无论是否设置Buttons,都会切换到下一个队列)。 | ||
- | |||
- | ```javascript | ||
- | function player.NextStoryDialog() | ||
- | ``` | ||
- | |||
- | |||
- | |||
- | ### player.ClearStoryDialog() | ||
- | |||
- | > 为玩家清空**故事对话框队列**,并结束全部故事对话框(会触发队列最后一个`OnComplete`)。 | ||
- | |||
- | ```javascript | ||
- | function player.ClearStoryDialog() | ||
``` | ``` | ||
行 945: | 行 817: | ||
function NetworkRPC( rpc: string, arg0: any, arg1: any, arg2: any ) | function NetworkRPC( rpc: string, arg0: any, arg1: any, arg2: any ) | ||
``` | ``` | ||
+ | |||
行 1121: | 行 994: | ||
- | ### player.BindKeyPresser() | + | ### player.AddGuider() |
- | > 为玩家绑定**按键快捷对象**的UI布局方式(2D屏幕、3D坐标、实体对象跟随),具体取决于参数类型。 | + | > 为玩家建立一个指引目标(屏幕边缘箭头),允许附加指引文字(支持宏文本)。 |
> | > | ||
- | > ==注意:每次建立的**按键快捷对象**全部移出后,再次建立时,UI布局方式将自动切换至`Null(2D屏幕偏右)`。== | + | > 补充:指引有3种不同的样式选择(`0, 1, 2`)。 |
```javascript | ```javascript | ||
- | function player.BindKeyPresser( target: any ) | + | function player.AddGuider( index: int, target: any, style: int = 0, text: string = "", |
- | /* | + | |
- | target可选类型:null\Vector\Entity(Vector\Entity类型将作为3D坐标展示,Entity会有自动跟随) | + | |
- | */ | + | |
- | ``` | + | |
- | + | ||
- | + | ||
- | + | ||
- | ### player.AddKeyPresser() | + | |
- | + | ||
- | > 为玩家建立一个**按键快捷对象**,默认将加入到玩家**屏幕偏右**位置,如果你希望目标UI作为3D空间、跟随实体效果,使用`BindKeyPresser`提前绑定即可。 | + | |
- | > | + | |
- | > 这将在目标玩家的屏幕中显示`[按键] XXXX`的效果(例如`[F]进入此载具`,并为其绑定进入载具的事件)。 | + | |
- | > | + | |
- | > 同时,此功能支持同时**绑定至多6个按键对象**(同列表下,并非不同位置),只需要为其填写不同的index即可。 | + | |
- | > | + | |
- | > **Index目前只是标签占位,排序仍然根据代码添加顺序。** | + | |
- | + | ||
- | ```javascript | + | |
- | function player.AddKeyPresser( index: int, keyCode: string, text: string, onPress: Action | + | |
- | /* | + | |
- | index:指引索引(如索引已存在指引,将会替换修改,一个index只能存在并表示一个指引实例),相当于一个标签作用 | + | |
- | keyCode:绑定按键,最好不要和其他按键冲突,除非知道在做什么 | + | |
- | text:按键后面的文本内容 | + | |
- | onPress:当玩家按下后执行的事件 | + | |
- | */ | + | |
- | + | ||
- | // | + | |
- | // | + | |
- | ``` | + | |
- | + | ||
- | ```javascript | + | |
- | // | + | |
- | player.AddKeyPresser(0, | + | |
- | player.AddKeyPresser(3, | + | |
- | + | ||
- | // | + | |
- | 【F】进入当前载具 | + | |
- | 【H】修复当前载具 | + | |
- | ``` | + | |
- | + | ||
- | + | ||
- | + | ||
- | ### player.RemoveKeyPresser() | + | |
- | + | ||
- | > 为玩家移除一个**按键快捷对象**。 | + | |
- | > | + | |
- | > ==注意:每次建立的**按键快捷对象**全部移出后,再次建立时,UI布局方式将自动切换至`Null(2D屏幕右下)`。== | + | |
- | + | ||
- | ```javascript | + | |
- | function player.RemoveKeyPresser( index: int ) | + | |
- | ``` | + | |
- | + | ||
- | + | ||
- | + | ||
- | ### player.ExistKeyPresser() | + | |
- | + | ||
- | > 获取玩家**指定索引**的**按键快捷对象**是否存在。 | + | |
- | + | ||
- | ```javascript | + | |
- | function player.ExistKeyPresser( index: int ): bool | + | |
- | ``` | + | |
- | + | ||
- | + | ||
- | + | ||
- | ### player.ClearKeyPressers() | + | |
- | + | ||
- | > 移除玩家所有**按键快捷对象**。 | + | |
- | > | + | |
- | > ==注意:每次建立的**按键快捷对象**全部移出后,再次建立时,UI布局方式将自动切换至`Null(2D屏幕右下)`。== | + | |
- | + | ||
- | ```javascript | + | |
- | function player.ClearKeyPressers() | + | |
- | ``` | + | |
- | + | ||
- | + | ||
- | + | ||
- | ### player.AddGuider() | + | |
- | + | ||
- | > 为玩家建立一个指引目标(屏幕边缘箭头),允许附加指引文字。 | + | |
- | + | ||
- | ```javascript | + | |
- | function player.AddGuider( index: int, target: any, text: string = "", | + | |
/* | /* | ||
index:指引索引(如索引已存在指引,将会替换修改,一个index只能存在并表示一个指引实例),相当于一个标签作用 | index:指引索引(如索引已存在指引,将会替换修改,一个index只能存在并表示一个指引实例),相当于一个标签作用 | ||
target:目标对象(可以是Vector|Entity等类型,分别表示静态坐标与动态跟随目标) | target:目标对象(可以是Vector|Entity等类型,分别表示静态坐标与动态跟随目标) | ||
+ | style:指引样式 | ||
text:指引文字 | text:指引文字 | ||
autoDestroy:到达指引目标附近是否自动移除指引,默认为false | autoDestroy:到达指引目标附近是否自动移除指引,默认为false | ||
行 1239: | 行 1031: | ||
```javascript | ```javascript | ||
function player.ExistGuider( index: int ): bool | function player.ExistGuider( index: int ): bool | ||
- | ``` | ||
- | |||
- | |||
- | |||
- | ### player.SetCinematicBorder() | ||
- | |||
- | > 设置玩家屏幕电影边框开关,与客户端API作用相同。 | ||
- | |||
- | ```javascript | ||
- | function player.SetCinematicBorder( active: bool, time: float = 1.0 ): bool | ||
- | ``` | ||
- | |||
- | |||
- | |||
- | ### player.GetCinematicBorder() | ||
- | |||
- | > 获取玩家屏幕电影边框开关。 | ||
- | |||
- | ```javascript | ||
- | function player.GetCinematicBorder(): | ||
``` | ``` | ||
行 1368: | 行 1140: | ||
``` | ``` | ||
+ | |||
+ | |||
+ | ### 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`) | ||