feat: 新增暴击抗性和冰冻抗性属性并完善暴击冰冻判定

1.  在HeroAttrs枚举中新增critical_res和freeze_res属性
2.  在HeroAttrsComp中添加对应抗性属性并在重置方法中初始化
3.  修改暴击和冰冻判定逻辑,加入抗性减免计算
This commit is contained in:
walkpan
2026-05-14 22:53:15 +08:00
parent fdc5979484
commit e194132731
4 changed files with 11 additions and 3 deletions

View File

@@ -3,4 +3,5 @@ alwaysApply: true
scene: git_message
---
在此处编写规则,自定义 AI 生成提交信息的风格。
采用中文提交信息

View File

@@ -24,9 +24,11 @@ export enum Attrs {
// ==================== 暴击与命中属性 ====================
critical = "critical", // 暴击率
critical_damage = "critical_damage", // 暴击伤害
critical_res = "critical_res", // 暴击抗性
// ==================== 特殊效果属性 ====================
freeze_chance = "freeze_chance", // 冰冻概率
freeze_res = "freeze_res", // 冰冻抗性
knockback_chance = "knockback_chance", // 击退概率
knockback_distance = "knockback_distance", // 击退距离强化
knockback_res = "knockback_res", // 击退抗性

View File

@@ -135,7 +135,8 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpd
// 暴击判定
// 使用施法者的暴击率属性damageEvent.Attrs 快照),- 被攻击者的暴击抗性属
const isCrit = this.checkChance(damageEvent.Attrs[Attrs.critical]);
const criticalChance = (damageEvent.Attrs[Attrs.critical] || 0) - (TAttrsComp.critical_res || 0);
const isCrit = this.checkChance(criticalChance);
// 计算基础伤害
let damage = this.dmgCount(damageEvent,TAttrsComp);
@@ -189,7 +190,7 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpd
mLogger.log(this.debugMode, 'HeroAtkSystem', ` 英雄${TAttrsComp.hero_name} (uuid: ${TAttrsComp.hero_uuid}) 受到 eid:${casterEid} 的 伤害 ${damage},${isCrit?"暴击":"普通"}攻击,技能ID ${damageEvent.s_uuid}`);
// 冰冻判定
const freezeChance = damageEvent.Attrs[Attrs.freeze_chance] || 0;
const freezeChance = (damageEvent.Attrs[Attrs.freeze_chance] || 0) - (TAttrsComp.freeze_res || 0);
const isFrost = !TAttrsComp.isFrost() && this.checkChance(freezeChance);
// 击退判定

View File

@@ -42,7 +42,9 @@ export class HeroAttrsComp extends ecs.Comp {
// ==================== 特殊属性 ====================
critical: number = 0; // 暴击率
critical_res: number = 0; // 暴击抗性
freeze_chance: number = 0; // 冰冻概率
freeze_res: number = 0; // 冰冻抗性
knockback_chance: number = 0; // 击退概率
knockback_distance: number = 0; // 击退距离强化
knockback_res: number = 0; // 击退抗性
@@ -299,7 +301,9 @@ export class HeroAttrsComp extends ecs.Comp {
this.atked = undefined;
this.revive = undefined;
this.critical = 0;
this.critical_res = 0;
this.freeze_chance = 0;
this.freeze_res = 0;
this.knockback_chance = 0;
this.knockback_distance = 0;
this.knockback_res = 0;