Files
pixelheros/assets/script/game/common/config/SkillDescSet.ts
panFD bf697906ae refactor(skilldesc): 重构技能描述渲染逻辑,统一驻场光环展示
1.  调整英雄头像预制体的UI布局参数与文字颜色样式
2.  新增驻场光环描述配置表,标准化光环效果的文字与数值渲染
3.  重构技能描述生成逻辑,使用实时数值替代手写文案避免数值漂移
4.  修改富文本高亮色为深绿色以适配深色面板
2026-07-30 23:32:26 +08:00

151 lines
6.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* @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 { FieldSkillType, 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}%生命复活",
},
};
/**
* 驻场光环数值格式比例型value 0.1 → +10%或整数型value 1 → +1
*/
export enum FieldValueFmt {
/** 比例value*100 取整 + "%"(如 0.1 → "+10%" */
Percent = 1,
/** 整数:直接 +N如 1 → "+1" */
Int = 2,
/** 整数减:直接 -N如 1 → "-1",用于费用减免) */
IntMinus = 3,
}
/**
* 单个驻场光环的结构化描述配置(文字表达标准层统一称谓)
*/
export interface FieldDescConfig {
/** 效果动词,如 "英雄攻击力"/"召唤触发技能次数" */
verb: string;
/** 数值格式(决定 value 如何渲染为高亮片段) */
fmt: FieldValueFmt;
}
/**
* 驻场光环描述表key = FieldSkillType。
* 数值永远取 FieldSkillConfig.value 实时渲染,替代手写 info杜绝漂移。
*/
export const FieldDescSet: Record<number, FieldDescConfig> = {
[FieldSkillType.SummonCount]: { verb: "召唤触发技能次数", fmt: FieldValueFmt.Int },
[FieldSkillType.DeadCount]: { verb: "死亡触发技能次数", fmt: FieldValueFmt.Int },
[FieldSkillType.StartCount]: { verb: "战斗开始触发技能次数", fmt: FieldValueFmt.Int },
[FieldSkillType.EndCount]: { verb: "战斗结束触发技能次数", fmt: FieldValueFmt.Int },
[FieldSkillType.WaveGold]: { verb: "每回合金币收益", fmt: FieldValueFmt.Int },
[FieldSkillType.SellGold]: { verb: "卖出英雄金币", fmt: FieldValueFmt.Int },
[FieldSkillType.WaveHeal]: { verb: "战斗结束生命回复量", fmt: FieldValueFmt.Percent },
[FieldSkillType.HeroAtk]: { verb: "英雄攻击力", fmt: FieldValueFmt.Percent },
[FieldSkillType.HeroStun]: { verb: "英雄击晕概率", fmt: FieldValueFmt.Percent },
[FieldSkillType.HeroCrit]: { verb: "英雄暴击率", fmt: FieldValueFmt.Percent },
[FieldSkillType.HeroCritDamage]: { verb: "英雄暴击伤害", fmt: FieldValueFmt.Percent },
[FieldSkillType.HeroSpeed]: { verb: "英雄攻击速度", fmt: FieldValueFmt.Percent },
[FieldSkillType.BuyDiscount]: { verb: "购买卡牌费用", fmt: FieldValueFmt.IntMinus },
[FieldSkillType.RefreshDiscount]: { verb: "刷新卡牌费用", fmt: FieldValueFmt.IntMinus },
[FieldSkillType.HeroHp]: { verb: "英雄最大生命", fmt: FieldValueFmt.Percent },
[FieldSkillType.HeroWindFury]: { verb: "英雄风怒概率", fmt: FieldValueFmt.Percent },
[FieldSkillType.HeroPuncture]: { verb: "英雄穿刺概率", fmt: FieldValueFmt.Percent },
[FieldSkillType.AtkCount]: { verb: "攻击触发技能次数", fmt: FieldValueFmt.Int },
[FieldSkillType.BeAtkCount]: { verb: "被攻击触发技能次数", fmt: FieldValueFmt.Int },
};