307 lines
12 KiB
TypeScript
307 lines
12 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 { 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}%生命复活",
|
||
},
|
||
|
||
// ==================== 技能商店单体攻击卡(6001-6016):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}的伤害",
|
||
},
|
||
6005: {
|
||
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}的伤害",
|
||
},
|
||
6013: {
|
||
verb: "", unit: "%", permField: "ap",
|
||
templPerm: "造成攻击力{value}{unit}的伤害",
|
||
},
|
||
6014: {
|
||
verb: "", unit: "%", permField: "ap",
|
||
templPerm: "造成攻击力{value}{unit}的伤害",
|
||
},
|
||
6015: {
|
||
verb: "", unit: "%", permField: "ap",
|
||
templPerm: "造成攻击力{value}{unit}的伤害",
|
||
},
|
||
6016: {
|
||
verb: "", unit: "%", permField: "ap",
|
||
templPerm: "造成攻击力{value}{unit}的伤害",
|
||
},
|
||
// ==================== 技能商店中阶攻击卡(6101-6102):ap = 攻击力%伤害 ====================
|
||
6101: {
|
||
verb: "", unit: "%", permField: "ap",
|
||
templPerm: "造成攻击力{value}{unit}的伤害",
|
||
},
|
||
6102: {
|
||
verb: "", unit: "%", permField: "ap",
|
||
templPerm: "造成攻击力{value}{unit}的伤害",
|
||
},
|
||
|
||
// ==================== 技能商店范围攻击卡(6201-6206):ap = 单段伤害 ====================
|
||
// 注:暴击/冰冻/击晕/击退等附加概率由 buildCardDescRich 扫描 crt/frz/stun/bck 动态追加,不在模板写死
|
||
6201: {
|
||
verb: "", unit: "", permField: "ap",
|
||
templPerm: "每段造成{value}点伤害",
|
||
},
|
||
6202: {
|
||
verb: "", unit: "", permField: "ap",
|
||
templPerm: "每段造成{value}点伤害",
|
||
},
|
||
6203: {
|
||
verb: "", unit: "", permField: "ap",
|
||
templPerm: "每段造成{value}点伤害",
|
||
},
|
||
6204: {
|
||
verb: "", unit: "", permField: "ap",
|
||
templPerm: "每段造成{value}点伤害",
|
||
},
|
||
6205: {
|
||
verb: "", unit: "", permField: "ap",
|
||
templPerm: "每段造成{value}点伤害",
|
||
},
|
||
6206: {
|
||
verb: "", unit: "", permField: "ap",
|
||
templPerm: "每段造成{value}点伤害",
|
||
},
|
||
|
||
// ==================== 计时性强化技能(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。
|
||
* 数值永远取 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 },
|
||
};
|