feat: 新增闪避与命中属性系统,完善战斗判定逻辑

1.  新增全局默认闪避/命中率配置,为英雄和怪物提供缺省属性兜底
2.  扩展英雄属性组件,添加闪避、命中率属性与对应计算接口
3.  实现闪避判定逻辑,修正伤害流程,添加闪避提示效果
4.  新增闪避/命中相关buff、技能与光环配置
5.  完善属性值计算与 tooltip 显示逻辑
This commit is contained in:
panFD
2026-09-07 20:41:49 +08:00
parent 22fe31a769
commit aa488d55e7
11 changed files with 123 additions and 1 deletions

View File

@@ -134,6 +134,14 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpda
// 触发被攻击事件
this.onAttacked(target);
// 闪避判定(DoT 不参与):闪避率 = 目标闪避 − 施法者命中
if (!isDot && this.checkDodge(damageEvent, TAttrsComp)) {
smc.vmdata.scores.dod_count++;
targetView?.showMiss?.();
// 预留:闪避后触发技能(SkillTriggerType.Dodged)在此接入
return reDate;
}
// 暴击判定
// 使用施法者的暴击率属性(damageEvent.Attrs 快照)- 被攻击者的暴击抗性 + 目标出血层数附加的被暴击率
const criticalChance = (damageEvent.Attrs[Attrs.critical] || 0) - TAttrsComp.getFinalCriticalRes() + this.getBleedCritBonus(target);
@@ -528,6 +536,19 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpda
return (layers?.length ?? 0) * BLEED_CRIT_PER_STACK;
}
/**
* 闪避判定:闪避率 = 目标闪避 − 施法者命中,再按该值判定是否闪避。
* 命中未配置时(accuracy=0)闪避率 = 目标闪避,即无命中加成时闪避全额生效。
* @param damageEvent 伤害事件(含施法者属性快照)
* @param TAttrsComp 目标属性组件
* @returns true=闪避成功,false=命中
*/
private checkDodge(damageEvent: DamageEvent, TAttrsComp: HeroAttrsComp): boolean {
const dodgeChance = TAttrsComp.getFinalDodge() - (damageEvent.Attrs[Attrs.accuracy] || 0);
if (dodgeChance <= 0) return false;
return this.checkChance(dodgeChance);
}
/**
* 计算易伤附加伤害:汇总目标每层易伤 buff 的数值(value_override 优先),再被易伤抗性百分比减免。
* @returns 附加伤害值(向下取整,非负)