meta data for this page
  •  

📚 差别

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

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
scripting:world:core [2025/06/13 07:51] – 移除 - 外部编辑 (Unknown date) 127.0.0.1scripting:world:core [2025/08/28 02:49] (当前版本) bibiboxs
行 1: 行 1:
 +<markdown>
 +# ==World/Core==
  
 +## Event
 +
 +### OnScriptLoad()
 +
 +> 当**世界端脚本**被完整加载后调用,==部分API需要放置在此事件执行才有效,因为至此脚本才加载完毕==。
 +>
 +> 如果需要获取到一些初始化传递数据,可通过`SetGlobalVars() | GetGlobalVars()`以及`本地player.UserData`等方式来读写。
 +
 +[note3]
 +**注意:此事件是真正意义上的“脚本加载完成”,因此如果有代码放置在JavaScript空白区域,并不一定会按照预期正确执行,有关初始化的代码建议放置在此处执行。**
 +[/note]
 +
 +```javascript
 +BindKey(...); //Invalid, Script not loaded
 +
 +function OnScriptLoad()
 +{
 + BindKey(...); //Correct
 +}
 +```
 +
 +
 +
 +### OnScriptUnload()
 +
 +> 当脚本即将被释放时调用。
 +
 +
 +
 +### OnFrameUpdate( deltaTime )
 +
 +> 当世界端加载完成后**每逻辑帧(`0.1s`)**调用,不应该将**过于复杂**的函数在此处执行,可能会影响服务器运算。
 +>
 +> **注意:此事件与`Client`同名事件不同,在World端==并非每帧执行==,而是以固定速率的逻辑帧执行。**
 +
 +```javascript
 +function OnFrameUpdate( deltaTime:float )
 +```
 +
 +
 +
 +### OnThrowCastTrigger( tag, point )
 +
 +> 当`ThrowCast`触发碰撞后调用。
 +>
 +> **此方法支持`return bool`(可选),这将影响一些Throw是否执行其自带绑定Action方法,事件返回值默认为`true`。**
 +>
 +> 例如:`CreateThrowCast()`时在末尾参数绑定了一个`Action`,当ThrowCast发生碰撞后会优先调用当前事件,如果此处代码返回`false`则会阻止其**绑定Action**方法执行(如:默认RPG武器等,如果返回`false`将不会产生爆炸效果)。
 +
 +```javascript
 +function OnThrowCastTrigger( tag: string, point: Vector ): bool
 +```
 +
 +```javascript
 +//阻止投掷物引起的爆炸,不会产生爆炸
 +function OnThrowCastTrigger( tag, point )
 +{
 + //tag: throwcast tag
 + //point: collision position
 +
 + //Prop grenade [tag] is "Grenade"
 + if(tag == "Grenade")
 + {
 + DLog("An explosion tagged 'Grenad' was stopped!");
 + return false;
 + }
 +}
 +```
 +
 + 
 +
 +### OnWorldTimeChange( oldTime, newTime )
 +
 +> 当世界时间发生改变时调用。
 +
 +```javascript
 +function OnWorldTimeChange( oldTime, newTime )
 +{
 +    DLog("OldTime: " + oldTime.Hour + "-" + oldTime.Minute);
 +    DLog("NewTime: " + newTime.Hour + "-" + newTime.Minute);
 +}
 +```
 +
 +
 +
 +### OnWorldWeatherChange( oldWeather, newWeather )
 +
 +> 当世界天气发生改变时调用。
 +
 +```javascript
 +function OnWorldWeatherChange( oldWeather: int, newWeather: int )
 +```
 +
 + 
 +
 +### OnServerQueryReceive( data, address )
 +
 +> 当服务器接收到`Query\Gamespy`数据时调用(格式必须是`\xxx\`使用反斜杠包围)。
 +>
 +> **引擎内置数据指令(例如`querystats`等)不会触发此事件。**
 +
 +```javascript
 +function OnServerQueryReceive( data: string, address: string )
 +```
 +
 +
 +
 +### OnConsoleInput( input )
 +
 +> 当**服务端模式**接收到CMD控制台输入时调用,此事件仅在**服务端模式**下生效。
 +
 +```javascript
 +function OnConsoleInput( input : string )
 +```
 +
 +
 +
 +## Function
 +
 +### Exec()
 +
 +> 执行一段脚本代码(Client\World脚本不互通)。
 +
 +```javascript
 +function Exec( jsCode: string )
 +```
 +
 +
 +
 +### SetHostName()
 +
 +> 设置主机房间名称(当主机房间被公开或查询时,单机游戏可以忽略)。
 +>
 +> **默认值:**`Sandtable Engine Server`。
 +
 +```javascript
 +function SetHostName( name: string )
 +```
 +
 +- **name:**主机房间名称文本(最大限制在64字符)。
 +
 +
 +
 +### GetHostName()
 +
 +> 获取主机房间名称。
 +
 +```javascript
 +function GetHostName(): string
 +```
 +
 +
 +
 +### SetHostInfo()
 +
 +> 设置主机房间信息\公告(目前主要用于`TAB`面板封面部分介绍,以及有关房间的介绍信息等)。
 +>
 +> **默认值:`Mod Version: XXX`**。
 +
 +```javascript
 +function SetHostInfo( info: string )
 +```
 +
 +- **info:**主机房间信息\公告(最大限制在64字符)。
 +
 +
 +
 +### GetHostInfo()
 +
 +> 获取主机房间信息\公告。
 +
 +```javascript
 +function GetHostInfo(): string
 +```
 +
 +
 +
 +### SetHostIcon()
 +
 +> 设置主机房间图标形象,ID参考[《资源文档——主机图标》](https://docs.qq.com/sheet/DQUNkY3ZpWWFxSU1o?tab=2l11dq),默认值:`0`。
 +>
 +> 选择贴合模组玩法主题的图标,可能会更吸引玩家。
 +
 +```javascript
 +function SetHostIcon( icon: int )
 +```
 +
 +
 +
 +### GetHostIcon()
 +
 +> 获取主机房间图标形象。
 +
 +```javascript
 +function GetHostIcon(): int
 +```
 +
 +
 +
 +### SetHostAnnounce()
 +
 +> 设置主机服务器搜索可见程度,这将影响服务器是否能被【多人游戏浏览器】成功搜索。
 +
 +```javascript
 +function SetHostAnnounce( announce: int )
 +```
 +
 +| 类型 | 说明                         |
 +| ---- | ---------------------------- |
 +| **0(默认)**    | 公开                         |
 +| 1    | 私有(隐藏互联网列表) |
 +
 +
 +
 +### GetHostAnnounce()
 +
 +> 获取主机服务器搜索可见程度。
 +
 +```javascript
 +function GetHostAnnounce(): int
 +```
 +
 +
 +
 +### SetHostTickRate()
 +
 +> 设置主机网络传输率,数值越高网络同步越流畅,同时也会使用更多的宽带,范围限制`10~100`。
 +>
 +> 引擎默认网络传输率为`30`,开发者可根据不同场景玩法动态调整设置。
 +
 +[note2]
 +
 +理论来说,在保证正常游戏的情况下,更低的网络传输率有助于提升游戏性能,但可能会降低网络同步体验。
 +
 +开发者可以考虑根据自身游戏玩法设定一个最佳数值,或者根据当前游戏性能动态调整数值。
 +
 +[/note]
 +
 +```javascript
 +function SetHostTickRate( tickRate: int )
 +```
 +
 +| 游戏类型                        | 推荐数值 |
 +| ------------------------------- | -------- |
 +| FPS射击、快节奏、高同步率       | 60+      |
 +| **常规游戏、RPG、普通节奏玩法** | 30~60    |
 +| RTS、鸟瞰视角游戏、慢节奏玩法   | 10~30    |
 +
 +**==注意:`TickRate`指服务端逻辑速率,实际表现严重受到【主机FPS\Frame】的影响,主机帧数越高(60+)同步性能越好,开发者可以参考《建立专用服务器》。==**
 +
 +
 +
 +### GetHostTickRate()
 +
 +> 获取主机网络传输率。
 +
 +```javascript
 +function GetHostTickRate(): int
 +```
 +
 +
 +
 +### SetStreamVisualRange()
 +
 +> 设置服务器**流计算可视范围**(距离),实体相对玩家超过指定距离将被认定为**不可见、可见、较远**(影响`Entity.GetVisualRange()`)。
 +>
 +> 此数值允许设定范围:`32.0~128.0`,数值越低渲染&计算范围越小,反之可能会使用更多的性能。
 +
 +```javascript
 +function SetStreamVisualRange( range: float )
 +```
 +
 +
 +
 +### GetStreamVisualRange()
 +
 +> 获取服务器**流计算可视范围**(距离)。
 +
 +```javascript
 +function GetStreamVisualRange(): float
 +```
 +
 +
 +
 +### SetPassword()
 +
 +> 设置主机房间密码(当主机房间被公开或查询时,单机游戏可以忽略)。
 +
 +```javascript
 +function SetPassword( password: string )
 +```
 +
 +
 +
 +### GetPassword()
 +
 +> 获取主机房间密码。
 +
 +```javascript
 +function GetPassword(): string
 +```
 +
 +
 +
 +### SetMaxPlayers()
 +
 +> 设置主机房间最大人数(支持范围`1~100人`)。
 +
 +```javascript
 +function SetMaxPlayers( num: int )
 +```
 +
 +
 +
 +### GetMaxPlayers()
 +
 +> 获取主机房间最大玩家数。
 +
 +```javascript
 +function GetMaxPlayers(): int
 +```
 +
 +
 +
 +### SetTime()
 +
 +> 设置当前游戏世界时间。
 +>
 +> **注意:每次加载新世界场景后,时间都将重新替换为【地图文件配置——默认时间】。**
 +
 +```javascript
 +function SetWorldTime( hour: int, minute: int )
 +```
 +
 +
 +
 +### GetWorldTime()
 +
 +> 获取游戏世界时间实例(`WorldTime`)。
 +
 +```javascript
 +let worldTime = GetWorldTime();
 +DLog("Hour: " + worldTime.Hour + ", Minute: " + worldTime.Minute);
 +```
 +
 +
 +
 +### SetWorldTimeRate()
 +
 +> 设置当前游戏世界时间速率(游戏时间每分钟的时间间隔),默认为`1.0`。
 +>
 +> 此方法是`SetGameRule("timerate")`的快捷API。
 +
 +> **例如:设置为`1.0`表示【游戏时间每分钟=现实时间1秒】。**
 +
 +```javascript
 +function SetWorldTimeRate( rate: float )
 +```
 +
 +
 +
 +### GetWorldTimeRate()
 +
 +> 获取游戏世界时间速率(游戏时间每分钟的时间间隔)。
 +
 +```javascript
 +function GetWorldTimeRate(): float
 +```
 +
 +
 +
 +### SetWorldWeather()
 +
 +> 设置游戏世界天气,具体参考[天气ID](reference/instances)文档。
 +>
 +> **注意:每次加载新世界场景后,天气都将重新替换为【地图文件配置——随机天气(天气池)】。**
 +
 +```javascript
 +function SetWorldWeather( weather: int )
 +```
 +
 +
 +
 +### GetWorldWeather()
 +
 +> 获取游戏世界天气。
 +
 +```javascript
 +function GetWorldWeather(): int
 +```
 +
 +
 +
 +### GetRandomWorldWeather()
 +
 +> 随机获取游戏世界天气,获取方式根据参数决定。
 +
 +```javascript
 +function GetRandomWorldWeather( usePool: bool = true ): int
 +```
 +
 +- `usePool`:是否使用【地图文件天气池】概率随机,否则是索引随机
 +
 +
 +
 +### SetWorldGravity()
 +
 +> 设置游戏世界物理重力,分别为`横向X、纵向Y、前后Z`,默认为`Vector(0.0, -1.0, 0.0)`(正常下落的引力,且没有方向偏移)。
 +
 +```javascript
 +function SetWorldGravity( space: Vector )
 +```
 +
 +
 +
 +### GetWorldGravity()
 +
 +> 获取游戏世界物理重力。
 +
 +```javascript
 +function GetWorldGravity(): Vector
 +```
 +
 +
 +
 +### SetWorldBrightness()
 +
 +> 设置游戏世界亮度偏移,默认为`1.0`。
 +
 +> 对于特定的场景或游戏玩法(如丧尸游戏),开发者可能希望将此值调低以营造更好的黑夜效果。
 +
 +```javascript
 +function SetWorldBrightness( brightness: float )
 +```
 +
 +
 +
 +### GetWorldBrightness()
 +
 +> 获取游戏世界亮度偏移。
 +
 +```javascript
 +function GetWorldBrightness(): float
 +```
 +
 +
 +
 +
 +### SetWorldColor()
 +
 +> 设置游戏世界叠加色调,默认为白色`Color(255, 255, 255)`。
 +>
 +
 +```javascript
 +function SetWorldColor( color: Color )
 +```
 +
 +
 +
 +### GetWorldColor()
 +
 +> 获取游戏世界叠加色调。
 +
 +```javascript
 +function GetWorldColor(): Color
 +```
 +
 +
 +
 +### SetWorldFogColor()
 +
 +> 设置游戏世界雾颜色,默认为白色`Color(180, 180, 180)`。
 +
 +> 此方法是`SetGameRule("fogcolor")`的快捷方法。
 +
 +```javascript
 +function SetWorldFogColor( color: Color )
 +```
 +
 +
 +
 +### GetWorldFogColor()
 +
 +> 获取游戏世界雾颜色。
 +
 +```javascript
 +function GetWorldFogColor(): Color
 +```
 +
 +
 +
 +### SetWorldSolarColor()
 +
 +> 设置游戏世界日月颜色(太阳&月亮),默认为淡黄色`Color(255, 253, 235)`。
 +
 +```javascript
 +function SetWorldSolarColor( color: Color )
 +```
 +
 +
 +
 +### GetWorldSolarColor()
 +
 +> 获取游戏世界日月颜色(太阳&月亮)。
 +
 +```javascript
 +function GetWorldSolarColor(): Color
 +```
 +
 +
 +
 +### SetWorldSolarScale()
 +
 +> 设置游戏世界日月尺寸缩放(太阳&月亮),默认为`1.0`,限制范围`0.0~10.0`。
 +
 +```javascript
 +function SetWorldSolarScale( scale: float )
 +```
 +
 +
 +
 +### GetWorldSolarScale()
 +
 +> 获取游戏世界日月尺寸缩放(太阳&月亮)。
 +
 +```javascript
 +function GetWorldSolarScale(): float
 +```
 +
 +
 +
 +### SetWorldCloudColor()
 +
 +> 设置游戏世界云层颜色,默认为浅灰色`Color(180, 180, 180)`。
 +
 +```javascript
 +function SetWorldCloudColor( color: Color )
 +```
 +
 +
 +
 +### GetWorldCloudColor()
 +
 +> 获取游戏世界**云层颜色**。
 +
 +```javascript
 +function GetWorldCloudColor(): Color
 +```
 +
 +
 +
 +### SetWorldCloudDensity()
 +
 +> 设置游戏世界**云层密度(强度)**,默认为`0.5`,限制范围`0.0~1.0`。
 +
 +```javascript
 +function SetWorldCloudDensity( density: float )
 +```
 +
 +
 +
 +### GetWorldCloudDensity()
 +
 +> 获取游戏世界**云层密度(强度)**。
 +
 +```javascript
 +function GetWorldCloudDensity(): float
 +```
 +
 +
 +
 +### SetSkybox()
 +
 +> 设置游戏世界天空盒,默认为`0`。
 +
 +```javascript
 +function SetSkybox( skybox: int )
 +```
 +
 +
 +
 +### GetSkybox()
 +
 +> 获取游戏世界天空盒。
 +
 +```javascript
 +function GetSkybox(): int
 +```
 +
 +
 +
 +### SetSkyboxColor()
 +
 +> 设置游戏世界天空盒叠加色调,默认为`Color(128, 128, 128)`。
 +
 +```javascript
 +function SetSkyboxColor( color: Color )
 +```
 +
 +
 +
 +### GetSkyboxColor()
 +
 +> 获取游戏世界天空盒叠加色调。
 +
 +```javascript
 +function GetSkyboxColor(): Color
 +```
 +
 +
 +
 +### SetSkyboxOffset()
 +
 +> 设置游戏世界天空盒偏移(高度),默认`1.0`。
 +
 +```javascript
 +function SetSkyboxOffset( offset: float )
 +```
 +
 +
 +
 +### GetSkyboxOffset()
 +
 +> 获取游戏世界天空盒偏移(高度)。
 +
 +```javascript
 +function GetSkyboxOffset(): float
 +```
 +
 +
 +
 +### SetSkyboxRotateSpeed()
 +
 +> 设置游戏世界天空盒旋转速度,默认`1.0`。
 +>
 +> 如果设置为`0`则固定角度,如果设置为`-1`则使用地图默认速度。
 +
 +```javascript
 +function SetSkyboxRotateSpeed( speed: float = -1 )
 +```
 +
 +
 +
 +### GetSkyboxRotateSpeed()
 +
 +> 获取游戏世界天空盒旋转速度。
 +
 +```javascript
 +function GetSkyboxRotateSpeed(): float
 +```
 +
 +
 +
 +### SetGameSpeed()
 +
 +> 设置游戏世界速度==(Beta)==,默认`1.0`,范围限制`0.1~10.0`。
 +
 +```javascript
 +function SetGameSpeed( speed: float )
 +```
 +
 +
 +
 +### GetGameSpeed()
 +
 +> 获取游戏世界速度。
 +
 +```javascript
 +function GetGameSpeed(): float
 +```
 +
 +
 +
 +### SetGameRule()
 +
 +> 设置指定游戏规则(不区分大小写),可用于修改更多细节内容,具体参考[游戏规则Keys](reference/instances)文档。
 +>
 +> 修改时请严格确保`Key > Value`类型正确,否则可能会引起异常。
 +>
 +> 此功能不仅可修改《沙盘引擎》内置规则,在有需要情况下,也可以作为自定义规则字典填充(前提:避开内置key值)。
 +>
 +> **注意:此选项设置的值只在当前世界生效,切换其他世界后将重置。**
 +
 +```javascript
 +function SetGameRule( key: string, value: any )
 +```
 +
 +
 +
 +### ResetGameRule()
 +
 +> 重置指定游戏规则默认数值。
 +
 +```javascript
 +function ResetGameRule( key: string )
 +```
 +
 +
 +
 +### ResetAllGameRules()
 +
 +> 重置所有游戏规则默认数值。
 +
 +```javascript
 +function ResetAllGameRules()
 +```
 +
 +
 +
 +### GetGameRule()
 +
 +> 获取指定游戏规则数值(不区分大小写),具体参考[游戏规则Keys](reference/instances)文档。
 +
 +```javascript
 +function GetGameRule( key: string, defaultValue: any = null )
 +```
 +
 +
 +
 +### GetServerTickCount()
 +
 +> 获取世界脚本运行时间秒数(float)。
 +
 +```javascript
 +function GetServerTickCount(): float
 +```
 +
 +
 +
 +### Message()
 +
 +> 给全部玩家发送一条公屏消息(在消息框中)。
 +
 +```javascript
 +function Message( text: string )
 +```
 +
 +
 +
 +### Announce()
 +
 +> 给全部玩家发送一条**公告\大文字**消息,具体类型样式参考[《世界资源实例汇总》](https://sengine.mp-gamer.com/reference/instances)。
 +
 +```javascript
 +function Announce( text: string, type: int = 0, time: float = 6 )
 +```
 +
 +
 +
 +### Subtitle()
 +
 +> 给全部玩家发送一条**底部字幕**消息。
 +
 +```javascript
 +function Subtitle( text: string )
 +```
 +
 +
 +
 +### CreateDamage()
 +
 +> 生成一处**范围原生伤害**,只有范围伤害的效果。
 +
 +```javascript
 +function CreateDamage( pos: Vector, damage: int, radius: float, from: Entity = null, damageType: int = 0, ignoreSelf = false )
 +```
 +
 +- `pos`:起始点
 +
 +- `damage`:伤害值
 +- `radius`:伤害产生范围
 +
 +- `from`:发起伤害单位(可空)
 +- `damageType`:[伤害类型](reference/instances)
 +
 +- `ignoreSelf`:是否忽略**发起伤害单位**自身(如`from`为空则没有意义)
 +
 +
 +
 +### CreateFire()
 +
 +> 在指定位置**生成一团火焰**,火焰将对附近的实体造成燃烧+传播伤害。
 +
 +```javascript
 +function CreateFire( pos: Vector, time: float, radius: float = 1.0 )
 +```
 +
 +
 +
 +### CreateFireRadius()
 +
 +> 在指定位置**生成一片火焰(`scale x 4`)**,效果类似燃烧瓶,火焰将对附近的实体造成燃烧+传播伤害。
 +
 +```javascript
 +function CreateFireRadius( pos: Vector, time: float, scale: float = 1.0, onGround: bool = false )
 +```
 +
 +
 +
 +### CreateSmoke()
 +
 +> 在指定位置**生成烟雾弹**。
 +
 +```javascript
 +function CreateSmoke( pos: Vector, time: float, scale: float = 1.0, color: Color = Color(255, 255, 255) )
 +```
 +
 +
 +
 +### CreateFlash()
 +
 +> 在指定位置**生成闪光弹**,由于闪光弹的“白屏”特性,只有真实控制角色的玩家会受到影响。
 +
 +```javascript
 +function CreateFlash( pos: Vector, time: float, scale: float = 1.0, color: Color = Color(255, 255, 255) )
 +```
 +
 +
 +
 +### CreateExplosion()
 +
 +> 在指定位置**生成一场爆炸**,不同爆炸类型有不同的效果范围和伤害。
 +
 +```javascript
 +function CreateExplosion( pos: Vector, type: int = 0 )
 +```
 +
 +| Type | 说明     |
 +| ---- | -------- |
 +| 0    | 小型爆炸 |
 +| 1    | 中型爆炸 |
 +| 2    | 大型爆炸 |
 +
 +
 +
 +### CreateExplosionForce()
 +
 +> 在指定位置生成一场**物理爆炸力(没有伤害)**,附近的物理刚体将受到力影响(类似爆炸冲击力)。
 +
 +```javascript
 +function CreateExplosionForce( pos: Vector, force: float, radius: float )
 +```
 +
 +
 +
 +### CreateRayPowerCast()
 +
 +> 在指定位置生成一条**光线射线(不会穿透物体)**,与射线检测功能基本相同,但会额外多出光线效果(例如:枪械弹道)。
 +
 +[note2]
 +注意:射线移动(发射)速度是基于`start ~ over`的范围动态决定的。
 +[/note]
 +
 +```javascript
 +function CreateRayPowerCast( start: Vector, over: Vector, color: Color, width: float = 0.2, fadeTime: float = 0.1 )
 +```
 +
 +- `fadeTime`:光线存在时间,并非射线发射速度
 +
 +
 +
 +### CreateThrowCast()
 +
 +> 在指定位置生成一条**投掷抛物射线(物理)**,与光线射线功能基本相同,但会额外多出物理效果。
 +>
 +> **注意:投掷射线将在发生碰撞后销毁,并触发【碰撞后事件】(Event优先级:`OnThrowCastTrigger() > BindAction()?`)**
 +
 +```javascript
 +function CreateThrowCast( 
 + start: Vector, 
 +    direction: Vector, 
 +    color: Color, 
 +    width: float = 0.2, 
 +    speed: float = 1.0, 
 +    tag: string = "", 
 +    action: Action<Vector> = null )
 +```
 +
 +```javascript
 +CreateThrowCast(Vector(0, 0, 0), Vector(0, 0, 1), Color(255, 0, 0), 0.2, 1, "test_throw", (point) => {
 +    DLog("Throw Over: " + point);
 +});
 +```
 +
 +- **start:**射线起点坐标
 +- **direction:**射线发射方向向量
 +- **color:**射线颜色
 +- **width:**射线宽度
 +- **speed:**投掷物理速度
 +- **tag:**标签,仅有识别作用,主要用于`OnThrowCastTrigger()`事件参数
 +- **action:**碰撞时触发方法(参数:`Vector`)
 +
 +
 +
 +### CreateModelThrowCast()
 +
 +> 在指定位置生成一条**包含模型的投掷抛物射线(物理)**,与`CreateThrowCast()`功能基本相同,但会额外多出**子模型**效果(例如射出的子弹、炮弹、弓箭、手榴弹模型等)。
 +
 +[note2]
 +注意:此处的`localPos | localAngle | localScale`表示绑定模型的自身本地坐标,默认情况下相关坐标应该保持`Vector(0, 0, 0)`(`localScale`除外),只有希望模型本地位置、旋转与射线偏移时才需要修改本地坐标。
 +[/note]
 +
 +```javascript
 +function CreateModelThrowCast( 
 + model: int, 
 +    localPos: Vector, 
 +    localAngle: Vector, 
 +    localScale: Vector, 
 +    start: Vector, 
 +    direction: Vector, 
 +    color: Color, 
 +    width: float = 0.2, 
 +    speed: float = 1.0, 
 +    tag: string = "", 
 +    action: Action<Vector> = null )
 +```
 +
 +- **model:**子模型ID
 +- **localPos:**子模型的[本地]坐标
 +- **localAngle:**子模型的[本地]欧拉角度
 +- **localScale:**子模型的[本地]缩放
 +- *其他参数与`CreateThrowCast()`*相同
 +
 +
 +
 +### PlaySoundForAll()
 +
 +> 为所有当前在线的玩家播放一段2D音频(客户端方式)。
 +>
 +> 注意:此操作相当于封装了**遍历player.PlaySound()**方法,播放的是客户端本地声音,后加入的玩家不会听到此声音。
 +
 +```javascript
 +function PlaySoundForAll( audioID: int, loop: bool = false, volume: float = 1f )
 +```
 +
 +
 +
 +### Play3DSoundForAll()
 +
 +> 为所有当前在线的玩家播放一段3D音频(客户端方式)。
 +>
 +> 注意:此操作相当于封装了**遍历player.Play3DSound()**方法,播放的是客户端本地声音,后加入的玩家不会听到此声音。
 +
 +```javascript
 +function Play3DSoundForAll( audioID: int, pos: Vector, radius: float = 80, loop: bool = false, volume: float = 1f )
 +```
 +
 +
 +
 +### PlayWorldSound()
 +
 +> 在服务器世界播放一段**世界2D音频**(与客户端音频方法相似,但播放的声音不受`Client\Audio`类控制,客户端也无法停止播放)。
 +>
 +> 即便后续进入的玩家也会同步播放此声音(播放进度同步),**音频实例**将一直存在世界中,直到被(自动\手动)销毁。
 +
 +[note2]
 +注意:通常情况下,除了**必要全局同步**的声音外,应该首选非`WorldSound`方法播放声音(例如`PlaySoundForAll | Player.PlaySound ...`)。
 +[/note]
 +
 +```javascript
 +function PlayWorldSound( audioID: int, loop: bool = false, type: int = 0, volume: float = 1f ): string //UUID
 +```
 +
 +- `type`:声音通道类型,表示客户端如何处理此类音频的音量`0=Sound | 1=Music | 2=Natural`
 +
 +
 +
 +### PlayWorld3DSound()
 +
 +> 在服务器世界播放一段**世界3D音频**(此方法播放的声音不受`Client\Audio`类控制,客户端也无法停止播放)。
 +>
 +> 即使后进入的玩家也会同步播放此声音(播放进度同步),**音频实例**将一直存在世界中,直到被(自动\手动)销毁。
 +
 +[note2]
 +注意:通常情况下,除了**必要全局同步**的声音外,应该首选非`WorldSound`方法播放声音(例如`PlaySoundForAll | Player.PlaySound ...`)。
 +[/note]
 +
 +```javascript
 +function PlayWorld3DSound( audioID: int, pos: Vector, radius: float, loop: bool = false, type: int = 0, volume: float = 1f ): string //UUID
 +```
 +
 +- `type`:声音通道类型,表示客户端如何处理此类音频的音量`0=Sound | 1=Music | 2=Natural`
 +
 +
 +
 +### StopWorldSound()
 +
 +> 停止并销毁一个服务器世界声音实例。
 +
 +```javascript
 +function StopWorldSound( uuid: string ): bool //返回false表示不存在UUID实例
 +```
 +
 +
 +
 +### PauseWorldSound()
 +
 +> 暂停播放一个服务器世界声音实例。
 +>
 +> 注意:此操作不会销毁实例,如果不使用时忘记销毁,可能会一直占用服务器资源。
 +
 +```javascript
 +function PauseWorldSound( uuid: string ): bool //返回false表示不存在UUID实例
 +```
 +
 +
 +
 +### ResumeWorldSound()
 +
 +> 继续播放一个服务器世界声音实例。
 +
 +```javascript
 +function ResumeWorldSound( uuid: string ): bool //返回false表示不存在UUID实例
 +```
 +
 +
 +
 +### RegisterKeyListener()
 +
 +> 监听一个**按键触发事件**(当前场景有效),可用于监听**玩家通过客户端绑定的某键(`Client: BindKey | BindNativeKey`)**被按下\抬起。
 +>
 +> 相关事件:`OnPlayerKeyDown() | OnPlayerKeyUp()`
 +
 +```javascript
 +function RegisterKeyListener( keyTag: string )
 +```
 +
 +- `keyTag`:按键标签(需要与客户端绑定的`keyTag`一致)
 +
 +
 +
 +### UnregisterKeyListener()
 +
 +> 取消监听一个**按键触发事件**,对其按键监听不再生效。
 +
 +```javascript
 +function UnregisterKeyListener( keyTag: string )
 +```
 +
 +
 +
 +### UnregisterAllKeyListener()
 +
 +> 取消监听所有**按键触发事件**,对所有按键监听不再生效。
 +
 +```javascript
 +function UnregisterAllKeyListener()
 +```
 +
 +
 +
 +### WriteHostFile()
 +
 +> 写入文件(或以`/`结尾的文件夹)到模组**主机目录**`Mod/Host`,写入文件尺寸限制4MB,如果文件已存在则会覆盖。
 +>
 +> 此功能通常用于实现**游戏存档\配置**等,可以使用`Json`功能进行序列化。
 +
 +```javascript
 +function WriteHostFile( localPath: string, content: string = null )
 +```
 +
 +
 +
 +### ReadHostFile()
 +
 +> 从模组**主机目录**(`Mod/Host`)读取文件(文本内容),如果文件不存在则返回**空白文本**。
 +
 +```javascript
 +function ReadHostFile( localPath: string ): string
 +```
 +
 +```javascript
 +ReadFile( "Test.txt" ); //read: Mod/Space/Test.txt
 +```
 +
 +
 +
 +### CopyHostFile()
 +
 +> 从模组**主机目录**(`Mod/Host`)复制文件到新位置。
 +
 +```javascript
 +function CopyHostFile( localPath: string, pasteLocalPath: string ): bool
 +```
 +
 +```javascript
 +CopyHostFile( "Test.txt", "Test2.txt" );
 +```
 +
 +
 +
 +### RenameHostFile()
 +
 +> 从模组**主机目录**(`Mod/Host`)修改文件名称到新位置。
 +
 +```javascript
 +function RenameHostFile( localPath: string, renameLocalPath: string, isReplace: bool = false ): bool
 +```
 +
 +- `isReplace`如果目标文件已存在,是否强制替换
 +
 +
 +
 +### ExistHostFile()
 +
 +> 判断模组**主机目录**(`Mod/Host`)文件(或以`/`结尾的文件夹)是否存在。
 +
 +```javascript
 +function ExistHostFile( localPath: string ): bool
 +```
 +
 +
 +
 +### DeleteHostFile()
 +
 +> 删除模组**主机目录**(`Mod/Host`)文件(或以`/`结尾的文件夹,以及所有子文件)。
 +>
 +> 注意:删除操作是**不可恢复**的,谨慎使用。
 +
 +```javascript
 +function DeleteHostFile( localPath: string )
 +```
 +
 +
 +
 +### SetModArchive()
 +
 +> **此方法已在V0.83移除。**
 +>
 +> 设置并覆盖**当前模组**的持久化存储数据(字符串,可通过Json扩展,最长限制512字符)。
 +>
 +> 数据内容存储到`ModArchive.json`文件,**任意模组之间可相互获取,但只有当前模组可写入自身数据**。
 +
 +```javascript
 +function SetModArchive( content: string )
 +```
 +
 +
 +
 +### GetModArchive()
 +
 +> **此方法已在V0.83移除。**
 +>
 +> 尝试读取**指定模组**的持久化存储数据(可通过`SetModArchive()`写入修改),如不存在则返回空文本。
 +>
 +> 注意:如果不填写参数,默认获取当前模组的数据。
 +
 +```javascript
 +function GetModArchive( package: string = null ): string
 +```
 +
 +
 +
 +### SendSocketData()
 +
 +> 发送`Socket\Network`网络通信数据。
 +>
 +> **在当前版本下,此方法主要用于外部UDP传输。**
 +>
 +> **对应接收事件:`OnDataServerReceive`。**
 +
 +```javascript
 +//Address=IP:Port
 +function SendSocketData( address: string, data: string )
 +```
 +
 +```javascript
 +SendSocketData("127.0.0.1:8192", "Test");
 +```
 +
 +
 +
 +### ReplaceTerrainLayer()
 +
 +> 尝试**替换修改**地形层贴图,具体参考[地形层贴图ID](reference/instances)文档。
 +
 +> 注意:此方法会产生些许开销,如果一个层的`layer`已经被替换 ,那么下一次需要使用新的`layer`来进行后续替换。
 +
 +[note]
 +在游戏场景运行时,会对**使用较少**的贴图自动进行**剔除优化**,因此可能少数情况下会出现**无法找到贴图**的提示。
 +[/note]
 +
 +```javascript
 +function ReplaceTerrainLayer( layer: int, newLayer: int )
 +```
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +</markdown>