refactor(skillText): 重构技能描述生成逻辑,支持英雄自定义技能名

1. 重构getFieldSkillName和getReviveSkillName函数,新增hero参数获取英雄自定义技能名
2. 为FieldEntry和LvReviveEntry新增name字段,支持配置英雄专属技能展示名
3. 更新buildHeroSkillDesc和resolveTriggerSkillName函数,使用新的名称获取逻辑
4. 为部分英雄配置添加专属技能名称,统一技能展示文本
This commit is contained in:
pan
2026-08-28 17:07:20 +08:00
parent b34fbcf78c
commit d704f3201d
2 changed files with 36 additions and 21 deletions

View File

@@ -216,7 +216,7 @@ export function buildHeroSkillDesc(heroUuid: number, showName: boolean = true, s
const val = desc.fmt === FieldValueFmt.Percent const val = desc.fmt === FieldValueFmt.Percent
? `+${Math.round(entry.value * 100)}%` ? `+${Math.round(entry.value * 100)}%`
: desc.fmt === FieldValueFmt.IntMinus ? `-${entry.value}` : `+${entry.value}`; : desc.fmt === FieldValueFmt.IntMinus ? `-${entry.value}` : `+${entry.value}`;
lines.push(`${nameSeg(getFieldSkillName(entry.uuid))}${desc.verb}${valueRich(val)}`); lines.push(`${nameSeg(getFieldSkillName(hero, entry.uuid))}${desc.verb}${valueRich(val)}`);
} }
// ---- 复活(revive):次数复刻战斗公式 r_num + floor((lv-1)*upr) ---- // ---- 复活(revive):次数复刻战斗公式 r_num + floor((lv-1)*upr) ----
@@ -224,7 +224,7 @@ export function buildHeroSkillDesc(heroUuid: number, showName: boolean = true, s
if (revive) { if (revive) {
const count = revive.r_num + Math.floor((lv - 1) * revive.upr); const count = revive.r_num + Math.floor((lv - 1) * revive.upr);
const hpPct = SkillSet[revive.s_uuid]?.ap ?? 0; const hpPct = SkillSet[revive.s_uuid]?.ap ?? 0;
lines.push(`${nameSeg(getReviveSkillName())}每回合可复活${valueRich(count)}次, 死亡后以${valueRich(`${Math.round(hpPct)}%`)}生命原地重生`); lines.push(`${nameSeg(getReviveSkillName(hero, revive.s_uuid))}每回合可复活${valueRich(count)}次, 死亡后以${valueRich(`${Math.round(hpPct)}%`)}生命原地重生`);
} }
return lines.join("\n"); return lines.join("\n");
@@ -548,13 +548,13 @@ function resolveTriggerSkillName(hero: heroInfo, skillUuid: number): string {
const grouped = hero[type] as TriggerGrouped | undefined; const grouped = hero[type] as TriggerGrouped | undefined;
if (grouped?.[skillUuid]?.length) return getGroupedTriggerName(grouped, skillUuid); if (grouped?.[skillUuid]?.length) return getGroupedTriggerName(grouped, skillUuid);
} }
// 驻场光环:词条名取 FieldSkillSet // 驻场光环:词条名取英雄语境(FieldEntry.name 优先,回退 FieldSkillSet 底座名)
if (hero.field?.some(e => e.uuids.some(u => u.uuid === skillUuid))) { if (hero.field?.some(e => e.uuids.some(u => u.uuid === skillUuid))) {
return getFieldSkillName(skillUuid); return getFieldSkillName(hero, skillUuid);
} }
// 复活技能:统一复活称谓 // 复活技能:名称取英雄语境(LvReviveEntry.name 优先,回退固定称谓)
if (hero.revive?.some(e => e.s_uuid === skillUuid)) { if (hero.revive?.some(e => e.s_uuid === skillUuid)) {
return getReviveSkillName(); return getReviveSkillName(hero, skillUuid);
} }
return SkillSet[skillUuid]?.name ?? ""; return SkillSet[skillUuid]?.name ?? "";
} }

View File

