refactor: 重构复活机制,将复活逻辑整合到dead触发组

1.  新增SkillOverrides的revive_hp和revive_count配置项,替代原独立复活字段
2.  移除所有revive相关的旧配置、解析函数和UI展示逻辑
3.  调整战斗逻辑,从dead触发组的overrides中读取复活配置
4.  更新文档说明,统一复活机制的配置方式
5.  清理冗余的导入和类型定义
This commit is contained in:
panFD
2026-09-03 22:28:38 +08:00
parent 87f771edd1
commit b0038e74c8
12 changed files with 120 additions and 131 deletions

View File

@@ -22,7 +22,7 @@ import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ec
import { CCComp } from "../../../../extensions/oops-plugin-framework/assets/module/common/CCComp";
import { oops } from "db://oops-framework/core/Oops";
import { mLogger } from "../common/Logger";
import { HeroInfo, HeroList, SkillTriggerType, LvFieldEntry, LvReviveEntry, LvTriggerEntry, TriggerGrouped, getHeroDisplayStats } from "../common/config/heroSet";
import { HeroInfo, HeroList, SkillTriggerType, LvFieldEntry, LvTriggerEntry, TriggerGrouped, getHeroDisplayStats } from "../common/config/heroSet";
import { buildHeroSkillDesc } from "../common/HeroSkillText";
import { GameEvent } from "../common/config/GameEvent";
import { HERO_UPGRADE_NEED_FRAGMENTS, RARITY_BG_COLORS } from "../common/config/GameSet";
@@ -493,7 +493,6 @@ export class HerosListComp extends CCComp {
SkillTriggerType.Field,
SkillTriggerType.Atking,
SkillTriggerType.Atked,
SkillTriggerType.Revive,
]
/**
@@ -527,8 +526,6 @@ export class HerosListComp extends CCComp {
for (const type of HerosListComp.PANEL_TRIGGER_TYPES) {
if (type === SkillTriggerType.Field) {
this.addFieldIcons(hero[SkillTriggerType.Field], lv)
} else if (type === SkillTriggerType.Revive) {
this.addReviveIcon(hero[SkillTriggerType.Revive], lv)
} else {
this.addTriggerIcons(hero[type] as TriggerGrouped | undefined, lv, type)
}
@@ -584,15 +581,9 @@ export class HerosListComp extends CCComp {
}
}
/** 复活技能:未激活取最低档预览,激活取 ≤lv 最大档 */
private addReviveIcon(revive: LvReviveEntry[] | undefined, lv: number) {
if (!revive?.length) return
const sorted = [...revive].sort((a, b) => a.lv - b.lv)
let active: LvReviveEntry | undefined
for (const e of sorted) { if (e.lv <= lv) active = e }
const pick = active ?? sorted[0]
// 复活档位无 s_lv 概念,技能等级恒为 1(等级标签展示技能等级而非解锁的英雄等级)
this.addSkillIcon(pick.s_uuid, 1, !active, false, SkillTriggerType.Revive)
/** 复活技能已纳入 dead 触发组,通过 dead 配置展示(revive_hp / revive_count) */
private addReviveIcon(_revive: unknown, _lv: number) {
// 复活已纳入 dead 触发组,不再单独处理
}
// ======================== 英雄动画 ========================

View File

@@ -54,7 +54,7 @@ import { MissSkillsComp } from "./MissSkillsComp";
import { oops } from "db://oops-framework/core/Oops";
import { HeroAttrsComp } from "../hero/HeroAttrsComp";
import { smc } from "../common/SingletonModuleComp";
import { HeroInfo, HType, resolveTriggerByLv, resolveFieldByLv, resolveReviveByLv, resolveSkillOverrides, calcGrowBonus, getHeroQualityCoef, getEffectiveStats, HERO_LV12_SPECIAL_LV, HERO_LV12_BASE_LV, HERO_LV12_SPECIAL_ATTR } from "../common/config/heroSet";
import { HeroInfo, HType, resolveTriggerByLv, resolveFieldByLv, resolveSkillOverrides, calcGrowBonus, getHeroQualityCoef, getEffectiveStats, HERO_LV12_SPECIAL_LV, HERO_LV12_BASE_LV, HERO_LV12_SPECIAL_ATTR } from "../common/config/heroSet";
import { applyTalentBonuses } from "../common/config/TalentSet";
import { HeroViewComp } from "../hero/HeroViewComp";
import { FacSet, FightSet } from "../common/config/GameSet";
@@ -2223,7 +2223,7 @@ export class MissionCardComp extends CCComp {
model.runtime_atking = resolveTriggerByLv(model.atking, nextLv);
model.runtime_atked = resolveTriggerByLv(model.atked, nextLv);
model.runtime_field = resolveFieldByLv(model.field, nextLv);
model.runtime_revive = resolveReviveByLv(model.revive, nextLv);
// 复活已纳入 dead 触发组,无需单独解析 revive
model.skills = {};
for (const key in hero.skills) {

View File

@@ -22,7 +22,7 @@
* 手感微调只改 MON_HP_MUL / MON_AP_MUL / BOSS_HP_BONUS_MUL 三个系数即可。
*/
import { HeroInfo, MonType, MonTypeName, TriggerGrouped, LvReviveEntry } from "../common/config/heroSet";
import { HeroInfo, MonType, MonTypeName, TriggerGrouped } from "../common/config/heroSet";
import { SkillOverrides } from "../common/config/SkillSet";
import { FacSet } from "../common/config/GameSet";
@@ -200,8 +200,6 @@ export interface MonSkillSet {
dead?: TriggerGrouped;
/** 战斗开始触发 */
fstart?: TriggerGrouped;
/** 复活 */
revive?: LvReviveEntry[];
/** 在技能池中的抽取权重 */
weight: number;
}
@@ -357,7 +355,6 @@ export interface GeneratedMonster {
atked?: TriggerGrouped;
dead?: TriggerGrouped;
fstart?: TriggerGrouped;
revive?: LvReviveEntry[];
};
}

View File

@@ -6,7 +6,7 @@ import { CardTriggerType } from "../common/config/CardSet";
import { SkillSet, FieldSkillSet } from "../common/config/SkillSet";
import {
FieldEntry, HeroInfo, TriggerGrouped, SkillTriggerType,
getGroupedTriggerName, getFieldSkillName, getReviveSkillName,
getGroupedTriggerName, getFieldSkillName,
} from "../common/config/heroSet";
import { UIID } from "../common/config/GameUIConfig";
import { smc } from "../common/SingletonModuleComp";
@@ -136,7 +136,7 @@ export class SSkillBoxComp extends CCComp {
* 解析技能名称:
* 1. 显式设置的卡牌名(最高优先级);
* 2. 英雄图鉴模式(hero_uuid>0):从 heroSet 英雄配置解析英雄语境名
* (普攻/大招 HSkillInfo.name、trigger 组名、光环 FieldEntry.name、复活 LvReviveEntry.name);
* (普攻/大招 HSkillInfo.name、trigger 组名、光环 FieldEntry.name、复活走 dead 组名);
* 3. 回退 SkillSet / FieldSkillSet 底座名。
*/
private resolveSkillName(): string {
@@ -170,14 +170,12 @@ export class SSkillBoxComp extends CCComp {
private resolveHeroSkillName(): string {
const hero = HeroInfo[this.hero_uuid];
if (!hero) return "";
// 槽位指定:光环/复活/触发组各自取值,未命中直接回退
// 槽位指定:光环/触发组各自取值,未命中直接回退(复活已纳入 dead)
if (this.hero_slot !== undefined) {
if (this.hero_slot === SkillTriggerType.Field) {
return getFieldSkillName(hero, this.s_uuid);
}
if (this.hero_slot === SkillTriggerType.Revive) {
return getReviveSkillName(hero, this.s_uuid);
}
// 复活走 dead 槽位
const grouped = hero[this.hero_slot] as TriggerGrouped | undefined;
if (grouped?.[this.s_uuid]?.length) return getGroupedTriggerName(grouped, this.s_uuid);
return "";
@@ -194,10 +192,7 @@ export class SSkillBoxComp extends CCComp {
if (hero.field?.some(e => e.uuids.some(u => u.uuid === this.s_uuid))) {
return getFieldSkillName(hero, this.s_uuid);
}
// 复活技能
if (hero.revive?.some(e => e.s_uuid === this.s_uuid)) {
return getReviveSkillName(hero, this.s_uuid);
}
// 复活已纳入 dead 触发组,上方 dead 循环已覆盖
return "";
}