Files
pixelheros/assets/script/game/common/config/SkillDescSet.ts
pan eb4b370533 refactor: 重构击退机制,将概率改为距离增量
1. 调整近战默认攻击距离从150改为100
2. 将击退相关属性从概率改为击退距离增量,同步更新所有配置、UI显示和技能描述
3. 移除旧的击退概率判定逻辑,改为直接应用击退距离增量
4. 优化受击击退的处理流程,统一参数传递
2026-08-13 11:09:37 +08:00

308 lines
13 KiB
TypeScript
Raw Permalink 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}",
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。
* 数值取配置处词条(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.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.HeroPunctureDmg]: { verb: "全体穿透后伤害", fmt: FieldValueFmt.Percent },
[FieldSkillType.AtkCount]: { verb: "攻击触发技能次数", fmt: FieldValueFmt.Int },
[FieldSkillType.BeAtkCount]: { verb: "被攻击触发技能次数", fmt: FieldValueFmt.Int },
};