diff --git a/lua/app/module/battle/battle_const.lua b/lua/app/module/battle/battle_const.lua index 57cf5857..54192fac 100644 --- a/lua/app/module/battle/battle_const.lua +++ b/lua/app/module/battle/battle_const.lua @@ -89,6 +89,98 @@ BattleConst.EFFECT_TYPE = { HOT = 102, } +local BUFF_NAME = { + ATKP_COLOR_ADD = "atkp_color_add", + ATKP_RED_ADD = "atkp_red_add", + ATKP_YELLOW_ADD = "atkp_yellow_add", + ATKP_GREEN_ADD = "atkp_green_add", + ATKP_BLUE_ADD = "atkp_blue_add", + ATKP_PURPLE_ADD = "atkp_purple_add", + DEC_DMG_RED_ADD = "dec_dmg_red_add", + DEC_DMG_YELLOW_ADD = "dec_dmg_yellow_add", + DEC_DMG_GREEN_ADD = "dec_dmg_green_add", + DEC_DMG_BLUE_ADD = "dec_dmg_blue_add", + DEC_DMG_PURPLE_ADD = "dec_dmg_purple_add", + DEC_DMG_ALL_ADD = "dec_dmg_all_add", + WEAKNESS_RED_ADD = "weakness_red_add", + WEAKNESS_YELLOW_ADD = "weakness_yellow_add", + WEAKNESS_GREEN_ADD = "weakness_green_add", + WEAKNESS_BLUE_ADD = "weakness_blue_add", + WEAKNESS_PURPLE_ADD = "weakness_purple_add", + WEAKNESS_ALL_ADD = "weakness_all_add", + DMG_ADDITION_RED_ADD = "dmg_addition_red_add", + DMG_ADDITION_YELLOW_ADD = "dmg_addition_yellow_add", + DMG_ADDITION_GREEN_ADD = "dmg_addition_green_add", + DMG_ADDITION_BLUE_ADD = "dmg_addition_blue_add", + DMG_ADDITION_PURPLE_ADD = "dmg_addition_purple_add", + DMG_ADDITION_ALL_ADD = "dmg_addition_all_add", + ATKP_COLOR_ADD = "atkp_color_add", + ATKP_RED_ADD = "atkp_red_add", + ATKP_YELLOW_ADD = "atkp_yellow_add", + ATKP_GREEN_ADD = "atkp_green_add", + ATKP_BLUE_ADD = "atkp_blue_add", + ATKP_PURPLE_ADD = "atkp_purple_add", + HPP_ADD = "hpp_add", + CRIT_ADD = "crit_add", + CRIT_TIME_ADD = "crit_time_add", +} +BattleConst.BUFF_NAME = BUFF_NAME + +local ATTR_NAME = { + ATK = "atk", + ATK_RED = "atk_red", + ATK_YELLOW = "atk_yellow", + ATK_GREEN = "atk_green", + ATK_BLUE = "atk_blue", + ATK_PURPLE = "atk_purple", + DEC_DMG_RED = "dec_dmg_red", + DEC_DMG_YELLOW = "dec_dmg_yellow", + DEC_DMG_GREEN = "dec_dmg_green", + DEC_DMG_BLUE = "dec_dmg_blue", + DEC_DMG_PURPLE = "dec_dmg_purple", + DEC_DMG_ALL = "dec_dmg_all", + WEAKNESS_RED = "weakness_red", + WEAKNESS_YELLOW = "weakness_yellow", + WEAKNESS_GREEN = "weakness_green", + WEAKNESS_BLUE = "weakness_blue", + WEAKNESS_PURPLE = "weakness_purple", + WEAKNESS_ALL = "weakness_all", + DMG_ADDITION_RED = "dmg_addition_red", + DMG_ADDITION_YELLOW = "dmg_addition_yellow", + DMG_ADDITION_GREEN = "dmg_addition_green", + DMG_ADDITION_BLUE = "dmg_addition_blue", + DMG_ADDITION_PURPLE = "dmg_addition_purple", + DMG_ADDITION_ALL = "dmg_addition_all" +} +BattleConst.ATTR_NAME = ATTR_NAME + +-- buff->{属性名,是否按百分比乘法加成} +BattleConst.BUFF_NAME_TO_ATTR = { + [BUFF_NAME.ATKP_RED_ADD] = {ATTR_NAME.ATK_RED, true}, + [BUFF_NAME.ATKP_YELLOW_ADD] = {ATTR_NAME.ATK_YELLOW, true}, + [BUFF_NAME.ATKP_GREEN_ADD] = {ATTR_NAME.ATK_GREEN, true}, + [BUFF_NAME.ATKP_BLUE_ADD] = {ATTR_NAME.ATK_BLUE, true}, + [BUFF_NAME.ATKP_PURPLE_ADD] = {ATTR_NAME.ATK_PURPLE, true}, + [BUFF_NAME.DEC_DMG_RED_ADD] = {ATTR_NAME.DEC_DMG_RED, false}, + [BUFF_NAME.DEC_DMG_YELLOW_ADD] = {ATTR_NAME.DEC_DMG_YELLOW, false}, + [BUFF_NAME.DEC_DMG_GREEN_ADD] = {ATTR_NAME.DEC_DMG_GREEN, false}, + [BUFF_NAME.DEC_DMG_BLUE_ADD] = {ATTR_NAME.DEC_DMG_BLUE, false}, + [BUFF_NAME.DEC_DMG_PURPLE_ADD] = {ATTR_NAME.DEC_DMG_PURPLE, false}, + [BUFF_NAME.DEC_DMG_ALL_ADD] = {ATTR_NAME.DEC_DMG_ALL, false}, + [BUFF_NAME.WEAKNESS_RED_ADD] = {ATTR_NAME.WEAKNESS_RED, false}, + [BUFF_NAME.WEAKNESS_YELLOW_ADD] = {ATTR_NAME.WEAKNESS_YELLOW, false}, + [BUFF_NAME.WEAKNESS_GREEN_ADD] = {ATTR_NAME.WEAKNESS_GREEN, false}, + [BUFF_NAME.WEAKNESS_BLUE_ADD] = {ATTR_NAME.WEAKNESS_BLUE, false}, + [BUFF_NAME.WEAKNESS_PURPLE_ADD] = {ATTR_NAME.WEAKNESS_PURPLE, false}, + [BUFF_NAME.WEAKNESS_ALL_ADD] = {ATTR_NAME.WEAKNESS_ALL, false}, + [BUFF_NAME.DMG_ADDITION_RED_ADD] = {ATTR_NAME.DMG_ADDITION_RED, false}, + [BUFF_NAME.DMG_ADDITION_YELLOW_ADD] = {ATTR_NAME.DMG_ADDITION_YELLOW, false}, + [BUFF_NAME.DMG_ADDITION_GREEN_ADD] = {ATTR_NAME.DMG_ADDITION_GREEN, false}, + [BUFF_NAME.DMG_ADDITION_BLUE_ADD] = {ATTR_NAME.DMG_ADDITION_BLUE, false}, + [BUFF_NAME.DMG_ADDITION_PURPLE_ADD] = {ATTR_NAME.DMG_ADDITION_PURPLE, false}, + [BUFF_NAME.DMG_ADDITION_ALL_ADD] = {ATTR_NAME.DMG_ADDITION_ALL, false}, +} + ---- 格子类型 BattleConst.GRID_TYPE = { EMPTY = 0, diff --git a/lua/app/module/battle/helper/battle_buff_handle.lua b/lua/app/module/battle/helper/battle_buff_handle.lua index 13ae00e9..f224ff0b 100644 --- a/lua/app/module/battle/helper/battle_buff_handle.lua +++ b/lua/app/module/battle/helper/battle_buff_handle.lua @@ -9,6 +9,7 @@ local EFFECT_TYPE = BattleConst.EFFECT_TYPE local BUFF_NAME = BattleConst.BUFF_NAME local ATTR_NAME = BattleConst.ATTR_NAME local DEFAULT_FACTOR = BattleConst.DEFAULT_FACTOR +local BUFF_NAME_TO_ATTR = BattleConst.BUFF_NAME_TO_ATTR local function _doDotWork(unitComp, buffEffect, buff) local damage, hurtStatus = BattleFormula:getDamageOrCureResult(buffEffect.sender, buff, unitComp) @@ -49,6 +50,14 @@ function BattleBuffHandle.removeBuff(unitComp, buffEffect) end BattleBuffHandle.addAttribute = { + [BUFF_NAME.ATKP_COLOR_ADD] = function(target, num) + target.unitEntity:addAttr(ATTR_NAME.ATK, num, true) + target.unitEntity:addAttr(ATTR_NAME.ATK_RED, num, true) + target.unitEntity:addAttr(ATTR_NAME.ATK_YELLOW, num, true) + target.unitEntity:addAttr(ATTR_NAME.ATK_GREEN, num, true) + target.unitEntity:addAttr(ATTR_NAME.ATK_BLUE, num, true) + target.unitEntity:addAttr(ATTR_NAME.ATK_PURPLE, num, true) + end, } local function _takeEffectDirectHurt(unitComp, buff, target) @@ -81,10 +90,14 @@ end local function _takeEffectAttr(unitComp, buff, target) local buffName = buff:getName() - local func = BattleBuffHandle.addAttribute[buffName] - if func then - func(target, buff:getEffectNum()) - return true + local attr = BUFF_NAME_TO_ATTR[buffName] + if attr then + return target.unitEntity:addAttr(attr[1], buff:getEffectNum(), attr[2]) + else + local func = BattleBuffHandle.addAttribute[buffName] + if func then + return func(target, buff:getEffectNum()) + end end return nil end @@ -112,9 +125,18 @@ BattleBuffHandle.takeBuffEffect = { -- 还原改变的属性 local function _removeEffectAttr(buffSender, target, buff, buffEffect) - local func = BattleBuffHandle.addAttribute[buff:getName()] - if func then - func(target, -buff:getEffectNum()) + if buffEffect == nil then + return + end + local buffName = buff:getName() + local attr = BUFF_NAME_TO_ATTR[buffName] + if attr then + target.unitEntity:addAttr(attr[1], -buffEffect.effectResult, false) + else + local func = BattleBuffHandle.addAttribute[buffName] + if func then + return func(target, -buff:getEffectNum()) + end end end diff --git a/lua/app/userdata/battle/team/battle_team_entity.lua b/lua/app/userdata/battle/team/battle_team_entity.lua index 9676a4ab..126535e6 100644 --- a/lua/app/userdata/battle/team/battle_team_entity.lua +++ b/lua/app/userdata/battle/team/battle_team_entity.lua @@ -8,6 +8,7 @@ local MATCH_ATTACK_NAME = GConst.MATCH_ATTACK_NAME local MATCH_DMG_ADDITION_NAME = BattleConst.MATCH_DMG_ADDITION_NAME local MATCH_DMG_DEC_NAME = BattleConst.MATCH_DMG_DEC_NAME local MATCH_WEAKNESS_NAME = BattleConst.MATCH_WEAKNESS_NAME +local DEFAULT_FACTOR = BattleConst.DEFAULT_FACTOR function BattleTeamEntity:ctor() self.members = {} @@ -66,6 +67,39 @@ function BattleTeamEntity:addBaseAttr(unitAttr) end end +function BattleTeamEntity:addAttr(name, num, isPercent) + local addNum = 0 + if isPercent then + if self.attr[name] then + -- 百分比加减属性的时候如果是减少属性,则先取正数做计算,在减去此结果, 否则在做整除运算的时候,正数和负数整除后的绝对值会不一致 + -- 例如150 // 100 = 1, -150 // 100 = -2, 导致添加和移除的时候计算的属性值不一样 + if num < 0 then + if self.baseAttr[name] then + addNum = self.baseAttr[name] * -num // DEFAULT_FACTOR + self.attr[name] = self.attr[name] - addNum + else + addNum = self.attr[name] * -num // DEFAULT_FACTOR + self.attr[name] = self.attr[name] - addNum + end + addNum = -addNum + else + if self.baseAttr[name] then + addNum = self.baseAttr[name] * num // DEFAULT_FACTOR + self.attr[name] = self.attr[name] + addNum + else + addNum = self.attr[name] * num // DEFAULT_FACTOR + self.attr[name] = self.attr[name] + addNum + end + end + end + else + addNum = num + local currNum = self.attr[name] or 0 + self.attr[name] = currNum + num + end + return addNum +end + function BattleTeamEntity:getAllMembers() return self.members end diff --git a/lua/app/userdata/battle/team/battle_unit_entity.lua b/lua/app/userdata/battle/team/battle_unit_entity.lua index 6a9c0cd7..f5437f1b 100644 --- a/lua/app/userdata/battle/team/battle_unit_entity.lua +++ b/lua/app/userdata/battle/team/battle_unit_entity.lua @@ -25,6 +25,10 @@ function BattleUnitEntity:initSkill() end end +function BattleUnitEntity:addAttr(name, num, isPercent) + return self.team:addAttr(name, num, isPercent) +end + function BattleUnitEntity:getModelId() return self.unitData.modelId end