Files
pixelheros/assets/script/game/common/config/SkillDescSet.ts
panFD 4e66184c5e refactor(skill-config): 重构技能ID与分组,统一技能命名规范
1.  重新规划技能ID分段:坦克/战士大招6100~6104、射手大招6150~6151、法师/辅助大招6200~6204
2.  更新所有英雄配置中的技能UUID与描述文本
3.  修正技能配置文档中的适配场景与约束说明
4.  调整技能描述模板与示例配置,统一伤害计算逻辑
2026-08-21 08:43:34 +08:00

271 lines
11 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 同 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 { 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}{unit}",
templTimed: "{target}{verb}+{value}{unit}, 持续{dur}秒",
},
// 6402 生命强化:ap = 最大生命%
6402: {
verb: "最大生命", unit: "%", permField: "ap",
templPerm: "{target}{verb}永久+{value}{unit}",
},
// 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}%生命复活",
},
// ==================== 技能商店单体攻击卡(6001-6012):ap = 攻击力%伤害 ====================
// 注:暴击/冰冻/击晕/击退等附加概率由 buildCardDescRich 扫描 crt/frz/stun/bck 动态追加,不在模板写死
6001: {
verb: "", unit: "%", permField: "ap",
templPerm: "造成攻击力{value}{unit}的伤害",
},
6002: {
verb: "", unit: "%", permField: "ap",
templPerm: "造成攻击力{value}{unit}的伤害",
},
6003: {
verb: "", unit: "%", permField: "ap",
templPerm: "造成攻击力{value}{unit}的伤害",
},
6004: {
verb: "", unit: "%", permField: "ap",
templPerm: "造成攻击力{value}{unit}的伤害",
},
6006: {
verb: "", unit: "%", permField: "ap",
templPerm: "造成攻击力{value}{unit}的伤害",
},
6007: {
verb: "", unit: "%", permField: "ap",
templPerm: "造成攻击力{value}{unit}的伤害",
},
6008: {
verb: "", unit: "%", permField: "ap",
templPerm: "造成攻击力{value}{unit}的伤害",
},
6009: {
verb: "", unit: "%", permField: "ap",
templPerm: "造成攻击力{value}{unit}的伤害",
},
6010: {
verb: "", unit: "%", permField: "ap",
templPerm: "造成攻击力{value}{unit}的伤害",
},
6011: {
verb: "", unit: "%", permField: "ap",
templPerm: "造成攻击力{value}{unit}的伤害",
},
6012: {
verb: "", unit: "%", permField: "ap",
templPerm: "造成攻击力{value}{unit}的伤害",
},
// ==================== 技能商店中阶攻击卡(6200-6201):ap = 攻击力%伤害 ====================
6200: {
verb: "", unit: "%", permField: "ap",
templPerm: "造成攻击力{value}{unit}的伤害",
},
6201: {
verb: "", unit: "%", permField: "ap",
templPerm: "造成攻击力{value}{unit}的伤害",
},
// ==================== 法师/辅助群体大招(6202-6204):ap = 攻击力%伤害 ====================
// 注:暴击/冰冻/击晕/击退等附加概率由 buildCardDescRich 扫描 crt/frz/stun/bck 动态追加,不在模板写死
6202: {
verb: "", unit: "%", permField: "ap",
templPerm: "造成攻击力{value}{unit}的伤害",
},
6203: {
verb: "", unit: "%", permField: "ap",
templPerm: "造成攻击力{value}{unit}的伤害",
},
6204: {
verb: "", unit: "%", permField: "ap",
templPerm: "造成攻击力{value}{unit}的伤害",
},
// ==================== 计时性强化技能(6502-6511,药水底座,走 timed_buff_id) ====================
// 数值取自 BuffList 默认修饰值或药水卡 overrides.buff_value,持续时间取 BuffList.duration
6502: {
verb: "", unit: "", permField: "ap", timedField: "buff_value",
templPerm: "{target}回复生命",
templTimed: "{target}每秒回复{value}点生命,持续{dur}秒",
},
6503: {
verb: "攻击力提升", unit: "%", permField: "ap", timedField: "buff_value",
templPerm: "{target}{verb}{value}{unit}",
templTimed: "{target}{verb}{value}{unit},持续{dur}秒",
},
6504: {
verb: "暴击率提升", unit: "%", permField: "ap", timedField: "buff_value",
templPerm: "{target}{verb}{value}{unit}",
templTimed: "{target}{verb}{value}{unit},持续{dur}秒",
},
6505: {
verb: "击退距离提升", unit: "", permField: "ap", timedField: "buff_value",
templPerm: "{target}{verb}{value}{unit}",
templTimed: "{target}{verb}{value}{unit},持续{dur}秒",
},
6506: {
verb: "穿透概率提升", unit: "%", permField: "ap", timedField: "buff_value",
templPerm: "{target}{verb}{value}{unit}",
templTimed: "{target}{verb}{value}{unit},持续{dur}秒",
},
6507: {
verb: "攻击速度提升", unit: "%", permField: "ap", timedField: "buff_value",
templPerm: "{target}{verb}{value}{unit}",
templTimed: "{target}{verb}{value}{unit},持续{dur}秒",
},
6508: {
verb: "风怒概率提升", unit: "%", permField: "ap", timedField: "buff_value",
templPerm: "{target}{verb}{value}{unit}",
templTimed: "{target}{verb}{value}{unit},持续{dur}秒",
},
6509: {
verb: "击晕概率提升", unit: "%", permField: "ap", timedField: "buff_value",
templPerm: "{target}{verb}{value}{unit}",
templTimed: "{target}{verb}{value}{unit},持续{dur}秒",
},
6510: {
verb: "击晕抗性提升", unit: "%", permField: "ap", timedField: "buff_value",
templPerm: "{target}{verb}{value}{unit}",
templTimed: "{target}{verb}{value}{unit},持续{dur}秒",
},
6511: {
verb: "冰冻抗性提升", unit: "%", permField: "ap", timedField: "buff_value",
templPerm: "{target}{verb}{value}{unit}",
templTimed: "{target}{verb}{value}{unit},持续{dur}秒",
},
};
/**
* 驻场光环数值格式:比例型(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。
* 数值取配置处词条(FieldEntry.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.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.HeroHp]: { verb: "全体最大生命", fmt: FieldValueFmt.Percent },
[FieldSkillType.HeroWindFury]: { verb: "全体风怒概率", fmt: FieldValueFmt.Percent },
[FieldSkillType.HeroPuncture]: { verb: "全体穿刺概率", fmt: FieldValueFmt.Percent },
[FieldSkillType.HeroPunctureDmg]: { verb: "全体穿透后伤害", fmt: FieldValueFmt.Percent },
[FieldSkillType.AtkCount]: { verb: "攻击触发技能次数", fmt: FieldValueFmt.Int },
[FieldSkillType.BeAtkCount]: { verb: "被攻击触发技能次数", fmt: FieldValueFmt.Int },
};