沙盘引擎 (SEngine)

创意诞生沙盘世界,不止如此想象!

用户工具

站点工具


scripting:world:prop

这是本文档旧的修订版!




📚 World/Prop

Prop类是一个抽象概念类,主要用于Prop背包物品及游戏道具相关功能使用。

此类下所有的属性均是以抽象概念为基础的,具体物品的逻辑实现由开发者自行编写(例如物品磨损、武器子弹数量等)

📒 Property

📘 prop.ID

获取物品ID(只读)。

prop.ID: int

📘 prop.Model

获取物品对应模型ID(只读)。

prop.Model: int

📘 prop.ChildModel

获取物品对应的子模型ID(只读)。

例如:投掷道具发生投掷效果时的对象模型ID。

prop.ChildModel: int

📘 prop.UUID

获取物品场景唯一UUID(只读),可判断物品原始对象等,即使物品索引位置发生改变

prop.UUID: string

📘 prop.Name

获取物品注册名称,来源于配置文件(只读)。

prop.Name: string

📘 prop.Tag

获取物品注册标签,来源于配置文件(只读)。

prop.Tag: string

📘 prop.Amount

设置物品同类叠加数量,默认值为1,上限值根据Multiple决定(源于json配置)。

注意:如果物品数量<=0时将立即被回收,变换为默认空物品(ID0)。

prop.Amount = 1; //int

📘 prop.Data

设置物品自定义属性(Any),绝大多数自定义扩展属性都由此实现。

prop.Data = {}; //any
//实现一个武器子弹功能
let chara = Character.Create(...);
 
//两种方式相同,建议优先考虑第一种
[1] chara.SetProp(0, 3, 1, {Bullet: 1000});
[2] chara.SetProp(0, 3, 1);
	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类在根类本身的基础上,额外提供一些与【游戏道具原始数据】同名映射的动态属性,此类属性可实现运行时动态修改物品数据(如伤害、范围、射速等)属性详细用途及介绍参考【游戏道具原始数据】

注意:此部分仅支持Prop基础属性,例如高级Flags、Animation、Audio这些暂不支持运行时动态调整。

📘 prop.Damage

设置物品伤害值\基础伤害值属性。

prop.Damage = 0; //int

📘 prop.DamageRange

设置物品伤害检测范围属性。

prop.DamageRange = 0.8; //float

📘 prop.DamageShake

设置物品伤害检测范围偏移属性。

prop.DamageShake = 1.0; //float

📘 prop.Distance

设置物品距离相关属性,通常情况下非特定类型物品(如:枪支)应该保持默认。

prop.Distance = 0.0; //float

📘 prop.Direction

设置物品手持方向属性。

prop.Direction = 2; //int

📘 prop.PreloadTime

设置物品切换武器冷却时间(无法使用时间)属性。

prop.PreloadTime = 1.0; //float

📘 prop.Speed

设置物品动作\执行速度属性,此属性关键决定执行动作的速度,对于大多数物品来说,动作速度越快,同时间内能执行的次数越多(例如热武器射速)

prop.Speed = 1.0; //float

📘 prop.MoveSpeedMultiplier

设置物品移动速度影响倍数属性,这将直接影响角色手持物品时移动速度。

prop.MoveSpeedMultiplier = 1.0; //float

📘 prop.Flags

获取物品枚举特性属性(位特性),建议只读(或不要直接使用)此属性,不要直接操作修改,除非知道自己在做什么

补充:如果有修改需求,请使用Flags相关的Function方法。

prop.Flags: int

📘 prop.Multiple

获取物品最大叠加数量(只读),默认值为1数值来源于物品json配置

此属性主要用于实现高级背包系统,可能某些物品允许叠加存放(例如苹果),但武器这些属性复杂的物品,可能并不适合叠加存放

prop.Multiple: int

📒 Function

📘 prop.ExistFlag()

获取物品是否包含指定Flag特性。

function prop.ExistFlag( flag: int ): bool

📘 prop.AddFlag()

给物品增加指定的Flag特性(如果是不允许动态增删的Flag或者已包含,则不会被增加)。

function prop.AddFlag( flag: int )

📘 prop.RemoveFlag()

给物品移除指定的Flag特性(如果是不允许动态增删的Flag或者不包含,则不会被移除)。

function prop.RemoveFlag( flag: int )

scripting/world/prop.1697896169.txt.gz · 最后更改: 2023/10/21 21:49 由 bibiboxs