From 2d3d1115a67a60a3b60bf6165b8336305a448894 Mon Sep 17 00:00:00 2001 From: wangyuan Date: Sat, 18 May 2019 17:20:57 +0800 Subject: [PATCH] lua fight --- .../Modules/Battle/Logic/Base/Passivity.lua | 30 +++++++++---------- luafight/Modules/Battle/Logic/Buff/DOT.lua | 2 +- .../Battle/Logic/Misc/BattleDefine.lua | 6 ++-- .../Modules/Battle/Logic/Misc/BattleUtil.lua | 18 ++++++----- 4 files changed, 31 insertions(+), 25 deletions(-) diff --git a/luafight/Modules/Battle/Logic/Base/Passivity.lua b/luafight/Modules/Battle/Logic/Base/Passivity.lua index 512be413a..3bac2b339 100644 --- a/luafight/Modules/Battle/Logic/Base/Passivity.lua +++ b/luafight/Modules/Battle/Logic/Base/Passivity.lua @@ -237,12 +237,12 @@ local passivityList = { local pro = args[2] local f2 = args[3] - local OnRoleBeDamaged = function(treatingFunc) + local OnBeHit = function(treatingFunc) BattleUtil.RandomAction(f1, function () BattleUtil.CalTreat(role, role, floor(role:GetRoleData(propertyList[pro]) * f2)) end) end - role.Event:AddEvent(BattleEventName.RoleBeDamaged, OnRoleBeDamaged) + role.Event:AddEvent(BattleEventName.RoleBeHit, OnBeHit) end, --受击后,[a]对攻击者造成的攻击*[c]的持续伤害,持续[d]秒。 @@ -253,7 +253,7 @@ local passivityList = { local f3 = args[3] local triggerUid = {} - local OnRoleBeDamaged = function(atkRole) + local OnBeHit = function(atkRole) if atkRole.isTeam then return end @@ -268,7 +268,7 @@ local passivityList = { end) end) end - role.Event:AddEvent(BattleEventName.RoleBeDamaged, OnRoleBeDamaged) + role.Event:AddEvent(BattleEventName.RoleBeHit, OnBeHit) end, --受击时[e],[a]的概率将[b]*[c]算作[d]计算 @@ -287,7 +287,7 @@ local passivityList = { end) end end - role.Event:AddEvent(BattleEventName.RoleBeDamagedBefore, OnRoleBeDamagedBefore) + role.Event:AddEvent(BattleEventName.OnRoleBeDamagedBefore, OnRoleBeDamagedBefore) end, --受击时,有[a]的概率抵消[b]*[c]的攻击。 @@ -313,7 +313,7 @@ local passivityList = { local dt = args[3] local lastTrigger = 0 - local OnRoleBeDamaged = function(atkRole) + local OnBeHit = function(atkRole) if atkRole.isTeam then return end @@ -329,7 +329,7 @@ local passivityList = { end) lastTrigger = 0 end - role.Event:AddEvent(BattleEventName.RoleBeDamaged, OnRoleBeDamaged) + role.Event:AddEvent(BattleEventName.RoleBeHit, OnBeHit) end, --受击后,有[a]的概率对随机1人造成[b]*[c]的真实伤害。 @@ -340,7 +340,7 @@ local passivityList = { local f2 = args[3] local lastTrigger = 0 - local OnRoleBeDamaged = function(atkRole) + local OnBeHit = function(atkRole) if atkRole.isTeam then return end @@ -356,7 +356,7 @@ local passivityList = { end) lastTrigger = 0 end - role.Event:AddEvent(BattleEventName.RoleBeDamaged, OnRoleBeDamaged) + role.Event:AddEvent(BattleEventName.RoleBeHit, OnBeHit) end, --受击后[f],[a]的概率将[b]*[c]算作[d]计算,持续[e]秒。 @@ -369,14 +369,14 @@ local passivityList = { local f3 = args[5] local dt = args[6] - local OnRoleBeDamaged = function(atkRole, damage, bCrit, finalDmg, damageType) + local OnBeHit = function(atkRole, damage, bCrit, finalDmg, damageType) if damageType == dt then BattleUtil.RandomAction(f1, function () role:AddPropertyTransfer(propertyList[pro1], f2, propertyList[pro2], f3) end) end end - role.Event:AddEvent(BattleEventName.RoleBeDamaged, OnRoleBeDamaged) + role.Event:AddEvent(BattleEventName.RoleBeHit, OnBeHit) end, --免疫[a]属性伤害。 @@ -524,7 +524,7 @@ local passivityList = { local f3 = args[3] local triggerCount = 0 - local OnDamaged = function(atkRole) + local OnBeHit = function(atkRole) if BattleUtil.GetHPPencent(role) < f1 then if triggerCount < 1 then BattleUtil.RandomAction(f2, function () @@ -534,7 +534,7 @@ local passivityList = { end end end - role.Event:AddEvent(BattleEventName.RoleBeDamaged, OnDamaged) + role.Event:AddEvent(BattleEventName.RoleBeHit, OnBeHit) end, --死亡时,立即回复己方全体[a]*[b]的血量。 @@ -812,12 +812,12 @@ local passivityList = { local i1 = args[1] local f1 = args[2] - local OnDamaged = function(atkRole) + local OnBeHit = function(atkRole) if atkRole.professionId == i1 then BattleUtil.CalTreat(role, role, f1) end end - role.Event:AddEvent(BattleEventName.RoleBeDamaged, OnDamaged) + role.Event:AddEvent(BattleEventName.RoleBeHit, OnBeHit) end, --造成伤害时,将伤害的[a]%转化为自身生命 diff --git a/luafight/Modules/Battle/Logic/Buff/DOT.lua b/luafight/Modules/Battle/Logic/Buff/DOT.lua index 9f76fe09f..8ffe239fd 100644 --- a/luafight/Modules/Battle/Logic/Buff/DOT.lua +++ b/luafight/Modules/Battle/Logic/Buff/DOT.lua @@ -27,7 +27,7 @@ end --间隔N帧触发,返回true时表示继续触发,返回false立刻触发OnEnd function DOT:OnTrigger() --log("DOT:OnTrigger") - BattleUtil.CalDamage(self.caster, self.target, self.damagePro, self.damageFactor) + BattleUtil.CalDamage(self.caster, self.target, self.damagePro, self.damageFactor,0, true) return true end diff --git a/luafight/Modules/Battle/Logic/Misc/BattleDefine.lua b/luafight/Modules/Battle/Logic/Misc/BattleDefine.lua index 3a5bc404d..83a894f0d 100644 --- a/luafight/Modules/Battle/Logic/Misc/BattleDefine.lua +++ b/luafight/Modules/Battle/Logic/Misc/BattleDefine.lua @@ -17,15 +17,17 @@ BattleEventName = { RoleBeDamaged = indexAdd(), RoleDamage = indexAdd(), - RoleDamageBefore = indexAdd(), RoleBeDamagedBefore = indexAdd(), + RoleDamageBefore = indexAdd(), RoleBeTreated = indexAdd(), RoleTreat = indexAdd(), RoleBeHealed = indexAdd(), RoleBeCrit = indexAdd(), RoleCrit = indexAdd(), - RoleDodge = indexAdd(), + RoleBeHit = indexAdd(), + RoleHit = indexAdd(), --造成伤害,dot情况排除 RoleBeDodge = indexAdd(), + RoleDodge = indexAdd(), RoleDead = indexAdd(), RoleRevive = indexAdd(), RolePropertyChanged = indexAdd(), diff --git a/luafight/Modules/Battle/Logic/Misc/BattleUtil.lua b/luafight/Modules/Battle/Logic/Misc/BattleUtil.lua index b242cec23..e17120a90 100644 --- a/luafight/Modules/Battle/Logic/Misc/BattleUtil.lua +++ b/luafight/Modules/Battle/Logic/Misc/BattleUtil.lua @@ -59,9 +59,10 @@ function BattleUtil.CalShield(atkRole, defRole, damage) return damage end -function BattleUtil.ApplyDamage(atkRole, defRole, damage, bCrit, damageType) +function BattleUtil.ApplyDamage(atkRole, defRole, damage, bCrit, damageType, isDot) bCrit = bCrit or false damageType = damageType or 0 + isDot = isDot or false if atkRole.isTeam then --max(技能基础伤害*(1+已方异妖伤害加成-目标异妖伤害减免),30%×技能基础伤害) @@ -93,14 +94,16 @@ function BattleUtil.ApplyDamage(atkRole, defRole, damage, bCrit, damageType) end end - if atkRole then - atkRole.Event:DispatchEvent(BattleEventName.RoleDamage, defRole, damage, bCrit, finalDmg, damageType) - end + atkRole.Event:DispatchEvent(BattleEventName.RoleDamage, defRole, damage, bCrit, finalDmg, damageType) defRole.Event:DispatchEvent(BattleEventName.RoleBeDamaged, atkRole, damage, bCrit, finalDmg, damageType) if bCrit then atkRole.Event:DispatchEvent(BattleEventName.RoleCrit, defRole) defRole.Event:DispatchEvent(BattleEventName.RoleBeCrit, atkRole) end + if not isDot then + atkRole.Event:DispatchEvent(BattleEventName.RoleHit, defRole) + defRole.Event:DispatchEvent(BattleEventName.RoleBeHit, atkRole) + end end return finalDmg else @@ -109,8 +112,9 @@ function BattleUtil.ApplyDamage(atkRole, defRole, damage, bCrit, damageType) end --执行完整的命中,伤害,暴击计算,返回命中,暴击 -function BattleUtil.CalDamage(atkRole, defRole, damageType, baseFactor, ignoreDef) - if atkRole.isTeam and not defRole.isDead then --如果计算真实伤害,则damageType为伤害值 +--atkRole攻击者 defRole受击者 damageType伤害类型 baseFactor伤害系数 ignoreDef无视防御参数 isDot是否是dot +function BattleUtil.CalDamage(atkRole, defRole, damageType, baseFactor, ignoreDef, isDot) + if atkRole.isTeam and not defRole.isDead then --如果是队伍技能,计算真实伤害,则damageType为伤害值 return BattleUtil.ApplyDamage(atkRole, defRole, damageType), false end baseFactor = baseFactor or 1 @@ -174,7 +178,7 @@ function BattleUtil.CalDamage(atkRole, defRole, damageType, baseFactor, ignoreDe baseDamage = BattleUtil.CalShield(atkRole, defRole, baseDamage) local finalDmg = 0 --计算实际造成的扣血 if not defRole.isDead then - finalDmg = BattleUtil.ApplyDamage(atkRole, defRole, baseDamage, bCrit, damageType) + finalDmg = BattleUtil.ApplyDamage(atkRole, defRole, baseDamage, bCrit, damageType, isDot) end return finalDmg, bCrit end