diff --git a/luafight/Modules/Battle/Logic/Base/Effect.lua b/luafight/Modules/Battle/Logic/Base/Effect.lua index 357fc828f..bd4dea6a1 100644 --- a/luafight/Modules/Battle/Logic/Base/Effect.lua +++ b/luafight/Modules/Battle/Logic/Base/Effect.lua @@ -412,21 +412,18 @@ local effectList = { local f1 = args[2] local f2 = args[3] BattleLogic.WaitForTrigger(interval, function () - local func = function(damage) - if BattleLogic.BuffMgr:HasBuff(target, BuffName.DOT, function (buff) return dot == 0 or buff.damageType == dot end) then + local trigger = function(defRole, damageFunc, damage) + if BattleLogic.BuffMgr:HasBuff(defRole, BuffName.DOT, function (buff) + return dot == 0 or buff.damageType == dot + end) then damage = damage + floor(damage * f1) end - return damage + damageFunc(damage) end - target.exCalDmgList:Add(func) + target.Event:AddEvent(BattleEventName.RoleDamageAfter, trigger) if f2 > 0 then BattleLogic.WaitForTrigger(f2, function () - for i=1, target.exCalDmgList.size do - if target.exCalDmgList.buffer[i] == func then - target.exCalDmgList:Remove(i) - break - end - end + target.Event:RemoveEvent(BattleEventName.RoleDamageAfter, trigger) end) end end) @@ -591,21 +588,16 @@ local effectList = { local f1 = args[2] local f2 = args[3] BattleLogic.WaitForTrigger(interval, function () - local func = function(damage) - if BattleLogic.BuffMgr:HasBuff(target, BuffName.Control, function (buff) return ct == 0 or buff.ctrlType == ct end) then + local trigger = function(defRole, damageFunc, damage) + if BattleLogic.BuffMgr:HasBuff(defRole, BuffName.Control, function (buff) return ct == 0 or buff.ctrlType == ct end) then damage = damage + floor(damage * f1) end - return damage + damageFunc(damage) end - target.exCalDmgList:Add(func) + target.Event:AddEvent(BattleEventName.RoleDamageAfter, trigger) if f2 > 0 then BattleLogic.WaitForTrigger(f2, function () - for i=1, target.exCalDmgList.size do - if target.exCalDmgList.buffer[i] == func then - target.exCalDmgList:Remove(i) - break - end - end + target.Event:RemoveEvent(BattleEventName.RoleDamageAfter, trigger) end) end end) @@ -1324,9 +1316,10 @@ local effectList = { local remainCount = floor(remainFrame / buff.frameInterval)+1 buff.disperse = true if buff.caster and not buff.caster.isTeam then - buff.caster.exCalDmgList:Add(function(damage) return damage * remainCount end) + local trigger = function(defRole, damageFunc, damage) damageFunc(damage * remainCount) end + buff.caster.Event:AddEvent(BattleEventName.RoleDamageAfter, trigger) BattleUtil.CalDamage(buff.caster, buff.target, buff.damagePro, buff.damageFactor,0, true) - buff.caster.exCalDmgList:Remove(buff.caster.exCalDmgList.size) + buff.caster.Event:RemoveEvent(BattleEventName.RoleDamageAfter, trigger) end end return true diff --git a/luafight/Modules/Battle/Logic/Misc/BattleDefine.lua b/luafight/Modules/Battle/Logic/Misc/BattleDefine.lua index b006710ed..2bb5e2e7d 100644 --- a/luafight/Modules/Battle/Logic/Misc/BattleDefine.lua +++ b/luafight/Modules/Battle/Logic/Misc/BattleDefine.lua @@ -20,6 +20,8 @@ BattleEventName = { RoleDamage = indexAdd(), RoleBeDamagedBefore = indexAdd(), RoleDamageBefore = indexAdd(), + RoleBeDamagedAfter = indexAdd(), + RoleDamageAfter = indexAdd(), RoleBeTreated = indexAdd(), RoleTreat = indexAdd(), RoleBeHealed = indexAdd(), diff --git a/luafight/Modules/Battle/Logic/Misc/BattleUtil.lua b/luafight/Modules/Battle/Logic/Misc/BattleUtil.lua index 168830efb..04690a8b1 100644 --- a/luafight/Modules/Battle/Logic/Misc/BattleUtil.lua +++ b/luafight/Modules/Battle/Logic/Misc/BattleUtil.lua @@ -287,10 +287,9 @@ function BattleUtil.CalDamage(atkRole, defRole, damageType, baseFactor, ignoreDe baseDamage = floor(max(baseDamage, BattleUtil.FP_Mul(0.1, attack))) end - for i=1, atkRole.exCalDmgList.size do - local func = atkRole.exCalDmgList.buffer[i] - baseDamage = func(baseDamage) - end + local damageFunc = function(damage) baseDamage = damage end + atkRole.Event:DispatchEvent(BattleEventName.RoleDamageAfter, defRole, damageFunc, baseDamage) + defRole.Event:DispatchEvent(BattleEventName.RoleBeDamagedAfter, atkRole, damageFunc, baseDamage) baseDamage = BattleUtil.CalShield(atkRole, defRole, baseDamage) local finalDmg = 0 --计算实际造成的扣血