战斗同步
parent
c6321bba2f
commit
4475c6a233
|
@ -217,7 +217,7 @@ local effectList = {
|
|||
local rid = args[4]
|
||||
local f3 = args[5]
|
||||
local i1 = args[6]
|
||||
caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target)
|
||||
casterBulletEffect(caster, target, interval)
|
||||
BattleLogic.WaitForTrigger(interval, function ()
|
||||
local layer
|
||||
if BattleLogic.BuffMgr:HasBuff(target, BuffName.Brand, function (buff)
|
||||
|
@ -714,6 +714,242 @@ local effectList = {
|
|||
BattleUtil.CalTreat(caster, target, i1)
|
||||
end)
|
||||
end,
|
||||
--造成[a]%的[b]伤害,计算伤害时,额外计算[c]%的[d]和[e]%的[f]
|
||||
--a[float],b[伤害类型],c[float],d[属性],e[float],f[属性]
|
||||
[44] = function(caster, target, args, interval)
|
||||
local f1 = args[1]
|
||||
local dt = args[2]
|
||||
local f2 = args[3]
|
||||
local pro1 = args[4]
|
||||
local f3 = args[5]
|
||||
local pro2 = args[6]
|
||||
|
||||
casterBulletEffect(caster, target, interval)
|
||||
BattleLogic.WaitForTrigger(interval, function ()
|
||||
local proTran1 = {proName = propertyList[pro1], tranProName = propertyList[pro1], tranFactor = f2}
|
||||
local proTran2 = {proName = propertyList[pro2], tranProName = propertyList[pro2], tranFactor = f3}
|
||||
caster.proTranList:Add(proTran1)
|
||||
caster.proTranList:Add(proTran2)
|
||||
BattleUtil.CalDamage(caster, target, dt, f1)
|
||||
caster.proTranList:Remove(caster.proTranList.size)
|
||||
caster.proTranList:Remove(caster.proTranList.size)
|
||||
end)
|
||||
end,
|
||||
--[e][a]%概率改变[b]属性[c]%,持续[d]秒
|
||||
--a[float],b[属性],c[float],d[int],e[改变类型]
|
||||
[45] = function(caster, target, args, interval)
|
||||
local f3 = calBuffHit(caster, target, args[1])
|
||||
local pro1 = args[2]
|
||||
local f1 = args[3]
|
||||
local f2 = args[4]
|
||||
local ct = args[5]
|
||||
BattleLogic.WaitForTrigger(interval, function ()
|
||||
buffRandomAction(f3, caster, target, BuffName.PropertyChange, f2, propertyList[pro1], f1, ct)
|
||||
end)
|
||||
end,
|
||||
--造成[a]%的[b]伤害,如果击杀,则永久增加[c]%的[d],最大[e]层(0为无限)
|
||||
--a[float],b[伤害类型],c[float],d[属性],e[int]
|
||||
[46] = function(caster, target, args, interval)
|
||||
local f1 = args[1]
|
||||
local dt = args[2]
|
||||
local f2 = args[3]
|
||||
local pro1 = args[4]
|
||||
local i1 = args[5]
|
||||
casterBulletEffect(caster, target, interval)
|
||||
BattleLogic.WaitForTrigger(interval, function ()
|
||||
local dmg, crit = BattleUtil.CalDamage(caster, target, dt, f1)
|
||||
if target.isDead then
|
||||
local buff = Buff.Create(caster, BuffName.PropertyChange, 0, propertyList[pro1], f2, 2)
|
||||
buff.cover = true
|
||||
buff.maxLayer = i1
|
||||
caster:AddBuff(buff)
|
||||
end
|
||||
end)
|
||||
end,
|
||||
--造成[a]%的[b]伤害,若为[c],则无视[d]%的防御,并造成额外[e]%伤害
|
||||
--a[float],b[伤害类型,]c[职业],d[float],e[float]
|
||||
[47] = function(caster, target, args, interval)
|
||||
local f1 = args[1]
|
||||
local dt = args[2]
|
||||
local pt = args[3]
|
||||
local f2 = args[4]
|
||||
local f3 = args[5]
|
||||
casterBulletEffect(caster, target, interval)
|
||||
BattleLogic.WaitForTrigger(interval, function ()
|
||||
if target.professionId == pt then
|
||||
BattleUtil.CalDamage(caster, target, dt, f1+f3, f2)
|
||||
else
|
||||
BattleUtil.CalDamage(caster, target, dt, f1)
|
||||
end
|
||||
end)
|
||||
end,
|
||||
--造成[a]*[b]%的伤害(真实伤害)
|
||||
--a[属性],b[float]
|
||||
[48] = function(caster, target, args, interval)
|
||||
local pro = args[1]
|
||||
local d = args[2]
|
||||
casterBulletEffect(caster, target, interval)
|
||||
BattleLogic.WaitForTrigger(interval, function ()
|
||||
BattleUtil.ApplyDamage(caster, target, floor(caster:GetRoleData(propertyList[pro]) * d))
|
||||
end)
|
||||
end,
|
||||
--造成[a]%的[b]伤害,提升自身下个技能[c]%的伤害
|
||||
--a[float],b[伤害类型],c[float]
|
||||
[49] = function(caster, target, args, interval)
|
||||
local f1 = args[1]
|
||||
local dt = args[2]
|
||||
local f2 = args[3]
|
||||
casterBulletEffect(caster, target, interval)
|
||||
BattleLogic.WaitForTrigger(interval, function ()
|
||||
BattleUtil.CalDamage(caster, target, dt, f1)
|
||||
local OnPassiveDamaging = function(damagingFunc, defRole, damage)
|
||||
damagingFunc(-floor(f2 * damage))
|
||||
end
|
||||
local OnSkillCast, OnSkillCastEnd
|
||||
OnSkillCast = function(skill)
|
||||
caster.Event:AddEvent(BattleEventName.PassiveDamaging, OnPassiveDamaging)
|
||||
caster.Event:RemoveEvent(BattleEventName.SkillCast, OnSkillCast)
|
||||
end
|
||||
OnSkillCastEnd = function(skill)
|
||||
caster.Event:RemoveEvent(BattleEventName.PassiveDamaging, OnPassiveDamaging)
|
||||
caster.Event:RemoveEvent(BattleEventName.SkillCastEnd, OnSkillCastEnd)
|
||||
end
|
||||
caster.Event:AddEvent(BattleEventName.SkillCast, OnSkillCast)
|
||||
caster.Event:AddEvent(BattleEventName.SkillCastEnd, OnSkillCastEnd)
|
||||
end)
|
||||
end,
|
||||
--造成[a]%的[b]伤害,如果目标受到此次伤害前,生命低于最大生命[c]%,则直接击杀。
|
||||
--a[float],b[伤害类型],c[float]
|
||||
[50] = function(caster, target, args, interval)
|
||||
local f1 = args[1]
|
||||
local dt = args[2]
|
||||
local f2 = args[3]
|
||||
casterBulletEffect(caster, target, interval)
|
||||
BattleLogic.WaitForTrigger(interval, function ()
|
||||
if BattleUtil.GetHPPencent(target) < f2 then
|
||||
BattleUtil.ApplyDamage(caster, target, target:GetRoleData(RoleDataName.Hp))
|
||||
else
|
||||
BattleUtil.CalDamage(caster, target, dt, f1)
|
||||
end
|
||||
end)
|
||||
end,
|
||||
--造成[a]%的[b]伤害,增加[c]层缚灵印记,每层印记[f]改变[d]属性[e]%,[i]改变[g]属性[h]%,最大[j]层(0为无限)
|
||||
--a[float],b[伤害类型],c[int],d[属性],e[float],f[改变类型],g[属性],h[float],i[改变类型],j[int]
|
||||
[51] = function(caster, target, args, interval)
|
||||
local f1 = args[1]
|
||||
local dt = args[2]
|
||||
local i1 = args[3]
|
||||
local pro1 = args[4]
|
||||
local f2 = args[5]
|
||||
local ct1 = args[6]
|
||||
local pro2 = args[7]
|
||||
local f3 = args[8]
|
||||
local ct2 = args[9]
|
||||
local i2 = args[10]
|
||||
casterBulletEffect(caster, target, interval)
|
||||
local flag = "fuling"..caster.uid
|
||||
BattleLogic.WaitForTrigger(interval, function ()
|
||||
BattleUtil.CalDamage(caster, target, dt, f1)
|
||||
local changeBuff1 = Buff.Create(target, BuffName.PropertyChange, 0, propertyList[pro1], f2*i1, ct1)
|
||||
changeBuff1.cover = true
|
||||
changeBuff1.maxLayer = i2
|
||||
|
||||
local changeBuff2 = Buff.Create(target, BuffName.PropertyChange, 0, propertyList[pro2], f3*i1, ct2)
|
||||
changeBuff2.cover = true
|
||||
changeBuff2.maxLayer = i2
|
||||
|
||||
target:AddBuff(changeBuff1)
|
||||
target:AddBuff(changeBuff2)
|
||||
|
||||
local brandBuff
|
||||
brandBuff = Buff.Create(caster, BuffName.Brand, 0, flag, function ()
|
||||
brandBuff.linkBuff1 = nil
|
||||
brandBuff.linkBuff2 = nil
|
||||
end)
|
||||
brandBuff.linkBuff1 = changeBuff1
|
||||
brandBuff.linkBuff2 = changeBuff2
|
||||
target:AddBuff(brandBuff)
|
||||
end)
|
||||
end,
|
||||
--造成[a]%的[b]伤害,引爆目标身上所有缚灵印记,每层造成攻击*[c]的真实伤害。
|
||||
--a[float],b[伤害类型],c[float]
|
||||
[52] = function(caster, target, args, interval)
|
||||
local f1 = args[1]
|
||||
local dt = args[2]
|
||||
local f2 = args[3]
|
||||
casterBulletEffect(caster, target, interval)
|
||||
local flag = "fuling"..caster.uid
|
||||
BattleLogic.WaitForTrigger(interval, function ()
|
||||
BattleUtil.CalDamage(caster, target, dt, f1)
|
||||
local layer, brandBuff
|
||||
if BattleLogic.BuffMgr:HasBuff(target, BuffName.Brand, function (buff)
|
||||
local b = buff.flag == flag
|
||||
if b then
|
||||
layer = buff.layer
|
||||
brandBuff = buff
|
||||
end
|
||||
return b
|
||||
end) then
|
||||
BattleUtil.ApplyDamage(caster, target, floor(caster:GetRoleData(RoleDataName.Attack) * f2 * layer))
|
||||
brandBuff.disperse = true
|
||||
if brandBuff.linkBuff1 then
|
||||
brandBuff.linkBuff1.disperse = true
|
||||
end
|
||||
if brandBuff.linkBuff2 then
|
||||
brandBuff.linkBuff2.disperse = true
|
||||
end
|
||||
end
|
||||
end)
|
||||
end,
|
||||
--若目标生命低于最大生命的[a]%,则有[b]%概率[c],持续[d]秒
|
||||
--a[float],b[float],c[控制状态],d[int]
|
||||
[53] = function(caster, target, args, interval)
|
||||
local f1 = args[1]
|
||||
local f2 = calBuffHit(caster, target, args[2])
|
||||
local ct = args[3]
|
||||
local f3 = args[4]
|
||||
BattleLogic.WaitForTrigger(interval, function ()
|
||||
if BattleUtil.GetHPPencent(target) < f1 then
|
||||
buffRandomAction(f2, caster, target, BuffName.Control, f3, ct)
|
||||
end
|
||||
end)
|
||||
end,
|
||||
--[e]改变[a]属性[b]%的[c],持续[d]秒
|
||||
--a[属性],b[float],c[属性],d[int],e[改变类型]
|
||||
[54] = function(caster, target, args, interval)
|
||||
local pro1 = args[1]
|
||||
local f1 = args[2]
|
||||
local pro2 = args[3]
|
||||
local f2 = args[4]
|
||||
local ct = args[5]
|
||||
BattleLogic.WaitForTrigger(interval, function ()
|
||||
target:AddBuff(Buff.Create(caster, BuffName.PropertyChange, f2, propertyList[pro1], floor(caster:GetRoleData(propertyList[pro2]) * f1), ct))
|
||||
end)
|
||||
end,
|
||||
--清除[a]状态
|
||||
--a[清除状态]
|
||||
[55] = function(caster, target, args, interval)
|
||||
local ct = args[1]
|
||||
BattleLogic.WaitForTrigger(interval, function ()
|
||||
if ct == 1 then --持续恢复
|
||||
BattleLogic.BuffMgr:ClearBuff(target, function (buff)
|
||||
return buff.type == BuffName.HOT
|
||||
end)
|
||||
elseif ct == 2 then --护盾
|
||||
BattleLogic.BuffMgr:ClearBuff(target, function (buff)
|
||||
return buff.type == BuffName.Shield
|
||||
end)
|
||||
elseif ct == 3 then --增益状态
|
||||
BattleLogic.BuffMgr:ClearBuff(target, function (buff)
|
||||
return buff.isBuff == true
|
||||
end)
|
||||
elseif ct == 4 then --减益状态
|
||||
BattleLogic.BuffMgr:ClearBuff(target, function (buff)
|
||||
return buff.isDeBuff == true
|
||||
end)
|
||||
end
|
||||
end)
|
||||
end,
|
||||
}
|
||||
|
||||
return effectList
|
|
@ -183,7 +183,7 @@ function Skill:Cast()
|
|||
end
|
||||
--表现层调用
|
||||
function Skill:CanManualCast()
|
||||
return not self.isManual and self.owner.enable and not self.owner.ctrl_slient and
|
||||
return not self.isManual and self.owner.enable and (not self.owner.ctrl_slient or (self.owner.ctrl_slient and self.owner.skill == self)) and
|
||||
self.owner.camp == 0 and not self.owner.Auto and self.sp >= self.spPass
|
||||
end
|
||||
--表现层调用
|
||||
|
|
|
@ -117,7 +117,7 @@ function RoleLogic:Init(uid, data)
|
|||
self.updateFunc = function()
|
||||
local superSkill = self.superSkill
|
||||
if superSkill.sp >= superSkill.spPass then
|
||||
if self.Auto and self:CanCastSkill() then
|
||||
if self.Auto and self:CanCastSkill() and not self.ctrl_slient then
|
||||
superSkill:Cast()
|
||||
end
|
||||
else
|
||||
|
@ -146,7 +146,7 @@ function RoleLogic:Init(uid, data)
|
|||
end
|
||||
|
||||
function RoleLogic:CanCastSkill()
|
||||
return self.enable and not self.ctrl_slient and not self.IsDebug and BattleLogic.GetSkillUsable(self.camp)
|
||||
return self.enable and not self.IsDebug and BattleLogic.GetSkillUsable(self.camp)
|
||||
end
|
||||
|
||||
function RoleLogic:GetSkillCD()
|
||||
|
@ -284,11 +284,15 @@ function RoleLogic:ExecuteAI(skill, superSkill)
|
|||
else
|
||||
ai = aiList[0]
|
||||
end
|
||||
|
||||
if ai(skill, superSkill) then
|
||||
|
||||
if self.ctrl_slient then --沉默不能放上滑技
|
||||
skill:Cast()
|
||||
else
|
||||
superSkill:Cast()
|
||||
if ai(skill, superSkill) then
|
||||
skill:Cast()
|
||||
else
|
||||
superSkill:Cast()
|
||||
end
|
||||
end
|
||||
|
||||
if self.aiOrder then
|
||||
|
|
Loading…
Reference in New Issue