沙盘引擎 (SEngine)

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

用户工具

站点工具


scripting:client:main

📚 差别

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

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
scripting:client:main [2023/09/16 10:47] bibiboxsscripting:client:main [2024/04/04 18:29] (当前版本) bibiboxs
行 5: 行 5:
  
 ==**有关世界内容的玩法(如:Player、Character、Vehicle等)建议优先使用`World`脚本实现。**== ==**有关世界内容的玩法(如:Player、Character、Vehicle等)建议优先使用`World`脚本实现。**==
 +
 +> 如果有某些功能只有ClientAPI支持,可以用`SendDataToServer`相关方法与服务端进行二次通信,以实现**“通过服务端让某个玩家执行一个ClientAPI”**。
  
  
行 13: 行 15:
  
 > 当**客户端脚本**被完整加载后调用。 > 当**客户端脚本**被完整加载后调用。
 +
 +> **注意:此事件并非是客户端首个运行事件,通常会等待`Player`完整加载后才会执行,因此部分有关`OnPlayerXXX`的事件可能会更加提前。**
  
  
行 24: 行 28:
 ### OnFrameUpdate( deltaTime ) ### OnFrameUpdate( deltaTime )
  
-> 当脚本加载完成后每帧调用。+> 当脚本加载完成后**每帧**调用。
  
 由于此事件属于**客户端脚本**范畴,所以可以理解为每帧渲染事件,无须担心延迟问题。 由于此事件属于**客户端脚本**范畴,所以可以理解为每帧渲染事件,无须担心延迟问题。
行 30: 行 34:
 ``` ```
 deltaTime:float //增量时间 deltaTime:float //增量时间
 +```
 +
 +
 +
 +### OnFixedUpdate( fixedDeltaTime )
 +
 +> 当脚本加载完成后**固定增量时间**调用(与[Unity原理](https://blog.csdn.net/hang981601026/article/details/79640678 "Unity原理")相同)。
 +
 +此事件会以`FixedUpdate`的方式每隔固定时间调用,通常情况下可以忽略使用此事件。
 +
 +```
 +fixedDeltaTime:float //增量时间
 ``` ```
  
行 117: 行 133:
  
 ```javascript ```javascript
