Buff_状态数据
在引擎中,角色自身是没有属性的,属性全部是通过(装备、BUFF)给到角色,装备上某些特殊属性都是BUFF给到的。所以在属性方面BUFF是最重要的最重要的一环。
- ID:Buff编号
- KeyName:Buff的唯一标识,如果不填就默认使用 Name中的名字作为标识
- Name:Buff名字
- Group:分组名称。两个Buff填相同的”分组名称”就成为一组,在Buff_分组数据中可对组进行关系操作。
- StackType:重复添加同一个buff的状态类型。
注:buff如果需要叠加状态必须叠层.叠层可以不叠状态,叠加优先叠层。重置和叠加冲突时优先重置
类型如下:以下属性可组合使用
None = 0,
ResetDuration = 1,//重置时间
StackDuration = 2,//叠加时间
ResetStat = 4,//重置状态
StackStat = 8,//叠加状态
ResetStack = 16,//重置层数
StackStack = 32,//叠加层数
StackParams=64//叠加参数
例如:在重复添加同一个buff的时候需要重置时间,在表格中直接填 ResetDuration 或者 1 就可以了。
- Properties:属性,以下属性可组合使用
属性如下:
None = 0, 默认下发不广播
RemoveOnDeath = 1,死亡删除
RemoveOnExit =2,退出删除
Debuff = 4,只是作为一个标识,供脚本中判断使用,
AbsoluteTime = 8, 绝对时间。也就是离线了,时间也会走
RemoveOnMap = 16,切换地图删除
Hide = 32,不广播+不下发
Broadcast = 64,广播+下发
- Icon:BUFF的图标,默认读取素材目录data下的icon.lib。下标是从0开始,不用图标就填-1。不填默认为0。此图标在下发的情况下会在选中目标的血条下方显示出来。
- Stats:BUFF自带的属性。
属性由”属性ID|属性值”方式填写,多个属性组合用”,”隔开,”属性ID|属性值,属性ID|属性值,属性ID|属性值”。
属性ID是Stat_基础属性表中的属性ID。比如Stat_基础属性表中,ID为0的属性是基础最小防御,想将这条属性的值设置为10,就用以写成 “0|10”。多条属性,可以写成”0|10,4|20”,属性集表示的意思就是,最小防御10,最高防御20。也就是 防御10-20。
- StackMax:可叠加的最大层数。
- Effect:buff的特效。包含:
NoTeleport 不能传送
NoWalk 不能走
NoRun 不能跑
NoAttack 不能攻击
NoCast 不能施法
NoRegenHP 不能回血
NoRegenMP 不能回蓝
NoUseItem 不能使用物品
NoDrop 不能丢物品
NoDieDrop 不能死亡掉落
NoPickUp 不能捡去
IgnoreMonster 穿怪
IgnoreHuman 穿人
IgnoreObject 穿物体Deco Spell
Invincible 无敌 无视伤害
NeverDied 不死 保留1血
Hidden 隐身
CoolEye 真眼|反隐形
NoPush 不能推动
Tail 拖影效果
比如麻痹效果就需要”不能走|不能跑|不能攻击|不能施法”,可以填”NoRun|NoWalk|NoAttack|NoCast”
- EffectColor:拥有buff后的身体外观颜色。包含:
None 默认色
Green 绿色
Red 红色
DarkRed 深红色
Purple 紫色
Yellow 黄色
MediumVioletRed 中紫色
Blue 蓝色
Gray 灰色,
Orange 橙色
SaddleBrown 鞍棕色
White 白色
MediumOrchid 中紫色
Aqua 浅绿色
Aquamarine 碧绿色
LightSeaGreen 淡绿色
SlateBlue 石蓝色
SteelBlue 铁青色
Navy 深蓝色
Peru 秘鲁色
这些是内置颜色。
这里跟Effect是配合使用的。比如麻痹后有石化效果就可以用”Gray”,只能用一种颜色。
- OffSet:特效偏移。与”EffectState”配合使用的。主要是针对称号顶戴的这类特效。这个偏移会修改EffectState中的所有特效坐标。所以最好只用于单特效的BUFF。
- TriggerListDic:触发特定程序或函数
触发设置包含以下参数
Type=0 触发类型 必填。类型包含([main]施加[timer]间隔[end]结束触发,[TriggerType]触发器触发),
Interval=1 触发间隔时间 (间隔触发使用 最小100 默认1000 默认[固定] ~[动态]),Type|main //获得BUFF的时候就触发 Type|end //BUFF消失的时候就触发 Type|timer //计时器触发,下面的Interval可以设置间隔时间 Type|TriggerType //触发器触发,触发器ID可在"LuaLibDefine.d"搜索"TriggerType"中查询 例如:在攻击时触发,攻击触发的ID是10,就可以写成"Type|10" 一个BUFF可以多个触发类型用";"分割
Buff=2 BuffID (BuffKeyName 添加会触发对应技能),
Skill=3 技能ID (技能KeyName 技能填写会触发对应技能),
Lua=4 脚本函数名(填写会触发对应脚本方法),
Target=5 触发目标([0]自己,[1]对方 默认0),
Group=6 触发类型([0]友方,[1]敌人 默认0),
Race=12 触发种类([0]所有,[1]人型 [2]怪物)
Duration=7 持续时间 (毫秒可填公式),默认[固定] ~[动态],
Range=8 触发范围(默认0 可填公式),默认[固定] ~[动态],
Chance=9 触发几率(默认10000,可填公式),默认[固定] ~[动态],
Stack=10 触发层数(默认1,可填公式),默认[固定] ~[动态],
Formula=11 参数公式(公式,赋值传参:分割 [动态])可用公式
target[0自己 1目标 2buff施加人]
Random(int min,int max),在Random前面加”~”符号表示每次触发都会重算随机,不加的话就只在第一次的时候计算出随机结果,以后都延用这个结果。
if(bool,int,int)
SetPanel(int [target-操作对象],int [target-操作人],int key,int value), 增减面板属性
GetPanel(int target,int key)获取面板属性
GetParam(int key)获取属性值 -由上一个buff|SetParam的属性,
SetParam(int key,int value)设置属性值设置给下一个buff的param属性
BuffStack() 获取当前buff层数
TargetClass(int target) -1非人型|目标不对 0战士 1法师 2道士
TargetType(int target) -1目标不对 0人型 1怪物
RemoveBuff(true) 删除自身buff
注:SetParam和Panel不能在同一行使用以下是一个比较完整的例子
Type|10:Buff|流血:Target|1:Group|1:Duration|60000:Range|0:Chance|100:Stack|~Random(1,8); Type|10:Buff|绿毒:Target|1:Group|1:Duration|60000:Range|0:Chance|100:Formula|SetParam(0,-666); Type|10:Buff|红毒:Target|1:Group|1:Duration|60000:Range|0:Chance|100:Formula|SetParam(1,If(TargetType(1)==1,-3000,-1000)); 详细解释 // Type|10--在攻击的时候 Buff|流血--触发流血buff Target|1--在对方的身上触发 Group|1--在对方是敌人的情况下才会触发 Duration|60000--持续60秒 Range|0--触发范围,0的意思是单个目标,1的话就是目标周围1格范围都会触发 Chance|100--触发几率 100/10000 就是1/100的几率触发 Stack|~Random(1,8)--随机触发层数 Formula|SetParam(0,-666)--设置的第一次参数key("0"可以是任何数),就是给"绿毒"BUFF使用的。 Formula|SetParam(1,If(TargetType(1)==1,-3000,-1000)) --设置If(TargetType(1)==1,-3000,-1000)给红毒Buff使用, --这里做了判断如果目标是怪物就返回-3000,否则就返回-1000。显然对怪物造成的影响更高。
- ScriptFile:lua脚本文件
比如填写”Buffs/暗街之王”,那就需要在服务端的”mir2\Envir\LuaScript”目录下再添加”Buffs”文件夹,
再在这个文件夹下创建一个”暗街之王.lua”的文件。
另外。必须要在前面的”TriggerListDic”中,填lua的入口函数名(自定义名字–英文),比如”Lua|FunName”。
“TriggerListDic”中的触发类型”Type”不同,携带的参数就不同。但是每次的参数是固定的。
//
--Type|main 被施加buff时触发
------------------------------------------
//comment 被施加buff时触发
//@param _self EntityObject 施加对象
//@param owner EntityObject 施法对象 --可能为空
//@param buff Buff buff状态
function FunName(_self,owner,buff)
local msg = owner.Name.."给".._self.Name.."施加了"..buff.KeyName;
lualib.SendMsg(owner,msg)
end
//
--Type|end //buff移除时触发
------------------------------------------
//comment buff移除时触发
//@param _self EntityObject 施加对象
//@param owner EntityObject 施法对象 --可能为空
//@param buff Buff buff状态
//@param isRemove boolean 是否被删除|否则正常timeout触发
function FunName(_self,owner,buff,isRemove)
local msg = buff.KeyName.."被移除.";
lualib.SendMsg(owner,msg)
end
//
--Type|timer //计时器触发
--Type|TriggerType //buff触发器通用参数
------------------------------------------
//计时器触发
//buff触发器通用参数
//@param _self EntityObject 玩家自身 buff拥有人
//@param owner EntityObject buff施加对象 可能为空
//@param target EntityObject 玩家正在攻击对象 可能为空
//@param attack SkillData 攻击数据|技能,伤害 可能为空
//@param buff Buff 触发buff属性 层数 名称 持续时间
//@param type integer 触发器类型 枚举转int参数
function FunName(_self,owner,target, attack,buff, type)
local damage = attack.Value
if type == 11 then
attack.Value = damage + 50
lualib.SendMsg(_self,damage.."触发增伤50点->"..attack.Value)
else
if type == 13 then
attack.Value = damage - 50
lualib.SendMsg(_self,damage.."触发减伤50点->"..attack.Value)
end
end
end
EffectState:buff自带的素材特效。
跟Effect不一样,这里的是按以下动作给人物外观上特效
编号从0开始,即:Standing=0,Walking=1…
拿”魔法盾”buff做例,填 0|69;18|71
0是就是任何动作都播放69号特效(特效表中的编号)
18是Struck,被攻击时播放的71号特效。Standing, Walking, Running, Pushed, DashL, DashR, DashFail, Stance, Stance2, Attack1, Attack2, Attack3, Attack4, Attack5, AttackRange1, AttackRange2, AttackRange3, Special, Struck, Harvest, Spell, Die, Dead, Skeleton, Show, Hide, Stoned, Appear, Revive, SitDown, Mine, Sneek, DashAttack, Lunge, WalkingBow, RunningBow, Jump, MountStanding, MountWalking, MountRunning, MountStruck, MountAttack, Stall, BuffAbort = 253, BuffStart = 254, BuffEnd = 255
作者:yilin01 创建时间:2025-08-05 10:26
最后编辑:yilin01 更新时间:2025-08-20 18:55
最后编辑:yilin01 更新时间:2025-08-20 18:55