diff --git a/assets/script/game/common/config/HeroSkillDesc.ts b/assets/script/game/common/config/HeroSkillDesc.ts index 6cec1e06..c1385706 100644 --- a/assets/script/game/common/config/HeroSkillDesc.ts +++ b/assets/script/game/common/config/HeroSkillDesc.ts @@ -28,7 +28,7 @@ * - SkillDescSet:结构化描述模板 * - FieldSkillSet(驻场技能)、BuffList(计时 buff 默认值兜底)、Attrs(属性枚举) */ -import { SkillTriggerName, SkillTriggerType, TriggerGrouped, LvTriggerEntry, LvFieldEntry, LvReviveEntry, LvBonusEntry, FieldEntry, resolveTriggerByLv, resolveFieldByLv, resolveReviveByLv, resolveSkillOverrides, getTriggerSkillName, HGrowType, calcGrowBonus, HSkillInfo } from "./heroSet"; +import { SkillTriggerName, SkillTriggerType, TriggerGrouped, LvTriggerEntry, LvFieldEntry, LvReviveEntry, LvBonusEntry, FieldEntry, resolveTriggerByLv, resolveFieldByLv, resolveReviveByLv, resolveSkillOverrides, getGroupedTriggerName, getFieldSkillName, getReviveSkillName, HGrowType, calcGrowBonus, HSkillInfo } from "./heroSet"; import { FieldSkillSet, mergeSkillParams, SkillConfig, SkillKind, SkillOverrides, SkillSet, TGroup } from "./SkillSet"; import { FieldDescSet, FieldValueFmt, SkillDescSet } from "./SkillDescSet"; import { BuffList } from "./BuffSet"; @@ -383,7 +383,7 @@ function buildSkillLines(source: ISkillDescSource, showName: boolean = true, sho const sLv = hSkill.lv_entries?.length ? (hSkill.lv_entries.filter(e => e.lv <= lv).pop()?.s_lv ?? hSkill.lv) : hSkill.lv; - const nameSeg = showName ? `「${base.name}」 ` : ""; + const nameSeg = showName ? `「${hSkill.name ?? base.name}」 ` : ""; lines.push(buildEffectLine(`Lv${sLv}: ${nameSeg}`, skill)); } } @@ -404,8 +404,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; - // 触发语境专属名称(如 atked.6301=不屈壁垒),未配置回退通用名 - const nameSeg = showName ? `「${getTriggerSkillName(key, item.s_uuid)}」 ` : ""; + // 触发技能名走 HeroInfo 语境配置(如 atked.6301=不屈壁垒),未配置回退 SkillSet 内部名 + const nameSeg = showName ? `「${getGroupedTriggerName(grouped, item.s_uuid)}」 ` : ""; lines.push(buildEffectLine(`${trigger}:${nameSeg}`, skill)); } continue; @@ -418,7 +418,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 ? `「${getTriggerSkillName(key, Number(sKey))}」 ` : ""; + const nameSeg = showName ? `「${getGroupedTriggerName(grouped, Number(sKey))}」 ` : ""; const headOf = (e: LvTriggerEntry) => `Lv${e.lv}: ${needCount ? `${name}×${e.t_num}` : name} ${nameSeg}`; // 取当前等级生效档(≤lv 的最大档) @@ -602,7 +602,7 @@ export function buildSkillDescMoreRich(source: ISkillDescSource, showName: boole const sLv = hSkill.lv_entries?.length ? (hSkill.lv_entries.filter(e => e.lv <= lv).pop()?.s_lv ?? hSkill.lv) : hSkill.lv; - const head = showName ? `「${base.name}」 Lv.${sLv}: ` : `Lv.${sLv}: `; + const head = showName ? `「${hSkill.name ?? base.name}」 Lv.${sLv}: ` : `Lv.${sLv}: `; lines.push(effectRich(buildEffectLine(head, skill))); } } @@ -620,8 +620,8 @@ export function buildSkillDescMoreRich(source: ISkillDescSource, showName: boole const base = SkillSet[sUuid]; if (!base) continue; const sorted = [...entries].sort((a, b) => a.lv - b.lv); - // 技能名走触发语境专属命名(如 atked.6301=不屈壁垒) - const skillName = getTriggerSkillName(key, sUuid); + // 技能名走 HeroInfo 触发语境配置(如 atked.6301=不屈壁垒) + const skillName = getGroupedTriggerName(grouped, sUuid); // 当前生效档(≤lv 最大档),未激活则用最低档 let activeIdx = -1; @@ -645,7 +645,7 @@ export function buildSkillDescMoreRich(source: ISkillDescSource, showName: boole const fieldEntries = source[SkillTriggerType.Field] as LvFieldEntry[] | undefined; if (fieldEntries?.length) { for (const entry of resolveFieldByLv(fieldEntries, lv)) { - const baseName = getTriggerSkillName(SkillTriggerType.Field, entry.uuid); + const baseName = getFieldSkillName(entry.uuid); const line = buildFieldLine("", entry, showName, baseName); if (line) lines.push(effectRich(line)); } @@ -655,7 +655,7 @@ export function buildSkillDescMoreRich(source: ISkillDescSource, showName: boole // 血量百分比来自 SkillSet[s_uuid].ap(运行时口径),upr 是每级追加次数,不在此展示 const revive = resolveReviveByLv(source[SkillTriggerType.Revive] as LvReviveEntry[] | undefined, lv); if (revive) { - const reviveName = getTriggerSkillName(SkillTriggerType.Revive, revive.s_uuid); + const reviveName = getReviveSkillName(); const reviveHpPct = SkillSet[revive.s_uuid]?.ap ?? 50; lines.push(showName ? `${skillNameRich(reviveName)}: 每回合拥有${valueRich(revive.r_num)}次重生机会, 死亡后以${valueRich(`${Math.round(reviveHpPct)}%`)}血量原地重生` @@ -757,3 +757,164 @@ export function buildCardDescRich(card: CardConfig): string { return card.info || ""; } + +/* ===================================================================================== + * 按技能等级分段说明(升级引导 / 图鉴逐档预览) + * + * 与 buildSkillDesc(当前等级)/ buildSkillDescRich(全档位合并单行)并列的第三种模式: + * 每个技能按等级档位逐段输出 —— 技能 Lv1 给完整能力+数值,Lv2 起只给相对上一级的 + * 「数值漂移 + 新功能」,让玩家一眼看清每一级"多得到了什么"。 + * ===================================================================================*/ + +/** 参与"新功能/数值漂移"对比的展示字段(排除动画/弹道/特效等玩家无感字段) */ +const DIFF_DISPLAY_KEYS: (keyof SkillOverrides)[] = [ + "ap", "hit_count", "num", "summon_count", "crt", "frz", "stun", "para", + "bck", "bck_chance", "timed_buff_id", "buff_value", "buff_duration", +]; + +/** 概率/次数类展示字段的单位与称谓(新功能标记 + 数值漂移描述共用) */ +const DIFF_FIELD_META: Partial> = { + ap: { label: "伤害", unit: "%" }, + hit_count: { label: "命中", unit: "次" }, + num: { label: "双发", unit: "" }, + summon_count: { label: "召唤", unit: "" }, + crt: { label: "暴击", unit: "%" }, + frz: { label: "冰冻", unit: "%" }, + stun: { label: "击晕", unit: "%" }, + para: { label: "麻痹", unit: "%" }, + bck: { label: "击退", unit: "" }, + bck_chance: { label: "击退概率", unit: "%" }, + buff_duration: { label: "持续", unit: "秒" }, +}; + +/** 一个技能的等级档位(统一普攻 lv_entries 与触发技能 LvTriggerEntry 两种结构) */ +interface ISkillTier { + /** 技能等级(展示用,取 s_lv,缺省按档位序号) */ + sLv: number; + /** 该档生效的英雄等级(解锁提示) */ + heroLv: number; + /** 合并底座后的完整技能配置 */ + skill: SkillConfig; +} + +/** 收集普攻/主技能的全部等级档位(按 sLv 升序)。Lv1=基础档(底+基础 overrides),Lv2+=lv_entries 各档 */ +function collectTiers(base: SkillConfig, baseOverrides: SkillOverrides | undefined, + entries: { lv: number; s_lv?: number; overrides?: SkillOverrides }[]): ISkillTier[] { + const tiers: ISkillTier[] = []; + // Lv1 = 基础档(底 + 基础 overrides) + const lv1Entry = entries.find(e => (e.s_lv ?? 0) === 1); + tiers.push({ + sLv: lv1Entry?.s_lv ?? 1, + heroLv: lv1Entry?.lv ?? 1, + skill: mergeSkillParams(base, baseOverrides), + }); + // Lv2+ = lv_entries 中 s_lv≥2 的档(与基础档浅合并,档位优先) + for (const e of entries) { + const sLv = e.s_lv ?? 0; + if (sLv < 2) continue; + tiers.push({ sLv, heroLv: e.lv, skill: mergeSkillParams(mergeSkillParams(base, baseOverrides), e.overrides) }); + } + return tiers.sort((a, b) => a.sLv - b.sLv); +} + +/** 相邻两档的 diff:数值漂移(ap 等差值)+ 新功能(上级没有的 timed_buff/暴击/冰冻等) */ +function buildTierDiff(prev: SkillConfig, cur: SkillConfig): string[] { + const parts: string[] = []; + for (const key of DIFF_DISPLAY_KEYS) { + const pv = (prev[key as keyof SkillConfig] as number | undefined) ?? 0; + const cv = (cur[key as keyof SkillConfig] as number | undefined) ?? 0; + if (cv === pv) continue; + // 新功能:上级为 0/无,本档新增(含 timed_buff_id 新注入) + if (key === "timed_buff_id") { + if (cv > 0 && pv === 0) parts.push(`新增${valueRich("计时增益")}`); + continue; + } + const meta = DIFF_FIELD_META[key]; + if (!meta) continue; + if (pv === 0 && cv > 0) { + parts.push(`新增${meta.label}${valueRich(`${cv}${meta.unit}`)}`); + } else { + const diff = cv - pv; + const sign = diff > 0 ? "+" : ""; + parts.push(`${meta.label}${valueRich(`${sign}${diff}${meta.unit}`)}`); + } + } + return parts; +} + +/** 单个技能的分段说明行(Lv1 完整 / Lv2+ diff),返回富文本行数组 */ +function buildTierLines(name: string, tiers: ISkillTier[], headPrefix: string): string[] { + const lines: string[] = []; + for (let i = 0; i < tiers.length; i++) { + const t = tiers[i]; + const head = `${skillNameRich(name)} ${valueRich(`Lv.${t.sLv}`)}${headPrefix}`; + if (i === 0) { + // 技能 1 级:完整能力 + 数值 + const line = buildEffectLine("", t.skill); + const effect = `${line.prefix}${line.value ? valueRich(line.value) : ""}${line.suffix}`; + lines.push(`${head}: ${highlightDuration(effect)}`); + } else { + // 技能 2 级起:相对上一级的数值漂移 + 新功能 + const diff = buildTierDiff(tiers[i - 1].skill, t.skill); + const unlock = t.heroLv > 1 ? `(英雄${valueRich(t.heroLv)}级解锁)` : ""; + lines.push(diff.length > 0 + ? `${head}${unlock}: ${diff.join(",")}` + : `${head}${unlock}: 无变化`); + } + } + return lines; +} + +/** + * 按技能等级分段输出说明(富文本)。 + * + * 两种对外说明模式的第二种(第一种为 buildSkillDesc/buildSkillDescMoreRich 的"当前等级"模式): + * 每个技能逐档输出 —— Lv1 给完整能力与数值,Lv2 起给相对上一级的提升(数值漂移 + 新功能), + * 并标注解锁所需英雄等级。适合升级引导、图鉴逐档预览。 + * + * @param source 英雄数据源(heroInfo 静态配置 或 HeroAttrsComp 运行时配置) + * @returns 多行富文本串,\n 分隔;按技能分组、组内按技能等级升序 + */ +export function buildSkillTierDescRich(source: ISkillDescSource): string { + const lines: string[] = []; + + // ---- 普攻/主技能(skills):lv_entries 分档 ---- + if (source.skills) { + for (const key in source.skills) { + const hSkill = source.skills[key]; + if (!hSkill) continue; + const base = SkillSet[hSkill.uuid]; + if (!base) continue; + const entries = hSkill.lv_entries ?? []; + // 无分档的单档技能只出 Lv1 完整行 + const tiers = collectTiers(base, hSkill.overrides, entries); + lines.push(...buildTierLines(hSkill.name ?? base.name, tiers, "")); + } + } + + // ---- 触发技能(atking/atked/dead/fstart/call):LvTriggerEntry 分档 ---- + 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 base = SkillSet[Number(sKey)]; + if (!base) continue; + const sorted = [...entries].sort((a, b) => (a.s_lv ?? 0) - (b.s_lv ?? 0)); + const name = getGroupedTriggerName(grouped, Number(sKey)); + // 触发技能以第 1 档为基础档,逐档 diff(t_num 变化并入新功能/数值漂移) + const tiers: ISkillTier[] = sorted.map((e, i) => ({ + sLv: e.s_lv ?? (i + 1), + heroLv: e.lv, + skill: mergeSkillParams(base, e.overrides), + })); + const headPrefix = needCount && sorted[0] ? ` ${trigName}${valueRich(sorted[0].t_num)}次` : ` ${trigName}`; + lines.push(...buildTierLines(name, tiers, headPrefix)); + } + } + + return lines.join("\n"); +} diff --git a/assets/script/game/common/config/heroSet.ts b/assets/script/game/common/config/heroSet.ts index 97d9154c..707d054d 100644 --- a/assets/script/game/common/config/heroSet.ts +++ b/assets/script/game/common/config/heroSet.ts @@ -1,4 +1,4 @@ -import { v3 } from "cc" +import { v3 } from "cc" import { BoxSet, FacSet, FightSet } from "./GameSet" import { SkillOverrides, TGroup, SkillSet, FieldSkillSet, SkillConfig, SkillKind, FieldSkillConfig, FieldSkillType, mergeSkillParams } from "./SkillSet" import { BuffList, BuffConfig, ModOp } from "./BuffSet" @@ -220,75 +220,37 @@ export enum SkillLv { } /** - * 触发技能标准命名表(按触发方式 → 技能ID 分组命名)。 - * 同一技能在不同触发语境下使用不同名称,贴合流派语义: - * atked=战士反击系 / atking=刺客·射手追击系 / dead=死亡遗产系 / fstart=法师战吼系 / revive=涅槃。 - * 命名参考主流 Roguelike/自走棋技能风格(盾墙、复仇、嗜血、战吼、遗志、凤凰涅槃等)。 + * 触发技能对外命名规则: + * 英雄除普攻外的技能(atked/atking/dead/fstart/revive)命名统一收敛进各英雄 HeroInfo 配置 + * (HSkillInfo.name 给普攻/主技能命名;LvTriggerEntry.name 给触发技能组命名,写在该组第 1 档)。 + * 天赋由 TalentSet 自行命名;SkillSet.name 仅作内部底座代号,不直接对外展示。 */ -export const TriggerSkillNameSet: Record> = { - [SkillTriggerType.Atked]: { - 6301: "不屈壁垒", // 受击获得护盾,越挨打越硬 - 6302: "嗜血反击", // 受击恢复生命 - 6401: "愈战愈勇", // 受击永久提升攻击 - 6402: "钢筋铁骨", // 受击永久提升生命 - 6403: "复仇之心", // 受击限时提升暴击 - 6404: "以牙还牙", // 受击限时提升暴伤 - 6405: "震慑反扑", // 受击限时提升击晕 - }, - [SkillTriggerType.Atking]: { - 6301: "攻守兼备", // 攻击为自己叠加护盾 - 6302: "治愈祷言", // 攻击治疗低血队友 - 6401: "嗜血连击", // 攻击永久提升攻击(滚雪球) - 6403: "致命节奏", // 攻击限时提升暴击 - 6404: "猎手直觉", // 攻击提升暴伤 - }, - [SkillTriggerType.Dead]: { - 6301: "守护遗志", // 死亡全队获得护盾 - 6401: "英魂永驻", // 死亡全队提升攻击 - 6402: "生命馈赠", // 死亡全队提升生命 - 6403: "致命遗产", // 死亡全队提升暴击 - 6404: "破灭遗产", // 死亡全队提升暴伤 - 6405: "震撼遗言", // 死亡全队提升击晕 - }, - [SkillTriggerType.FStart]: { - 6301: "圣光护盾", // 开局全队护盾 - 6401: "破晓战吼", // 开局全队攻击提升 - 6402: "活力祝福", // 开局全队生命提升 - }, - [SkillTriggerType.Revive]: { - 6501: "凤凰涅槃", // 死亡后原地复活 - }, - // 驻场光环(field):英雄语境专属命名,名字直接带"光环"便于玩家理解 - [SkillTriggerType.Field]: { - 7002: "攻击光环", // 英雄攻击力提升 - 7003: "击晕光环", // 英雄击晕概率提升 - 7004: "暴击光环", // 英雄暴击率提升 - 7005: "暴伤光环", // 英雄暴击伤害提升 - 7006: "攻速光环", // 英雄攻击速度提升 - 7007: "生命光环", // 英雄最大生命提升 - // 风怒机制已停用: 7008 风怒光环名称已移除 - // 7008: "风怒光环", // 英雄风怒概率提升 - 7009: "穿刺光环", // 英雄穿刺概率提升 - }, +/** + * 查询触发技能组的对外展示名(英雄语境,来自 HeroInfo 配置)。 + * @param grouped 触发技能分组配置(某英雄某触发类型的 TriggerGrouped) + * @param s_uuid 技能ID + * @returns 该组第 1 档 name;未配置时回退 SkillSet 内部名 + */ +export function getGroupedTriggerName(grouped: TriggerGrouped | undefined, s_uuid: number): string { + const entries = grouped?.[s_uuid]; + if (entries?.length && entries[0].name) return entries[0].name; + return SkillSet[s_uuid]?.name ?? ""; } /** - * 查询触发技能在指定触发语境下的标准名称。 - * @param type 触发类型(SkillTriggerType) - * @param s_uuid 技能ID - * @returns 语境专属名称;未配置时回退 SkillSet 通用名称 + * 查询驻场光环词条的对外展示名(英雄语境,FieldSkillSet 底座名已自带"光环"后缀)。 + * @param uuid 光环 uuid(指向 FieldSkillSet 底座) */ -export function getTriggerSkillName(type: SkillTriggerType, s_uuid: number): string { - const group = TriggerSkillNameSet[type]; - if (group) { - const direct = group[s_uuid]; - if (direct) return direct; - } - // 驻场光环 uuid 存于 FieldSkillSet,触发技能存于 SkillSet,分别兜底 - if (type === SkillTriggerType.Field) { - return FieldSkillSet[s_uuid]?.name ?? ""; - } - return SkillSet[s_uuid]?.name ?? ""; +export function getFieldSkillName(uuid: number): string { + return FieldSkillSet[uuid]?.name ?? ""; +} + +/** + * 查询复活技能的对外展示名(英雄语境,固定"凤凰涅槃")。 + * 复活底座 6501 在英雄语境下统一为涅槃语义,不暴露 SkillSet 内部名。 + */ +export function getReviveSkillName(): string { + return "凤凰涅槃"; } /** @@ -323,7 +285,10 @@ export interface heroInfo { ap_bonus?: LvBonusEntry[]; // 额外攻击加成(按 lv 升序,运行时累加 ≤英雄等级 的所有档) hp_bonus?: LvBonusEntry[]; // 额外生命加成(按 lv 升序,运行时累加 ≤英雄等级 的所有档) info: string; // 描述文案 - /** 分级能力说明,索引0=1级,依次递增;信息面板逐条展示各等级技能与能力 */ + /** + * @deprecated 已废弃:无任何 UI/运行时读取。技能提升说明由 HeroSkillDesc 依据 + * 结构化配置动态生成(含数值漂移与新功能),请勿再填充此字段。 + */ infos?: string[]; } @@ -358,6 +323,7 @@ export const HeroCardPoolList: HeroCardPoolEntry[] = []; */ export interface HSkillInfo { uuid: number; // 唯一标识(技能6000段等) + name?: string; // 对外展示的技能名(普攻/主技能);缺省时回退 SkillSet 内部名 lv: number; // 技能等级 cd: number; // 技能cd ccd: number; // 占位当前cd,用于cd计时 @@ -382,6 +348,7 @@ export interface LvSkillEntry { export interface LvTriggerEntry { lv: number; // 达到该英雄等级时解锁此档 s_lv?: SkillLv; // 此档对应的技能等级(标注用,便于面板显示"技能Lv.x") + name?: string; // 该 s_uuid 触发技能组的对外展示名(写在第 1 档,作为组名) t_num: number; overrides?: SkillOverrides; } @@ -447,7 +414,7 @@ export const HeroInfo: Record = { 6010: { uuid: 6010, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, overrides: { ap: 100, para: 30 } }, // 大招:大能量波,独立 cd,按英雄等级分档成长 6203: { - uuid: 6203, lv: 1, cd: 8, ccd: 0, + uuid: 6203, name: "能量波", lv: 1, cd: 8, ccd: 0, overrides: { ap: 250, bck: 30, para: 40, summon_count: 1 }, lv_entries: [ { lv: 3, s_lv: SkillLv.Lv2, overrides: { ap: 250, bck: 60, para: 40, summon_count: 1 } }, @@ -458,23 +425,12 @@ export const HeroInfo: Record = { }, atking: { 6010: [ - { lv: 2, s_lv: SkillLv.Lv1, t_num: 3, overrides: { para: 100 } }, + { lv: 2, s_lv: SkillLv.Lv1, name: "雷霆万钧", t_num: 3, overrides: { para: 100 } }, ], }, field: [ { lv: 9, uuids: [{ uuid: 7002, value: 0.15 }] }, ], - infos: [ - "解锁紫魔球:造成攻击力100%的伤害,30%概率麻痹", - "解锁能量波:对敌人造成攻击力250%的伤害并击退30,40%概率麻痹", - "电击精通:普攻每3次必定麻痹目标", - "能量波强化:击退提升至60", - "雷暴领域:能量波附带中毒,伤害300%且击退90,50%概率麻痹", - "—", - "雷霆万钧:能量波伤害400%,命中附加麻痹(70%概率)", - "—", - "魔女威压:全队攻击光环+15%", - ], info: "", }, // 5002 刀刀暴击 — atking 暴击 + 大招 6100 光闪(出血/多段)+ 暴击/暴伤双光环(剑圣复刻) @@ -484,7 +440,7 @@ export const HeroInfo: Record = { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 }, // 大招:光闪,独立 cd,按英雄等级分档成长 6100: { - uuid: 6100, lv: 1, cd: 8, ccd: 0, + uuid: 6100, name: "光闪", lv: 1, cd: 8, ccd: 0, overrides: { ap: 150 }, lv_entries: [ { lv: 3, s_lv: SkillLv.Lv2, overrides: { ap: 150, timed_buff_id: 7007 } }, @@ -495,23 +451,12 @@ export const HeroInfo: Record = { }, atking: { 6004: [ - { lv: 2, s_lv: SkillLv.Lv1, t_num: 3, overrides: { crt: 30 } }, + { lv: 2, s_lv: SkillLv.Lv1, name: "致命节奏", t_num: 3, overrides: { crt: 30 } }, ], }, field: [ { lv: 9, uuids: [{ uuid: 7004, value: 0.12 }, { uuid: 7005, value: 0.2 }] }, ], - infos: [ - "解锁攻击:造成攻击力100%的伤害", - "解锁光闪:对周围敌人造成攻击力150%的伤害", - "致命节奏:普攻每3次暴击强化(暴击+30)", - "刃之血:光闪附加出血", - "分身斩:光闪伤害180%,8命中并双发", - "—", - "剑刃风暴:光闪伤害360%并击退全体敌人50", - "—", - "剑圣之意:全队暴击光环+12%、暴伤光环+20%", - ], info: "", }, // 5003 格挡反杀 — fstart 剑气 + atked 护盾 + 大招 6103 闪电斩(减攻)(剑豪复刻) @@ -521,7 +466,7 @@ export const HeroInfo: Record = { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 }, // 大招:闪电斩,独立 cd,按英雄等级分档成长 6103: { - uuid: 6103, lv: 1, cd: 8, ccd: 0, + uuid: 6103, name: "闪电斩", lv: 1, cd: 8, ccd: 0, overrides: { ap: 150, para: 40, summon_count: 1 }, lv_entries: [ { lv: 3, s_lv: SkillLv.Lv2, overrides: { ap: 150, timed_buff_id: 7006, para: 40, summon_count: 1 } }, @@ -532,28 +477,17 @@ export const HeroInfo: Record = { }, atked: { 6301: [ - { lv: 5, s_lv: SkillLv.Lv1, t_num: 4, overrides: { TGroup: TGroup.Self, ap: 2 } }, + { lv: 5, s_lv: SkillLv.Lv1, name: "罗生门", t_num: 4, overrides: { TGroup: TGroup.Self, ap: 2 } }, ], }, fstart: { 6200: [ - { lv: 2, s_lv: SkillLv.Lv1, t_num: 1, overrides: { ap: 500 } }, + { lv: 2, s_lv: SkillLv.Lv1, name: "三十六烦恼凤", t_num: 1, overrides: { ap: 500 } }, ], }, field: [ { lv: 9, uuids: [{ uuid: 7018, value: 1 }] }, ], - infos: [ - "解锁攻击:造成攻击力100%的伤害", - "解锁闪电斩:对周围敌人造成攻击力150%的伤害,40%概率麻痹", - "三十六烦恼凤:入场释放高伤剑气(攻击力500%)", - "闪电斩强化:命中降低敌方攻击", - "罗生门:受击每4次获得2层护盾,闪电斩伤害180%且减攻强化(50%概率麻痹)", - "—", - "炼狱鬼斩:闪电斩伤害200%,6命中并击退40(60%概率麻痹)", - "—", - "攻击强化:攻击触发技能次数+1", - ], info: "", }, // 5004 冻住不谢 — atking 冰冻 + 大招 6203 大能量波(冰冻链)+ 击晕光环(巫妖王复刻) @@ -563,7 +497,7 @@ export const HeroInfo: Record = { 6009: { uuid: 6009, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 }, // 大招:大能量波,独立 cd,按英雄等级分档成长 6203: { - uuid: 6203, lv: 1, cd: 8, ccd: 0, + uuid: 6203, name: "能量波", lv: 1, cd: 8, ccd: 0, overrides: { ap: 150, summon_count: 1 }, lv_entries: [ { lv: 3, s_lv: SkillLv.Lv2, overrides: { ap: 150, frz: 15, summon_count: 1 } }, @@ -574,23 +508,12 @@ export const HeroInfo: Record = { }, atking: { 6009: [ - { lv: 2, s_lv: SkillLv.Lv1, t_num: 3, overrides: { timed_buff_id: 7003 } }, + { lv: 2, s_lv: SkillLv.Lv1, name: "霜寒之触", t_num: 3, overrides: { timed_buff_id: 7003 } }, ], }, field: [ { lv: 9, uuids: [{ uuid: 7003, value: 0.1 }] }, ], - infos: [ - "解锁蓝魔球:造成攻击力100%的伤害", - "解锁能量波:直线能量伤害150%", - "霜寒之触:普攻每3次附加冰冻(≈33%概率)", - "霜冻连锁:能量波15%概率冰冻", - "连环霜冻:能量波冰冻30%,8命中且伤害180%", - "—", - "绝对零度:能量波伤害200%且命中必冰冻", - "—", - "冰霜领域:全队击晕光环+10%", - ], info: "", }, // 5005 叠甲骑士 — 护盾大招 + fstart 防御 + dead 治疗 + revive 回光返照(黑暗骑士复刻) @@ -600,7 +523,7 @@ export const HeroInfo: Record = { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 }, // 大招位辅助技能:护盾,按英雄等级分档成长(护盾层数) 6301: { - uuid: 6301, lv: 1, cd: 8, ccd: 0, + uuid: 6301, name: "叠甲", lv: 1, cd: 8, ccd: 0, overrides: { TGroup: TGroup.Self, ap: 3, summon_count: 1 }, lv_entries: [ { lv: 3, s_lv: SkillLv.Lv2, overrides: { TGroup: TGroup.Self, ap: 5, summon_count: 1 } }, @@ -611,17 +534,17 @@ export const HeroInfo: Record = { }, atked: { 6004: [ - { lv: 5, s_lv: SkillLv.Lv1, t_num: 4, overrides: { timed_buff_id: 7006 } }, + { lv: 5, s_lv: SkillLv.Lv1, name: "反击减攻", t_num: 4, overrides: { timed_buff_id: 7006 } }, ], }, fstart: { 6412: [ - { lv: 2, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 50 } }, + { lv: 2, s_lv: SkillLv.Lv1, name: "铁壁壁垒", t_num: 1, overrides: { TGroup: TGroup.Team, ap: 50 } }, ], }, dead: { 6302: [ - { lv: 7, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Ally, ap: 200 } }, + { lv: 7, s_lv: SkillLv.Lv1, name: "死亡缠绕", t_num: 1, overrides: { TGroup: TGroup.Ally, ap: 200 } }, ], }, field: [ @@ -631,17 +554,6 @@ export const HeroInfo: Record = { revive: [ { lv: 7, s_uuid: 6501, r_num: 1, upr: 0 }, ], - infos: [ - "解锁攻击与护盾:自身获得3层抵挡护盾", - "铁壁壁垒:入场全队防御+50", - "护盾强化:护盾层数提升至5", - "—", - "反击减攻:受击每4次附加减攻,护盾层数6", - "—", - "死亡缠绕+回光返照:死亡治疗最低血友军,濒死回血续命;护盾层数8", - "—", - "不朽甲胄:全队生命光环+15%、受击触发次数+1", - ], info: "", }, // 5006 光明奶爸 — 治疗大招 + atking 自疗 + fstart 防御 + 生命光环(光明骑士复刻) @@ -651,7 +563,7 @@ export const HeroInfo: Record = { 6012: { uuid: 6012, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal].cd, ccd: 0 }, // 大招:治疗,独立 cd,按英雄等级分档成长 6302: { - uuid: 6302, lv: 1, cd: 8, ccd: 0, + uuid: 6302, name: "治疗", lv: 1, cd: 8, ccd: 0, overrides: { TGroup: TGroup.Team, ap: 300, summon_count: 1 }, lv_entries: [ { lv: 3, s_lv: SkillLv.Lv2, overrides: { TGroup: TGroup.Team, ap: 400, summon_count: 1 } }, @@ -662,28 +574,17 @@ export const HeroInfo: Record = { }, atking: { 6302: [ - { lv: 5, s_lv: SkillLv.Lv1, t_num: 3, overrides: { TGroup: TGroup.Self, ap: 100 } }, + { lv: 5, s_lv: SkillLv.Lv1, name: "圣洁之锤", t_num: 3, overrides: { TGroup: TGroup.Self, ap: 100 } }, ], }, fstart: { 6412: [ - { lv: 2, s_lv: SkillLv.Lv1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 30 } }, + { lv: 2, s_lv: SkillLv.Lv1, name: "圣光庇佑", t_num: 1, overrides: { TGroup: TGroup.Team, ap: 30 } }, ], }, field: [ { lv: 9, uuids: [{ uuid: 7007, value: 0.15 }] }, ], - infos: [ - "解锁红药瓶:造成攻击力100%的伤害", - "解锁治疗:恢复全队生命(攻击力300%)", - "圣光庇佑:入场全队防御+30", - "治疗强化:治疗量提升至400%", - "圣洁之锤:攻击每3次自疗(攻击力100%),治疗量450%", - "—", - "生命灌注:治疗附带再生(持续回血)", - "—", - "光明领域:全队生命光环+15%", - ], info: "", }, // 5007 微醺战神 — atking 击退 + 大招 6101 气斩(易伤),lv9 属性补偿(酒仙复刻) @@ -693,7 +594,7 @@ export const HeroInfo: Record = { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 }, // 大招:气斩,独立 cd,按英雄等级分档成长 6101: { - uuid: 6101, lv: 1, cd: 8, ccd: 0, + uuid: 6101, name: "气斩", lv: 1, cd: 8, ccd: 0, overrides: { ap: 150, summon_count: 1 }, lv_entries: [ { lv: 3, s_lv: SkillLv.Lv2, overrides: { ap: 150, timed_buff_id: 7002, summon_count: 1 } }, @@ -704,23 +605,12 @@ export const HeroInfo: Record = { }, atking: { 6004: [ - { lv: 2, s_lv: SkillLv.Lv1, t_num: 3, overrides: { bck: 40 } }, + { lv: 2, s_lv: SkillLv.Lv1, name: "雷霆一击", t_num: 3, overrides: { bck: 40 } }, ], }, // card_lv 3:lv9 无光环,改为基础属性+50% ap_bonus: [{ lv: 9, value: 0.5 }], hp_bonus: [{ lv: 9, value: 0.5 }], - infos: [ - "解锁攻击:造成攻击力100%的伤害", - "解锁气斩:对周围敌人造成攻击力150%的伤害", - "雷霆一击:普攻每3次附加击退40", - "醉拳浸染:气斩附加易伤", - "酒劲上头:气斩伤害180%,击退60且易伤强化", - "—", - "醉里乾坤:气斩伤害220%,击退80", - "—", - "千杯不醉:基础攻击与生命+50%", - ], info: "", }, // 5008 眩晕暴击哥 — atking 暴击 + 大招 6104 开山斧(击晕)+ 暴伤光环(齐天大圣复刻) @@ -730,7 +620,7 @@ export const HeroInfo: Record = { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 }, // 大招:开山斧,独立 cd,按英雄等级分档成长 6104: { - uuid: 6104, lv: 1, cd: 8, ccd: 0, + uuid: 6104, name: "开山斧", lv: 1, cd: 8, ccd: 0, overrides: { ap: 300, summon_count: 1 }, lv_entries: [ { lv: 3, s_lv: SkillLv.Lv2, overrides: { ap: 300, stun: 20, summon_count: 1 } }, @@ -741,23 +631,12 @@ export const HeroInfo: Record = { }, atking: { 6004: [ - { lv: 2, s_lv: SkillLv.Lv1, t_num: 3, overrides: { crt: 25 } }, + { lv: 2, s_lv: SkillLv.Lv1, name: "火眼金睛", t_num: 3, overrides: { crt: 25 } }, ], }, field: [ { lv: 9, uuids: [{ uuid: 7005, value: 0.25 }] }, ], - infos: [ - "解锁攻击:造成攻击力100%的伤害", - "解锁开山斧:劈向前方敌人造成攻击力300%的伤害", - "火眼金睛:普攻每3次暴击强化(暴击+25)", - "金箍棒影:开山斧20%概率击晕", - "大圣之怒:开山斧击晕35%,8命中且伤害350%", - "—", - "定海神针:开山斧伤害400%且命中必击晕", - "—", - "斗战胜意:全队暴伤光环+25%", - ], info: "", }, // 5009 铁壳斧弟 — atked 叠防 + atking 自疗 + 大招 6101 气斩,lv9 属性补偿(斧小王复刻) @@ -767,7 +646,7 @@ export const HeroInfo: Record = { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 }, // 大招:气斩,独立 cd,按英雄等级分档成长 6101: { - uuid: 6101, lv: 1, cd: 8, ccd: 0, + uuid: 6101, name: "气斩", lv: 1, cd: 8, ccd: 0, overrides: { ap: 150, summon_count: 1 }, lv_entries: [ { lv: 3, s_lv: SkillLv.Lv2, overrides: { ap: 180, summon_count: 1 } }, @@ -778,29 +657,18 @@ export const HeroInfo: Record = { }, atking: { 6302: [ - { lv: 5, s_lv: SkillLv.Lv1, t_num: 4, overrides: { TGroup: TGroup.Self, ap: 120 } }, + { lv: 5, s_lv: SkillLv.Lv1, name: "嗜血战斧", t_num: 4, overrides: { TGroup: TGroup.Self, ap: 120 } }, ], }, atked: { // 坚硬皮肤:借 6513 防御爆发底座注入 7023 防御强化(+50%,可无限叠层) 6513: [ - { lv: 2, s_lv: SkillLv.Lv1, t_num: 2, overrides: { TGroup: TGroup.Self, timed_buff_id: 7023, buff_duration: 10 } }, + { lv: 2, s_lv: SkillLv.Lv1, name: "坚硬皮肤", t_num: 2, overrides: { TGroup: TGroup.Self, timed_buff_id: 7023, buff_duration: 10 } }, ], }, // card_lv 3:lv9 无光环,改为基础属性+50% ap_bonus: [{ lv: 9, value: 0.5 }], hp_bonus: [{ lv: 9, value: 0.5 }], - infos: [ - "解锁攻击:造成攻击力100%的伤害", - "解锁气斩:对周围敌人造成攻击力150%的伤害", - "坚硬皮肤:受击每2次叠加防御强化(持续10秒,可叠层)", - "气斩强化:伤害180%", - "嗜血战斧:攻击每4次自疗(攻击力120%),气斩伤害200%", - "—", - "奋力一掷:气斩伤害220%并击退40", - "—", - "铁壳觉醒:基础攻击与生命+50%", - ], info: "", },