From 3666e425ffbbaee4e919741ea82aac4043821c4a Mon Sep 17 00:00:00 2001 From: chenxi Date: Fri, 14 Apr 2023 18:22:36 +0800 Subject: [PATCH 1/4] =?UTF-8?q?buff=E5=8A=A0=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lua/app/module/battle/battle_const.lua | 92 +++++++++++++++++++ .../battle/helper/battle_buff_handle.lua | 36 ++++++-- .../battle/team/battle_team_entity.lua | 34 +++++++ .../battle/team/battle_unit_entity.lua | 4 + 4 files changed, 159 insertions(+), 7 deletions(-) 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 From 93ee4653af15d934d1fb42d4ec4a5ea5a059c032 Mon Sep 17 00:00:00 2001 From: chenxi Date: Fri, 14 Apr 2023 20:34:36 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=88=98=E6=96=97buff?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lua/app/module/battle/battle_const.lua | 28 +++++++++++---- .../battle/component/battle_unit_comp.lua | 30 ++++++++++++++-- .../battle/helper/battle_buff_handle.lua | 29 ++++++++++----- .../battle/helper/battle_buff_special.lua | 16 +++++++-- .../battle/team/battle_team_entity.lua | 36 +++++++++++++++++-- .../battle/team/battle_unit_entity.lua | 20 +++++++++++ 6 files changed, 135 insertions(+), 24 deletions(-) diff --git a/lua/app/module/battle/battle_const.lua b/lua/app/module/battle/battle_const.lua index 90a085d3..8c7c82d8 100644 --- a/lua/app/module/battle/battle_const.lua +++ b/lua/app/module/battle/battle_const.lua @@ -103,6 +103,7 @@ BattleConst.EFFECT_TYPE = { } local BUFF_NAME = { + ATKP_ADD = "atkp_add", ATKP_COLOR_ADD = "atkp_color_add", ATKP_RED_ADD = "atkp_red_add", ATKP_YELLOW_ADD = "atkp_yellow_add", @@ -127,15 +128,16 @@ local BUFF_NAME = { 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", + STUN = "stun", + NORMAL_ATTACK_DEC = "normal_attack_dec", + NORMAL_ATTACK_ADD = "normal_attack_add", + BLOCK = "block", HPP_ADD = "hpp_add", CRIT_ADD = "crit_add", CRIT_TIME_ADD = "crit_time_add", + EXP_TIME_ADD = "exp_time_add", + CURED_ADD = "cured_add", + ADD_SKILL = "add_skill", } BattleConst.BUFF_NAME = BUFF_NAME @@ -163,12 +165,19 @@ local ATTR_NAME = { DMG_ADDITION_GREEN = "dmg_addition_green", DMG_ADDITION_BLUE = "dmg_addition_blue", DMG_ADDITION_PURPLE = "dmg_addition_purple", - DMG_ADDITION_ALL = "dmg_addition_all" + DMG_ADDITION_ALL = "dmg_addition_all", + NORMAL_ATTACK_COUNT = "normal_attack_count", + BLOCK = "block", + CRIT = "crit", + CRIT_TIME = "crit_time", + EXP_TIME = "exp_time", + CURE_ADDITION = "cure_addition", } BattleConst.ATTR_NAME = ATTR_NAME -- buff->{属性名,是否按百分比乘法加成} BattleConst.BUFF_NAME_TO_ATTR = { + [BUFF_NAME.ATKP_ADD] = {ATTR_NAME.ATK, true}, [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}, @@ -192,6 +201,11 @@ BattleConst.BUFF_NAME_TO_ATTR = { [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}, + [BUFF_NAME.BLOCK] = {ATTR_NAME.BLOCK, false}, + [BUFF_NAME.CRIT_ADD] = {ATTR_NAME.CRIT, false}, + [BUFF_NAME.CRIT_TIME_ADD] = {ATTR_NAME.CRIT_TIME, false}, + [BUFF_NAME.EXP_TIME_ADD] = {ATTR_NAME.EXP_TIME, false}, + [BUFF_NAME.CURED_ADD] = {ATTR_NAME.CURE_ADDITION, false}, } ---- 格子类型 diff --git a/lua/app/module/battle/component/battle_unit_comp.lua b/lua/app/module/battle/component/battle_unit_comp.lua index b42ba678..b56abb0c 100644 --- a/lua/app/module/battle/component/battle_unit_comp.lua +++ b/lua/app/module/battle/component/battle_unit_comp.lua @@ -37,6 +37,9 @@ function BattleUnitComp:_initBase() self.currAttackKeyTime = 0 self.isPlayHurt = 0 self.attackDurationMap = {} + self.buffList = {} + self.sameBuffCount = {} + self.shieldBuffList = {} self.currState = UNIT_STATE.INIT end @@ -82,13 +85,20 @@ end function BattleUnitComp:useNormalSkill(count, callback) self.baseObject:getTransform():SetAsLastSibling() self.actionOverCallback = callback - self.normalSkillCount = count + self.normalSkillCount = count + self.unitEntity:getNormalAttackCount() if not self:changeState(UNIT_STATE.NORMAL_ATTACK) then self.actionOverCallback = nil callback() end end +function BattleUnitComp:addShield(num, buffEffect) + if buffEffect then + table.insert(self.shieldBuffList, buffEffect) + end + self.unitEntity:addShield(num) +end + function BattleUnitComp:changeState(state) if self.currState == state and not self:repeatCurrState() then return false @@ -267,6 +277,22 @@ function BattleUnitComp:updateNormalAttack(dt) end end +function BattleUnitComp:addBuff(buffEffect) + table.insert(self.buffList, buffEffect) + self:updateBuffState(buffEffect.buff, 1) +end + +function BattleUnitComp:updateBuffState(buff, num) + local buffName = buff:getName() + local buffNum = (self.sameBuffCount[buffName] or 0) + num + self.sameBuffCount[buffName] = buffNum + -- if buffNum > 0 and buffNum == num then + -- self:showBuffFx(buffName, buff:getBuffFxId()) + -- elseif buffNum <= 0 then + -- self:hideBuffFx(buffName) + -- end +end + function BattleUnitComp:onSkillTakeEffect(skill) local effectList = skill:getEffectList() if effectList == nil then @@ -308,7 +334,7 @@ function BattleUnitComp:takeEffect(buff, target) end local func = BattleBuffHandle.takeBuffEffect[buff:getBuffType()] if func then - local result = func(self, buff, target) + local result = func(self, buff, target, buffEffect) if buffEffect then buffEffect.result = result end diff --git a/lua/app/module/battle/helper/battle_buff_handle.lua b/lua/app/module/battle/helper/battle_buff_handle.lua index f224ff0b..5c193941 100644 --- a/lua/app/module/battle/helper/battle_buff_handle.lua +++ b/lua/app/module/battle/helper/battle_buff_handle.lua @@ -58,9 +58,18 @@ BattleBuffHandle.addAttribute = { target.unitEntity:addAttr(ATTR_NAME.ATK_BLUE, num, true) target.unitEntity:addAttr(ATTR_NAME.ATK_PURPLE, num, true) end, + [BUFF_NAME.NORMAL_ATTACK_DEC] = function(target, num) + target.unitEntity:addAttr(ATTR_NAME.NORMAL_ATTACK_COUNT, -num, false) + end, + [BUFF_NAME.NORMAL_ATTACK_ADD] = function(target, num) + target.unitEntity:addAttr(ATTR_NAME.NORMAL_ATTACK_COUNT, num, false) + end, + [BUFF_NAME.HPP_ADD] = function(target, num) + target.unitEntity:addMaxHp(num) + end, } -local function _takeEffectDirectHurt(unitComp, buff, target) +local function _takeEffectDirectHurt(unitComp, buff, target, buffEffect) local damage, hurtStatus = BattleFormula:getDamageOrCureResult(unitComp, buff, target) if damage <= 0 then damage = -1 @@ -71,11 +80,11 @@ local function _takeEffectDirectHurt(unitComp, buff, target) return damage end -local function _takeEffectDot(unitComp, buff, target) +local function _takeEffectDot(unitComp, buff, target, buffEffect) return true end -local function _takeEffectDirectCure(unitComp, buff, target) +local function _takeEffectDirectCure(unitComp, buff, target, buffEffect) local cure, hurtStatus = BattleFormula:getDamageOrCureResult(unitComp, buff, target) if cure < 0 then -- 加血不能是负数 cure = 0 @@ -84,11 +93,11 @@ local function _takeEffectDirectCure(unitComp, buff, target) return cure end -local function _takeEffectHot(unitComp, buff, target) +local function _takeEffectHot(unitComp, buff, target, buffEffect) return true end -local function _takeEffectAttr(unitComp, buff, target) +local function _takeEffectAttr(unitComp, buff, target, buffEffect) local buffName = buff:getName() local attr = BUFF_NAME_TO_ATTR[buffName] if attr then @@ -102,12 +111,14 @@ local function _takeEffectAttr(unitComp, buff, target) return nil end -local function _takeEffectControl(unitComp, buff, target) - target:addLimit(buff:getName()) +local function _takeEffectControl(unitComp, buff, target, buffEffect) + target.unitEntity:addLimit(buff:getName()) return true end -local function _takeEffectShield(unitComp, buff, target) +local function _takeEffectShield(unitComp, buff, target, buffEffect) + local shieldNum = target.unitEntity:getMaxHp() * buff:getEffectNum() // DEFAULT_FACTOR + target:addShield(shieldNum, buffEffect) return true end @@ -141,7 +152,7 @@ local function _removeEffectAttr(buffSender, target, buff, buffEffect) end local function _removeEffectControl(buffSender, target, buff, buffEffect) - target:removeLimit(buff:getName()) + target.unitEntity:removeLimit(buff:getName()) end -- buff移除时的效果 diff --git a/lua/app/module/battle/helper/battle_buff_special.lua b/lua/app/module/battle/helper/battle_buff_special.lua index 3552bc06..fb8eeb2f 100644 --- a/lua/app/module/battle/helper/battle_buff_special.lua +++ b/lua/app/module/battle/helper/battle_buff_special.lua @@ -3,19 +3,29 @@ local BattleConst = require "app/module/battle/battle_const" local BattleBuffSpecial = {} local BUFF_NAME = BattleConst.BUFF_NAME -local ATTR_NAME = BattleConst.ATTR_NAME +local ATTR_NAME = BattleConst.ATTR_NAM + +local function _addSkillOn(unitComp, buff, target, buffEffect) + return 1 +end + +local function _addSkillOff(buffSender, target, buff, buffEffect) + return 1 +end local _handleOn = { + [BUFF_NAME.ADD_SKILL] = _addSkillOn, -- 添加技能 } local _handleOff = { + [BUFF_NAME.ADD_SKILL] = _addSkillOff, -- 添加技能 } -- 特殊buff添加时 -function BattleBuffSpecial.specialBuffOn(unitComp, buff, target) +function BattleBuffSpecial.specialBuffOn(unitComp, buff, target, buffEffect) local func = _handleOn[buff:getName()] if func then - return func(unitComp, buff, target) + return func(unitComp, buff, target, buffEffect) end return 0 end diff --git a/lua/app/userdata/battle/team/battle_team_entity.lua b/lua/app/userdata/battle/team/battle_team_entity.lua index 6fc445a5..23e1a24a 100644 --- a/lua/app/userdata/battle/team/battle_team_entity.lua +++ b/lua/app/userdata/battle/team/battle_team_entity.lua @@ -9,6 +9,8 @@ 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 +local BUFF_NAME = BattleConst.BUFF_NAME +local ATTR_NAME = BattleConst.ATTR_NAME function BattleTeamEntity:ctor() self.members = {} @@ -20,6 +22,9 @@ function BattleTeamEntity:init(side, data) self.baseAttr = {} self.attr = {} self.isDead = false + self.stunCount = 0 + self.limitAll = 0 + self.shieldHp = 0 if data then table.sort(data.units, function(a, b) if a.level == b.level then @@ -140,6 +145,34 @@ function BattleTeamEntity:getCureAddition() return self.attr.cure_addition or 0 end +function BattleTeamEntity:getNormalAttackCount() + return self.attr[ATTR_NAME.NORMAL_ATTACK_COUNT] or 0 +end + +function BattleTeamEntity:addMaxHp(num) + local percent = self.attr.hp / self.attr.max_hp + self.attr.max_hp = self.attr.max_hp + self.baseAttr.max_hp * num // DEFAULT_FACTOR + self.attr.hp = self.attr.max_hp * percent // DEFAULT_FACTOR +end + +function BattleTeamEntity:addLimit(name) + if name == BUFF_NAME.STUN then + self.stunCount = self.stunCount + 1 + end + self.limitAll = self.limitAll + 1 +end + +function BattleTeamEntity:removeLimit(name) + if name == BUFF_NAME.STUN then + self.stunCount = self.stunCount - 1 + end + self.limitAll = self.limitAll - 1 +end + +function BattleTeamEntity:addShield(num) + self.shieldHp = self.shieldHp + num +end + function BattleTeamEntity:takeDamageOrCure(num) if num < 0 then -- 是伤害的话处理一下护盾 num = self:handleShield(num) @@ -164,9 +197,6 @@ function BattleTeamEntity:takeDamageOrCure(num) end function BattleTeamEntity:handleShield(damageNum) - if self.shieldHp == nil then - return damageNum - end self.shieldHp = self.shieldHp + damageNum if self.shieldHp >= 0 then return 0 diff --git a/lua/app/userdata/battle/team/battle_unit_entity.lua b/lua/app/userdata/battle/team/battle_unit_entity.lua index f5437f1b..772822a2 100644 --- a/lua/app/userdata/battle/team/battle_unit_entity.lua +++ b/lua/app/userdata/battle/team/battle_unit_entity.lua @@ -89,4 +89,24 @@ function BattleUnitEntity:getCureAddition() return self.team:getCureAddition() end +function BattleUnitEntity:getNormalAttackCount() + return self.team:getNormalAttackCount() +end + +function BattleUnitEntity:addLimit(name) + self.team:addLimit(name) +end + +function BattleUnitEntity:removeLimit(name) + self.team:removeLimit(name) +end + +function BattleUnitEntity:addShield(num) + self.team:addShield(num) +end + +function BattleUnitEntity:addMaxHp(num) + self.team:addMaxHp(num) +end + return BattleUnitEntity \ No newline at end of file From c6ae8e7c995a9ae7956c46e68eac9d0450dc9742 Mon Sep 17 00:00:00 2001 From: chenxi Date: Fri, 14 Apr 2023 21:21:03 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E8=A1=80=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../battle/component/battle_unit_comp.lua | 5 ++--- .../battle/controller/battle_controller.lua | 9 +++++++++ .../controller/battle_controller_stage.lua | 1 + lua/app/ui/battle/battle_ui.lua | 19 +++++++++++++++++++ .../battle/team/battle_team_entity.lua | 8 ++++++++ .../battle/team/battle_unit_entity.lua | 4 ++++ 6 files changed, 43 insertions(+), 3 deletions(-) diff --git a/lua/app/module/battle/component/battle_unit_comp.lua b/lua/app/module/battle/component/battle_unit_comp.lua index b56abb0c..ecc71393 100644 --- a/lua/app/module/battle/component/battle_unit_comp.lua +++ b/lua/app/module/battle/component/battle_unit_comp.lua @@ -25,7 +25,7 @@ function BattleUnitComp:initPosition() end function BattleUnitComp:playBorn() - self:playAnimation(SPINE_ANIMATION_NAME.IDLE, true, false) + self:changeState(UNIT_STATE.IDLE) end function BattleUnitComp:_initBase() @@ -361,8 +361,7 @@ function BattleUnitComp:takeDamageOrCure(atker, buff, num, effectType, effectSta end local x, y, z = self.baseObject:fastGetLocalPosition() self:showEffectNumber(num, x, y) - local hpPercent = self.unitEntity:getHpPercent() - -- self.controlUnitComp:RefreshHpBar(hpPercent) + self.battleController:refreshHp(self.side, self.unitEntity:getHp(), self.unitEntity:getHpPercent()) -- local shieldHp = self.unitEntity:getShieldHp() -- if shieldHp and shieldHp.value > 0 then diff --git a/lua/app/module/battle/controller/battle_controller.lua b/lua/app/module/battle/controller/battle_controller.lua index 2e49b17c..04d0b400 100644 --- a/lua/app/module/battle/controller/battle_controller.lua +++ b/lua/app/module/battle/controller/battle_controller.lua @@ -164,6 +164,7 @@ function BattleController:initAtkUnits(callback) local function onloadFinished() count = count + 1 if count == totalCount then + self.battleUI:refreshAtkHp(atkTeam:getHp(), atkTeam:getHpPercent()) callback() end end @@ -186,6 +187,14 @@ function BattleController:initAtkUnits(callback) end end +function BattleController:refreshHp(side, num, percent) + if side == BattleConst.SIDE_ATK then + self.battleUI:refreshAtkHp(num, percent) + else + self.battleUI:refreshDefHp(num, percent) + end +end + function BattleController:getOtherSideMainUnit(side) if side == BattleConst.SIDE_ATK then return self.defMainUnit diff --git a/lua/app/module/battle/controller/battle_controller_stage.lua b/lua/app/module/battle/controller/battle_controller_stage.lua index eb4dc0f5..7eb46595 100644 --- a/lua/app/module/battle/controller/battle_controller_stage.lua +++ b/lua/app/module/battle/controller/battle_controller_stage.lua @@ -23,6 +23,7 @@ function BattleControllerStage:initDefUnits(callback) self.defUnits[unitEntity:getMatchType()] = monsterComp table.insert(self.allUnits, monsterComp) self.defMainUnit = monsterComp + self.battleUI:refreshDefHp(unitEntity:getHp(), unitEntity:getHpPercent()) callback() end) end diff --git a/lua/app/ui/battle/battle_ui.lua b/lua/app/ui/battle/battle_ui.lua index db5d944d..19f1264e 100644 --- a/lua/app/ui/battle/battle_ui.lua +++ b/lua/app/ui/battle/battle_ui.lua @@ -36,6 +36,7 @@ function BattleUI:_display() self:initSkill() self:initBattlefield() self:initNumberNode() + self:initHpNode() end function BattleUI:_addListeners() @@ -88,6 +89,24 @@ function BattleUI:getBattleNumber() return self.battleNumber end +function BattleUI:initHpNode() + self.hpNode = self.uiMap["battle_ui.battle_hp_node"] + self.hpProgressLeft = self.uiMap["battle_ui.battle_hp_node.progress_left"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER) + self.hpProgressRight = self.uiMap["battle_ui.battle_hp_node.progress_right"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER) + self.hpTextRight = self.uiMap["battle_ui.battle_hp_node.text_right"] + self.hpTextLeft = self.uiMap["battle_ui.battle_hp_node.text_left"] +end + +function BattleUI:refreshAtkHp(num, percent) + self.hpTextLeft:setText(GFunc.num2Str(num)) + self.hpProgressLeft.value = percent +end + +function BattleUI:refreshDefHp(num, percent) + self.hpTextRight:setText(GFunc.num2Str(num)) + self.hpProgressRight.value = percent +end + function BattleUI:refreshSkill(elementMap) if not self.skillObjs then return diff --git a/lua/app/userdata/battle/team/battle_team_entity.lua b/lua/app/userdata/battle/team/battle_team_entity.lua index 23e1a24a..34b30a5c 100644 --- a/lua/app/userdata/battle/team/battle_team_entity.lua +++ b/lua/app/userdata/battle/team/battle_team_entity.lua @@ -113,6 +113,10 @@ function BattleTeamEntity:getMembersCount() return self.membersCount end +function BattleTeamEntity:getHp() + return self.attr.hp +end + function BattleTeamEntity:getHpPercent() return self.attr.hp / self.attr.max_hp end @@ -174,6 +178,9 @@ function BattleTeamEntity:addShield(num) end function BattleTeamEntity:takeDamageOrCure(num) + if self.isDead then + return 0 + end if num < 0 then -- 是伤害的话处理一下护盾 num = self:handleShield(num) if num >= 0 then -- 这次伤害被抵消了 @@ -185,6 +192,7 @@ function BattleTeamEntity:takeDamageOrCure(num) local hurtEventNum = 0 if self.attr.hp <= 0 then -- 死了 hurtEventNum = -hpBefore + self.attr.hp = 0 self:die() elseif self.attr.hp < self.attr.max_hp then hurtEventNum = num diff --git a/lua/app/userdata/battle/team/battle_unit_entity.lua b/lua/app/userdata/battle/team/battle_unit_entity.lua index 772822a2..b3810b9e 100644 --- a/lua/app/userdata/battle/team/battle_unit_entity.lua +++ b/lua/app/userdata/battle/team/battle_unit_entity.lua @@ -57,6 +57,10 @@ function BattleUnitEntity:takeDamageOrCure(num) return self.team:takeDamageOrCure(num) end +function BattleUnitEntity:getHp() + return self.team:getHp() +end + function BattleUnitEntity:getHpPercent() return self.team:getHpPercent() end From 3269a4c6a3cfd5bcde8c5046d6abf69b3bb81269 Mon Sep 17 00:00:00 2001 From: chenxi Date: Fri, 14 Apr 2023 21:25:01 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9C=80=E5=A4=A7?= =?UTF-8?q?=E8=A1=80=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lua/app/userdata/battle/team/battle_team_entity.lua | 2 -- 1 file changed, 2 deletions(-) diff --git a/lua/app/userdata/battle/team/battle_team_entity.lua b/lua/app/userdata/battle/team/battle_team_entity.lua index 34b30a5c..dc6b7bf1 100644 --- a/lua/app/userdata/battle/team/battle_team_entity.lua +++ b/lua/app/userdata/battle/team/battle_team_entity.lua @@ -154,9 +154,7 @@ function BattleTeamEntity:getNormalAttackCount() end function BattleTeamEntity:addMaxHp(num) - local percent = self.attr.hp / self.attr.max_hp self.attr.max_hp = self.attr.max_hp + self.baseAttr.max_hp * num // DEFAULT_FACTOR - self.attr.hp = self.attr.max_hp * percent // DEFAULT_FACTOR end function BattleTeamEntity:addLimit(name)