-function Exec( string code )+function Exec( code: string ) 
 +``` 
 + 
 + 
 + 
 +### OpenUrl() 
 + 
 +> 请求访问一个网络或本地路径,执行后将由玩家决定是否打开Url。 
 +
 +> 如果希望访问一个本地路径(或执行),请将url路径前增加`file://`路径前缀。 
 + 
 +```javascript 
 +function OpenUrl( url: string ) 
 +``` 
 + 
 + 
 + 
 +### LockGameMenu() 
 + 
 +> 激活内置主菜单界面(锁定常驻显示,并**屏蔽Esc菜单**),并绑定其中的一项(索引`0\1`,只限2项)。 
 +
 +> 如果对于模组主菜单**没有特殊\高级自定义需求**(否则应该考虑使用FairyGUI自制菜单),可以通过此方法**极快速**的建立一个**游戏原生主菜单**(类似:静态锁定的ESC菜单样式)。 
 +
 +> 引擎目前仅支持自定义2个按钮项目(放置在顶部`0\1`),开发者可分别为其绑定【索引、按钮标题、按钮说明、按钮事件】。 
 +
 +> **注意:此方法通常只需要在设为主菜单的场景执行一次,并且只在当前场景生效,==切换场景后将会自动解除绑定==(自动执行`UnlockGameMenu()`)。** 
 + 
 +```javascript 
 +function LockGameMenu( index: int, title: string, info: string, callback: Action ) 
 +``` 
 + 
 +```javascript 
 +function OnScriptLoad() 
 +
 + LockGameMenu(0, "启动主机", "建立本地联机服务器", () => { 
 + CreateHost("mapname", "scriptname"); 
 + }); 
 + LockGameMenu(1, "[color=#ffff00]加入本地服务器[/color]", "加入本地服务器(127.0.0.1)", () => { 
 + ConnectHost("127.0.0.1"); 
 + }); 
 +
 +``` 
 + 
 + 
 + 
 +### UnlockGameMenu() 
 + 
 +> 解除绑定内置主菜单界面按钮项目。 
 +
 +> 如果解除后已经不存在任何自定义绑定项目,将自动关闭菜单并重设为**默认Esc菜单模式**。 
 +
 +> **注意:如果参数设为-1,则表示解除全部项目。** 
 + 
 +```javascript 
 +function UnlockGameMenu( index: int = -1 ) 
 +``` 
 + 
 + 
 + 
 +### SetGameMenuBGEffect() 
 + 
 +> 设置游戏菜单背景效果开关(通常为`Blur`效果),默认开启,**模组周期全局生效**。 
 + 
 +```javascript 
 +function SetGameMenuBGEffect( active: bool = true )
 ``` ```
  
行 135: 行 215:
 | 1    | 游戏设置               | | 1    | 游戏设置               |
 | 2    | 多人游戏浏览器         | | 2    | 多人游戏浏览器         |
-| 4    | MOD模组管理            |+| 4    | ~~MOD模组管理~~        |
  
 *尽管有些ID没有被表格记录,但有可能仍然是有内容的,但未被记录的ID通常不具备通用性意义,在打开时将会别引擎阻断。* *尽管有些ID没有被表格记录,但有可能仍然是有内容的,但未被记录的ID通常不具备通用性意义,在打开时将会别引擎阻断。*
行 146: 行 226:
  
 ```javascript ```javascript
-function ExistNativeView( int type ): bool+function ExistNativeView( type: int ): bool
 ``` ```
  
行 156: 行 236:
  
 ```javascript ```javascript
-DestroyNativeView(int type = -1, bool hasEffect = true)+function DestroyNativeView(type: int = -1, hasEffect: bool = true)
 //如果不填写参数(-1),则默认关闭所有内置UI面板 //如果不填写参数(-1),则默认关闭所有内置UI面板
 //如果hasEffect == false则立即关闭面板 //如果hasEffect == false则立即关闭面板
行 168: 行 248:
  
 ```javascript ```javascript
-function LoadNativeScene( int type )+function LoadNativeScene( type: int )
 ``` ```
  
行 227: 行 307:
 ### SetChatEnabled() ### SetChatEnabled()
  
-> 设置是否允许开启游戏聊天窗口,默认为`true`,否则将无法通过正常方式打聊天框(但可正常收到消息)+> 设置游戏聊天
 > >
 > *此功能可用作主菜单界面,此时通常不希望玩家使用“聊天”功能。* > *此功能可用作主菜单界面,此时通常不希望玩家使用“聊天”功能。*
行 237: 行 317:
  
  
-###ScreenFade()+### GetChatEnabled() 
 + 
 +> 获取游戏聊天框开关。 
 + 
 +```javascript 
 +function GetChatEnabled(): bool 
 +``` 
 + 
 + 
 + 
 +### SetChatPanelPivot() 
 + 
 +> 设置游戏聊天框锚点位置(强制),默认值为`-1`(遵循游戏默认设置),通过此方法设定位置后,即使玩家在游戏选项设置了锚点位置,也会优先使用当前方法所设置的位置。 
 +
 +> *此功能适用于部分U丰富的模组,可能不希望聊天框占用模组UI位置(例如血条、状态条、信息面板等),可以使用此方法强制设定聊天框位置。* 
 + 
 +```javascript 
 +function SetChatPanelPivot( pivot: int = -1 ) 
 +``` 
 +```javascript 
 +SetChatPanelPivot(-1); //Use engine config (default) 
 +SetChatPanelPivot(0); //Change pivot to Left_Top 
 +SetChatPanelPivot(1); //Change pivot to Left_Center 
 +SetChatPanelPivot(2); //Change pivot to Left_Bottom 
 +``` 
 + 
 + 
 + 
 +### ScreenFade()
  
 > 执行一次全屏转场(`Alpha: 0 -> 1 -> 0`)。 > 执行一次全屏转场(`Alpha: 0 -> 1 -> 0`)。
  
 ```javascript ```javascript
-function ScreenFade( time: float, middleTime = 0, color: Color = Color(0, 0, 0), onMiddle = null, ignoreHit: bool = true )+function ScreenFade( time: float, middleTime = 0, color: Color = Color(0, 0, 0), isTop: bool = true, onMiddle = null, ignoreHit: bool = true )
 /* /*
  time:渐变时间(渐入>不透明>渐出),例如设置为2,则表示0~1秒变不透明,1~2秒变透明  time:渐变时间(渐入>不透明>渐出),例如设置为2,则表示0~1秒变不透明,1~2秒变透明
  middleTime:不透明延迟时间,默认为0,否则将等待X秒后再进行透明渐变  middleTime:不透明延迟时间,默认为0,否则将等待X秒后再进行透明渐变
  color:颜色,默认为黑色  color:颜色,默认为黑色
 + isTop:是否顶层,默认为true
  onMiddle:可选委托事件,当颜色完成不透明时调用  onMiddle:可选委托事件,当颜色完成不透明时调用
  ignoreHit:转场是否屏蔽点击,默认为true  ignoreHit:转场是否屏蔽点击,默认为true
行 259: 行 368:
  
 ```javascript ```javascript
-function ScreenFadeIn( time: float, color: Color = Color(0, 0, 0), onComplete = null, ignoreHit: bool = true )+function ScreenFadeIn( time: float, color: Color = Color(0, 0, 0), isTop: bool = true, onComplete = null, ignoreHit: bool = true )
 /* /*
  time:整体时间(渐入>不透明)  time:整体时间(渐入>不透明)
  color:颜色,默认为黑色  color:颜色,默认为黑色
 + isTop:是否顶层,默认为true
  onComplete:可选委托事件,当颜色完成不透明时调用  onComplete:可选委托事件,当颜色完成不透明时调用
  ignoreHit:转场是否屏蔽点击,默认为true  ignoreHit:转场是否屏蔽点击,默认为true
行 275: 行 385:
  
 ```javascript ```javascript
-function ScreenFadeOut( time: float, color: Color = Color(0, 0, 0), onComplete = null, ignoreHit: bool = true )+function ScreenFadeOut( time: float, color: Color = Color(0, 0, 0), isTop: bool = true, onComplete = null, ignoreHit: bool = true )
 /* /*
  time:整体时间(不透明>渐出)  time:整体时间(不透明>渐出)
  color:颜色,默认为黑色  color:颜色,默认为黑色
 + isTop:是否顶层,默认为true
  onComplete:可选委托事件,当颜色完成透明时调用  onComplete:可选委托事件,当颜色完成透明时调用
  ignoreHit:转场是否屏蔽点击,默认为true  ignoreHit:转场是否屏蔽点击,默认为true
行 286: 行 397:
  
  
-### SetCursor()+### Transition()
  
-设置当前使用的光标ID,默认为`0`,具体类型样式参考[《世界资源实例汇总》](reference/instances)。 +执行一次全屏转场特效(`Alpha: -1 -0`)不同的`type`有不同的效果
-> +
-每次加载新的世界场景后光标样式将重置到默认值+
  
 ```javascript ```javascript
-function SetCursorcursorID: int )+function Transitiontype: int, addTime: float = 0, color: Color = Color(255, 255, 255), action: Action = null, isOut: bool = false )
 ``` ```
  
 +- **type:**转场特效类型
 +- **addTime:**转场中途覆盖后,等待的延迟时间(默认为`0`,即为立即渐出)
 +- **color:**转场特效颜色
 +- **action:**当转场中途完全覆盖时执行代码
 +- **isOut:**是否立即淡出
  
 +| Type | 说明                                   |
 +| ---- | -------------------------------------- |
 +| 0    | 平滑淡入、淡出                         |
 +| 1    | 左右对撞、撞开                         |
 +| 2    | 上下对撞、撞开                         |
 +| 3    | 向右推动覆盖、继续向右移出             |
 +| 4    | 上下分别向左右推动覆盖(类似街机游戏) |
 +| 5    | 圆圈缩小覆盖、放大淡出                 |
 +| 6    | 方块旋转覆盖、类似相机镜头             |
 +| 7    | 多个方块覆盖、淡出                     |
 +| 8    | 多个菱形覆盖、淡出                     |
 +| 9    | 画笔涂擦覆盖、淡出                     |
 +| 10   | 噪声覆盖、淡出                         |
 +| 11   | 液体覆盖、淡出                         |
  
-### GetCursor() 
  
-> 获取当前使用的光标ID,默认为`0`。 
- 
-```javascript 
-function GetCursor(): int 
-``` 
  
  
行 383: 行 505:
 > >
 > **补充:此方法设置的按键应该为【默认按键】,后续如果玩家自定义修改按键(如B),即使代码定义的仍然是【如H】,也会自动识别为玩家修改的【B】键。** > **补充:此方法设置的按键应该为【默认按键】,后续如果玩家自定义修改按键(如B),即使代码定义的仍然是【如H】,也会自动识别为玩家修改的【B】键。**
 +>
 +> ==(出于安全考虑,此类敏感方法无法修改引擎内置按键,且仅限本地客户端使用,由主机下载的脚本无法使用)==
  
 ```javascript ```javascript
行 433: 行 557:
  
 > 取消绑定一个**模组公开按键**,对其按键监听不再生效。 > 取消绑定一个**模组公开按键**,对其按键监听不再生效。
 +
 +> (出于安全考虑,此类敏感方法无法修改引擎内置按键,且仅限本地客户端使用,由主机下载的脚本无法使用)
  
 ```javascript ```javascript
行 442: 行 568:
 ### UnbindAllNativeKey() ### UnbindAllNativeKey()
  
-> 取消绑定所有**模组公开按键**,对其按键监听不再生效。+> 取消绑定所有**模组公开按键**,对其按键监听不再生效()
  
 ```javascript ```javascript
行 455: 行 581:
 > >
 > 如果是在公开状态下,默认因为没有翻译,会显示为一串翻译代码路径,可照葫芦画瓢**修改翻译文件**以正确显示文本。 > 如果是在公开状态下,默认因为没有翻译,会显示为一串翻译代码路径,可照葫芦画瓢**修改翻译文件**以正确显示文本。
 +>
 +> ==(出于安全考虑,此类敏感方法无法修改引擎内置选项,且仅限本地客户端使用,由主机下载的脚本无法使用)==
  
 ```javascript ```javascript
行 498: 行 626:
 > 从模组空间目录`Mod/Space`读取一个文件,如果文件不存在则反馈空白文本。 > 从模组空间目录`Mod/Space`读取一个文件,如果文件不存在则反馈空白文本。
 > >
-注意:由于安全原因Client脚本无法写入文件,只有World脚本可写入。+==(出于安全考虑此方对应**写入权限**仅限World脚本使用)==
  
 ```javascript ```javascript
 function ReadFile( path: string ): string function ReadFile( path: string ): string
 ``` ```
 +
 +
 +
 +### GetModArchive()
 +
 +> 尝试读取**指定模组**的持久化存储数据(可通过`SetModArchive()`写入修改),如不存在则返回空文本。
 +>
 +> 注意:如果不填写参数,默认获取当前模组的数据。
 +
 +```javascript
 +function GetModArchive( package: string = null ): string
 +```
 +
 +
 +
 +### GetSaveItem()
 +
 +> 尝试读取【存档数据槽(`Slot`)】指定`Key`的项目内容,如不存在则返回`defaultValue`。
 +
 +```javascript
 +function GetSaveItem( key: string, slot: int = 0, defaultValue: any = null ): any
 +```
 +
 +```javascript
 +SetSaveItem("gold", 1000); //Save file to 'SaveData/SaveData_0.json'
 +DLog("Your coin: " + GetSaveItem("gold"));
 +```
 +
 +
 +
 +### ExistSaveItem()
 +
 +> 判断【存档数据槽(`Slot`)】指定`Key`的**项目内容是否为空(`bool`)**。
 +
 +```javascript
 +function ExistSaveItem( key: string, slot: int = 0 ): bool
 +```
 +
 +```javascript
 +DLog(ExistSaveItem("gold"));
 +```
 +
 +
 +
 +### ExistSaveData()
 +
 +> 判断【存档数据槽(`Slot`)】存档文件是否已被创建(`bool`)。
 +
 +```javascript
 +function ExistSaveData( slot: int = 0 ): bool
 +```
 +
 +
 +
 +
 +
 +
  
  
scripting/client/main.1694832467.txt.gz · 最后更改: 2023/09/16 10:47 由 bibiboxs