这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
scripting:world:main [2023/10/23 17:16] – bibiboxs | scripting:world:main [2024/03/31 15:55] (当前版本) – bibiboxs | ||
---|---|---|---|
行 26: | 行 26: | ||
```javascript | ```javascript | ||
function OnFrameUpdate( deltaTime:float ) // | function OnFrameUpdate( deltaTime:float ) // | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### OnFixedUpdate( fixedDeltaTime ) | ||
+ | |||
+ | > 当脚本加载完成后**固定增量时间**调用(与[Unity原理](https:// | ||
+ | |||
+ | 此事件会以`FixedUpdate`的方式每隔固定时间调用,通常情况下可以忽略使用此事件。 | ||
+ | |||
+ | ``` | ||
+ | fixedDeltaTime:float // | ||
``` | ``` | ||
行 35: | 行 47: | ||
> | > | ||
> **此方法支持`return bool`(可选),这将影响一些Throw是否执行其自带绑定Action方法,事件返回值默认为`true`。** | > **此方法支持`return bool`(可选),这将影响一些Throw是否执行其自带绑定Action方法,事件返回值默认为`true`。** | ||
- | > | ||
- | > --- | ||
> | > | ||
> 例如:`CreateThrowCast()`时在末尾参数绑定了一个`Action`,当ThrowCast发生碰撞后会优先调用当前事件,如果此处代码返回`false`则会阻止其**绑定Action**方法执行(如:默认RPG武器等,如果返回`false`将不会产生爆炸效果)。 | > 例如:`CreateThrowCast()`时在末尾参数绑定了一个`Action`,当ThrowCast发生碰撞后会优先调用当前事件,如果此处代码返回`false`则会阻止其**绑定Action**方法执行(如:默认RPG武器等,如果返回`false`将不会产生爆炸效果)。 | ||
行 42: | 行 52: | ||
```javascript | ```javascript | ||
function OnThrowCastTrigger( tag: string, point: Vector ): bool | function OnThrowCastTrigger( tag: string, point: Vector ): bool | ||
+ | ``` | ||
+ | |||
+ | ```javascript | ||
+ | // | ||
+ | function OnThrowCastTrigger( tag, point ) | ||
+ | { | ||
+ | //Prop grenade [tag] is " | ||
+ | if(tag == " | ||
+ | { | ||
+ | DLog(" | ||
+ | return false; | ||
+ | } | ||
+ | } | ||
``` | ``` | ||
行 59: | 行 82: | ||
+ | |||
+ | ### OnServerQueryReceive( data, address ) | ||
+ | |||
+ | > 当服务器接收到`Query\Gamespy`数据时调用(格式必须是`\xxx\`使用反斜杠包围)。 | ||
+ | > | ||
+ | > **引擎内置数据指令(例如`querystats`等)不会触发此事件。** | ||
+ | |||
+ | ```javascript | ||
+ | function OnServerQueryReceive( data: string, address: string ) | ||
+ | ``` | ||
+ | |||
+ | |||
## Function | ## Function | ||
行 76: | 行 111: | ||
> 设置主机房间名称(当主机房间被公开或查询时,单机游戏可以忽略)。 | > 设置主机房间名称(当主机房间被公开或查询时,单机游戏可以忽略)。 | ||
> | > | ||
- | > name:主机房间名称文本(建议40个字内)。 | + | > **默认值:**`Sandtable Engine Server`。 |
```javascript | ```javascript | ||
function SetHostName( name: string ) | function SetHostName( name: string ) | ||
``` | ``` | ||
+ | |||
+ | - **name:**主机房间名称文本(最大限制在64字符)。 | ||
行 90: | 行 127: | ||
```javascript | ```javascript | ||
function GetHostName(): | function GetHostName(): | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### SetHostInfo() | ||
+ | |||
+ | > 设置主机房间信息\公告(目前主要用于`TAB`面板封面部分介绍,以及有关房间的介绍信息等)。 | ||
+ | > | ||
+ | > **默认值:`Mod Version: XXX`**。 | ||
+ | |||
+ | ```javascript | ||
+ | function SetHostInfo( info: string ) | ||
+ | ``` | ||
+ | |||
+ | - **info:**主机房间信息\公告(最大限制在64字符)。 | ||
+ | |||
+ | |||
+ | |||
+ | ### GetHostInfo() | ||
+ | |||
+ | > 获取主机房间信息\公告。 | ||
+ | |||
+ | ```javascript | ||
+ | function GetHostInfo(): | ||
``` | ``` | ||
行 153: | 行 214: | ||
let worldTime = GetTime(); | let worldTime = GetTime(); | ||
DLog(" | DLog(" | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### SetTimeRate() | ||
+ | |||
+ | > 设置当前游戏世界时间速率(游戏时间每分钟的时间间隔),默认为`1.0`。 | ||
+ | > | ||
+ | > 此方法是`SetGameRule(" | ||
+ | > | ||
+ | > **例如:设置为`1.0`表示【游戏时间每分钟=现实时间1秒】。** | ||
+ | |||
+ | ```javascript | ||
+ | function SetTimeRate( rate: float ) | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### GetTimeRate() | ||
+ | |||
+ | > 获取游戏世界时间速率(游戏时间每分钟的时间间隔)。 | ||
+ | |||
+ | ```javascript | ||
+ | function GetTimeRate(): | ||
``` | ``` | ||
行 208: | 行 293: | ||
function GetGravity(): | function GetGravity(): | ||
``` | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### SetWorldBrightness() | ||
+ | |||
+ | > 设置游戏世界亮度偏移,默认为`1.0`。 | ||
+ | > | ||
+ | > 对于特定的场景或游戏玩法(如丧尸游戏),开发者可能希望将此值调低以营造更好的黑夜效果。 | ||
+ | |||
+ | ```javascript | ||
+ | function SetWorldBrightness( brightness: float ) | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### GetWorldBrightness() | ||
+ | |||
+ | > 获取游戏世界亮度偏移。 | ||
+ | |||
+ | ```javascript | ||
+ | function GetWorldBrightness(): | ||
+ | ``` | ||
+ | |||
行 228: | 行 336: | ||
```javascript | ```javascript | ||
function GetWorldColor(): | function GetWorldColor(): | ||
+ | ``` | ||
+ | |||
+ | |||
+ | ### SetWorldFogColor() | ||
+ | |||
+ | > 设置游戏世界雾颜色,默认为白色`Color(150, | ||
+ | > | ||
+ | > 此方法是`SetGameRule(" | ||
+ | |||
+ | ```javascript | ||
+ | function SetWorldFogColor( color: Color ) | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### GetWorldFogColor() | ||
+ | |||
+ | > 获取游戏世界雾颜色。 | ||
+ | |||
+ | ```javascript | ||
+ | function GetWorldFogColor(): | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### SetSkybox() | ||
+ | |||
+ | > 设置游戏世界天空盒,默认为`0`。 | ||
+ | |||
+ | ```javascript | ||
+ | function SetSkybox( skybox: int ) | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### GetSkybox() | ||
+ | |||
+ | > 获取游戏世界天空盒。 | ||
+ | |||
+ | ```javascript | ||
+ | function GetSkybox(): | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### SetSkyboxColor() | ||
+ | |||
+ | > 设置游戏世界天空盒叠加色调,默认为`Color(128, | ||
+ | |||
+ | ```javascript | ||
+ | function SetSkyboxColor( color: Color ) | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### GetSkyboxColor() | ||
+ | |||
+ | > 获取游戏世界天空盒叠加色调。 | ||
+ | |||
+ | ```javascript | ||
+ | function GetSkyboxColor(): | ||
``` | ``` | ||
行 333: | 行 502: | ||
- `flags`:筛选layer层,默认为0,可用于筛选判断[实体类型层(位)](reference/ | - `flags`:筛选layer层,默认为0,可用于筛选判断[实体类型层(位)](reference/ | ||
- | - `RayTraceResult`:返回值([类型参考](scripting/ | + | - `RayTraceResult`:返回值([类型参考](scripting/ |
```javascript | ```javascript | ||
行 362: | 行 531: | ||
- `ignoreSelf`:是否忽略**发起伤害单位**自身(如`from`为空则没有意义) | - `ignoreSelf`:是否忽略**发起伤害单位**自身(如`from`为空则没有意义) | ||
+ | |||
+ | |||
+ | |||
+ | ### CreateFire() | ||
+ | |||
+ | > 在指定位置**生成一团火焰**,火焰将对附近的实体造成燃烧+传播伤害。 | ||
+ | |||
+ | ```javascript | ||
+ | function CreateFire( pos: Vector, time: float, radius: float = 1.0 ) | ||
+ | ``` | ||
行 408: | 行 587: | ||
```javascript | ```javascript | ||
- | function CreateThrowCast( start: Vector, direction: Vector, color: Color, width: float = 0.2, speed: float = 1.0, tag: string = "", | + | function CreateThrowCast( |
+ | start: Vector, | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
``` | ``` | ||
行 422: | 行 608: | ||
- **width:**射线宽度 | - **width:**射线宽度 | ||
- **speed:**投掷物理速度 | - **speed:**投掷物理速度 | ||
- | - **tag:**标签,仅有识别作用,主要用于`OnThrowCastTrigger() `事件参数 | + | - **tag:**标签,仅有识别作用,主要用于`OnThrowCastTrigger()`事件参数 |
- **action:**碰撞时触发方法(参数:`Vector`) | - **action:**碰撞时触发方法(参数:`Vector`) | ||
行 429: | 行 615: | ||
### CreateModelThrowCast() | ### CreateModelThrowCast() | ||
- | > 在指定位置生成一条**包含模型的投掷抛物射线(物理)**,与`CreateThrowCast()`功能基本相同,但会额外多出子模型效果(例如射出的子弹、炮弹、弓箭、手榴弹模型等)。 | + | > 在指定位置生成一条**包含模型的投掷抛物射线(物理)**,与`CreateThrowCast()`功能基本相同,但会额外多出**子模型**效果(例如射出的子弹、炮弹、弓箭、手榴弹模型等)。 |
```javascript | ```javascript | ||
- | function CreateModelThrowCast( model: int, localPos: Vector, localAngle: Vector, localScale: Vector, start: Vector, | + | function CreateModelThrowCast( |
+ | model: int, | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | direction: Vector, | ||
+ | | ||
+ | | ||
+ | speed: float = 1.0, | ||
+ | tag: string = "", | ||
+ | action: Action< | ||
``` | ``` | ||
行 440: | 行 637: | ||
- **localScale:**子模型的[本地]缩放 | - **localScale:**子模型的[本地]缩放 | ||
- *其他参数与`CreateThrowCast()`*相同 | - *其他参数与`CreateThrowCast()`*相同 | ||
- | |||
- | |||
- | |||
- | ### OverlapEntity() | ||
- | |||
- | > 在指定位置**检测并记录范围检测世界实体**(某坐标指定范围内所有对象),可用于检测指定位置的范围内实体对象(基于`Entity`的核心对象)。 | ||
- | > | ||
- | > 如果只希望获取`Entity`基础类型中其中的一个或多个子类,可使用`filter`参数进行筛选(位操作)。 | ||
- | > | ||
- | > **注意:此方法只用于单次记录,==并返回检测到的数量==,应搭配使用`OverlapEntityByIndex()`获取具体索引的对象实例。** | ||
- | |||
- | ```javascript | ||
- | function OverlapEntity( pos: Vector, radius: float, filter: int = 0 ): int | ||
- | ``` | ||
- | |||
- | | 过滤(Filter) | 说明 | ||
- | | -------------- | ---------- | | ||
- | | 0 | 默认全部 | ||
- | | 1 | Model | | ||
- | | 2 | Character | ||
- | | 4 | Vehicle | ||
- | | 8 | Pickup | ||
- | | 16 | Checkpoint | | ||
- | |||
- | ```javascript | ||
- | //Only check ' | ||
- | OverlapEntity(Vector(0, | ||
- | //or | ||
- | OverlapEntity(Vector(0, | ||
- | ``` | ||
- | |||
- | |||
- | |||
- | ### OverlapEntityByIndex() | ||
- | |||
- | > 获取由`OverlapEntity()`记录后的**指定索引实例**,如不存在或已销毁则返回`null`。 | ||
- | > | ||
- | > **注意:此方法使用前必须执行一次`OverlapEntity()`,以此获取最新的范围内检测信息。** | ||
- | |||
- | ```javascript | ||
- | function OverlapEntityByIndex( index: int ): Entity | ||
- | ``` | ||
- | |||
- | ```javascript | ||
- | let count = OverlapEntity(Vector(0, | ||
- | if(count > 0) | ||
- | { | ||
- | DLog(i + " | ||
- | } | ||
- | ``` | ||
行 673: | 行 820: | ||
function ReadFile( fileName: string ): string | function ReadFile( fileName: string ): string | ||
``` | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### SetModArchive() | ||
+ | |||
+ | > 设置并覆盖**当前模组**的持久化存储数据(字符串,可通过Json扩展,最长限制512字符)。 | ||
+ | > | ||
+ | > 数据内容存储到`ModArchive.json`文件,**任意模组之间可相互获取,但只有当前模组可写入自身数据**。 | ||
+ | > | ||
+ | > ==(出于安全考虑,此方法仅限World端使用,Client端是只读的)== | ||
+ | |||
+ | ```javascript | ||
+ | function SetModArchive( content: string ) | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### GetModArchive() | ||
+ | |||
+ | > 尝试读取**指定模组**的持久化存储数据(可通过`SetModArchive()`写入修改),如不存在则返回空文本。 | ||
+ | > | ||
+ | > 注意:如果不填写参数,默认获取当前模组的数据。 | ||
+ | |||
+ | ```javascript | ||
+ | function GetModArchive( package: string = null ): string | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### SetSaveItem() | ||
+ | |||
+ | > 设置并覆盖【存档数据槽(`Slot`)】指定`Key`的项目,并以最终Json的格式存储,仅支持基础类型(`string\number\bool...`)。 | ||
+ | > | ||
+ | > 存档槽默认参数为`0`,如果只用于本地持久化数据存储,或者不需要多存档槽的设计,可以忽略`Slot`参数。 | ||
+ | > | ||
+ | > **注意:此方法最多支持50个存档槽(文件),以及单文件最大1MB的写入空间。有关持久化存档相关内容,无论是单存档、多存档或其他使用场景,都可尝试此方案进行存储。** | ||
+ | > | ||
+ | > ==(出于安全考虑,此方法仅限World端使用,Client端是只读的)== | ||
+ | |||
+ | ```javascript | ||
+ | function SetSaveItem( key: string, value: object, slot: int = 0 ) | ||
+ | ``` | ||
+ | |||
+ | ```javascript | ||
+ | SetSaveItem(" | ||
+ | SetSaveItem(" | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### RemoveSaveItem() | ||
+ | |||
+ | > 移除【存档数据槽(`Slot`)】指定`Key`的项目**(并非删除存档,而是删除存档中的一个项)**。 | ||
+ | > | ||
+ | > ==(出于安全考虑,此方法仅限World端使用,Client端是只读的)== | ||
+ | |||
+ | ```javascript | ||
+ | function RemoveSaveItem( key: string, slot: int = 0 ) | ||
+ | ``` | ||
+ | |||
+ | ```javascript | ||
+ | SetSaveItem(" | ||
+ | RemoveSaveItem(" | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### GetSaveItem() | ||
+ | |||
+ | > 尝试读取【存档数据槽(`Slot`)】指定`Key`的项目内容,如不存在则返回`defaultValue`。 | ||
+ | |||
+ | ```javascript | ||
+ | function GetSaveItem( key: string, slot: int = 0, defaultValue: | ||
+ | ``` | ||
+ | |||
+ | ```javascript | ||
+ | SetSaveItem(" | ||
+ | DLog(" | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### ExistSaveItem() | ||
+ | |||
+ | > 判断【存档数据槽(`Slot`)】指定`Key`的**项目内容是否为空(`bool`)**。 | ||
+ | |||
+ | ```javascript | ||
+ | function ExistSaveItem( key: string, slot: int = 0 ): bool | ||
+ | ``` | ||
+ | |||
+ | ```javascript | ||
+ | DLog(ExistSaveItem(" | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### ExistSaveData() | ||
+ | |||
+ | > 判断【存档数据槽(`Slot`)】存档文件是否已被创建(`bool`)。 | ||
+ | |||
+ | ```javascript | ||
+ | function ExistSaveData( slot: int = 0 ): bool | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### DeleteSaveData() | ||
+ | |||
+ | > 删除【存档数据槽(`Slot`)】存档文件,包括其文件内所有数据。 | ||
+ | > | ||
+ | > ==(出于安全考虑,此方法仅限World端使用)== | ||
+ | |||
+ | ```javascript | ||
+ | function DeleteSaveData( slot: int = 0 ): bool | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### SendSocketData() | ||
+ | |||
+ | > 发送Socket\Network网络通信数据。 | ||
+ | > | ||
+ | > **在当前版本下,此方法主要用于外部UDP传输。** | ||
+ | > | ||
+ | > **对应接收事件:`OnDataServerReceive`** | ||
+ | |||
+ | ```javascript | ||
+ | // | ||
+ | function SendSocketData( address: string, data: string ) | ||
+ | ``` | ||
+ | |||
+ | ```javascript | ||
+ | SendSocketData(" | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||