1. 新增SkillDescSet结构化技能描述配置表,实现配置驱动的文案生成 2. 改造HeroSkillDesc生成器,支持静态heroInfo和运行时HeroAttrsComp两种数据源 3. 为HeroAttrsComp新增evolve配置快照字段,用于展示等级成长属性 4. 在HeroBoxComp中集成技能描述UI组件,动态渲染当前英雄等级的技能效果 5. 新增设计文档说明方案细节,确保可维护性和可扩展性
103 lines
4.0 KiB
TypeScript
103 lines
4.0 KiB
TypeScript
/**
|
||
* @file SkillDescSet.ts
|
||
* @description 技能描述结构化配置表(方案 B:独立描述表,纯 UI 用)
|
||
*
|
||
* 职责:
|
||
* 为触发技能提供"结构化字段 + 占位符模板",供 HeroSkillDesc.buildSkillDesc
|
||
* 在合并 overrides 后动态拼出效果文案。杜绝 SkillConfig.info 写死数值导致的
|
||
* "改数值忘改文案"漂移。
|
||
*
|
||
* 关键设计:
|
||
* - 与 SkillSet 同 key(skill 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}%生命复活",
|
||
},
|
||
};
|