diff --git a/lua/app/module/battle/battle_const.lua b/lua/app/module/battle/battle_const.lua index 2d0cdd77..f0fa6382 100644 --- a/lua/app/module/battle/battle_const.lua +++ b/lua/app/module/battle/battle_const.lua @@ -383,7 +383,14 @@ local BUFF_NAME = { BLUE_REFRESH_WEIGHT = "blue_refresh_weight", PURPLE_REFRESH_WEIGHT = "purple_refresh_weight", ATTR_MONSTER_DMG_ADD = "attr_monster_dmg_add", - ATTR_BOSS_DMG_ADD = "attr_boss_dmg_add", + HPP_RED_ADD = "hpp_red_add", + HPP_YELLOW_ADD = "hpp_yellow_add", + HPP_GREEN_ADD = "hpp_green_add", + HPP_BLUE_ADD = "hpp_blue_add", + HPP_PURPLE_ADD = "hpp_purple_add", + FOREVER_NORMAL_ATTACK_ADD = "forever_normal_attack_add", + FOREVER_UNCONTROLLED = "forever_uncontrolled", + ATTR_NORMAL_HURTP_ALL_ADD = "attr_normal_hurtp_all_add", } BattleConst.BUFF_NAME = BUFF_NAME @@ -516,6 +523,8 @@ local ATTR_NAME = { INVINCIBLE_SHIELD = "invincible_shield", REBIRTH = "rebirth", IMMUNE_REDUCTION_BENEFIT = "immune_reduction_benefit", -- 免疫减益 + FOREVER_UNCONTROLLED = "forever_uncontrolled", -- 永久免控 + ATTR_NORMAL_HURTP_ALL_ADD = "attr_normal_hurtp_all", } BattleConst.ATTR_NAME = ATTR_NAME @@ -578,6 +587,9 @@ BattleConst.BUFF_NAME_TO_ATTR = { [BUFF_NAME.FOREVER_DEC_DMG_PURPLE_ADD] = {ATTR_NAME.DEC_DMG_PURPLE, false}, [BUFF_NAME.FOREVER_DEC_DMG_ALL_ADD] = {ATTR_NAME.DEC_DMG_ALL, false}, [BUFF_NAME.FOREVER_THORNS] = {ATTR_NAME.THORNS, false}, + [BUFF_NAME.FOREVER_NORMAL_ATTACK_ADD] = {ATTR_NAME.NORMAL_ATTACK_COUNT, false}, + [BUFF_NAME.FOREVER_UNCONTROLLED] = {ATTR_NAME.FOREVER_UNCONTROLLED, false}, + [BUFF_NAME.ATTR_NORMAL_HURTP_ALL_ADD] = {ATTR_NAME.FOREVER_UNCONTROLLED, true}, } ---- 格子类型 diff --git a/lua/app/module/battle/component/battle_unit_comp.lua b/lua/app/module/battle/component/battle_unit_comp.lua index a1907100..de466a6c 100644 --- a/lua/app/module/battle/component/battle_unit_comp.lua +++ b/lua/app/module/battle/component/battle_unit_comp.lua @@ -1343,6 +1343,12 @@ function BattleUnitComp:addMaxHp(percent) end function BattleUnitComp:addBuff(buffEffect, conditionResult) + if buffEffect.buff:getIsControlType() then + local ratio = self.unitEntity:getAttrValue(BattleConst.ATTR_NAME.FOREVER_UNCONTROLLED) or 0 + if math.random(1, BattleConst.DEFAULT_FACTOR) <= ratio then + return + end + end if buffEffect.buff:needShowName() and buffEffect.buff:getShowName(true) then local direction = BattleConst.EFFECT_TYPE_MOVE_R local x, y = self.team:getMainUnitLocalPosition(self) diff --git a/lua/app/module/battle/helper/battle_buff_handle.lua b/lua/app/module/battle/helper/battle_buff_handle.lua index d47f067b..b733e249 100644 --- a/lua/app/module/battle/helper/battle_buff_handle.lua +++ b/lua/app/module/battle/helper/battle_buff_handle.lua @@ -69,6 +69,36 @@ BattleBuffHandle.addAttribute = { target.unitEntity:addAttr(ATTR_NAME.ATK_PURPLE, num, true) return num end, + [BUFF_NAME.HPP_RED_ADD] = function(target, num, unitComp) + local unitCompMap = unitComp.team:getUnitComp() + local targetComp = unitCompMap[BattleConst.ELEMENT_TYPE.RED] + targetComp.unitEntity:addAttr(ATTR_NAME.HP, num, true) + return num + end, + [BUFF_NAME.HPP_YELLOW_ADD] = function(target, num, unitComp) + local unitCompMap = unitComp.team:getUnitComp() + local targetComp = unitCompMap[BattleConst.ELEMENT_TYPE.YELLOW] + targetComp.unitEntity:addAttr(ATTR_NAME.HP, num, true) + return num + end, + [BUFF_NAME.HPP_GREEN_ADD] = function(target, num, unitComp) + local unitCompMap = unitComp.team:getUnitComp() + local targetComp = unitCompMap[BattleConst.ELEMENT_TYPE.GREEN] + targetComp.unitEntity:addAttr(ATTR_NAME.HP, num, true) + return num + end, + [BUFF_NAME.HPP_BLUE_ADD] = function(target, num, unitComp) + local unitCompMap = unitComp.team:getUnitComp() + local targetComp = unitCompMap[BattleConst.ELEMENT_TYPE.BLUE] + targetComp.unitEntity:addAttr(ATTR_NAME.HP, num, true) + return num + end, + [BUFF_NAME.HPP_PURPLE_ADD] = function(target, num, unitComp) + local unitCompMap = unitComp.team:getUnitComp() + local targetComp = unitCompMap[BattleConst.ELEMENT_TYPE.PURPLE] + targetComp.unitEntity:addAttr(ATTR_NAME.HP, num, true) + return num + end, [BUFF_NAME.NORMAL_ATTACK_DEC] = function(target, num) target.unitEntity:addAttr(ATTR_NAME.NORMAL_ATTACK_COUNT, -num, false) return -num @@ -134,7 +164,7 @@ local function _takeEffectAttr(unitComp, buff, target, buffEffect) else local func = BattleBuffHandle.addAttribute[buffName] if func then - return func(target, buff:getEffectNum()) + return func(target, buff:getEffectNum(), unitComp) end end return nil diff --git a/lua/app/module/battle/team/battle_team.lua b/lua/app/module/battle/team/battle_team.lua index 28a99f94..74bd3eb9 100644 --- a/lua/app/module/battle/team/battle_team.lua +++ b/lua/app/module/battle/team/battle_team.lua @@ -701,6 +701,7 @@ function BattleTeam:updateBuffState(buff, num) end end +--@region 特殊buff function BattleTeam:hadUniversalBuff() for i,v in ipairs(self.buffList) do if v.buff:getName() == BattleConst.BUFF_NAME.RANDOM_UNIVERSAL and v.buff:isActive() then @@ -751,6 +752,7 @@ function BattleTeam:checkMainHeroExtAdd() return true, effectNum end end +--@endregion function BattleTeam:getBuffCountByName(buffName) return self.sameBuffCount[buffName] or 0 diff --git a/lua/app/userdata/battle/skill/battle_buff_entity.lua b/lua/app/userdata/battle/skill/battle_buff_entity.lua index b1bf30e9..aafa0e41 100644 --- a/lua/app/userdata/battle/skill/battle_buff_entity.lua +++ b/lua/app/userdata/battle/skill/battle_buff_entity.lua @@ -4,6 +4,7 @@ local BattleBuffEntity = class("BattleBuffEntity", BaseData) local BUFF_TYPE_DIRECT_HURT = BattleConst.BUFF_TYPE.DIRECT_HURT local BUFF_TYPE_SHIELD = BattleConst.BUFF_TYPE.SHIELD +local BUFF_TYPE_CONTROL = BattleConst.BUFF_TYPE.CONTROL function BattleBuffEntity:ctor() end @@ -65,6 +66,10 @@ function BattleBuffEntity:getIsHurtType() return self.buffType == BUFF_TYPE_DIRECT_HURT end +function BattleBuffEntity:getIsControlType() + return self.buffType == BUFF_TYPE_CONTROL +end + function BattleBuffEntity:getEffectNum() return self.effectNum end