这里会显示出您选择的修订版和当前版本之间的差别。
后一修订版 | 前一修订版 | ||
scripting:world:prop [2023/09/11 22:30] – 创建 bibiboxs | scripting:world:prop [2024/09/05 12:48] (当前版本) – bibiboxs | ||
---|---|---|---|
行 2: | 行 2: | ||
# World/Prop | # World/Prop | ||
- | `Prop`类是一个抽象概念类,主要用于`Character`与Prop背包物品相关功能使用。 | + | `Prop`类是一个抽象概念类,主要用于**Prop背包物品及[游戏道具](extend/ |
- | 此类下所有的属性均是以**抽象概念**为基础的,具体物品的逻辑实现由开发者自行编写(例如物品磨损、武器子弹等)。 | + | 此类下所有的属性均是以**抽象概念**为基础的,具体物品的逻辑实现由开发者自行编写*(例如物品磨损、武器子弹数量等)*。 |
行 16: | 行 16: | ||
```javascript | ```javascript | ||
prop.ID: int | prop.ID: int | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### prop.Model | ||
+ | |||
+ | > 获取物品对应**模型ID**(只读)。 | ||
+ | |||
+ | ```javascript | ||
+ | prop.Model: int | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### prop.ChildModel | ||
+ | |||
+ | > 获取物品对应的**子模型ID**(只读)。 | ||
+ | > | ||
+ | > **例如:投掷道具发生投掷效果时的对象模型ID。** | ||
+ | |||
+ | ```javascript | ||
+ | prop.ChildModel: | ||
``` | ``` | ||
行 22: | 行 44: | ||
### prop.UUID | ### prop.UUID | ||
- | > 获取物品场景唯一UUID(只读),此属性可用来判断物品对象归属,即使索引位置发生改变。 | + | > 获取物品场景唯一UUID(只读),可判断物品原始对象等,**即使物品索引位置发生改变**。 |
```javascript | ```javascript | ||
prop.UUID: string | prop.UUID: string | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### prop.Name | ||
+ | |||
+ | > 获取物品注册名称,来源于配置文件(只读)。 | ||
+ | |||
+ | ```javascript | ||
+ | prop.Name: string | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### prop.Tag | ||
+ | |||
+ | > 获取物品注册标签,来源于配置文件(只读)。 | ||
+ | |||
+ | ```javascript | ||
+ | prop.Tag: string | ||
``` | ``` | ||
行 33: | 行 75: | ||
> 设置物品同类叠加数量,默认值为`1`,上限值根据`Multiple`决定(源于json配置)。 | > 设置物品同类叠加数量,默认值为`1`,上限值根据`Multiple`决定(源于json配置)。 | ||
+ | > | ||
+ | > **注意:如果物品数量`< | ||
```javascript | ```javascript | ||
行 42: | 行 86: | ||
### prop.Data | ### prop.Data | ||
- | > 设置物品自定义属性(Any)。 | + | > 设置物品**自定义属性(Any)**,绝大多数自定义扩展属性都由此实现。 |
```javascript | ```javascript | ||
prop.Data = {}; //any | prop.Data = {}; //any | ||
+ | ``` | ||
+ | |||
+ | ```javascript | ||
+ | // | ||
+ | let chara = Character.Create(...); | ||
+ | |||
+ | // | ||
+ | [1] chara.SetProp(0, | ||
+ | [2] chara.SetProp(0, | ||
+ | chara.Prop.Data.Bullet = 1000; | ||
+ | |||
+ | // | ||
+ | function OnCharacterPropActionBefore( character, prop ) | ||
+ | { | ||
+ | if(prop.Data.Bullet != null) | ||
+ | { | ||
+ | if(prop.Data.Bullet > 0) prop.Data.Bullet --; | ||
+ | else{ | ||
+ | // | ||
+ | return 0; // | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | ``` | ||
+ | |||
+ | **补充:尽管在`JavaScript`里允许使用例如`chara.Prop.BulletXXX`这种直接字段赋值的方式,但考虑到生命周期和GC的问题,建议优先使用示例中的推荐做法(`prop.Data.XXX`)。** | ||
+ | |||
+ | |||
+ | |||
+ | ## Value Property | ||
+ | |||
+ | > Prop类在根类本身的基础上,额外提供一些与**[【游戏道具原始数据】](extend/ | ||
+ | > | ||
+ | > **注意:此部分仅支持Prop基础属性,例如高级`Flags、Animation、Audio`这些暂不支持运行时动态调整。** | ||
+ | |||
+ | |||
+ | |||
+ | ### prop.Damage | ||
+ | |||
+ | > 设置物品**伤害值\基础伤害值**属性。 | ||
+ | |||
+ | ```javascript | ||
+ | prop.Damage = 0; //int | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### prop.DamageRange | ||
+ | |||
+ | > 设置物品**伤害检测范围**属性。 | ||
+ | |||
+ | ```javascript | ||
+ | prop.DamageRange = 0.8; //float | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### prop.DamageShake | ||
+ | |||
+ | > 设置物品**伤害检测范围偏移**属性。 | ||
+ | |||
+ | ```javascript | ||
+ | prop.DamageShake = 1.0; //float | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### prop.Distance | ||
+ | |||
+ | > 设置物品**距离相关**属性,通常情况下**非特定类型物品(如:枪支)**应该保持默认。 | ||
+ | |||
+ | ```javascript | ||
+ | prop.Distance = 0.0; //float | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### prop.Direction | ||
+ | |||
+ | > 设置物品**手持方向**属性。 | ||
+ | |||
+ | ```javascript | ||
+ | prop.Direction = 2; //int | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### prop.PreloadTime | ||
+ | |||
+ | > 设置物品**切换武器冷却时间(无法使用时间)**属性。 | ||
+ | |||
+ | ```javascript | ||
+ | prop.PreloadTime = 1.0; //float | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### prop.Speed | ||
+ | |||
+ | > 设置物品**动作\执行速度**属性,**此属性关键决定执行动作的速度,对于大多数物品来说,动作速度越快,同时间内能执行的次数越多(例如热武器射速)**。 | ||
+ | |||
+ | ```javascript | ||
+ | prop.Speed = 1.0; //float | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### prop.MoveSpeedMultiplier | ||
+ | |||
+ | > 设置物品**移动速度影响倍数**属性,这将直接影响角色手持物品时移动速度。 | ||
+ | |||
+ | ```javascript | ||
+ | prop.MoveSpeedMultiplier = 1.0; //float | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### prop.Flags | ||
+ | |||
+ | > 获取物品**枚举特性**属性(位特性),**建议只读(或不要直接使用)此属性,不要直接操作修改,除非知道自己在做什么**。 | ||
+ | > | ||
+ | > **补充:如果有修改需求,请使用`Flags`相关的Function方法。** | ||
+ | |||
+ | ```javascript | ||
+ | prop.Flags: int | ||
``` | ``` | ||
行 54: | 行 223: | ||
> 获取物品最大叠加数量(只读),默认值为`1`,**数值来源于物品json配置**。 | > 获取物品最大叠加数量(只读),默认值为`1`,**数值来源于物品json配置**。 | ||
> | > | ||
- | > 此属性主要用于实现**高级背包系统**,可能某些物品允许叠加存放(例如苹果),但武器这些属性复杂,可能并不适合叠加存放。 | + | > 此属性主要用于实现**高级背包系统**,可能某些物品允许叠加存放(例如苹果),**但武器这些属性复杂的物品,可能并不适合叠加存放**。 |
```javascript | ```javascript | ||
- | character.Multiple: int | + | prop.Multiple: int |
``` | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ## Function | ||
+ | |||
+ | ### prop.ExistFlag() | ||
+ | |||
+ | > 获取物品是否包含指定Flag特性。 | ||
+ | |||
+ | [note2] | ||
+ | 关于`Flag`的增删查改参考[《游戏道具扩展——Flag属性》](extend/ | ||
+ | [/note] | ||
+ | |||
+ | ```javascript | ||
+ | function prop.ExistFlag( flag: int ): bool | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### prop.AddFlag() | ||
+ | |||
+ | > 给物品增加指定的Flag特性(如果是**不允许动态增删的Flag或者已包含**,则不会被增加)。 | ||
+ | |||
+ | ```javascript | ||
+ | function prop.AddFlag( flag: int ) | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### prop.RemoveFlag() | ||
+ | |||
+ | > 给物品移除指定的Flag特性(如果是**不允许动态增删的Flag或者不包含**,则不会被移除)。 | ||
+ | |||
+ | ```javascript | ||
+ | function prop.RemoveFlag( flag: int ) | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
</ | </ |