战斗同步

lvxinran 2019-09-02 13:16:49 +08:00
parent c6321bba2f
commit 4475c6a233
3 changed files with 247 additions and 7 deletions

View File

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

View File

@ -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
--表现层调用

View File

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