feat(hero): 优化英雄详情页技能展示逻辑
1. 新增带等级和升级预览的技能描述渲染函数 2. 为技能档位添加专属命名,支持按触发语境显示技能名 3. 给所有技能档位补充技能等级标注,优化面板展示 4. 新增200个游戏技能名称配置文件
This commit is contained in:
@@ -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, `「<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 也包裹绿色高亮(卡片描述后处理)。
|
||||
* 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>秒`);
|
||||
}
|
||||
|
||||
/** 富文本升级提示色(金色,标识"升级后"的下一档预览,与未激活灰区分) */
|
||||
const RICH_UPGRADE_COLOR = "#E8A33D";
|
||||
|
||||
/**
|
||||
* 结构化行 → 富文本串(技能名蓝色、数值绿色)。
|
||||
* buildEquipRich / buildCardDescRich / buildSkillDescRich 共用,保证渲染规则唯一。
|
||||
|
||||
@@ -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<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 可随等级变化)。
|
||||
* 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<number, heroInfo> = {
|
||||
// 成长主线:护盾层数 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<number, heroInfo> = {
|
||||
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<number, heroInfo> = {
|
||||
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<number, heroInfo> = {
|
||||
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<number, heroInfo> = {
|
||||
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<number, heroInfo> = {
|
||||
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<number, heroInfo> = {
|
||||
// 成长主线:滚雪球(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<number, heroInfo> = {
|
||||
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<number, heroInfo> = {
|
||||
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<number, heroInfo> = {
|
||||
// 成长主线: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<number, heroInfo> = {
|
||||
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<number, heroInfo> = {
|
||||
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<number, heroInfo> = {
|
||||
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<number, heroInfo> = {
|
||||
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<number, heroInfo> = {
|
||||
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<number, heroInfo> = {
|
||||
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<number, heroInfo> = {
|
||||
// 死亡释放: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<number, heroInfo> = {
|
||||
// 统一复用 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<number, heroInfo> = {
|
||||
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<number, heroInfo> = {
|
||||
// 成长主线:治疗量 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 }],
|
||||
|
||||
265
assets/script/game/common/config/游戏技能名称200.md
Normal file
265
assets/script/game/common/config/游戏技能名称200.md
Normal 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. 奉献 —— 魔兽世界(圣骑士)
|
||||
|
||||
---
|
||||
|
||||
## 五、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** |
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user