From 90711c7e2a0d4154074787e76ced8d24e94e633a Mon Sep 17 00:00:00 2001 From: xiekaidong Date: Thu, 13 Jul 2023 18:02:46 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8B=B1=E9=9B=84=E5=B1=9E=E6=80=A7=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=EF=BC=8C=E4=BB=A5=E5=8F=8A=E6=88=98=E6=96=97=E4=BC=A4?= =?UTF-8?q?=E5=AE=B3=E6=B2=BB=E7=96=97=E5=85=AC=E5=BC=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lua/app/global/global_const.lua | 77 +++++++++++++++++++ lua/app/module/battle/battle_const.lua | 51 +++++++++++- .../module/battle/helper/battle_formula.lua | 32 +++++--- lua/app/userdata/battle/battle_base_data.lua | 49 ++++++++++-- .../battle/team/battle_team_entity.lua | 36 +++++++-- .../battle/team/battle_unit_entity.lua | 30 +++++--- lua/app/userdata/hero/hero_entity.lua | 6 +- 7 files changed, 244 insertions(+), 37 deletions(-) diff --git a/lua/app/global/global_const.lua b/lua/app/global/global_const.lua index 18815aa5..38ecf752 100644 --- a/lua/app/global/global_const.lua +++ b/lua/app/global/global_const.lua @@ -467,6 +467,83 @@ GConst.MATCH_ATTACK_NAME = { [5] = "atk_purple", } +GConst.MATCH_ATTACK_ADD_NAME = { + [1] = "attr_atkp_red", + [2] = "attr_atkp_yellow", + [3] = "attr_atkp_green", + [4] = "attr_atkp_blue", + [5] = "attr_atkp_purple", +} + +GConst.MATCH_HP_ADD_NAME = { + [1] = "attr_hpp_red", + [2] = "attr_hpp_yellow", + [3] = "attr_hpp_green", + [4] = "attr_hpp_blue", + [5] = "attr_hpp_purple", +} + + +GConst.MATCH_CRIT_NAME = { + [0] = "crit", + [1] = "attr_crit_red", + [2] = "attr_crit_yellow", + [3] = "attr_crit_green", + [4] = "attr_crit_blue", + [5] = "attr_crit_purple", +} + +GConst.MATCH_CRIT_TIME_NAME = { + [0] = "crit_time", + [1] = "attr_crit_time_red", + [2] = "attr_crit_time_yellow", + [3] = "attr_crit_time_green", + [4] = "attr_crit_time_blue", + [5] = "attr_crit_time_purple", +} + +GConst.MATCH_CURED_NAME = { + [0] = "cure_addition", + [1] = "attr_cured_red", + [2] = "attr_cured_yellow", + [3] = "attr_cured_green", + [4] = "attr_cured_blue", + [5] = "attr_cured_purple", +} + +GConst.MATCH_NORMAL_HURT_NAME = { + [1] = "attr_normal_hurt_red", + [2] = "attr_normal_hurt_yellow", + [3] = "attr_normal_hurt_green", + [4] = "attr_normal_hurt_blue", + [5] = "attr_normal_hurt_purple", +} + +GConst.MATCH_SKILL_HURT_NAME = { + [1] = "attr_skill_hurt_red", + [2] = "attr_skill_hurt_yellow", + [3] = "attr_skill_hurt_green", + [4] = "attr_skill_hurt_blue", + [5] = "attr_skill_hurt_purple", +} + +GConst.MATCH_NORMAL_HURTP_NAME = { + [1] = "attr_normal_hurtp_red", + [2] = "attr_normal_hurtp_yellow", + [3] = "attr_normal_hurtp_green", + [4] = "attr_normal_hurtp_blue", + [5] = "attr_normal_hurtp_purple", +} + +GConst.MATCH_SKILL_HURTP_NAME = { + [0] = "skill_hurtp", + [1] = "attr_skill_hurtp_red", + [2] = "attr_skill_hurtp_yellow", + [3] = "attr_skill_hurtp_green", + [4] = "attr_skill_hurtp_blue", + [5] = "attr_skill_hurtp_purple", +} + GConst.GAMEOBJECT_LAYER = { DEFAULT = CS.BF.Utils.NameToLayer("Default"), UI = CS.BF.Utils.NameToLayer("UI"), diff --git a/lua/app/module/battle/battle_const.lua b/lua/app/module/battle/battle_const.lua index fb605596..36f91dd6 100644 --- a/lua/app/module/battle/battle_const.lua +++ b/lua/app/module/battle/battle_const.lua @@ -384,12 +384,59 @@ local ATTR_NAME = { THORNS = "thorns", FIRST_HAND = "first_hand", COUNTER_ATTACK = "counterattack", - SKILL_HURT = "skill_hurt", + SKILL_HURTP = "skill_hurtp", DEATH_SUMMON = "death_summon", BLEED = "bleed", INVALID_CONTROL = "invalid_control", END_DMG_ADDITION_ALL = "end_dmg_addition_all", END_DMG_DEC_ALL = "end_dmg_dec_all", + + ATTR_CRIT_RED = "attr_crit_red", + ATTR_CRIT_YELLOW = "attr_crit_yellow", + ATTR_CRIT_GREEN = "attr_crit_green", + ATTR_CRIT_BLUE = "attr_crit_blue", + ATTR_CRIT_PURPLE = "attr_crit_purple", + ATTR_CRIT_TIME_RED = "attr_crit_time_red", + ATTR_CRIT_TIME_YELLOW = "attr_crit_time_yellow", + ATTR_CRIT_TIME_GREEN = "attr_crit_time_green", + ATTR_CRIT_TIME_BLUE = "attr_crit_time_blue", + ATTR_CRIT_TIME_PURPLE = "attr_crit_time_purple", + ATTR_CURED_RED = "attr_cured_red", + ATTR_CURED_YELLOW = "attr_cured_yellow", + ATTR_CURED_GREEN = "attr_cured_green", + ATTR_CURED_BLUE = "attr_cured_blue", + ATTR_CURED_PURPLE = "attr_cured_purple", + ATTR_ATKP_RED = "attr_atkp_red", + ATTR_ATKP_YELLOW = "attr_atkp_yellow", + ATTR_ATKP_GREEN = "attr_atkp_green", + ATTR_ATKP_BLUE = "attr_atkp_blue", + ATTR_ATKP_PURPLE = "attr_atkp_purple", + ATTR_HPP_RED = "attr_hpp_red", + ATTR_HPP_YELLOW = "attr_hpp_yellow", + ATTR_HPP_GREEN = "attr_hpp_green", + ATTR_HPP_BLUE = "attr_hpp_blue", + ATTR_HPP_PURPLE = "attr_hpp_purple", + + ATTR_NORMAL_HURT_RED = "attr_normal_hurt_red", + ATTR_NORMAL_HURT_YELLOW = "attr_normal_hurt_yellow", + ATTR_NORMAL_HURT_GREEN = "attr_normal_hurt_green", + ATTR_NORMAL_HURT_BLUE = "attr_normal_hurt_blue", + ATTR_NORMAL_HURT_PURPLE = "attr_normal_hurt_purple", + ATTR_SKILL_HURT_RED = "attr_skill_hurt_red", + ATTR_SKILL_HURT_YELLOW = "attr_skill_hurt_yellow", + ATTR_SKILL_HURT_GREEN = "attr_skill_hurt_green", + ATTR_SKILL_HURT_BLUE = "attr_skill_hurt_blue", + ATTR_SKILL_HURT_PURPLE = "attr_skill_hurt_purple", + ATTR_NORMAL_HURTP_RED = "attr_normal_hurtp_red", + ATTR_NORMAL_HURTP_YELLOW = "attr_normal_hurtp_yellow", + ATTR_NORMAL_HURTP_GREEN = "attr_normal_hurtp_green", + ATTR_NORMAL_HURTP_BLUE = "attr_normal_hurtp_blue", + ATTR_NORMAL_HURTP_PURPLE = "attr_normal_hurtp_purple", + ATTR_SKILL_HURTP_RED = "attr_skill_hurtp_red", + ATTR_SKILL_HURTP_YELLOW = "attr_skill_hurtp_yellow", + ATTR_SKILL_HURTP_GREEN = "attr_skill_hurtp_green", + ATTR_SKILL_HURTP_BLUE = "attr_skill_hurtp_blue", + ATTR_SKILL_HURTP_PURPLE = "attr_skill_hurtp_purple", } BattleConst.ATTR_NAME = ATTR_NAME @@ -438,7 +485,7 @@ BattleConst.BUFF_NAME_TO_ATTR = { [BUFF_NAME.THORNS] = {ATTR_NAME.THORNS, false}, [BUFF_NAME.FIRST_HAND] = {ATTR_NAME.FIRST_HAND, false}, [BUFF_NAME.COUNTER_ATTACK] = {ATTR_NAME.COUNTER_ATTACK, false}, - [BUFF_NAME.SKILL_HURT_ADD] = {ATTR_NAME.SKILL_HURT, false}, + [BUFF_NAME.SKILL_HURT_ADD] = {ATTR_NAME.SKILL_HURTP, false}, [BUFF_NAME.END_DMG_ADDITION_ALL_ADD] = {ATTR_NAME.END_DMG_ADDITION_ALL, false}, [BUFF_NAME.END_DMG_DEC_ALL_ADD] = {ATTR_NAME.END_DMG_DEC_ALL, false}, } diff --git a/lua/app/module/battle/helper/battle_formula.lua b/lua/app/module/battle/helper/battle_formula.lua index ca2d05a3..464da1ee 100644 --- a/lua/app/module/battle/helper/battle_formula.lua +++ b/lua/app/module/battle/helper/battle_formula.lua @@ -15,16 +15,31 @@ function BattleFormula:getDamageOrCureResult(unitComp, buff, targetUnitComp) end BattleFormula.calculateFormula = { - -- (攻击)*技能倍率*(1+(攻击者元素伤害增加+所有伤害增加)(攻击者)- (攻击者元素伤害降低+所有伤害降低) +(受到元素伤害增加+受到所有伤害增加(受击)-受到元素伤害降低-受到所有伤害降低(受击) + 主动技能增伤)*暴击伤害*(1-最终造成伤害降低%+最终造成伤害增加%) + -- ((攻击)*技能倍率*(1+(攻击者元素伤害增加+所有伤害增加)(攻击者)- (攻击者元素伤害降低+所有伤害降低) +(受到元素伤害增加+受到所有伤害增加(受击)-受到元素伤害降低-受到所有伤害降低(受击) + 主动技能增伤) + 固定值) *暴击伤害*(1-最终造成伤害降低%+最终造成伤害增加%) [1] = function(unitComp, buff, targetUnit) - local skillHurtAdd = 0 + local skillFixedAdd = 0 + local skillPAdd = 0 local hostSkill = buff:getHostSkill() - if hostSkill and hostSkill:getIsActiveType() and unitComp.unitEntity:getSkillHurt() > 0 then -- 是主动技能携带的buff,且拥有技能伤害加成 - skillHurtAdd = unitComp.unitEntity:getSkillHurt() + if hostSkill then -- 技能伤害加成 + if hostSkill:getIsActiveType() then -- 主动技能 + skillFixedAdd = unitComp.unitEntity:getSkillHurtFixed() + skillPAdd = unitComp.unitEntity:getSkillHurtP() + elseif hostSkill:getIsNormalType() then -- 普攻 + skillFixedAdd = unitComp.unitEntity:getNormalSkillHurtFixed() + skillPAdd = unitComp.unitEntity:getNormalSkillHurtP() + end end - local matchType = unitComp.unitEntity:getMatchType() - local result = unitComp.unitEntity:getAtk() * buff:getEffectNum() // DEFAULT_FACTOR * - (DEFAULT_FACTOR + unitComp.unitEntity:getDmgAddition() - unitComp.unitEntity:getDmgDec() + targetUnit.unitEntity:getWeakness(matchType) - targetUnit.unitEntity:getDecDmg(matchType) + skillHurtAdd) // DEFAULT_FACTOR + + local result = unitComp.unitEntity:getAtk() * buff:getEffectNum() -- 基础值(攻击 * 技能倍率) + result = result * (DEFAULT_FACTOR + + unitComp.unitEntity:getDmgAddition() -- (攻击者元素伤害增加 + 所有伤害增加) + - unitComp.unitEntity:getDmgDec() -- (攻击者元素伤害降低 + 所有伤害降低) + + targetUnit.unitEntity:getWeakness() -- (受击者受到元素伤害增加 + 受到所有伤害增加) + - targetUnit.unitEntity:getDecDmg() -- (受击者受到元素伤害降低 + 受到所有伤害降低) + + skillPAdd) // DEFAULT_FACTOR -- 技能增伤百分比 + result = result + skillFixedAdd -- 固定值 + + -- 暴击 local hurtState = 0 local crit = unitComp.unitEntity:getCrit() if crit > 0 then @@ -49,9 +64,8 @@ BattleFormula.calculateFormula = { end, -- 释放者攻击*技能系数*(1+(攻击者元素伤害增加+所有伤害增加-攻击者元素伤害降低-所有伤害降低+受到元素伤害增加+受到所有伤害增加(受击)-受到元素伤害降低-受到所有伤害降低(受击)) [4] = function(unitComp, buff, targetUnit) - local matchType = unitComp.unitEntity:getMatchType() local result = unitComp.unitEntity:getAtk() * buff:getEffectNum() // DEFAULT_FACTOR * - (DEFAULT_FACTOR + unitComp.unitEntity:getDmgAddition() - unitComp.unitEntity:getDmgDec() + targetUnit.unitEntity:getWeakness(matchType) - targetUnit.unitEntity:getDecDmg(matchType)) // DEFAULT_FACTOR + (DEFAULT_FACTOR + unitComp.unitEntity:getDmgAddition() - unitComp.unitEntity:getDmgDec() + targetUnit.unitEntity:getWeakness() - targetUnit.unitEntity:getDecDmg()) // DEFAULT_FACTOR return result, 0 end, } diff --git a/lua/app/userdata/battle/battle_base_data.lua b/lua/app/userdata/battle/battle_base_data.lua index 0951f480..e50bc7fd 100644 --- a/lua/app/userdata/battle/battle_base_data.lua +++ b/lua/app/userdata/battle/battle_base_data.lua @@ -671,7 +671,7 @@ function BattleBaseData:initHeroData(formation) for matchType, heroEntity in pairs(formation) do heroEntity:getAllAttr() local skillId = heroEntity:getBaseSkill() - local hp = heroEntity:getAttrValue(ATTR_NAME.HP) // DEFAULT_FACTOR + local hp = heroEntity:getHp() // DEFAULT_FACTOR local unitData = { id = heroEntity:getCfgId(), modelId = heroEntity:getModelId(), @@ -682,14 +682,49 @@ function BattleBaseData:initHeroData(formation) attr = { hp = hp, max_hp = hp, - atk = 0, - atk_red = heroEntity:getAttrValue(ATTR_NAME.ATK_RED) // DEFAULT_FACTOR, - atk_yellow = heroEntity:getAttrValue(ATTR_NAME.ATK_YELLOW) // DEFAULT_FACTOR, - atk_green = heroEntity:getAttrValue(ATTR_NAME.ATK_GREEN) // DEFAULT_FACTOR, - atk_blue = heroEntity:getAttrValue(ATTR_NAME.ATK_BLUE) // DEFAULT_FACTOR, - atk_purple = heroEntity:getAttrValue(ATTR_NAME.ATK_PURPLE) // DEFAULT_FACTOR, } } + + ---- 攻击力 + for matchType, attrName in pairs(GConst.MATCH_ATTACK_NAME) do + unitData.attr[attrName] = heroEntity:getAttrValue(attrName) + end + + ---- 暴击率 + for matchType, attrName in pairs(GConst.MATCH_CRIT_NAME) do + unitData.attr[attrName] = heroEntity:getAttrValue(attrName) + end + + ---- 暴击伤害 + for matchType, attrName in pairs(GConst.MATCH_CRIT_TIME_NAME) do + unitData.attr[attrName] = heroEntity:getAttrValue(attrName) + end + + ---- 治疗效果 + for matchType, attrName in pairs(GConst.MATCH_CURED_NAME) do + unitData.attr[attrName] = heroEntity:getAttrValue(attrName) + end + + ---- 普攻增伤固定值 + for matchType, attrName in pairs(GConst.MATCH_NORMAL_HURT_NAME) do + unitData.attr[attrName] = heroEntity:getAttrValue(attrName) + end + + ---- 普攻增伤百分比 + for matchType, attrName in pairs(GConst.MATCH_NORMAL_HURTP_NAME) do + unitData.attr[attrName] = heroEntity:getAttrValue(attrName) + end + + ---- 技能增伤固定值 + for matchType, attrName in pairs(GConst.MATCH_SKILL_HURT_NAME) do + unitData.attr[attrName] = heroEntity:getAttrValue(attrName) + end + + ---- 技能增伤百分比 + for matchType, attrName in pairs(GConst.MATCH_SKILL_HURTP_NAME) do + unitData.attr[attrName] = heroEntity:getAttrValue(attrName) + end + local skillInfo = skillCfg[skillId] if skillInfo then if skillInfo.effect_type == 1 then -- 主动 diff --git a/lua/app/userdata/battle/team/battle_team_entity.lua b/lua/app/userdata/battle/team/battle_team_entity.lua index 183439b9..66648c1d 100644 --- a/lua/app/userdata/battle/team/battle_team_entity.lua +++ b/lua/app/userdata/battle/team/battle_team_entity.lua @@ -194,16 +194,19 @@ function BattleTeamEntity:getWeakness(matchType) return self:getAttrValue(ATTR_NAME.WEAKNESS_ALL) + self:getAttrValue(MATCH_WEAKNESS_NAME[matchType]) end -function BattleTeamEntity:getCrittime() - return self:getAttrValue(ATTR_NAME.CRIT_TIME) +function BattleTeamEntity:getCrittime(matchType) + local matchCritTime = self:getAttrValue(GConst.MATCH_CRIT_TIME_NAME[matchType]) + return self:getAttrValue(ATTR_NAME.CRIT_TIME) + matchCritTime end -function BattleTeamEntity:getCrit() - return self:getAttrValue(ATTR_NAME.CRIT) +function BattleTeamEntity:getCrit(matchType) + local matchCrit = self:getAttrValue(GConst.MATCH_CRIT_NAME[matchType]) + return self:getAttrValue(ATTR_NAME.CRIT) + matchCrit end -function BattleTeamEntity:getCureAddition() - return self:getAttrValue(ATTR_NAME.CURE_ADDITION) +function BattleTeamEntity:getCureAddition(matchType) + local matchAddtion = self:getAttrValue(GConst.MATCH_CURED_NAME[matchType]) + return self:getAttrValue(ATTR_NAME.CURE_ADDITION) + matchAddtion end function BattleTeamEntity:getCureDec() @@ -332,8 +335,25 @@ function BattleTeamEntity:getCounterAttack() return self:getAttrValue(ATTR_NAME.COUNTER_ATTACK) end -function BattleTeamEntity:getSkillHurt() - return self:getAttrValue(ATTR_NAME.SKILL_HURT) +function BattleTeamEntity:getSkillHurtP(matchType) + local skillHurtPName = GConst.MATCH_SKILL_HURTP_NAME[matchType] + return self:getAttrValue(ATTR_NAME.SKILL_HURTP) + self:getAttrValue(skillHurtPName) +end + +function BattleTeamEntity:getSkillHurtFixed(matchType) + local skillHurtName = GConst.MATCH_SKILL_HURT_NAME[matchType] + return self:getAttrValue(skillHurtName) +end + + +function BattleTeamEntity:getNormalSkillHurtP(matchType) + local skillHurtName = GConst.MATCH_NORMAL_HURTP_NAME[matchType] + return self:getAttrValue(skillHurtName) +end + +function BattleTeamEntity:getNormalSkillHurtFixed(matchType) + local skillHurtName = GConst.MATCH_NORMAL_HURT_NAME[matchType] + return self:getAttrValue(skillHurtName) end function BattleTeamEntity:takeDamageOrCure(num) diff --git a/lua/app/userdata/battle/team/battle_unit_entity.lua b/lua/app/userdata/battle/team/battle_unit_entity.lua index ede08bf0..2efb5668 100644 --- a/lua/app/userdata/battle/team/battle_unit_entity.lua +++ b/lua/app/userdata/battle/team/battle_unit_entity.lua @@ -295,24 +295,24 @@ function BattleUnitEntity:getDmgDec() return self.team:getDmgDec(self.unitData.matchType) end -function BattleUnitEntity:getDecDmg(matchType) - return self.team:getDecDmg(matchType) +function BattleUnitEntity:getDecDmg() + return self.team:getDecDmg(self.unitData.matchType) end -function BattleUnitEntity:getWeakness(matchType) - return self.team:getWeakness(matchType) +function BattleUnitEntity:getWeakness() + return self.team:getWeakness(self.unitData.matchType) end function BattleUnitEntity:getCrit() - return self.team:getCrit() + return self.team:getCrit(self.unitData.matchType) end function BattleUnitEntity:getCrittime() - return self.team:getCrittime() + return self.team:getCrittime(self.unitData.matchType) end function BattleUnitEntity:getCureAddition() - return self.team:getCureAddition() + return self.team:getCureAddition(self.unitData.matchType) end function BattleUnitEntity:getCureDec() @@ -355,8 +355,20 @@ function BattleUnitEntity:getCounterAttack() return self.team:getCounterAttack() end -function BattleUnitEntity:getSkillHurt() - return self.team:getSkillHurt() +function BattleUnitEntity:getSkillHurtP() + return self.team:getSkillHurtP(self.unitData.matchType) +end + +function BattleUnitEntity:getSkillHurtFixed() + return self.team:getSkillHurtFixed(self.unitData.matchType) +end + +function BattleUnitEntity:getNormalSkillHurtP() + return self.team:getNormalSkillHurtP(self.unitData.matchType) +end + +function BattleUnitEntity:getNormalSkillHurtFixed() + return self.team:getNormalSkillHurtFixed(self.unitData.matchType) end function BattleUnitEntity:addLimit(name, buffEffect) diff --git a/lua/app/userdata/hero/hero_entity.lua b/lua/app/userdata/hero/hero_entity.lua index 6bcd2eea..ee7a1867 100644 --- a/lua/app/userdata/hero/hero_entity.lua +++ b/lua/app/userdata/hero/hero_entity.lua @@ -134,12 +134,14 @@ function HeroEntity:getAttrValue(name) end function HeroEntity:getAtk() + local atkAddName = GConst.MATCH_ATTACK_ADD_NAME[self:getMatchType()] local atkName = GConst.MATCH_ATTACK_NAME[self:getMatchType()] - return self:getAttrValue(atkName) + return self:getAttrValue(atkName) + self:getAttrValue(atkAddName) end function HeroEntity:getHp() - return self:getAttrValue(GConst.BattleConst.ATTR_NAME.HP) + local atkAddName = GConst.MATCH_HP_ADD_NAME[self:getMatchType()] + return self:getAttrValue(GConst.BattleConst.ATTR_NAME.HP) + self:getAttrValue(atkAddName) end function HeroEntity:setDirty()