@@ -1,4 +1,4 @@
import { v3 } from "cc" import { v3 } from "cc"
import { BoxSet, FacSet, FightSet } from "./GameSet" import { BoxSet, FacSet, FightSet } from "./GameSet"
import { SkillOverrides, TGroup, SkillSet, FieldSkillSet, SkillConfig, SkillKind, FieldSkillConfig, FieldSkillType, mergeSkillParams } from "./SkillSet" import { SkillOverrides, TGroup, SkillSet, FieldSkillSet, SkillConfig, SkillKind, FieldSkillConfig, FieldSkillType, mergeSkillParams } from "./SkillSet"
import { BuffList, BuffConfig, ModOp } from "./BuffSet" import { BuffList, BuffConfig, ModOp } from "./BuffSet"
@@ -238,18 +238,29 @@ export function getGroupedTriggerName(grouped: TriggerGrouped | undefined, s_uui
} }
/** /**
* 查询驻场光环词条的对外展示名(英雄语境,FieldSkillSet 底座名已自带"光环"后缀)。 * 查询驻场光环词条的对外展示名(英雄语境,FieldEntry.name 优先,缺省回退 FieldSkillSet 底座名)。
* Why: 名称收敛进 heroSet 英雄配置,同一光环词条(如 7002 攻击光环)在不同英雄下可有特色名。
* @param hero 英雄配置(含 field 词条的 heroInfo)
* @param uuid 光环 uuid(指向 FieldSkillSet 底座) * @param uuid 光环 uuid(指向 FieldSkillSet 底座)
*/ */
export function getFieldSkillName(uuid: number): string { export function getFieldSkillName(hero: heroInfo | undefined, uuid: number): string {
for (const e of hero?.field ?? []) {
const entry = e.uuids.find(u => u.uuid === uuid);
if (entry?.name) return entry.name;
}
return FieldSkillSet[uuid]?.name ?? ""; return FieldSkillSet[uuid]?.name ?? "";
} }
/** /**
* 查询复活技能的对外展示名(英雄语境,固定"凤凰涅槃")。 * 查询复活技能的对外展示名(英雄语境,LvReviveEntry.name 优先,缺省回退固定称谓"凤凰涅槃")。
* 复活底座 6501 在英雄语境下统一为涅槃语义,不暴露 SkillSet 内部名。 * Why: 名称收敛进 heroSet 英雄配置,复活底座 6501 在不同英雄下可有特色名(如"回光返照")。
* @param hero 英雄配置(含 revive 档位的 heroInfo)
* @param sUuid 复活底座技能 uuid(指向 SkillSet 6501)
*/ */
export function getReviveSkillName(): string { export function getReviveSkillName(hero: heroInfo | undefined, sUuid: number): string {
for (const e of hero?.revive ?? []) {
if (e.s_uuid === sUuid && e.name) return e.name;
}
return "凤凰涅槃"; return "凤凰涅槃";
} }
@@ -366,12 +377,14 @@ export interface LvTriggerEntry {
export type TriggerGrouped = Record<number /*s_uuid*/, LvTriggerEntry[]>; export type TriggerGrouped = Record<number /*s_uuid*/, LvTriggerEntry[]>;
/** /**
* 驻场光环词条:uuid 指向 FieldSkillSet 底座(类型/图标/名称元数据), * 驻场光环词条:uuid 指向 FieldSkillSet 底座(类型/图标/元数据),
* value 为该词条实际生效数值(由配置处按档位指定,不再随 uuid 分档)。 * value 为该词条实际生效数值(由配置处按档位指定,不再随 uuid 分档)。
* name 为该词条在英雄语境下的对外展示名(写在首次出现的档位),缺省回退 FieldSkillSet 底座名。
*/ */
export interface FieldEntry { export interface FieldEntry {
uuid: number; uuid: number;
value: number; value: number;
name?: string; // 英雄语境对外展示名(写在该词条首次出现的档位)
} }
/** /**
@@ -386,12 +399,14 @@ export interface LvFieldEntry {
/** /**
* 复活技能按等级解锁:运行时取 ≤英雄等级 的最大 lv 档。 * 复活技能按等级解锁:运行时取 ≤英雄等级 的最大 lv 档。
* name 为该复活技能在英雄语境下的对外展示名(写在第 1 档),缺省回退固定称谓"凤凰涅槃"。
*/ */
export interface LvReviveEntry { export interface LvReviveEntry {
lv: number; lv: number;
s_uuid: number; s_uuid: number;
r_num: number; r_num: number;
upr: number; upr: number;
name?: string; // 英雄语境对外展示名(写在第 1 档)
/** 档位描述(可选,缺省由 HeroSkillText 自动生成) */ /** 档位描述(可选,缺省由 HeroSkillText 自动生成) */
desc?: string; desc?: string;
} }
@@ -439,7 +454,7 @@ export const HeroInfo: Record<number, heroInfo> = {
], ],
}, },
field: [ field: [
{ lv: 9, uuids: [{ uuid: 7002, value: 0.15 }] }, { lv: 9, uuids: [{ uuid: 7002, value: 0.15, name: "深渊威压" }] },
], ],
info: "", info: "",
}, },
@@ -465,7 +480,7 @@ export const HeroInfo: Record<number, heroInfo> = {
], ],
}, },
field: [ field: [
{ lv: 9, uuids: [{ uuid: 7004, value: 0.12 }, { uuid: 7005, value: 0.2 }] }, { lv: 9, uuids: [{ uuid: 7004, value: 0.12, name: "剑刃风暴" }, { uuid: 7005, value: 0.2, name: "斩魂利刃" }] },
], ],
info: "", info: "",
}, },
@@ -496,7 +511,7 @@ export const HeroInfo: Record<number, heroInfo> = {
], ],
}, },
field: [ field: [
{ lv: 9, uuids: [{ uuid: 7018, value: 1 }] }, { lv: 9, uuids: [{ uuid: 7018, value: 1, name: "剑心通明" }] },
], ],
info: "", info: "",
}, },
@@ -522,7 +537,7 @@ export const HeroInfo: Record<number, heroInfo> = {
], ],
}, },
field: [ field: [
{ lv: 9, uuids: [{ uuid: 7003, value: 0.1 }] }, { lv: 9, uuids: [{ uuid: 7003, value: 0.1, name: "寒霜震慑" }] },
], ],
info: "", info: "",
}, },
@@ -558,11 +573,11 @@ export const HeroInfo: Record<number, heroInfo> = {
], ],
}, },
field: [ field: [
{ lv: 9, uuids: [{ uuid: 7007, value: 0.15 }, { uuid: 7019, value: 1 }] }, { lv: 9, uuids: [{ uuid: 7007, value: 0.15, name: "不灭之躯" }, { uuid: 7019, value: 1, name: "百战不殆" }] },
], ],
// 回光返照:濒死回血(6501.ap=50 即恢复50%生命,upr 为每级追加次数,非血量百分比) // 回光返照:濒死回血(6501.ap=50 即恢复50%生命,upr 为每级追加次数,非血量百分比)
revive: [ revive: [
{ lv: 7, s_uuid: 6501, r_num: 1, upr: 0 }, { lv: 7, s_uuid: 6501, r_num: 1, upr: 0, name: "回光返照" },
], ],
info: "", info: "",
}, },
@@ -593,7 +608,7 @@ export const HeroInfo: Record<number, heroInfo> = {
], ],
}, },
field: [ field: [
{ lv: 9, uuids: [{ uuid: 7007, value: 0.15 }] }, { lv: 9, uuids: [{ uuid: 7007, value: 0.15, name: "圣光祝福" }] },
], ],
info: "", info: "",
}, },
@@ -645,7 +660,7 @@ export const HeroInfo: Record<number, heroInfo> = {
], ],
}, },
field: [ field: [
{ lv: 9, uuids: [{ uuid: 7005, value: 0.25 }] }, { lv: 9, uuids: [{ uuid: 7005, value: 0.25, name: "大圣神威" }] },
], ],
info: "", info: "",
}, },