From dcf739d093c38ef7f72762973d50a5af78d7586f Mon Sep 17 00:00:00 2001 From: panw Date: Thu, 27 Nov 2025 10:19:54 +0800 Subject: [PATCH] =?UTF-8?q?refactor(=E6=88=98=E6=96=97=E7=B3=BB=E7=BB=9F):?= =?UTF-8?q?=20=E9=87=8D=E6=9E=84=E4=BC=A4=E5=AE=B3=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E5=B9=B6=E7=BB=9F=E4=B8=80=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=E5=91=BD=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将DAMAGE_REDUCTION统一重命名为DMG_RED以提高一致性 - 优化暴击判定逻辑,加入暴击抗性计算 - 重构伤害计算公式,整合易伤和免伤效果 - 移除冗余的calculateDamage方法 - 为枚举值添加注释说明 --- assets/script/game/common/config/HeroAttrs.ts | 24 +++++----- assets/script/game/common/config/TalSet.ts | 7 +-- assets/script/game/hero/HeroAtkSystem.ts | 46 +++++++------------ assets/script/game/hero/TalComp.ts | 4 +- 4 files changed, 33 insertions(+), 48 deletions(-) diff --git a/assets/script/game/common/config/HeroAttrs.ts b/assets/script/game/common/config/HeroAttrs.ts index ba91b434..bc717cc8 100644 --- a/assets/script/game/common/config/HeroAttrs.ts +++ b/assets/script/game/common/config/HeroAttrs.ts @@ -12,10 +12,10 @@ export enum BType { } export enum NeAttrs { - IN_FROST = 0, - IN_STUN = 1, - IN_BURN = 2, - IN_POISON = 3, + IN_FROST = 0, // 冰冻状态 + IN_STUN = 1, // 眩晕状态 + IN_BURN = 2, // 灼烧状态 + IN_POISON = 3, // 中毒状态 } // ========== 属性枚举 ========== @@ -48,7 +48,7 @@ export enum Attrs { MDEF = 21, // 魔法防御 DODGE = 22, // 闪避率 BLOCK = 23, // 格挡率 - DAMAGE_REDUCTION = 24, // 伤害减免 + DMG_RED = 24, // 伤害减免 THORNS = 25, // 反伤 CRITICAL_RESIST = 26, // 暴击抗性 CON_RES = 27, // 控制抗性 @@ -102,11 +102,9 @@ export enum Attrs { BURN = 75, // 易伤效果 WFUNY = 77, // 风怒 - // ========== 生存与恢复相关 (80-89) ========== - - // ========== 负面状态相关 (90-99) ========== - - // ========== 基础属性(影响其他属性)(100-104) ========== + // ========== 负面状态相关 (80-89) ========== + DMG_INVUL = 80, //易伤 + // ========== 基础属性(影响其他属性) (90-99)========== STRENGTH = 90, // 力量(影响物理相关) INTELLIGENCE = 91, // 智力(影响魔法相关) AGILITY = 92, // 敏捷(影响速度和闪避) @@ -173,7 +171,7 @@ export const AttrsType: Record = { [Attrs.MDEF]: BType.VALUE, // 魔法防御 - 数值型 [Attrs.DODGE]: BType.RATIO, // 闪避率 - 百分比型 [Attrs.BLOCK]: BType.RATIO, // 格挡率 - 百分比型 - [Attrs.DAMAGE_REDUCTION]: BType.RATIO, // 伤害减免 - 百分比型 + [Attrs.DMG_RED]: BType.RATIO, // 伤害减免 - 百分比型 [Attrs.THORNS]: BType.RATIO, // 反伤 - 百分比型 // ========== 暴击与命中属性(百分比型) ========== @@ -227,9 +225,9 @@ export const AttrsType: Record = { [Attrs.BURN]: BType.RATIO, // 易伤效果 - 百分比型 [Attrs.WFUNY]: BType.RATIO, // 未知特殊属性 - 百分比型 - // ========== 生存与恢复相关(混合类型) ========== - + // ========== 负面状态相关(混合类型) ========== + [Attrs.DMG_INVUL]: BType.RATIO, //易伤 // ========== 基础属性(数值型) ========== [Attrs.STRENGTH]: BType.VALUE, // 力量 - 数值型 diff --git a/assets/script/game/common/config/TalSet.ts b/assets/script/game/common/config/TalSet.ts index 54949b0c..7d4a4f21 100644 --- a/assets/script/game/common/config/TalSet.ts +++ b/assets/script/game/common/config/TalSet.ts @@ -28,7 +28,7 @@ export enum TalEffet { WFUNY=7, // 风怒 D_SKILL=8, //两次技能 SHIELD=9, // 护盾 - DAMAGE_REDUCTION=10, // 减伤 + DMG_RED=10, // 减伤 C_MSKILL=11, // 必杀技能必暴 C_ATK=12, // 普工必爆 C_SKILL=13, // 一般技能必暴 @@ -47,7 +47,8 @@ export enum TalAttrs { SILENCE_CHANCE=Attrs.SILENCE_CHANCE, // 沉默概率 CRITICAL=Attrs.CRITICAL, // 暴击率 AP=Attrs.AP, // 攻击力 - MP=Attrs.MAP, // 魔法 + MP=Attrs.MAP, // 魔法攻击力 + DMG_RED=Attrs.DMG_RED, // 魔法防御 } /** * 天赋配置接口 @@ -111,7 +112,7 @@ export const talConf: Record = { desc:"被攻击3次后, 给于目标50%的伤害"}, 7102:{uuid:7102,name:"护盾",triType:TriType.DMG,Trigger:3,count:1,target:TalTarget.SELF,effet:TalEffet.SHIELD,vType:BType.RATIO, value:20,attrs:TalAttrs.NON, desc:"被攻击3次后, 获得20%的生命值护盾"}, - 7103:{uuid:7103,name:"减伤",triType:TriType.DMG,Trigger:3,count:1,target:TalTarget.ENEMY,effet:TalEffet.DAMAGE_REDUCTION,vType:BType.RATIO, value:50,attrs:TalAttrs.NON, + 7103:{uuid:7103,name:"减伤",triType:TriType.DMG,Trigger:3,count:1,target:TalTarget.ENEMY,effet:TalEffet.DMG_RED,vType:BType.RATIO, value:50,attrs:TalAttrs.DMG_RED, desc:"被攻击3次后, 下1次伤害减50%"}, diff --git a/assets/script/game/hero/HeroAtkSystem.ts b/assets/script/game/hero/HeroAtkSystem.ts index 06dbd931..8b5c42d7 100644 --- a/assets/script/game/hero/HeroAtkSystem.ts +++ b/assets/script/game/hero/HeroAtkSystem.ts @@ -154,10 +154,9 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpd return reDate; } // 暴击判定 - // 使用施法者的暴击率属性(damageEvent.Attrs 快照) - const isCrit = this.checkChance(damageEvent.Attrs[Attrs.CRITICAL]); - if (isCrit) attackerModel?.useValueTalByAttr(Attrs.CRITICAL); // 清除施法者的暴击buff - // 计算伤害 + // 使用施法者的暴击率属性(damageEvent.Attrs 快照),- 被攻击者的暴击抗性属性targetAttrs.Attrs[Attrs.CRITICAL_RESIST] + const isCrit = this.checkChance(damageEvent.Attrs[Attrs.CRITICAL]-targetAttrs.Attrs[Attrs.CRITICAL_RESIST]); + // 计算基础伤害 let damage = this.dmgCount(damageEvent,targetAttrs); if (isCrit) { // 暴击伤害计算 @@ -166,9 +165,9 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpd const casterCritDmg = damageEvent.Attrs[Attrs.CRITICAL_DMG] || 0; damage = Math.floor(damage * (1 + (FightSet.CRIT_DAMAGE + casterCritDmg) / 100)); reDate.isCrit=true; + attackerModel?.useValueTalByAttr(Attrs.CRITICAL); // 清除施法者的暴击buff + } - // 伤害计算(考虑易伤等debuff) - damage = this.calculateDamage(targetAttrs, damage); // 护盾吸收 damage =Math.floor(this.absorbShield(targetAttrs, damage)) if (damage <= 0) return reDate; @@ -253,6 +252,8 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpd let apAfter = Math.floor(apBase * (1 - apRed)); // 物理伤害 - 防御减免 let mapAfter = Math.floor(mapBase * (1 - mapRed)); // 魔法伤害 - 防御减免 + + // 6. 应用物理/魔法攻击力和抗性修正 // 物理伤害修正:基础伤害 * (1 + 物理攻击力加成%) * (1 - 目标物理抗性%) apAfter = this.applyPR(apAfter, CAttrs[Attrs.PHYS_POWER]||0, TAttrs[Attrs.PHYS_RES]||0); @@ -277,12 +278,15 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpd // 8. 计算最终总伤害(物理伤害 + 魔法伤害) let total = apAfter + mapAfter; - // 9. 计算免伤 - let DMG_RED = TAttrs[Attrs.DAMAGE_REDUCTION]||0+TAttrsComp.useCountValTal(Attrs.DAMAGE_REDUCTION); - // 10. 应用最终伤害减免效果(如特殊天赋、buff等提供的减免) - total = Math.floor(total * (1 - ((TAttrs[Attrs.DAMAGE_REDUCTION]||0)/100))); - - // 11. 确保伤害值非负,返回最终伤害 + //9.1 易伤 + let DMG_INVUL = TAttrs[Attrs.DMG_INVUL]||0 + //9.2 免伤 属性免伤+天赋免伤 + let DMG_RED =TAttrs[Attrs.DMG_RED]||0+TAttrsComp.useCountValTal(Attrs.DMG_RED); + // 10. 确保伤害值非负,返回最终伤害 + total = Math.max(0,total); + //11. 易伤减免 免伤属性免伤+天赋免伤 + total = Math.floor(total * (1 + ((DMG_INVUL-DMG_RED)/100))); + return Math.max(0,total); } @@ -382,24 +386,6 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpd return r < rate; } - /** - * 伤害计算(考虑易伤等debuff) - * - * 预留的伤害计算扩展点,用于处理: - * - 被攻击者的易伤状态(增加受到伤害) - * - 被攻击者的伤害减免状态(减少受到伤害) - * - 元素抗性计算 - * - 真实伤害/魔法伤害/物理伤害的类型区分 - * - * @param model 被攻击者的属性组件(包含抗性、易伤等状态) - * @param baseDamage 基础伤害值 - * @returns 最终伤害值(经过各种加成和减免后的结果) - */ - private calculateDamage(model: HeroAttrsComp, baseDamage: number): number { - // 这里可以添加易伤等debuff的计算逻辑 - // 例如:如果目标有易伤buff,增加受到的伤害 - return baseDamage; - } /** * 护盾吸收伤害 diff --git a/assets/script/game/hero/TalComp.ts b/assets/script/game/hero/TalComp.ts index f4f9b325..425e5175 100644 --- a/assets/script/game/hero/TalComp.ts +++ b/assets/script/game/hero/TalComp.ts @@ -208,8 +208,8 @@ export class TalComp extends ecs.Comp { case TalEffet.SKILL_DMG: heroAttrs.addCountTal(TalEffet.SKILL_DMG, talent.value + talent.value_add); break; - case TalEffet.DAMAGE_REDUCTION: - heroAttrs.addCountTal(TalEffet.DAMAGE_REDUCTION, talent.value + talent.value_add); + case TalEffet.DMG_RED: + heroAttrs.addCountTal(TalEffet.DMG_RED, talent.value + talent.value_add); break; case TalEffet.HP: heroAttrs.add_hp(talent.value + talent.value_add,talent.vType == BType.VALUE);