meta data for this page
📚 差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 后一修订版 | 前一修订版 | ||
| scripting:world:prop [2023/09/11 22:30] – 创建 bibiboxs | scripting:world:prop [2025/08/03 02:06] (当前版本) – bibiboxs | ||
|---|---|---|---|
| 行 2: | 行 2: | ||
| # World/Prop | # World/Prop | ||
| - | `Prop`类是一个抽象概念类,主要用于`Character`与Prop背包物品相关功能使用。 | + | `Prop`类是一个抽象**数据结构**,主要用于**Prop背包物品及[游戏道具](extend/ |
| - | 此类下所有的属性均是以**抽象概念**为基础的,具体物品的逻辑实现由开发者自行编写(例如物品磨损、武器子弹等)。 | + | 此类下所有的属性均是以**抽象概念**为基础的,具体物品的**逻辑实现**由开发者自行编写(例如物品磨损、武器子弹数量等)。 |
| + | |||
| + | > 修改`Prop`数据结构时需要注意,其本身是一个引用的结构类型,因此直接修改属性将无法生效,应该使用以下方法: | ||
| + | > | ||
| + | > ```javascript | ||
| + | > let tempProp = XXX; //source | ||
| + | > tempProp.Speed = 2; | ||
| + | > XXX = tempProp; //set source to new | ||
| + | > ``` | ||
| 行 16: | 行 24: | ||
| ```javascript | ```javascript | ||
| prop.ID: int | prop.ID: int | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### prop.Model | ||
| + | |||
| + | > 获取物品对应**模型ID**(只读)。 | ||
| + | |||
| + | ```javascript | ||
| + | prop.Model: int | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### prop.ChildModel | ||
| + | |||
| + | > 获取物品对应的**子模型ID**(只读)。 | ||
| + | > | ||
| + | > **例如:投掷道具发生投掷效果时的对象模型ID。** | ||
| + | |||
| + | ```javascript | ||
| + | prop.ChildModel: | ||
| ``` | ``` | ||
| 行 22: | 行 52: | ||
| ### 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: | 行 83: | ||
| > 设置物品同类叠加数量,默认值为`1`,上限值根据`Multiple`决定(源于json配置)。 | > 设置物品同类叠加数量,默认值为`1`,上限值根据`Multiple`决定(源于json配置)。 | ||
| + | > | ||
| + | > **注意:如果物品数量`< | ||
| ```javascript | ```javascript | ||
| 行 42: | 行 94: | ||
| ### prop.Data | ### prop.Data | ||
| - | > 设置物品自定义属性(Any)。 | + | > 设置物品**自定义属性(Any)**,绝大多数自定义扩展属性都由此实现。 |
| ```javascript | ```javascript | ||
| 行 48: | 行 100: | ||
| ``` | ``` | ||
| + | ```javascript | ||
| + | // | ||
| + | let chara = Character.Create(...); | ||
| + | // | ||
| + | [1] chara.SetProp(0, | ||
| + | [2] chara.SetProp(0, | ||
| + | chara.Prop.Data.Bullet = 1000; | ||
| - | ### prop.Multiple | + | // |
| + | function OnCharacterPropActionBefore( character, | ||
| + | { | ||
| + | if(prop.Data.Bullet != null) | ||
| + | { | ||
| + | if(prop.Data.Bullet > 0) prop.Data.Bullet --; | ||
| + | else{ | ||
| + | // | ||
| + | return 0; // | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | ``` | ||
| - | > 获取物品最大叠加数量(只读),默认值为`1`,**数值来源于物品json配置**。 | + | **补充:尽管在`JavaScript`里允许使用例如`chara.Prop.BulletXXX`这种直接字段赋值的方式,但考虑到生命周期和GC的问题,建议优先使用示例中的推荐做法(`prop.Data.XXX`)。** |
| + | |||
| + | |||
| + | |||
| + | ## Value Property | ||
| + | |||
| + | > Prop类在根类本身的基础上,额外提供一些与**[【游戏道具原始数据】](extend/ | ||
| > | > | ||
| - | > 此属性主要用于实现**高级背包系统**,可能某些物品允许叠加存放(例如苹果),但武器这些属性复杂,可能并不适合叠加存放。 | + | > **注意:此部分仅支持Prop基础属性,例如高级`Flags、Animation、Audio`这些暂不支持运行时动态调整。** |
| + | |||
| + | |||
| + | |||
| + | ### prop.Damage | ||
| + | |||
| + | > 设置物品**伤害值\基础伤害值**属性。 | ||
| ```javascript | ```javascript | ||
| - | character.Multiple: | + | 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 | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### prop.Stack | ||
| + | |||
| + | > 设置物品最大叠加数量,默认值为`1`。 | ||
| + | > | ||
| + | > 此属性主要用于实现**高级背包系统**,可能某些物品允许叠加存放(例如苹果),**但武器这些属性复杂的物品,可能并不适合叠加存放**。 | ||
| + | |||
| + | ```javascript | ||
| + | prop.Stack = 1; //int | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### prop.Level | ||
| + | |||
| + | > 设置物品品质等级,默认值为`0`,限制范围`0~4`。 | ||
| + | > | ||
| + | > 此属性主要用于实现**高级背包系统**,不同等级默认没有实际功能区别,此部分需要开发者自行扩展。 | ||
| + | |||
| + | ```javascript | ||
| + | prop.Level = 0; | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ## Static Function | ||
| + | |||
| + | ### Prop.None() | ||
| + | |||
| + | > 创建**空白道具**实例结构。 | ||
| + | |||
| + | ```javascript | ||
| + | function Prop.None(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### Prop.Create() | ||
| + | |||
| + | > 创建**新的道具**实例结构。 | ||
| + | |||
| + | ```javascript | ||
| + | function Prop.Create( id: int, amount: int = 1, level: int = 0, data: any = null ): Prop | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### Prop.SetSourceData() | ||
| + | |||
| + | > 设置**指定游戏道具**默认原始数据(重写),建议**场景初始化**时使用。 | ||
| + | > | ||
| + | > 注意:此方法**不会更新**已生成的对象,除非手动运行`prop.ResetData()`。 | ||
| + | |||
| + | ```javascript | ||
| + | function Prop.SetSourceData( prop: int, keyPath: string, value: any ) | ||
| + | ``` | ||
| + | |||
| + | ```javascript | ||
| + | SetSourceData(277, | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### Prop.GetSourceData() | ||
| + | |||
| + | > 获取**指定游戏道具**最新数据,如果未被`SetSourceData`重写过,则返回原始数据。 | ||
| + | |||
| + | ```javascript | ||
| + | function Prop.GetSourceData( prop: int, keyPath: string ): any | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### Prop.ResetSourceData() | ||
| + | |||
| + | > 重置**指定游戏道具**修改数据,恢复使用原始数据。 | ||
| + | > | ||
| + | > 注意:此方法**不会更新**已生成的对象,除非手动运行`prop.ResetData()`。 | ||
| + | |||
| + | ```javascript | ||
| + | function Prop.ResetSourceData( prop: int ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### Prop.ResetAllSourceData() | ||
| + | |||
| + | > 重置**全部游戏道具**修改数据,恢复使用原始数据。 | ||
| + | > | ||
| + | > 注意:此方法**不会更新**已生成的对象,除非手动运行`prop.ResetData()`。 | ||
| + | |||
| + | ```javascript | ||
| + | function Prop.ResetAllSourceData() | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ## 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 ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### prop.Equals() | ||
| + | |||
| + | > 判断另一物品是否等同于自身引用(是否为相同对象)。 | ||
| + | |||
| + | ```javascript | ||
| + | function prop.Equals( other: Prop ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### prop.ResetData() | ||
| + | |||
| + | > 重置当前物品的**默认属性**,通常用于`SetSourceData()`方法使用后的**立即更新**。 | ||
| + | |||
| + | ```javascript | ||
| + | function prop.ResetData() | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| </ | </ | ||