From 4475c6a2332238bb54283efcac4fb33b1f8c0af3 Mon Sep 17 00:00:00 2001 From: lvxinran Date: Mon, 2 Sep 2019 13:16:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=98=E6=96=97=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- luafight/Modules/Battle/Logic/Base/Effect.lua | 238 +++++++++++++++++- luafight/Modules/Battle/Logic/Base/Skill.lua | 2 +- luafight/Modules/Battle/Logic/RoleLogic.lua | 14 +- 3 files changed, 247 insertions(+), 7 deletions(-) diff --git a/luafight/Modules/Battle/Logic/Base/Effect.lua b/luafight/Modules/Battle/Logic/Base/Effect.lua index b5a4ea7c4..30c8c1055 100644 --- a/luafight/Modules/Battle/Logic/Base/Effect.lua +++ b/luafight/Modules/Battle/Logic/Base/Effect.lua @@ -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 \ No newline at end of file diff --git a/luafight/Modules/Battle/Logic/Base/Skill.lua b/luafight/Modules/Battle/Logic/Base/Skill.lua index 6c84c1c81..81e45bbb8 100644 --- a/luafight/Modules/Battle/Logic/Base/Skill.lua +++ b/luafight/Modules/Battle/Logic/Base/Skill.lua @@ -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 --表现层调用 diff --git a/luafight/Modules/Battle/Logic/RoleLogic.lua b/luafight/Modules/Battle/Logic/RoleLogic.lua index 9e971832d..bc0ff269f 100644 --- a/luafight/Modules/Battle/Logic/RoleLogic.lua +++ b/luafight/Modules/Battle/Logic/RoleLogic.lua @@ -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