diff --git a/assets/script/game/common/config/HeroSkillDesc.ts b/assets/script/game/common/config/HeroSkillDesc.ts
index 44e21ca7..420d45aa 100644
--- a/assets/script/game/common/config/HeroSkillDesc.ts
+++ b/assets/script/game/common/config/HeroSkillDesc.ts
@@ -28,7 +28,7 @@
* - SkillDescSet:结构化描述模板
* - FieldSkillSet(驻场技能)、BuffList(计时 buff 默认值兜底)、Attrs(属性枚举)
*/
-import { SkillTriggerName, SkillTriggerType, TriggerGrouped, LvTriggerEntry, LvFieldEntry, LvReviveEntry, LvBonusEntry, resolveTriggerByLv, resolveFieldByLv, resolveReviveByLv } from "./heroSet";
+import { SkillTriggerName, SkillTriggerType, TriggerGrouped, LvTriggerEntry, LvFieldEntry, LvReviveEntry, LvBonusEntry, resolveTriggerByLv, resolveFieldByLv, resolveReviveByLv, getTriggerSkillName } from "./heroSet";
import { FieldSkillSet, mergeSkillParams, SkillConfig, SkillKind, SkillOverrides, SkillSet, TGroup } from "./SkillSet";
import { FieldDescSet, FieldValueFmt, SkillDescSet } from "./SkillDescSet";
import { BuffList } from "./BuffSet";
@@ -347,7 +347,8 @@ function buildSkillLines(source: ISkillDescSource, showName: boolean = true, sho
if (!base) continue;
const skill = mergeSkillParams(base, item.overrides);
const trigger = needCount ? `${name}×${item.t_num}` : name;
- const nameSeg = showName ? `「${base.name}」 ` : "";
+ // 触发语境专属名称(如 atked.6301=不屈壁垒),未配置回退通用名
+ const nameSeg = showName ? `「${getTriggerSkillName(key, item.s_uuid)}」 ` : "";
lines.push(buildEffectLine(`${trigger}:${nameSeg}`, skill));
}
continue;
@@ -360,7 +361,7 @@ function buildSkillLines(source: ISkillDescSource, showName: boolean = true, sho
const base = SkillSet[Number(sKey)];
if (!base) continue;
const sorted = [...entries].sort((a, b) => a.lv - b.lv);
- const nameSeg = showName ? `「${base.name}」 ` : "";
+ const nameSeg = showName ? `「${getTriggerSkillName(key, Number(sKey))}」 ` : "";
const headOf = (e: LvTriggerEntry) => `Lv${e.lv}: ${needCount ? `${name}×${e.t_num}` : name} ${nameSeg}`;
// 取当前等级生效档(≤lv 的最大档)
@@ -504,6 +505,92 @@ export function buildEquipRich(fieldUuids: number[], showName: boolean = false):
return lines.length > 0 ? lines.join("\n") : "无词条";
}
+/**
+ * 英雄信息弹窗技能描述富文本(HeroMoreCom 用)。
+ *
+ * 格式:
+ * 「技能名」 Lv.当前技能等级:当前档技能效果
+ * 升级提示:Lv.当前 → Lv.下一级:下一级技能效果(金色,仅有更高档时出现)
+ *
+ * 数据源为运行时 HeroAttrsComp(lv 取当前英雄等级),逐触发类型逐技能渲染。
+ * 技能等级取 LvTriggerEntry.s_lv,未标注时按档位序号(1/2/3...)兜底。
+ *
+ * @param source 英雄运行时数据源(含 lv 与触发技能分组)
+ * @returns 多行富文本串,\n 分隔
+ */
+export function buildSkillDescMoreRich(source: ISkillDescSource): string {
+ const lv = Math.max(1, source.lv ?? 1);
+ const lines: string[] = [];
+
+ // 单条效果 → 富文本(技能名蓝色、数值绿色高亮、持续秒数高亮)
+ const effectRich = (line: ISkillLine): string => {
+ const prefix = line.prefix.replace(SKILL_NAME_PATTERN, `「$1」`);
+ const text = line.value
+ ? `${prefix}${line.value}${line.suffix}`
+ : `${prefix}${line.suffix}`;
+ return highlightDuration(text);
+ };
+
+ for (const key of TRIGGER_KEYS) {
+ const grouped = source[key] as TriggerGrouped | undefined;
+ if (!grouped) continue;
+ const trigName = SkillTriggerName[key] ?? key;
+ const needCount = key === SkillTriggerType.Atking || key === SkillTriggerType.Atked;
+
+ for (const sKey in grouped) {
+ const entries = grouped[sKey];
+ if (!entries?.length) continue;
+ const sUuid = Number(sKey);
+ const base = SkillSet[sUuid];
+ if (!base) continue;
+ const sorted = [...entries].sort((a, b) => a.lv - b.lv);
+ // 技能名走触发语境专属命名(如 atked.6301=不屈壁垒)
+ const skillName = getTriggerSkillName(key, sUuid);
+
+ // 当前生效档(≤lv 最大档),未激活则用最低档
+ let activeIdx = -1;
+ for (let i = 0; i < sorted.length; i++) {
+ if (sorted[i].lv <= lv) activeIdx = i;
+ }
+ const curIdx = activeIdx >= 0 ? activeIdx : 0;
+ const cur = sorted[curIdx];
+ const curSLv = cur.s_lv ?? (curIdx + 1);
+ const curTrig = needCount ? `${trigName}×${cur.t_num}` : trigName;
+ const curHead = `「${skillName}」 Lv.${curSLv}: ${curTrig},`;
+ lines.push(effectRich(buildEffectLine(curHead, mergeSkillParams(base, cur.overrides))));
+
+ // 升级提示:存在更高档时,金色预览下一档
+ if (curIdx + 1 < sorted.length) {
+ const next = sorted[curIdx + 1];
+ const nextSLv = next.s_lv ?? (curIdx + 2);
+ const nextTrig = needCount ? `${trigName}×${next.t_num}` : trigName;
+ const nextLine = buildEffectLine(`${nextTrig},`, mergeSkillParams(base, next.overrides));
+ const nextText = `${nextLine.prefix}${nextLine.value}${nextLine.suffix}`;
+ lines.push(`升级 Lv.${curSLv}→Lv.${nextSLv}: ${nextText}`);
+ }
+ }
+ }
+
+ // 驻场光环(field)
+ const fieldEntries = source[SkillTriggerType.Field] as LvFieldEntry[] | undefined;
+ if (fieldEntries?.length) {
+ const tpl = SkillTriggerName[SkillTriggerType.Field] ?? "光环";
+ for (const uuid of resolveFieldByLv(fieldEntries, lv)) {
+ const line = buildFieldLine(`${tpl}: `, uuid, true);
+ if (line) lines.push(effectRich(line));
+ }
+ }
+
+ // 复活(revive)
+ const revive = resolveReviveByLv(source[SkillTriggerType.Revive] as LvReviveEntry[] | undefined, lv);
+ if (revive) {
+ const reviveName = getTriggerSkillName(SkillTriggerType.Revive, revive.s_uuid);
+ lines.push(`「${reviveName}」: 死亡后以${Math.round(revive.upr * 100)}%血量复活${revive.r_num}次`);
+ }
+
+ return lines.join("\n");
+}
+
/**
* 把"持续X秒"中的 X 也包裹绿色高亮(卡片描述后处理)。
* Why: 计时模板 {dur} 不在 \x01\x02 高亮标记内,renderLineRich 仅高亮主数值;
@@ -513,6 +600,9 @@ function highlightDuration(text: string): string {
return text.replace(DURATION_PATTERN, `持续$1秒`);
}
+/** 富文本升级提示色(金色,标识"升级后"的下一档预览,与未激活灰区分) */
+const RICH_UPGRADE_COLOR = "#E8A33D";
+
/**
* 结构化行 → 富文本串(技能名蓝色、数值绿色)。
* buildEquipRich / buildCardDescRich / buildSkillDescRich 共用,保证渲染规则唯一。
diff --git a/assets/script/game/common/config/heroSet.ts b/assets/script/game/common/config/heroSet.ts
index c2d159de..45b5f785 100644
--- a/assets/script/game/common/config/heroSet.ts
+++ b/assets/script/game/common/config/heroSet.ts
@@ -145,6 +145,70 @@ export const SkillTriggerDesc = {
[SkillTriggerType.Revive]: "复活时",
}
+/**
+ * 技能等级枚举(与英雄等级同标尺 1~5)。
+ * 配置触发技能档位时填入,表达"英雄升到 lv 级 → 该技能提升到 s_lv 级"的成长节奏,
+ * 与 LvTriggerEntry.lv 并列展示,便于 UI 面板显示"技能Lv.x"。
+ */
+export enum SkillLv {
+ Lv1 = 1,
+ Lv2 = 2,
+ Lv3 = 3,
+ Lv4 = 4,
+ Lv5 = 5,
+}
+
+/**
+ * 触发技能标准命名表(按触发方式 → 技能ID 分组命名)。
+ * 同一技能在不同触发语境下使用不同名称,贴合流派语义:
+ * atked=战士反击系 / atking=刺客·射手追击系 / dead=死亡遗产系 / fstart=法师战吼系 / revive=涅槃。
+ * 命名参考主流 Roguelike/自走棋技能风格(盾墙、复仇、嗜血、战吼、遗志、凤凰涅槃等)。
+ */
+export const TriggerSkillNameSet: Record> = {
+ [SkillTriggerType.Atked]: {
+ 6301: "不屈壁垒", // 受击获得护盾,越挨打越硬
+ 6302: "嗜血反击", // 受击恢复生命
+ 6401: "愈战愈勇", // 受击永久提升攻击
+ 6402: "钢筋铁骨", // 受击永久提升生命
+ 6403: "复仇之心", // 受击限时提升暴击
+ 6404: "以牙还牙", // 受击限时提升暴伤
+ 6405: "震慑反扑", // 受击限时提升击晕
+ },
+ [SkillTriggerType.Atking]: {
+ 6301: "攻守兼备", // 攻击为自己叠加护盾
+ 6302: "治愈祷言", // 攻击治疗低血队友
+ 6401: "嗜血连击", // 攻击永久提升攻击(滚雪球)
+ 6403: "致命节奏", // 攻击限时提升暴击
+ 6404: "猎手直觉", // 攻击提升暴伤
+ },
+ [SkillTriggerType.Dead]: {
+ 6301: "守护遗志", // 死亡全队获得护盾
+ 6401: "英魂永驻", // 死亡全队提升攻击
+ 6402: "生命馈赠", // 死亡全队提升生命
+ 6403: "致命遗产", // 死亡全队提升暴击
+ 6404: "破灭遗产", // 死亡全队提升暴伤
+ 6405: "震撼遗言", // 死亡全队提升击晕
+ },
+ [SkillTriggerType.FStart]: {
+ 6301: "圣光护盾", // 开局全队护盾
+ 6401: "破晓战吼", // 开局全队攻击提升
+ 6402: "活力祝福", // 开局全队生命提升
+ },
+ [SkillTriggerType.Revive]: {
+ 6501: "凤凰涅槃", // 死亡后原地复活
+ },
+}
+
+/**
+ * 查询触发技能在指定触发语境下的标准名称。
+ * @param type 触发类型(SkillTriggerType)
+ * @param s_uuid 技能ID
+ * @returns 语境专属名称;未配置时回退 SkillSet 通用名称
+ */
+export function getTriggerSkillName(type: SkillTriggerType, s_uuid: number): string {
+ return TriggerSkillNameSet[type]?.[s_uuid] ?? SkillSet[s_uuid]?.name ?? "";
+}
+
/**
* 英雄/怪物基础信息接口
*/
@@ -191,9 +255,11 @@ export interface HSkillInfo {
/**
* 触发技能单档配置:达到 lv 级时此档参数生效(t_num/overrides 可随等级变化)。
+ * s_lv 标注此档对应的技能等级(SkillLv 枚举),表达"英雄 lv 级 → 技能 s_lv 级"的成长节奏。
*/
export interface LvTriggerEntry {
lv: number; // 达到该英雄等级时解锁此档
+ s_lv?: SkillLv; // 此档对应的技能等级(标注用,便于面板显示"技能Lv.x")
t_num: number;
overrides?: SkillOverrides;
}
@@ -253,9 +319,9 @@ export const HeroInfo: Record = {
// 成长主线:护盾层数 4→5→6(等效减伤 57%→67%)
atked: {
6301: [
- { lv: 1, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 4 } },
- { lv: 2, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 5 } },
- { lv: 4, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 6 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 4 } },
+ { lv: 2, s_lv: SkillLv.Lv2, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 5 } },
+ { lv: 4, s_lv: SkillLv.Lv3, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 6 } },
],
},
hp_bonus: [{ lv: 3, value: 150 }, { lv: 5, value: 150 }],
@@ -267,13 +333,13 @@ export const HeroInfo: Record = {
skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } },
atked: {
6302: [
- { lv: 1, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 250 } },
- { lv: 2, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 300 } },
- { lv: 4, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 350 } },
- { lv: 5, t_num: 2, overrides: { TGroup: TGroup.Self, ap: 350 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 250 } },
+ { lv: 2, s_lv: SkillLv.Lv2, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 300 } },
+ { lv: 4, s_lv: SkillLv.Lv3, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 350 } },
+ { lv: 5, s_lv: SkillLv.Lv4, t_num: 2, overrides: { TGroup: TGroup.Self, ap: 350 } },
],
6402: [
- { lv: 1, t_num: 5, overrides: { TGroup: TGroup.Self, ap: 2 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Self, ap: 2 } },
],
},
hp_bonus: [{ lv: 3, value: 150 }],
@@ -284,13 +350,13 @@ export const HeroInfo: Record = {
skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } },
atked: {
6301: [
- { lv: 1, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 3 } },
- { lv: 2, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 4 } },
- { lv: 4, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 5 } },
- { lv: 5, t_num: 2, overrides: { TGroup: TGroup.Self, ap: 5 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 3 } },
+ { lv: 2, s_lv: SkillLv.Lv2, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 4 } },
+ { lv: 4, s_lv: SkillLv.Lv3, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 5 } },
+ { lv: 5, s_lv: SkillLv.Lv4, t_num: 2, overrides: { TGroup: TGroup.Self, ap: 5 } },
],
6402: [
- { lv: 1, t_num: 5, overrides: { TGroup: TGroup.Self, ap: 2 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Self, ap: 2 } },
],
},
hp_bonus: [{ lv: 3, value: 150 }],
@@ -301,13 +367,13 @@ export const HeroInfo: Record = {
skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow1].cd, ccd: 0 } },
atked: {
6401: [
- { lv: 1, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 1 } },
- { lv: 5, t_num: 2, overrides: { TGroup: TGroup.Self, ap: 1 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 1 } },
+ { lv: 5, s_lv: SkillLv.Lv2, t_num: 2, overrides: { TGroup: TGroup.Self, ap: 1 } },
],
6403: [
- { lv: 1, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7012, buff_value: 5, buff_duration: 5 } },
- { lv: 2, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7012, buff_value: 7, buff_duration: 5 } },
- { lv: 4, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7012, buff_value: 10, buff_duration: 6 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7012, buff_value: 5, buff_duration: 5 } },
+ { lv: 2, s_lv: SkillLv.Lv2, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7012, buff_value: 7, buff_duration: 5 } },
+ { lv: 4, s_lv: SkillLv.Lv3, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7012, buff_value: 10, buff_duration: 6 } },
],
},
hp_bonus: [{ lv: 3, value: 150 }],
@@ -318,15 +384,15 @@ export const HeroInfo: Record = {
skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } },
atked: {
6301: [
- { lv: 1, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 3 } },
- { lv: 2, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 4 } },
- { lv: 4, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 5 } },
- { lv: 5, t_num: 2, overrides: { TGroup: TGroup.Self, ap: 5 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 3 } },
+ { lv: 2, s_lv: SkillLv.Lv2, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 4 } },
+ { lv: 4, s_lv: SkillLv.Lv3, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 5 } },
+ { lv: 5, s_lv: SkillLv.Lv4, t_num: 2, overrides: { TGroup: TGroup.Self, ap: 5 } },
],
6404: [
- { lv: 1, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7020, buff_value: 5, buff_duration: 5 } },
- { lv: 2, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7020, buff_value: 7, buff_duration: 5 } },
- { lv: 4, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7020, buff_value: 10, buff_duration: 6 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7020, buff_value: 5, buff_duration: 5 } },
+ { lv: 2, s_lv: SkillLv.Lv2, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7020, buff_value: 7, buff_duration: 5 } },
+ { lv: 4, s_lv: SkillLv.Lv3, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7020, buff_value: 10, buff_duration: 6 } },
],
},
hp_bonus: [{ lv: 3, value: 200 }],
@@ -337,13 +403,13 @@ export const HeroInfo: Record = {
skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } },
atked: {
6401: [
- { lv: 1, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 1 } },
- { lv: 5, t_num: 2, overrides: { TGroup: TGroup.Self, ap: 1 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 1 } },
+ { lv: 5, s_lv: SkillLv.Lv2, t_num: 2, overrides: { TGroup: TGroup.Self, ap: 1 } },
],
6405: [
- { lv: 1, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7017, buff_value: 5, buff_duration: 5 } },
- { lv: 2, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7017, buff_value: 7, buff_duration: 5 } },
- { lv: 4, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7017, buff_value: 10, buff_duration: 6 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7017, buff_value: 5, buff_duration: 5 } },
+ { lv: 2, s_lv: SkillLv.Lv2, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7017, buff_value: 7, buff_duration: 5 } },
+ { lv: 4, s_lv: SkillLv.Lv3, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7017, buff_value: 10, buff_duration: 6 } },
],
},
ap_bonus: [{ lv: 3, value: 20 }],
@@ -385,8 +451,8 @@ export const HeroInfo: Record = {
// 成长主线:滚雪球(AP增量固定1,5级阈值5→4刀)
atking: {
6401: [
- { lv: 1, t_num: 5, overrides: { TGroup: TGroup.Self, ap: 1 } },
- { lv: 5, t_num: 4, overrides: { TGroup: TGroup.Self, ap: 1 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Self, ap: 1 } },
+ { lv: 5, s_lv: SkillLv.Lv2, t_num: 4, overrides: { TGroup: TGroup.Self, ap: 1 } },
],
},
ap_bonus: [{ lv: 3, value: 20 }],
@@ -398,13 +464,13 @@ export const HeroInfo: Record = {
skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Fast2].cd, ccd: 0 } },
atking: {
6403: [
- { lv: 1, t_num: 5, overrides: { TGroup: TGroup.Self, hit_count: 1, timed_buff_id: 7012, buff_value: 5, buff_duration: 5 } },
- { lv: 2, t_num: 5, overrides: { TGroup: TGroup.Self, hit_count: 1, timed_buff_id: 7012, buff_value: 7, buff_duration: 5 } },
- { lv: 4, t_num: 5, overrides: { TGroup: TGroup.Self, hit_count: 1, timed_buff_id: 7012, buff_value: 10, buff_duration: 6 } },
- { lv: 5, t_num: 4, overrides: { TGroup: TGroup.Self, hit_count: 1, timed_buff_id: 7012, buff_value: 10, buff_duration: 6 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Self, hit_count: 1, timed_buff_id: 7012, buff_value: 5, buff_duration: 5 } },
+ { lv: 2, s_lv: SkillLv.Lv2, t_num: 5, overrides: { TGroup: TGroup.Self, hit_count: 1, timed_buff_id: 7012, buff_value: 7, buff_duration: 5 } },
+ { lv: 4, s_lv: SkillLv.Lv3, t_num: 5, overrides: { TGroup: TGroup.Self, hit_count: 1, timed_buff_id: 7012, buff_value: 10, buff_duration: 6 } },
+ { lv: 5, s_lv: SkillLv.Lv4, t_num: 4, overrides: { TGroup: TGroup.Self, hit_count: 1, timed_buff_id: 7012, buff_value: 10, buff_duration: 6 } },
],
6401: [
- { lv: 1, t_num: 7, overrides: { TGroup: TGroup.Self, ap: 1 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 7, overrides: { TGroup: TGroup.Self, ap: 1 } },
],
},
ap_bonus: [{ lv: 3, value: 20 }],
@@ -416,13 +482,13 @@ export const HeroInfo: Record = {
skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Fast1].cd, ccd: 0 } },
atking: {
6401: [
- { lv: 1, t_num: 5, overrides: { TGroup: TGroup.Self, ap: 1 } },
- { lv: 5, t_num: 4, overrides: { TGroup: TGroup.Self, ap: 1 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Self, ap: 1 } },
+ { lv: 5, s_lv: SkillLv.Lv2, t_num: 4, overrides: { TGroup: TGroup.Self, ap: 1 } },
],
6403: [
- { lv: 1, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7012, buff_value: 5, buff_duration: 5 } },
- { lv: 2, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7012, buff_value: 7, buff_duration: 5 } },
- { lv: 4, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7012, buff_value: 10, buff_duration: 6 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7012, buff_value: 5, buff_duration: 5 } },
+ { lv: 2, s_lv: SkillLv.Lv2, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7012, buff_value: 7, buff_duration: 5 } },
+ { lv: 4, s_lv: SkillLv.Lv3, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7012, buff_value: 10, buff_duration: 6 } },
],
},
hp_bonus: [{ lv: 3, value: 100 }],
@@ -454,8 +520,8 @@ export const HeroInfo: Record = {
// 成长主线:AP增益固定1,5级 hit_count 1→2(2英雄环境=全队)
atking: {
6401: [
- { lv: 1, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 1, ap: 1 } },
- { lv: 5, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 2, ap: 1 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 1, ap: 1 } },
+ { lv: 5, s_lv: SkillLv.Lv2, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 2, ap: 1 } },
],
},
hp_bonus: [{ lv: 3, value: 60 }],
@@ -466,14 +532,14 @@ export const HeroInfo: Record = {
skills: { 6008: { uuid: 6008, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal1].cd, ccd: 0 } },
atking: {
6403: [
- { lv: 1, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 3, timed_buff_id: 7012, buff_value: 5, buff_duration: 5 } },
- { lv: 2, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 3, timed_buff_id: 7012, buff_value: 7, buff_duration: 5 } },
- { lv: 4, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 4, timed_buff_id: 7012, buff_value: 10, buff_duration: 6 } },
- { lv: 5, t_num: 4, overrides: { TGroup: TGroup.Team, hit_count: 4, timed_buff_id: 7012, buff_value: 10, buff_duration: 6 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 3, timed_buff_id: 7012, buff_value: 5, buff_duration: 5 } },
+ { lv: 2, s_lv: SkillLv.Lv2, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 3, timed_buff_id: 7012, buff_value: 7, buff_duration: 5 } },
+ { lv: 4, s_lv: SkillLv.Lv3, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 4, timed_buff_id: 7012, buff_value: 10, buff_duration: 6 } },
+ { lv: 5, s_lv: SkillLv.Lv4, t_num: 4, overrides: { TGroup: TGroup.Team, hit_count: 4, timed_buff_id: 7012, buff_value: 10, buff_duration: 6 } },
],
6401: [
- { lv: 1, t_num: 7, overrides: { TGroup: TGroup.Team, hit_count: 3, ap: 1 } },
- { lv: 4, t_num: 7, overrides: { TGroup: TGroup.Team, hit_count: 4, ap: 1 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 7, overrides: { TGroup: TGroup.Team, hit_count: 3, ap: 1 } },
+ { lv: 4, s_lv: SkillLv.Lv2, t_num: 7, overrides: { TGroup: TGroup.Team, hit_count: 4, ap: 1 } },
],
},
hp_bonus: [{ lv: 3, value: 80 }],
@@ -490,14 +556,14 @@ export const HeroInfo: Record = {
skills: { 6008: { uuid: 6008, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Fast3].cd, ccd: 0 } },
atking: {
6401: [
- { lv: 1, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 3, ap: 1 } },
- { lv: 4, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 4, ap: 1 } },
- { lv: 5, t_num: 4, overrides: { TGroup: TGroup.Team, hit_count: 4, ap: 1 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 3, ap: 1 } },
+ { lv: 4, s_lv: SkillLv.Lv2, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 4, ap: 1 } },
+ { lv: 5, s_lv: SkillLv.Lv3, t_num: 4, overrides: { TGroup: TGroup.Team, hit_count: 4, ap: 1 } },
],
6404: [
- { lv: 1, t_num: 7, overrides: { TGroup: TGroup.Team, hit_count: 3, timed_buff_id: 7020, buff_value: 5, buff_duration: 5 } },
- { lv: 2, t_num: 7, overrides: { TGroup: TGroup.Team, hit_count: 3, timed_buff_id: 7020, buff_value: 7, buff_duration: 5 } },
- { lv: 4, t_num: 7, overrides: { TGroup: TGroup.Team, hit_count: 4, timed_buff_id: 7020, buff_value: 10, buff_duration: 6 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 7, overrides: { TGroup: TGroup.Team, hit_count: 3, timed_buff_id: 7020, buff_value: 5, buff_duration: 5 } },
+ { lv: 2, s_lv: SkillLv.Lv2, t_num: 7, overrides: { TGroup: TGroup.Team, hit_count: 3, timed_buff_id: 7020, buff_value: 7, buff_duration: 5 } },
+ { lv: 4, s_lv: SkillLv.Lv3, t_num: 7, overrides: { TGroup: TGroup.Team, hit_count: 4, timed_buff_id: 7020, buff_value: 10, buff_duration: 6 } },
],
},
hp_bonus: [{ lv: 3, value: 100 }],
@@ -561,10 +627,10 @@ export const HeroInfo: Record = {
skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } },
dead: {
6301: [
- { lv: 1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 3 } },
- { lv: 2, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 4 } },
- { lv: 4, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 5 } },
- { lv: 5, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 6 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 3 } },
+ { lv: 2, s_lv: SkillLv.Lv2, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 4 } },
+ { lv: 4, s_lv: SkillLv.Lv3, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 5 } },
+ { lv: 5, s_lv: SkillLv.Lv4, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 6 } },
],
},
hp_bonus: [{ lv: 3, value: 100 }],
@@ -575,12 +641,12 @@ export const HeroInfo: Record = {
skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } },
dead: {
6401: [
- { lv: 1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 5 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 5 } },
],
6402: [
- { lv: 1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 10 } },
- { lv: 2, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 12 } },
- { lv: 4, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 15 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 10 } },
+ { lv: 2, s_lv: SkillLv.Lv2, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 12 } },
+ { lv: 4, s_lv: SkillLv.Lv3, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 15 } },
],
},
revive: [
@@ -595,14 +661,14 @@ export const HeroInfo: Record = {
skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal1].cd, ccd: 0 } },
dead: {
6405: [
- { lv: 1, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7017, buff_value: 5, buff_duration: 5 } },
- { lv: 2, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7017, buff_value: 7, buff_duration: 5 } },
- { lv: 4, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7017, buff_value: 10, buff_duration: 6 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7017, buff_value: 5, buff_duration: 5 } },
+ { lv: 2, s_lv: SkillLv.Lv2, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7017, buff_value: 7, buff_duration: 5 } },
+ { lv: 4, s_lv: SkillLv.Lv3, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7017, buff_value: 10, buff_duration: 6 } },
],
6403: [
- { lv: 1, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7012, buff_value: 5, buff_duration: 5 } },
- { lv: 4, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7012, buff_value: 7, buff_duration: 6 } },
- { lv: 5, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7012, buff_value: 10, buff_duration: 6 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7012, buff_value: 5, buff_duration: 5 } },
+ { lv: 4, s_lv: SkillLv.Lv2, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7012, buff_value: 7, buff_duration: 6 } },
+ { lv: 5, s_lv: SkillLv.Lv3, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7012, buff_value: 10, buff_duration: 6 } },
],
},
hp_bonus: [{ lv: 3, value: 100 }],
@@ -613,14 +679,14 @@ export const HeroInfo: Record = {
skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Fast3].cd, ccd: 0 } },
dead: {
6403: [
- { lv: 1, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7012, buff_value: 5, buff_duration: 5 } },
- { lv: 2, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7012, buff_value: 7, buff_duration: 5 } },
- { lv: 4, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7012, buff_value: 10, buff_duration: 6 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7012, buff_value: 5, buff_duration: 5 } },
+ { lv: 2, s_lv: SkillLv.Lv2, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7012, buff_value: 7, buff_duration: 5 } },
+ { lv: 4, s_lv: SkillLv.Lv3, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7012, buff_value: 10, buff_duration: 6 } },
],
6404: [
- { lv: 1, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7020, buff_value: 5, buff_duration: 5 } },
- { lv: 4, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7020, buff_value: 7, buff_duration: 6 } },
- { lv: 5, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7020, buff_value: 10, buff_duration: 6 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7020, buff_value: 5, buff_duration: 5 } },
+ { lv: 4, s_lv: SkillLv.Lv2, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7020, buff_value: 7, buff_duration: 6 } },
+ { lv: 5, s_lv: SkillLv.Lv3, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7020, buff_value: 10, buff_duration: 6 } },
],
},
hp_bonus: [{ lv: 3, value: 150 }],
@@ -636,15 +702,15 @@ export const HeroInfo: Record = {
// 死亡释放:5 层护盾 + 全队 +10 HP;复活 1 次血量 50%
dead: {
6301: [
- { lv: 1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 5 } },
- { lv: 2, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 6 } },
- { lv: 4, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 7 } },
- { lv: 5, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 8 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 5 } },
+ { lv: 2, s_lv: SkillLv.Lv2, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 6 } },
+ { lv: 4, s_lv: SkillLv.Lv3, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 7 } },
+ { lv: 5, s_lv: SkillLv.Lv4, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 8 } },
],
6402: [
- { lv: 1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 10 } },
- { lv: 2, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 12 } },
- { lv: 4, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 15 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 10 } },
+ { lv: 2, s_lv: SkillLv.Lv2, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 12 } },
+ { lv: 4, s_lv: SkillLv.Lv3, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 15 } },
],
},
revive: [
@@ -662,9 +728,9 @@ export const HeroInfo: Record = {
// 统一复用 7111 基础配置,通过 buff_value/buff_duration 覆写实现三档成长
fstart: {
6401: [
- { lv: 1, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7111 } },
- { lv: 3, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7111, buff_value: 60, buff_duration: 7 } },
- { lv: 5, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7111, buff_value: 90, buff_duration: 10 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7111 } },
+ { lv: 3, s_lv: SkillLv.Lv2, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7111, buff_value: 60, buff_duration: 7 } },
+ { lv: 5, s_lv: SkillLv.Lv3, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7111, buff_value: 90, buff_duration: 10 } },
],
},
hp_bonus: [{ lv: 2, value: 80 }, { lv: 4, value: 80 }],
@@ -675,13 +741,13 @@ export const HeroInfo: Record = {
skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow1].cd, ccd: 0 } },
fstart: {
6301: [
- { lv: 1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 3 } },
- { lv: 2, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 4 } },
- { lv: 4, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 5 } },
- { lv: 5, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 6 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 3 } },
+ { lv: 2, s_lv: SkillLv.Lv2, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 4 } },
+ { lv: 4, s_lv: SkillLv.Lv3, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 5 } },
+ { lv: 5, s_lv: SkillLv.Lv4, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 6 } },
],
6402: [
- { lv: 1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 2 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 2 } },
],
},
hp_bonus: [{ lv: 3, value: 80 }],
@@ -751,10 +817,10 @@ export const HeroInfo: Record = {
// 成长主线:治疗量 200→250→300%,5级 hit_count 1→2(全队)
atking: {
6302: [
- { lv: 1, t_num: 5, overrides: { TGroup: TGroup.Team, ap: 200 } },
- { lv: 2, t_num: 5, overrides: { TGroup: TGroup.Team, ap: 250 } },
- { lv: 4, t_num: 5, overrides: { TGroup: TGroup.Team, ap: 300 } },
- { lv: 5, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 2, ap: 300 } },
+ { lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Team, ap: 200 } },
+ { lv: 2, s_lv: SkillLv.Lv2, t_num: 5, overrides: { TGroup: TGroup.Team, ap: 250 } },
+ { lv: 4, s_lv: SkillLv.Lv3, t_num: 5, overrides: { TGroup: TGroup.Team, ap: 300 } },
+ { lv: 5, s_lv: SkillLv.Lv4, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 2, ap: 300 } },
],
},
hp_bonus: [{ lv: 3, value: 80 }],
diff --git a/assets/script/game/common/config/游戏技能名称200.md b/assets/script/game/common/config/游戏技能名称200.md
new file mode 100644
index 00000000..dc519e8e
--- /dev/null
+++ b/assets/script/game/common/config/游戏技能名称200.md
@@ -0,0 +1,265 @@
+# 200个不重复的游戏角色技能名称
+
+> 按来源游戏分组排列,共涵盖9款知名游戏。所有技能名称均来自真实游戏,经网络搜索核实。
+
+---
+
+## 一、原神(20个)
+
+1. 神变·恶曜开眼 —— 原神(雷电将军·元素战技)
+2. 奥义·梦想真说 —— 原神(雷电将军·元素爆发)
+3. 梦想一心 —— 原神(雷电将军·元素爆发效果状态)
+4. 诸愿百眼之轮 —— 原神(雷电将军·天赋)
+5. 雷罚恶曜之眼 —— 原神(雷电将军·元素战技效果)
+6. 千早振 —— 原神(枫原万叶·元素战技)
+7. 乱岚拨止 —— 原神(枫原万叶·下落攻击)
+8. 万叶之一刀 —— 原神(枫原万叶·元素爆发)
+9. 风物之诗咏 —— 原神(枫原万叶·天赋)
+10. 山泽麟迹 —— 原神(甘雨·元素战技)
+11. 猫爪冻冻 —— 原神(迪奥娜·元素战技)
+12. 灵刃·重华叠霜 —— 原神(重云·元素战技)
+13. 风涡剑 —— 原神(旅行者·风元素战技)
+14. 圣仪·苍鹭庇卫 —— 原神(坎蒂丝·元素战技)
+15. 萦络纵命索 —— 原神(夜兰·元素战技)
+16. 恶曜卜词 —— 原神(雷电将军·命之座第一层)
+17. 斩铁断金 —— 原神(雷电将军·命之座第二层)
+18. 凶将显形 —— 原神(雷电将军·命之座第五层)
+19. 誓奉常道 —— 原神(雷电将军·命之座第四层)
+20. 负愿前行 —— 原神(雷电将军·命之座第六层)
+
+---
+
+## 二、英雄联盟(20个)
+
+21. 大荒星陨 —— 英雄联盟(潘森·R技能)
+22. 诺克萨斯断头台 —— 英雄联盟(德莱厄斯·R技能)
+23. 海克斯最后通牒 —— 英雄联盟(卡蜜尔·R技能)
+24. 狂风绝息斩 —— 英雄联盟(亚索·R技能)
+25. 死亡莲花 —— 英雄联盟(卡特琳娜·R技能)
+26. 贪婪 —— 英雄联盟(卡特琳娜·被动技能)
+27. 弹射利刃 —— 英雄联盟(卡特琳娜·Q技能)
+28. 备战 —— 英雄联盟(卡特琳娜·W技能)
+29. 瞬步 —— 英雄联盟(卡特琳娜·E技能)
+30. 绞喉 —— 英雄联盟(德莱厄斯·被动技能)
+31. 毁灭风暴 —— 英雄联盟(德莱厄斯·Q技能)
+32. 残废打击 —— 英雄联盟(德莱厄斯·W技能)
+33. 索魂夺命 —— 英雄联盟(德莱厄斯·E技能)
+34. 坚韧 —— 英雄联盟(盖伦·被动技能)
+35. 致命打击 —— 英雄联盟(盖伦·Q技能)
+36. 勇气 —— 英雄联盟(盖伦·W技能)
+37. 审判 —— 英雄联盟(盖伦·E技能)
+38. 德玛西亚正义 —— 英雄联盟(盖伦·R技能)
+39. 魅惑妖术 —— 英雄联盟(阿狸·E技能)
+40. 灵魄突袭 —— 英雄联盟(阿狸·R技能)
+
+---
+
+## 三、王者荣耀(15个)
+
+41. 青莲剑歌 —— 王者荣耀(李白·三技能)
+42. 将进酒 —— 王者荣耀(李白·一技能)
+43. 神来之笔 —— 王者荣耀(李白·二技能)
+44. 王者审判 —— 王者荣耀(嬴政·被动技能)
+45. 王者惩戒 —— 王者荣耀(嬴政·一技能)
+46. 王者守御 —— 王者荣耀(嬴政·二技能)
+47. 至尊王权 —— 王者荣耀(嬴政·三技能)
+48. 魔神降世 —— 王者荣耀(吕布·三技能)
+49. 一骑当千 —— 王者荣耀(关羽·三技能)
+50. 圣剑裁决 —— 王者荣耀(亚瑟·三技能)
+51. 落·红雨 —— 王者荣耀(貂蝉·一技能)
+52. 绽·风华 —— 王者荣耀(貂蝉·三技能)
+53. 凋零冰晶 —— 王者荣耀(王昭君·一技能)
+54. 国士无双 —— 王者荣耀(韩信·三技能)
+55. 背水一战 —— 王者荣耀(韩信·二技能)
+
+---
+
+## 四、魔兽世界(25个)
+
+56. 灼烧 —— 魔兽世界(法师)
+57. 火焰冲击 —— 魔兽世界(法师)
+58. 龙息术 —— 魔兽世界(法师)
+59. 寒冰护体 —— 魔兽世界(法师)
+60. 冲击波 —— 魔兽世界(法师)
+61. 炎爆术 —— 魔兽世界(法师)
+62. 火球术 —— 魔兽世界(法师)
+63. 寒冰箭 —— 魔兽世界(法师)
+64. 奥术飞弹 —— 魔兽世界(法师)
+65. 奥术弹幕 —— 魔兽世界(法师)
+66. 活动炸弹 —— 魔兽世界(法师)
+67. 法术偷取 —— 魔兽世界(法师)
+68. 影袭 —— 魔兽世界(盗贼)
+69. 锁喉 —— 魔兽世界(盗贼)
+70. 毁伤 —— 魔兽世界(盗贼)
+71. 背刺 —— 魔兽世界(盗贼)
+72. 割裂 —— 魔兽世界(盗贼)
+73. 暗影斗篷 —— 魔兽世界(盗贼)
+74. 刺骨 —— 魔兽世界(盗贼)
+75. 闷棍 —— 魔兽世界(盗贼)
+76. 圣光术 —— 魔兽世界(圣骑士)
+77. 圣疗术 —— 魔兽世界(圣骑士)
+78. 圣光道标 —— 魔兽世界(圣骑士)
+79. 十字军打击 —— 魔兽世界(圣骑士)
+80. 奉献 —— 魔兽世界(圣骑士)
+
+---
+
+## 五、Dota2(30个)
+
+81. 洪流 —— Dota2(海军上将·昆卡)
+82. 潮汐使者 —— Dota2(海军上将·昆卡)
+83. 地图地标 —— Dota2(海军上将·昆卡)
+84. 幽灵船 —— Dota2(海军上将·昆卡)
+85. 野性之斧 —— Dota2(兽王)
+86. 野性呼唤 —— Dota2(兽王)
+87. 原始咆哮 —— Dota2(兽王)
+88. 马蹄践踏 —— Dota2(半人马战行者)
+89. 双刃剑 —— Dota2(半人马战行者)
+90. 反击 —— Dota2(半人马战行者)
+91. 奔袭冲撞 —— Dota2(半人马战行者)
+92. 沟壑 —— Dota2(撼地者)
+93. 余震 —— Dota2(撼地者)
+94. 强化图腾 —— Dota2(撼地者)
+95. 回音击 —— Dota2(撼地者)
+96. 洗礼 —— Dota2(全能骑士)
+97. 驱逐 —— Dota2(全能骑士)
+98. 退化光环 —— Dota2(全能骑士)
+99. 守护天使 —— Dota2(全能骑士)
+100. 雷霆一击 —— Dota2(酒仙)
+101. 醉拳 —— Dota2(酒仙)
+102. 元素分离 —— Dota2(酒仙)
+103. 巨力挥舞 —— Dota2(斯温)
+104. 战吼 —— Dota2(斯温)
+105. 神之力量 —— Dota2(斯温)
+106. 黑洞 —— Dota2(谜团)
+107. 午夜凋零 —— Dota2(谜团)
+108. 死亡一指 —— Dota2(恶魔巫师·莱恩)
+109. 妖术 —— Dota2(恶魔巫师·莱恩)
+110. 技能窃取 —— Dota2(大魔导师·拉比克)
+
+---
+
+## 六、艾尔登法环(30个)
+
+111. 狮子斩 —— 艾尔登法环(战技)
+112. 贯穿 —— 艾尔登法环(战技)
+113. 突刺 —— 艾尔登法环(战技)
+114. 回旋斩 —— 艾尔登法环(战技)
+115. 鲜血征收 —— 艾尔登法环(战技)
+116. 居合 —— 艾尔登法环(战技)
+117. 准备架式 —— 艾尔登法环(战技)
+118. 罗蕾塔的斩击 —— 艾尔登法环(战技)
+119. 剑舞 —— 艾尔登法环(战技)
+120. 辉剑圆阵 —— 艾尔登法环(战技)
+121. 神圣刀刃 —— 艾尔登法环(战技)
+122. 冰枪 —— 艾尔登法环(战技)
+123. 鲜血斩击 —— 艾尔登法环(战技)
+124. 夺命拳 —— 艾尔登法环(战技)
+125. 重力 —— 艾尔登法环(战技)
+126. 风暴刃 —— 艾尔登法环(战技)
+127. 撼地 —— 艾尔登法环(战技)
+128. 伟哉卡利亚 —— 艾尔登法环(战技)
+129. 卡利亚大剑 —— 艾尔登法环(战技)
+130. 黑焰漩涡 —— 艾尔登法环(战技)
+131. 血刃 —— 艾尔登法环(战技)
+132. 幻影枪 —— 艾尔登法环(战技)
+133. 寒气冻雾 —— 艾尔登法环(战技)
+134. 毒雾 —— 艾尔登法环(战技)
+135. 铁壁盾防 —— 艾尔登法环(战技)
+136. 卡利亚式奉还 —— 艾尔登法环(战技)
+137. 黄金格挡 —— 艾尔登法环(战技)
+138. 冻霜踏地 —— 艾尔登法环(战技)
+139. 黄金树立誓 —— 艾尔登法环(战技)
+140. 水鸟乱舞 —— 艾尔登法环(战技)
+
+---
+
+## 七、明日方舟(25个)
+
+141. 真银斩 —— 明日方舟(银灰·三技能)
+142. 天马视域 —— 明日方舟(白金·三技能)
+143. 雪境生存法则 —— 明日方舟(银灰·二技能)
+144. 红桃K —— 明日方舟(W·一技能)
+145. 惊吓盒子 —— 明日方舟(W·二技能)
+146. D12 —— 明日方舟(W·三技能)
+147. 炮管敲击 —— 明日方舟(温蒂·一技能)
+148. 水炮模式 —— 明日方舟(温蒂·二技能)
+149. 液氮大炮 —— 明日方舟(温蒂·三技能)
+150. 闭膛连发 —— 明日方舟(风笛·一技能)
+151. 高效冲击 —— 明日方舟(风笛·二技能)
+152. 铁御 —— 明日方舟(年·一技能)
+153. 铜印 —— 明日方舟(年·二技能)
+154. 锡灼 —— 明日方舟(年·三技能)
+155. 链锯延伸模块 —— 明日方舟(煌·二技能)
+156. 沸腾爆裂 —— 明日方舟(煌·三技能)
+157. 荒时之锁 —— 明日方舟(莫斯提马·二技能)
+158. 序时之匙 —— 明日方舟(莫斯提马·三技能)
+159. 满月 —— 明日方舟(赫拉格·三技能)
+160. 弦月 —— 明日方舟(赫拉格·二技能)
+161. 暮眼锐瞳 —— 明日方舟(黑·三技能)
+162. 战术的终结 —— 明日方舟(黑·二技能)
+163. 涌潮悲歌 —— 明日方舟(斯卡蒂·三技能)
+164. 钙质化 —— 明日方舟(塞雷娅·三技能)
+165. 急救 —— 明日方舟(塞雷娅·一技能)
+
+---
+
+## 八、塞尔达传说(15个)
+
+166. 林克时间 —— 塞尔达传说:旷野之息(完美闪避·子弹时间)
+167. 米法恩典 —— 塞尔达传说:旷野之息(英杰米法·能力)
+168. 力巴尔的勇猛 —— 塞尔达传说:旷野之息(英杰力巴尔·能力)
+169. 达尔克尔的守护 —— 塞尔达传说:旷野之息(英杰达尔克尔·能力)
+170. 乌尔波扎的愤怒 —— 塞尔达传说:旷野之息(英杰乌尔波扎·能力)
+171. 遥控炸弹 —— 塞尔达传说:旷野之息(希卡石板·能力)
+172. 静止器 —— 塞尔达传说:旷野之息(希卡石板·能力)
+173. 制冰器 —— 塞尔达传说:旷野之息(希卡石板·能力)
+174. 磁力抓取器 —— 塞尔达传说:旷野之息(希卡石板·能力)
+175. 照相机 —— 塞尔达传说:旷野之息(希卡石板·能力)
+176. 通天术 —— 塞尔达传说:王国之泪(林克·能力)
+177. 倒转乾坤 —— 塞尔达传说:王国之泪(林克·能力)
+178. 余料建造 —— 塞尔达传说:王国之泪(林克·能力)
+179. 超级手 —— 塞尔达传说:王国之泪(林克·能力)
+180. 蓄力旋转斩 —— 塞尔达传说系列(林克·剑技)
+
+---
+
+## 九、暗黑破坏神(20个)
+
+181. 劲风煞 —— 暗黑破坏神3(武僧·武技)
+182. 飓风破 —— 暗黑破坏神3(武僧·武技)
+183. 金钟破 —— 暗黑破坏神3(武僧·武技)
+184. 七星闪 —— 暗黑破坏神3(武僧·武技)
+185. 爆裂掌 —— 暗黑破坏神3(武僧·武技)
+186. 瞬影打 —— 暗黑破坏神3(武僧·武技)
+187. 先祖之锤 —— 暗黑破坏神3(野蛮人·技能)
+188. 狂暴冲撞 —— 暗黑破坏神3(野蛮人·技能)
+189. 跳跃攻击 —— 暗黑破坏神3(野蛮人·技能)
+190. 魔法武器 —— 暗黑破坏神3(法师·技能)
+191. 钻石皮肤 —— 暗黑破坏神3(法师·技能)
+192. 冰霜射线 —— 暗黑破坏神3(法师·技能)
+193. 能量旋风 —— 暗黑破坏神3(法师·技能)
+194. 刺穿 —— 暗黑破坏神3(猎魔人·技能)
+195. 集束箭 —— 暗黑破坏神3(猎魔人·技能)
+196. 复仇 —— 暗黑破坏神3(猎魔人·技能)
+197. 烟雾弥漫 —— 暗黑破坏神3(猎魔人·技能)
+198. 蝙蝠飞腾 —— 暗黑破坏神3(巫医·技能)
+199. 亡者之墙 —— 暗黑破坏神3(巫医·技能)
+200. 灵魂漫步 —— 暗黑破坏神3(巫医·技能)
+
+---
+
+## 统计
+
+| 游戏名称 | 技能数量 |
+|---------|---------|
+| 原神 | 20 |
+| 英雄联盟 | 20 |
+| 王者荣耀 | 15 |
+| 魔兽世界 | 25 |
+| Dota2 | 30 |
+| 艾尔登法环 | 30 |
+| 明日方舟 | 25 |
+| 塞尔达传说 | 15 |
+| 暗黑破坏神 | 20 |
+| **合计** | **200** |
diff --git a/assets/script/game/map/HeroMoreCom.ts b/assets/script/game/map/HeroMoreCom.ts
index 9562625c..62214193 100644
--- a/assets/script/game/map/HeroMoreCom.ts
+++ b/assets/script/game/map/HeroMoreCom.ts
@@ -17,7 +17,7 @@ import { _decorator, Component, Label, NodeEventType, RichText } from "cc";
import { oops } from "db://oops-framework/core/Oops";
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
import { HeroAttrsComp } from "../hero/HeroAttrsComp";
-import { buildSkillDescRich } from "../common/config/HeroSkillDesc";
+import { buildSkillDescMoreRich } from "../common/config/HeroSkillDesc";
const { ccclass, property } = _decorator;
@@ -190,11 +190,10 @@ export class HeroMoreCom extends Component {
const finalWfuny = this.model.getFinalWindFury();
this.setStatRow(this.wfuny_all_label, this.wfuny_plus_label, finalWfuny, finalWfuny - (this.model.wfuny ?? 0), "%");
- // ---- 技能描述(全档位合并:每技能一行,已/未激活状态 + 数值富文本高亮) ----
+ // ---- 技能描述(技能名+技能等级 Lv.x,附升级提示 Lv.x→Lv.y 金色预览) ----
if (this.skill_label && this.skill_label.isValid) {
// 缓存未变则跳过重设,避免降频内 RichText 重复重解析排版
- // showName=false 不显示技能名仅保留效果;showLocked=true 合并全档位
- const desc = buildSkillDescRich(this.model, false, true);
+ const desc = buildSkillDescMoreRich(this.model);
if (desc !== this.skillDescCache) {
this.skillDescCache = desc;
this.skill_label.string = desc;