diff --git a/lua/app/module/battle/battle_const.lua b/lua/app/module/battle/battle_const.lua index f768a862..2a8b1613 100644 --- a/lua/app/module/battle/battle_const.lua +++ b/lua/app/module/battle/battle_const.lua @@ -193,6 +193,7 @@ local BUFF_NAME = { CURED_ADD = "cured_add", ADD_SKILL = "add_skill", SKILL_FIRE_TIMES = "skill_fire_times", + SHIELD_REBOUND_200 = "shield_rebound_200", } BattleConst.BUFF_NAME = BUFF_NAME @@ -227,6 +228,7 @@ local ATTR_NAME = { CRIT_TIME = "crit_time", EXP_TIME = "exp_time", CURE_ADDITION = "cure_addition", + SHIELD_REBOUND = "shield_rebound", } BattleConst.ATTR_NAME = ATTR_NAME diff --git a/lua/app/module/battle/component/battle_unit_comp.lua b/lua/app/module/battle/component/battle_unit_comp.lua index a0c6d456..4e9aa8dd 100644 --- a/lua/app/module/battle/component/battle_unit_comp.lua +++ b/lua/app/module/battle/component/battle_unit_comp.lua @@ -366,6 +366,17 @@ function BattleUnitComp:addShield(num, buffEffect) self.team:addShield(buffEffect) end +function BattleUnitComp:removeShield(buffEffect) + if buffEffect == nil then + return + end + if buffEffect.result > 0 then + self.unitEntity:addShield(-buffEffect.result) + buffEffect.result = 0 + end + self.team:removeShield(buffEffect) +end + function BattleUnitComp:changeState(state) if self.currState == state and not self:repeatCurrState() then return false diff --git a/lua/app/module/battle/helper/battle_buff_handle.lua b/lua/app/module/battle/helper/battle_buff_handle.lua index 29eb3d84..c68b4451 100644 --- a/lua/app/module/battle/helper/battle_buff_handle.lua +++ b/lua/app/module/battle/helper/battle_buff_handle.lua @@ -116,10 +116,32 @@ local function _takeEffectControl(unitComp, buff, target, buffEffect) return true end +BattleBuffHandle.addShield = { + -- 反弹目标伤害的200%,直接写死 + [BUFF_NAME.SHIELD_REBOUND_200] = function(unitComp, buff, target, buffEffect) + local shieldNum = target.unitEntity:getMaxHp() * buff:getEffectNum() // DEFAULT_FACTOR + target:addShield(shieldNum, buffEffect) + target.unitEntity:addAttr(ATTR_NAME.SHIELD_REBOUND, 20000, false) + return shieldNum + end, +} + +BattleBuffHandle.removeShield = { + [BUFF_NAME.SHIELD_REBOUND_200] = function(buffSender, target, buff, buffEffect) + target.unitEntity:addAttr(ATTR_NAME.SHIELD_REBOUND, -20000, false) + target:removeShield(buffEffect) + end, +} + local function _takeEffectShield(unitComp, buff, target, buffEffect) - local shieldNum = target.unitEntity:getMaxHp() * buff:getEffectNum() // DEFAULT_FACTOR - target:addShield(shieldNum, buffEffect) - return true + local func = BattleBuffHandle.addShield[buff:getName()] + if func then + return func(unitComp, buff, target, buffEffect) + else + local shieldNum = target.unitEntity:getMaxHp() * buff:getEffectNum() // DEFAULT_FACTOR + target:addShield(shieldNum, buffEffect) + return shieldNum + end end -- buff添加时的效果 @@ -152,6 +174,15 @@ local function _removeEffectAttr(buffSender, target, buff, buffEffect) end end +local function _removeEffectShield(buffSender, target, buff, buffEffect) + local func = BattleBuffHandle.removeShield[buff:getName()] + if func then + func(buffSender, target, buff, buffEffect) + else + target:removeShield(buffEffect) + end +end + local function _removeEffectControl(buffSender, target, buff, buffEffect) target.unitEntity:removeLimit(buff:getName()) end @@ -159,6 +190,7 @@ end -- buff移除时的效果 BattleBuffHandle.removeEffect = { [1] = _removeEffectAttr, + [2] = _removeEffectShield, [7] = BattleBuffSpecial.specialBuffOff, [8] = _removeEffectControl, } diff --git a/lua/app/module/battle/team/battle_team.lua b/lua/app/module/battle/team/battle_team.lua index f1e5fbd4..cefadd90 100644 --- a/lua/app/module/battle/team/battle_team.lua +++ b/lua/app/module/battle/team/battle_team.lua @@ -157,6 +157,15 @@ function BattleTeam:addShield(buffEffect) end end +function BattleTeam:removeShield(buffEffect) + for k, v in ipairs(self.shieldBuffList) do + if v == buffEffect then + table.remove(self.shieldBuffList, k) + break + end + end +end + function BattleTeam:handleShield(reduceShield, unit) if #self.shieldBuffList <= 0 then return