2 Commits

Author SHA1 Message Date
panFD
158dbeecde feat(gui): 新增技能边框预制体与技能名称配置文件
新增了ibg和sbg两种技能边框预制体,包含紫、蓝、黄、红、绿五种配色的边框组件,同时添加了游戏技能名称配置文件。
2026-08-08 23:27:55 +08:00
panFD
ac14b8563c feat(hero): 优化英雄详情页技能展示逻辑
1. 新增带等级和升级预览的技能描述渲染函数
2. 为技能档位添加专属命名,支持按触发语境显示技能名
3. 给所有技能档位补充技能等级标注,优化面板展示
4. 新增200个游戏技能名称配置文件
2026-08-08 23:27:47 +08:00
12 changed files with 7083 additions and 9258 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,13 @@
{
"ver": "1.1.50",
"importer": "prefab",
"imported": true,
"uuid": "4531b8e0-a6ec-4944-a249-c2f58712da2e",
"files": [
".json"
],
"subMetas": {},
"userData": {
"syncNodeName": "ibg"
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,13 @@
{
"ver": "1.1.50",
"importer": "prefab",
"imported": true,
"uuid": "01fd7d5b-caf6-4206-ae7f-788b8c987888",
"files": [
".json"
],
"subMetas": {},
"userData": {
"syncNodeName": "sbg"
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -28,7 +28,7 @@
* - SkillDescSet:结构化描述模板 * - SkillDescSet:结构化描述模板
* - FieldSkillSet驻场技能、BuffList计时 buff 默认值兜底、Attrs属性枚举 * - 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 { FieldSkillSet, mergeSkillParams, SkillConfig, SkillKind, SkillOverrides, SkillSet, TGroup } from "./SkillSet";
import { FieldDescSet, FieldValueFmt, SkillDescSet } from "./SkillDescSet"; import { FieldDescSet, FieldValueFmt, SkillDescSet } from "./SkillDescSet";
import { BuffList } from "./BuffSet"; import { BuffList } from "./BuffSet";
@@ -347,7 +347,8 @@ function buildSkillLines(source: ISkillDescSource, showName: boolean = true, sho
if (!base) continue; if (!base) continue;
const skill = mergeSkillParams(base, item.overrides); const skill = mergeSkillParams(base, item.overrides);
const trigger = needCount ? `${name}×${item.t_num}` : name; 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)); lines.push(buildEffectLine(`${trigger}:${nameSeg}`, skill));
} }
continue; continue;
@@ -360,7 +361,7 @@ function buildSkillLines(source: ISkillDescSource, showName: boolean = true, sho
const base = SkillSet[Number(sKey)]; const base = SkillSet[Number(sKey)];
if (!base) continue; if (!base) continue;
const sorted = [...entries].sort((a, b) => a.lv - b.lv); 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}`; const headOf = (e: LvTriggerEntry) => `Lv${e.lv}: ${needCount ? `${name}×${e.t_num}` : name} ${nameSeg}`;
// 取当前等级生效档≤lv 的最大档) // 取当前等级生效档≤lv 的最大档)
@@ -504,6 +505,92 @@ export function buildEquipRich(fieldUuids: number[], showName: boolean = false):
return lines.length > 0 ? lines.join("\n") : "无词条"; return lines.length > 0 ? lines.join("\n") : "无词条";
} }
/**
* 英雄信息弹窗技能描述富文本HeroMoreCom 用)。
*
* 格式:
* 「技能名」 Lv.当前技能等级:当前档技能效果
* 升级提示Lv.当前 → Lv.下一级:下一级技能效果(金色,仅有更高档时出现)
*
* 数据源为运行时 HeroAttrsComplv 取当前英雄等级),逐触发类型逐技能渲染。
* 技能等级取 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, `「<color=${RICH_NAME_COLOR}>$1</color>」`);
const text = line.value
? `${prefix}<color=${RICH_VALUE_COLOR}>${line.value}</color>${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(`<color=${RICH_UPGRADE_COLOR}>升级 Lv.${curSLv}→Lv.${nextSLv}: ${nextText}</color>`);
}
}
}
// 驻场光环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(`「<color=${RICH_NAME_COLOR}>${reviveName}</color>」: 死亡后以<color=${RICH_VALUE_COLOR}>${Math.round(revive.upr * 100)}%</color>血量复活<color=${RICH_VALUE_COLOR}>${revive.r_num}</color>次`);
}
return lines.join("\n");
}
/** /**
* 把"持续X秒"中的 X 也包裹绿色高亮(卡片描述后处理)。 * 把"持续X秒"中的 X 也包裹绿色高亮(卡片描述后处理)。
* Why: 计时模板 {dur} 不在 \x01\x02 高亮标记内renderLineRich 仅高亮主数值; * Why: 计时模板 {dur} 不在 \x01\x02 高亮标记内renderLineRich 仅高亮主数值;
@@ -513,6 +600,9 @@ function highlightDuration(text: string): string {
return text.replace(DURATION_PATTERN, `持续<color=${RICH_VALUE_COLOR}>$1</color>秒`); return text.replace(DURATION_PATTERN, `持续<color=${RICH_VALUE_COLOR}>$1</color>秒`);
} }
/** 富文本升级提示色(金色,标识"升级后"的下一档预览,与未激活灰区分) */
const RICH_UPGRADE_COLOR = "#E8A33D";
/** /**
* 结构化行 → 富文本串(技能名蓝色、数值绿色)。 * 结构化行 → 富文本串(技能名蓝色、数值绿色)。
* buildEquipRich / buildCardDescRich / buildSkillDescRich 共用,保证渲染规则唯一。 * buildEquipRich / buildCardDescRich / buildSkillDescRich 共用,保证渲染规则唯一。

View File

@@ -145,6 +145,70 @@ export const SkillTriggerDesc = {
[SkillTriggerType.Revive]: "复活时", [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<string, Record<number, string>> = {
[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 可随等级变化)。 * 触发技能单档配置:达到 lv 级时此档参数生效t_num/overrides 可随等级变化)。
* s_lv 标注此档对应的技能等级SkillLv 枚举),表达"英雄 lv 级 → 技能 s_lv 级"的成长节奏。
*/ */
export interface LvTriggerEntry { export interface LvTriggerEntry {
lv: number; // 达到该英雄等级时解锁此档 lv: number; // 达到该英雄等级时解锁此档
s_lv?: SkillLv; // 此档对应的技能等级(标注用,便于面板显示"技能Lv.x"
t_num: number; t_num: number;
overrides?: SkillOverrides; overrides?: SkillOverrides;
} }
@@ -253,9 +319,9 @@ export const HeroInfo: Record<number, heroInfo> = {
// 成长主线:护盾层数 4→5→6等效减伤 57%→67% // 成长主线:护盾层数 4→5→6等效减伤 57%→67%
atked: { atked: {
6301: [ 6301: [
{ lv: 1, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 4 } }, { lv: 1, s_lv: SkillLv.Lv1, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 4 } },
{ lv: 2, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 5 } }, { lv: 2, s_lv: SkillLv.Lv2, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 5 } },
{ lv: 4, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 6 } }, { 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 }], hp_bonus: [{ lv: 3, value: 150 }, { lv: 5, value: 150 }],
@@ -267,13 +333,13 @@ export const HeroInfo: Record<number, heroInfo> = {
skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } }, skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } },
atked: { atked: {
6302: [ 6302: [
{ lv: 1, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 250 } }, { lv: 1, s_lv: SkillLv.Lv1, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 250 } },
{ lv: 2, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 300 } }, { lv: 2, s_lv: SkillLv.Lv2, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 300 } },
{ lv: 4, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 350 } }, { lv: 4, s_lv: SkillLv.Lv3, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 350 } },
{ lv: 5, t_num: 2, overrides: { TGroup: TGroup.Self, ap: 350 } }, { lv: 5, s_lv: SkillLv.Lv4, t_num: 2, overrides: { TGroup: TGroup.Self, ap: 350 } },
], ],
6402: [ 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 }], hp_bonus: [{ lv: 3, value: 150 }],
@@ -284,13 +350,13 @@ export const HeroInfo: Record<number, heroInfo> = {
skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } }, skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } },
atked: { atked: {
6301: [ 6301: [
{ lv: 1, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 3 } }, { lv: 1, s_lv: SkillLv.Lv1, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 3 } },
{ lv: 2, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 4 } }, { lv: 2, s_lv: SkillLv.Lv2, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 4 } },
{ lv: 4, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 5 } }, { lv: 4, s_lv: SkillLv.Lv3, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 5 } },
{ lv: 5, t_num: 2, overrides: { TGroup: TGroup.Self, ap: 5 } }, { lv: 5, s_lv: SkillLv.Lv4, t_num: 2, overrides: { TGroup: TGroup.Self, ap: 5 } },
], ],
6402: [ 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 }], hp_bonus: [{ lv: 3, value: 150 }],
@@ -301,13 +367,13 @@ export const HeroInfo: Record<number, heroInfo> = {
skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow1].cd, ccd: 0 } }, skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow1].cd, ccd: 0 } },
atked: { atked: {
6401: [ 6401: [
{ lv: 1, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 1 } }, { lv: 1, s_lv: SkillLv.Lv1, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 1 } },
{ lv: 5, t_num: 2, overrides: { TGroup: TGroup.Self, ap: 1 } }, { lv: 5, s_lv: SkillLv.Lv2, t_num: 2, overrides: { TGroup: TGroup.Self, ap: 1 } },
], ],
6403: [ 6403: [
{ lv: 1, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7012, buff_value: 5, buff_duration: 5 } }, { 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, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7012, buff_value: 7, 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, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7012, buff_value: 10, buff_duration: 6 } }, { 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 }], hp_bonus: [{ lv: 3, value: 150 }],
@@ -318,15 +384,15 @@ export const HeroInfo: Record<number, heroInfo> = {
skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } }, skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } },
atked: { atked: {
6301: [ 6301: [
{ lv: 1, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 3 } }, { lv: 1, s_lv: SkillLv.Lv1, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 3 } },
{ lv: 2, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 4 } }, { lv: 2, s_lv: SkillLv.Lv2, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 4 } },
{ lv: 4, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 5 } }, { lv: 4, s_lv: SkillLv.Lv3, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 5 } },
{ lv: 5, t_num: 2, overrides: { TGroup: TGroup.Self, ap: 5 } }, { lv: 5, s_lv: SkillLv.Lv4, t_num: 2, overrides: { TGroup: TGroup.Self, ap: 5 } },
], ],
6404: [ 6404: [
{ lv: 1, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7020, buff_value: 5, buff_duration: 5 } }, { 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, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7020, buff_value: 7, 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, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7020, buff_value: 10, buff_duration: 6 } }, { 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 }], hp_bonus: [{ lv: 3, value: 200 }],
@@ -337,13 +403,13 @@ export const HeroInfo: Record<number, heroInfo> = {
skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } }, skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } },
atked: { atked: {
6401: [ 6401: [
{ lv: 1, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 1 } }, { lv: 1, s_lv: SkillLv.Lv1, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 1 } },
{ lv: 5, t_num: 2, overrides: { TGroup: TGroup.Self, ap: 1 } }, { lv: 5, s_lv: SkillLv.Lv2, t_num: 2, overrides: { TGroup: TGroup.Self, ap: 1 } },
], ],
6405: [ 6405: [
{ lv: 1, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7017, buff_value: 5, buff_duration: 5 } }, { 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, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7017, buff_value: 7, 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, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7017, buff_value: 10, buff_duration: 6 } }, { 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 }], ap_bonus: [{ lv: 3, value: 20 }],
@@ -385,8 +451,8 @@ export const HeroInfo: Record<number, heroInfo> = {
// 成长主线滚雪球AP增量固定15级阈值5→4刀 // 成长主线滚雪球AP增量固定15级阈值5→4刀
atking: { atking: {
6401: [ 6401: [
{ lv: 1, t_num: 5, overrides: { TGroup: TGroup.Self, ap: 1 } }, { lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Self, ap: 1 } },
{ lv: 5, t_num: 4, 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 }], ap_bonus: [{ lv: 3, value: 20 }],
@@ -398,13 +464,13 @@ export const HeroInfo: Record<number, heroInfo> = {
skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Fast2].cd, ccd: 0 } }, skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Fast2].cd, ccd: 0 } },
atking: { atking: {
6403: [ 6403: [
{ lv: 1, t_num: 5, overrides: { TGroup: TGroup.Self, hit_count: 1, timed_buff_id: 7012, buff_value: 5, buff_duration: 5 } }, { 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, t_num: 5, overrides: { TGroup: TGroup.Self, hit_count: 1, timed_buff_id: 7012, buff_value: 7, 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, t_num: 5, overrides: { TGroup: TGroup.Self, hit_count: 1, timed_buff_id: 7012, buff_value: 10, buff_duration: 6 } }, { 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, t_num: 4, 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: [ 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 }], ap_bonus: [{ lv: 3, value: 20 }],
@@ -416,13 +482,13 @@ export const HeroInfo: Record<number, heroInfo> = {
skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Fast1].cd, ccd: 0 } }, skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Fast1].cd, ccd: 0 } },
atking: { atking: {
6401: [ 6401: [
{ lv: 1, t_num: 5, overrides: { TGroup: TGroup.Self, ap: 1 } }, { lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Self, ap: 1 } },
{ lv: 5, t_num: 4, overrides: { TGroup: TGroup.Self, ap: 1 } }, { lv: 5, s_lv: SkillLv.Lv2, t_num: 4, overrides: { TGroup: TGroup.Self, ap: 1 } },
], ],
6403: [ 6403: [
{ lv: 1, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7012, buff_value: 5, buff_duration: 5 } }, { 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, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7012, buff_value: 7, 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, t_num: 5, overrides: { TGroup: TGroup.Self, timed_buff_id: 7012, buff_value: 10, buff_duration: 6 } }, { 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 }], hp_bonus: [{ lv: 3, value: 100 }],
@@ -454,8 +520,8 @@ export const HeroInfo: Record<number, heroInfo> = {
// 成长主线AP增益固定15级 hit_count 1→22英雄环境=全队) // 成长主线AP增益固定15级 hit_count 1→22英雄环境=全队)
atking: { atking: {
6401: [ 6401: [
{ lv: 1, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 1, ap: 1 } }, { lv: 1, s_lv: SkillLv.Lv1, 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: 5, s_lv: SkillLv.Lv2, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 2, ap: 1 } },
], ],
}, },
hp_bonus: [{ lv: 3, value: 60 }], hp_bonus: [{ lv: 3, value: 60 }],
@@ -466,14 +532,14 @@ export const HeroInfo: Record<number, heroInfo> = {
skills: { 6008: { uuid: 6008, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal1].cd, ccd: 0 } }, skills: { 6008: { uuid: 6008, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal1].cd, ccd: 0 } },
atking: { atking: {
6403: [ 6403: [
{ lv: 1, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 3, timed_buff_id: 7012, buff_value: 5, buff_duration: 5 } }, { 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, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 3, timed_buff_id: 7012, buff_value: 7, 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, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 4, timed_buff_id: 7012, buff_value: 10, buff_duration: 6 } }, { 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, t_num: 4, 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: [ 6401: [
{ lv: 1, t_num: 7, overrides: { TGroup: TGroup.Team, hit_count: 3, ap: 1 } }, { lv: 1, s_lv: SkillLv.Lv1, 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: 4, s_lv: SkillLv.Lv2, t_num: 7, overrides: { TGroup: TGroup.Team, hit_count: 4, ap: 1 } },
], ],
}, },
hp_bonus: [{ lv: 3, value: 80 }], hp_bonus: [{ lv: 3, value: 80 }],
@@ -490,14 +556,14 @@ export const HeroInfo: Record<number, heroInfo> = {
skills: { 6008: { uuid: 6008, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Fast3].cd, ccd: 0 } }, skills: { 6008: { uuid: 6008, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Fast3].cd, ccd: 0 } },
atking: { atking: {
6401: [ 6401: [
{ lv: 1, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 3, ap: 1 } }, { lv: 1, s_lv: SkillLv.Lv1, 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: 4, s_lv: SkillLv.Lv2, 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: 5, s_lv: SkillLv.Lv3, t_num: 4, overrides: { TGroup: TGroup.Team, hit_count: 4, ap: 1 } },
], ],
6404: [ 6404: [
{ lv: 1, t_num: 7, overrides: { TGroup: TGroup.Team, hit_count: 3, timed_buff_id: 7020, buff_value: 5, buff_duration: 5 } }, { 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, t_num: 7, overrides: { TGroup: TGroup.Team, hit_count: 3, timed_buff_id: 7020, buff_value: 7, 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, t_num: 7, overrides: { TGroup: TGroup.Team, hit_count: 4, timed_buff_id: 7020, buff_value: 10, buff_duration: 6 } }, { 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 }], hp_bonus: [{ lv: 3, value: 100 }],
@@ -561,10 +627,10 @@ export const HeroInfo: Record<number, heroInfo> = {
skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } }, skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } },
dead: { dead: {
6301: [ 6301: [
{ lv: 1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 3 } }, { lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 3 } },
{ lv: 2, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 4 } }, { lv: 2, s_lv: SkillLv.Lv2, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 4 } },
{ lv: 4, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 5 } }, { lv: 4, s_lv: SkillLv.Lv3, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 5 } },
{ lv: 5, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 6 } }, { lv: 5, s_lv: SkillLv.Lv4, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 6 } },
], ],
}, },
hp_bonus: [{ lv: 3, value: 100 }], hp_bonus: [{ lv: 3, value: 100 }],
@@ -575,12 +641,12 @@ export const HeroInfo: Record<number, heroInfo> = {
skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } }, skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow3].cd, ccd: 0 } },
dead: { dead: {
6401: [ 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: [ 6402: [
{ lv: 1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 10 } }, { lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 10 } },
{ lv: 2, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 12 } }, { lv: 2, s_lv: SkillLv.Lv2, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 12 } },
{ lv: 4, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 15 } }, { lv: 4, s_lv: SkillLv.Lv3, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 15 } },
], ],
}, },
revive: [ revive: [
@@ -595,14 +661,14 @@ export const HeroInfo: Record<number, heroInfo> = {
skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal1].cd, ccd: 0 } }, skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal1].cd, ccd: 0 } },
dead: { dead: {
6405: [ 6405: [
{ lv: 1, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7017, buff_value: 5, buff_duration: 5 } }, { 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, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7017, buff_value: 7, 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, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7017, buff_value: 10, buff_duration: 6 } }, { lv: 4, s_lv: SkillLv.Lv3, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7017, buff_value: 10, buff_duration: 6 } },
], ],
6403: [ 6403: [
{ lv: 1, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7012, buff_value: 5, buff_duration: 5 } }, { 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, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7012, buff_value: 7, buff_duration: 6 } }, { 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, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7012, buff_value: 10, 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 }], hp_bonus: [{ lv: 3, value: 100 }],
@@ -613,14 +679,14 @@ export const HeroInfo: Record<number, heroInfo> = {
skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Fast3].cd, ccd: 0 } }, skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Fast3].cd, ccd: 0 } },
dead: { dead: {
6403: [ 6403: [
{ lv: 1, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7012, buff_value: 5, buff_duration: 5 } }, { 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, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7012, buff_value: 7, 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, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7012, buff_value: 10, buff_duration: 6 } }, { lv: 4, s_lv: SkillLv.Lv3, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7012, buff_value: 10, buff_duration: 6 } },
], ],
6404: [ 6404: [
{ lv: 1, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7020, buff_value: 5, buff_duration: 5 } }, { 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, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7020, buff_value: 7, buff_duration: 6 } }, { 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, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7020, buff_value: 10, 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 }], hp_bonus: [{ lv: 3, value: 150 }],
@@ -636,15 +702,15 @@ export const HeroInfo: Record<number, heroInfo> = {
// 死亡释放5 层护盾 + 全队 +10 HP复活 1 次血量 50% // 死亡释放5 层护盾 + 全队 +10 HP复活 1 次血量 50%
dead: { dead: {
6301: [ 6301: [
{ 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 } },
{ lv: 2, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 6 } }, { lv: 2, s_lv: SkillLv.Lv2, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 6 } },
{ lv: 4, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 7 } }, { lv: 4, s_lv: SkillLv.Lv3, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 7 } },
{ lv: 5, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 8 } }, { lv: 5, s_lv: SkillLv.Lv4, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 8 } },
], ],
6402: [ 6402: [
{ lv: 1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 10 } }, { lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 10 } },
{ lv: 2, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 12 } }, { lv: 2, s_lv: SkillLv.Lv2, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 12 } },
{ lv: 4, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 15 } }, { lv: 4, s_lv: SkillLv.Lv3, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 15 } },
], ],
}, },
revive: [ revive: [
@@ -662,9 +728,9 @@ export const HeroInfo: Record<number, heroInfo> = {
// 统一复用 7111 基础配置,通过 buff_value/buff_duration 覆写实现三档成长 // 统一复用 7111 基础配置,通过 buff_value/buff_duration 覆写实现三档成长
fstart: { fstart: {
6401: [ 6401: [
{ lv: 1, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7111 } }, { lv: 1, s_lv: SkillLv.Lv1, 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: 3, s_lv: SkillLv.Lv2, 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: 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 }], hp_bonus: [{ lv: 2, value: 80 }, { lv: 4, value: 80 }],
@@ -675,13 +741,13 @@ export const HeroInfo: Record<number, heroInfo> = {
skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow1].cd, ccd: 0 } }, skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow1].cd, ccd: 0 } },
fstart: { fstart: {
6301: [ 6301: [
{ lv: 1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 3 } }, { lv: 1, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 3 } },
{ lv: 2, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 4 } }, { lv: 2, s_lv: SkillLv.Lv2, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 4 } },
{ lv: 4, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 5 } }, { lv: 4, s_lv: SkillLv.Lv3, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 5 } },
{ lv: 5, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 6 } }, { lv: 5, s_lv: SkillLv.Lv4, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 6 } },
], ],
6402: [ 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 }], hp_bonus: [{ lv: 3, value: 80 }],
@@ -751,10 +817,10 @@ export const HeroInfo: Record<number, heroInfo> = {
// 成长主线:治疗量 200→250→300%5级 hit_count 1→2全队 // 成长主线:治疗量 200→250→300%5级 hit_count 1→2全队
atking: { atking: {
6302: [ 6302: [
{ lv: 1, t_num: 5, overrides: { TGroup: TGroup.Team, ap: 200 } }, { lv: 1, s_lv: SkillLv.Lv1, t_num: 5, overrides: { TGroup: TGroup.Team, ap: 200 } },
{ lv: 2, t_num: 5, overrides: { TGroup: TGroup.Team, ap: 250 } }, { lv: 2, s_lv: SkillLv.Lv2, t_num: 5, overrides: { TGroup: TGroup.Team, ap: 250 } },
{ lv: 4, t_num: 5, overrides: { TGroup: TGroup.Team, ap: 300 } }, { lv: 4, s_lv: SkillLv.Lv3, t_num: 5, overrides: { TGroup: TGroup.Team, ap: 300 } },
{ lv: 5, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 2, 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 }], hp_bonus: [{ lv: 3, value: 80 }],

View File

@@ -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. 奉献 —— 魔兽世界(圣骑士)
---
## 五、Dota230个
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** |

View File

@@ -0,0 +1,11 @@
{
"ver": "1.0.1",
"importer": "text",
"imported": true,
"uuid": "2807aaae-3f0c-4a42-a0fa-48f5390b524a",
"files": [
".json"
],
"subMetas": {},
"userData": {}
}

View File

@@ -17,7 +17,7 @@ import { _decorator, Component, Label, NodeEventType, RichText } from "cc";
import { oops } from "db://oops-framework/core/Oops"; import { oops } from "db://oops-framework/core/Oops";
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS"; import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
import { HeroAttrsComp } from "../hero/HeroAttrsComp"; import { HeroAttrsComp } from "../hero/HeroAttrsComp";
import { buildSkillDescRich } from "../common/config/HeroSkillDesc"; import { buildSkillDescMoreRich } from "../common/config/HeroSkillDesc";
const { ccclass, property } = _decorator; const { ccclass, property } = _decorator;
@@ -190,11 +190,10 @@ export class HeroMoreCom extends Component {
const finalWfuny = this.model.getFinalWindFury(); const finalWfuny = this.model.getFinalWindFury();
this.setStatRow(this.wfuny_all_label, this.wfuny_plus_label, finalWfuny, finalWfuny - (this.model.wfuny ?? 0), "%"); 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) { if (this.skill_label && this.skill_label.isValid) {
// 缓存未变则跳过重设,避免降频内 RichText 重复重解析排版 // 缓存未变则跳过重设,避免降频内 RichText 重复重解析排版
// showName=false 不显示技能名仅保留效果showLocked=true 合并全档位 const desc = buildSkillDescMoreRich(this.model);
const desc = buildSkillDescRich(this.model, false, true);
if (desc !== this.skillDescCache) { if (desc !== this.skillDescCache) {
this.skillDescCache = desc; this.skillDescCache = desc;
this.skill_label.string = desc; this.skill_label.string = desc;