meta data for this page
📚 差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
| scripting:world:core [2025/06/13 07:51] – 移除 - 外部编辑 (Unknown date) 127.0.0.1 | scripting:world:core [2025/08/28 02:49] (当前版本) – bibiboxs | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| + | < | ||
| + | # ==World/ | ||
| + | ## Event | ||
| + | |||
| + | ### OnScriptLoad() | ||
| + | |||
| + | > 当**世界端脚本**被完整加载后调用,==部分API需要放置在此事件执行才有效,因为至此脚本才加载完毕==。 | ||
| + | > | ||
| + | > 如果需要获取到一些初始化传递数据,可通过`SetGlobalVars() | GetGlobalVars()`以及`本地player.UserData`等方式来读写。 | ||
| + | |||
| + | [note3] | ||
| + | **注意:此事件是真正意义上的“脚本加载完成”,因此如果有代码放置在JavaScript空白区域,并不一定会按照预期正确执行,有关初始化的代码建议放置在此处执行。** | ||
| + | [/note] | ||
| + | |||
| + | ```javascript | ||
| + | BindKey(...); | ||
| + | |||
| + | function OnScriptLoad() | ||
| + | { | ||
| + | BindKey(...); | ||
| + | } | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### 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 " | ||
| + | if(tag == " | ||
| + | { | ||
| + | DLog(" | ||
| + | return false; | ||
| + | } | ||
| + | } | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### OnWorldTimeChange( oldTime, newTime ) | ||
| + | |||
| + | > 当世界时间发生改变时调用。 | ||
| + | |||
| + | ```javascript | ||
| + | function OnWorldTimeChange( oldTime, newTime ) | ||
| + | { | ||
| + | DLog(" | ||
| + | DLog(" | ||
| + | } | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### 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(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### SetHostInfo() | ||
| + | |||
| + | > 设置主机房间信息\公告(目前主要用于`TAB`面板封面部分介绍,以及有关房间的介绍信息等)。 | ||
| + | > | ||
| + | > **默认值:`Mod Version: XXX`**。 | ||
| + | |||
| + | ```javascript | ||
| + | function SetHostInfo( info: string ) | ||
| + | ``` | ||
| + | |||
| + | - **info:**主机房间信息\公告(最大限制在64字符)。 | ||
| + | |||
| + | |||
| + | |||
| + | ### GetHostInfo() | ||
| + | |||
| + | > 获取主机房间信息\公告。 | ||
| + | |||
| + | ```javascript | ||
| + | function GetHostInfo(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### SetHostIcon() | ||
| + | |||
| + | > 设置主机房间图标形象,ID参考[《资源文档——主机图标》](https:// | ||
| + | > | ||
| + | > 选择贴合模组玩法主题的图标,可能会更吸引玩家。 | ||
| + | |||
| + | ```javascript | ||
| + | function SetHostIcon( icon: int ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GetHostIcon() | ||
| + | |||
| + | > 获取主机房间图标形象。 | ||
| + | |||
| + | ```javascript | ||
| + | function GetHostIcon(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### SetHostAnnounce() | ||
| + | |||
| + | > 设置主机服务器搜索可见程度,这将影响服务器是否能被【多人游戏浏览器】成功搜索。 | ||
| + | |||
| + | ```javascript | ||
| + | function SetHostAnnounce( announce: int ) | ||
| + | ``` | ||
| + | |||
| + | | 类型 | 说明 | ||
| + | | ---- | ---------------------------- | | ||
| + | | **0(默认)** | ||
| + | | 1 | 私有(隐藏互联网列表) | | ||
| + | |||
| + | |||
| + | |||
| + | ### GetHostAnnounce() | ||
| + | |||
| + | > 获取主机服务器搜索可见程度。 | ||
| + | |||
| + | ```javascript | ||
| + | function GetHostAnnounce(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### SetHostTickRate() | ||
| + | |||
| + | > 设置主机网络传输率,数值越高网络同步越流畅,同时也会使用更多的宽带,范围限制`10~100`。 | ||
| + | > | ||
| + | > 引擎默认网络传输率为`30`,开发者可根据不同场景玩法动态调整设置。 | ||
| + | |||
| + | [note2] | ||
| + | |||
| + | 理论来说,在保证正常游戏的情况下,更低的网络传输率有助于提升游戏性能,但可能会降低网络同步体验。 | ||
| + | |||
| + | 开发者可以考虑根据自身游戏玩法设定一个最佳数值,或者根据当前游戏性能动态调整数值。 | ||
| + | |||
| + | [/note] | ||
| + | |||
| + | ```javascript | ||
| + | function SetHostTickRate( tickRate: int ) | ||
| + | ``` | ||
| + | |||
| + | | 游戏类型 | ||
| + | | ------------------------------- | -------- | | ||
| + | | FPS射击、快节奏、高同步率 | ||
| + | | **常规游戏、RPG、普通节奏玩法** | 30~60 | | ||
| + | | RTS、鸟瞰视角游戏、慢节奏玩法 | ||
| + | |||
| + | **==注意:`TickRate`指服务端逻辑速率,实际表现严重受到【主机FPS\Frame】的影响,主机帧数越高(60+)同步性能越好,开发者可以参考《建立专用服务器》。==** | ||
| + | |||
| + | |||
| + | |||
| + | ### GetHostTickRate() | ||
| + | |||
| + | > 获取主机网络传输率。 | ||
| + | |||
| + | ```javascript | ||
| + | function GetHostTickRate(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### SetStreamVisualRange() | ||
| + | |||
| + | > 设置服务器**流计算可视范围**(距离),实体相对玩家超过指定距离将被认定为**不可见、可见、较远**(影响`Entity.GetVisualRange()`)。 | ||
| + | > | ||
| + | > 此数值允许设定范围:`32.0~128.0`,数值越低渲染& | ||
| + | |||
| + | ```javascript | ||
| + | function SetStreamVisualRange( range: float ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GetStreamVisualRange() | ||
| + | |||
| + | > 获取服务器**流计算可视范围**(距离)。 | ||
| + | |||
| + | ```javascript | ||
| + | function GetStreamVisualRange(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### SetPassword() | ||
| + | |||
| + | > 设置主机房间密码(当主机房间被公开或查询时,单机游戏可以忽略)。 | ||
| + | |||
| + | ```javascript | ||
| + | function SetPassword( password: string ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GetPassword() | ||
| + | |||
| + | > 获取主机房间密码。 | ||
| + | |||
| + | ```javascript | ||
| + | function GetPassword(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### SetMaxPlayers() | ||
| + | |||
| + | > 设置主机房间最大人数(支持范围`1~100人`)。 | ||
| + | |||
| + | ```javascript | ||
| + | function SetMaxPlayers( num: int ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GetMaxPlayers() | ||
| + | |||
| + | > 获取主机房间最大玩家数。 | ||
| + | |||
| + | ```javascript | ||
| + | function GetMaxPlayers(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### SetTime() | ||
| + | |||
| + | > 设置当前游戏世界时间。 | ||
| + | > | ||
| + | > **注意:每次加载新世界场景后,时间都将重新替换为【地图文件配置——默认时间】。** | ||
| + | |||
| + | ```javascript | ||
| + | function SetWorldTime( hour: int, minute: int ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GetWorldTime() | ||
| + | |||
| + | > 获取游戏世界时间实例(`WorldTime`)。 | ||
| + | |||
| + | ```javascript | ||
| + | let worldTime = GetWorldTime(); | ||
| + | DLog(" | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### SetWorldTimeRate() | ||
| + | |||
| + | > 设置当前游戏世界时间速率(游戏时间每分钟的时间间隔),默认为`1.0`。 | ||
| + | > | ||
| + | > 此方法是`SetGameRule(" | ||
| + | > | ||
| + | > **例如:设置为`1.0`表示【游戏时间每分钟=现实时间1秒】。** | ||
| + | |||
| + | ```javascript | ||
| + | function SetWorldTimeRate( rate: float ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GetWorldTimeRate() | ||
| + | |||
| + | > 获取游戏世界时间速率(游戏时间每分钟的时间间隔)。 | ||
| + | |||
| + | ```javascript | ||
| + | function GetWorldTimeRate(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### SetWorldWeather() | ||
| + | |||
| + | > 设置游戏世界天气,具体参考[天气ID](reference/ | ||
| + | > | ||
| + | > **注意:每次加载新世界场景后,天气都将重新替换为【地图文件配置——随机天气(天气池)】。** | ||
| + | |||
| + | ```javascript | ||
| + | function SetWorldWeather( weather: int ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GetWorldWeather() | ||
| + | |||
| + | > 获取游戏世界天气。 | ||
| + | |||
| + | ```javascript | ||
| + | function GetWorldWeather(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GetRandomWorldWeather() | ||
| + | |||
| + | > 随机获取游戏世界天气,获取方式根据参数决定。 | ||
| + | |||
| + | ```javascript | ||
| + | function GetRandomWorldWeather( usePool: bool = true ): int | ||
| + | ``` | ||
| + | |||
| + | - `usePool`:是否使用【地图文件天气池】概率随机,否则是索引随机 | ||
| + | |||
| + | |||
| + | |||
| + | ### SetWorldGravity() | ||
| + | |||
| + | > 设置游戏世界物理重力,分别为`横向X、纵向Y、前后Z`,默认为`Vector(0.0, | ||
| + | |||
| + | ```javascript | ||
| + | function SetWorldGravity( space: Vector ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GetWorldGravity() | ||
| + | |||
| + | > 获取游戏世界物理重力。 | ||
| + | |||
| + | ```javascript | ||
| + | function GetWorldGravity(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### SetWorldBrightness() | ||
| + | |||
| + | > 设置游戏世界亮度偏移,默认为`1.0`。 | ||
| + | > | ||
| + | > 对于特定的场景或游戏玩法(如丧尸游戏),开发者可能希望将此值调低以营造更好的黑夜效果。 | ||
| + | |||
| + | ```javascript | ||
| + | function SetWorldBrightness( brightness: float ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GetWorldBrightness() | ||
| + | |||
| + | > 获取游戏世界亮度偏移。 | ||
| + | |||
| + | ```javascript | ||
| + | function GetWorldBrightness(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ### SetWorldColor() | ||
| + | |||
| + | > 设置游戏世界叠加色调,默认为白色`Color(255, | ||
| + | > | ||
| + | |||
| + | ```javascript | ||
| + | function SetWorldColor( color: Color ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GetWorldColor() | ||
| + | |||
| + | > 获取游戏世界叠加色调。 | ||
| + | |||
| + | ```javascript | ||
| + | function GetWorldColor(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### SetWorldFogColor() | ||
| + | |||
| + | > 设置游戏世界雾颜色,默认为白色`Color(180, | ||
| + | > | ||
| + | > 此方法是`SetGameRule(" | ||
| + | |||
| + | ```javascript | ||
| + | function SetWorldFogColor( color: Color ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GetWorldFogColor() | ||
| + | |||
| + | > 获取游戏世界雾颜色。 | ||
| + | |||
| + | ```javascript | ||
| + | function GetWorldFogColor(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### SetWorldSolarColor() | ||
| + | |||
| + | > 设置游戏世界日月颜色(太阳& | ||
| + | |||
| + | ```javascript | ||
| + | function SetWorldSolarColor( color: Color ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GetWorldSolarColor() | ||
| + | |||
| + | > 获取游戏世界日月颜色(太阳& | ||
| + | |||
| + | ```javascript | ||
| + | function GetWorldSolarColor(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### SetWorldSolarScale() | ||
| + | |||
| + | > 设置游戏世界日月尺寸缩放(太阳& | ||
| + | |||
| + | ```javascript | ||
| + | function SetWorldSolarScale( scale: float ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GetWorldSolarScale() | ||
| + | |||
| + | > 获取游戏世界日月尺寸缩放(太阳& | ||
| + | |||
| + | ```javascript | ||
| + | function GetWorldSolarScale(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### SetWorldCloudColor() | ||
| + | |||
| + | > 设置游戏世界云层颜色,默认为浅灰色`Color(180, | ||
| + | |||
| + | ```javascript | ||
| + | function SetWorldCloudColor( color: Color ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GetWorldCloudColor() | ||
| + | |||
| + | > 获取游戏世界**云层颜色**。 | ||
| + | |||
| + | ```javascript | ||
| + | function GetWorldCloudColor(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### SetWorldCloudDensity() | ||
| + | |||
| + | > 设置游戏世界**云层密度(强度)**,默认为`0.5`,限制范围`0.0~1.0`。 | ||
| + | |||
| + | ```javascript | ||
| + | function SetWorldCloudDensity( density: float ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GetWorldCloudDensity() | ||
| + | |||
| + | > 获取游戏世界**云层密度(强度)**。 | ||
| + | |||
| + | ```javascript | ||
| + | function GetWorldCloudDensity(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### SetSkybox() | ||
| + | |||
| + | > 设置游戏世界天空盒,默认为`0`。 | ||
| + | |||
| + | ```javascript | ||
| + | function SetSkybox( skybox: int ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GetSkybox() | ||
| + | |||
| + | > 获取游戏世界天空盒。 | ||
| + | |||
| + | ```javascript | ||
| + | function GetSkybox(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### SetSkyboxColor() | ||
| + | |||
| + | > 设置游戏世界天空盒叠加色调,默认为`Color(128, | ||
| + | |||
| + | ```javascript | ||
| + | function SetSkyboxColor( color: Color ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GetSkyboxColor() | ||
| + | |||
| + | > 获取游戏世界天空盒叠加色调。 | ||
| + | |||
| + | ```javascript | ||
| + | function GetSkyboxColor(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### SetSkyboxOffset() | ||
| + | |||
| + | > 设置游戏世界天空盒偏移(高度),默认`1.0`。 | ||
| + | |||
| + | ```javascript | ||
| + | function SetSkyboxOffset( offset: float ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GetSkyboxOffset() | ||
| + | |||
| + | > 获取游戏世界天空盒偏移(高度)。 | ||
| + | |||
| + | ```javascript | ||
| + | function GetSkyboxOffset(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### SetSkyboxRotateSpeed() | ||
| + | |||
| + | > 设置游戏世界天空盒旋转速度,默认`1.0`。 | ||
| + | > | ||
| + | > 如果设置为`0`则固定角度,如果设置为`-1`则使用地图默认速度。 | ||
| + | |||
| + | ```javascript | ||
| + | function SetSkyboxRotateSpeed( speed: float = -1 ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GetSkyboxRotateSpeed() | ||
| + | |||
| + | > 获取游戏世界天空盒旋转速度。 | ||
| + | |||
| + | ```javascript | ||
| + | function GetSkyboxRotateSpeed(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### SetGameSpeed() | ||
| + | |||
| + | > 设置游戏世界速度==(Beta)==,默认`1.0`,范围限制`0.1~10.0`。 | ||
| + | |||
| + | ```javascript | ||
| + | function SetGameSpeed( speed: float ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GetGameSpeed() | ||
| + | |||
| + | > 获取游戏世界速度。 | ||
| + | |||
| + | ```javascript | ||
| + | function GetGameSpeed(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### SetGameRule() | ||
| + | |||
| + | > 设置指定游戏规则(不区分大小写),可用于修改更多细节内容,具体参考[游戏规则Keys](reference/ | ||
| + | > | ||
| + | > 修改时请严格确保`Key > Value`类型正确,否则可能会引起异常。 | ||
| + | > | ||
| + | > 此功能不仅可修改《沙盘引擎》内置规则,在有需要情况下,也可以作为自定义规则字典填充(前提:避开内置key值)。 | ||
| + | > | ||
| + | > **注意:此选项设置的值只在当前世界生效,切换其他世界后将重置。** | ||
| + | |||
| + | ```javascript | ||
| + | function SetGameRule( key: string, value: any ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### ResetGameRule() | ||
| + | |||
| + | > 重置指定游戏规则默认数值。 | ||
| + | |||
| + | ```javascript | ||
| + | function ResetGameRule( key: string ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### ResetAllGameRules() | ||
| + | |||
| + | > 重置所有游戏规则默认数值。 | ||
| + | |||
| + | ```javascript | ||
| + | function ResetAllGameRules() | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GetGameRule() | ||
| + | |||
| + | > 获取指定游戏规则数值(不区分大小写),具体参考[游戏规则Keys](reference/ | ||
| + | |||
| + | ```javascript | ||
| + | function GetGameRule( key: string, defaultValue: | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GetServerTickCount() | ||
| + | |||
| + | > 获取世界脚本运行时间秒数(float)。 | ||
| + | |||
| + | ```javascript | ||
| + | function GetServerTickCount(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### Message() | ||
| + | |||
| + | > 给全部玩家发送一条公屏消息(在消息框中)。 | ||
| + | |||
| + | ```javascript | ||
| + | function Message( text: string ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### Announce() | ||
| + | |||
| + | > 给全部玩家发送一条**公告\大文字**消息,具体类型样式参考[《世界资源实例汇总》](https:// | ||
| + | |||
| + | ```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/ | ||
| + | |||
| + | - `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< | ||
| + | ``` | ||
| + | |||
| + | ```javascript | ||
| + | CreateThrowCast(Vector(0, | ||
| + | DLog(" | ||
| + | }); | ||
| + | ``` | ||
| + | |||
| + | - **start:**射线起点坐标 | ||
| + | - **direction:**射线发射方向向量 | ||
| + | - **color:**射线颜色 | ||
| + | - **width:**射线宽度 | ||
| + | - **speed:**投掷物理速度 | ||
| + | - **tag:**标签,仅有识别作用,主要用于`OnThrowCastTrigger()`事件参数 | ||
| + | - **action:**碰撞时触发方法(参数:`Vector`) | ||
| + | |||
| + | |||
| + | |||
| + | ### CreateModelThrowCast() | ||
| + | |||
| + | > 在指定位置生成一条**包含模型的投掷抛物射线(物理)**,与`CreateThrowCast()`功能基本相同,但会额外多出**子模型**效果(例如射出的子弹、炮弹、弓箭、手榴弹模型等)。 | ||
| + | |||
| + | [note2] | ||
| + | 注意:此处的`localPos | localAngle | localScale`表示绑定模型的自身本地坐标,默认情况下相关坐标应该保持`Vector(0, | ||
| + | [/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< | ||
| + | ``` | ||
| + | |||
| + | - **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 // | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### PauseWorldSound() | ||
| + | |||
| + | > 暂停播放一个服务器世界声音实例。 | ||
| + | > | ||
| + | > 注意:此操作不会销毁实例,如果不使用时忘记销毁,可能会一直占用服务器资源。 | ||
| + | |||
| + | ```javascript | ||
| + | function PauseWorldSound( uuid: string ): bool // | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### ResumeWorldSound() | ||
| + | |||
| + | > 继续播放一个服务器世界声音实例。 | ||
| + | |||
| + | ```javascript | ||
| + | function ResumeWorldSound( uuid: string ): bool // | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### RegisterKeyListener() | ||
| + | |||
| + | > 监听一个**按键触发事件**(当前场景有效),可用于监听**玩家通过客户端绑定的某键(`Client: | ||
| + | > | ||
| + | > 相关事件:`OnPlayerKeyDown() | OnPlayerKeyUp()` | ||
| + | |||
| + | ```javascript | ||
| + | function RegisterKeyListener( keyTag: string ) | ||
| + | ``` | ||
| + | |||
| + | - `keyTag`:按键标签(需要与客户端绑定的`keyTag`一致) | ||
| + | |||
| + | |||
| + | |||
| + | ### UnregisterKeyListener() | ||
| + | |||
| + | > 取消监听一个**按键触发事件**,对其按键监听不再生效。 | ||
| + | |||
| + | ```javascript | ||
| + | function UnregisterKeyListener( keyTag: string ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### UnregisterAllKeyListener() | ||
| + | |||
| + | > 取消监听所有**按键触发事件**,对所有按键监听不再生效。 | ||
| + | |||
| + | ```javascript | ||
| + | function UnregisterAllKeyListener() | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### WriteHostFile() | ||
| + | |||
| + | > 写入文件(或以`/ | ||
| + | > | ||
| + | > 此功能通常用于实现**游戏存档\配置**等,可以使用`Json`功能进行序列化。 | ||
| + | |||
| + | ```javascript | ||
| + | function WriteHostFile( localPath: string, content: string = null ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### ReadHostFile() | ||
| + | |||
| + | > 从模组**主机目录**(`Mod/ | ||
| + | |||
| + | ```javascript | ||
| + | function ReadHostFile( localPath: string ): string | ||
| + | ``` | ||
| + | |||
| + | ```javascript | ||
| + | ReadFile( " | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### CopyHostFile() | ||
| + | |||
| + | > 从模组**主机目录**(`Mod/ | ||
| + | |||
| + | ```javascript | ||
| + | function CopyHostFile( localPath: string, pasteLocalPath: | ||
| + | ``` | ||
| + | |||
| + | ```javascript | ||
| + | CopyHostFile( " | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### RenameHostFile() | ||
| + | |||
| + | > 从模组**主机目录**(`Mod/ | ||
| + | |||
| + | ```javascript | ||
| + | function RenameHostFile( localPath: string, renameLocalPath: | ||
| + | ``` | ||
| + | |||
| + | - `isReplace`如果目标文件已存在,是否强制替换 | ||
| + | |||
| + | |||
| + | |||
| + | ### ExistHostFile() | ||
| + | |||
| + | > 判断模组**主机目录**(`Mod/ | ||
| + | |||
| + | ```javascript | ||
| + | function ExistHostFile( localPath: string ): bool | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### DeleteHostFile() | ||
| + | |||
| + | > 删除模组**主机目录**(`Mod/ | ||
| + | > | ||
| + | > 注意:删除操作是**不可恢复**的,谨慎使用。 | ||
| + | |||
| + | ```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 | ||
| + | // | ||
| + | function SendSocketData( address: string, data: string ) | ||
| + | ``` | ||
| + | |||
| + | ```javascript | ||
| + | SendSocketData(" | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### ReplaceTerrainLayer() | ||
| + | |||
| + | > 尝试**替换修改**地形层贴图,具体参考[地形层贴图ID](reference/ | ||
| + | > | ||
| + | > 注意:此方法会产生些许开销,如果一个层的`layer`已经被替换 ,那么下一次需要使用新的`layer`来进行后续替换。 | ||
| + | |||
| + | [note] | ||
| + | 在游戏场景运行时,会对**使用较少**的贴图自动进行**剔除优化**,因此可能少数情况下会出现**无法找到贴图**的提示。 | ||
| + | [/note] | ||
| + | |||
| + | ```javascript | ||
| + | function ReplaceTerrainLayer( layer: int, newLayer: int ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | </ | ||