lua fight

back_recharge
wangyuan 2019-05-18 17:20:57 +08:00
parent 7c537afd21
commit 2d3d1115a6
4 changed files with 31 additions and 25 deletions

View File

@ -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]%转化为自身生命

View File

@ -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

View File

@ -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(),

View File

@ -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