feat(heroBox): 实现当前等级技能描述面板功能

1. 新增SkillDescSet结构化技能描述配置表,实现配置驱动的文案生成
2. 改造HeroSkillDesc生成器,支持静态heroInfo和运行时HeroAttrsComp两种数据源
3. 为HeroAttrsComp新增evolve配置快照字段,用于展示等级成长属性
4. 在HeroBoxComp中集成技能描述UI组件,动态渲染当前英雄等级的技能效果
5. 新增设计文档说明方案细节,确保可维护性和可扩展性
This commit is contained in:
panFD
2026-07-30 22:30:26 +08:00
parent 8fa54e894a
commit 04f39217ac
7 changed files with 448 additions and 102 deletions

View File

@@ -0,0 +1,102 @@
/**
* @file SkillDescSet.ts
* @description 技能描述结构化配置表(方案 B独立描述表纯 UI 用)
*
* 职责:
* 为触发技能提供"结构化字段 + 占位符模板",供 HeroSkillDesc.buildSkillDesc
* 在合并 overrides 后动态拼出效果文案。杜绝 SkillConfig.info 写死数值导致的
* "改数值忘改文案"漂移。
*
* 关键设计:
* - 与 SkillSet 同 keyskill uuid但只覆盖需要描述的触发技能
* 普攻/怪物技能不入表,由生成器回退旧 info 兜底。
* - 数值永远从 mergeSkillParams 后的实时 skill 取值permField/timedField
* overrides 改了数值,文案自动同步。
* - 永久模式overrides 直接改写 ap 等与计时模式overrides 走 timed_buff_id
* 分别用 templPerm / templTimed 两套模板。
*
* 模板占位符:
* {target} 目标(自身/随机N名队友/全体友方/敌方)
* {value} 取值(来自 permField 或 timedField 指向的字段)
* {unit} 单位(""/%/次)
* {verb} 效果动词(攻击力/暴击率/护盾…)
* {dur} 持续时间秒数(计时模式用,取 buff_duration
*/
import { SkillOverrides } from "./SkillSet";
/**
* 单个技能的结构化描述配置
*/
export interface SkillDescConfig {
/** 效果动词,如 "攻击力"/"暴击率"/"护盾" */
verb: string;
/** 单位,如 ""/"%"/"次" */
unit: string;
/** 永久模式取值字段overrides 直接改写的字段),通常 "ap" */
permField: keyof SkillOverrides;
/** 计时模式取值字段overrides 走 timed_buff_id 时),通常 "buff_value" */
timedField?: keyof SkillOverrides;
/** 永久模式文案模板 */
templPerm: string;
/** 计时模式文案模板(含 {dur}),不填则该技能不支持计时模式 */
templTimed?: string;
}
/**
* 技能描述表key = SkillSet 的技能 uuid
* 首批覆盖现役英雄涉及的触发技能;未入表技能由生成器回退 skill.info
*/
export const SkillDescSet: Record<number, SkillDescConfig> = {
// 6301 护盾ap = 可格挡次数
6301: {
verb: "", unit: "次", permField: "ap",
templPerm: "{target}获得{value}{unit}格挡护盾",
},
// 6302 治疗ap = 攻击力百分比
6302: {
verb: "", unit: "", permField: "ap",
templPerm: "{target}回复攻击力{value}%生命",
},
// 6401 攻击强化:永久 ap=攻击点;计时 buff_value=攻击点
6401: {
verb: "攻击力", unit: "", permField: "ap", timedField: "buff_value",
templPerm: "{target}{verb}+{value}",
templTimed: "{target}{verb}+{value},持续{dur}秒",
},
// 6402 生命强化ap = 最大生命点
6402: {
verb: "最大生命", unit: "", permField: "ap",
templPerm: "{target}{verb}+{value}",
},
// 6403 暴击强化:永久 ap=暴击%;计时 buff_value=暴击%
6403: {
verb: "暴击率", unit: "%", permField: "ap", timedField: "buff_value",
templPerm: "{target}{verb}+{value}{unit}",
templTimed: "{target}{verb}+{value}{unit},持续{dur}秒",
},
// 6404 暴伤强化ap = 暴击伤害%
6404: {
verb: "暴击伤害", unit: "%", permField: "ap",
templPerm: "{target}{verb}+{value}{unit}",
},
// 6405 击晕强化ap = 击晕概率%
6405: {
verb: "击晕概率", unit: "%", permField: "ap",
templPerm: "{target}{verb}+{value}{unit}",
},
// 6408 穿刺强化ap = 穿刺概率%
6408: {
verb: "穿刺概率", unit: "%", permField: "ap",
templPerm: "{target}{verb}+{value}{unit}",
},
// 6409 风怒强化ap = 风怒次数
6409: {
verb: "风怒次数", unit: "次", permField: "ap",
templPerm: "{target}{verb}+{value}{unit}",
},
// 6501 复活ap = 复活生命值百分比
6501: {
verb: "", unit: "", permField: "ap",
templPerm: "{target}以{value}%生命复活",
},
};