refactor(hero): 重构技能触发与属性系统,使用运行时解析缓存

1. 重构英雄属性组件,将静态配置与运行时缓存分离,新增runtime_前缀的运行时解析字段
2. 移除旧的evolve进化配置处理逻辑,改为通过等级解析器动态获取当前等级生效的技能与属性
3. 统一怪物与英雄的技能触发逻辑,均使用运行时缓存字段
4. 更新测试模式配置结构,适配新的分组+等级数组配置格式
5. 优化技能描述生成逻辑,支持新的等级配置结构
This commit is contained in:
pan
2026-08-04 16:46:59 +08:00
parent d0971ff72c
commit 57c7934571
10 changed files with 561 additions and 489 deletions

View File

@@ -1,5 +1,5 @@
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
import { HeroDisVal, HeroInfo, HSkillInfo, HType, SkillTriggerType, HeroEvolve } from "../common/config/heroSet";
import { HeroDisVal, HeroInfo, HSkillInfo, HType, SkillTriggerType, TriggerGrouped, LvFieldEntry, LvReviveEntry, LvBonusEntry } from "../common/config/heroSet";
import { mLogger } from "../common/Logger";
import { FacSet, FightSet } from "../common/config/GameSet";
import { FieldSkillSet, FieldSkillType, SkillOverrides } from "../common/config/SkillSet";
@@ -41,19 +41,37 @@ export class HeroAttrsComp extends ecs.Comp {
// ==================== 攻击属性 (补充) ====================
skills: Record<number, HSkillInfo> = {};
// ==================== 触发类技能 ====================
[SkillTriggerType.Call]?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[];
[SkillTriggerType.Dead]?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[];
[SkillTriggerType.FStart]?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[];
[SkillTriggerType.FEnd]?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[];
[SkillTriggerType.Atking]?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[];
[SkillTriggerType.Atked]?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[];
/** 驻场光环(FieldSkillSet uuid 列表,随 evolve 覆盖,存活期间全局生效) */
[SkillTriggerType.Field]?: number[];
[SkillTriggerType.Revive]?: { s_uuid: number, r_num: number, upr: number };
// ==================== 触发类技能(静态配置,按 s_uuid 分组 + lv 数组) ====================
[SkillTriggerType.Call]?: TriggerGrouped;
[SkillTriggerType.Dead]?: TriggerGrouped;
[SkillTriggerType.FStart]?: TriggerGrouped;
[SkillTriggerType.FEnd]?: TriggerGrouped;
[SkillTriggerType.Atking]?: TriggerGrouped;
[SkillTriggerType.Atked]?: TriggerGrouped;
/** 驻场光环(按 lv 解锁,存活期间全局生效) */
[SkillTriggerType.Field]?: LvFieldEntry[];
[SkillTriggerType.Revive]?: LvReviveEntry[];
/** 额外攻击/生命加成(按 lv 累加) */
ap_bonus?: LvBonusEntry[];
hp_bonus?: LvBonusEntry[];
/** 等级进化配置快照(引用 heroInfo.evolve只读供 UI 计算 ap/hp 额外加成文案) */
evolve?: Record<number, HeroEvolve>;
// ==================== 运行时解析缓存(按当前等级 resolve 后的有效列表) ====================
/** 当前等级下生效的攻击触发条目(供 SkillTriggerHelper 消费) */
runtime_atking?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[];
/** 当前等级下生效的受击触发条目 */
runtime_atked?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[];
/** 当前等级下生效的召唤触发条目 */
runtime_call?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[];
/** 当前等级下生效的死亡触发条目 */
runtime_dead?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[];
/** 当前等级下生效的战前触发条目 */
runtime_fstart?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[];
/** 当前等级下生效的战后触发条目 */
runtime_fend?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[];
/** 当前等级下生效的驻场光环 uuid 列表 */
runtime_field?: number[];
/** 当前等级下生效的复活配置 */
runtime_revive?: { s_uuid: number; r_num: number; upr: number };
// ==================== 特殊属性 ====================
critical: number = 0; // 暴击率
@@ -547,8 +565,18 @@ export class HeroAttrsComp extends ecs.Comp {
this.fend = undefined;
this.atking = undefined;
this.atked = undefined;
this.field = undefined;
this.revive = undefined;
this.evolve = undefined;
this.ap_bonus = undefined;
this.hp_bonus = undefined;
this.runtime_atking = undefined;
this.runtime_atked = undefined;
this.runtime_call = undefined;
this.runtime_dead = undefined;
this.runtime_fstart = undefined;
this.runtime_fend = undefined;
this.runtime_field = undefined;
this.runtime_revive = undefined;
this.critical = 0;
this.critical_res = 0;
this.freeze_chance = 0;