From c335df9b95b112e6d52ac2fb7d816093537e8708 Mon Sep 17 00:00:00 2001 From: pan Date: Wed, 22 Jul 2026 11:08:08 +0800 Subject: [PATCH] =?UTF-8?q?refactor(card-config):=20=E6=8B=86=E5=88=86?= =?UTF-8?q?=E8=A3=85=E5=A4=87=E5=8D=A1=E9=85=8D=E7=BD=AE=E5=88=B0=E7=8B=AC?= =?UTF-8?q?=E7=AB=8B=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 新建 EquipSet.ts 统一管理装备卡原始数据与工具函数 2. 从 CardSet.ts 移除重复的装备卡配置,改为导入复用 3. 迁移装备相关工具函数到 EquipSet.ts,CardSet 保留兼容导出 4. 自动批量注册装备卡到卡牌池,减少手动维护成本 --- assets/script/game/common/config/CardSet.ts | 111 +++++------------ assets/script/game/common/config/EquipSet.ts | 123 +++++++++++++++++++ 2 files changed, 151 insertions(+), 83 deletions(-) create mode 100644 assets/script/game/common/config/EquipSet.ts diff --git a/assets/script/game/common/config/CardSet.ts b/assets/script/game/common/config/CardSet.ts index c73b250a..4a703cae 100644 --- a/assets/script/game/common/config/CardSet.ts +++ b/assets/script/game/common/config/CardSet.ts @@ -3,6 +3,7 @@ import { HeroInfo, HeroList, HType } from "./heroSet" import { FightSet, SKILL_CARD_WAVES } from "./GameSet" import { oops } from "db://oops-framework/core/Oops" import { SkillOverrides, TGroup } from "./SkillSet" +import { EquipCardData, isEquipmentCard, getEquipmentFieldCount } from "./EquipSet" class I18nString { constructor(private key: string, private params?: any[]) { } @@ -165,36 +166,7 @@ const waveToCardLv: Record = {}; SKILL_CARD_WAVES.forEach((w, i) => { waveToCardLv[w] = i + 1; }); const SkillCardData: any[] = [ - // ==================== wave 1 档(基础强度) ==================== - // --- 驻场卡(Field) --- - - { uuid: 8701, skill: 0, wave: SKILL_CARD_WAVES[0], name: "战后恢复", info: "战斗结束生命回复量+10%", is_inst: false, keep_waves: -1, field: [7001], trigger_type: CardTriggerType.Field }, - { uuid: 8702, skill: 0, wave: SKILL_CARD_WAVES[0], name: "攻击加成", info: "英雄攻击力+10%", is_inst: false, keep_waves: -1, field: [7002], trigger_type: CardTriggerType.Field }, - { uuid: 8703, skill: 0, wave: SKILL_CARD_WAVES[0], name: "击晕加成", info: "英雄击晕概率+10%", is_inst: false, keep_waves: -1, field: [7003], trigger_type: CardTriggerType.Field }, - { uuid: 8704, skill: 0, wave: SKILL_CARD_WAVES[0], name: "暴击加成", info: "英雄暴击率+10%", is_inst: false, keep_waves: -1, field: [7004], trigger_type: CardTriggerType.Field }, - { uuid: 8705, skill: 0, wave: SKILL_CARD_WAVES[0], name: "暴伤加成", info: "英雄暴击伤害+20%", is_inst: false, keep_waves: -1, field: [7005], trigger_type: CardTriggerType.Field }, - { uuid: 8706, skill: 0, wave: SKILL_CARD_WAVES[0], name: "攻速加成", info: "英雄攻击速度+10%", is_inst: false, keep_waves: -1, field: [7006], trigger_type: CardTriggerType.Field }, - { uuid: 8707, skill: 0, wave: SKILL_CARD_WAVES[0], name: "生命加成", info: "英雄最大生命+10%", is_inst: false, keep_waves: -1, field: [7007], trigger_type: CardTriggerType.Field }, - { uuid: 8708, skill: 0, wave: SKILL_CARD_WAVES[0], name: "风怒加成", info: "英雄风怒概率+10%", is_inst: false, keep_waves: -1, field: [7008], trigger_type: CardTriggerType.Field }, - { uuid: 8709, skill: 0, wave: SKILL_CARD_WAVES[0], name: "穿刺加成", info: "英雄穿刺概率+10%", is_inst: false, keep_waves: -1, field: [7009], trigger_type: CardTriggerType.Field }, - - { uuid: 8710, skill: 0, wave: SKILL_CARD_WAVES[0], name: "金币收益", info: "每回合金币收益+1", is_inst: false, keep_waves: -1, field: [7010], trigger_type: CardTriggerType.Field }, - { uuid: 8711, skill: 0, wave: SKILL_CARD_WAVES[0], name: "出售强化", info: "卖出英雄金币+1", is_inst: false, keep_waves: -1, field: [7011], trigger_type: CardTriggerType.Field }, - // --- 多词条装备示例(一张卡自带多条属性词条) --- - { uuid: 8720, skill: 0, wave: SKILL_CARD_WAVES[0], name: "勇者护符", info: "英雄攻击力+10%, 暴击率+10%, 暴击伤害+20%", is_inst: false, keep_waves: -1, field: [7002, 7004, 7005], trigger_type: CardTriggerType.Field }, - - // ==================== wave 5 档(强度 ×2) ==================== - // --- 驻场卡(field uuid +200,对应 FieldSkillSet 72xx 段) --- - { uuid: 8751, skill: 0, wave: SKILL_CARD_WAVES[1], name: "战后恢复+", info: "战斗结束生命回复量+20%", is_inst: false, keep_waves: -1, field: [7201], trigger_type: CardTriggerType.Field }, - { uuid: 8752, skill: 0, wave: SKILL_CARD_WAVES[1], name: "攻击加成+", info: "英雄攻击力+20%", is_inst: false, keep_waves: -1, field: [7202], trigger_type: CardTriggerType.Field }, - { uuid: 8753, skill: 0, wave: SKILL_CARD_WAVES[1], name: "击晕加成+", info: "英雄击晕概率+20%", is_inst: false, keep_waves: -1, field: [7203], trigger_type: CardTriggerType.Field }, - { uuid: 8754, skill: 0, wave: SKILL_CARD_WAVES[1], name: "暴击加成+", info: "英雄暴击率+20%", is_inst: false, keep_waves: -1, field: [7204], trigger_type: CardTriggerType.Field }, - { uuid: 8755, skill: 0, wave: SKILL_CARD_WAVES[1], name: "暴伤加成+", info: "英雄暴击伤害+40%", is_inst: false, keep_waves: -1, field: [7205], trigger_type: CardTriggerType.Field }, - { uuid: 8756, skill: 0, wave: SKILL_CARD_WAVES[1], name: "攻速加成+", info: "英雄攻击速度+20%", is_inst: false, keep_waves: -1, field: [7206], trigger_type: CardTriggerType.Field }, - { uuid: 8757, skill: 0, wave: SKILL_CARD_WAVES[1], name: "生命加成+", info: "英雄最大生命+20%", is_inst: false, keep_waves: -1, field: [7207], trigger_type: CardTriggerType.Field }, - { uuid: 8758, skill: 0, wave: SKILL_CARD_WAVES[1], name: "风怒加成+", info: "英雄风怒概率+20%", is_inst: false, keep_waves: -1, field: [7208], trigger_type: CardTriggerType.Field }, - { uuid: 8759, skill: 0, wave: SKILL_CARD_WAVES[1], name: "穿刺加成+", info: "英雄穿刺概率+20%", is_inst: false, keep_waves: -1, field: [7209], trigger_type: CardTriggerType.Field }, - // --- 范围攻击卡(ap 递增,间隔缩短) --- + // ==================== wave 5 档(范围攻击卡,ap 递增,间隔缩短) ==================== { uuid: 8261, skill: 6201, wave: SKILL_CARD_WAVES[1], name: "雷墙+", info: "召唤雷墙阻挡敌人,有概率击晕", is_inst: false, t_inv: 5, keep_waves: -1, trigger_type: CardTriggerType.Interval, overrides: { ap: 150 } }, { uuid: 8262, skill: 6202, wave: SKILL_CARD_WAVES[1], name: "火墙+", info: "召唤火墙阻挡敌人,有概率击晕", is_inst: false, t_inv: 5, keep_waves: -1, trigger_type: CardTriggerType.Interval, overrides: { ap: 150 } }, { uuid: 8263, skill: 6203, wave: SKILL_CARD_WAVES[1], name: "飓风+", info: "召唤飓风攻击敌人,有概率击晕", is_inst: false, t_inv: 5, keep_waves: -1, trigger_type: CardTriggerType.Interval, overrides: { ap: 150 } }, @@ -202,45 +174,13 @@ const SkillCardData: any[] = [ { uuid: 8265, skill: 6205, wave: SKILL_CARD_WAVES[1], name: "风墙+", info: "召唤风墙困住敌人,有概率击晕", is_inst: false, t_inv: 5, keep_waves: -1, trigger_type: CardTriggerType.Interval, overrides: { ap: 150 } }, { uuid: 8266, skill: 6206, wave: SKILL_CARD_WAVES[1], name: "陨石术+", info: "召唤陨石范围攻击敌人,有概率击晕", is_inst: false, t_inv: 5, keep_waves: -1, trigger_type: CardTriggerType.Interval, overrides: { ap: 150 } }, - - { uuid: 8760, skill: 0, wave: SKILL_CARD_WAVES[1], name: "金币收益+", info: "每回合金币收益+2", is_inst: false, keep_waves: -1, field: [7210], trigger_type: CardTriggerType.Field }, - { uuid: 8761, skill: 0, wave: SKILL_CARD_WAVES[1], name: "购买优惠+", info: "购买卡牌费用-2金币", is_inst: false, keep_waves: -1, field: [7212], trigger_type: CardTriggerType.Field }, - { uuid: 8762, skill: 0, wave: SKILL_CARD_WAVES[1], name: "刷新优惠", info: "刷新卡牌费用-1金币", is_inst: false, keep_waves: -1, field: [7213], trigger_type: CardTriggerType.Field }, - // --- 多词条装备示例(一张卡自带多条属性词条) --- - { uuid: 8770, skill: 0, wave: SKILL_CARD_WAVES[1], name: "守卫护甲", info: "英雄最大生命+20%, 战后生命回复+20%, 攻速+20%", is_inst: false, keep_waves: -1, field: [7207, 7201, 7206], trigger_type: CardTriggerType.Field }, - - - // ==================== wave 8 档(强度 ×3) ==================== - // --- 驻场卡(field uuid +400,对应 FieldSkillSet 74xx 段) --- - { uuid: 8801, skill: 0, wave: SKILL_CARD_WAVES[2], name: "战后恢复++", info: "战斗结束生命回复量+30%", is_inst: false, keep_waves: -1, field: [7401], trigger_type: CardTriggerType.Field }, - { uuid: 8802, skill: 0, wave: SKILL_CARD_WAVES[2], name: "攻击加成++", info: "英雄攻击力+30%", is_inst: false, keep_waves: -1, field: [7402], trigger_type: CardTriggerType.Field }, - { uuid: 8803, skill: 0, wave: SKILL_CARD_WAVES[2], name: "击晕加成++", info: "英雄击晕概率+30%", is_inst: false, keep_waves: -1, field: [7403], trigger_type: CardTriggerType.Field }, - { uuid: 8804, skill: 0, wave: SKILL_CARD_WAVES[2], name: "暴击加成++", info: "英雄暴击率+30%", is_inst: false, keep_waves: -1, field: [7404], trigger_type: CardTriggerType.Field }, - { uuid: 8805, skill: 0, wave: SKILL_CARD_WAVES[2], name: "暴伤加成++", info: "英雄暴击伤害+60%", is_inst: false, keep_waves: -1, field: [7405], trigger_type: CardTriggerType.Field }, - { uuid: 8806, skill: 0, wave: SKILL_CARD_WAVES[2], name: "攻速加成++", info: "英雄攻击速度+30%", is_inst: false, keep_waves: -1, field: [7406], trigger_type: CardTriggerType.Field }, - { uuid: 8807, skill: 0, wave: SKILL_CARD_WAVES[2], name: "生命加成++", info: "英雄最大生命+30%", is_inst: false, keep_waves: -1, field: [7407], trigger_type: CardTriggerType.Field }, - { uuid: 8808, skill: 0, wave: SKILL_CARD_WAVES[2], name: "风怒加成++", info: "英雄风怒概率+30%", is_inst: false, keep_waves: -1, field: [7408], trigger_type: CardTriggerType.Field }, - { uuid: 8809, skill: 0, wave: SKILL_CARD_WAVES[2], name: "穿刺加成++", info: "英雄穿刺概率+30%", is_inst: false, keep_waves: -1, field: [7409], trigger_type: CardTriggerType.Field }, - + // ==================== wave 8 档(范围攻击卡,ap 最高,间隔最短) ==================== { uuid: 8361, skill: 6201, wave: SKILL_CARD_WAVES[2], name: "雷墙++", info: "召唤雷墙阻挡敌人,有概率击晕", is_inst: false, t_inv: 4, keep_waves: -1, trigger_type: CardTriggerType.Interval, overrides: { ap: 250 } }, { uuid: 8362, skill: 6202, wave: SKILL_CARD_WAVES[2], name: "火墙++", info: "召唤火墙阻挡敌人,有概率击晕", is_inst: false, t_inv: 4, keep_waves: -1, trigger_type: CardTriggerType.Interval, overrides: { ap: 250 } }, { uuid: 8363, skill: 6203, wave: SKILL_CARD_WAVES[2], name: "飓风++", info: "召唤飓风攻击敌人,有概率击晕", is_inst: false, t_inv: 4, keep_waves: -1, trigger_type: CardTriggerType.Interval, overrides: { ap: 250 } }, { uuid: 8364, skill: 6204, wave: SKILL_CARD_WAVES[2], name: "水墙++", info: "召唤水墙阻挡敌人,有概率击晕", is_inst: false, t_inv: 4, keep_waves: -1, trigger_type: CardTriggerType.Interval, overrides: { ap: 250 } }, { uuid: 8365, skill: 6205, wave: SKILL_CARD_WAVES[2], name: "风墙++", info: "召唤风墙困住敌人,有概率击晕", is_inst: false, t_inv: 4, keep_waves: -1, trigger_type: CardTriggerType.Interval, overrides: { ap: 250 } }, { uuid: 8366, skill: 6206, wave: SKILL_CARD_WAVES[2], name: "陨石术++", info: "召唤陨石范围攻击敌人,有概率击晕", is_inst: false, t_inv: 4, keep_waves: -1, trigger_type: CardTriggerType.Interval, overrides: { ap: 250 } }, - - - { uuid: 8810, skill: 0, wave: SKILL_CARD_WAVES[2], name: "金币收益++", info: "每回合金币收益+3", is_inst: false, keep_waves: -1, field: [7410], trigger_type: CardTriggerType.Field }, - - { uuid: 8811, skill: 0, wave: SKILL_CARD_WAVES[2], name: "召唤强化++", info: "召唤触发技能次数+1", is_inst: false, keep_waves: -1, field: [7014], trigger_type: CardTriggerType.Field }, - { uuid: 8812, skill: 0, wave: SKILL_CARD_WAVES[2], name: "死亡强化++", info: "死亡触发技能次数+1", is_inst: false, keep_waves: -1, field: [7015], trigger_type: CardTriggerType.Field }, - { uuid: 8813, skill: 0, wave: SKILL_CARD_WAVES[2], name: "开场强化++", info: "战斗开始触发技能次数+1", is_inst: false, keep_waves: -1, field: [7016], trigger_type: CardTriggerType.Field }, - { uuid: 8814, skill: 0, wave: SKILL_CARD_WAVES[2], name: "结束强化++", info: "战斗结束触发技能次数+1", is_inst: false, keep_waves: -1, field: [7017], trigger_type: CardTriggerType.Field }, - { uuid: 8815, skill: 0, wave: SKILL_CARD_WAVES[2], name: "攻击强化++", info: "攻击触发技能次数+1", is_inst: false, keep_waves: -1, field: [7018], trigger_type: CardTriggerType.Field }, - { uuid: 8816, skill: 0, wave: SKILL_CARD_WAVES[2], name: "受击强化++", info: "被攻击触发技能次数+1", is_inst: false, keep_waves: -1, field: [7019], trigger_type: CardTriggerType.Field }, - // --- 多词条装备示例(一张卡自带多条属性词条) --- - { uuid: 8820, skill: 0, wave: SKILL_CARD_WAVES[2], name: "神圣之刃", info: "英雄攻击力+30%, 暴击率+30%, 暴击伤害+60%, 攻速+30%", is_inst: false, keep_waves: -1, field: [7402, 7404, 7405, 7406], trigger_type: CardTriggerType.Field }, - // --- 范围攻击卡(ap 最高,间隔最短) --- ]; SkillCardData.forEach(data => { @@ -269,6 +209,29 @@ SkillCardData.forEach(data => { }); }); +// 装备卡统一从 EquipSet 注册到 CardPoolList(trigger_type=Field,keep_waves=-1) +EquipCardData.forEach(data => { + const cardLv = waveToCardLv[data.wave] ?? 1; + CardPoolList.push({ + uuid: data.uuid, + type: CardType.Skill, + cost: data.cost ?? 0, + weight: 10, + pool_lv: CardLV.LV1, + wave: data.wave, + kind: CKind.Skill, + card_lv: cardLv, + name: data.name, + info: data.info, + is_inst: false, + t_times: 999, + t_inv: 0, + keep_waves: -1, + field: data.field, + trigger_type: CardTriggerType.Field, + }); +}); + export enum SpecialRefreshHeroType { Any = 0, @@ -329,26 +292,8 @@ const clampCardLv = (lv: number): CardLV => { } // ============ 装备(光环类技能卡)语义化封装 ============ -// 说明:不新增 CardType / CKind,以 trigger_type=Field 且 field 非空作为装备识别标志, -// 复用现有 CardConfig.field: number[] 天然支持单卡多词条(一张装备自带多条属性加成)。 - -/** - * 判断卡牌是否为「装备」(光环类技能卡)。 - * 判定条件:trigger_type 为 Field,且 field 数组非空。 - */ -export const isEquipmentCard = (card: CardConfig): boolean => { - return card.trigger_type === CardTriggerType.Field - && !!card.field - && card.field.length > 0; -} - -/** - * 获取装备卡的属性词条数量。 - * 非装备卡返回 0;装备卡返回 field 数组长度。 - */ -export const getEquipmentFieldCount = (card: CardConfig): number => { - return isEquipmentCard(card) ? (card.field?.length ?? 0) : 0; -} +// 装备判定逻辑已迁移至 EquipSet.ts,此处 re-export 保持外部引用兼容。 +export { isEquipmentCard, getEquipmentFieldCount }; /** 单次按权重抽取一张卡 */ const weightedPick = (cards: CardConfig[]): CardConfig | null => { diff --git a/assets/script/game/common/config/EquipSet.ts b/assets/script/game/common/config/EquipSet.ts new file mode 100644 index 00000000..7119d932 --- /dev/null +++ b/assets/script/game/common/config/EquipSet.ts @@ -0,0 +1,123 @@ +/** + * @file EquipSet.ts + * @description 装备卡池独立配置 + * + * 职责: + * 1. 定义所有装备卡的原始数据(EquipCardData)。 + * 2. 提供 isEquipmentCard / getEquipmentFieldCount 工具函数。 + * + * 设计说明: + * - 装备卡在运行时仍以 CardConfig 形式注册到 CardPoolList(由 CardSet.ts 统一映射), + * 保证 SkillBoxComp.init() 和 EquipListComp.applyCardData() 能通过 CardPoolList 查询配置。 + * - 装备卡统一 trigger_type = Field,keep_waves = -1(持续到战斗结束)。 + * - wave 档位区分强度:wave 1 (×1) / wave 5 (×2) / wave 8 (×3), + * field uuid 分别对应 FieldSkillSet 的 70xx / 72xx / 74xx 段。 + * + * 依赖: + * - GameSet.SKILL_CARD_WAVES —— wave 档位定义 + */ +import { SKILL_CARD_WAVES } from "./GameSet"; + +/** + * 装备卡原始数据(不含 CardType/CKind 等框架字段,由 CardSet.ts 统一映射为 CardConfig)。 + * trigger_type 固定为 Field,keep_waves 固定为 -1。 + */ +export interface EquipCardRaw { + /** 装备唯一标识 */ + uuid: number; + /** 所属波次档位 */ + wave: number; + /** 装备名称 */ + name: string; + /** 装备描述 */ + info: string; + /** 属性词条数组(指向 FieldSkillSet uuid),支持单卡多词条 */ + field: number[]; + /** 购买费用(默认 0) */ + cost?: number; +} + +// ==================== 装备卡数据 ==================== + +export const EquipCardData: EquipCardRaw[] = [ + // ==================== wave 1 档(基础强度) ==================== + + { uuid: 8701, wave: SKILL_CARD_WAVES[0], name: "战后恢复", info: "战斗结束生命回复量+10%", field: [7001] }, + { uuid: 8702, wave: SKILL_CARD_WAVES[0], name: "攻击加成", info: "英雄攻击力+10%", field: [7002] }, + { uuid: 8703, wave: SKILL_CARD_WAVES[0], name: "击晕加成", info: "英雄击晕概率+10%", field: [7003] }, + { uuid: 8704, wave: SKILL_CARD_WAVES[0], name: "暴击加成", info: "英雄暴击率+10%", field: [7004] }, + { uuid: 8705, wave: SKILL_CARD_WAVES[0], name: "暴伤加成", info: "英雄暴击伤害+20%", field: [7005] }, + { uuid: 8706, wave: SKILL_CARD_WAVES[0], name: "攻速加成", info: "英雄攻击速度+10%", field: [7006] }, + { uuid: 8707, wave: SKILL_CARD_WAVES[0], name: "生命加成", info: "英雄最大生命+10%", field: [7007] }, + { uuid: 8708, wave: SKILL_CARD_WAVES[0], name: "风怒加成", info: "英雄风怒概率+10%", field: [7008] }, + { uuid: 8709, wave: SKILL_CARD_WAVES[0], name: "穿刺加成", info: "英雄穿刺概率+10%", field: [7009] }, + + { uuid: 8710, wave: SKILL_CARD_WAVES[0], name: "金币收益", info: "每回合金币收益+1", field: [7010] }, + { uuid: 8711, wave: SKILL_CARD_WAVES[0], name: "出售强化", info: "卖出英雄金币+1", field: [7011] }, + // --- 多词条装备 --- + { uuid: 8720, wave: SKILL_CARD_WAVES[0], name: "勇者护符", info: "英雄攻击力+10%, 暴击率+10%, 暴击伤害+20%", field: [7002, 7004, 7005] }, + + // ==================== wave 5 档(强度 ×2,field uuid 72xx 段) ==================== + + { uuid: 8751, wave: SKILL_CARD_WAVES[1], name: "战后恢复+", info: "战斗结束生命回复量+20%", field: [7201] }, + { uuid: 8752, wave: SKILL_CARD_WAVES[1], name: "攻击加成+", info: "英雄攻击力+20%", field: [7202] }, + { uuid: 8753, wave: SKILL_CARD_WAVES[1], name: "击晕加成+", info: "英雄击晕概率+20%", field: [7203] }, + { uuid: 8754, wave: SKILL_CARD_WAVES[1], name: "暴击加成+", info: "英雄暴击率+20%", field: [7204] }, + { uuid: 8755, wave: SKILL_CARD_WAVES[1], name: "暴伤加成+", info: "英雄暴击伤害+40%", field: [7205] }, + { uuid: 8756, wave: SKILL_CARD_WAVES[1], name: "攻速加成+", info: "英雄攻击速度+20%", field: [7206] }, + { uuid: 8757, wave: SKILL_CARD_WAVES[1], name: "生命加成+", info: "英雄最大生命+20%", field: [7207] }, + { uuid: 8758, wave: SKILL_CARD_WAVES[1], name: "风怒加成+", info: "英雄风怒概率+20%", field: [7208] }, + { uuid: 8759, wave: SKILL_CARD_WAVES[1], name: "穿刺加成+", info: "英雄穿刺概率+20%", field: [7209] }, + + { uuid: 8760, wave: SKILL_CARD_WAVES[1], name: "金币收益+", info: "每回合金币收益+2", field: [7210] }, + { uuid: 8761, wave: SKILL_CARD_WAVES[1], name: "购买优惠+", info: "购买卡牌费用-2金币", field: [7212] }, + { uuid: 8762, wave: SKILL_CARD_WAVES[1], name: "刷新优惠", info: "刷新卡牌费用-1金币", field: [7213] }, + // --- 多词条装备 --- + { uuid: 8770, wave: SKILL_CARD_WAVES[1], name: "守卫护甲", info: "英雄最大生命+20%, 战后生命回复+20%, 攻速+20%", field: [7207, 7201, 7206] }, + + // ==================== wave 8 档(强度 ×3,field uuid 74xx 段) ==================== + + { uuid: 8801, wave: SKILL_CARD_WAVES[2], name: "战后恢复++", info: "战斗结束生命回复量+30%", field: [7401] }, + { uuid: 8802, wave: SKILL_CARD_WAVES[2], name: "攻击加成++", info: "英雄攻击力+30%", field: [7402] }, + { uuid: 8803, wave: SKILL_CARD_WAVES[2], name: "击晕加成++", info: "英雄击晕概率+30%", field: [7403] }, + { uuid: 8804, wave: SKILL_CARD_WAVES[2], name: "暴击加成++", info: "英雄暴击率+30%", field: [7404] }, + { uuid: 8805, wave: SKILL_CARD_WAVES[2], name: "暴伤加成++", info: "英雄暴击伤害+60%", field: [7405] }, + { uuid: 8806, wave: SKILL_CARD_WAVES[2], name: "攻速加成++", info: "英雄攻击速度+30%", field: [7406] }, + { uuid: 8807, wave: SKILL_CARD_WAVES[2], name: "生命加成++", info: "英雄最大生命+30%", field: [7407] }, + { uuid: 8808, wave: SKILL_CARD_WAVES[2], name: "风怒加成++", info: "英雄风怒概率+30%", field: [7408] }, + { uuid: 8809, wave: SKILL_CARD_WAVES[2], name: "穿刺加成++", info: "英雄穿刺概率+30%", field: [7409] }, + + { uuid: 8810, wave: SKILL_CARD_WAVES[2], name: "金币收益++", info: "每回合金币收益+3", field: [7410] }, + + { uuid: 8811, wave: SKILL_CARD_WAVES[2], name: "召唤强化++", info: "召唤触发技能次数+1", field: [7014] }, + { uuid: 8812, wave: SKILL_CARD_WAVES[2], name: "死亡强化++", info: "死亡触发技能次数+1", field: [7015] }, + { uuid: 8813, wave: SKILL_CARD_WAVES[2], name: "开场强化++", info: "战斗开始触发技能次数+1", field: [7016] }, + { uuid: 8814, wave: SKILL_CARD_WAVES[2], name: "结束强化++", info: "战斗结束触发技能次数+1", field: [7017] }, + { uuid: 8815, wave: SKILL_CARD_WAVES[2], name: "攻击强化++", info: "攻击触发技能次数+1", field: [7018] }, + { uuid: 8816, wave: SKILL_CARD_WAVES[2], name: "受击强化++", info: "被攻击触发技能次数+1", field: [7019] }, + // --- 多词条装备 --- + { uuid: 8820, wave: SKILL_CARD_WAVES[2], name: "神圣之刃", info: "英雄攻击力+30%, 暴击率+30%, 暴击伤害+60%, 攻速+30%", field: [7402, 7404, 7405, 7406] }, +]; + +// ==================== 工具函数 ==================== + +/** + * 判断卡牌是否为「装备」(光环类技能卡)。 + * 判定条件:trigger_type 为 Field(3),且 field 数组非空。 + * + * 使用数字字面量 3 避免对 CardSet.CardTriggerType 的运行时依赖, + * 由 CardSet.ts 注册时统一填充 trigger_type = CardTriggerType.Field。 + */ +export const isEquipmentCard = (card: { trigger_type?: number; field?: number[] }): boolean => { + return card.trigger_type === 3 + && !!card.field + && card.field.length > 0; +} + +/** + * 获取装备卡的属性词条数量。 + * 非装备卡返回 0;装备卡返回 field 数组长度。 + */ +export const getEquipmentFieldCount = (card: { trigger_type?: number; field?: number[] }): number => { + return isEquipmentCard(card) ? (card.field?.length ?? 0) : 0; +}