From bf2cfc3bcfd0acdaf8ea710e08ea1ed550b6244f Mon Sep 17 00:00:00 2001 From: lvxinran Date: Fri, 10 Apr 2020 14:52:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=98=E6=96=97=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Modules/Battle/Logic/Base/BattleEvent.lua | 2 +- luafight/Modules/Battle/Logic/Base/Buff.lua | 124 +- luafight/Modules/Battle/Logic/Base/Effect.lua | 715 +++++++--- .../Modules/Battle/Logic/Base/Passivity.lua | 1262 ++++++++++++++++- luafight/Modules/Battle/Logic/Base/Random.lua | 2 +- .../Modules/Battle/Logic/Base/RoleData.lua | 6 +- luafight/Modules/Battle/Logic/Base/Skill.lua | 198 ++- luafight/Modules/Battle/Logic/BattleLogic.lua | 354 +++-- luafight/Modules/Battle/Logic/Buff/Aura.lua | 14 +- luafight/Modules/Battle/Logic/Buff/Brand.lua | 14 +- .../Modules/Battle/Logic/Buff/Control.lua | 20 +- luafight/Modules/Battle/Logic/Buff/DOT.lua | 24 +- luafight/Modules/Battle/Logic/Buff/HOT.lua | 15 +- luafight/Modules/Battle/Logic/Buff/Immune.lua | 16 +- .../Battle/Logic/Buff/PropertyChange.lua | 14 +- luafight/Modules/Battle/Logic/Buff/Shield.lua | 92 +- .../Battle/Logic/Misc/BattleDefine.lua | 46 +- .../Battle/Logic/Misc/BattleDictionary.lua | 8 +- .../Modules/Battle/Logic/Misc/BattleList.lua | 2 +- .../Modules/Battle/Logic/Misc/BattleUtil.lua | 225 ++- luafight/Modules/Battle/Logic/RoleLogic.lua | 269 ++-- .../com/ljsd/jieling/util/FightDataUtil.java | 15 +- .../src/main/java/config/SCombatControl.java | 31 + .../main/java/config/SSkillLogicConfig.java | 7 +- .../src/main/java/config/SSkillLogicVo.java | 10 +- .../src/main/java/config/SkillTargetVo.java | 8 - 26 files changed, 2761 insertions(+), 732 deletions(-) create mode 100644 tablemanager/src/main/java/config/SCombatControl.java diff --git a/luafight/Modules/Battle/Logic/Base/BattleEvent.lua b/luafight/Modules/Battle/Logic/Base/BattleEvent.lua index 70523f351..358ffed02 100644 --- a/luafight/Modules/Battle/Logic/Base/BattleEvent.lua +++ b/luafight/Modules/Battle/Logic/Base/BattleEvent.lua @@ -66,4 +66,4 @@ function BattleEvent:ClearEvent() listPool:Put(v) self.m_listeners[k]=nil end -end \ No newline at end of file +end diff --git a/luafight/Modules/Battle/Logic/Base/Buff.lua b/luafight/Modules/Battle/Logic/Base/Buff.lua index 9372d16b5..c3502f85e 100644 --- a/luafight/Modules/Battle/Logic/Base/Buff.lua +++ b/luafight/Modules/Battle/Logic/Base/Buff.lua @@ -38,13 +38,34 @@ function Buff.Create(caster, type, duration, ...) buff.clear = true --该值为false时,buff不可被驱散,除非无条件驱散 buff.duration = duration --持续时间为0时buff永久存在 - buff.interval = -1 --间隔帧为0时每帧触发,小于0不触发 默认不触发OnTrigger - buff.framePass = 0 + buff.interval = -1 --间隔帧为0时每回合触发,小于0不触发 默认不触发OnTrigger + -- buff.framePass = 0 + + buff.roundPass = 0 + buff:SetData(...) return buff end +-- 改变buff的轮次 +function Buff:ChangeBuffDuration(type, value) + -- 永久存在改变无效 + if self.duration <= 0 then + return + end + + -- 计算 + local finalDuration = BattleUtil.ErrorCorrection(BattleUtil.CountValue(self.duration, value, type)) + self.duration = finalDuration + if self.roundDuration then + self.roundDuration = finalDuration + end + + -- 发送事件 + self.caster.Event:DispatchEvent(BattleEventName.BuffDurationChange, self) +end + BuffManager = {} BuffManager.__index = BuffManager @@ -54,6 +75,14 @@ function BuffManager.New() return instance end +-- 根据类型获取buff的刷新级别 +-- local _TypeToLevel = { +-- [] = , +-- } +function BuffManager.GetLevelByType(type) + +end + function BuffManager:Init() while self.buffQueue.size > 0 do putBuff(self.buffQueue:Dequeue()) @@ -72,7 +101,7 @@ end function BuffManager:AddBuff(target, buff) buff.target = target self.buffQueue:Enqueue(buff) - buff.frameDuration = floor(buff.duration * BattleLogic.GameFrameRate) + -- buff.frameDuration = floor(buff.duration * BattleLogic.GameFrameRate) --if buff.isBuff then --TODO:增益buff持续时间加成 -- local buffBocus = buff.caster:GetRoleData(RoleDataName.BuffBocus) -- buff.frameDuration = floor(buff.duration * (1 + buffBocus + buff.exCtrlTime) * BattleLogic.GameFrameRate) @@ -83,7 +112,10 @@ function BuffManager:AddBuff(target, buff) -- buff.frameDuration = floor(buff.duration * (1 - debuffReduce - buff.exCtrlTime) * BattleLogic.GameFrameRate) --end - buff.frameInterval = floor(buff.interval * BattleLogic.GameFrameRate) + -- buff.frameInterval = floor(buff.interval * BattleLogic.GameFrameRate) + + buff.roundDuration = buff.duration + buff.roundInterval = buff.interval buff.caster.Event:DispatchEvent(BattleEventName.BuffCaster, buff) end @@ -148,7 +180,9 @@ function BuffManager:GetBuffCount(type) return 0 end +-- 每帧刷新 function BuffManager:Update() + -- 检测上一帧生成的buff,加入管理 while self.buffQueue.size > 0 do local buff = self.buffQueue:Dequeue() local buffList @@ -158,14 +192,18 @@ function BuffManager:Update() else buffList = self.buffDic.kvList[buff.type] end + + -- 是覆盖类型的buff且有老buff if buff.cover and buffList.size > 0 then local isCovered = false for i=1, buffList.size do local oldBuff = buffList.buffer[i] if oldBuff.cover and oldBuff.target == buff.target and oldBuff.clear == buff.clear and oldBuff:OnCover(buff) then --判定该效果能否被覆盖 + -- 结束并回收老buff oldBuff:OnEnd() oldBuff.target.Event:DispatchEvent(BattleEventName.BuffEnd, oldBuff) putBuff(oldBuff) + -- 覆盖老buff buffList.buffer[i] = buff buff:OnStart() buff.target.Event:DispatchEvent(BattleEventName.BuffStart, buff) @@ -174,50 +212,27 @@ function BuffManager:Update() break end end + -- 没有覆盖,新buff if not isCovered then buffList:Add(buff) buff:OnStart() buff.target.Event:DispatchEvent(BattleEventName.BuffStart, buff) end else + -- 新buff buffList:Add(buff) buff:OnStart() buff.target.Event:DispatchEvent(BattleEventName.BuffStart, buff) end end + + -- 清除过期buff for i=1, self.buffDic.size do local buffList = self.buffDic.vList[i] if buffList.size > 0 then local index = 1 while index <= buffList.size do local buff = buffList.buffer[index] - --印记类型的buff不处理更新逻辑 - if buff.frameDuration == 0 and buff.frameInterval < 0 then - else - buff.framePass = buff.framePass + 1 - if buff.frameDuration == 0 then - if buff.frameInterval == 0 or buff.framePass % buff.frameInterval == 0 then - if not buff:OnTrigger() then - buff.disperse = true - end - buff.target.Event:DispatchEvent(BattleEventName.BuffTrigger, buff) - end - elseif buff.frameInterval < 0 then - if buff.framePass > buff.frameDuration then - buff.disperse = true - end - else - if buff.frameInterval == 0 or buff.framePass % buff.frameInterval == 0 then - if not buff:OnTrigger() then - buff.disperse = true - end - buff.target.Event:DispatchEvent(BattleEventName.BuffTrigger, buff) - end - if buff.framePass > buff.frameDuration then - buff.disperse = true - end - end - end if buff.disperse then buff:OnEnd() buff.target.Event:DispatchEvent(BattleEventName.BuffEnd, buff) @@ -230,3 +245,50 @@ function BuffManager:Update() end end end + +-- 每一个人的轮次都刷新 +function BuffManager:TurnUpdate(sort) + for i=1, self.buffDic.size do + local buffList = self.buffDic.vList[i] + if buffList.size > 0 then + local index = 1 + while index <= buffList.size do + local buff = buffList.buffer[index] + local curCamp, curPos = BattleLogic.GetCurTurn() + if buff.sort == sort -- 当前buff刷新等级 + and buff.target.camp == curCamp -- 当前阵营 + and buff.target.position == curPos then -- 当前位置 + --印记类型的buff不处理更新逻辑 + if buff.roundDuration == 0 and buff.roundInterval < 0 then + else + buff.roundPass = buff.roundPass + 1 + if buff.roundDuration == 0 then + if buff.roundInterval == 0 or buff.roundPass % buff.roundInterval == 0 then + if not buff:OnTrigger() then + buff.disperse = true + end + buff.target.Event:DispatchEvent(BattleEventName.BuffTrigger, buff) + end + elseif buff.roundInterval < 0 then + if buff.roundPass > buff.roundDuration then + buff.disperse = true + end + else + if buff.roundInterval == 0 or buff.roundPass % buff.roundInterval == 0 then + if not buff:OnTrigger() then + buff.disperse = true + end + buff.target.Event:DispatchEvent(BattleEventName.BuffTrigger, buff) + end + if buff.roundPass > buff.roundDuration then + buff.disperse = true + end + end + buff.target.Event:DispatchEvent(BattleEventName.BuffRoundChange, buff) + end + end + index = index + 1 + end + end + end +end diff --git a/luafight/Modules/Battle/Logic/Base/Effect.lua b/luafight/Modules/Battle/Logic/Base/Effect.lua index cddbb6d7e..39f4d8a4c 100644 --- a/luafight/Modules/Battle/Logic/Base/Effect.lua +++ b/luafight/Modules/Battle/Logic/Base/Effect.lua @@ -22,12 +22,23 @@ local propertyList = { RoleDataName.Hp, RoleDataName.CureFacter, RoleDataName.Tenacity, + RoleDataName.InitRage, } local function buffRandomAction(random, target, buff) - local b = Random.Range01() <= random + + -- 检测被动技能对技能的加成 + local rate = random + local _ControlRatePassivitying = function(finalRate) + rate = finalRate + end + buff.caster.Event:DispatchEvent(BattleEventName.SkillRandomBuff, target, buff, rate, _ControlRatePassivitying) + + -- 计算概率 + local b = Random.Range01() <= rate if b then target:AddBuff(buff) + return true else target.Event:DispatchEvent(BattleEventName.BuffDodge, buff) BattleLogic.BuffMgr:PutBuff(buff) @@ -65,26 +76,27 @@ end local effectList = { --造成[a]%的[b]伤害 --a[float],b[伤害类型] - [1] = function(caster, target, args, interval) + [1] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) end) end, --造成[a]%的[b]伤害【AOE】 --a[float],b[伤害类型] - [2] = function(caster, target, args, interval) + [2] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] + -- caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) end) end, --[a]%概率[b],持续[c]秒 --a[float],b[控制状态],c[float] - [3] = function(caster, target, args, interval) + [3] = function(caster, target, args, interval, skill) local f1 = args[1] local cb1 = args[2] local f2 = args[3] @@ -94,7 +106,7 @@ local effectList = { end, --[d]改变[a]属性[b]%,持续[c]秒 --a[属性],b[float],c[int],d[改变类型] - [4] = function(caster, target, args, interval) + [4] = function(caster, target, args, interval, skill) local pro1 = args[1] local f1 = args[2] local f2 = args[3] @@ -109,7 +121,7 @@ local effectList = { end, --持续恢复[a]*[b]%生命,持续[c]秒 --a[属性],b[float],c[int] - [5] = function(caster, target, args, interval) + [5] = function(caster, target, args, interval, skill) local pro1 = args[1] local f1 = args[2] local f2 = args[3] @@ -120,7 +132,7 @@ local effectList = { end, --造成[a]到[b]次[c]%的[d]伤害 --a[int],b[int],c[float],d[伤害类型] - [6] = function(caster, target, args, interval) + [6] = function(caster, target, args, interval, skill) local i1 = args[1] local i2 = args[2] local f1 = args[3] @@ -130,16 +142,16 @@ local effectList = { local d = interval / count for i=1, count do BattleLogic.WaitForTrigger(d * (i-1), function () - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, d, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target, d) BattleLogic.WaitForTrigger(d, function () - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) end) end) end end, --造成[a]到[b]次[c]%的[d]伤害【AOE】 --a[int],b[int],c[float],d[伤害类型] - [7] = function(caster, target, args, interval) + [7] = function(caster, target, args, interval, skill) local i1 = args[1] local i2 = args[2] local f1 = args[3] @@ -150,14 +162,14 @@ local effectList = { for i=1, count do BattleLogic.WaitForTrigger(d * (i-1), function () BattleLogic.WaitForTrigger(d, function () - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) end) end) end end, --[b]%改变[c]下次重击技能CD[a]秒 --a[float],b[float],c[改变类型] - [8] = function(caster, target, args, interval) + [8] = function(caster, target, args, interval, skill) local f1 = args[1] local f2 = args[2] local ct = args[3] @@ -169,46 +181,46 @@ local effectList = { end, --添加[a]的[b]%护盾,持续[c]秒,盾消失的时候反射吸收伤害的[d]% --a[属性],b[float],c[int],d[float] - [9] = function(caster, target, args, interval) + [9] = function(caster, target, args, interval, skill) local pro1 = args[1] local f1 = args[2] local f2 = args[3] local f3 = args[4] BattleLogic.WaitForTrigger(interval, function () local val = floor(BattleUtil.FP_Mul(f1, caster:GetRoleData(propertyList[pro1]))) - target:AddBuff(Buff.Create(caster, BuffName.Shield, f2, val, f3)) + target:AddBuff(Buff.Create(caster, BuffName.Shield, f2, ShieldTypeName.NormalReduce, val, f3)) end) end, --造成[a]%的[b]伤害,自身恢复造成伤害[c]%的生命 --a[float],b[伤害类型],c[float] - [10] = function(caster, target, args, interval) + [10] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local f2 = args[3] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () - local dmg = BattleUtil.CalDamage(caster, target, dt, f1) + local dmg = BattleUtil.CalDamage(skill, caster, target, dt, f1) BattleUtil.CalTreat(caster, caster, floor(dmg * f2)) end) end, --造成[a]%的[b]伤害,对[c]造成额外[d]%伤害 --a[float],b[伤害类型,]c[职业],d[float] - [11] = function(caster, target, args, interval) + [11] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local i1 = args[3] local f2 = args[4] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () if target.roleData.professionId == i1 then f1 = f1*(1+f2) end - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) end) end, --每秒造成[a]的[b]的伤害,持续[c]秒 --a[float],b[伤害类型],c[int] - [12] = function(caster, target, args, interval) + [12] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local f2 = args[3] @@ -218,7 +230,7 @@ local effectList = { end, --造成[a],每秒造成[b]的[c]的伤害,持续[d]秒 --a[持续伤害状态].b[float],c[伤害类型],d[int] - [13] = function(caster, target, args, interval) + [13] = function(caster, target, args, interval, skill) local d1 = args[1] local f1 = args[2] local dt = args[3] @@ -229,14 +241,14 @@ local effectList = { end, --造成[a]%的[b]伤害,[c]%概率[d]专属伤害加深印记(如果有印记,[a]*(1+印记数量*[e])),印记最多[f]层(减益印记,不可驱散) --a[float],b[伤害类型],c[float],d[角色id],e[float],f[int] - [14] = function(caster, target, args, interval) + [14] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local f2 = args[3] local rid = args[4] local f3 = args[5] local i1 = args[6] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () local layer if BattleLogic.BuffMgr:HasBuff(target, BuffName.Brand, function (buff) @@ -246,9 +258,9 @@ local effectList = { end return b end) then - BattleUtil.CalDamage(caster, target, dt,f1 * (1 + min(layer, i1) * f3)) + BattleUtil.CalDamage(skill, caster, target, dt,f1 * (1 + min(layer, i1) * f3)) else - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) end local buff = Buff.Create(caster, BuffName.Brand, 0, rid) buff.isDeBuff = true @@ -258,24 +270,24 @@ local effectList = { end, --造成[a]%的[b]伤害,如果击杀,则其他人再受到此次伤害的[c]%的伤害 --a[float],b[伤害类型],c[float] - [15] = function(caster, target, args, interval) + [15] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local f2 = args[3] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () - local dmg, crit = BattleUtil.CalDamage(caster, target, dt, f1) + local dmg, crit = BattleUtil.CalDamage(skill, caster, target, dt, f1) if target.isDead then local arr = BattleLogic.Query(function (r) return r.camp ~= caster.camp and r.uid ~= target.uid end) for i=1, #arr do - BattleUtil.ApplyDamage(caster, arr[i], floor(dmg * f2)) + BattleUtil.ApplyDamage(skill, caster, arr[i], floor(dmg * f2)) end end end) end, --吸取[a]%的[b],持续[c]秒(属于增益),累积不高于自身该属性的[d]% --a[float],b[属性],c[float],d[float] - [16] = function(caster, target, args, interval) + [16] = function(caster, target, args, interval, skill) local f1 = args[1] local pro = args[2] local f2 = args[3] @@ -296,33 +308,33 @@ local effectList = { end, --造成[a]%的[b]伤害,如果是[c],有[d]%必定暴击 --a[float],b[伤害类型],c[职业],d[float] - [17] = function(caster, target, args, interval) + [17] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local i1 = args[3] local f2 = args[4] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () if target.roleData.professionId == i1 then BattleUtil.RandomAction(f2, function () target.isFlagCrit = true - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) target.isFlagCrit = false end) else - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) end end) end, --造成[a]%的[b]伤害,若暴击,则减少下次发动技能CD[c]秒。 --a[float],b[伤害类型],c[float] - [18] = function(caster, target, args, interval) + [18] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local f2 = args[3] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () - local d, crit = BattleUtil.CalDamage(caster, target, dt, f1) + local d, crit = BattleUtil.CalDamage(skill, caster, target, dt, f1) if crit then caster:AddSkillCD(f2, 3) end @@ -330,7 +342,7 @@ local effectList = { end, --造成[a]%的[b]伤害,有[c]%的概率追加伤害,最多可追加[d]次。(0无限追加) --a[float],b[伤害类型],c[float],d[int] - [19] = function(caster, target, args, interval) + [19] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local f2 = args[3] @@ -346,31 +358,31 @@ local effectList = { local d = interval / count for i=1, count do BattleLogic.WaitForTrigger(d * (i-1), function () - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, d, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target, d) BattleLogic.WaitForTrigger(d, function () - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) end) end) end end, --造成[a]%的[b]伤害,对[c]造成额外[d]%伤害 --a[float],b[伤害类型,]c[控制状态],d[float] - [20] = function(caster, target, args, interval) + [20] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local i1 = args[3] local f2 = args[4] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () if BattleLogic.BuffMgr:HasBuff(target, BuffName.Control, function (buff) return i1 == 0 or buff.ctrlType == i1 end) then f1 = f1*(1+f2) end - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) end) end, --造成[a]%的[b]伤害,对[c]有[d]%造成[e],持续[f]秒【AOE】 --a[float],b[伤害类型,]c[持续伤害状态],d[float],e[控制状态],f[int] - [21] = function(caster, target, args, interval) + [21] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local dot = args[3] @@ -378,7 +390,7 @@ local effectList = { local ct = args[5] local f3 = args[6] BattleLogic.WaitForTrigger(interval, function () - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) if BattleLogic.BuffMgr:HasBuff(target, BuffName.DOT, function (buff) return dot == 0 or buff.damageType == dot end) then buffRandomAction(f2, target, Buff.Create(caster, BuffName.Control, f3, ct)) end @@ -386,7 +398,7 @@ local effectList = { end, --造成[a]%的[b]伤害,对[c]造成额外[d]%伤害【AOE】 --a[float],b[伤害类型,]c[持续伤害状态],d[float] - [22] = function(caster, target, args, interval) + [22] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local dot = args[3] @@ -395,27 +407,27 @@ local effectList = { if BattleLogic.BuffMgr:HasBuff(target, BuffName.DOT, function (buff) return dot == 0 or buff.damageType == dot end) then f1 = f1*(1+f2) end - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) end) end, --造成[a]%的[b]伤害,对[c]造成额外[d]%伤害 --a[float],b[伤害类型,]c[持续回复状态],d[float] - [23] = function(caster, target, args, interval) + [23] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local ht = args[3] local f2 = args[4] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () if BattleLogic.BuffMgr:HasBuff(target, BuffName.HOT, function (buff) return true end) then f1 = f1*(1+f2) end - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) end) end, --瞬间恢复[a]*[b]%生命 --a[属性],b[float] - [24] = function(caster, target, args, interval) + [24] = function(caster, target, args, interval, skill) local pro1 = args[1] local f1 = args[2] BattleLogic.WaitForTrigger(interval, function () @@ -425,7 +437,7 @@ local effectList = { end, --对[a]的伤害[b]%,持续[c]秒 --a[持续伤害状态],b[float],c[int] - [25] = function(caster, target, args, interval) + [25] = function(caster, target, args, interval, skill) local dot = args[1] local f1 = args[2] local f2 = args[3] @@ -448,17 +460,17 @@ local effectList = { end, --造成[a]的伤害【AOE】(真实伤害) --a[int] - [26] = function(caster, target, args, interval) + [26] = function(caster, target, args, interval, skill) local d = args[1] BattleLogic.WaitForTrigger(interval, function () if not target.isDead then - BattleUtil.ApplyDamage(caster, target, d) + BattleUtil.ApplyDamage(skill, caster, target, d) end end) end, --每秒造成[d]的伤害,持续[f]秒【AOE】(真实伤害) --d[float],f[int] - [27] = function(caster, target, args, interval) + [27] = function(caster, target, args, interval, skill) local d1 = args[1] local d2 = args[2] BattleLogic.WaitForTrigger(interval, function () @@ -467,22 +479,22 @@ local effectList = { end, --造成[a]%的[b]伤害,对[c]造成额外[d]%伤害 --a[float],b[伤害类型,]c[持续伤害状态],d[float] - [28] = function(caster, target, args, interval) + [28] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local dot = args[3] local f2 = args[4] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () if BattleLogic.BuffMgr:HasBuff(target, BuffName.DOT, function (buff) return dot == 0 or buff.damageType == dot end) then f1 = f1*(1+f2) end - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) end) end, --造成[a]到[b]次[c]%的[d]伤害,对[e]造成额外[f]%伤害 --a[int],b[int],c[float],d[伤害类型],e[职业],f[float] - [29] = function(caster, target, args, interval) + [29] = function(caster, target, args, interval, skill) local i1 = args[1] local i2 = args[2] local f1 = args[3] @@ -494,35 +506,35 @@ local effectList = { local d = interval / count for i=1, count do BattleLogic.WaitForTrigger(d * (i-1), function () - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, d, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target, d) BattleLogic.WaitForTrigger(d, function () if target.roleData.professionId == pt then f1 = f1*(1+f2) end - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) end) end) end end, --造成[a]%的[b]伤害,若为[c],则无视敌人[d]%的防御 --a[float],b[伤害类型,]c[控制状态],d[float] - [30] = function(caster, target, args, interval) + [30] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local ct = args[3] local f2 = args[4] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () if BattleLogic.BuffMgr:HasBuff(target, BuffName.Control, function (buff) return ct == 0 or buff.ctrlType == ct end) then - BattleUtil.CalDamage(caster, target, dt, f1, f2) + BattleUtil.CalDamage(skill, caster, target, dt, f1, f2) else - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) end end) end, --[a]%概率[b],持续[c]秒 --a[float],b[免疫buff],c[int] - [31] = function(caster, target, args, interval) + [31] = function(caster, target, args, interval, skill) local f1 = args[1] local ib1 = args[2] local f2 = args[3] @@ -532,7 +544,7 @@ local effectList = { end, --[b]%改变[d]重击技能CD[a]秒 ,持续[c]秒 (0代表清除所有) --a[float],b[float],c[改变类型] - [32] = function(caster, target, args, interval) + [32] = function(caster, target, args, interval, skill) local f1 = args[1] local f2 = args[2] local ct = args[3] @@ -552,14 +564,14 @@ local effectList = { end, --造成[a]%的[b]伤害,[c]%概率添加[d]的印记,该角色在攻击拥有印记的目标时,额外获得(印记层数*[e])的暴击伤害,印记最多叠加[f]层。(减益印记,不可驱散) --a[folat],b[伤害类型],c[float],d[角色id],e[float],f[float] - [33] = function(caster, target, args, interval) + [33] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local f2 = args[3] local rid = args[4] local f3 = args[5] local i1 = args[6] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () local layer if BattleLogic.BuffMgr:HasBuff(target, BuffName.Brand, function (buff) @@ -573,10 +585,10 @@ local effectList = { crit(layer * f3) end caster.Event:AddEvent(BattleEventName.PassiveCriting, OnPassiveCriting) - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) caster.Event:RemoveEvent(BattleEventName.PassiveCriting, OnPassiveCriting) else - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) end local brand = Buff.Create(caster, BuffName.Brand, 0, rid) brand.maxLayer = i1 @@ -587,7 +599,7 @@ local effectList = { end, --对[a]职业,[e]改变目标的[b]属性[c]%,持续[d]秒 --a[职业],b[属性],c[float],d[int],e[改变类型] - [34] = function(caster, target, args, interval) + [34] = function(caster, target, args, interval, skill) local pt = args[1] local pro1 = args[2] local f1 = args[3] @@ -601,7 +613,7 @@ local effectList = { end, --对[a]的伤害[b]%,持续[c]秒 --a[控制状态],b[float],c[int] - [35] = function(caster, target, args, interval) + [35] = function(caster, target, args, interval, skill) local ct = args[1] local f1 = args[2] local f2 = args[3] @@ -623,7 +635,7 @@ local effectList = { --[d]改变[a]属性[b]%,最大叠加[c]层 --a[属性],b[float],c[int],d[改变类型] - [36] = function(caster, target, args, interval) + [36] = function(caster, target, args, interval, skill) local pro1 = args[1] local f1 = args[2] local i1 = args[3] @@ -638,7 +650,7 @@ local effectList = { end, --清除[a]状态 --a[控制状态] - [37] = function(caster, target, args, interval) + [37] = function(caster, target, args, interval, skill) local ct = args[1] BattleLogic.WaitForTrigger(interval, function () BattleLogic.BuffMgr:ClearBuff(target, function (buff) @@ -648,21 +660,21 @@ local effectList = { end, --造成[a]的伤害(真实伤害) --a[int] - [38] = function(caster, target, args, interval) + [38] = function(caster, target, args, interval, skill) local d = args[1] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () if not target.isDead then - BattleUtil.ApplyDamage(caster, target, d) + BattleUtil.ApplyDamage(skill, caster, target, d) end end) end, --每秒造成[d]的伤害,持续[f]秒(真实伤害) --d[float],f[int] - [39] = function(caster, target, args, interval) + [39] = function(caster, target, args, interval, skill) local d1 = args[1] local d2 = args[2] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () local dot = Buff.Create(caster, BuffName.DOT, d2, 1, 0, d1, 1) dot.isRealDamage = true @@ -671,28 +683,28 @@ local effectList = { end, --添加[a]的伤害吸收护盾,持续[b]秒,盾消失的时候反射吸收伤害的[c]% --a[int],b[int],c[float] - [40] = function(caster, target, args, interval) + [40] = function(caster, target, args, interval, skill) local f1 = args[1] local f2 = args[2] local f3 = args[3] BattleLogic.WaitForTrigger(interval, function () - target:AddBuff(Buff.Create(caster, BuffName.Shield, f2, f1, f3)) + target:AddBuff(Buff.Create(caster, BuffName.Shield, f2, ShieldTypeName.NormalReduce, f1, f3)) end) end, --造成[a]%的[b]伤害,同时有[c]%的概率对该敌人造成[d]%的伤害,若该技能造成击杀,则有[e]%的概率清除自身CD --a[folat],b[伤害类型],c[float],d[float],e[float] - [41] = function(caster, target, args, interval) + [41] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local f2 = args[3] local f3 = args[4] local f4 = args[5] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () BattleUtil.RandomAction(f2, function () f1 = f1 + f3 end) - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) if target.isDead then BattleUtil.RandomAction(f4, function () caster:AddSkillCD(0) @@ -702,7 +714,7 @@ local effectList = { end, --进入虚弱状态,有[a]%的概率受到额外[b]%的伤害,状态持续[c]秒 --a[folat],b[float],c[int] - [42] = function(caster, target, args, interval) + [42] = function(caster, target, args, interval, skill) local f1 = args[1] local f2 = args[2] local f3 = args[3] @@ -727,7 +739,7 @@ local effectList = { end, --瞬间恢复[a]的生命 --a[int] - [43] = function(caster, target, args, interval) + [43] = function(caster, target, args, interval, skill) local i1 = args[1] BattleLogic.WaitForTrigger(interval, function () BattleUtil.CalTreat(caster, target, i1) @@ -735,7 +747,7 @@ local effectList = { end, --造成[a]%的[b]伤害,计算伤害时额外计算[c]%的[d][e]和[f]%的[g][h] --a[float],b[伤害类型],c[float],d[属性],e[改变类型],f[float],g[属性],h[改变类型] - [44] = function(caster, target, args, interval) + [44] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local f2 = args[3] @@ -745,20 +757,20 @@ local effectList = { local pro2 = args[7] local ct2 = args[8] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () local proTran1 = {proName = propertyList[pro1], tranProName = propertyList[pro1], tranFactor = f2, changeType = ct1} local proTran2 = {proName = propertyList[pro2], tranProName = propertyList[pro2], tranFactor = f3, changeType = ct2} caster.proTranList:Add(proTran1) caster.proTranList:Add(proTran2) - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, 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) + [45] = function(caster, target, args, interval, skill) local f3 = args[1] local pro1 = args[2] local f1 = args[3] @@ -770,15 +782,15 @@ local effectList = { end, --造成[a]%的[b]伤害,如果击杀,则永久增加[c]%的[d],最大[e]层(0为无限) --a[float],b[伤害类型],c[float],d[属性],e[int] - [46] = function(caster, target, args, interval) + [46] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local f2 = args[3] local pro1 = args[4] local i1 = args[5] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () - local dmg, crit = BattleUtil.CalDamage(caster, target, dt, f1) + local dmg, crit = BattleUtil.CalDamage(skill, caster, target, dt, f1) if target.isDead then local buff = Buff.Create(caster, BuffName.PropertyChange, 0, propertyList[pro1], f2, 2) buff.cover = true @@ -789,42 +801,42 @@ local effectList = { end, --造成[a]%的[b]伤害,若为[c],则无视[d]%的防御,并造成额外[e]%伤害 --a[float],b[伤害类型,]c[职业],d[float],e[float] - [47] = function(caster, target, args, interval) + [47] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local pt = args[3] local f2 = args[4] local f3 = args[5] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () if target.roleData.professionId == pt then - BattleUtil.CalDamage(caster, target, dt, f1*(1+f3), f2) + BattleUtil.CalDamage(skill, caster, target, dt, f1*(1+f3), f2) else - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) end end) end, --造成[a]*[b]%的伤害(真实伤害)(目标最大生命值伤害总上限为施法者2.5倍攻击) --a[属性],b[float] - [48] = function(caster, target, args, interval) + [48] = function(caster, target, args, interval, skill) local pro = args[1] local d = args[2] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () local v1 = BattleUtil.FP_Mul(caster:GetRoleData(propertyList[pro]), d) local v2 = BattleUtil.FP_Mul(caster:GetRoleData(RoleDataName.Attack), 2.5) - BattleUtil.ApplyDamage(caster, target, floor(min(v1, v2))) + BattleUtil.ApplyDamage(skill, caster, target, floor(min(v1, v2))) end) end, --造成[a]%的[b]伤害,提升自身下个技能[c]%的伤害 --a[float],b[伤害类型],c[float] - [49] = function(caster, target, args, interval) + [49] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local f2 = args[3] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) local OnPassiveDamaging = function(damagingFunc, defRole, damage) damagingFunc(-floor(f2 * damage)) end @@ -845,21 +857,21 @@ local effectList = { end, --造成[a]%的[b]伤害【AOE】,如果目标受到此次伤害前,生命低于最大生命[c]%,则直接击杀(击杀值不超过攻击者10倍攻击)。 --a[float],b[伤害类型],c[float] - [50] = function(caster, target, args, interval) + [50] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local f2 = args[3] BattleLogic.WaitForTrigger(interval, function () if BattleUtil.GetHPPencent(target) < f2 then - BattleUtil.ApplyDamage(caster, target, min(target:GetRoleData(RoleDataName.Hp), caster:GetRoleData(RoleDataName.Attack)*10)) + BattleUtil.ApplyDamage(skill, caster, target, min(target:GetRoleData(RoleDataName.Hp), caster:GetRoleData(RoleDataName.Attack)*10)) else - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) end end) end, --增加[c]层缚灵印记,每层使受到的伤害增加[d],减少[e]%的受治疗效果,最大[f]层(0为无限)(减益印记,不可驱散) --c[int],d[float],e[float],f[int] - [51] = function(caster, target, args, interval) + [51] = function(caster, target, args, interval, skill) local i1 = args[1] local f2 = args[2] local f3 = args[3] @@ -903,14 +915,14 @@ local effectList = { end, --造成[a]%的[b]伤害,引爆目标身上所有缚灵印记,每层造成攻击*[c]的真实伤害。 --a[float],b[伤害类型],c[float] - [52] = function(caster, target, args, interval) + [52] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local f2 = args[3] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) local flag = "fuling"..caster.uid BattleLogic.WaitForTrigger(interval, function () - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) local layer, brandBuff if BattleLogic.BuffMgr:HasBuff(target, BuffName.Brand, function (buff) local b = buff.flag == flag @@ -921,7 +933,7 @@ local effectList = { return b end) then local val = floor(BattleUtil.FP_Mul(caster:GetRoleData(RoleDataName.Attack), f2, layer)) - BattleUtil.ApplyDamage(caster, target, val) + BattleUtil.ApplyDamage(skill, caster, target, val) brandBuff.disperse = true if brandBuff.linkBuff1 then brandBuff.linkBuff1.disperse = true @@ -934,7 +946,7 @@ local effectList = { end, --若目标生命低于最大生命的[a]%,则有[b]%概率[c],持续[d]秒 --a[float],b[float],c[控制状态],d[int] - [53] = function(caster, target, args, interval) + [53] = function(caster, target, args, interval, skill) local f1 = args[1] local f2 = args[2] local ct = args[3] @@ -947,7 +959,7 @@ local effectList = { end, --[e]改变[a]属性*[b]%的[c],持续[d]秒 --a[属性],b[float],c[属性],d[int],e[改变类型] - [54] = function(caster, target, args, interval) + [54] = function(caster, target, args, interval, skill) local pro1 = args[1] local f1 = args[2] local pro2 = args[3] @@ -960,7 +972,7 @@ local effectList = { end, --清除[a]状态 --a[清除状态] - [55] = function(caster, target, args, interval) + [55] = function(caster, target, args, interval, skill) local ct = args[1] BattleLogic.WaitForTrigger(interval, function () BattleLogic.BuffMgr:ClearBuff(target, function (buff) @@ -970,13 +982,13 @@ local effectList = { end, --造成目标当前生命[a]%的真实伤害,为我方角色回复此技能所有由此效果带来的伤害,平均分配给我方生命最低的[b]个角色。 --a[float],b[int] - [56] = function(caster, target, args, interval) + [56] = function(caster, target, args, interval, skill) local f1 = args[1] local i1 = args[2] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () local val = floor(BattleUtil.FP_Mul(target:GetRoleData(RoleDataName.Hp), f1)) - local damage = BattleUtil.ApplyDamage(caster, target, val) + local damage = BattleUtil.ApplyDamage(skill, caster, target, val) local arr = BattleUtil.ChooseTarget(caster, 10110) local count = min(#arr, i1) local heal = floor(damage / count) @@ -987,39 +999,39 @@ local effectList = { end, --造成[a]%的[b]伤害,若目标血量低于最大生命值的[c]%,则必定暴击。 --a[float],b[伤害类型],c[float] - [57] = function(caster, target, args, interval) + [57] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local f2 = args[3] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () if BattleUtil.GetHPPencent(target) < f2 then target.isFlagCrit = true - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) target.isFlagCrit = false else - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) end end) end, --造成[a]%的[b]伤害,计算伤害时无视目标[c]%的[d]。 --a[float],b[伤害类型],c[float],d[属性] - [58] = function(caster, target, args, interval) + [58] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local f2 = args[3] local pro1 = args[4] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () local proTran1 = {proName = propertyList[pro1], tranProName = propertyList[pro1], tranFactor = f2, changeType = 4} target.proTranList:Add(proTran1) - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) target.proTranList:Remove(target.proTranList.size) end) end, --造成[a]次[b]%的[c]伤害,每段攻击随机选择敌方目标。 --a[int],b[float],c[伤害类型] - [59] = function(caster, target, args, interval) + [59] = function(caster, target, args, interval, skill) local i1 = args[1] local f1 = args[2] local dt = args[3] @@ -1029,9 +1041,9 @@ local effectList = { BattleLogic.WaitForTrigger(d * (i-1), function () local arr = BattleUtil.ChooseTarget(caster, 20001) if arr[1] then - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, d, arr[1]) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, arr[1], d) BattleLogic.WaitForTrigger(d, function () - BattleUtil.CalDamage(caster, arr[1], dt, f1) + BattleUtil.CalDamage(skill, caster, arr[1], dt, f1) end) end end) @@ -1039,7 +1051,7 @@ local effectList = { end, --施加印记,拥有印记的角色受到暴击攻击后会[b]改变[a]秒技能cd,印记持续[c]秒。(专属印记,属于增益) --a[int],b[float]c[int] - [60] = function(caster, target, args, interval) + [60] = function(caster, target, args, interval, skill) local f1 = args[1] local ct = args[2] local f2 = args[3] @@ -1057,7 +1069,7 @@ local effectList = { end, --消耗自身[a]%的当前生命值,为我方生命百分比最低的角色造成[b]%最大生命值的治疗。若目标为施法者,则不消耗生命。 --a[float],b[float] - [61] = function(caster, target, args, interval) + [61] = function(caster, target, args, interval, skill) local f1 = args[1] local f2 = args[2] BattleLogic.WaitForTrigger(interval, function () @@ -1072,7 +1084,7 @@ local effectList = { end, --造成[a]到[b]段[c]%的[d]伤害,若任意一段攻击前目标已死亡,则目标变为敌方生命最低的角色,继续造成后续伤害。 --a[int],b[int],c[float],d[伤害类型] - [62] = function(caster, target, args, interval) + [62] = function(caster, target, args, interval, skill) local i1 = args[1] local i2 = args[2] local f1 = args[3] @@ -1085,9 +1097,9 @@ local effectList = { if less > 0 then local role = target.isDead and BattleUtil.ChooseTarget(caster, 20110)[1] or target if role then - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, d, role) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, role, d) BattleLogic.WaitForTrigger(d, function () - BattleUtil.CalDamage(caster, role, dt, f1) + BattleUtil.CalDamage(skill, caster, role, dt, f1) delayDmgTrigger(less-1, d) end) end @@ -1097,13 +1109,13 @@ local effectList = { end, --造成[a]%的[b]伤害,若造成击杀,[c]的概率立即发动一次上滑技。 --a[float],b[伤害类型],c[float] - [63] = function(caster, target, args, interval) + [63] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local f2 = args[3] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) if target.isDead then BattleUtil.RandomAction(f2, function () if caster.superSkill then @@ -1115,7 +1127,7 @@ local effectList = { end, --造成[a]%的[b]伤害,自身每种/每层增益状态会提高此技能[c]%的伤害。【aoe】 --a[float],b[伤害类型],c[float] - [64] = function(caster, target, args, interval) + [64] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local f2 = args[3] @@ -1135,41 +1147,51 @@ local effectList = { damagingFunc(-floor(BattleUtil.FP_Mul(f2, factor, damage))) end caster.Event:AddEvent(BattleEventName.PassiveDamaging, OnPassiveDamaging) - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) caster.Event:RemoveEvent(BattleEventName.PassiveDamaging, OnPassiveDamaging) end) end, --造成[a]%的[b]伤害,[c]的概率造成眩晕,持续[d]秒。若未造成眩晕,则为目标施加增伤印记。最大[e]层(减益印记,不可驱散) --a[float],b[伤害类型],c[float],d[int],e[int] - [65] = function(caster, target, args, interval) + [65] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local f2 = args[3] local f3 = args[4] local i1 = args[5] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () - BattleUtil.CalDamage(caster, target, dt, f1) - if Random.Range01() <= f2 then - target:AddBuff(Buff.Create(caster, BuffName.Control, f3, 1)) - else + -- 伤害 + BattleUtil.CalDamage(skill, caster, target, dt, f1) + -- 控制未命中则施加增伤印记 + if not buffRandomAction(f2, target, Buff.Create(caster, BuffName.Control, f3, 1)) then local brand = Buff.Create(caster, BuffName.Brand, 0, "zengshang") brand.maxLayer = i1 brand.clear = false brand.isDeBuff = true target:AddBuff(brand) end + + -- if Random.Range01() <= f2 then + -- target:AddBuff(Buff.Create(caster, BuffName.Control, f3, 1)) + -- else + -- local brand = Buff.Create(caster, BuffName.Brand, 0, "zengshang") + -- brand.maxLayer = i1 + -- brand.clear = false + -- brand.isDeBuff = true + -- target:AddBuff(brand) + -- end end) end, --造成[a]%的[b]伤害,[c]的概率附加一层增伤印记,最大[d]层。目标身上每层印记增加此技能[e]%的伤害。(减益印记,不可驱散) --a[float],b[伤害类型],c[float],d[int],e[float] - [66] = function(caster, target, args, interval) + [66] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local f2 = args[3] local i1 = args[4] local f3 = args[5] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () local brand = Buff.Create(caster, BuffName.Brand, 0, "zengshang") brand.maxLayer = i1 @@ -1188,16 +1210,16 @@ local effectList = { damagingFunc(-floor(BattleUtil.FP_Mul(f3, layer, damage))) end caster.Event:AddEvent(BattleEventName.PassiveDamaging, OnPassiveDamaging) - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) caster.Event:RemoveEvent(BattleEventName.PassiveDamaging, OnPassiveDamaging) else - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) end end) end, --造成[a]到[b]段[c]%的[d]伤害,每段伤害有[e]的概率改变[g]目标[f]秒技能cd。 --a[int],b[int],c[float],d[伤害类型],e[float],f[float],g[改变类型] - [67] = function(caster, target, args, interval) + [67] = function(caster, target, args, interval, skill) local i1 = args[1] local i2 = args[2] local f1 = args[3] @@ -1210,9 +1232,9 @@ local effectList = { local d = interval / count for i=1, count do BattleLogic.WaitForTrigger(d * (i-1), function () - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, d, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target, d) BattleLogic.WaitForTrigger(d, function () - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) BattleUtil.RandomAction(f2, function () target:AddSkillCD(f3, ct) end) @@ -1222,13 +1244,13 @@ local effectList = { end, --造成[a]%的[b]伤害,附带持续伤害,每秒造成自身最大生命值[c]%的真实伤害,持续[d]秒。【aoe】 --a[float],b[伤害类型],c[float],d[int] - [68] = function(caster, target, args, interval) + [68] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local f2 = args[3] local f3 = args[4] BattleLogic.WaitForTrigger(interval, function () - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) local val = floor(BattleUtil.FP_Mul(caster:GetRoleData(RoleDataName.MaxHp), f2)) local dot = Buff.Create(caster, BuffName.DOT, f3, 1, 0, val, 1) dot.isRealDamage = true @@ -1237,7 +1259,7 @@ local effectList = { end, --损失自身[c]%的[d]的生命。 --c[float],d[属性] - [69] = function(caster, target, args, interval) + [69] = function(caster, target, args, interval, skill) local f1 = args[1] local pro1 = args[2] BattleLogic.WaitForTrigger(interval, function () @@ -1247,7 +1269,7 @@ local effectList = { end, --造成[a]%的[b]伤害,每损失[c]%的生命,增加本技能[d]%的伤害。【aoe】 --a[float],b[伤害类型],c[float],d[float] - [70] = function(caster, target, args, interval) + [70] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local f2 = args[3] @@ -1257,13 +1279,13 @@ local effectList = { damagingFunc(-floor(BattleUtil.FP_Mul(f2, factor, damage))) end caster.Event:AddEvent(BattleEventName.PassiveDamaging, OnPassiveDamaging) - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) caster.Event:RemoveEvent(BattleEventName.PassiveDamaging, OnPassiveDamaging) end) end, --造成[a]到[b]段[c]%的[d]伤害,每段伤害有[e]的概率造成[f],持续[g]秒。若目标处于[h]状态,则必定暴击。 --a[int],b[int],c[float],d[伤害类型],e[float],f[控制状态],g[int],h[控制状态] - [71] = function(caster, target, args, interval) + [71] = function(caster, target, args, interval, skill) local i1 = args[1] local i2 = args[2] local f1 = args[3] @@ -1277,14 +1299,14 @@ local effectList = { local d = interval / count for i=1, count do BattleLogic.WaitForTrigger(d * (i-1), function () - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, d, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target, d) BattleLogic.WaitForTrigger(d, function () if BattleLogic.BuffMgr:HasBuff(target, BuffName.Control, function (buff) return c2 == 0 or buff.ctrlType == c2 end) then target.isFlagCrit = true - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) target.isFlagCrit = false else - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) end buffRandomAction(f2, target, Buff.Create(caster, BuffName.Control, f4, c1)) end) @@ -1293,7 +1315,7 @@ local effectList = { end, --[b]概率造成[c],每秒造成[d]的[e]的伤害,持续[f]秒(属于减益) --b[float],c[持续伤害状态].d[float],e[伤害类型],f[int] - [72] = function(caster, target, args, interval) + [72] = function(caster, target, args, interval, skill) local f3 = args[1] local d1 = args[2] local f1 = args[3] @@ -1305,20 +1327,20 @@ local effectList = { end, --造成[a]%的[b]伤害,立即结算目标身上所有dot的剩余伤害。【aoe】 --a[float],b[伤害类型] - [73] = function(caster, target, args, interval) + [73] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] BattleLogic.WaitForTrigger(interval, function () - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) BattleLogic.BuffMgr:HasBuff(target, BuffName.DOT, function (buff) - if buff.duration > 0 and buff.frameInterval > 0 then - local remainFrame = buff.frameDuration - buff.framePass - local remainCount = floor(remainFrame / buff.frameInterval)+1 + if buff.duration > 0 and buff.roundInterval > 0 then + local remainFrame = buff.roundDuration - buff.roundPass + local remainCount = floor(remainFrame / buff.roundInterval)+1 buff.disperse = true if buff.caster and not buff.caster.isTeam then local trigger = function(defRole, damageFunc, damage) damageFunc(damage * remainCount) end buff.caster.Event:AddEvent(BattleEventName.RoleDamageAfter, trigger) - BattleUtil.CalDamage(buff.caster, buff.target, buff.damagePro, buff.damageFactor,0, true) + BattleUtil.CalDamage(skill, buff.caster, buff.target, buff.damagePro, buff.damageFactor,0, true) buff.caster.Event:RemoveEvent(BattleEventName.RoleDamageAfter, trigger) end end @@ -1328,7 +1350,7 @@ local effectList = { end, --[a]概率瞬间恢复[b]*[c]%生命 --a[float],b[属性],c[float] - [74] = function(caster, target, args, interval) + [74] = function(caster, target, args, interval, skill) local f2 = args[1] local pro1 = args[2] local f1 = args[3] @@ -1341,18 +1363,18 @@ local effectList = { end, --造成[a]%的[b]伤害,计算伤害时额外计算[c]%的[d][e],若该技能造成击杀,则有[f]%的概率清除自身CD --a[float],b[伤害类型],c[float],d[属性],e[改变类型],f[float] - [75] = function(caster, target, args, interval) + [75] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local f2 = args[3] local pro1 = args[4] local ct = args[5] local f3 = args[6] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () local proTran = {proName = propertyList[pro1], tranProName = propertyList[pro1], tranFactor = f2, changeType = ct} caster.proTranList:Add(proTran) - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) caster.proTranList:Remove(caster.proTranList.size) if target.isDead then BattleUtil.RandomAction(f3, function () @@ -1363,21 +1385,21 @@ local effectList = { end, --造成[a]%的[b]伤害,对拥有护盾的敌人额外造成[c]%伤害。 --a[float],b[伤害类型],c[float] - [76] = function(caster, target, args, interval) + [76] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local f2 = args[3] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () if BattleLogic.BuffMgr:HasBuff(target, BuffName.Shield, function (buff) return true end) then f1 = f1*(1+f2) end - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) end) end, --[a]%概率对敌方全体造成[b],持续[c]秒,对技能目标概率上升[d]。 --a[float],b[控制状态],c[int],d[float] - [77] = function(caster, target, args, interval) + [77] = function(caster, target, args, interval, skill) local f1 = args[1] local cb1 = args[2] local f2 = args[3] @@ -1395,14 +1417,14 @@ local effectList = { end, --造成[a]%的[b]伤害,挂控制印记,最大[c]层。若暴击,[d]概率为敌方随机其他1人挂控制印记。(减益印记,可以驱散) --a[float],b[伤害类型],c[int],d[float] - [78] = function(caster, target, args, interval) + [78] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local i1 = args[3] local f2 = args[4] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () - local dmg, crit = BattleUtil.CalDamage(caster, target, dt, f1) + local dmg, crit = BattleUtil.CalDamage(skill, caster, target, dt, f1) local brand = Buff.Create(caster, BuffName.Brand, 0, "kongzhi") brand.maxLayer = i1 brand.isDeBuff = true @@ -1428,7 +1450,7 @@ local effectList = { end, --[a]%概率[b],持续[c]秒,每层控制印记提高[d]%概率。 --a[float],b[控制状态],c[int],d[float] - [79] = function(caster, target, args, interval) + [79] = function(caster, target, args, interval, skill) local f1 = args[1] local ct = args[2] local f2 = args[3] @@ -1447,7 +1469,7 @@ local effectList = { end, --添加[a]的[b]%护盾,持续[c]秒。为自身挂护盾印记,每层额外增加护盾值[d]%,印记最多[e]层。印记不显示。(增益印记,不可驱散) --a[属性],b[float],c[int],d[float],e[int] - [80] = function(caster, target, args, interval) + [80] = function(caster, target, args, interval, skill) local pro1 = args[1] local f1 = args[2] local f2 = args[3] @@ -1463,7 +1485,7 @@ local effectList = { return b end) local val = floor(BattleUtil.FP_Mul(caster:GetRoleData(propertyList[pro1]), f1, 1+layer*f3)) - local shield = Buff.Create(caster, BuffName.Shield, f2, val, 0) + local shield = Buff.Create(caster, BuffName.Shield, f2, ShieldTypeName.NormalReduce, val, 0) target:AddBuff(shield) local brand = Buff.Create(caster, BuffName.Brand, 0, "shieldLayerFlag") @@ -1475,15 +1497,15 @@ local effectList = { end, --造成[a]%的[b]伤害,附加受控印记,受到控制时回复[c]*[d]%生命,印记持续[e]秒。(增益印记,不可驱散) --a[float],b[伤害类型],c[属性],d[float],e[int] - [81] = function(caster, target, args, interval) + [81] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local pro1 = args[3] local f2 = args[4] local f3 = args[5] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) local OnBuffStart = function(buff) if buff.type == BuffName.Control then local val = floor(BattleUtil.FP_Mul(buff.target:GetRoleData(propertyList[pro1]), f2)) @@ -1501,7 +1523,7 @@ local effectList = { end, --代替相邻友军承受[a]%受到的伤害,持续[b]秒。自身死亡时该效果消失。 --a[float],b[int] - [82] = function(caster, target, args, interval) + [82] = function(caster, target, args, interval, skill) local f1 = args[1] local f2 = args[2] BattleLogic.WaitForTrigger(interval, function () @@ -1513,7 +1535,7 @@ local effectList = { end if not target.isDead then damagingFunc(floor(damage * f1)) - BattleUtil.ApplyDamage(atkRole, target, BattleUtil.CalShield(atkRole, target, floor(damage * f1))) + BattleUtil.ApplyDamage(skill, atkRole, target, BattleUtil.CalShield(atkRole, target, floor(damage * f1))) end lastTrigger = 0 end @@ -1535,7 +1557,7 @@ local effectList = { end, --[a]概率驱散[b]个[c]状态。[b]为0时驱散所有 --a[float],b[int],c[状态类型] - [83] = function(caster, target, args, interval) + [83] = function(caster, target, args, interval, skill) local f1 = args[1] local i1 = args[2] local ct = args[3] @@ -1554,18 +1576,18 @@ local effectList = { end, --施加[a]的[b]%护盾,持续[c]秒。护盾被击破时,对击破者造成施法者最大生命值[d]%的伤害。 --a[属性],b[float],c[int],d[float] - [84] = function(caster, target, args, interval) + [84] = function(caster, target, args, interval, skill) local pro1 = args[1] local f1 = args[2] local f2 = args[3] local f3 = args[4] BattleLogic.WaitForTrigger(interval, function () local val = floor(BattleUtil.FP_Mul(caster:GetRoleData(propertyList[pro1]), f1)) - local shield = Buff.Create(caster, BuffName.Shield, f2, val, 0) + local shield = Buff.Create(caster, BuffName.Shield, f2, ShieldTypeName.NormalReduce, val, 0) local OnBuffEnd = function(buff) - if buff == shield and buff.framePass < buff.frameDuration then --护盾被击破 + if buff == shield and buff.roundPass < buff.roundDuration then --护盾被击破 if buff.atk and not buff.atk.isTeam then - BattleUtil.ApplyDamage(target, buff.atk, floor(BattleUtil.FP_Mul(caster:GetRoleData(RoleDataName.MaxHp), f3))) + BattleUtil.ApplyDamage(skill, target, buff.atk, floor(BattleUtil.FP_Mul(caster:GetRoleData(RoleDataName.MaxHp), f3))) end end end @@ -1579,7 +1601,7 @@ local effectList = { end, --施加[a]的[b]%护盾,持续[c]秒。拥有该护盾的角色,[f]改变[d]属性[e]%,[i]改变[g]属性[h]%。护盾消失时增益消失。 --a[属性],b[float],c[int],d[属性],e[float],f[改变类型],g[属性],h[float],i[改变类型] - [85] = function(caster, target, args, interval) + [85] = function(caster, target, args, interval, skill) local pro1 = args[1] local f1 = args[2] local f2 = args[3] @@ -1591,12 +1613,12 @@ local effectList = { local ct2 = args[9] BattleLogic.WaitForTrigger(interval, function () local val = floor(BattleUtil.FP_Mul(caster:GetRoleData(propertyList[pro1]), f1)) - local shield = Buff.Create(caster, BuffName.Shield, f2, val, 0) + local shield = Buff.Create(caster, BuffName.Shield, f2, ShieldTypeName.NormalReduce, val, 0) local buff1 = Buff.Create(caster, BuffName.PropertyChange, f2, propertyList[pro2], f3, ct1) local buff2 = Buff.Create(caster, BuffName.PropertyChange, f2, propertyList[pro3], f4, ct2) local OnBuffEnd = function(buff) - if buff == shield and buff.framePass < buff.frameDuration then --护盾被击破 + if buff == shield and buff.roundPass < buff.roundDuration then --护盾被击破 buff1.disperse = true buff2.disperse = true end @@ -1613,7 +1635,7 @@ local effectList = { end, --[a]概率吸取[b]%的[c],持续[d]秒(属于增益),累积不高于自身该属性的[e]% --a[float],b[float],c[属性],d[float],e[float] - [86] = function(caster, target, args, interval) + [86] = function(caster, target, args, interval, skill) local f4 = args[1] local f1 = args[2] local pro = args[3] @@ -1637,15 +1659,15 @@ local effectList = { end, --造成[a]%的[b]伤害,对没有增益的敌人[c]概率造成[d],持续[e]秒。 --a[float],b[伤害类型],c[float],d[控制状态],e[int] - [87] = function(caster, target, args, interval) + [87] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local f2 = args[3] local ct = args[4] local f3 = args[5] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) local hasBuff = true BattleLogic.BuffMgr:QueryBuff(target, function (buff) if buff.isBuff then @@ -1659,15 +1681,15 @@ local effectList = { end, --造成[a]%的[b]伤害,对拥有减益的敌人[c]概率造成[d],持续[e]秒。 --a[float],b[伤害类型],c[float],d[控制状态],e[int] - [88] = function(caster, target, args, interval) + [88] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local f2 = args[3] local ct = args[4] local f3 = args[5] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) local hasBuff = false BattleLogic.BuffMgr:QueryBuff(target, function (buff) if buff.isDeBuff then @@ -1681,7 +1703,7 @@ local effectList = { end, --[a]概率在[d]秒里总共回复[e]次生命,每次恢复[b]*[c]%生命,。 --a[float],b[属性],c[float],d[int],e[int] - [89] = function(caster, target, args, interval) + [89] = function(caster, target, args, interval, skill) local f4 = args[1] local pro1 = args[2] local f1 = args[3] @@ -1694,28 +1716,28 @@ local effectList = { end, --造成[a]%的[b]伤害,如果击杀,则其他人受到[c]%的溢出伤害 --a[float],b[伤害类型],c[float] - [90] = function(caster, target, args, interval) + [90] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local f2 = args[3] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () local OnBeHit = function(atkRole, damage, bCrit, finalDmg, damageType) if target.isDead then local arr = BattleLogic.Query(function (r) return r.camp == target.camp and r.uid ~= target.uid end) for i=1, #arr do - BattleUtil.ApplyDamage(caster, arr[i], floor((damage-finalDmg)*f2)) + BattleUtil.ApplyDamage(skill, caster, arr[i], floor((damage-finalDmg)*f2)) end end end target.Event:AddEvent(BattleEventName.RoleBeHit, OnBeHit) - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) target.Event:RemoveEvent(BattleEventName.RoleBeHit, OnBeHit) end) end, --[b]概率造成[c],每次造成[d]的[e]的伤害,在[f]秒内造成[g]次伤害。 --b[float],c[持续伤害状态].d[float],e[伤害类型],f[int],g[int] - [91] = function(caster, target, args, interval) + [91] = function(caster, target, args, interval, skill) local f4 = args[1] local d1 = args[2] local f1 = args[3] @@ -1728,7 +1750,7 @@ local effectList = { end, --造成[a]%的[b]伤害,若暴击,[g][c]%概率改变我方随机1人[d]属性[e]%,持续[f]秒。 --a[float],b[伤害类型],c[float],d[属性],e[float],f[int],g[改变类型] - [92] = function(caster, target, args, interval) + [92] = function(caster, target, args, interval, skill) local f4 = args[1] local dt = args[2] local f3 = args[3] @@ -1736,9 +1758,9 @@ local effectList = { local f1 = args[5] local f2 = args[6] local ct = args[7] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () - local dmg, crit = BattleUtil.CalDamage(caster, target, dt, f4) + local dmg, crit = BattleUtil.CalDamage(skill, caster, target, dt, f4) if crit then BattleUtil.RandomAction(f3, function () local arr = BattleUtil.ChooseTarget(caster, 10001) @@ -1751,14 +1773,14 @@ local effectList = { end, --造成[a]%的[b]伤害,若暴击,[c]概率驱散[d]个(0表示所有)[e]状态。【aoe】 --a[float],b[伤害类型],c[float],d[int],e[状态类型] - [93] = function(caster, target, args, interval) + [93] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local f2 = args[3] local i1 = args[4] local ct = args[5] BattleLogic.WaitForTrigger(interval, function () - local dmg, crit = BattleUtil.CalDamage(caster, target, dt, f1) + local dmg, crit = BattleUtil.CalDamage(skill, caster, target, dt, f1) if crit then BattleUtil.RandomAction(f2, function () local count = 0 @@ -1775,13 +1797,13 @@ local effectList = { end, --造成[a]%的[b]伤害,为自己施加一层印记,最大[c]层。(增益印记,不可驱散)(与95使用同一个印记) --a[float],b[伤害类型],c[int] - [94] = function(caster, target, args, interval) + [94] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local i1 = args[3] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) local brand = Buff.Create(caster, BuffName.Brand, 0, "zengyi") brand.maxLayer = i1 brand.clear = false @@ -1791,11 +1813,11 @@ local effectList = { end, --造成[a]%的[b]伤害,自身每层印记增加此技能[c]%的伤害。(增益印记,不可驱散)(与94使用同一个印记) --a[float],b[伤害类型],c[float] - [95] = function(caster, target, args, interval) + [95] = function(caster, target, args, interval, skill) local f1 = args[1] local dt = args[2] local f2 = args[3] - caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target) + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) BattleLogic.WaitForTrigger(interval, function () local layer = 0 if BattleLogic.BuffMgr:HasBuff(caster, BuffName.Brand, function (buff) @@ -1809,16 +1831,16 @@ local effectList = { damagingFunc(-floor(BattleUtil.FP_Mul(f2, layer, damage))) end caster.Event:AddEvent(BattleEventName.PassiveDamaging, OnPassiveDamaging) - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) caster.Event:RemoveEvent(BattleEventName.PassiveDamaging, OnPassiveDamaging) else - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) end end) end, --[b]概率造成[c],每次造成[d]的真实伤害,在[e]秒内造成[f]次伤害。(91,异妖用)(减益,不可驱散) --b[float],c[持续伤害状态].d[float],e[int],f[int] - [96] = function(caster, target, args, interval) + [96] = function(caster, target, args, interval, skill) local f4 = args[1] local d1 = args[2] local f1 = args[3] @@ -1833,7 +1855,7 @@ local effectList = { end, --[a]概率在[c]秒里总共回复[d]次生命,每次恢复[b]生命。(89,异妖用)(增益,不可驱散) --a[float],b[float],c[int],d[int] - [97] = function(caster, target, args, interval) + [97] = function(caster, target, args, interval, skill) local f4 = args[1] local i1 = args[2] local f2 = args[3] @@ -1847,7 +1869,7 @@ local effectList = { end, --造成[a]到[b]段[c]%的[d]伤害【AOE】,每段伤害有[e]的概率造成[f],持续[g]秒。若目标处于[h]状态,则必定暴击。 --a[int],b[int],c[float],d[伤害类型],e[float],f[控制状态],g[int],h[控制状态] - [98] = function(caster, target, args, interval) + [98] = function(caster, target, args, interval, skill) local i1 = args[1] local i2 = args[2] local f1 = args[3] @@ -1864,16 +1886,253 @@ local effectList = { BattleLogic.WaitForTrigger(d, function () if BattleLogic.BuffMgr:HasBuff(target, BuffName.Control, function (buff) return c2 == 0 or buff.ctrlType == c2 end) then target.isFlagCrit = true - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) target.isFlagCrit = false else - BattleUtil.CalDamage(caster, target, dt, f1) + BattleUtil.CalDamage(skill, caster, target, dt, f1) end buffRandomAction(f2, target, Buff.Create(caster, BuffName.Control, f4, c1)) end) end) end end, + --造成[a]%的[b]伤害,目标每减少[c]个伤害提升[d]% + --a[float],b[伤害类型],c[int],d[float] + [99] = function(caster, target, args, interval, skill) + local f1 = args[1] + local dt = args[2] + local i1 = args[3] + local f2 = args[4] + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) + BattleLogic.WaitForTrigger(interval, function () + local roleList =BattleLogic.Query(function (r) return r.camp == target.camp and r.isDead end, true) + local deadNum = #roleList + local level = math.floor(deadNum/i1) + local extra = (level * f2 + 1) * f1 + BattleUtil.CalDamage(skill, caster, target, dt, extra) + end) + end, + + + --[a]改变[b]点怒气 + --a[改变类型],b[int] + [100] = function(caster, target, args, interval, skill) + local ct = args[1] + local i1 = args[2] + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) + BattleLogic.WaitForTrigger(interval, function () + target:AddRage(i1, ct) + end) + end, + + + -- 造成[a]%的[b]伤害,然后对仇恨目标追加一次1技能(追加的1技能不回怒气)【aoe】 + -- a[float],b[伤害类型] + [101] = function(caster, target, args, interval, skill) + local f1 = args[1] + local dt = args[2] + -- caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) + BattleLogic.WaitForTrigger(interval, function () + BattleUtil.CalDamage(skill, caster, target, dt, f1) + end) + + -- 对仇恨目标追加一次技能 + caster:AddSkill(BattleSkillType.Normal, false, true, {target}) + end, + + -- 造成[a]%的[b]伤害,如果目标数量大于[c]个,增加自身[d]点怒气(主动 + 被动167联合实现) + -- a[float]b[伤害类型]c[int]d[int] + [102] = function(caster, target, args, interval, skill) + local f1 = args[1] + local dt = args[2] + local i1 = args[3] + local i2 = args[4] + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) + BattleLogic.WaitForTrigger(interval, function () + BattleUtil.CalDamage(skill, caster, target, dt, f1) + end) + + -- 主动技能效果添加被动技能 + -- 167 释放技能后如果目标数量大于[c]个,增加自身[d]点怒气 + caster:AddPassive(167, {i1, i2}, false) -- 不可叠加 + end, + + --造成[a]%的[b]伤害,造成伤害的[c]%用于医疗生命值最低队友。 + --a[float],b[伤害类型],c[float] + [103] = function(caster, target, args, interval, skill) + local f1 = args[1] + local dt = args[2] + local f2 = args[3] + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) + BattleLogic.WaitForTrigger(interval, function () + local OnBeHit = function(atkRole, damage, bCrit, finalDmg, damageType) + local arr = BattleLogic.Query(function (r) return r.camp == caster.camp end) + arr = BattleUtil.SortByProp(arr, RoleDataName.Hp, 0) + -- 治疗血量最低队友实际伤害的f2% + BattleUtil.ApplyTreat(caster, arr[1], floor(finalDmg*f2)) + end + target.Event:AddEvent(BattleEventName.RoleBeHit, OnBeHit) + BattleUtil.CalDamage(skill, caster, target, dt, f1) + target.Event:RemoveEvent(BattleEventName.RoleBeHit, OnBeHit) + end) + end, + + -- 添加[a]%抵抗效果的减伤盾的持续[c]回合 + -- a[float]c[int] + [104] = function(caster, target, args, interval, skill) + local f1 = args[1] + local i1 = args[2] + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) + BattleLogic.WaitForTrigger(interval, function () + target:AddBuff(Buff.Create(caster, BuffName.Shield, i1, ShieldTypeName.RateReduce, f1, 0)) + end) + end, + + --造成[a]%的[b]伤害如目标[c]则[d]改变自身[e]%的[f] + -- a[float]b[伤害类型]c[持续伤害状态]d[改变类型]e[float]f[属性] + [105] = function(caster, target, args, interval, skill) + local f1 = args[1] + local dt = args[2] + local dot = args[3] + local ct = args[4] + local f2 = args[5] + local pro1 = args[6] + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) + BattleLogic.WaitForTrigger(interval, function () + if BattleLogic.BuffMgr:HasBuff(target, BuffName.DOT, function (buff) return dot == 0 or buff.damageType == dot end) then + caster:AddBuff(Buff.Create(caster, BuffName.PropertyChange, 0, propertyList[pro1], f2, ct)) + end + + BattleUtil.CalDamage(skill, caster, target, dt, f1) + end) + + end, + + -- [a]%概率[b],持续[c]回合 + -- a[float]b[持续伤害状态]c[int] + -- [106] = function(caster, target, args, interval, skill) + -- local f1 = args[1] + -- local dot = args[2] + -- local i1 = args[3] + + -- BattleUtil.RandomAction(f1, function() + -- -- 秒杀 + -- target:AddBuff(Buff.Create(caster, BuffName.DOT, i1, 1, dot, dt, f1)) + -- end) + + + -- end, + + + -- [107] = {}, + + + + -- 造成[a]%的[b]伤害如果目标[c]且[d]低于[e]则有[F]%概率将其秒杀 + -- a[float]b[伤害类型]c[持续伤害类型]d[属性]e[float]f[float] + [108] = function(caster, target, args, interval, skill) + local f1 = args[1] + local dt = args[2] + local dot = args[3] + local pro1 = args[4] + local f2 = args[5] + local f3 = args[6] + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) + BattleLogic.WaitForTrigger(interval, function () + + local OnBeHit = function() + if BattleLogic.BuffMgr:HasBuff(target, BuffName.DOT, function (buff) return dot == 0 or buff.damageType == dot end) then + if target:GetRoleData(propertyList[pro1]) < f2 then + BattleUtil.RandomAction(f3, function() + -- 秒杀 + local damage = target:GetRoleData(RoleDataName.Hp) + BattleUtil.ApplyDamage(skill, caster, target, damage) + end) + end + end + end + + target.Event:AddEvent(BattleEventName.RoleBeHit, OnBeHit) + BattleUtil.CalDamage(skill, caster, target, dt, f1) + target.Event:RemoveEvent(BattleEventName.RoleBeHit, OnBeHit) + end) + + end, + + + -- 造成[a]%的[b]伤害每次击杀目标[c]改变[d]%的[e] + -- a[float]b[伤害类型]c[改变类型]d[float]e[属性] + [109] = function(caster, target, args, interval, skill) + local f1 = args[1] + local dt = args[2] + local ct = args[3] + local f2 = args[4] + local pro1 = args[5] + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) + BattleLogic.WaitForTrigger(interval, function () + local OnBeHit = function(atkRole, damage, bCrit, finalDmg, damageType) + if target.isDead then + caster:AddBuff(Buff.Create(caster, BuffName.PropertyChange, 0, propertyList[pro1], f2, ct)) + end + end + target.Event:AddEvent(BattleEventName.RoleBeHit, OnBeHit) + BattleUtil.CalDamage(skill, caster, target, dt, f1) + target.Event:RemoveEvent(BattleEventName.RoleBeHit, OnBeHit) + end) + end, + + + -- [a]%概率造成[b],每回合造成[c]%自身[d]的伤害,持续[e]回合 + -- a[float]b[持续伤害状态].c[float],d[属性]e[int] + [111] = function(caster, target, args, interval, skill) + local f1 = args[1] + local dot = args[2] + local f2 = args[3] + local pro = args[4] + local i1 = args[5] + + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) + BattleLogic.WaitForTrigger(interval, function () + local damage = BattleUtil.ErrorCorrection(f2 * caster:GetRoleData(propertyList[pro])) + + local buff = Buff.Create(caster, BuffName.DOT, i1, 1, dot, damage) + buff.isRealDamage = true + buffRandomAction(f1, target, buff) + end) + end, + + + + -- 造成[a]%的[b]伤害,然后对仇恨目标追加一次1技能(追加的1技能不回怒气)技能101的弹道特效版 + -- a[float],b[伤害类型] + [112] = function(caster, target, args, interval, skill) + local f1 = args[1] + local dt = args[2] + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) + BattleLogic.WaitForTrigger(interval, function () + BattleUtil.CalDamage(skill, caster, target, dt, f1) + end) + + -- 对仇恨目标追加一次技能 + caster:AddSkill(BattleSkillType.Normal, false, true, {target}) + end, + --造成[a]%的[b]伤害,对[c]有[d]%造成[e],持续[f]秒 技能21的弹道特效版 + --a[float],b[伤害类型,]c[持续伤害状态],d[float],e[控制状态],f[int] + [113] = function(caster, target, args, interval, skill) + local f1 = args[1] + local dt = args[2] + local dot = args[3] + local f2 = args[4] + local ct = args[5] + local f3 = args[6] + caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, skill, target) + BattleLogic.WaitForTrigger(interval, function () + BattleUtil.CalDamage(skill, caster, target, dt, f1) + if BattleLogic.BuffMgr:HasBuff(target, BuffName.DOT, function (buff) return dot == 0 or buff.damageType == dot end) then + buffRandomAction(f2, target, Buff.Create(caster, BuffName.Control, f3, ct)) + end + end) + end, } return effectList \ No newline at end of file diff --git a/luafight/Modules/Battle/Logic/Base/Passivity.lua b/luafight/Modules/Battle/Logic/Base/Passivity.lua index d589fe724..f7b594286 100644 --- a/luafight/Modules/Battle/Logic/Base/Passivity.lua +++ b/luafight/Modules/Battle/Logic/Base/Passivity.lua @@ -24,6 +24,7 @@ local propertyList = { RoleDataName.Hp, RoleDataName.CureFacter, RoleDataName.Tenacity, + RoleDataName.InitRage, } --被动技能表 @@ -59,7 +60,7 @@ local passivityList = { BattleUtil.RandomAction(f1, function () local arr = BattleUtil.ChooseTarget(role, 20001) if arr[1] then - BattleUtil.CalDamage(role, arr[1], dt, f2) + BattleUtil.CalDamage(nil, role, arr[1], dt, f2) end end) end @@ -248,7 +249,7 @@ local passivityList = { BattleUtil.RandomAction(f1, function () local arr = BattleUtil.ChooseTarget(role, 20000) for i=1, #arr do - BattleUtil.CalDamage(role, arr[i], dt, f2) + BattleUtil.CalDamage(nil, role, arr[i], dt, f2) end end) lastTrigger = 0 @@ -276,7 +277,7 @@ local passivityList = { local arr = BattleUtil.ChooseTarget(role, 20001) if arr[1] then local val = floor(BattleUtil.FP_Mul(f2, role:GetRoleData(propertyList[pro]))) - BattleUtil.ApplyDamage(role, arr[1], val) + BattleUtil.ApplyDamage(nil, role, arr[1], val) end end) lastTrigger = 0 @@ -487,7 +488,7 @@ local passivityList = { local OnBuffCaster = function(buff) if buff.type == BuffName.Control then BattleUtil.RandomAction(f1, function () - BattleUtil.CalDamage(role, buff.target, dt, f2) + BattleUtil.CalDamage(nil, role, buff.target, dt, f2) end) end end @@ -506,7 +507,7 @@ local passivityList = { BattleUtil.RandomAction(f1, function () local arr = BattleUtil.ChooseTarget(buff.target, 10000) for i=1, #arr do - BattleUtil.CalDamage(role, arr[i], dt, f2) + BattleUtil.CalDamage(nil, role, arr[i], dt, f2) end end) end @@ -1003,7 +1004,7 @@ local passivityList = { end BattleUtil.RandomAction(f1, function () local val = floor(BattleUtil.FP_Mul(role:GetRoleData(RoleDataName.Attack), f2)) - BattleUtil.ApplyDamage(role, defRole, val) + BattleUtil.ApplyDamage(nil, role, defRole, val) end) lastTrigger = 0 end @@ -1022,7 +1023,7 @@ local passivityList = { end local ar1 = BattleUtil.FP_Mul(defRole:GetRoleData(RoleDataName.MaxHp), f1) local ar2 = BattleUtil.FP_Mul(role:GetRoleData(RoleDataName.Attack), 2.5) - BattleUtil.ApplyDamage(role, defRole, floor(min(ar1, ar2))) + BattleUtil.ApplyDamage(nil, role, defRole, floor(min(ar1, ar2))) lastTrigger = 0 end role.Event:AddEvent(BattleEventName.RoleCrit, OnRoleCrit) @@ -1129,7 +1130,7 @@ local passivityList = { role.Event:DispatchEvent(BattleEventName.RoleViewBullet, f4, atkRole) BattleLogic.WaitForTrigger(f4, function () triggerUid[atkRole.uid] = atkRole.uid - BattleUtil.CalDamage(role, atkRole, dt, f2) + BattleUtil.CalDamage(nil, role, atkRole, dt, f2) atkRole:AddBuff(Buff.Create(role, BuffName.Control, f3, ct)) triggerUid[atkRole.uid] = nil end) @@ -1167,7 +1168,7 @@ local passivityList = { local list = BattleLogic.GetNeighbor(role, 1) for i=1, #list do local val = floor(BattleUtil.FP_Mul(role:GetRoleData(propertyList[pro]), f2)) - list[i]:AddBuff(Buff.Create(role, BuffName.Shield, f3, val, 0)) + list[i]:AddBuff(Buff.Create(role, BuffName.Shield, f3, ShieldTypeName.NormalReduce, val, 0)) end end) end @@ -1179,7 +1180,6 @@ local passivityList = { local f1 = args[1] local f2 = args[2] local pro1 = args[3] - BattleLogic.Event:AddEvent(BattleEventName.SkillCastEnd, function (skill) if skill.owner.isTeam then return @@ -1216,7 +1216,7 @@ local passivityList = { return end if defRole.camp == role.camp then - BattleUtil.CalDamage(role, atkRole, dt, f1) + BattleUtil.CalDamage(nil, role, atkRole, dt, f1) atkRole:AddBuff(Buff.Create(role, BuffName.Control, f2, 1)) end end) @@ -1269,7 +1269,7 @@ local passivityList = { local OnBeHit = function(atkRole, damage, bCrit, finalDmg, damageType) BattleUtil.RandomAction(f1, function () local val = floor(BattleUtil.FP_Mul(role:GetRoleData(propertyList[pro1]), f2)) - role:AddBuff(Buff.Create(role, BuffName.Shield, f3, val, 0)) + role:AddBuff(Buff.Create(role, BuffName.Shield, f3, ShieldTypeName.NormalReduce, val, 0)) end) end role.Event:AddEvent(BattleEventName.RoleBeHit, OnBeHit) @@ -1290,11 +1290,11 @@ local passivityList = { if bCrit then local ar1 = BattleUtil.FP_Mul(defRole:GetRoleData(RoleDataName.MaxHp), f1) local ar2 = BattleUtil.FP_Mul(role:GetRoleData(RoleDataName.Attack), 5) - BattleUtil.ApplyDamage(role, defRole, floor(min(ar1, ar2))) + BattleUtil.ApplyDamage(nil, role, defRole, floor(min(ar1, ar2))) else BattleUtil.RandomAction(f2, function () local val = floor(BattleUtil.FP_Mul(role:GetRoleData(RoleDataName.Attack), f3)) - BattleUtil.ApplyDamage(role, defRole, val) + BattleUtil.ApplyDamage(nil, role, defRole, val) end) end lastTrigger = 0 @@ -1333,7 +1333,7 @@ local passivityList = { return end BattleUtil.RandomAction(f1, function () - BattleUtil.CalDamage(role, atkRole, dt, f2) + BattleUtil.CalDamage(nil, role, atkRole, dt, f2) end) lastTrigger = 0 end @@ -1462,7 +1462,7 @@ local passivityList = { local f2 = args[3] local val = floor(BattleUtil.FP_Mul(f1, role:GetRoleData(propertyList[pro1]))) - role:AddBuff(Buff.Create(role, BuffName.Shield, f2, val, 0)) + role:AddBuff(Buff.Create(role, BuffName.Shield, f2, ShieldTypeName.NormalReduce, val, 0)) end, --战斗开始时,为自身回复[a]*[b]的血量。 --a[属性],b[float] @@ -1488,7 +1488,7 @@ local passivityList = { BattleLogic.Event:AddEvent(BattleEventName.BattleOrderEnd, OnEnd) end, --战斗中,若自己是[a],[d]改变[b]属性[c]。-- 2020/3/6 高鑫 - --a[元素],b[属性],c[float],d[改变类型] + --a[元素],b[属性],c[float],d[改变类型] [80] = function(role, args) local i1 = args[1] local pro = args[2] @@ -1507,5 +1507,1231 @@ local passivityList = { end end end, + + + -- [a]增加[b] + -- a[属性]b[float] + [90] = function(role, args) + local pro = args[1] + local f1 = args[2] + role.data:AddValue(propertyList[pro], f1) + end, + + -- 技能伤害增加[a] + -- a[float] + [91] = function(role, args) + local f1 = args[1] + local passivityDamaging = function(func, caster, damage) + if func then + func(-floor(BattleUtil.ErrorCorrection(damage*f1))) + end + end + local OnSkillCast = function(skill) + if skill.type == BattleSkillType.Special then + role.Event:AddEvent(RoleDataName.PassiveDamaging, passivityDamaging) + end + end + local OnSkillCastEnd = function(skill) + if skill.type == BattleSkillType.Special then + role.Event:RemoveEvent(RoleDataName.PassiveDamaging, passivityDamaging) + end + end + role.Event:AddEvent(RoleDataName.OnSkillCast, OnSkillCast) + role.Event:AddEvent(RoleDataName.OnSkillCastEnd, OnSkillCastEnd) + end, + + -- (直接伤害(目前没有明确定义直接伤害))击杀目标自身增加[a][b] + -- a[int]b[属性] + [92] = function(role, args) + local i1 = args[1] + local pro = args[2] + + local OnKill = function(defRole) + local buff = Buff.Create(role, BuffName.PropertyChange, 0, propertyList[pro], i1, 1) + buff.cover = true -- 可以叠加 + buff.clear = false -- 不可驱散 + role:AddBuff(buff) + end + role.Event:AddEvent(BattleEventName.RoleKill, OnKill) + end, + + -- 技能治疗量增加[a] + -- a[float] + [93] = function(role, args) + local f1 = args[1] + local passiveTreating = function(func, caster) + if func then func(f1) end + end + local OnSkillCast = function(skill) + if skill.type == BattleSkillType.Special then + role.Event:AddEvent(RoleDataName.PassiveTreating, passiveTreating) + end + end + local OnSkillCastEnd = function(skill) + if skill.type == BattleSkillType.Special then + role.Event:RemoveEvent(RoleDataName.PassiveTreating, passiveTreating) + end + end + role.Event:AddEvent(RoleDataName.OnSkillCast, OnSkillCast) + role.Event:AddEvent(RoleDataName.OnSkillCastEnd, OnSkillCastEnd) + end, + + + -- 全体上阵武将增加[a][b] + -- a[float]b[属性] + [94] = function(role, args) + local f1 = args[1] + local pro = args[2] + local list = BattleLogic.Query(function(v) return role.camp == v.camp end) + for _, r in pairs(list) do + role.data:AddPencentValue(propertyList[pro], f1) + end + end, + + -- 行动后增加[a]点怒气 + -- a[int] + [95] = function(role, args) + local i1 = args[1] + -- 行动结束后 + local onTurnEnd = function() + role:AddRage(i1, CountTypeName.Add) + end + role.Event:AddEvent(BattleEventName.RoleTurnEnd, onTurnEnd) + end, + + -- 普攻伤害增加[a] + -- a[float] + [96] = function(role, args) + local f1 = args[1] + local passivityDamaging = function(func, caster, damage) + if func then + func(-floor(BattleUtil.ErrorCorrection(damage*f1))) + end + end + local OnSkillCast = function(skill) + if skill.type == BattleSkillType.Normal then + role.Event:AddEvent(RoleDataName.PassiveDamaging, passivityDamaging) + end + end + local OnSkillCastEnd = function(skill) + if skill.type == BattleSkillType.Normal then + role.Event:RemoveEvent(RoleDataName.PassiveDamaging, passivityDamaging) + end + end + role.Event:AddEvent(RoleDataName.OnSkillCast, OnSkillCast) + role.Event:AddEvent(RoleDataName.OnSkillCastEnd, OnSkillCastEnd) + + end, + + -- 释放技能有[a]%对全体造成[c]%[d]伤害 + -- a[float]b[int]c[float]d[伤害类型] + [97] = function(role, args) + local f1 = args[1] + local f2 = args[2] + local dt = args[3] + -- 释放技能后 + local onSkillEnd = function(skill) + BattleUtil.RandomAction(f1, function() + BattleLogic.WaitForTrigger(0.1, function() + local list = BattleLogic.Query(function(v) + return v.camp == (role.camp + 1) % 2 + end) + for _, r in ipairs(list) do + BattleUtil.CalDamage(nil, role, r, dt, f2) + end + end) + end) + end + role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillEnd) + end, + + -- 释放技能[a]概率不消耗[b] + -- a[float]b[属性] + [98] = function(role, args) + local f1 = args[1] + local prop = args[2] -- 目前只是怒气 + + local onRageCost = function(noCostRate, costRage, func) + local finalRate = f1 + local finalCost = costRage + if func then func(finalRate, finalCost) end + end + role.Event:AddEvent(BattleEventName.RoleRageCost, onRageCost) + end, + + + -- 技能直接伤害的[a]%治疗友方生命最少队友。 + -- a[float] + [99] = function(role, args) + local f1 = args[1] + local OnHit = function(atkRole, damage, bCrit, finalDmg, damageType) + local arr = BattleLogic.Query(function (r) return r.camp == role.camp end) + arr = BattleUtil.SortByProp(arr, RoleDataName.Hp, 0) + -- 治疗血量最低队友实际伤害的f1% + BattleUtil.ApplyTreat(role, arr[1], floor(BattleUtil.ErrorCorrection(finalDmg*f1))) + end + role.Event:AddEvent(BattleEventName.RoleHit, OnHit) + end, + + + -- 释放技能不消耗怒气几率[a]改变[b]% + -- a[改变类型]b[float] + [100] = function(role, args) + local ct = args[1] + local f1 = args[2] + + local onRageCost = function(noCostRate, costRage, func) + local finalRate = BattleUtil.CountValue(noCostRate, f1, ct) + local finalCost = costRage + if func then func(finalRate, finalCost) end + end + role.Event:AddEvent(BattleEventName.RoleRageCost, onRageCost) + end, + + + -- 释放技能技能[a]概率[b]改变[c]% + -- a[控制状态]b[改变类型]c[float] + [101] = function(role, args) + local ctl = args[1] + local ct = args[2] + local f1 = args[3] + + local onSkillControl = function(target, buff, rate, func) + if buff.type == BuffName.Control and buff.ctrlType == ctl then + local finalRate = BattleUtil.CountValue(rate, f1, ct) + if func then func(finalRate) end + end + end + local onSkillCast = function(skill) + if skill.type == BattleSkillType.Special then + role.Event:AddEvent(BattleEventName.SkillRandomBuff, onSkillControl) + end + end + local onSkillCastEnd = function(skill) + if skill.type == BattleSkillType.Special then + role.Event:RemoveEvent(BattleEventName.SkillRandomBuff, onSkillControl) + end + end + role.Event:AddEvent(BattleEventName.SkillCast, onSkillCast) + role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillCastEnd) + end, + + + -- 释放技能后追加[a]次普攻 + -- a[int] + [102] = function(role, args) + local i1 = args[1] + -- 释放技能后 + local onSkillEnd = function(skill) + if skill.type == BattleSkillType.Special then + for i = 1, i1 do + role:AddSkill(BattleSkillType.Normal, false, true, nil) + end + end + end + role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillEnd) + end, + + -- 直接伤害每次击杀目标增加[a]%的[b]可叠加持续至战斗结束 + -- a[float]b[属性] + [103] = function(role, args) + local f1 = args[1] + local pro = args[2] + -- 释放技能后 + local onRoleHit = function(defRole) + if defRole.isDead then + local buff = Buff.Create(role, BuffName.PropertyChange, 0, propertyList[pro], CountTypeName.AddPencent, f1) + buff.cover = true + role:AddBuff(buff) + end + end + role.Event:AddEvent(BattleEventName.RoleHit, onRoleHit) + end, + + + + -- 释放技能后给除自己外己方生命最少的武将附加无敌盾持续[b]回合(只剩自己则不加) + --b[属性] + [104] = function(role, args) + local i1 = args[1] + -- 释放技能后 + local onSkillEnd = function(skill) + if skill.type == BattleSkillType.Special then + local list = BattleLogic.Query(function(v) return v.camp == role.camp end) + list = BattleUtil.SortByProp(list, RoleDataName.Hp, 0) + local target = nil + for i = 1, #list do + if not list[i].isDead and list[i] ~= role then + target = list[i] + break + end + end + if target then + target:AddBuff(Buff.Create(role, BuffName.Shield, i1, ShieldTypeName.AllReduce, 0, 0)) + end + end + end + role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillEnd) + end, + + + + -- 释放技能后增加友方全体[a]点怒气 + -- a[int] + [105] = function(role, args) + local i1 = args[1] + -- 释放技能后 + local onSkillEnd = function(skill) + if skill.type == BattleSkillType.Special then + local list = BattleLogic.Query(function(v) return v.camp == role.camp end) + for i = 1, #list do + local r = list[i] + r:AddRage(i1, CountTypeName.Add) + end + end + end + role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillEnd) + end, + + + -- 受到直接伤害[a]%治疗友方[b]最少[c]个单位 + -- a[float]b[属性]c[int] + [106] = function(role, args) + local f1 = args[1] + local pro = args[2] + local i1 = args[3] + + local onBeHit = function(caster, damage) + local list = BattleLogic.Query(function(v) return v.camp == role.camp end) + list = BattleUtil.SortByProp(list, propertyList[pro], 0) + for i = 1, i1 do + local r = list[i] + if r and not r.isDead then + local treatValue = floor(BattleUtil.ErrorCorrection(f1 * damage)) + BattleUtil.ApplyTreat(role, r, treatValue) + end + end + end + role.Event:AddEvent(BattleEventName.RoleBeHit, onBeHit) + end, + + -- 释放技能后自身回[a]点怒气 + -- a[int] + [107] = function(role, args) + local i1 = args[1] + -- 释放技能后 + local onSkillEnd = function(skill) + if skill.type == BattleSkillType.Special then + role:AddRage(i1, CountTypeName.Add) + end + end + role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillEnd) + end, + + -- 受到技能或普攻直接伤害的[a]%反弹给攻击者 + -- a[float] + [108] = function(role, args) + local f1 = args[1] + local onBeHit = function(caster, damage) + local rDamage = floor(BattleUtil.ErrorCorrection(f1 * damage)) + BattleUtil.ApplyDamage(nil, role, caster, rDamage) + end + role.Event:AddEvent(BattleEventName.RoleBeHit, onBeHit) + end, + + -- 受到普通攻击或直接伤害时回复自身[a]点怒气 + -- a[int] + [109] = function(role, args) + local i1 = args[1] + local onBeSkillCastEnd = function(skill) + if skill.type == BattleSkillType.Normal then + role:AddRage(i1, CountTypeName.Add) + end + end + role.Event:AddEvent(BattleEventName.BeSkillCastEnd, onBeSkillCastEnd) + end, + + -- 释放技能后降低目标[a]点怒气 + -- a[int] + [110] = function(role, args) + local i1 = args[1] + -- 释放技能后 + local onSkillEnd = function(skill) + if skill.type == BattleSkillType.Special then + for i = 1, #skill.effectTargets do + local r = skill.effectTargets[i] + r:AddRage(i1, CountTypeName.Sub) + end + end + end + role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillEnd) + end, + + -- 被击杀时[a]%概率[b]敌方武将[c]回合 + -- a[float]b[控制状态]c[int] + [111] = function(role, args) + local f1 = args[1] + local ctl = args[2] + local i1 = args[3] + local onRoleBeDamaged = function(caster) + if role.isDead then + BattleUtil.RandomAction(f1, function() + caster:AddBuff(Buff.Create(role, BuffName.Control, i1, ctl)) + end) + end + end + role.Event:AddEvent(BattleEventName.RoleBeDamaged, onRoleBeDamaged) + end, + + + -- 战斗第[a]回合造成伤害必定暴击 + -- a[int] + [112] = function(role, args) + local i1 = args[1] + + BattleLogic.Event:AddEvent(BattleEventName.BattleRoundChange, function(curRound) + local onRoleDamageBefore = function(target) + target.isFlagCrit = true + end + local onRoleDamageAfter = function(target) + target.isFlagCrit = false + end + -- 在第 i1 回合必定暴击 + if curRound == i1 then + role.Event:AddEvent(BattleEventName.RoleDamageBefore, onRoleDamageBefore) + role.Event:AddEvent(BattleEventName.onRoleDamageAfter, onRoleDamageAfter) + else + role.Event:RemoveEvent(BattleEventName.RoleDamageBefore, onRoleDamageBefore) + role.Event:RemoveEvent(BattleEventName.onRoleDamageAfter, onRoleDamageAfter) + end + end) + end, + + + + + --TODO + -- 追加的普攻[a]%概率暴击 + -- a[float] + -- [113] = {}, + + -- 直接伤害击杀目标后追加[a]次普攻 + -- a[int] + [114] = function(role, args) + local i1 = args[1] + -- 释放技能后 + local onRoleHit = function(target) + if target.isDead then + for i = 1, i1 do + role:AddSkill(BattleSkillType.Normal, false, true, nil) + end + end + end + role.Event:AddEvent(BattleEventName.RoleHit, onRoleHit) + end, + + + -- 战斗第[a]回合增加[b]%的[c],持续[d]回合 + -- a[int]b[float]c[属性]d[int] + [115] = function(role, args) + local i1 = args[1] + local f1 = args[2] + local pro = args[3] + local i2 = args[4] or 1 + + BattleLogic.Event:AddEvent(BattleEventName.BattleRoundChange, function(curRound) + -- 第i1回合 + if curRound == i1 then + role:AddBuff(Buff.Create(role, BuffName.PropertyChange, i2, propertyList[pro], f1, CountTypeName.AddPencent)) + end + end) + end, + + + + -- 直接伤害击杀目标回复自身[a]%的[b] + -- a[float] + [116] = function(role, args) + local f1 = args[1] + -- 释放技能后 + local onRoleHit = function(target) + if target.isDead then + local treat = floor(BattleUtil.FP_Mul(role:GetRoleData(RoleDataName.MaxHp), f1)) + BattleUtil.CalTreat(role, role, treat) + end + end + role.Event:AddEvent(BattleEventName.RoleHit, onRoleHit) + end, + + -- 技能目标每[a]改变[b]个,技能伤害增加[c]% + -- a[改变类型]b[int]c[float] + [117] = function(role, args) + local ct = args[1] -- 对方阵营中死亡数量 + local i1 = args[2] + local f1 = args[3] + + -- + local onRoleDamageBefore = function(target, func) + local roleList =BattleLogic.Query(function (r) return r.camp == target.camp and r.isDead end, true) + local deadNum = #roleList + local level = math.floor(deadNum/i1) + local extra = BattleUtil.ErrorCorrection(level * f1) + if func then func(extra) end + end + role.Event:AddEvent(BattleEventName.RoleDamageBefore, onRoleDamageBefore) + end, + + + + -- 每次释放技能,技能伤害增加[a]%,无限叠加释放普攻时清除加成 + -- a[float] + [118] = function(role, args) + local f1 = args[1] + local addList = {} + -- 释放技能后 + local onSkillEnd = function(skill) + if skill.type == BattleSkillType.Special then + local addDamage = function(target, func) + if func then func(f1) end + end + role.Event:AddEvent(BattleEventName.RoleDamageBefore, addDamage) + -- 加入管理 + table.insert(addList, {BattleEventName.RoleDamageBefore, addDamage}) + end + end + local onSkillCast = function(skill) + if skill.type == BattleSkillType.Normal then + -- 清除加成 + for _, e in ipairs(addList) do + role.Event:RemoveEvent(e[1], e[2]) + end + addList = {} + end + end + role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillEnd) + role.Event:AddEvent(BattleEventName.SkillCast, onSkillCast) + end, + -- 普攻后[a]改变自身[b]%的[c]持续[d]回合可叠加 + -- a[改变类型]b[float]c[属性]d[int] + [119] = function(role, args) + local ct = args[1] + local f1 = args[2] + local pro = args[3] + local i1 = args[4] + -- 释放技能后 + local onSkillEnd = function(skill) + if skill.type == BattleSkillType.Normal then + local buff = Buff.Create(role, BuffName.PropertyChange, i1, propertyList[pro], ct, f1) + buff.cover = true + role:AddBuff(buff) + end + end + role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillEnd) + end, + -- 受到直接伤害[a]%治疗友方全体 + -- a[float] + [120] = function(role, args) + local f1 = args[1] + + local onBeHit = function(caster, damage) + local list = BattleLogic.Query(function(v) return v.camp == role.camp end) + for i = 1, #list do + local r = list[i] + if r and not r.isDead then + local treatValue = floor(BattleUtil.ErrorCorrection(f1 * damage)) + BattleUtil.ApplyTreat(role, r, treatValue) + end + end + end + role.Event:AddEvent(BattleEventName.RoleBeHit, onBeHit) + end, + + -- 普攻后回复[a]点怒气 + -- a[int] + [121] = function(role, args) + local i1 = args[1] + -- 释放技能后 + local onSkillEnd = function(skill) + if skill.type == BattleSkillType.Normal then + role:AddRage(i1, CountTypeName.Add) + end + end + role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillEnd) + end, + + + -- TODO 减伤盾效果未添加 + -- 释放技能后给己方前排武将附加减伤盾持续时间[a]改变[b]回合 + -- a[改变类型]b[int] + [122] = function(role, args) + local ct = args[1] + local i1 = args[2] + -- 释放技能后 + local onSkillEnd = function(skill) + if skill.type == BattleSkillType.Special then + local list = BattleLogic.Query(function(v) return v.camp == role.camp and v.position <= 3 end) + for _, role in ipairs(list) do + BuffManager:QueryBuff(role, function(buff) + if buff.type == BuffName.Shield and buff.ShieldType == ShieldTypeName.RateReduce then + buff:ChangeBuffDuration(ct, i1) + end + end) + end + end + end + role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillEnd) + end, + + + --TODO 减伤盾效果未添加 + -- 释放技能后给己方前排附加减伤盾效果[a]改变[b]% + -- a[改变类型]b[float] + [123] = function(role, args) + local ct = args[1] + local f1 = args[2] + -- 释放技能后 + local onSkillEnd = function(skill) + if skill.type == BattleSkillType.Special then + local list = BattleLogic.Query(function(v) return v.camp == role.camp and v.position <= 3 end) + for _, role in ipairs(list) do + BuffManager:QueryBuff(role, function(buff) + if buff.type == BuffName.Shield and buff.ShieldType == ShieldTypeName.RateReduce then + buff:ChangeShieldValue(ct, f1) + end + end) + end + end + end + role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillEnd) + end, + + -- 释放技能后回复己方后排[a]点怒气 + -- a[int] + [124] = function(role, args) + local i1 = args[1] + -- 释放技能后 + local onSkillEnd = function(skill) + if skill.type == BattleSkillType.Special then + local list = BattleLogic.Query(function(v) return v.position > 3 end) + for _, r in ipairs(list) do + r:AddRage(i1, CountTypeName.Add) + end + end + end + role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillEnd) + end, + + -- 直接伤害击杀目标下回合攻击[a]%暴击(TODO:目前为增加[a]%) + -- a[float] + [125] = function(role, args) + local f1 = args[1] + -- 释放技能后 + local onRoleHit = function(target) + if target.isDead then + local buff = Buff.Create(role, BuffName.PropertyChange, 1, propertyList[RoleDataName.Crit], CountTypeName.Add, f1) + role:AddBuff(buff) + end + end + role.Event:AddEvent(BattleEventName.RoleHit, onRoleHit) + end, + + -- TODO + -- 战斗中自身[a]每[b]改变[c]%,[d]就[e]改变[f]% + -- a[属性]b[改变类型]c[float]d[属性]e[改变类型]f[float] + [126] = {}, + + + -- 与48相同 + -- [127] = {}, + + -- 普攻后降低目标[b]点怒气 + -- a[int] + [128] = function(role, args) + local i1 = args[1] + -- 普攻后 + local onSkillEnd = function(skill) + if skill.type == BattleSkillType.Normal then + local list = skill.effectTargets + for _, r in ipairs(list) do + r:AddRage(i1, CountTypeName.Sub) + end + end + end + role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillEnd) + end, + + + + -- TODO + -- 全体蜀国武将增加[a]%[b] + -- a[float]b[属性] + -- [129] = {}, + + + -- TODO + -- 死亡后持续战斗两回合期间受伤不致死,[a]回合后自动死亡。期间技能伤害降低[b]%无法触发追击效果且死后无法被复活。 + -- a[int]b[float] + -- [130] = {}, + + + -- 敌方每[a]改变[b]人自身[c]就[d]改变[e]% + -- a[改变类型]b[int]c[属性]d[改变类型]e[float] + [131] = function(role, args) + local ct1 = args[1] + local i1 = args[2] + local pro = args[3] + local ct2 = args[4] + local f1 = args[5] + + local deadNum = 0 + -- 释放技能后 + local OnDead = function(deadRole) + if deadRole.camp == (role.camp + 1)%2 then + deadNum = deadNum + 1 + if deadNum >= i1 then + deadNum = 0 + local buff = Buff.Create(role, BuffName.PropertyChange, 0, propertyList[pro], ct2, f1) + role:AddBuff(buff) + end + end + end + BattleLogic.Event:AddEvent(BattleEventName.BattleRoleDead, OnDead) + end, + + -- 无132 + -- [132] = {}, + + + -- 攻击时若目标[a]则[b],[c]改变[d]% + -- a[持续伤害状态]b[属性]c[改变类型]d[float} + [133] = function(role, args) + local dot = args[1] + local pro = args[2] + local ct = args[3] + local f1 = args[4] + + local OnRoleDamageBefore = function(target) + if BattleLogic.BuffMgr:HasBuff(target, BuffName.DOT, function(buff) return buff.damageType == dot end) then + local buff = Buff.Create(role, BuffName.PropertyChange, 0, propertyList[pro], ct, f1) + role:AddBuff(buff) + end + end + + BattleLogic.Event:AddEvent(BattleEventName.RoleDamageBefore, OnRoleDamageBefore) + end, + + + -- 释放技能技能[a]概率[b]改变[c]% + -- a[持续伤害状态]b[改变类型]c[float] + [134] = function(role, args) + local dot = args[1] + local ct = args[2] + local f1 = args[3] + + local onSkillControl = function(target, buff, rate, func) + if buff.type == BuffName.DOT and buff.damageType == dot then + local finalRate = BattleUtil.CountValue(rate, f1, ct) + if func then func(finalRate) end + end + end + local onSkillCast = function(skill) + if skill.type == BattleSkillType.Special then + role.Event:AddEvent(BattleEventName.SkillRandomBuff, onSkillControl) + end + end + -- 技能后后 + local onSkillCastEnd = function(skill) + if skill.type == BattleSkillType.Special then + role.Event:RemoveEvent(BattleEventName.SkillRandomBuff, onSkillControl) + end + end + role.Event:AddEvent(BattleEventName.SkillCast, onSkillCast) + role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillCastEnd) + end, + + -- 普攻有[a]%概率使目标[b]持续[c]回合(每回合造成攻击者20%攻击力的伤害) + -- a[float]b[持续伤害状态]c[int] + [135] = function(role, args) + local f1 = args[1] + local dot = args[2] + local i1 = args[3] + + -- 普攻后 + local onSkillEnd = function(skill) + if skill.type == BattleSkillType.Normal then + local list = skill.effectTargets + local attack = role:GetRoleData(RoleDataName.Attack) + local damage = floor(BattleUtil.ErrorCorrection(attack * 0.2)) + for _, r in ipairs(list) do + BattleUtil.RandomAction(f1, function() + local buff = Buff.Create(role, BuffName.DOT, i1, 1, dot, damage) + buff.isRealDamage = true + r:AddBuff(buff) + end) + end + end + end + role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillEnd) + + end, + + -- 受到普攻有[a]%概率使攻击者[b]持续[c]回合(每回合造成攻击者20%攻击力的伤害) + -- a[float]b[持续伤害状态]c[int] + [136] = function(role, args) + local f1 = args[1] + local dot = args[2] + local i1 = args[3] + + -- 普攻后 + local onSkillEnd = function(skill) + if skill.type == BattleSkillType.Normal then + local caster = skill.owner + BattleUtil.RandomAction(f1, function() + local attack = role:GetRoleData(RoleDataName.Attack) + local damage = floor(BattleUtil.ErrorCorrection(attack * 0.2)) + local buff = Buff.Create(role, BuffName.DOT, i1, 1, dot, damage) + buff.isRealDamage = true + caster:AddBuff(buff) + end) + end + end + role.Event:AddEvent(BattleEventName.BeSkillCastEnd, onSkillEnd) + end, + + + -- 释放技能后给目标附加治疗效果每回合回复[a]的[b]%点生命持续[c]回合 + -- a[属性]b[float]c[int] + [137] = function(role, args) + local pro = args[1] + local f1 = args[2] + local i1 = args[3] + -- 技能后后 + local onSkillEnd = function(skill) + if skill.type == BattleSkillType.Special then + local list = skill.effectTargets + local tv = floor(BattleUtil.ErrorCorrection(role:GetRoleData(pro) * f1)) + for _, r in ipairs(list) do + local auraBuff = Buff.Create(role, BuffName.Aura, i1, function (tr) + BattleUtil.CalTreat(tr, tr, tv) + end) + auraBuff.interval = 1 + r:AddBuff(auraBuff) + end + end + end + role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillEnd) + end, + + -- 释放普攻后给目标附加治疗效果每回合回复[a]的[b]%点生命持续[c]回合 + -- a[属性]b[float]c[int] + [138] = function(role, args) + local pro = args[1] + local f1 = args[2] + local i1 = args[3] + -- 技能后后 + local onSkillEnd = function(skill) + if skill.type == BattleSkillType.Normal then + local list = skill.effectTargets + local tv = floor(BattleUtil.ErrorCorrection(role:GetRoleData(pro) * f1)) + for _, r in ipairs(list) do + local auraBuff = Buff.Create(role, BuffName.Aura, i1, function (tr) + BattleUtil.CalTreat(tr, tr, tv) + end) + auraBuff.interval = 1 + r:AddBuff(auraBuff) + end + end + end + role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillEnd) + end, + + -- TODO + -- 释放技能后给目标附加治疗效果[a]改变[b]% + -- a[改变类型]b[float] + -- [139] = {}, + + -- 受到[a]状态敌人攻击时受到伤害[b]改变[c]% + -- a[持续伤害状态]b[改变类型]c[float] + [140] = function(role, args) + local dot = args[1] + local ct = args[2] + local f1 = args[3] + + local onPassiveBeDamaging = function(func, caster, damage) + if BattleLogic.BuffMgr:HasBuff(caster, BuffName.DOT, function(buff) return buff.damageType == dot end) then + local dmgDeduction = damage - floor(BattleUtil.ErrorCorrection(BattleUtil.CountValue(damage, f1, ct))) + if func then func(dmgDeduction) end + end + end + role.Event:AddEvent(BattleEventName.PassiveBeDamaging, onPassiveBeDamaging) + end, + + -- TODO 无敌盾未实现 + -- 战斗第[a]回合无敌 + -- a[int] + -- [141] = {}, + + + -- 释放技能时如目标处于[a]状态则伤害的[b]%转化为生命治疗自己 + -- a[持续伤害状态]b[float] + [142] = function(role, args) + local dot = args[1] + local f1 = args[2] + local onHit = function(target, damage, bCrit, finalDmg) + if BattleLogic.BuffMgr:HasBuff(target, BuffName.DOT, function(buff) return buff.damageType == dot end) then + BattleUtil.ApplyTreat(role, role, floor(BattleUtil.ErrorCorrection(finalDmg * f1))) + end + end + local onSkillCast = function(skill) + if skill.type == BattleSkillType.Special then + role.Event:AddEvent(BattleEventName.RoleHit, onHit) + end + end + -- 技能后后 + local onSkillCastEnd = function(skill) + if skill.type == BattleSkillType.Special then + role.Event:RemoveEvent(BattleEventName.RoleHit, onHit) + end + end + role.Event:AddEvent(BattleEventName.SkillCast, onSkillCast) + role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillCastEnd) + end, + + + -- 释放技能时如目标处于[a]状态则[b]的概率[c]改变[d]% + -- a[持续伤害状态]b[控制状态]c[改变类型]d[float] + [143] = function(role, args) + local dot = args[1] + local ctrl = args[2] + local ct = args[3] + local f1 = args[4] + + local onSkillControl = function(target, buff, rate, func) + if BattleLogic.BuffMgr:HasBuff(target, BuffName.DOT, function(b) return b.damageType == dot end) then + + if buff.type == BuffName.Control and buff.ctrlType == ctrl then + local finalRate = BattleUtil.CountValue(rate, f1, ct) + if func then func(finalRate) end + end + end + end + local onSkillCast = function(skill) + if skill.type == BattleSkillType.Special then + role.Event:AddEvent(BattleEventName.SkillRandomBuff, onSkillControl) + end + end + -- 技能后后 + local onSkillCastEnd = function(skill) + if skill.type == BattleSkillType.Special then + role.Event:RemoveEvent(BattleEventName.SkillRandomBuff, onSkillControl) + end + end + role.Event:AddEvent(BattleEventName.SkillCast, onSkillCast) + role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillCastEnd) + end, + + -- TODO + -- 死亡时释放[a]次技能 + -- a[int] + -- [144] = + + + -- 技能对[a]目标[b]额外提升[c]% + -- a[持续伤害状态]b[属性]c[float] + [145] = function(role, args) + local dot = args[1] + local pro = args[2] + local f1 = args[3] + + -- 技能后后 + local onSkillCastEnd = function(skill) + if skill.type == BattleSkillType.Special then + local list = skill.effectTargets + for _, target in ipairs(list) do + if BattleLogic.BuffMgr:HasBuff(target, BuffName.DOT, function(b) return b.damageType == dot end) then + local buff = Buff.Create(role, BuffName.PropertyChange, 0, propertyList[pro], f1, CountTypeName.AddPencent) + end + end + end + end + role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillCastEnd) + end, + + -- 普攻对[a]目标[b]额外提升[c]% + -- a[持续伤害状态]b[属性]c[float] + [146] = function(role, args) + local dot = args[1] + local pro = args[2] + local f1 = args[3] + + -- 技能后后 + local onSkillCastEnd = function(skill) + if skill.type == BattleSkillType.Normal then + local list = skill.effectTargets + for _, target in ipairs(list) do + if BattleLogic.BuffMgr:HasBuff(target, BuffName.DOT, function(b) return b.damageType == dot end) then + local buff = Buff.Create(role, BuffName.PropertyChange, 0, propertyList[pro], f1, CountTypeName.AddPencent) + target:AddBuff(buff) + end + end + end + end + role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillCastEnd) + end, + + -- 受到攻击有[a]%概率使攻击者[b](每回合造成被击者自身20%攻击力的伤害)持续[c]回合 + -- a[float]b[持续伤害状态]c[int] + [147] = function(role, args) + local f1 = args[1] + local dot = args[2] + local i1 = args[3] + + -- 技能后后 + local onRoleBeHit = function(caster) + BattleUtil.RandomAction(f1, function() + local attack = role:GetRoleData(RoleDataName.Attack) + local damage = floor(BattleUtil.ErrorCorrection(attack * 0.2)) + local buff = Buff.Create(role, BuffName.DOT, i1, 1, dot, damage) + buff.isRealDamage = true + caster:AddBuff(buff) + end) + end + role.Event:AddEvent(BattleEventName.RoleBeHit, onRoleBeHit) + end, + + + -- TODO + -- 直接伤害击杀[a]目标回复[b]%的最大生命 + -- a[持续伤害状态]b[float] + -- [148] + + + -- TODO + -- 技能攻击的目标如本回合直接攻击过自己则对其造成伤害增加[a]%(如目标[b]则伤害增加[c]%) + -- a[float]b[持续伤害状态]c[float] + -- [149] + + -- 同 114 + -- [150] + + -- TODO + -- 释放普通攻击如目标[a],且血量低于[b]%则有[c]%概率秒杀 + -- a[持续伤害状态]b[float]c[float] + -- [151] + + -- 释放技能有[a]%概率附加[b]效果持续[c]回合 + -- a[float]b[控制状态]c[int] + [152] = function(role, args) + local f1 = args[1] + local ctrl = args[2] + local i1 = args[3] + + -- 技能后后 + local onSkillCastEnd = function(skill) + if skill.type == BattleSkillType.Special then + local list = skill.effectTargets + for _, r in ipairs(list) do + BattleUtil.RandomAction(f1, function() + local buff = Buff.Create(role, BuffName.Control, i1, ctrl) + r:AddBuff(buff) + end) + end + end + end + role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillCastEnd) + end, + + + + -- TODO + -- 直接伤害击杀目标回复自身[a]点怒气 + -- a[int] + -- [153] + + -- TODO + -- 复活友方第[a]位阵亡的英雄并回复其[b]%的生命每场战斗触发[c]次 + -- a[int]b[float]c[int] + -- [154] + + -- TODO + -- 目标[a]每[b]改变[c]%,对其[d]就[e]改变[f]% + -- a[属性]b[改变类型]c[float]d[属性]e[改变类型]f[float] + -- [155] + + -- 受到普攻后降低攻击自己武将的[c]点怒气 + -- c[int] + [156] = function(role, args) + local i1 = args[1] + local onBeSkillCastEnd = function(skill) + if skill.type == BattleSkillType.Normal then + skill.ower:AddRage(i1, CountTypeName.Sub) + end + end + role.Event:AddEvent(RoleDataName.BeSkillCastEnd, onBeSkillCastEnd) + end, + + + -- TODO 奸商盾 + -- 减伤盾减伤比例[a]改变[b]% + -- a[改变类型]b[float] + -- [157] + + -- 释放技能后回复当前本方阵容最靠前武将[a]点怒气 + -- a[int] + [158] = function(role, args) + local i1 = args[1] + local onSkillCastEnd = function(skill) + if skill.type == BattleSkillType.Special then + local list = BattleLogic.Query(function(v) return v.camp == role.camp end) + list = table.sort(list, function(a, b) + return a.position < b.position + end) + if list[1] and list[1].isDead then + list[1]:AddRage(i1, CountTypeName.Add) + end + end + end + role.Event:AddEvent(RoleDataName.SkillCastEnd, onSkillCastEnd) + end, + + + + -- TODO + -- 每回合(不累加)[a]伤害[b]改变[c]% + -- a[持续伤害状态]b[改变类型]c[float] + -- [159] + + + -- 受到普攻是有[a]%概率给攻击者附加[b],每回合对目标造成自身攻击的[c]%伤害,持续[d]回合 + -- a[float]b[持续伤害状态]c[float]d[int] + [160] = function(role, args) + local f1 = args[1] + local dot = args[2] + local f2 = args[3] + local i1 = args[3] + + -- 技能后后 + local onSkillCastEnd = function(skill) + if skill.type == BattleSkillType.Normal then + BattleUtil.RandomAction(f1, function() + local attack = role:GetRoleData(RoleDataName.Attack) + local damage = floor(BattleUtil.ErrorCorrection(attack * f2)) + local buff = Buff.Create(role, BuffName.DOT, i1, 1, dot, damage) + buff.isRealDamage = true + caster:AddBuff(buff) + end) + end + end + role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillCastEnd) + end, + + + + -- 无165 + -- [165] + + -- 普通攻击时如目标处于[a]状态则伤害的[b]%转化为生命治疗自己 + -- a[持续伤害状态]b[float] + [166] = function(role, args) + local dot = args[1] + local f1 = args[2] + local onHit = function(target, damage, bCrit, finalDmg) + if BattleLogic.BuffMgr:HasBuff(target, BuffName.DOT, function(buff) return buff.damageType == dot end) then + BattleUtil.ApplyTreat(role, role, floor(BattleUtil.ErrorCorrection(finalDmg * f1))) + end + end + local onSkillCast = function(skill) + if skill.type == BattleSkillType.Normal then + role.Event:AddEvent(BattleEventName.RoleHit, onHit) + end + end + -- 技能后后 + local onSkillCastEnd = function(skill) + if skill.type == BattleSkillType.Normal then + role.Event:RemoveEvent(BattleEventName.RoleHit, onHit) + end + end + role.Event:AddEvent(BattleEventName.SkillCast, onSkillCast) + role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillCastEnd) + end, + + -- 如果目标数量大于[a]个,增加自身[b]点怒气 + -- a[int]b[int] + [167] = function(role, args) + local i1 = args[1] + local i2 = args[2] + -- 释放技能后 + local onSkillEnd = function(skill) + if #skill.effectTargets > i1 then + role:AddRage(i2, 1) + end + end + role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillEnd) + end, + + -- TODO 无敌吸血盾 + -- 释放技能后给当前血量最少的2名队友附加无敌吸血盾持续[a]回合 + -- a[int] + [168] = function(role, args) + local i1 = args[1] + -- 释放技能后 + local onSkillEnd = function(skill) + if skill.type == BattleSkillType.Special then + local list = BattleLogic.Query(function(v) return v.camp == role.camp end) + list = BattleUtil.SortByProp(list, RoleDataName.Hp, 0) + local index = 0 + for i = 1, #list do + if not list[i].isDead and list[i] ~= role and index < 2 then + index = index + 1 + -- 吸血率%25 策划说写死 + list[i]:AddBuff(Buff.Create(role, BuffName.Shield, i1, ShieldTypeName.AllReduce, 0.25, 0)) + end + end + end + end + role.Event:AddEvent(BattleEventName.SkillCastEnd, onSkillEnd) + end, + + + + -- 行动后增加自身[a]%的[b](可叠加持续至结束) + -- a[float]b[属性] + [169] = function(role, args) + local f1 = args[1] + local pro = args[2] + -- 行动结束后 + local onTurnEnd = function() + local buff = Buff.Create(role, BuffName.PropertyChange, 0, propertyList[pro], f1, CountTypeName.AddPencent) + role:AddBuff(buff) + end + role.Event:AddEvent(BattleEventName.RoleTurnEnd, onTurnEnd) + end, + + + -- 击杀目标后对敌方血量百分比最低两名角色造成[a]%[b]伤害 + -- a[float]b[伤害类型] + [170] = function(role, args) + local f1 = args[1] + local dt = args[2] + -- 直接伤害后 + local onRoleHit = function(target) + if target.isDead then + local list = BattleLogic.Query(function(v) return v.camp ~= role.camp end) + list = table.sort(list, function(a, b) + local r1 = a:GetRoleData(RoleDataName.Hp) / a:GetRoleData(RoleDataName.MaxHp) + local r2 = b:GetRoleData(RoleDataName.Hp) / b:GetRoleData(RoleDataName.MaxHp) + return r1 < r2 + end) + local index = 0 + for i = 1, #list do + if not list[i].isDead and index < 2 then + index = index + 1 + BattleUtil.CalDamage(nil, role, list[i], dt, f1) + end + end + end + end + role.Event:AddEvent(BattleEventName.RoleHit, onRoleHit) + end } -return passivityList \ No newline at end of file +return passivityList diff --git a/luafight/Modules/Battle/Logic/Base/Random.lua b/luafight/Modules/Battle/Logic/Base/Random.lua index 61eea900f..0d3e2faf9 100644 --- a/luafight/Modules/Battle/Logic/Base/Random.lua +++ b/luafight/Modules/Battle/Logic/Base/Random.lua @@ -64,4 +64,4 @@ function Random.RangeInt(v1, v2) else return v1 end -end \ No newline at end of file +end diff --git a/luafight/Modules/Battle/Logic/Base/RoleData.lua b/luafight/Modules/Battle/Logic/Base/RoleData.lua index 55540c132..2b46ce607 100644 --- a/luafight/Modules/Battle/Logic/Base/RoleData.lua +++ b/luafight/Modules/Battle/Logic/Base/RoleData.lua @@ -7,8 +7,8 @@ local function isFactor(name) end function RoleData.New() - local instance = {role=0, data={0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0}, - orginData={0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0}} + local instance = {role=0, data={0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0}, + orginData={0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0}} setmetatable(instance, RoleData) return instance end @@ -106,4 +106,4 @@ function RoleData:Foreach(func) for k,v in ipairs(self.data) do func(k, v) end -end \ No newline at end of file +end diff --git a/luafight/Modules/Battle/Logic/Base/Skill.lua b/luafight/Modules/Battle/Logic/Base/Skill.lua index bd9d51746..7a96288dd 100644 --- a/luafight/Modules/Battle/Logic/Base/Skill.lua +++ b/luafight/Modules/Battle/Logic/Base/Skill.lua @@ -24,23 +24,16 @@ end function Skill:Init(role, effectData, type) --type 0 异妖 1 点技 2 滑技 local isTeamSkill = type == 0 - if type == 0 then --异妖 - self.cd = effectData[1] % 100 --异妖技能的cd数据为:类型*100 + 站位 - self.randomInStage2 = 0 - elseif type == 1 then --点技 - self.cd = 0 --点技 cd为0 - self.randomInStage2 = 0 - elseif type == 2 then --滑技 - self.cd = effectData[1] % 100 --上滑技的cd数据为:中期上滑概率*100000 + cd - self.randomInStage2 = (effectData[1] - self.cd) / 100000 - end - - --skill = {cd, {目标id1, 效果时间, 效果1, 效果2, ...},{目标id2, 效果时间, 效果3, 效果4, ...}, ...} + self.type = type + --skill = {技能ID, {目标id1, 效果时间, 效果1, 效果2, ...},{目标id2, 效果时间, 效果3, 效果4, ...}, ...} --效果 = {效果类型id, 效果参数1, 效果参数2, ...} self.effectList:Clear() self.owner = role self.isTeamSkill = isTeamSkill self.teamSkillType = isTeamSkill and floor(effectData[1] / 100) or 0 + self.id = effectData[1] -- 技能ID + -- self.EffectDuration = 0 -- 效果命中需要的时间 + for i=2, #effectData do local v = effectData[i] @@ -75,21 +68,28 @@ function Skill:Dispose() end end -local function takeEffect(caster, target, effects, duration) +local function takeEffect(caster, target, effects, duration, skill) for k=1, #effects do local e = effects[k] - effect[e.type](caster, target, e.args, duration) + effect[e.type](caster, target, e.args, duration, skill) if BattleLogic.IsOpenBattleRecord then BattleLogic.RecordEffect(caster, target, e.type, e.args, duration) end end end -function Skill:Cast() +-- 释放技能 +-- func 技能释放完成回调 +-- targets 指定技能释放目标 +-- isAdd 是否是追加技能 +function Skill:Cast(func, targets, isAdd) + self.castDoneFunc = func + self.effectTargets = {} + self.isAdd = isAdd for i=1, self.effectList.size do local effectGroup = self.effectList.buffer[i] local chooseId = effectGroup.chooseId - local arr = BattleUtil.ChooseTarget(self.owner, chooseId) + local arr = targets or BattleUtil.ChooseTarget(self.owner, chooseId) if #arr > 0 then --效果延迟1帧生效 BattleLogic.WaitForTrigger(BattleLogic.GameDeltaTime, function() @@ -100,74 +100,98 @@ function Skill:Cast() if count == 0 then count = #arr end - if chooseId == 10000 or chooseId == 20000 then --10000 我方aoe 20000 敌方aoe - local camp = chooseId == 10000 and self.owner.camp or 1 - self.owner.camp - self.owner.Event:DispatchEvent(BattleEventName.AOE, camp) - for j=1, count do - takeEffect(self.owner, arr[j], effects, duration) - end - elseif weight == 8 then --对位相邻的目标同时触发效果 - for j=1, count do - takeEffect(self.owner, arr[j], effects, duration) - end - else - local d = duration / (count + 1) --分割多人目标施加效果的时间,按照(1+1+..+2)的时间权重占比分配 - for j=1, count do - local index = j - local cd = j == count and d * 2 or d - BattleLogic.WaitForTrigger(d * (j-1), function() - local r = arr[index] - if not r or r.isDead then --当被选取的目标已经死亡或者没有,则重新选取,若重新选取的目标也死亡或者没有,则从之前的目标中选取第一个不死亡的 - arr = BattleUtil.ChooseTarget(self.owner, chooseId) - r = arr[index] - if not r then --当没有新增的被选取目标时,可能为空 - for i=1, #arr do - if not arr[i].isDead then - takeEffect(self.owner, arr[i], effects, cd) - return - end - end - if not r then - return - end - end - end - takeEffect(self.owner, r, effects, cd) - end) + + -- 全部同时生效 + for j=1, count do + if arr[j] and not arr[j].isDead then + takeEffect(self.owner, arr[j], effects, duration, self) + -- 加入目标列表 + table.insert(self.effectTargets, arr[j]) end end + + -- if chooseId == 100000 or chooseId == 200000 then --10000 我方aoe 20000 敌方aoe + -- local camp = chooseId == 100000 and self.owner.camp or 1 - self.owner.camp + -- self.owner.Event:DispatchEvent(BattleEventName.AOE, camp) + -- for j=1, count do + -- takeEffect(self.owner, arr[j], effects, duration, self) + -- -- 加入目标列表 + -- table.insert(self.effectTargets, arr[j]) + -- end + -- elseif weight == 7 then --对位相邻的目标同时触发效果 + -- for j=1, count do + -- takeEffect(self.owner, arr[j], effects, duration, self) + -- -- 加入目标列表 + -- table.insert(self.effectTargets, arr[j]) + -- end + -- else + -- for j = 1, count do + -- local index = j + -- local r = arr[index] + -- -- if not r or r.isDead then --当被选取的目标已经死亡或者没有,则重新选取,若重新选取的目标也死亡或者没有,则从之前的目标中选取第一个不死亡的 + -- -- if not targets then -- 如果是指定目标释放的则不再选取目标 + -- -- arr = BattleUtil.ChooseTarget(self.owner, chooseId) + -- -- r = arr[index] + -- -- if not r then --当没有新增的被选取目标时,可能为空 + -- -- for i=1, #arr do + -- -- if not arr[i].isDead then + -- -- r = arr[i] + -- -- break + -- -- end + -- -- end + -- -- end + -- -- end + -- -- end + -- -- + -- if r and not r.isDead then + -- takeEffect(self.owner, r, effects, duration, self) + -- -- 加入目标列表 + -- table.insert(self.effectTargets, r) + -- end + -- end + -- end end) end end - if not self.isTeamSkill then - local type = BattleLogic.Type - local isPVEMonster = self.owner.camp == 1 and (type == 1 or type == 2 or type == 4 or type == 5 or type == 8) - local time = 0 - if isPVEMonster then - if self.owner.superSkill == self then - --怪物绝技读条时间=max(10-速度/(8*(等级+10)),2) - time = max(10-self.owner:GetRoleData(RoleDataName.Speed)/(8*(self.owner:GetRoleData(RoleDataName.Level)+10)), 2) - else - --怪物普技读条时间==max(9-速度/(8*(等级+10)),1) - time = max(9-self.owner:GetRoleData(RoleDataName.Speed)/(8*(self.owner:GetRoleData(RoleDataName.Level)+10)), 1) - end - else - if self.owner.superSkill == self then - --绝技读条时间=max(9-速度/(8*(等级+10)),3) - time = max(9-self.owner:GetRoleData(RoleDataName.Speed)/(8*(self.owner:GetRoleData(RoleDataName.Level)+10)), 3) - else - --普技读条时间=max(7-速度/(8*(等级+10)),1.5) - time = max(7-self.owner:GetRoleData(RoleDataName.Speed)/(8*(self.owner:GetRoleData(RoleDataName.Level)+10)), 1.5) - end - end - self.owner.sp = 0 - self.owner.spPass = floor(BattleUtil.ErrorCorrection(time) * BattleLogic.GameFrameRate) - else + -- 计算技能CD的没有用了 + -- if not self.isTeamSkill then + -- local type = BattleLogic.Type + -- local isPVEMonster = self.owner.camp == 1 and (type == 1 or type == 2 or type == 4 or type == 5 or type == 8) + -- local time = 0 + -- if isPVEMonster then + -- if self.owner.superSkill == self then + -- --怪物绝技读条时间=max(10-速度/(8*(等级+10)),2) + -- time = max(10-self.owner:GetRoleData(RoleDataName.Speed)/(8*(self.owner:GetRoleData(RoleDataName.Level)+10)), 2) + -- else + -- --怪物普技读条时间==max(9-速度/(8*(等级+10)),1) + -- time = max(9-self.owner:GetRoleData(RoleDataName.Speed)/(8*(self.owner:GetRoleData(RoleDataName.Level)+10)), 1) + -- end + -- else + -- if self.owner.superSkill == self then + -- --绝技读条时间=max(9-速度/(8*(等级+10)),3) + -- time = max(9-self.owner:GetRoleData(RoleDataName.Speed)/(8*(self.owner:GetRoleData(RoleDataName.Level)+10)), 3) + -- else + -- --普技读条时间=max(7-速度/(8*(等级+10)),1.5) + -- time = max(7-self.owner:GetRoleData(RoleDataName.Speed)/(8*(self.owner:GetRoleData(RoleDataName.Level)+10)), 1.5) + -- end + -- end + -- self.owner.sp = 0 + -- self.owner.spPass = floor(BattleUtil.ErrorCorrection(time) * BattleLogic.GameFrameRate) + -- else + -- self.owner.curSkill = self + -- end + -- + if self.isTeamSkill then self.owner.curSkill = self end - self.owner.Event:DispatchEvent(BattleEventName.SkillCast, self) - BattleLogic.Event:DispatchEvent(BattleEventName.SkillCast, self) + + -- 延时一帧执行,避免战斗还没开始就释放了技能 + -- BattleLogic.WaitForTrigger(BattleLogic.GameDeltaTime, function() + self.owner.Event:DispatchEvent(BattleEventName.SkillCast, self) + BattleLogic.Event:DispatchEvent(BattleEventName.SkillCast, self) + -- end) + --技能的施法时间计算,根据当前目标id关联的持续时间,取其中时间最长的一个 local duration = 0 @@ -180,8 +204,28 @@ function Skill:Cast() BattleLogic.SetSkillUsable(self.owner.camp, true) self.owner.Event:DispatchEvent(BattleEventName.SkillCastEnd, self) BattleLogic.Event:DispatchEvent(BattleEventName.SkillCastEnd, self) + for _, tr in ipairs(self.effectTargets) do + tr.Event:DispatchEvent(BattleEventName.BeSkillCastEnd, self) + end + -- 技能结束 + self:EndSkill() end) + end - +-- 结束技能 +function Skill:EndSkill() + -- 技能结束后摇后结束技能释放 + -- if self.isAdd then + -- if self.castDoneFunc then self.castDoneFunc() end + -- else + -- 非追加技能加入技能后摇 + BattleLogic.WaitForTrigger(0.5, function() + if self.castDoneFunc then self.castDoneFunc() end + end) + -- end + -- + self.effectTargets = {} + self.isAdd = nil +end diff --git a/luafight/Modules/Battle/Logic/BattleLogic.lua b/luafight/Modules/Battle/Logic/BattleLogic.lua index 7780fd827..fc2234dd2 100644 --- a/luafight/Modules/Battle/Logic/BattleLogic.lua +++ b/luafight/Modules/Battle/Logic/BattleLogic.lua @@ -5,6 +5,12 @@ local min = math.min local objList = BattleDictionary.New() local removeObjList = BattleList.New() +local MaxRound = 20 +local CurRound = 0 +local CurCamp = 0 +local CurSkillPos = {} +local PosList = {} + local curUid local curBuffId local curFrame @@ -26,6 +32,9 @@ local enemyTeamDummyRole = {camp = 1, Event = BattleEvent.New(), isTeam = true, local playerTeamSkillList = {} local enemyTeamSkillList = {} +local _IsDebug + + local fightData local record local optionRecord @@ -40,17 +49,12 @@ BattleLogic.TotalOrder = 0 --当前波次 BattleLogic.CurOrder = 0 -local stage --战场分割阶段 -local stageFrame1 = 15 * BattleLogic.GameFrameRate --前期转中期的时间点 -local stageFrame2 = 30 * BattleLogic.GameFrameRate --中期转后期的时间点 -local curStageFrame +local teamSkillCastRound = {2, 4, 6} +local MyTeamSkillCastIndex +local EnemyTeamSkillCastIndex -local teamSkillCastTime = {7 * BattleLogic.GameFrameRate, - 22 * BattleLogic.GameFrameRate, - 45 * BattleLogic.GameFrameRate} -local teamSkillCastIndex -local maxFrame --战斗最大用时,超时判负 +-- local maxFrame --战斗最大用时,超时判负 local actionPool = BattleObjectPool.New(function () return { 0, 0 } @@ -64,12 +68,12 @@ local rolePool = BattleObjectPool.New(function () return RoleLogic.New() end) -function BattleLogic.Init(maxTime, data, optionData) +function BattleLogic.Init(data, optionData) if BattleLogic.IsOpenBattleRecord then record = {} end - maxFrame = BattleLogic.GameFrameRate * maxTime + -- maxFrame = BattleLogic.GameFrameRate * maxTime fightData = data if optionData then optionRecord = optionData @@ -86,8 +90,9 @@ function BattleLogic.Init(maxTime, data, optionData) curBuffId = 0 curFrame = 0 - stage = 0 + CurRound = 0 + _IsDebug = false playerTeamDummyRole.isDebug = false playerTeamDummyRole.Event:ClearEvent() enemyTeamDummyRole.isDebug = false @@ -106,12 +111,12 @@ function BattleLogic.Init(maxTime, data, optionData) end function BattleLogic.StartOrder() + -- BattleLogic.CurOrder = BattleLogic.CurOrder + 1 - stage = 0 - curStageFrame = 0 - teamSkillCastIndex = 1 - if BattleLogic.CurOrder == 1 then + MyTeamSkillCastIndex = 1 + EnemyTeamSkillCastIndex = 1 + for i=1, #fightData.playerData do BattleLogic.AddRole(fightData.playerData[i], i) end @@ -128,7 +133,7 @@ function BattleLogic.StartOrder() for i=1, #fightData.playerData.teamSkill do local skill = skillPool:Get() skill:Init(playerTeamDummyRole, fightData.playerData.teamSkill[i], 0) - playerTeamSkillList[skill.cd] = skill + playerTeamSkillList[i] = skill end for i=1, #fightData.playerData.teamPassive do for j=1, #fightData.playerData.teamPassive[i] do @@ -151,7 +156,7 @@ function BattleLogic.StartOrder() for i=1, #fightData.enemyData[BattleLogic.CurOrder].teamSkill do local skill = skillPool:Get() skill:Init(enemyTeamDummyRole, fightData.enemyData[BattleLogic.CurOrder].teamSkill[i], 0) - enemyTeamSkillList[skill.cd] = skill + enemyTeamSkillList[i] = skill end for i=1, #fightData.enemyData[BattleLogic.CurOrder].teamPassive do for j=1, #fightData.enemyData[BattleLogic.CurOrder].teamPassive[i] do @@ -177,7 +182,7 @@ function BattleLogic.StartOrder() for i=1, #fightData.enemyData[BattleLogic.CurOrder].teamSkill do local skill = skillPool:Get() skill:Init(enemyTeamDummyRole, fightData.enemyData[BattleLogic.CurOrder].teamSkill[i], 0) - enemyTeamSkillList[skill.cd] = skill + enemyTeamSkillList[i] = skill end for i=1, #fightData.enemyData[BattleLogic.CurOrder].teamPassive do for j=1, #fightData.enemyData[BattleLogic.CurOrder].teamPassive[i] do @@ -191,16 +196,120 @@ function BattleLogic.StartOrder() end end end + + -- 开始战斗,延时一帧执行,避免战斗还没开始就释放了技能 + BattleLogic.WaitForTrigger(BattleLogic.GameDeltaTime, function() + -- 开始战斗 + BattleLogic.TurnRound() + end) end -function BattleLogic.TakeTeamPassivity(teamCaster, id, args) - for i=1, objList.size do - if objList.vList[i].camp == teamCaster.camp then - BattleUtil.Passivity[id](objList.vList[i], args) +-- 获取当前轮数 +function BattleLogic.GetCurRound() + -- body + return CurRound, MaxRound +end + +-- 获取当前轮次信息 +function BattleLogic.GetCurTurn() + -- body + return CurCamp, CurSkillPos[CurCamp] +end + +-- 设置是否是debug +function BattleLogic.SetIsDebug(isDebug) + _IsDebug = isDebug +end +function BattleLogic.GetIsDebug() + return _IsDebug +end + +-- 开始轮转 +-- debugTurn 用于判断是否是debug轮转的参数 +function BattleLogic.TurnRound(debugTurn) + if BattleLogic.GetIsDebug() and not debugTurn then + BattleLogic.Event:DispatchEvent(BattleEventName.DebugStop) + return + end + -- 第一次进入 或者 本轮结束 初始化流程状态 + if CurRound == 0 or (CurSkillPos[0] == 6 and CurSkillPos[1] == 6) then + CurRound = CurRound + 1 + CurCamp = 0 + CurSkillPos[0] = -1 -- 先从异妖开始检测 + CurSkillPos[1] = -1 + -- 轮数变化 + BattleLogic.Event:DispatchEvent(BattleEventName.BattleRoundChange, CurRound) + else + -- 切换阵营 + CurCamp = (CurCamp + 1) % 2 + end + + -- 当前阵营下一释放技能的位置 + local cpos = CurSkillPos[CurCamp] + 1 + + if cpos == 0 then + -- 保存当前释放技能的位置 + CurSkillPos[CurCamp] = cpos + -- 检测异妖技能释放 + BattleLogic.CheckTeamSkillCast(CurCamp) + else + -- 找到下一个释放技能的人 + local SkillRole + for p = cpos, 6 do + -- 保存当前位置 + CurSkillPos[CurCamp] = p + -- 自己阵营中的位置 + 自己阵营的ID * 6 = 自己在PosList中的位置 + local role = PosList[p + (CurCamp * 6)] + if role and role:IsAvailable() then + SkillRole = role + break + end + + -- 如果当前位置不能释放技能也需要走buff轮转 + BattleLogic.BuffMgr:TurnUpdate(1) -- 计算恢复血量 + BattleLogic.BuffMgr:TurnUpdate(2) -- 计算持续伤害(除去流血) + BattleLogic.BuffMgr:TurnUpdate(3) -- 计算持续伤害(流血) + BattleLogic.BuffMgr:TurnUpdate(4) -- 计算其他buff end + -- 如果找不到下一个人,直接交换阵营 + if not SkillRole then + BattleLogic.TurnRound() + return + end + + SkillRole.Event:DispatchEvent(BattleEventName.RoleTurnStart) + BattleLogic.BuffMgr:TurnUpdate(1) -- 计算恢复血量 + BattleLogic.BuffMgr:TurnUpdate(2) -- 计算持续伤害(除去流血) + -- 释放技能后,递归交换阵营 + SkillRole:CastSkill(function() + BattleLogic.BuffMgr:TurnUpdate(3) -- 计算持续伤害(流血) + BattleLogic.BuffMgr:TurnUpdate(4) -- 计算其他buff + SkillRole.Event:DispatchEvent(BattleEventName.RoleTurnEnd) + BattleLogic.TurnRound() + end) end end + + +-- 触发异妖被动 +function BattleLogic.TakeTeamPassivity(teamCaster, id, args) + objList:Foreach(function(k, v) + BattleUtil.Passivity[id](v, args) + end) +end + +-- 获取当前等待释放技能的异妖的序号 +function BattleLogic.GetTeamSkillCastIndex(camp) + -- body + if camp == 0 then + return MyTeamSkillCastIndex + else + return EnemyTeamSkillCastIndex + end +end + +-- 获取异妖 function BattleLogic.GetTeamSkill(camp, pos) if camp == 0 then return playerTeamSkillList[pos] @@ -209,35 +318,80 @@ function BattleLogic.GetTeamSkill(camp, pos) end end -function BattleLogic.GetTeamSkillCastSlider() - if playerTeamDummyRole.isDebug or teamSkillCastIndex > #teamSkillCastTime then +-- 获取异妖技能CD +function BattleLogic.GetTeamSkillCastSlider(camp) + local teamSkillCastIndex = BattleLogic.GetTeamSkillCastIndex(camp) + if playerTeamDummyRole.isDebug or teamSkillCastIndex > #teamSkillCastRound then return 0 end - local slider = (teamSkillCastTime[teamSkillCastIndex] - curStageFrame) + local slider = 0 if teamSkillCastIndex == 1 then - slider = slider / teamSkillCastTime[teamSkillCastIndex] - elseif teamSkillCastIndex == 2 then - slider = slider / (teamSkillCastTime[teamSkillCastIndex] - stageFrame1) - elseif teamSkillCastIndex == 3 then - slider = slider / (teamSkillCastTime[teamSkillCastIndex] - stageFrame2) + slider = CurRound / teamSkillCastRound[teamSkillCastIndex] + else + slider = (CurRound - teamSkillCastRound[teamSkillCastIndex - 1]) / (teamSkillCastRound[teamSkillCastIndex] - teamSkillCastRound[teamSkillCastIndex - 1]) end return slider end +-- 检测异妖技能是否可以释放 +function BattleLogic.CheckTeamSkillCast(camp) + local teamSkillCastIndex = BattleLogic.GetTeamSkillCastIndex(camp) + local teamSkillList = camp == 0 and playerTeamSkillList or enemyTeamSkillList + if teamSkillList[teamSkillCastIndex] then + if teamSkillCastIndex <= #teamSkillCastRound and CurRound >= teamSkillCastRound[teamSkillCastIndex] then + teamSkillList[teamSkillCastIndex]:Cast(BattleLogic.TurnRound) + if camp == 0 then + MyTeamSkillCastIndex = MyTeamSkillCastIndex + 1 + else + EnemyTeamSkillCastIndex = EnemyTeamSkillCastIndex + 1 + end + return + end + end + -- 没有要释放技能的异妖,切换阵营 + BattleLogic.TurnRound() +end + + function BattleLogic.GenerateBuffId() + if not curBuffId then + curBuffId = 0 + end curBuffId = curBuffId + 1 return curBuffId end +-- 角色数据添加 function BattleLogic.AddRole(roleData, position) + if not curUid then + curUid = 0 + end curUid = curUid + 1 local role = rolePool:Get() role:Init(curUid, roleData, position) objList:Add(curUid, role) + if roleData.camp == 0 then + PosList[position] = role -- 1-6 我方英雄 + else + PosList[position + 6] = role-- 7-12 敌方英雄 + end if not role.isDead then BattleLogic.Event:DispatchEvent(BattleEventName.AddRole, role) end end +-- 获取角色数据 +function BattleLogic.GetRole(camp, pos) + return PosList[pos + camp*6] +end +-- 获取某阵营所有角色 +function BattleLogic.GetRoleByCamp(camp) + local list = {} + for i = 1, 6 do + list[i] = PosList[i + camp * 6] + end + return list +end + function BattleLogic.SetSkillUsable(camp, value) if camp == 0 then @@ -280,54 +434,23 @@ function BattleLogic.GetTeamSkillCaster(camp) end function BattleLogic.HasObj(obj) - return obj and objList.kvList[obj.uid] + return obj and objList:Get(obj.uid) end function BattleLogic.CurFrame() return curFrame end -function BattleLogic.CurStage() - return stage -end - ---表现层调用,显示每个阶段剩余时间百分比 -function BattleLogic.CurStageSlider() - local slider = 0 - if stage == 1 then - slider = (stageFrame1 - curStageFrame) / stageFrame1 - elseif stage == 2 then - slider = (stageFrame2 - curStageFrame) / (stageFrame2 - stageFrame1) - elseif stage == 3 then - slider = (maxFrame / BattleLogic.TotalOrder - curStageFrame) / (maxFrame / BattleLogic.TotalOrder - stageFrame2) - end - return slider -end - ---表现层调用,显示每个阶段剩余时间 -function BattleLogic.CurStageTime() - local time = 0 - if stage == 1 then - time = (stageFrame1 - curStageFrame) / BattleLogic.GameFrameRate - elseif stage == 2 then - time = (stageFrame2 - curStageFrame) / BattleLogic.GameFrameRate - elseif stage == 3 then - time = (maxFrame / BattleLogic.TotalOrder - curStageFrame) / BattleLogic.GameFrameRate - end - return time -end - function BattleLogic.Query(func, inCludeDeadRole) local list = {} local index = 1 if func then - for i=1, objList.size do - local v = objList.vList[i] + objList:Foreach(function(k, v) if func(v) and (inCludeDeadRole or not v.isDead) then list[index] = v index = index + 1 end - end + end) end return list end @@ -370,11 +493,15 @@ end function BattleLogic.Update() curFrame = curFrame + 1 - if curFrame > maxFrame then + -- if curFrame > maxFrame then + -- BattleLogic.BattleEnd(0) + -- return + -- end + if bMyAllDead then BattleLogic.BattleEnd(0) return end - if bMyAllDead then + if CurRound > 20 then BattleLogic.BattleEnd(0) return end @@ -387,31 +514,6 @@ function BattleLogic.Update() end end - curStageFrame = curStageFrame + 1 - - if curStageFrame > 0 and stage == 0 then - stage = 1 - BattleLogic.Event:DispatchEvent(BattleEventName.BattleStageChange, stage) - end - if curStageFrame > stageFrame1 and stage == 1 then - stage = 2 - BattleLogic.Event:DispatchEvent(BattleEventName.BattleStageChange, stage) - end - if curStageFrame > stageFrame2 and stage == 2 then - stage = 3 - BattleLogic.Event:DispatchEvent(BattleEventName.BattleStageChange, stage) - end - - if teamSkillCastIndex <= #teamSkillCastTime and curStageFrame > teamSkillCastTime[teamSkillCastIndex] then - if not playerTeamDummyRole.isDebug and playerTeamSkillList[teamSkillCastIndex] then - playerTeamSkillList[teamSkillCastIndex]:Cast() - end - if not enemyTeamDummyRole.isDebug and enemyTeamSkillList[teamSkillCastIndex] then - enemyTeamSkillList[teamSkillCastIndex]:Cast() - end - teamSkillCastIndex = teamSkillCastIndex + 1 - end - local index = 1 while index <= tbActionList.size do local action = tbActionList.buffer[index] @@ -428,47 +530,48 @@ function BattleLogic.Update() bMyAllDead = true bEnemyAllDead = true - for i=1, objList.size do - local tmpObj = objList.vList[i] - if not tmpObj.isDead then - tmpObj:Update() - if tmpObj.camp == 0 then + objList:Foreach(function(k, v) + if not v.isDead then + v:Update() + if v.camp == 0 then bMyAllDead = false else bEnemyAllDead = false end end - end + end) if bEnemyAllDead then BattleLogic.Event:DispatchEvent(BattleEventName.BattleOrderEnd, BattleLogic.CurOrder) end end -local posDic = {3,2,4,1,5} --对位规则: 1敌方相同对位 2若死亡或不存在,选取相邻阵位最近且阵位索引最小的 function BattleLogic.GetAggro(role) local minNeighbor = 100 local index = 100 local target local enemyCamp = role.camp == 0 and 1 or 0 - for i=1, objList.size do - if objList.vList[i].camp == enemyCamp and not objList.vList[i].isDead then - if role.position == objList.vList[i].position then - return objList.vList[i] + objList:Foreach(function(k, v) + if v.camp == enemyCamp and not v.isDead then + if role.position == v.position then + minNeighbor = 0 + index = v.position + target = v + return "break" --终止foreach else - local neighbor = math.abs(posDic[role.position] - posDic[objList.vList[i].position]) + local neighbor = math.abs(role.position - v.position) if neighbor < minNeighbor then minNeighbor = neighbor - index = objList.vList[i].position - target = objList.vList[i] - elseif neighbor == minNeighbor and objList.vList[i].position < index then + index = v.position + target = v + elseif neighbor == minNeighbor and v.position < index then minNeighbor = neighbor - index = objList.vList[i].position - target = objList.vList[i] + index = v.position + target = v end end end - end + end) return target end --获取对位相邻站位的人 chooseType 1 我方 2 敌方(对位的敌人受到嘲讽的影响,若对位的敌人死亡,则选取相邻最近的作为目标) @@ -487,7 +590,7 @@ function BattleLogic.GetNeighbor(role, chooseType) if target then local list = BattleLogic.Query(function (r) return r.camp == target.camp end) for i=1, #list do - if not list[i].isDead and math.abs(posDic[target.position] - posDic[list[i].position]) <= 1 then + if not list[i].isDead and math.abs(target.position - list[i].position) <= 1 then table.insert(posList, list[i]) end end @@ -495,22 +598,14 @@ function BattleLogic.GetNeighbor(role, chooseType) return posList end -function BattleLogic.ResetTeamSkillCD(camp) - local skill = camp == 0 and playerTeamDummyRole.curSkill or enemyTeamDummyRole.curSkill - if skill then - skill.spPass = floor(skill.cd % 100 * BattleLogic.GameFrameRate) - skill.sp = skill.spPass - end -end - function BattleLogic.CastTeamSkill(camp) if camp == 0 then - local teamSkill = playerTeamSkillList[teamSkillCastIndex] + local teamSkill = playerTeamSkillList[MyTeamSkillCastIndex] if teamSkill then teamSkill:Cast() end else - local teamSkill = enemyTeamSkillList[teamSkillCastIndex] + local teamSkill = enemyTeamSkillList[EnemyTeamSkillCastIndex] if teamSkill then teamSkill:Cast() end @@ -518,14 +613,13 @@ function BattleLogic.CastTeamSkill(camp) end --Debug专用 -function BattleLogic.SetDebug() - for i=1, objList.size do - local v = objList.vList[i] - v.IsDebug = not v.IsDebug - end - playerTeamDummyRole.isDebug = not playerTeamDummyRole.isDebug - enemyTeamDummyRole.isDebug = not enemyTeamDummyRole.isDebug -end +-- function BattleLogic.SetDebug() +-- objList:Foreach(function(k, v) +-- v.IsDebug = not v.IsDebug +-- end) +-- playerTeamDummyRole.isDebug = not playerTeamDummyRole.isDebug +-- enemyTeamDummyRole.isDebug = not enemyTeamDummyRole.isDebug +-- end --Debug专用 function BattleLogic.SetRoleValue(uid, name, value) @@ -595,4 +689,4 @@ function BattleLogic.GenerateRecordFile() file:write(record[i].."\n") end io.close(file) -end \ No newline at end of file +end diff --git a/luafight/Modules/Battle/Logic/Buff/Aura.lua b/luafight/Modules/Battle/Logic/Buff/Aura.lua index 30d099757..78b238b1c 100644 --- a/luafight/Modules/Battle/Logic/Buff/Aura.lua +++ b/luafight/Modules/Battle/Logic/Buff/Aura.lua @@ -2,18 +2,20 @@ Aura = Buff:New() --初始化Buff,通过传入一些自定义参数控制成长相关的数值 function Aura:SetData(...) - --log("Aura:SetData") + self.action = ... + -- 刷新排序等级 + self.sort = 4 end --初始化后调用一次 function Aura:OnStart() - --log("Aura:OnStart") + end --间隔N帧触发,返回true时表示继续触发,返回false立刻触发OnEnd function Aura:OnTrigger() - --log("Aura:OnTrigger") + if self.action then self.action(self.target) end @@ -22,13 +24,13 @@ end --效果结束时调用一次 function Aura:OnEnd() - --log("Aura:OnEnd") + end --只有当cover字段为true时触发,返回true则被新效果覆盖 function Aura:OnCover(newBuff) - --log("Aura:OnCover") + return true end -return Aura \ No newline at end of file +return Aura diff --git a/luafight/Modules/Battle/Logic/Buff/Brand.lua b/luafight/Modules/Battle/Logic/Buff/Brand.lua index dcbd64f71..8a9e1889e 100644 --- a/luafight/Modules/Battle/Logic/Buff/Brand.lua +++ b/luafight/Modules/Battle/Logic/Buff/Brand.lua @@ -2,27 +2,29 @@ Brand = Buff:New() --初始化Buff,通过传入一些自定义参数控制成长相关的数值 function Brand:SetData(...) - --log("Brand:SetData") + self.flag, self.endFunc = ... --标记,结束回调 self.cover = true self.layer = 1 self.maxLayer = 0 + -- 刷新排序等级 + self.sort = 4 end --初始化后调用一次 function Brand:OnStart() - --log("Brand:OnStart") + end --间隔N帧触发,返回true时表示继续触发,返回false立刻触发OnEnd function Brand:OnTrigger() - --log("Brand:OnTrigger") + return true end --效果结束时调用一次 function Brand:OnEnd() - --log("Brand:OnEnd") + if self.endFunc then self.endFunc() self.endFunc = nil @@ -32,7 +34,7 @@ end --只有当cover字段为true时触发,返回true则被新效果覆盖 function Brand:OnCover(newBuff) - --log("Brand:OnCover") + local b = newBuff.flag == self.flag if b then if newBuff.maxLayer == 0 then @@ -47,4 +49,4 @@ function Brand:OnCover(newBuff) return b end -return Brand \ No newline at end of file +return Brand diff --git a/luafight/Modules/Battle/Logic/Buff/Control.lua b/luafight/Modules/Battle/Logic/Buff/Control.lua index 399a4de9f..1bf4040f6 100644 --- a/luafight/Modules/Battle/Logic/Buff/Control.lua +++ b/luafight/Modules/Battle/Logic/Buff/Control.lua @@ -2,14 +2,16 @@ Control = Buff:New() --初始化Buff,通过传入一些自定义参数控制成长相关的数值 function Control:SetData(...) - --log("Control:SetData") + self.ctrlType = ... self.cover = true --控制效果可被覆盖 + -- 刷新排序等级 + self.sort = 4 end --初始化后调用一次 function Control:OnStart() - --log("Control:OnStart") + if self.ctrlType == 1 then --眩晕 self.target.enable = false elseif self.ctrlType == 2 then --沉默 @@ -21,18 +23,21 @@ function Control:OnStart() self.target.ctrl_noheal = true elseif self.ctrlType == 5 then --致盲 self.target.ctrl_blind = true + + elseif self.ctrlType == 7 then --麻痹 + self.target.ctrl_palsy = true end end --间隔N帧触发,返回true时表示继续触发,返回false立刻触发OnEnd function Control:OnTrigger() - --log("Control:OnTrigger") + return true end --效果结束时调用一次 function Control:OnEnd() - --log("Control:OnEnd") + if self.ctrlType == 1 then --眩晕 self.target.enable = true elseif self.ctrlType == 2 then --沉默 @@ -44,13 +49,16 @@ function Control:OnEnd() self.target.ctrl_noheal = false elseif self.ctrlType == 5 then --致盲 self.target.ctrl_blind = false + + elseif self.ctrlType == 7 then --麻痹 + self.target.ctrl_palsy = false end end --只有当cover字段为true时触发,返回true则被新效果覆盖 function Control:OnCover(newBuff) - --log("Control:OnCover") + return newBuff.ctrlType == self.ctrlType end -return Control \ No newline at end of file +return Control diff --git a/luafight/Modules/Battle/Logic/Buff/DOT.lua b/luafight/Modules/Battle/Logic/Buff/DOT.lua index da879de92..5ecb9f43b 100644 --- a/luafight/Modules/Battle/Logic/Buff/DOT.lua +++ b/luafight/Modules/Battle/Logic/Buff/DOT.lua @@ -2,10 +2,10 @@ DOT = Buff:New() --初始化Buff,通过传入一些自定义参数控制成长相关的数值 function DOT:SetData(...) - --log("DOT:SetData") + self.interval, - self.damageType, --1 燃烧 2 中毒 3 流血 - self.damagePro, --1 物理 2 魔法 + self.damageType, --1 燃烧 2 中毒 3 流血 4 灼烧 + self.damagePro, --1 物理 2 魔法 (真实伤害时 为伤害值) self.damageFactor = ... --伤害系数 self.isRealDamage = false --if self.damageType == 2 then @@ -15,6 +15,12 @@ function DOT:SetData(...) -- self.cover = false -- self.layer = nil --end + + -- 刷新排序等级 + self.sort = 2 + if self.damageType == 3 then -- 流血buff在行动之后刷新 + self.sort = 3 + end end --初始化后调用一次 @@ -26,23 +32,23 @@ end --间隔N帧触发,返回true时表示继续触发,返回false立刻触发OnEnd function DOT:OnTrigger() - --log("DOT:OnTrigger") + if self.isRealDamage then - BattleUtil.ApplyDamage(self.caster, self.target, self.damagePro) + BattleUtil.ApplyDamage(nil, self.caster, self.target, self.damagePro) else - BattleUtil.CalDamage(self.caster, self.target, self.damagePro, self.damageFactor,0, true) + BattleUtil.CalDamage(nil, self.caster, self.target, self.damagePro, self.damageFactor,0, true) end return true end --效果结束时调用一次 function DOT:OnEnd() - --log("DOT:OnEnd") + end --只有当cover字段为true时触发,返回true则被新效果覆盖 function DOT:OnCover(newBuff) - --log("DOT:OnCover") + --if self.damageType == 2 then -- newBuff.layer = self.layer + 1 -- newBuff.damageFactor = @@ -50,4 +56,4 @@ function DOT:OnCover(newBuff) return true end -return DOT \ No newline at end of file +return DOT diff --git a/luafight/Modules/Battle/Logic/Buff/HOT.lua b/luafight/Modules/Battle/Logic/Buff/HOT.lua index 7957f14c5..202d039c9 100644 --- a/luafight/Modules/Battle/Logic/Buff/HOT.lua +++ b/luafight/Modules/Battle/Logic/Buff/HOT.lua @@ -2,20 +2,23 @@ HOT = Buff:New() --初始化Buff,通过传入一些自定义参数控制成长相关的数值 function HOT:SetData(...) - --log("HOT:SetData") + self.interval, self.healValue = ... + + -- 刷新排序等级 + self.sort = 1 -- 最先计算回血 end --初始化后调用一次 function HOT:OnStart() - --log("HOT:OnStart") + self.target.Event:DispatchEvent(BattleEventName.RoleBeHealed, self.caster) end --间隔N帧触发,返回true时表示继续触发,返回false立刻触发OnEnd function HOT:OnTrigger() - --log("HOT:OnTrigger") + if not self.target.ctrl_noheal or self.target.isDead then --禁疗和死亡无法加血 BattleUtil.ApplyTreat(self.caster, self.target, self.healValue) end @@ -24,13 +27,13 @@ end --效果结束时调用一次 function HOT:OnEnd() - --log("HOT:OnEnd") + end --只有当cover字段为true时触发,返回true则被新效果覆盖 function HOT:OnCover(newBuff) - --log("HOT:OnCover") + return true end -return HOT \ No newline at end of file +return HOT diff --git a/luafight/Modules/Battle/Logic/Buff/Immune.lua b/luafight/Modules/Battle/Logic/Buff/Immune.lua index 2da56c0f7..8c09f5a0e 100644 --- a/luafight/Modules/Battle/Logic/Buff/Immune.lua +++ b/luafight/Modules/Battle/Logic/Buff/Immune.lua @@ -1,3 +1,4 @@ +-- 免疫效果 Immune = Buff:New() local immune0 = function(buff) @@ -12,14 +13,17 @@ end --初始化Buff,通过传入一些自定义参数控制成长相关的数值 function Immune:SetData(...) - --log("Immune:SetData") + self.immuneType = ... self.isBuff = true + + -- 刷新排序等级 + self.sort = 4 end --初始化后调用一次 function Immune:OnStart() - --log("Immune:OnStart") + if self.immuneType == 0 then --免疫负面状态(控制状态、减益状态和持续伤害状态) self.target.buffFilter:Add(immune0) elseif self.immuneType == 1 then --免疫控制状态 @@ -31,13 +35,13 @@ end --间隔N帧触发,返回true时表示继续触发,返回false立刻触发OnEnd function Immune:OnTrigger() - --log("Immune:OnTrigger") + return true end --效果结束时调用一次 function Immune:OnEnd() - --log("Immune:OnEnd") + local immune if self.immuneType == 0 then --免疫负面状态(控制状态、减益状态和持续伤害状态) immune = immune0 @@ -56,8 +60,8 @@ end --只有当cover字段为true时触发,返回true则被新效果覆盖 function Immune:OnCover(newBuff) - --log("Immune:OnCover") + return true end -return Immune \ No newline at end of file +return Immune diff --git a/luafight/Modules/Battle/Logic/Buff/PropertyChange.lua b/luafight/Modules/Battle/Logic/Buff/PropertyChange.lua index 6f7173dfc..53bb6d600 100644 --- a/luafight/Modules/Battle/Logic/Buff/PropertyChange.lua +++ b/luafight/Modules/Battle/Logic/Buff/PropertyChange.lua @@ -2,7 +2,7 @@ PropertyChange = Buff:New() --初始化Buff,通过传入一些自定义参数控制成长相关的数值 function PropertyChange:SetData(...) - --log("PropertyChange:SetData") + self.propertyName, self.Value, self.changeType = ... @@ -19,11 +19,13 @@ function PropertyChange:SetData(...) elseif self.changeType == 4 then --乘减算(百分比属性减算) self.isDeBuff = true end + -- 刷新排序等级 + self.sort = 4 end --初始化后调用一次 function PropertyChange:OnStart() - --log("PropertyChange:OnStart") + if self.changeType == 1 then --加算 self.delta = self.target.data:AddValue(self.propertyName, self.Value) elseif self.changeType == 2 then --乘加算(百分比属性加算) @@ -37,13 +39,13 @@ end --间隔N帧触发,返回true时表示继续触发,返回false立刻触发OnEnd function PropertyChange:OnTrigger() - --log("PropertyChange:OnTrigger") + return true end --效果结束时调用一次 function PropertyChange:OnEnd() - --log("PropertyChange:OnEnd") + if self.changeType == 3 or self.changeType == 4 then self.target.data:AddValue(self.propertyName, self.delta) else @@ -53,7 +55,7 @@ end --只有当Cover字段为true时触发,返回true则被新效果覆盖 function PropertyChange:OnCover(newBuff) - --log("PropertyChange:OnCover") + local b = self.propertyName == newBuff.propertyName and self.changeType == newBuff.changeType if b then if newBuff.maxLayer == 0 then @@ -71,4 +73,4 @@ function PropertyChange:OnCover(newBuff) return b end -return PropertyChange \ No newline at end of file +return PropertyChange diff --git a/luafight/Modules/Battle/Logic/Buff/Shield.lua b/luafight/Modules/Battle/Logic/Buff/Shield.lua index 91b0a78fc..ff130f883 100644 --- a/luafight/Modules/Battle/Logic/Buff/Shield.lua +++ b/luafight/Modules/Battle/Logic/Buff/Shield.lua @@ -2,45 +2,109 @@ Shield = Buff:New() --初始化Buff,通过传入一些自定义参数控制成长相关的数值 function Shield:SetData(...) - --log("Shield:SetData") - self.shieldValue, --护盾值 + + self.shieldType, -- 护盾类型(1 固定减伤盾 2 百分比减伤盾 3 无敌盾) + self.shieldValue, -- 护盾值(固定减伤盾:减伤值 百分比减伤盾:减伤百分比 无敌盾:吸血率) self.dmgReboundFactor = ... --伤害反弹系数 self.damageSum = 0 --记录承受的伤害 self.isBuff = true self.atk=nil --每次扣除护盾时,记录破盾的对象 + + -- 刷新排序等级 + self.sort = 4 end --初始化后调用一次 function Shield:OnStart() - --log("Shield:OnStart") + self.target.shield:Add(self) end --间隔N帧触发,返回true时表示继续触发,返回false立刻触发OnEnd function Shield:OnTrigger() - --log("Shield:OnTrigger") + return true end +-- 计算护盾 +function Shield:CountShield(damage, atkRole) + self.atk = atkRole + local finalDamage = 0 + if self.shieldType == ShieldTypeName.NormalReduce then + + if damage < self.shieldValue then + self.shieldValue = self.shieldValue - damage + self.damageSum = self.damageSum + damage + else + self.damageSum = self.damageSum + self.shieldValue + finalDamage = damage - self.shieldValue + self.shieldValue = 0 + self.disperse = true + end + + elseif self.shieldType == ShieldTypeName.RateReduce then + local reduceDamage = math.floor(BattleUtil.ErrorCorrection(damage * self.shieldValue)) + finalDamage = damage - reduceDamage + self.damageSum = self.damageSum + reduceDamage + + elseif self.shieldType == ShieldTypeName.AllReduce then + finalDamage = 0 + --TODO 计算吸血 + local treatValue = math.floor(BattleUtil.ErrorCorrection(damage * self.shieldValue)) + BattleUtil.ApplyTreat(self.target, self.target, treatValue) + + end + + return finalDamage +end + +-- 改变护盾值(固定减伤盾:减伤值 百分比减伤盾:减伤百分比 无敌盾:吸血率) +function Shield:ChangeShieldValue(type, value) + -- 计算 + local finalValue = BattleUtil.ErrorCorrection(BattleUtil.CountValue(self.shieldValue, value, type)) + self.shieldValue = finalValue + -- 发送事件 + self.caster.Event:DispatchEvent(BattleEventName.ShildValueChange, self) +end + --效果结束时调用一次 function Shield:OnEnd() - --log("Shield:OnEnd") - for i = 1, self.target.shield.size do - if self.target.shield.buffer[i] == self then - local arr = BattleLogic.Query(function (r) return r.camp ~= self.target.camp end) - for j = 1, #arr do - BattleUtil.ApplyDamage(self.target, arr[j], math.floor(self.dmgReboundFactor * self.damageSum)) + + -- 计算反伤 + if self.shieldType == ShieldTypeName.NormalReduce then + for i = 1, self.target.shield.size do + if self.target.shield.buffer[i] == self then + local arr = BattleLogic.Query(function (r) return r.camp ~= self.target.camp end) + for j = 1, #arr do + BattleUtil.ApplyDamage(nil, self.target, arr[j], math.floor(self.dmgReboundFactor * self.damageSum)) + end + self.target.shield:Remove(i) + break + end + end + + elseif self.shieldType == ShieldTypeName.RateReduce then + for i = 1, self.target.shield.size do + if self.target.shield.buffer[i] == self then + self.target.shield:Remove(i) + break + end + end + + elseif self.shieldType == ShieldTypeName.AllReduce then + for i = 1, self.target.shield.size do + if self.target.shield.buffer[i] == self then + self.target.shield:Remove(i) + break end - self.target.shield:Remove(i) - break end end end --只有当cover字段为true时触发,返回true则被新效果覆盖 function Shield:OnCover(newBuff) - --log("Shield:OnCover") + return true end -return Shield \ No newline at end of file +return Shield diff --git a/luafight/Modules/Battle/Logic/Misc/BattleDefine.lua b/luafight/Modules/Battle/Logic/Misc/BattleDefine.lua index 9e689b82a..1cbcf3474 100644 --- a/luafight/Modules/Battle/Logic/Misc/BattleDefine.lua +++ b/luafight/Modules/Battle/Logic/Misc/BattleDefine.lua @@ -7,7 +7,6 @@ end BattleEventName = { BattleOrderChange = indexAdd(), BattleOrderEnd = indexAdd(), - BattleStageChange = indexAdd(), BattleEnd = indexAdd(), AddRole = indexAdd(), RemoveRole = indexAdd(), @@ -16,6 +15,7 @@ BattleEventName = { MpSub = indexAdd(), BattleRoleDead = indexAdd(), BattleSkillUsable = indexAdd(), + BattleRoundChange = indexAdd(), RoleBeDamaged = indexAdd(), RoleDamage = indexAdd(), @@ -37,9 +37,17 @@ BattleEventName = { RoleRevive = indexAdd(), RolePropertyChanged = indexAdd(), RoleCDChanged = indexAdd(), + RoleTurnStart = indexAdd(), -- 角色回合开始 + RoleTurnEnd = indexAdd(), -- 角色回合结束 + RoleRageGrow = indexAdd(), -- 角色怒气成长 + RoleRageCost = indexAdd(), -- 角色怒气消耗 + RoleControl = indexAdd(), -- 角色释放控制技能 + RoleBeControl = indexAdd(), -- 角色被控制 - SkillCast = indexAdd(), - SkillCastEnd = indexAdd(), + SkillCast = indexAdd(), -- 技能攻击前 + SkillCastEnd = indexAdd(), -- 技能攻击结束 + BeSkillCastEnd = indexAdd(), -- 被技能攻击结束 + SkillRandomBuff = indexAdd(), -- 技能控制时 PassiveTreating = indexAdd(), PassiveBeTreated = indexAdd(), @@ -58,6 +66,14 @@ BattleEventName = { BuffEnd = indexAdd(), BuffCountChange = indexAdd(), BuffCover = indexAdd(), + BuffRoundChange = indexAdd(), + BuffDurationChange = indexAdd(), + + ShildValueChange = indexAdd(), + + + + DebugStop = indexAdd(), } index = 0 @@ -87,6 +103,7 @@ RoleDataName = { LightDamageReduceFactor = indexAdd(), --光系伤害减免系数(%) DarkDamageReduceFactor = indexAdd(), --暗系伤害减免系数(%) ElementDamageBocusFactor = indexAdd(), --属性伤害加成系数(%) + InitRage = indexAdd(), --初始怒气值 } BuffName = { @@ -100,5 +117,28 @@ BuffName = { Immune = "Immune", } +DotType = { + All = 0, + Burn = 1, + Poison = 2, + Blooding = 3, +} +BattleSkillType = { + Monster = 0, + Normal = 1, + Special = 2, +} +CountTypeName = { + Add = 1, + AddPencent = 2, + Sub = 2, + SubPencent = 2, +} + +ShieldTypeName = { + NormalReduce = 1, -- 固定值减伤 + RateReduce = 2, -- 百分比减伤 + AllReduce = 3, -- 无敌护盾 +} \ No newline at end of file diff --git a/luafight/Modules/Battle/Logic/Misc/BattleDictionary.lua b/luafight/Modules/Battle/Logic/Misc/BattleDictionary.lua index 4d0cb70f0..b350bd4ec 100644 --- a/luafight/Modules/Battle/Logic/Misc/BattleDictionary.lua +++ b/luafight/Modules/Battle/Logic/Misc/BattleDictionary.lua @@ -35,6 +35,10 @@ function BattleDictionary:Remove(k) end end +function BattleDictionary:Get(k) + return self.kvList[k] +end + function BattleDictionary:Set(k,v) self:Remove(k) self:Add(k,v) @@ -54,7 +58,9 @@ end function BattleDictionary:Foreach(func) for i = 1, self.size do if func then - func(self.kList[i], self.vList[i]) + if func(self.kList[i], self.vList[i]) == "break" then + break + end end end end diff --git a/luafight/Modules/Battle/Logic/Misc/BattleList.lua b/luafight/Modules/Battle/Logic/Misc/BattleList.lua index 0e512ea12..d6f9a6fe8 100644 --- a/luafight/Modules/Battle/Logic/Misc/BattleList.lua +++ b/luafight/Modules/Battle/Logic/Misc/BattleList.lua @@ -27,4 +27,4 @@ end function BattleList:Count() return self.size -end \ No newline at end of file +end diff --git a/luafight/Modules/Battle/Logic/Misc/BattleUtil.lua b/luafight/Modules/Battle/Logic/Misc/BattleUtil.lua index 6b356459a..525769505 100644 --- a/luafight/Modules/Battle/Logic/Misc/BattleUtil.lua +++ b/luafight/Modules/Battle/Logic/Misc/BattleUtil.lua @@ -3,7 +3,6 @@ BattleUtil = {} local floor = math.floor local max = math.max local min = math.min -local posDic = {3,2,4,1,5} --local Random = Random --local RoleDataName = RoleDataName --local BattleEventName = BattleEventName @@ -34,12 +33,55 @@ function BattleUtil.FP_Mul(...) return f end +-- 选择前排 +function BattleUtil.ChooseFRow(arr) + local tempArr = {} + for _, r in ipairs(arr) do + if r.position <= 3 and not r.isDead then + table.insert(tempArr, r) + end + end + return tempArr +end +-- 选择后排 +function BattleUtil.ChooseBRow(arr) + local tempArr = {} + for _, r in ipairs(arr) do + if r.position > 3 and not r.isDead then + table.insert(tempArr, r) + end + end + return tempArr +end +-- 选择一列(col == 0 表示第三列哦) +function BattleUtil.ChooseCol(arr, col) + local tempArr = {} + for _, role in ipairs(arr) do + if role.position % 3 == col then + table.insert(tempArr, role) + end + end + return tempArr +end +-- 根据属性排序 +function BattleUtil.SortByProp(arr, prop, sort) + BattleUtil.Sort(arr, function(a, b) + local r1 = a:GetRoleData(prop) + local r2 = b:GetRoleData(prop) + if sort == 1 then return r1 > r2 else return r1 < r2 end + end) + return arr +end + + function BattleUtil.ChooseTarget(role, chooseId) - local chooseType = floor(chooseId / 10000) % 10 - local chooseWeight = floor(chooseId / 100) % 10 + local chooseType = floor(chooseId / 100000) % 10 + local chooseLimit = floor(chooseId / 10000) % 10 + local chooseWeight = floor(chooseId / 100) % 100 local sort = floor(chooseId / 10) % 10 local num = chooseId % 10 local arr + -- 选择类型 if chooseType == 1 then arr = BattleLogic.Query(function (r) return r.camp == role.camp end) elseif chooseType == 2 then @@ -68,62 +110,68 @@ function BattleUtil.ChooseTarget(role, chooseId) arr = BattleLogic.Query() end + --选择范围 + if chooseLimit == 0 then --选择全体不做任何操作 + + elseif chooseLimit == 1 then-- 前排 + local tempArr = BattleUtil.ChooseFRow(arr) + if #tempArr == 0 then -- 没有选择后排 + tempArr = BattleUtil.ChooseBRow(arr) + end + arr = tempArr + elseif chooseLimit == 2 then-- 后排 + local tempArr = BattleUtil.ChooseBRow(arr) + if #tempArr == 0 then -- 没有选择前排 + tempArr = BattleUtil.ChooseFRow(arr) + end + arr = tempArr + elseif chooseLimit == 3 then-- 对列 + local myCol = role.position % 3 + local tempArr = BattleUtil.ChooseCol(arr, myCol) + if #tempArr == 0 then -- 对列没有人,按顺序找到有人得列 + for i = 1, 3 do + local col = i % 3 -- 0 表示第三列嗷 + tempArr = BattleUtil.ChooseCol(arr, col) + if #tempArr ~= 0 then + break + end + end + end + arr = tempArr + end + + -- 选择条件 if chooseWeight == 0 or role.ctrl_blind then --致盲时排序无效 BattleUtil.RandomList(arr) - elseif chooseWeight == 1 then - BattleUtil.Sort(arr, function(a, b) - local r1 = a:GetRoleData(RoleDataName.Hp) - local r2 = b:GetRoleData(RoleDataName.Hp) - if sort == 1 then return r1 > r2 else return r1 < r2 end - end) - elseif chooseWeight == 2 then + elseif chooseWeight == 1 then -- 生命值 + BattleUtil.SortByProp(arr, RoleDataName.Hp, sort) + elseif chooseWeight == 2 then -- 血量百分比 BattleUtil.Sort(arr, function(a, b) local r1 = a:GetRoleData(RoleDataName.Hp) / a:GetRoleData(RoleDataName.MaxHp) local r2 = b:GetRoleData(RoleDataName.Hp) / b:GetRoleData(RoleDataName.MaxHp) if sort == 1 then return r1 > r2 else return r1 < r2 end end) - elseif chooseWeight == 3 then - BattleUtil.Sort(arr, function(a, b) - local r1 = a:GetRoleData(RoleDataName.Attack) - local r2 = b:GetRoleData(RoleDataName.Attack) - if sort == 1 then return r1 > r2 else return r1 < r2 end - end) - elseif chooseWeight == 4 then - BattleUtil.Sort(arr, function(a, b) - local r1 = a:GetRoleData(RoleDataName.PhysicalDefence) - local r2 = b:GetRoleData(RoleDataName.PhysicalDefence) - if sort == 1 then return r1 > r2 else return r1 < r2 end - end) - elseif chooseWeight == 5 then - BattleUtil.Sort(arr, function(a, b) - local r1 = a:GetRoleData(RoleDataName.PhysicalDefence) - local r2 = b:GetRoleData(RoleDataName.PhysicalDefence) - if sort == 1 then return r1 > r2 else return r1 < r2 end - end) - elseif chooseWeight == 6 then - BattleUtil.Sort(arr, function(a, b) - local r1 = a:GetRoleData(RoleDataName.MagicDefence) - local r2 = b:GetRoleData(RoleDataName.MagicDefence) - if sort == 1 then return r1 > r2 else return r1 < r2 end - end) - elseif chooseWeight == 7 then - BattleUtil.Sort(arr, function(a, b) - local r1 = a:GetSkillCD() - local r2 = b:GetSkillCD() - if sort == 1 then return r1 > r2 else return r1 < r2 end - end) - elseif chooseWeight == 8 then + elseif chooseWeight == 3 then -- 攻击力 + BattleUtil.SortByProp(arr, RoleDataName.Attack, sort) + elseif chooseWeight == 4 then -- 防御 + BattleUtil.SortByProp(arr, RoleDataName.PhysicalDefence, sort) + elseif chooseWeight == 5 then -- 护甲 + BattleUtil.SortByProp(arr, RoleDataName.PhysicalDefence, sort) + elseif chooseWeight == 6 then -- 魔抗 + BattleUtil.SortByProp(arr, RoleDataName.MagicDefence, sort) + elseif chooseWeight == 7 then -- 对位及其相邻目标 arr = BattleLogic.GetNeighbor(role, chooseType) - elseif chooseWeight == 9 then - BattleUtil.Sort(arr, function(a, b) - local r1 = math.abs(posDic[role.position] - posDic[a.position]) * 10 + a.position - local r2 = math.abs(posDic[role.position] - posDic[b.position]) * 10 + b.position - if sort == 1 then return r1 > r2 else return r1 < r2 end - end) + -- elseif chooseWeight == 9 then -- 展位距离 + -- BattleUtil.Sort(arr, function(a, b) + -- local r1 = math.abs(role.position - a.position) * 10 + a.position + -- local r2 = math.abs(role.position - b.position) * 10 + b.position + -- if sort == 1 then return r1 > r2 else return r1 < r2 end + -- end) end return arr end + function BattleUtil.CreateBuffId(skill, index) local id = 0 if skill.preAI then --主动技能生成buff @@ -134,6 +182,7 @@ function BattleUtil.CreateBuffId(skill, index) return id end +-- 计算命中率 function BattleUtil.CalHit(atkRole, defRole) --命中率 = clamp(自身命中率-敌方闪避率,0,1) local hit = atkRole:GetRoleData(RoleDataName.Hit) @@ -149,25 +198,28 @@ function BattleUtil.CalHit(atkRole, defRole) return bHit end +-- 计算护盾 function BattleUtil.CalShield(atkRole, defRole, damage) for i=1, defRole.shield.size do local buff = defRole.shield.buffer[i] - buff.atk = atkRole - if damage < buff.shieldValue then - buff.shieldValue = buff.shieldValue - damage - buff.damageSum = buff.damageSum + damage - return 0 - else - buff.damageSum = buff.damageSum + buff.shieldValue - damage = damage - buff.shieldValue - buff.shieldValue = 0 - buff.disperse = true - end + damage = buff:CountShield(damage, atkRole) + -- buff.atk = atkRole + -- if damage < buff.shieldValue then + -- buff.shieldValue = buff.shieldValue - damage + -- buff.damageSum = buff.damageSum + damage + -- return 0 + -- else + -- buff.damageSum = buff.damageSum + buff.shieldValue + -- damage = damage - buff.shieldValue + -- buff.shieldValue = 0 + -- buff.disperse = true + -- end end return damage end -function BattleUtil.ApplyDamage(atkRole, defRole, damage, bCrit, damageType, isDot) +-- 计算真实伤害 +function BattleUtil.ApplyDamage(skill, atkRole, defRole, damage, bCrit, damageType, isDot) bCrit = bCrit or false damageType = damageType or 0 isDot = isDot or false @@ -187,6 +239,9 @@ function BattleUtil.ApplyDamage(atkRole, defRole, damage, bCrit, damageType, isD atkRole.Event:DispatchEvent(BattleEventName.PassiveDamaging, damagingFunc, defRole, damage) defRole.Event:DispatchEvent(BattleEventName.PassiveBeDamaging, damagingFunc, atkRole, damage) + -- 计算护盾减伤 + damage = BattleUtil.CalShield(atkRole, defRole, damage) + if damage > 0 then local finalDmg = defRole.data:SubValue(RoleDataName.Hp, damage) if finalDmg > 0 then @@ -198,10 +253,10 @@ function BattleUtil.ApplyDamage(atkRole, defRole, damage, bCrit, damageType, isD BattleLogic.Event:DispatchEvent(BattleEventName.BattleRoleDead, defRole, atkRole) end - atkRole.Event:DispatchEvent(BattleEventName.RoleDamage, defRole, damage, bCrit, finalDmg, damageType, isDot) - defRole.Event:DispatchEvent(BattleEventName.RoleBeDamaged, atkRole, damage, bCrit, finalDmg, damageType, isDot) - BattleLogic.Event:DispatchEvent(BattleEventName.RoleDamage, atkRole, defRole, damage, bCrit, finalDmg, damageType, isDot) - BattleLogic.Event:DispatchEvent(BattleEventName.RoleBeDamaged, defRole, atkRole, damage, bCrit, finalDmg, damageType, isDot) + atkRole.Event:DispatchEvent(BattleEventName.RoleDamage, defRole, damage, bCrit, finalDmg, damageType, isDot, skill) + defRole.Event:DispatchEvent(BattleEventName.RoleBeDamaged, atkRole, damage, bCrit, finalDmg, damageType, isDot, skill) + BattleLogic.Event:DispatchEvent(BattleEventName.RoleDamage, atkRole, defRole, damage, bCrit, finalDmg, damageType, isDot, skill) + BattleLogic.Event:DispatchEvent(BattleEventName.RoleBeDamaged, defRole, atkRole, damage, bCrit, finalDmg, damageType, isDot, skill) if bCrit then atkRole.Event:DispatchEvent(BattleEventName.RoleCrit, defRole, damage, bCrit, finalDmg, damageType) defRole.Event:DispatchEvent(BattleEventName.RoleBeCrit, atkRole, damage, bCrit, finalDmg, damageType) @@ -218,11 +273,13 @@ function BattleUtil.ApplyDamage(atkRole, defRole, damage, bCrit, damageType, isD end --执行完整的命中,伤害,暴击计算,返回命中,暴击 ---atkRole攻击者 defRole受击者 damageType伤害类型 baseFactor伤害系数 ignoreDef无视防御参数 isDot是否是dot -function BattleUtil.CalDamage(atkRole, defRole, damageType, baseFactor, ignoreDef, isDot) +--skill造成伤害的技能 atkRole攻击者 defRole受击者 damageType伤害类型 baseFactor伤害系数 ignoreDef无视防御参数 isDot是否是dot +function BattleUtil.CalDamage(skill, atkRole, defRole, damageType, baseFactor, ignoreDef, isDot) if atkRole.isTeam and not defRole.isDead then --如果是队伍技能,计算真实伤害,则damageType为伤害值 - return BattleUtil.ApplyDamage(atkRole, defRole, damageType), false + return BattleUtil.ApplyDamage(skill, atkRole, defRole, damageType), false end + + -- 计算技能额外伤害系数加成 baseFactor = baseFactor or 1 local factorFunc = function(exFactor) baseFactor = baseFactor + exFactor end atkRole.Event:DispatchEvent(BattleEventName.RoleDamageBefore, defRole, factorFunc, damageType) @@ -231,27 +288,35 @@ function BattleUtil.CalDamage(atkRole, defRole, damageType, baseFactor, ignoreDe local bCrit = false local baseDamage - ignoreDef = 1 - (ignoreDef or 0) + -- 是否暴击: 暴击率 = 自身暴击率 - 对方抗暴率 bCrit = Random.Range01() <= clamp(atkRole:GetRoleData(RoleDataName.Crit)-defRole:GetRoleData(RoleDataName.Tenacity), 0, 1) - bCrit = bCrit or defRole.isFlagCrit == true + bCrit = bCrit or defRole.isFlagCrit == true -- 必定暴击 + -- 防御(据伤害类型决定) local defence = 0 if damageType == 1 then --1 物理 2 魔法 defence = defRole:GetRoleData(RoleDataName.PhysicalDefence) else defence = defRole:GetRoleData(RoleDataName.MagicDefence) end + -- 攻击力 local attack = atkRole:GetRoleData(RoleDataName.Attack) + -- 无视防御系数 + ignoreDef = 1 - (ignoreDef or 0) + --计算暴击 if bCrit then + -- 计算额外暴击伤害 local critDamageFactor = atkRole:GetRoleData(RoleDataName.CritDamageFactor) - --加入被动效果 + --加入被动效果 触发暴击被动 local critFunc = function(critEx) critDamageFactor = critEx end atkRole.Event:DispatchEvent(BattleEventName.PassiveCriting, critFunc) + --计算基础伤害:伤害 = 攻击力 * 暴击伤害系数 - 防御 *(1 - 无视防御系数) baseDamage = max(BattleUtil.FP_Mul(attack, critDamageFactor) - BattleUtil.FP_Mul(0.5, defence, ignoreDef), 0) else baseDamage = max(attack - BattleUtil.FP_Mul(0.5, defence, ignoreDef), 0) end + -- 自身属性对应对方的属性伤害减免系数 local elementDamageReduceFactor = RoleDataName.FireDamageReduceFactor if atkRole.element == 1 then elementDamageReduceFactor = RoleDataName.FireDamageReduceFactor @@ -288,14 +353,14 @@ function BattleUtil.CalDamage(atkRole, defRole, damageType, baseFactor, ignoreDe baseDamage = floor(max(baseDamage, BattleUtil.FP_Mul(0.1, attack))) end + -- 计算额外伤害数值加成 local damageFunc = function(damage) baseDamage = damage end atkRole.Event:DispatchEvent(BattleEventName.RoleDamageAfter, defRole, damageFunc, baseDamage) defRole.Event:DispatchEvent(BattleEventName.RoleBeDamagedAfter, atkRole, damageFunc, baseDamage) - baseDamage = BattleUtil.CalShield(atkRole, defRole, baseDamage) local finalDmg = 0 --计算实际造成的扣血 if not defRole.isDead then - finalDmg = BattleUtil.ApplyDamage(atkRole, defRole, baseDamage, bCrit, damageType, isDot) + finalDmg = BattleUtil.ApplyDamage(skill, atkRole, defRole, baseDamage, bCrit, damageType, isDot) end return finalDmg, bCrit end @@ -321,7 +386,6 @@ function BattleUtil.ApplyTreat(castRole, targetRole, value, baseFactor) local treatingFunc = function(exFactor) baseTreat = floor(baseTreat * (exFactor + 1) + 0.5) end castRole.Event:DispatchEvent(BattleEventName.PassiveTreating, treatingFunc, targetRole) targetRole.Event:DispatchEvent(BattleEventName.PassiveBeTreated, treatingFunc, castRole) - local treat = min(baseTreat, maxHp - hp) if treat > 0 then targetRole.data:AddValue(RoleDataName.Hp, treat) @@ -383,4 +447,19 @@ function BattleUtil.GetHPPencent(role) return role:GetRoleData(RoleDataName.Hp) / role:GetRoleData(RoleDataName.MaxHp) end - +-- 计算数值 +function BattleUtil.CountValue(v1, v2, ct) + local v = v1 + if ct == 1 then --加算 + v = v + v2 + elseif ct == 2 then --乘加算(百分比属性加算) + v = v * (1 + v2) + elseif ct == 3 then --减算 + v = v - v2 + elseif ct == 4 then --乘减算(百分比属性减算) + v = v * (1 - v2) + end + -- 做一个正确性检测 + -- v = BattleUtil.ErrorCorrection(v) + return v +end \ No newline at end of file diff --git a/luafight/Modules/Battle/Logic/RoleLogic.lua b/luafight/Modules/Battle/Logic/RoleLogic.lua index 645667d62..1f39e3007 100644 --- a/luafight/Modules/Battle/Logic/RoleLogic.lua +++ b/luafight/Modules/Battle/Logic/RoleLogic.lua @@ -8,34 +8,6 @@ local floor = math.floor local max = math.max local min = math.min -local aiList = { - [0] = function(skill, superSkill) - local stage = BattleLogic.CurStage() - if stage == 1 then - return true - elseif stage == 2 then --中期绝技释放率=技能基础概率+施法率+后期施法率-1 - return Random.Range01() > superSkill.randomInStage2 + superSkill.owner:GetRoleData(RoleDataName.Hit) + superSkill.owner:GetRoleData(RoleDataName.Dodge) - 1 - elseif stage == 3 then--后期绝技释放率=后期施法率+施法率 - return Random.Range01() > superSkill.owner:GetRoleData(RoleDataName.Hit) + superSkill.owner:GetRoleData(RoleDataName.Dodge) - end - end, - [1] = function(skill, superSkill) --只放点技 - return true - end, - [2] = function(skill, superSkill) --只放滑技 - return false - end, - [3] = function(skill, superSkill) --上滑技初始概率为5%,每次释放点击技后,增加上滑技释放概率20%,释放上滑技后,上滑技释放概率回到5%。 - local b = Random.Range01() > (0.05 + 0.2 * skill.owner.aiTempCount) - if b then - skill.owner.aiTempCount = skill.owner.aiTempCount + 1 - else - skill.owner.aiTempCount = 0 - end - return b - end, -} - local skillPool = BattleObjectPool.New(function () return Skill:New() end) @@ -46,7 +18,7 @@ function RoleLogic.New() exCalDmgList=BattleList.New(), proTranList=BattleList.New(), buffFilter=BattleList.New(), - Event=BattleEvent:New(),passiveList=0,isDead=false,IsDebug=false,enable=false} + Event=BattleEvent:New(),passiveList={},isDead=false,IsDebug=false,enable=false} setmetatable(instance, RoleLogic) return instance end @@ -69,7 +41,6 @@ function RoleLogic:Init(uid, data, position) self.Event:ClearEvent() - self.passiveList = {} if data.skill and #data.skill > 0 then self.skill = skillPool:Get() self.skill:Init(self, data.skill, 1) @@ -83,6 +54,18 @@ function RoleLogic:Init(uid, data, position) local time = self:GetRoleData(RoleDataName.Speed)/(20*(self:GetRoleData(RoleDataName.Level)+10)) self.spPass = floor( BattleUtil.ErrorCorrection(time) * BattleLogic.GameFrameRate) + -- 怒气值 + self.Rage = 4 -- 当前怒气值 + self.RageGrow = 2 -- 普通技能怒气成长 + self.SuperSkillRage = 4 -- 技能需要释放的怒气值 + self.NoRageRate = 0 -- 不消耗怒气值的概率 + + -- 技能释放列表 技能改为按列表顺序释放 方便添加追加技能 + self.SkillList = {} + self.CurSkillCastIndex = 0 + self.SkillCastDoneFunc = nil + -- + self.passiveList = {} if data.passivity and #data.passivity > 0 then for i = 1, #data.passivity do local v = data.passivity[i] @@ -92,58 +75,53 @@ function RoleLogic:Init(uid, data, position) args[j-1] = v[j] end BattleUtil.Passivity[id](self, args) + -- 加入被动列表 + table.insert(self.passiveList, {id, args}) end end + self.aiOrder = data.ai self.aiIndex = 1 self.aiTempCount = 0 self.IsDebug = false - self.enable = true --眩晕 - self.ctrl_slient = false --沉默 - self.lockTarget = nil --嘲讽 - self.ctrl_noheal = false --禁疗 - self.ctrl_blind = false --致盲 - - if self.skill and not self.superSkill then - self.updateFunc = function() - if self:CanCastSkill() then - self.skill:Cast() - else - self.sp = self.sp + 1 - end - end - elseif not self.skill and self.superSkill then - self.updateFunc = function() - if self:CanCastSkill() and not self.ctrl_slient then - self.superSkill:Cast() - else - self.sp = self.sp + 1 - end - end - elseif self.skill and self.superSkill then - self.updateFunc = function() - if self:CanCastSkill() then - self:ExecuteAI(self.skill, self.superSkill) - else - self.sp = self.sp + 1 - end - end - else - self.updateFunc = function() end - end + self.enable = true --眩晕 + self.ctrl_slient = false --沉默 + self.lockTarget = nil --嘲讽 + self.ctrl_noheal = false --禁疗 + self.ctrl_blind = false --致盲 + self.ctrl_palsy = false --麻痹 end +-- 添加一个被动技能 +function RoleLogic:AddPassive(id, args, isCover) + --判断是否可以叠加 + if not isCover then + -- 不可以叠加, 如果重复则不再加入 + for _, pst in ipairs(self.passiveList) do + if pst[1] == id then + return + end + end + end + -- 被动生效 + BattleUtil.Passivity[id](self, args) + -- 加入被动列表 + table.insert(self.passiveList, {id, args}) +end +-- function RoleLogic:CanCastSkill() return self.sp >= self.spPass and not self.IsDebug and BattleLogic.GetSkillUsable(self.camp) end +-- 废弃的方法 function RoleLogic:GetSkillCD() return max(self.spPass - self.sp, 0) end +-- 废弃的方法 function RoleLogic:AddSkillCD(value, type) self.Event:DispatchEvent(BattleEventName.RoleCDChanged) if value == 0 then --为0直接清CD @@ -171,6 +149,22 @@ function RoleLogic:AddSkillCD(value, type) end end +-- 改变怒气值 +function RoleLogic:AddRage(value, type) + local delta = 0 + if type == 1 then --加算 + delta = value + elseif type == 2 then --乘加算(百分比属性加算) + delta = floor(value * self.SuperSkillRage) + elseif type == 3 then --减算 + delta = -value + elseif type == 4 then --乘减算(百分比属性减算) + delta = -floor(value * self.SuperSkillRage) + end + --怒气值不可为负值 + self.Rage = max(self.Rage + delta, 0) +end + function RoleLogic:GetRoleData(property) local tarPro = self.data:GetData(property) local item @@ -231,36 +225,141 @@ function RoleLogic:Dispose() end end -function RoleLogic:ExecuteAI(skill, superSkill) - local ai - if self.aiOrder and self.aiOrder[self.aiIndex] then - ai = aiList[self.aiOrder[self.aiIndex]] + +-- 判断角色是否可以释放技能 +function RoleLogic:IsAvailable() + -- 眩晕 -- 麻痹 -- 死亡 + if not self.enable or self.ctrl_palsy or self.isDead then + return false + end + return true +end + +-- 检测自身的技能释放 +function RoleLogic:CheckCastSkill() + -- 角色不可用直接结束技能释放 + if not self:IsAvailable() then + self:SkillCastDone() + return + end + -- 没有要释放的技能了结束技能释放 + if self.CurSkillCastIndex >= #self.SkillList then + self:SkillCastDone() + return + end + -- 拿到下一个技能 + self.CurSkillCastIndex = self.CurSkillCastIndex + 1 + local skill = self.SkillList[self.CurSkillCastIndex] + -- 技能释放回调(递归检测下一个技能) + local _CheckNext = function () + self:CheckCastSkill() + end + -- 释放普通攻击 + if skill.type == BattleSkillType.Normal and self.skill then + -- 释放普技 + self.skill:Cast(_CheckNext, skill.targets, skill.isAdd) + -- 后成长怒气 + if skill.isRage then + -- 检测被动技能对怒气成长的影响 + local grow = self.RageGrow + local _RageGrowPassivity = function(finalGrow) + grow = finalGrow + end + self.Event:DispatchEvent(BattleEventName.RoleRageGrow, grow, _RageGrowPassivity) + -- + self.Rage = self.Rage + grow + end + -- 释放大技能 + elseif skill.type == BattleSkillType.Special and self.superSkill then + -- 先消耗怒气 + if skill.isRage then + -- 检测被动技能对怒气消耗的影响 + local costRage = self.SuperSkillRage + local noRageRate = self.NoRageRate + local _RageCostPassivity = function(finalRate, finalCost) + noRageRate = finalRate + costRage = finalCost + end + self.Event:DispatchEvent(BattleEventName.RoleRageCost, costRage, noRageRate, _RageCostPassivity) + -- 计算消耗怒气的概率,并消耗怒气 + local costRate = 1 - noRageRate + costRate = costRate > 1 and 1 or costRate + costRate = costRate < 0 and 0 or costRate + BattleUtil.RandomAction(costRate, function() + self.Rage = self.Rage - costRage + end) + end + -- 释放绝技 + self.superSkill:Cast(_CheckNext, skill.targets, skill.isAdd) + -- 没有符合条件的技能直接进入下一个技能检测 else - ai = aiList[0] + _CheckNext() end - if self.ctrl_slient then --沉默不能放上滑技 - skill:Cast() - else - if ai(skill, superSkill) then - skill:Cast() - else - superSkill:Cast() - end - end +end - if self.aiOrder then - if self.aiIndex == #self.aiOrder then - self.aiIndex = 1 - else - self.aiIndex = self.aiIndex + 1 - end +-- 加入一个技能 +-- type 加入的技能类型 +-- targets 指定目标 +-- isAdd 是否是追加技能 +-- isRage 是否正常操作怒气值 +function RoleLogic:AddSkill(type, isRage, isAdd, targets) + local skill = { + type = type, + isRage = isRage, + isAdd = isAdd, + targets = targets, + } + table.insert(self.SkillList, skill) +end + + + +-- 正常触发技能 +function RoleLogic:CastSkill(func) + self.SkillList = {} + self.CurSkillCastIndex = 0 + self.SkillCastDoneFunc = func + -- 沉默 怒气值不足 没有绝技 释放普通技能 + if self.ctrl_slient or self.Rage < self.SuperSkillRage or not self.superSkill then + self:AddSkill(BattleSkillType.Normal, true, false, nil) + self:CheckCastSkill() + + return end + -- 释放大技能 消耗怒气值 + self:AddSkill(BattleSkillType.Special, true, false, nil) + self:CheckCastSkill() + +end + +-- 强制释放技能,追加技能时使用 +-- type 追加的技能类型 1=普技 2=特殊技 +-- targets 追加技能的目标 nil则自动选择目标 +-- func 追加技能释放完成回调 +function RoleLogic:ForceCastSkill(type, targets, func) + if type == 1 and self.skill then + self.skill:Cast(func) + elseif type == 2 and self.superSkill then + self.superSkill:Cast(func) + else + if func then func() end + end +end + + +-- 技能释放完毕 +function RoleLogic:SkillCastDone() + BattleLogic.WaitForTrigger(1, function() + if self.SkillCastDoneFunc then + self.SkillCastDoneFunc() + end + end) end function RoleLogic:Update() if not self.enable then return end - self.updateFunc() -end \ No newline at end of file + -- self.updateFunc() +end diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java index c28e249f6..3187087d4 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java @@ -278,11 +278,11 @@ public class FightDataUtil { } SSkillLogicVo sSkillLogicVo = SSkillLogicConfig.getsSkillLogicVo(Integer.valueOf(skillId)); if (sSkillLogicVo != null && sSkillLogicVo.getSkillTargetVoList().size()>0) { - float cd = sSkillLogicVo.getCd(); - if(args!=null&&args.length>0){ - cd+=Integer.parseInt(args[0]); - } - skill.rawset(1, LuaValue.valueOf(cd)); +// float cd = sSkillLogicVo.getCd(); +// if(args!=null&&args.length>0){ +// cd+=Integer.parseInt(args[0]); +// } + skill.rawset(1, LuaValue.valueOf(skillId)); List effectList = getEffect(sSkillLogicVo); int size = effectList.size(); if (size > 0) { @@ -298,8 +298,11 @@ public class FightDataUtil { List effectList = new ArrayList<>(); for (SkillTargetVo skillTargetVos : sSkillLogicVo.getSkillTargetVoList()) { LuaValue effect = new LuaTable(); + int skillDisplay =sSkillLogicVo.getSkillDisplay(); + SCombatControl sCombatControl = STableManager.getConfig(SCombatControl.class).get(skillDisplay); + int KeyFrame = sCombatControl.getKeyFrame(); effect.rawset(1, LuaValue.valueOf(skillTargetVos.getTargetId())); - effect.rawset(2, LuaValue.valueOf(skillTargetVos.getContinuedTime())); + effect.rawset(2, LuaValue.valueOf(KeyFrame)); List effectValueList = getEffectArgs(skillTargetVos.getEffectVale()); int size = effectValueList.size(); if (size > 0) { diff --git a/tablemanager/src/main/java/config/SCombatControl.java b/tablemanager/src/main/java/config/SCombatControl.java new file mode 100644 index 000000000..b9c6ef3e2 --- /dev/null +++ b/tablemanager/src/main/java/config/SCombatControl.java @@ -0,0 +1,31 @@ +package config; + +import manager.STableManager; +import manager.Table; + +import java.util.Map; + +@Table(name ="CombatControl") +public class SCombatControl implements BaseConfig { + + private int id; + + private int keyFrame; + + + @Override + public void init() throws Exception { + + } + + + public int getId() { + return id; + } + + public int getKeyFrame() { + return keyFrame; + } + + +} \ No newline at end of file diff --git a/tablemanager/src/main/java/config/SSkillLogicConfig.java b/tablemanager/src/main/java/config/SSkillLogicConfig.java index 568f63ef7..2d9a3e9d7 100644 --- a/tablemanager/src/main/java/config/SSkillLogicConfig.java +++ b/tablemanager/src/main/java/config/SSkillLogicConfig.java @@ -24,6 +24,7 @@ public class SSkillLogicConfig implements BaseConfig { private float cd; + private int skillDisplay; @Override public void init() throws Exception { @@ -65,6 +66,9 @@ public class SSkillLogicConfig implements BaseConfig { return cd; } + public int getSkillDisplay() { + return skillDisplay; + } private SSkillLogicVo getSSkillLogicVo(SSkillLogicConfig sSkillLogicConfig) { float[][] targets = sSkillLogicConfig.getTarget(); @@ -76,14 +80,13 @@ public class SSkillLogicConfig implements BaseConfig { for (int i = 0; i < targets.length ; i++){ SkillTargetVo skillTargetVo = new SkillTargetVo(); skillTargetVo.setTargetId((int) targets[i][0]); - skillTargetVo.setContinuedTime(targets[i][1]); skillTargetVo.setEffectVale(getEffectVal(effect[i],effectValue,index)); index = index + effect[i].length; skillTargetVos.add(skillTargetVo); } SSkillLogicVo sSkillLogicVo = new SSkillLogicVo(); sSkillLogicVo.setSkillId(sSkillLogicConfig.getId()); - sSkillLogicVo.setCd(sSkillLogicConfig.getCd()); + sSkillLogicVo.setSkillDisplay(sSkillLogicConfig.getSkillDisplay()); sSkillLogicVo.setSkillTargetVoList(skillTargetVos); return sSkillLogicVo; } diff --git a/tablemanager/src/main/java/config/SSkillLogicVo.java b/tablemanager/src/main/java/config/SSkillLogicVo.java index 2cf744165..55f610e25 100644 --- a/tablemanager/src/main/java/config/SSkillLogicVo.java +++ b/tablemanager/src/main/java/config/SSkillLogicVo.java @@ -6,7 +6,7 @@ public class SSkillLogicVo{ private int skillId; - private float cd; + private int skillDisplay; private List skillTargetVoList; @@ -18,12 +18,12 @@ public class SSkillLogicVo{ this.skillId = skillId; } - public float getCd() { - return cd; + public int getSkillDisplay() { + return skillDisplay; } - public void setCd(float cd) { - this.cd = cd; + public void setSkillDisplay(int skillDisplay) { + this.skillDisplay = skillDisplay; } public List getSkillTargetVoList() { diff --git a/tablemanager/src/main/java/config/SkillTargetVo.java b/tablemanager/src/main/java/config/SkillTargetVo.java index 4ddbc2087..9814193c9 100644 --- a/tablemanager/src/main/java/config/SkillTargetVo.java +++ b/tablemanager/src/main/java/config/SkillTargetVo.java @@ -5,7 +5,6 @@ public class SkillTargetVo { private int targetId; - private float continuedTime; //技能效果持续时间 private float[][] effectVale; //技能效果 @@ -18,13 +17,6 @@ public class SkillTargetVo { this.targetId = targetId; } - public float getContinuedTime() { - return continuedTime; - } - - public void setContinuedTime(float continuedTime) { - this.continuedTime = continuedTime; - } public float[][] getEffectVale() { return effectVale;