meta data for this page
  •  

📚 差别

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

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
scripting:world:player [2025/05/31 19:05] bibiboxsscripting: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`,决定是否允许后续操作
  
  
行 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(): Character 
 ``` ```
  
行 783: 行 766:
 ### player.Ban() ### player.Ban()
  
-> 从服务器封禁玩家(仅在当前服务器运行时生效,重启服务器将清空封禁列表)。+> 从服务器封禁玩家(仅在服务器运行时生效,重启服务器将清空封禁列表)。
 > >
 > 如果希望实现持久化的封禁列表,请考虑自行实现维护一个`txt|json`文件表,在每次服务器建立后读取文件+遍历执行`Player.BanUUID()`。 > 如果希望实现持久化的封禁列表,请考虑自行实现维护一个`txt|json`文件表,在每次服务器建立后读取文件+遍历执行`Player.BanUUID()`。
行 790: 行 773:
 function player.Ban( reason: string = "Banned" ) function player.Ban( reason: string = "Banned" )
 ``` ```
- 
- 
- 
-### player.CreateNativeMenu() 
- 
-> 为玩家建立一个`NativeMenu`菜单([NativeMenu菜单](scripting/extend/nativemenu)),用法与[客户端NativeMenu](scripting/client/main)相同。 
- 
-```javascript 
-let view = { 
-    Cover: 5, 
-    Tag: "Test", 
-    Title: "XXX", 
-    Info: "ABC", 
-    Width: 500, 
-    Align: 1, 
-    Layout: 1, 
-    Items: [ 
-        { 
-            Text: "点击:输出玩家Name", 
-            OnClick: () => { 
-                DLog("PlayerName: " + player.Name); 
-            } 
-        },{ 
-            Input: "xxx", 
-            Restrict: "*", 
-            OnFocus: (text) => { 
-                DLog("输入框文本: " + text); 
-            } 
-        },{ 
-            Text: "点击:刷一辆载具+关闭菜单", 
-            OnClick: () => { 
-                Vehicle.Create(10, player.Entity.Pos, player.Entity.Angle); 
-                player.DestroyNativeMenu(); 
-            } 
-        } 
-    ] 
-}; 
- 
-player.CreateNativeMenu(view); 
-``` 
- 
- 
- 
-### player.DestroyNativeMenu() 
- 
-> 为玩家关闭`NativeMenu`菜单,用法与[客户端NativeMenu](scripting/client/main)相同。 
- 
- 
- 
-### player.SetNativeMenuText() 
- 
-> 为玩家关闭`NativeMenu`菜单,用法与[客户端NativeMenu](scripting/client/main)相同。 
  
  
行 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("测试角色", "风平浪静……", -1, -1, [ 
-    { 
-        Button: "Button A",  
-        Action: () => { 
-            DLog("Click A"); 
-        } 
-    },{ 
-        Button: "Button B",  
-        Action: () => { 
-            DLog("Click B"); 
-        } 
-    } 
-], () => { 
-    DLog("OnComplete Invoke!"); 
-}); //1 
-player.StoryDialog("测试角色2", "风平浪静1……", -1, 1124); //2 
-player.StoryDialog("测试角色2", "风平浪静2……", -1, 1124); //3 
-``` 
- 
- 
- 
-### 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布局方将自动切换至`Null2D屏幕偏右)`。==+补充指引有3种不同选择(`0, 1, 2`)
  
 ```javascript ```javascript
-function player.BindKeyPresser( target: any ) +function player.AddGuider( index: int, targetanystyleint = 0, text: string = "", autoDestroy: bool = false )
-/* +
- target可选类型:null\Vector\Entity(Vector\Entity类型将作为3D坐标展示,Entity会有自动跟随) +
-*/ +
-``` +
- +
- +
- +
-### player.AddKeyPresser() +
- +
-> 为玩家建立一个**按键快捷对象**,默认将加入到玩家**屏幕偏右**位置,如果你希望目标UI作为3D空间、跟随实体效果,使用`BindKeyPresser`提前绑定即可。 +
-+
-> 这将在目标玩家的屏幕中显示`[按键] XXXX`的效果(例如`[F]进入此载具`,并为其绑定进入载具的事件)。 +
-+
-> 同时,此功能支持同时**绑定至多6个按键对象**(同列表下,并非不同位置),只需要为其填写不同的index即可。 +
-+
-> **Index目前只是标签占位,排序仍然根据代码添加顺序。** +
- +
-```javascript +
-function player.AddKeyPresser( index: int, keyCodestringtextstring, onPress: Action null ) +
-/* +
- index:指引索引(如索引已存在指引,将会替换修改,一个index只能存在并表示一个指引实例),相当于一个标签作用 +
- keyCode:绑定按键,最好不要和其他按键冲突,除非知道在做什么 +
- text:按键后面的文本内容 +
- onPress:当玩家按下后执行的事件 +
-*/ +
- +
-//通常情况下,如果同时只使用1个指引功能,只需要一直将index填写0即可 +
-//在可能处理多个按键对象的情况下,可以将index作为区分标签作用,比如上车index是100,下车可能是101,这样可以随时用ExistKeyPresser来检查某个按键对象是否存在 +
-``` +
- +
-```javascript +
-//同时绑定多个按键对象的示例 +
-player.AddKeyPresser(0, "F", "进入当前载具", () => { 进入代码... }); +
-player.AddKeyPresser(3, "H", "修复当前载具", () => { 修复代码... }); +
- +
-//此时将会在玩家屏幕中,显示竖向的两行(最多支持6行) +
-【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 = "", autoDestroy: bool = false )+
 /* /*
  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(): bool 
 ``` ```
  
行 1370: 行 1142:
  
  
 +### 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`)