diff --git a/assets/script/game/common/SingletonModuleComp.ts b/assets/script/game/common/SingletonModuleComp.ts index 24caf35c..c50dabb2 100644 --- a/assets/script/game/common/SingletonModuleComp.ts +++ b/assets/script/game/common/SingletonModuleComp.ts @@ -70,7 +70,7 @@ export interface DeadHeroRecord { /** 死亡时的英雄等级(复活后继承) */ lv: number; /** 卡牌等级(驱动 bg_node 颜色) */ - card_lv: number; + rarity: number; /** 死亡时占用的站位索引(复活时优先归位,-1 表示未分配) */ posIndex: number; /** 死亡时的回合数(用于统计/按回合清理) */ diff --git a/assets/script/game/common/config/CardSet.ts b/assets/script/game/common/config/CardSet.ts index 84cc52c7..2669b1f1 100644 --- a/assets/script/game/common/config/CardSet.ts +++ b/assets/script/game/common/config/CardSet.ts @@ -57,10 +57,10 @@ export interface CardConfig { cost: number weight: number kind: CKind - card_lv: number // 卡牌等级(驱动 bg_node 颜色:1=green 2=blue 3=purple 4=red 5=yellow) + rarity: number // 卡牌等级(驱动 bg_node 颜色:1=green 2=blue 3=purple 4=red 5=yellow) wave?: number // 针对技能卡:仅在指定回合(wave)才能抽到 hero_lv?: number - base_card_lv?: number + base_rarity?: number // 技能卡扩展属性 skill?: number // 关联的技能 UUID @@ -126,22 +126,22 @@ export interface SpecialRefreshCardConfig extends CardConfig { */ export const SpecialUpgradeCardList: Record = { 7001: { - uuid: 7001, type: CardType.SpecialUpgrade, cost: 10, weight: 18, card_lv: 1, kind: CKind.Card, name: t("scard_name_7001"), info: t("scard_info_7001"), + uuid: 7001, type: CardType.SpecialUpgrade, cost: 10, weight: 18, rarity: 1, kind: CKind.Card, name: t("scard_name_7001"), info: t("scard_info_7001"), currentLv: 0, targetLv: 0, }, } export const SpecialRefreshCardList: Record = { 7101: { - uuid: 7101, type: CardType.SpecialRefresh, cost: 3, weight: 14, card_lv: 1, kind: CKind.Card, name: t("scard_name_7101"), info: t("scard_info_7101"), + uuid: 7101, type: CardType.SpecialRefresh, cost: 3, weight: 14, rarity: 1, kind: CKind.Card, name: t("scard_name_7101"), info: t("scard_info_7101"), refreshLv: 0, refreshHeroType: SpecialRefreshHeroType.Melee, }, 7102: { - uuid: 7102, type: CardType.SpecialRefresh, cost: 3, weight: 14, card_lv: 1, kind: CKind.Card, name: t("scard_name_7102"), info: t("scard_info_7102"), + uuid: 7102, type: CardType.SpecialRefresh, cost: 3, weight: 14, rarity: 1, kind: CKind.Card, name: t("scard_name_7102"), info: t("scard_info_7102"), refreshLv: 0, refreshHeroType: SpecialRefreshHeroType.Ranged, }, 7103: { - uuid: 7103, type: CardType.SpecialRefresh, cost: 4, weight: 12, card_lv: 1, kind: CKind.Card, name: t("scard_name_7103"), info: t("scard_info_7103"), + uuid: 7103, type: CardType.SpecialRefresh, cost: 4, weight: 12, rarity: 1, kind: CKind.Card, name: t("scard_name_7103"), info: t("scard_info_7103"), refreshLv: 0, refreshHeroType: SpecialRefreshHeroType.Any, }, } diff --git a/assets/script/game/common/config/EquipSet.ts b/assets/script/game/common/config/EquipSet.ts index cccd1d1b..26a2b07e 100644 --- a/assets/script/game/common/config/EquipSet.ts +++ b/assets/script/game/common/config/EquipSet.ts @@ -20,7 +20,7 @@ import { FieldEntry } from "./heroSet"; /** 装备卡原始数据(仅装备相关字段,由 EquipSet 内部转换为 CardConfig) */ interface EquipRawData { uuid: number; - card_lv: number; + rarity: number; name: string; info: string; icon?: string; // 图标ID(对应 ui6 图集 frame 名) @@ -30,56 +30,56 @@ interface EquipRawData { /** 装备卡原始数据表 */ const EquipRawList: EquipRawData[] = [ - // ==================== card_lv 1 档(基础强度) ==================== - { uuid: 8701, card_lv: 1, icon: "Helmet-FA_Helmet_021_Gray", name: "战后恢复", info: "战斗结束生命回复量+10%", field: [{ uuid: 7001, value: 0.1 }] }, - { uuid: 8702, card_lv: 1, icon: "Sword-FA_WP_Main_Sword_003_GrayGold", name: "攻击加成", info: "全体攻击力+10%", field: [{ uuid: 7002, value: 0.1 }] }, - { uuid: 8703, card_lv: 1, icon: "Blunt-FA_WP_Main_Blunt_002_Wood", name: "击晕加成", info: "全体击晕概率+10%", field: [{ uuid: 7003, value: 0.1 }] }, - { uuid: 8704, card_lv: 1, icon: "Axe-FA_WP_Main_Axe_001_WoodGray", name: "暴击加成", info: "全体暴击率+10%", field: [{ uuid: 7004, value: 0.1 }] }, - { uuid: 8705, card_lv: 1, icon: "Bow-FA_WP_Main_Bow_003_WoodGreen", name: "暴伤加成", info: "全体暴击伤害+20%", field: [{ uuid: 7005, value: 0.2 }] }, - { uuid: 8706, card_lv: 1, icon: "Crossbow-FA_WP_Main_Crossbow_001_WoodWhite", name: "攻速加成", info: "全体攻击速度+10%", field: [{ uuid: 7006, value: 0.1 }] }, - { uuid: 8707, card_lv: 1, icon: "Chest-FA_Chest_014_Gray", name: "生命加成", info: "全体最大生命+10%", field: [{ uuid: 7007, value: 0.1 }] }, + // ==================== rarity 1 档(基础强度) ==================== + { uuid: 8701, rarity: 1, icon: "Helmet-FA_Helmet_021_Gray", name: "战后恢复", info: "战斗结束生命回复量+10%", field: [{ uuid: 7001, value: 0.1 }] }, + { uuid: 8702, rarity: 1, icon: "Sword-FA_WP_Main_Sword_003_GrayGold", name: "攻击加成", info: "全体攻击力+10%", field: [{ uuid: 7002, value: 0.1 }] }, + { uuid: 8703, rarity: 1, icon: "Blunt-FA_WP_Main_Blunt_002_Wood", name: "击晕加成", info: "全体击晕概率+10%", field: [{ uuid: 7003, value: 0.1 }] }, + { uuid: 8704, rarity: 1, icon: "Axe-FA_WP_Main_Axe_001_WoodGray", name: "暴击加成", info: "全体暴击率+10%", field: [{ uuid: 7004, value: 0.1 }] }, + { uuid: 8705, rarity: 1, icon: "Bow-FA_WP_Main_Bow_003_WoodGreen", name: "暴伤加成", info: "全体暴击伤害+20%", field: [{ uuid: 7005, value: 0.2 }] }, + { uuid: 8706, rarity: 1, icon: "Crossbow-FA_WP_Main_Crossbow_001_WoodWhite", name: "攻速加成", info: "全体攻击速度+10%", field: [{ uuid: 7006, value: 0.1 }] }, + { uuid: 8707, rarity: 1, icon: "Chest-FA_Chest_014_Gray", name: "生命加成", info: "全体最大生命+10%", field: [{ uuid: 7007, value: 0.1 }] }, // 风怒机制已停用: 8708 风怒加成卡已移除 - // { uuid: 8708, card_lv: 1, icon: "Wand-FA_WP_Main_Wand_001_GrayGreen", name: "风怒加成", info: "全体风怒概率+10%", field: [{ uuid: 7008, value: 0.1 }] }, - { uuid: 8709, card_lv: 1, icon: "Spear-FA_WP_Main_Spear_004_WoodBlue", name: "穿刺加成", info: "全体穿刺概率+10%", field: [{ uuid: 7009, value: 0.1 }] }, - { uuid: 8712, card_lv: 1, icon: "Spear-FA_WP_Main_Spear_004_WoodBlue", name: "破甲加成", info: "全体穿透后伤害+10%", field: [{ uuid: 7020, value: 0.1 }] }, + // { uuid: 8708, rarity: 1, icon: "Wand-FA_WP_Main_Wand_001_GrayGreen", name: "风怒加成", info: "全体风怒概率+10%", field: [{ uuid: 7008, value: 0.1 }] }, + { uuid: 8709, rarity: 1, icon: "Spear-FA_WP_Main_Spear_004_WoodBlue", name: "穿刺加成", info: "全体穿刺概率+10%", field: [{ uuid: 7009, value: 0.1 }] }, + { uuid: 8712, rarity: 1, icon: "Spear-FA_WP_Main_Spear_004_WoodBlue", name: "破甲加成", info: "全体穿透后伤害+10%", field: [{ uuid: 7020, value: 0.1 }] }, // 多词条装备 - { uuid: 8720, card_lv: 1, icon: "Shield-FA_WP_Sub_Shield_007_GoldGray", name: "勇者护符", info: "全体攻击力+10%, 暴击率+10%, 暴击伤害+20%", field: [{ uuid: 7002, value: 0.1 }, { uuid: 7004, value: 0.1 }, { uuid: 7005, value: 0.2 }] }, + { uuid: 8720, rarity: 1, icon: "Shield-FA_WP_Sub_Shield_007_GoldGray", name: "勇者护符", info: "全体攻击力+10%, 暴击率+10%, 暴击伤害+20%", field: [{ uuid: 7002, value: 0.1 }, { uuid: 7004, value: 0.1 }, { uuid: 7005, value: 0.2 }] }, - // ==================== card_lv 2 档(强度 ×2) ==================== - { uuid: 8751, card_lv: 2, icon: "Helmet-FA_Helmet_022_DarkBlue", name: "战后恢复", info: "战斗结束生命回复量+20%", field: [{ uuid: 7001, value: 0.2 }] }, - { uuid: 8752, card_lv: 2, icon: "Sword-FA_WP_Main_Sword_007_Blue", name: "攻击加成", info: "全体攻击力+20%", field: [{ uuid: 7002, value: 0.2 }] }, - { uuid: 8753, card_lv: 2, icon: "Blunt-FA_WP_Main_Blunt_004_Gray", name: "击晕加成", info: "全体击晕概率+20%", field: [{ uuid: 7003, value: 0.2 }] }, - { uuid: 8754, card_lv: 2, icon: "Axe-FA_WP_Main_Axe_006_WoodBronze", name: "暴击加成", info: "全体暴击率+20%", field: [{ uuid: 7004, value: 0.2 }] }, - { uuid: 8755, card_lv: 2, icon: "Bow-FA_WP_Main_Bow_010_Blue", name: "暴伤加成", info: "全体暴击伤害+40%", field: [{ uuid: 7005, value: 0.4 }] }, - { uuid: 8756, card_lv: 2, icon: "Crossbow-FA_WP_Main_Crossbow_004_Gray", name: "攻速加成", info: "全体攻击速度+20%", field: [{ uuid: 7006, value: 0.2 }] }, - { uuid: 8757, card_lv: 2, icon: "Chest-FA_Chest_014_BlueGold", name: "生命加成", info: "全体最大生命+20%", field: [{ uuid: 7007, value: 0.2 }] }, + // ==================== rarity 2 档(强度 ×2) ==================== + { uuid: 8751, rarity: 2, icon: "Helmet-FA_Helmet_022_DarkBlue", name: "战后恢复", info: "战斗结束生命回复量+20%", field: [{ uuid: 7001, value: 0.2 }] }, + { uuid: 8752, rarity: 2, icon: "Sword-FA_WP_Main_Sword_007_Blue", name: "攻击加成", info: "全体攻击力+20%", field: [{ uuid: 7002, value: 0.2 }] }, + { uuid: 8753, rarity: 2, icon: "Blunt-FA_WP_Main_Blunt_004_Gray", name: "击晕加成", info: "全体击晕概率+20%", field: [{ uuid: 7003, value: 0.2 }] }, + { uuid: 8754, rarity: 2, icon: "Axe-FA_WP_Main_Axe_006_WoodBronze", name: "暴击加成", info: "全体暴击率+20%", field: [{ uuid: 7004, value: 0.2 }] }, + { uuid: 8755, rarity: 2, icon: "Bow-FA_WP_Main_Bow_010_Blue", name: "暴伤加成", info: "全体暴击伤害+40%", field: [{ uuid: 7005, value: 0.4 }] }, + { uuid: 8756, rarity: 2, icon: "Crossbow-FA_WP_Main_Crossbow_004_Gray", name: "攻速加成", info: "全体攻击速度+20%", field: [{ uuid: 7006, value: 0.2 }] }, + { uuid: 8757, rarity: 2, icon: "Chest-FA_Chest_014_BlueGold", name: "生命加成", info: "全体最大生命+20%", field: [{ uuid: 7007, value: 0.2 }] }, // 风怒机制已停用: 8758 风怒加成卡已移除 - // { uuid: 8758, card_lv: 2, icon: "Wand-FA_WP_Main_Wand_003_BlueWood", name: "风怒加成", info: "全体风怒概率+20%", field: [{ uuid: 7008, value: 0.2 }] }, - { uuid: 8759, card_lv: 2, icon: "Spear-FA_WP_Main_Spear_007_GraySkyblue", name: "穿刺加成", info: "全体穿刺概率+20%", field: [{ uuid: 7009, value: 0.2 }] }, - { uuid: 8763, card_lv: 2, icon: "Spear-FA_WP_Main_Spear_007_GraySkyblue", name: "破甲加成", info: "全体穿透后伤害+20%", field: [{ uuid: 7020, value: 0.2 }] }, + // { uuid: 8758, rarity: 2, icon: "Wand-FA_WP_Main_Wand_003_BlueWood", name: "风怒加成", info: "全体风怒概率+20%", field: [{ uuid: 7008, value: 0.2 }] }, + { uuid: 8759, rarity: 2, icon: "Spear-FA_WP_Main_Spear_007_GraySkyblue", name: "穿刺加成", info: "全体穿刺概率+20%", field: [{ uuid: 7009, value: 0.2 }] }, + { uuid: 8763, rarity: 2, icon: "Spear-FA_WP_Main_Spear_007_GraySkyblue", name: "破甲加成", info: "全体穿透后伤害+20%", field: [{ uuid: 7020, value: 0.2 }] }, // 多词条装备 - { uuid: 8770, card_lv: 2, icon: "Chest-FA_Chest_014_BlueGold", name: "守卫护甲", info: "全体最大生命+20%, 战后生命回复+20%, 攻速+20%", field: [{ uuid: 7007, value: 0.2 }, { uuid: 7001, value: 0.2 }, { uuid: 7006, value: 0.2 }] }, + { uuid: 8770, rarity: 2, icon: "Chest-FA_Chest_014_BlueGold", name: "守卫护甲", info: "全体最大生命+20%, 战后生命回复+20%, 攻速+20%", field: [{ uuid: 7007, value: 0.2 }, { uuid: 7001, value: 0.2 }, { uuid: 7006, value: 0.2 }] }, - // ==================== card_lv 3 档(强度 ×3) ==================== - { uuid: 8801, card_lv: 3, icon: "Helmet-FA_Helmet_021_RedGold", name: "战后恢复", info: "战斗结束生命回复量+30%", field: [{ uuid: 7001, value: 0.3 }] }, - { uuid: 8802, card_lv: 3, icon: "Sword-FA_WP_Main_Sword_001_Gold", name: "攻击加成", info: "全体攻击力+30%", field: [{ uuid: 7002, value: 0.3 }] }, - { uuid: 8803, card_lv: 3, icon: "Blunt-FA_WP_Main_Blunt_006_OrangeGray", name: "击晕加成", info: "全体击晕概率+30%", field: [{ uuid: 7003, value: 0.3 }] }, - { uuid: 8804, card_lv: 3, icon: "Axe-FA_WP_Main_Axe_012_WoodGold", name: "暴击加成", info: "全体暴击率+30%", field: [{ uuid: 7004, value: 0.3 }] }, - { uuid: 8805, card_lv: 3, icon: "Bow-FA_WP_Main_Bow_010_Gold", name: "暴伤加成", info: "全体暴击伤害+60%", field: [{ uuid: 7005, value: 0.6 }] }, - { uuid: 8806, card_lv: 3, icon: "Crossbow-FA_WP_Main_Crossbow_005_WoodGold", name: "攻速加成", info: "全体攻击速度+30%", field: [{ uuid: 7006, value: 0.3 }] }, - { uuid: 8807, card_lv: 3, icon: "Chest-FA_Chest_015_RedGold", name: "生命加成", info: "全体最大生命+30%", field: [{ uuid: 7007, value: 0.3 }] }, + // ==================== rarity 3 档(强度 ×3) ==================== + { uuid: 8801, rarity: 3, icon: "Helmet-FA_Helmet_021_RedGold", name: "战后恢复", info: "战斗结束生命回复量+30%", field: [{ uuid: 7001, value: 0.3 }] }, + { uuid: 8802, rarity: 3, icon: "Sword-FA_WP_Main_Sword_001_Gold", name: "攻击加成", info: "全体攻击力+30%", field: [{ uuid: 7002, value: 0.3 }] }, + { uuid: 8803, rarity: 3, icon: "Blunt-FA_WP_Main_Blunt_006_OrangeGray", name: "击晕加成", info: "全体击晕概率+30%", field: [{ uuid: 7003, value: 0.3 }] }, + { uuid: 8804, rarity: 3, icon: "Axe-FA_WP_Main_Axe_012_WoodGold", name: "暴击加成", info: "全体暴击率+30%", field: [{ uuid: 7004, value: 0.3 }] }, + { uuid: 8805, rarity: 3, icon: "Bow-FA_WP_Main_Bow_010_Gold", name: "暴伤加成", info: "全体暴击伤害+60%", field: [{ uuid: 7005, value: 0.6 }] }, + { uuid: 8806, rarity: 3, icon: "Crossbow-FA_WP_Main_Crossbow_005_WoodGold", name: "攻速加成", info: "全体攻击速度+30%", field: [{ uuid: 7006, value: 0.3 }] }, + { uuid: 8807, rarity: 3, icon: "Chest-FA_Chest_015_RedGold", name: "生命加成", info: "全体最大生命+30%", field: [{ uuid: 7007, value: 0.3 }] }, // 风怒机制已停用: 8808 风怒加成卡已移除 - // { uuid: 8808, card_lv: 3, icon: "Wand-FA_WP_Main_Wand_004_WoodGold", name: "风怒加成", info: "全体风怒概率+30%", field: [{ uuid: 7008, value: 0.3 }] }, - { uuid: 8809, card_lv: 3, icon: "Spear-FA_WP_Main_Spear_008_GrayGold", name: "穿刺加成", info: "全体穿刺概率+30%", field: [{ uuid: 7009, value: 0.3 }] }, - { uuid: 8817, card_lv: 3, icon: "Spear-FA_WP_Main_Spear_008_GrayGold", name: "破甲加成", info: "全体穿透后伤害+30%", field: [{ uuid: 7020, value: 0.3 }] }, + // { uuid: 8808, rarity: 3, icon: "Wand-FA_WP_Main_Wand_004_WoodGold", name: "风怒加成", info: "全体风怒概率+30%", field: [{ uuid: 7008, value: 0.3 }] }, + { uuid: 8809, rarity: 3, icon: "Spear-FA_WP_Main_Spear_008_GrayGold", name: "穿刺加成", info: "全体穿刺概率+30%", field: [{ uuid: 7009, value: 0.3 }] }, + { uuid: 8817, rarity: 3, icon: "Spear-FA_WP_Main_Spear_008_GrayGold", name: "破甲加成", info: "全体穿透后伤害+30%", field: [{ uuid: 7020, value: 0.3 }] }, // 触发次数强化 - { uuid: 8811, card_lv: 3, icon: "Wand-FA_WP_Main_Wand_004_WoodGold", name: "召唤强化", info: "召唤触发技能次数+1", field: [{ uuid: 7014, value: 1 }] }, - { uuid: 8812, card_lv: 3, icon: "Staff-FA_WP_Main_Staff_005_WoodGold", name: "死亡强化", info: "死亡触发技能次数+1", field: [{ uuid: 7015, value: 1 }] }, - { uuid: 8813, card_lv: 3, icon: "Spear-FA_WP_Main_Spear_008_GrayGold", name: "开场强化", info: "战斗开始触发技能次数+1", field: [{ uuid: 7016, value: 1 }] }, - { uuid: 8815, card_lv: 3, icon: "Sword-FA_WP_Main_Sword_001_Gold", name: "攻击强化", info: "攻击触发技能次数+1", field: [{ uuid: 7018, value: 1 }] }, - { uuid: 8816, card_lv: 3, icon: "Shield-FA_WP_Sub_Shield_009_RedGold", name: "受击强化", info: "被攻击触发技能次数+1", field: [{ uuid: 7019, value: 1 }] }, + { uuid: 8811, rarity: 3, icon: "Wand-FA_WP_Main_Wand_004_WoodGold", name: "召唤强化", info: "召唤触发技能次数+1", field: [{ uuid: 7014, value: 1 }] }, + { uuid: 8812, rarity: 3, icon: "Staff-FA_WP_Main_Staff_005_WoodGold", name: "死亡强化", info: "死亡触发技能次数+1", field: [{ uuid: 7015, value: 1 }] }, + { uuid: 8813, rarity: 3, icon: "Spear-FA_WP_Main_Spear_008_GrayGold", name: "开场强化", info: "战斗开始触发技能次数+1", field: [{ uuid: 7016, value: 1 }] }, + { uuid: 8815, rarity: 3, icon: "Sword-FA_WP_Main_Sword_001_Gold", name: "攻击强化", info: "攻击触发技能次数+1", field: [{ uuid: 7018, value: 1 }] }, + { uuid: 8816, rarity: 3, icon: "Shield-FA_WP_Sub_Shield_009_RedGold", name: "受击强化", info: "被攻击触发技能次数+1", field: [{ uuid: 7019, value: 1 }] }, // 多词条装备 - { uuid: 8820, card_lv: 3, icon: "Sword-FA_WP_Main_Sword_001_Gold", name: "神圣之刃", info: "全体攻击力+30%, 暴击率+30%, 暴击伤害+60%, 攻速+30%", field: [{ uuid: 7002, value: 0.3 }, { uuid: 7004, value: 0.3 }, { uuid: 7005, value: 0.6 }, { uuid: 7006, value: 0.3 }] }, + { uuid: 8820, rarity: 3, icon: "Sword-FA_WP_Main_Sword_001_Gold", name: "神圣之刃", info: "全体攻击力+30%, 暴击率+30%, 暴击伤害+60%, 攻速+30%", field: [{ uuid: 7002, value: 0.3 }, { uuid: 7004, value: 0.3 }, { uuid: 7005, value: 0.6 }, { uuid: 7006, value: 0.3 }] }, ]; /** @@ -98,7 +98,7 @@ export const EquipPoolList: CardConfig[] = EquipRawList.map(data => ({ cost: data.cost ?? 0, weight: 10, kind: CKind.Skill, - card_lv: data.card_lv, + rarity: data.rarity, icon: data.icon, name: data.name, info: data.info, diff --git a/assets/script/game/common/config/GameSet.ts b/assets/script/game/common/config/GameSet.ts index d2e49075..9ab0d223 100644 --- a/assets/script/game/common/config/GameSet.ts +++ b/assets/script/game/common/config/GameSet.ts @@ -103,7 +103,7 @@ export const HERO_UPGRADE_NEED_FRAGMENTS: Record = { /** * 技能卡牌出现的回合配置(单一数据源)。 - * 数组索引 i 对应卡牌档位 card_lv = i + 1: + * 数组索引 i 对应卡牌档位 rarity = i + 1: * - 第 1 个回合 → LV1 档(基础强度) * - 第 2 个回合 → LV2 档(强度 ×2) * - 第 3 个回合 → LV3 档(强度 ×3) @@ -207,10 +207,10 @@ export function getLvColor(lv: number): Color { } /** - * card_lv → 背景颜色节点名映射:1=green 2=blue 3=purple 4=yellow 5=red + * rarity → 背景颜色节点名映射:1=green 2=blue 3=purple 4=yellow 5=red * 用于 BG_node 下子节点的显隐切换 */ -export const CARD_LV_BG_COLORS: string[] = ["green", "blue", "purple", "yellow", "red"]; +export const RARITY_BG_COLORS: string[] = ["green", "blue", "purple", "yellow", "red"]; /** * 战斗结算奖励配置(每局结束后发放:英雄碎片 + 金币 + 天赋经验)。 diff --git a/assets/script/game/common/config/HeroDesignSpec.md b/assets/script/game/common/config/HeroDesignSpec.md index ec4d1a97..1f890dbb 100644 --- a/assets/script/game/common/config/HeroDesignSpec.md +++ b/assets/script/game/common/config/HeroDesignSpec.md @@ -8,7 +8,7 @@ ## 编号体系 -| 号段 | card_lv | 说明 | +| 号段 | rarity | 说明 | |------|---------|------| | 5001-5099 | 1 | 绿卡英雄池 | | 5101-5199 | 2 | 蓝卡英雄池 | @@ -44,26 +44,26 @@ ## 规则 2:品质-档位标准 -**card_lv = 基础 1 + 能力加成** +**rarity = 基础 1 + 能力加成** | 能力项 | 加成 | 说明 | |--------|------|------| -| 基础触发技能(1个,单体) | +0 | card_lv=1 | -| 更高数值 | +1 | card_lv=2 | -| ap/hp 成长 | +1 | card_lv=2 | -| 范围扩大(单体→全体) | +2 | card_lv=3 | -| 双技能(+revive/光环) | +4 | card_lv=5 | +| 基础触发技能(1个,单体) | +0 | rarity=1 | +| 更高数值 | +1 | rarity=2 | +| ap/hp 成长 | +1 | rarity=2 | +| 范围扩大(单体→全体) | +2 | rarity=3 | +| 双技能(+revive/光环) | +4 | rarity=5 | **组合示例:** -- 1 + 0 = card_lv 1(基础) -- 1 + 1 = card_lv 2(数值强化 或 ap/hp 成长) -- 1 + 2 = card_lv 3(范围扩大) -- 1 + 1 + 2 = card_lv 4(数值 + 范围) -- 1 + 4 = card_lv 5(双技能) +- 1 + 0 = rarity 1(基础) +- 1 + 1 = rarity 2(数值强化 或 ap/hp 成长) +- 1 + 2 = rarity 3(范围扩大) +- 1 + 1 + 2 = rarity 4(数值 + 范围) +- 1 + 4 = rarity 5(双技能) **双技能定义**:指英雄同时拥有**两个不同的触发类型字段**(如 atked + revive,或 dead + field)。同一触发类型下的 TriggerGrouped 挂多个 s_uuid 属于主触发类型内的能力组合,不算"双技能"。 -**原则:每个英雄单独讨论,根据能力组合定 card_lv,不死板规定。** +**原则:每个英雄单独讨论,根据能力组合定 rarity,不死板规定。** ## 规则 3:命名规则 @@ -124,7 +124,7 @@ ## 当前英雄池 -| 编号 | 名称 | card_lv | 触发类型 | 能力 | 状态 | +| 编号 | 名称 | rarity | 触发类型 | 能力 | 状态 | |------|------|---------|---------|------|------| | 5001 | 铁壁战士 | 1 | atked | 护盾 | 保留(原 5011) | | 5106 | 破甲射手 | 2 | atking | 穿透伤害(计时buff,技能 6512 + Buff 7022) | 已创建 | diff --git a/assets/script/game/common/config/ICardSet.ts b/assets/script/game/common/config/ICardSet.ts index b0da7d67..c8d66f30 100644 --- a/assets/script/game/common/config/ICardSet.ts +++ b/assets/script/game/common/config/ICardSet.ts @@ -70,7 +70,7 @@ export const ItemCardList: CardConfig[] = ItemCardData.map(data => ({ cost: data.cost, weight: data.weight, kind: CKind.Potion, - card_lv: 1, + rarity: 1, icon: data.icon, name: data.name, info: data.info, diff --git a/assets/script/game/common/config/SCardSet.ts b/assets/script/game/common/config/SCardSet.ts index 64b435ad..eb1f78c7 100644 --- a/assets/script/game/common/config/SCardSet.ts +++ b/assets/script/game/common/config/SCardSet.ts @@ -8,7 +8,7 @@ * 设计: * - 技能卡不再按 wave 过滤,所有技能卡均可被抽取。 * - 所有技能卡均按次数触发(t_times),不再永久存在。 - * - card_lv 直接显式配置,不再依赖 wave 推导。 + * - rarity 直接显式配置,不再依赖 wave 推导。 * - 数值基线高于普通英雄普攻(ap:100),通过 overrides 附加 ap/crt/frz/stun/bck 等效果。 * * 依赖: @@ -22,7 +22,7 @@ import { SkillOverrides } from "./SkillSet"; interface SkillCardRaw { uuid: number; skill: number; - card_lv: number; + rarity: number; name: string; info: string; icon?: string; // 图标ID(对应 ui6 图集 frame 名) @@ -35,30 +35,30 @@ interface SkillCardRaw { } const SkillCardData: SkillCardRaw[] = [ - // ==================== card_lv 1 · 基础单体(ap:150,附加差异化效果) ==================== + // ==================== rarity 1 · 基础单体(ap:150,附加差异化效果) ==================== // --- 刀剑系:暴击 --- - { uuid: 8101, skill: 6001, card_lv: 1, icon: "Sword-FA_WP_Main_Sword_003_PurpleSilver", name: "飞剑卷轴", info: "召唤飞剑攻击敌人,造成攻击力150%的伤害,25%暴击", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150, crt: 25 } }, - { uuid: 8102, skill: 6002, card_lv: 1, icon: "Sword-FA_WP_Main_Sword_019_WoodSilver", name: "匕首卷轴", info: "召唤匕首攻击敌人,造成攻击力150%的伤害,25%暴击", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150, crt: 25 } }, + { uuid: 8101, skill: 6001, rarity: 1, icon: "Sword-FA_WP_Main_Sword_003_PurpleSilver", name: "飞剑卷轴", info: "召唤飞剑攻击敌人,造成攻击力150%的伤害,25%暴击", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150, crt: 25 } }, + { uuid: 8102, skill: 6002, rarity: 1, icon: "Sword-FA_WP_Main_Sword_019_WoodSilver", name: "匕首卷轴", info: "召唤匕首攻击敌人,造成攻击力150%的伤害,25%暴击", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150, crt: 25 } }, // --- 斧锤系:击退 --- - { uuid: 8103, skill: 6003, card_lv: 1, icon: "Axe-FA_WP_Main_Axe_004_WoodGray", name: "飞斧卷轴", info: "召唤飞斧攻击敌人,造成攻击力150%的伤害,25%击退", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150, bck: 25 } }, + { uuid: 8103, skill: 6003, rarity: 1, icon: "Axe-FA_WP_Main_Axe_004_WoodGray", name: "飞斧卷轴", info: "召唤飞斧攻击敌人,造成攻击力150%的伤害,25%击退", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150, bck: 25 } }, // --- 枪矛系:穿透(多命中1次) --- - { uuid: 8105, skill: 6004, card_lv: 2, icon: "Stat_Attack_01", name: "突刺·双卷轴", info: "召唤突刺·双攻击敌人,一次释放2发,造成攻击力180%的伤害,可贯穿2个目标", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 180, hit_count: 2, num: 1 } }, + { uuid: 8105, skill: 6004, rarity: 2, icon: "Stat_Attack_01", name: "突刺·双卷轴", info: "召唤突刺·双攻击敌人,一次释放2发,造成攻击力180%的伤害,可贯穿2个目标", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 180, hit_count: 2, num: 1 } }, // --- 远程射击系:高暴击 --- - { uuid: 8106, skill: 6006, card_lv: 1, icon: "Stat_RangedAttack", name: "射击卷轴", info: "召唤射击攻击敌人,造成攻击力150%的伤害,30%暴击", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150, crt: 30 } }, - { uuid: 8107, skill: 6007, card_lv: 1, icon: "Stat_RangedAttack", name: "蓝箭卷轴", info: "召唤蓝箭攻击敌人,造成攻击力150%的伤害,30%暴击", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150, crt: 30 } }, - { uuid: 8108, skill: 6008, card_lv: 1, icon: "Stat_RangedAttack", name: "火箭卷轴", info: "召唤火箭攻击敌人,造成攻击力150%的伤害,30%暴击", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150, crt: 30 } }, + { uuid: 8106, skill: 6006, rarity: 1, icon: "Stat_RangedAttack", name: "射击卷轴", info: "召唤射击攻击敌人,造成攻击力150%的伤害,30%暴击", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150, crt: 30 } }, + { uuid: 8107, skill: 6007, rarity: 1, icon: "Stat_RangedAttack", name: "蓝箭卷轴", info: "召唤蓝箭攻击敌人,造成攻击力150%的伤害,30%暴击", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150, crt: 30 } }, + { uuid: 8108, skill: 6008, rarity: 1, icon: "Stat_RangedAttack", name: "火箭卷轴", info: "召唤火箭攻击敌人,造成攻击力150%的伤害,30%暴击", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150, crt: 30 } }, // --- 魔球系:击晕 --- - { uuid: 8109, skill: 6009, card_lv: 1, icon: "Sub_Item-FA_WP_Sub_MagicBall_001_Blue", name: "蓝魔球卷轴", info: "召唤蓝魔球攻击敌人,造成攻击力150%的伤害,25%击晕", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150, stun: 25 } }, - { uuid: 8110, skill: 6010, card_lv: 1, icon: "Sub_Item-FA_WP_Sub_MagicBall_001_Purple", name: "紫魔球卷轴", info: "召唤紫魔球攻击敌人,造成攻击力150%的伤害,25%击晕", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150, stun: 25 } }, + { uuid: 8109, skill: 6009, rarity: 1, icon: "Sub_Item-FA_WP_Sub_MagicBall_001_Blue", name: "蓝魔球卷轴", info: "召唤蓝魔球攻击敌人,造成攻击力150%的伤害,25%击晕", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150, stun: 25 } }, + { uuid: 8110, skill: 6010, rarity: 1, icon: "Sub_Item-FA_WP_Sub_MagicBall_001_Purple", name: "紫魔球卷轴", info: "召唤紫魔球攻击敌人,造成攻击力150%的伤害,25%击晕", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150, stun: 25 } }, // --- 药瓶系:冰冻 --- - { uuid: 8111, skill: 6011, card_lv: 1, icon: "Sub_Item-FA_WP_Sub_Potion_001_Green", name: "绿药瓶卷轴", info: "召唤绿药瓶攻击敌人,造成攻击力150%的伤害,25%冰冻", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150, frz: 25 } }, - { uuid: 8112, skill: 6012, card_lv: 1, icon: "Sub_Item-FA_WP_Sub_Potion_001_Red", name: "红药瓶卷轴", info: "召唤红药瓶攻击敌人,造成攻击力150%的伤害,25%冰冻", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150, frz: 25 } }, + { uuid: 8111, skill: 6011, rarity: 1, icon: "Sub_Item-FA_WP_Sub_Potion_001_Green", name: "绿药瓶卷轴", info: "召唤绿药瓶攻击敌人,造成攻击力150%的伤害,25%冰冻", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150, frz: 25 } }, + { uuid: 8112, skill: 6012, rarity: 1, icon: "Sub_Item-FA_WP_Sub_Potion_001_Red", name: "红药瓶卷轴", info: "召唤红药瓶攻击敌人,造成攻击力150%的伤害,25%冰冻", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150, frz: 25 } }, - // ==================== card_lv 2 · 中阶范围(ap:200,群体附加) ==================== - { uuid: 8201, skill: 6200, card_lv: 2, icon: "Stat_FireDamage", name: "火球·双卷轴", info: "召唤火球·双攻击敌人,一次释放2发,造成攻击力200%的伤害,30%暴击,可命中2个目标", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 200, crt: 30, num: 1 } }, - { uuid: 8202, skill: 6201, card_lv: 2, icon: "Stat_Mana", name: "飓风卷轴", info: "召唤飓风攻击敌人,造成攻击力200%的伤害,30%击晕,可命中2个目标", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 200, stun: 30 } }, + // ==================== rarity 2 · 中阶范围(ap:200,群体附加) ==================== + { uuid: 8201, skill: 6200, rarity: 2, icon: "Stat_FireDamage", name: "火球·双卷轴", info: "召唤火球·双攻击敌人,一次释放2发,造成攻击力200%的伤害,30%暴击,可命中2个目标", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 200, crt: 30, num: 1 } }, + { uuid: 8202, skill: 6201, rarity: 2, icon: "Stat_Mana", name: "飓风卷轴", info: "召唤飓风攻击敌人,造成攻击力200%的伤害,30%击晕,可命中2个目标", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 200, stun: 30 } }, - // ==================== card_lv 3 · 高阶范围(ap:250,群体附加) ==================== + // ==================== rarity 3 · 高阶范围(ap:250,群体附加) ==================== ]; /** @@ -75,7 +75,7 @@ export const SkillCardList: CardConfig[] = SkillCardData.map(data => { cost: 0, weight: 10, kind: CKind.Skill, - card_lv: data.card_lv, + rarity: data.rarity, icon: data.icon, name: data.name, info: data.info, diff --git a/assets/script/game/common/config/heroSet.data.json b/assets/script/game/common/config/heroSet.data.json index 7cb1214c..6a6c34bb 100644 --- a/assets/script/game/common/config/heroSet.data.json +++ b/assets/script/game/common/config/heroSet.data.json @@ -116,7 +116,7 @@ } ], "info": "", - "card_lv": 4, + "rarity": 4, "grow_type": "Mage", "role": "Mage", "trig_order": [ @@ -225,7 +225,7 @@ } ], "info": "", - "card_lv": 5, + "rarity": 5, "grow_type": "Warrior", "role": "Warrior", "trig_order": [ @@ -347,7 +347,7 @@ } ], "info": "", - "card_lv": 4, + "rarity": 4, "grow_type": "Warrior", "role": "Warrior", "trig_order": [ @@ -477,7 +477,7 @@ } ], "info": "", - "card_lv": 4, + "rarity": 4, "grow_type": "Mage", "role": "Mage", "trig_order": [ @@ -590,7 +590,7 @@ } ], "info": "", - "card_lv": 5, + "rarity": 5, "grow_type": "Tank", "role": "Tank", "trig_order": [ @@ -755,7 +755,7 @@ } ], "info": "", - "card_lv": 4, + "rarity": 4, "grow_type": "Support", "role": "Support", "trig_order": [ @@ -887,7 +887,7 @@ } ], "info": "", - "card_lv": 3, + "rarity": 3, "grow_type": "Tank", "role": "Tank", "trig_order": [ @@ -910,7 +910,7 @@ ], "block_comments": { "ap_bonus": [ - " // card_lv 3:lv9 无光环,改为基础属性+50%" + " // rarity 3:lv9 无光环,改为基础属性+50%" ] }, "ap_bonus": [ @@ -1006,7 +1006,7 @@ } ], "info": "", - "card_lv": 5, + "rarity": 5, "grow_type": "Warrior", "role": "Warrior", "trig_order": [ @@ -1116,7 +1116,7 @@ } ], "info": "", - "card_lv": 3, + "rarity": 3, "grow_type": "Tank", "role": "Tank", "trig_order": [ @@ -1161,7 +1161,7 @@ ], "block_comments": { "ap_bonus": [ - " // card_lv 3:lv9 无光环,改为基础属性+50%" + " // rarity 3:lv9 无光环,改为基础属性+50%" ] }, "ap_bonus": [ diff --git a/assets/script/game/common/config/heroSet.ts b/assets/script/game/common/config/heroSet.ts index 48ff6f13..a9877753 100644 --- a/assets/script/game/common/config/heroSet.ts +++ b/assets/script/game/common/config/heroSet.ts @@ -117,15 +117,15 @@ export const HERO_GROW_COEF: Record = { // 5001 紫电魔女 — atking 麻痹 + 大招 6203 大能量波(击退/麻痹)+ 攻击光环(深渊女王复刻) 5001: { - uuid: 5001, name: "紫电魔女", path: "hm1", fac: FacSet.HERO, card_lv: 4, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, hp: HERO_ROLE_BASE[HRole.Mage].hp - 5, ap: HERO_ROLE_BASE[HRole.Mage].ap + 10, def: HERO_ROLE_BASE[HRole.Mage].def, + uuid: 5001, name: "紫电魔女", path: "hm1", fac: FacSet.HERO, rarity: 4, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, hp: HERO_ROLE_BASE[HRole.Mage].hp - 5, ap: HERO_ROLE_BASE[HRole.Mage].ap + 10, def: HERO_ROLE_BASE[HRole.Mage].def, skills: { // 普攻:紫魔球底座 + overrides 注入麻痹 6010: { uuid: 6010, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, overrides: { ap: 100, para: 30 }, desc: "掷出紫魔球,对{target}造成攻击力{ap}%伤害,{para}%概率麻痹目标" }, @@ -497,7 +497,7 @@ export const HeroInfo: Record = { }, // 5002 刀刀暴击 — atking 暴击 + 大招 6100 光闪(出血/多段)+ 暴击/暴伤双光环(剑圣复刻) 5002: { - uuid: 5002, name: "刀刀暴击", path: "hk2", fac: FacSet.HERO, card_lv: 5, lv: 1, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, hp: HERO_ROLE_BASE[HRole.Warrior].hp, ap: HERO_ROLE_BASE[HRole.Warrior].ap + 15, def: HERO_ROLE_BASE[HRole.Warrior].def, + uuid: 5002, name: "刀刀暴击", path: "hk2", fac: FacSet.HERO, rarity: 5, lv: 1, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, hp: HERO_ROLE_BASE[HRole.Warrior].hp, ap: HERO_ROLE_BASE[HRole.Warrior].ap + 15, def: HERO_ROLE_BASE[HRole.Warrior].def, skills: { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, desc: "挥刀对{target}造成攻击力{ap}%伤害" }, // 大招:光闪,独立 cd,按英雄等级分档成长 @@ -523,7 +523,7 @@ export const HeroInfo: Record = { }, // 5003 格挡反杀 — fstart 剑气 + atked 护盾 + 大招 6103 闪电斩(减攻)(剑豪复刻) 5003: { - uuid: 5003, name: "格挡反杀", path: "hk4", fac: FacSet.HERO, card_lv: 4, lv: 1, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, hp: HERO_ROLE_BASE[HRole.Warrior].hp + 10, ap: HERO_ROLE_BASE[HRole.Warrior].ap + 5, def: HERO_ROLE_BASE[HRole.Warrior].def + 5, + uuid: 5003, name: "格挡反杀", path: "hk4", fac: FacSet.HERO, rarity: 4, lv: 1, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, hp: HERO_ROLE_BASE[HRole.Warrior].hp + 10, ap: HERO_ROLE_BASE[HRole.Warrior].ap + 5, def: HERO_ROLE_BASE[HRole.Warrior].def + 5, skills: { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, desc: "挥刀对{target}造成攻击力{ap}%伤害" }, // 大招:闪电斩,独立 cd,按英雄等级分档成长 @@ -554,7 +554,7 @@ export const HeroInfo: Record = { }, // 5004 冻住不谢 — atking 冰冻 + 大招 6203 大能量波(冰冻链)+ 击晕光环(巫妖王复刻) 5004: { - uuid: 5004, name: "冻住不谢", path: "hm2", fac: FacSet.HERO, card_lv: 4, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, hp: HERO_ROLE_BASE[HRole.Mage].hp, ap: HERO_ROLE_BASE[HRole.Mage].ap + 5, def: HERO_ROLE_BASE[HRole.Mage].def + 5, + uuid: 5004, name: "冻住不谢", path: "hm2", fac: FacSet.HERO, rarity: 4, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, hp: HERO_ROLE_BASE[HRole.Mage].hp, ap: HERO_ROLE_BASE[HRole.Mage].ap + 5, def: HERO_ROLE_BASE[HRole.Mage].def + 5, skills: { 6009: { uuid: 6009, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, desc: "射出寒冰珠,对{target}造成攻击力{ap}%伤害" }, // 大招:大能量波,独立 cd,按英雄等级分档成长 @@ -580,7 +580,7 @@ export const HeroInfo: Record = { }, // 5005 叠甲骑士 — 护盾大招 + fstart 防御 + dead 治疗 + revive 回光返照(黑暗骑士复刻) 5005: { - uuid: 5005, name: "叠甲骑士", path: "hk1", fac: FacSet.HERO, card_lv: 5, lv: 1, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, hp: HERO_ROLE_BASE[HRole.Tank].hp + 20, ap: HERO_ROLE_BASE[HRole.Tank].ap, def: HERO_ROLE_BASE[HRole.Tank].def + 10, + uuid: 5005, name: "叠甲骑士", path: "hk1", fac: FacSet.HERO, rarity: 5, lv: 1, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, hp: HERO_ROLE_BASE[HRole.Tank].hp + 20, ap: HERO_ROLE_BASE[HRole.Tank].ap, def: HERO_ROLE_BASE[HRole.Tank].def + 10, skills: { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, desc: "挥剑对{target}造成攻击力{ap}%伤害" }, // 大招位辅助技能:护盾,按英雄等级分档成长(护盾层数) @@ -616,7 +616,7 @@ export const HeroInfo: Record = { }, // 5006 光明奶爸 — 治疗大招 + atking 自疗 + fstart 防御 + 生命光环(光明骑士复刻) 5006: { - uuid: 5006, name: "光明奶爸", path: "hh1", fac: FacSet.HERO, card_lv: 4, lv: 1, type: HType.Long, grow_type: HGrowType.Support, role: HRole.Support, hp: HERO_ROLE_BASE[HRole.Support].hp + 15, ap: HERO_ROLE_BASE[HRole.Support].ap, def: HERO_ROLE_BASE[HRole.Support].def + 10, + uuid: 5006, name: "光明奶爸", path: "hh1", fac: FacSet.HERO, rarity: 4, lv: 1, type: HType.Long, grow_type: HGrowType.Support, role: HRole.Support, hp: HERO_ROLE_BASE[HRole.Support].hp + 15, ap: HERO_ROLE_BASE[HRole.Support].ap, def: HERO_ROLE_BASE[HRole.Support].def + 10, skills: { 6012: { uuid: 6012, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal].cd, ccd: 0, desc: "投掷药瓶,对{target}造成攻击力{ap}%伤害" }, // 大招:治疗,独立 cd,按英雄等级分档成长 @@ -647,7 +647,7 @@ export const HeroInfo: Record = { }, // 5007 微醺战神 — atking 击退 + 大招 6101 气斩(易伤),lv9 属性补偿(酒仙复刻) 5007: { - uuid: 5007, name: "微醺战神", path: "hk3", fac: FacSet.HERO, card_lv: 3, lv: 1, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, hp: HERO_ROLE_BASE[HRole.Tank].hp + 15, ap: HERO_ROLE_BASE[HRole.Tank].ap + 5, def: HERO_ROLE_BASE[HRole.Tank].def + 10, + uuid: 5007, name: "微醺战神", path: "hk3", fac: FacSet.HERO, rarity: 3, lv: 1, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, hp: HERO_ROLE_BASE[HRole.Tank].hp + 15, ap: HERO_ROLE_BASE[HRole.Tank].ap + 5, def: HERO_ROLE_BASE[HRole.Tank].def + 10, skills: { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, desc: "挥拳对{target}造成攻击力{ap}%伤害" }, // 大招:气斩,独立 cd,按英雄等级分档成长 @@ -666,14 +666,14 @@ export const HeroInfo: Record = { { lv: 6, s_lv: SkillLv.Lv1, name: "雷霆一击", t_num: 3, overrides: { bck: 40 }, desc: "重击{target},击退{bck}" }, ], }, - // card_lv 3:lv6 无光环,改为基础属性+50% + // rarity 3:lv6 无光环,改为基础属性+50% ap_bonus: [{ lv: 6, value: 0.5 }], hp_bonus: [{ lv: 6, value: 0.5 }], info: "", }, // 5008 眩晕暴击哥 — atking 暴击 + 大招 6104 开山斧(击晕)+ 暴伤光环(齐天大圣复刻) 5008: { - uuid: 5008, name: "眩晕暴击哥", path: "hk5", fac: FacSet.HERO, card_lv: 5, lv: 1, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, hp: HERO_ROLE_BASE[HRole.Warrior].hp + 5, ap: HERO_ROLE_BASE[HRole.Warrior].ap + 20, def: HERO_ROLE_BASE[HRole.Warrior].def, + uuid: 5008, name: "眩晕暴击哥", path: "hk5", fac: FacSet.HERO, rarity: 5, lv: 1, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, hp: HERO_ROLE_BASE[HRole.Warrior].hp + 5, ap: HERO_ROLE_BASE[HRole.Warrior].ap + 20, def: HERO_ROLE_BASE[HRole.Warrior].def, skills: { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, desc: "挥斧对{target}造成攻击力{ap}%伤害" }, // 大招:开山斧,独立 cd,按英雄等级分档成长 @@ -699,7 +699,7 @@ export const HeroInfo: Record = { }, // 5009 铁壳斧弟 — atked 叠防 + atking 自疗 + 大招 6101 气斩,lv9 属性补偿(斧小王复刻) 5009: { - uuid: 5009, name: "铁壳斧弟", path: "hc1", fac: FacSet.HERO, card_lv: 3, lv: 1, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, hp: HERO_ROLE_BASE[HRole.Tank].hp + 10, ap: HERO_ROLE_BASE[HRole.Tank].ap + 5, def: HERO_ROLE_BASE[HRole.Tank].def + 15, + uuid: 5009, name: "铁壳斧弟", path: "hc1", fac: FacSet.HERO, rarity: 3, lv: 1, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, hp: HERO_ROLE_BASE[HRole.Tank].hp + 10, ap: HERO_ROLE_BASE[HRole.Tank].ap + 5, def: HERO_ROLE_BASE[HRole.Tank].def + 15, skills: { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, desc: "挥斧对{target}造成攻击力{ap}%伤害" }, // 大招:气斩,独立 cd,按英雄等级分档成长 @@ -724,7 +724,7 @@ export const HeroInfo: Record = { { lv: 6, s_lv: SkillLv.Lv1, name: "坚硬皮肤", t_num: 2, overrides: { TGroup: TGroup.Self, timed_buff_id: 7023, buff_duration: 10 }, desc: "{target}防御提升{buff_value}%,持续{dur}秒" }, ], }, - // card_lv 3:lv6 无光环,改为基础属性+50% + // rarity 3:lv6 无光环,改为基础属性+50% ap_bonus: [{ lv: 6, value: 0.5 }], hp_bonus: [{ lv: 6, value: 0.5 }], info: "", @@ -733,7 +733,7 @@ export const HeroInfo: Record = { /* *=============怪物配置列表================ - * 怪物与英雄采用同一套设定体系:基础值 = HERO_ROLE_BASE[role],品质(card_lv) + * 怪物与英雄采用同一套设定体系:基础值 = HERO_ROLE_BASE[role],品质(rarity) * 相邻基础属性差 5%,成长系数走 HERO_GROW_COEF[grow_type]。 * 怪物普攻统一使用 SkillSet 基础单体攻击(6001~6012 段), * 并通过 overrides.ap=100 显式声明伤害为攻击力的 100%。 @@ -744,63 +744,63 @@ export const HeroInfo: Record = { // 基础怪物 (全部固定点位站桩攻击,HType仅决定是前排还是后排) // 前排怪物 — 战士系基准(Warrior 模板),变体按品质微分定位 6001: { - uuid: 6001, name: "兽人战士", path: "m1", fac: FacSet.MON, lv: 1, card_lv: 1, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, monType: MonType.Melee, hp: HERO_ROLE_BASE[HRole.Warrior].hp, ap: HERO_ROLE_BASE[HRole.Warrior].ap, def: HERO_ROLE_BASE[HRole.Warrior].def, speed: 70, + uuid: 6001, name: "兽人战士", path: "m1", fac: FacSet.MON, lv: 1, rarity: 1, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, monType: MonType.Melee, hp: HERO_ROLE_BASE[HRole.Warrior].hp, ap: HERO_ROLE_BASE[HRole.Warrior].ap, def: HERO_ROLE_BASE[HRole.Warrior].def, speed: 70, skills: { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, overrides: { ap: 100 } } }, info: "基础前排怪, 战士系基准" }, 6002: { - uuid: 6002, name: "兽人精锐战士", path: "m2", fac: FacSet.MON, lv: 1, card_lv: 2, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, monType: MonType.Melee, hp: HERO_ROLE_BASE[HRole.Warrior].hp, ap: HERO_ROLE_BASE[HRole.Warrior].ap, def: HERO_ROLE_BASE[HRole.Warrior].def, speed: 110, + uuid: 6002, name: "兽人精锐战士", path: "m2", fac: FacSet.MON, lv: 1, rarity: 2, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, monType: MonType.Melee, hp: HERO_ROLE_BASE[HRole.Warrior].hp, ap: HERO_ROLE_BASE[HRole.Warrior].ap, def: HERO_ROLE_BASE[HRole.Warrior].def, speed: 110, skills: { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0 } }, info: "进阶前排怪, 品质2更快更痛" }, 6003: { - uuid: 6003, name: "兽人重装兵", path: "m3", fac: FacSet.MON, lv: 1, card_lv: 2, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, monType: MonType.Heavy, hp: HERO_ROLE_BASE[HRole.Tank].hp, ap: HERO_ROLE_BASE[HRole.Tank].ap, def: HERO_ROLE_BASE[HRole.Tank].def, speed: 50, + uuid: 6003, name: "兽人重装兵", path: "m3", fac: FacSet.MON, lv: 1, rarity: 2, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, monType: MonType.Heavy, hp: HERO_ROLE_BASE[HRole.Tank].hp, ap: HERO_ROLE_BASE[HRole.Tank].ap, def: HERO_ROLE_BASE[HRole.Tank].def, speed: 50, skills: { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.VerySlow].cd, ccd: 0, overrides: { ap: 100 } } }, info: "重型坦克怪, 高HP低攻承伤位" }, // 后排怪物 — 射手/刺客/法系基准,变体按品质微分定位 6004: { - uuid: 6004, name: "兽人射手", path: "m4", fac: FacSet.MON, lv: 1, card_lv: 1, type: HType.Long, grow_type: HGrowType.Archer, role: HRole.Archer, monType: MonType.Long, hp: HERO_ROLE_BASE[HRole.Archer].hp, ap: HERO_ROLE_BASE[HRole.Archer].ap, def: HERO_ROLE_BASE[HRole.Archer].def, speed: 70, + uuid: 6004, name: "兽人射手", path: "m4", fac: FacSet.MON, lv: 1, rarity: 1, type: HType.Long, grow_type: HGrowType.Archer, role: HRole.Archer, monType: MonType.Long, hp: HERO_ROLE_BASE[HRole.Archer].hp, ap: HERO_ROLE_BASE[HRole.Archer].ap, def: HERO_ROLE_BASE[HRole.Archer].def, speed: 70, skills: { 6006: { uuid: 6006, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, overrides: { ap: 100 } } }, info: "后排输出怪, 射手系基准" }, 6005: { - uuid: 6005, name: "兽人刺客", path: "m5", fac: FacSet.MON, lv: 1, card_lv: 1, type: HType.Long, grow_type: HGrowType.Assassin, role: HRole.Assassin, monType: MonType.Assassin, hp: HERO_ROLE_BASE[HRole.Assassin].hp, ap: HERO_ROLE_BASE[HRole.Assassin].ap, def: HERO_ROLE_BASE[HRole.Assassin].def, speed: 130, + uuid: 6005, name: "兽人刺客", path: "m5", fac: FacSet.MON, lv: 1, rarity: 1, type: HType.Long, grow_type: HGrowType.Assassin, role: HRole.Assassin, monType: MonType.Assassin, hp: HERO_ROLE_BASE[HRole.Assassin].hp, ap: HERO_ROLE_BASE[HRole.Assassin].ap, def: HERO_ROLE_BASE[HRole.Assassin].def, speed: 130, skills: { 6002: { uuid: 6002, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal].cd, ccd: 0, overrides: { ap: 100, hit_count: 2 } } }, info: "高攻速低HP刺客" }, // 特殊位怪物 6006: { - uuid: 6006, name: "骷髅领主", path: "m6", fac: FacSet.MON, lv: 1, card_lv: 3, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, monType: MonType.MeleeBoss, hp: HERO_ROLE_BASE[HRole.Tank].hp, ap: HERO_ROLE_BASE[HRole.Tank].ap, def: HERO_ROLE_BASE[HRole.Tank].def, speed: 60, + uuid: 6006, name: "骷髅领主", path: "m6", fac: FacSet.MON, lv: 1, rarity: 3, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, monType: MonType.MeleeBoss, hp: HERO_ROLE_BASE[HRole.Tank].hp, ap: HERO_ROLE_BASE[HRole.Tank].ap, def: HERO_ROLE_BASE[HRole.Tank].def, speed: 60, skills: { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.VerySlow].cd, ccd: 0, overrides: { ap: 100 } } }, info: "前排MiniBoss级坦克" }, 6007: { - uuid: 6007, name: "兽人术士", path: "m7", fac: FacSet.MON, lv: 1, card_lv: 1, type: HType.Long, grow_type: HGrowType.Support, role: HRole.Support, monType: MonType.Support, hp: HERO_ROLE_BASE[HRole.Support].hp, ap: HERO_ROLE_BASE[HRole.Support].ap, def: HERO_ROLE_BASE[HRole.Support].def, speed: 70, + uuid: 6007, name: "兽人术士", path: "m7", fac: FacSet.MON, lv: 1, rarity: 1, type: HType.Long, grow_type: HGrowType.Support, role: HRole.Support, monType: MonType.Support, hp: HERO_ROLE_BASE[HRole.Support].hp, ap: HERO_ROLE_BASE[HRole.Support].ap, def: HERO_ROLE_BASE[HRole.Support].def, speed: 70, skills: { 6009: { uuid: 6009, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, overrides: { ap: 100, hit_count: 2 } } }, info: "后排辅助法师怪" }, 6008: { - uuid: 6008, name: "兽人火法", path: "m8", fac: FacSet.MON, lv: 1, card_lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, monType: MonType.Summoner, hp: HERO_ROLE_BASE[HRole.Mage].hp, ap: HERO_ROLE_BASE[HRole.Mage].ap, def: HERO_ROLE_BASE[HRole.Mage].def, speed: 70, + uuid: 6008, name: "兽人火法", path: "m8", fac: FacSet.MON, lv: 1, rarity: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, monType: MonType.Summoner, hp: HERO_ROLE_BASE[HRole.Mage].hp, ap: HERO_ROLE_BASE[HRole.Mage].ap, def: HERO_ROLE_BASE[HRole.Mage].def, speed: 70, skills: { 6010: { uuid: 6010, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, overrides: { ap: 100, hit_count: 2 } } }, info: "后排召唤系法师怪" }, // BOSS怪物 — 与英雄同一套设定(role 模板 + 品质系数),高品质承伤/输出位 6101: { - uuid: 6101, name: "兽人首领-双刀战士", path: "mb1", fac: FacSet.MON, lv: 6, card_lv: 4, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, monType: MonType.MeleeBoss, hp: HERO_ROLE_BASE[HRole.Warrior].hp, ap: HERO_ROLE_BASE[HRole.Warrior].ap, def: HERO_ROLE_BASE[HRole.Warrior].def, speed: 120, + uuid: 6101, name: "兽人首领-双刀战士", path: "mb1", fac: FacSet.MON, lv: 6, rarity: 4, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, monType: MonType.MeleeBoss, hp: HERO_ROLE_BASE[HRole.Warrior].hp, ap: HERO_ROLE_BASE[HRole.Warrior].ap, def: HERO_ROLE_BASE[HRole.Warrior].def, speed: 120, skills: { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, overrides: { ap: 100 } } }, info: "前排Boss, 攻速型" }, 6102: { - uuid: 6102, name: "兽人首领-斧头战士", path: "mb2", fac: FacSet.MON, lv: 6, card_lv: 5, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, monType: MonType.MeleeBoss, hp: HERO_ROLE_BASE[HRole.Tank].hp, ap: HERO_ROLE_BASE[HRole.Tank].ap, def: HERO_ROLE_BASE[HRole.Tank].def, speed: 60, + uuid: 6102, name: "兽人首领-斧头战士", path: "mb2", fac: FacSet.MON, lv: 6, rarity: 5, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, monType: MonType.MeleeBoss, hp: HERO_ROLE_BASE[HRole.Tank].hp, ap: HERO_ROLE_BASE[HRole.Tank].ap, def: HERO_ROLE_BASE[HRole.Tank].def, speed: 60, skills: { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.VerySlow].cd, ccd: 0, overrides: { ap: 100 } } }, info: "前排Boss, 超高HP" }, 6103: { - uuid: 6103, name: "兽人首领-魔法师", path: "mb3", fac: FacSet.MON, lv: 6, card_lv: 4, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, monType: MonType.LongBoss, hp: HERO_ROLE_BASE[HRole.Mage].hp, ap: HERO_ROLE_BASE[HRole.Mage].ap, def: HERO_ROLE_BASE[HRole.Mage].def, speed: 110, + uuid: 6103, name: "兽人首领-魔法师", path: "mb3", fac: FacSet.MON, lv: 6, rarity: 4, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, monType: MonType.LongBoss, hp: HERO_ROLE_BASE[HRole.Mage].hp, ap: HERO_ROLE_BASE[HRole.Mage].ap, def: HERO_ROLE_BASE[HRole.Mage].def, speed: 110, skills: { 6009: { uuid: 6009, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, overrides: { ap: 100, hit_count: 2 } } }, info: "后排法系Boss" }, 6104: { - uuid: 6104, name: "兽人首领-射手", path: "mb4", fac: FacSet.MON, lv: 6, card_lv: 4, type: HType.Long, grow_type: HGrowType.Archer, role: HRole.Archer, monType: MonType.LongBoss, hp: HERO_ROLE_BASE[HRole.Archer].hp, ap: HERO_ROLE_BASE[HRole.Archer].ap, def: HERO_ROLE_BASE[HRole.Archer].def, speed: 70, + uuid: 6104, name: "兽人首领-射手", path: "mb4", fac: FacSet.MON, lv: 6, rarity: 4, type: HType.Long, grow_type: HGrowType.Archer, role: HRole.Archer, monType: MonType.LongBoss, hp: HERO_ROLE_BASE[HRole.Archer].hp, ap: HERO_ROLE_BASE[HRole.Archer].ap, def: HERO_ROLE_BASE[HRole.Archer].def, speed: 70, skills: { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, overrides: { ap: 100 } } }, info: "后排位Boss, 均衡型" }, 6105: { - uuid: 6105, name: "亡灵首领-法师", path: "mb5", fac: FacSet.MON, lv: 6, card_lv: 5, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, monType: MonType.LongBoss, hp: HERO_ROLE_BASE[HRole.Mage].hp, ap: HERO_ROLE_BASE[HRole.Mage].ap, def: HERO_ROLE_BASE[HRole.Mage].def, speed: 110, + uuid: 6105, name: "亡灵首领-法师", path: "mb5", fac: FacSet.MON, lv: 6, rarity: 5, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, monType: MonType.LongBoss, hp: HERO_ROLE_BASE[HRole.Mage].hp, ap: HERO_ROLE_BASE[HRole.Mage].ap, def: HERO_ROLE_BASE[HRole.Mage].def, speed: 110, skills: { 6011: { uuid: 6011, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, overrides: { ap: 100, hit_count: 2, timed_buff_id: 7002 } } }, info: "后排高AP Boss" }, 6106: { - uuid: 6106, name: "亡灵首领-骑马战士", path: "mb6", fac: FacSet.MON, lv: 6, card_lv: 5, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, monType: MonType.MeleeBoss, hp: HERO_ROLE_BASE[HRole.Tank].hp, ap: HERO_ROLE_BASE[HRole.Tank].ap, def: HERO_ROLE_BASE[HRole.Tank].def, speed: 130, + uuid: 6106, name: "亡灵首领-骑马战士", path: "mb6", fac: FacSet.MON, lv: 6, rarity: 5, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, monType: MonType.MeleeBoss, hp: HERO_ROLE_BASE[HRole.Tank].hp, ap: HERO_ROLE_BASE[HRole.Tank].ap, def: HERO_ROLE_BASE[HRole.Tank].def, speed: 130, skills: { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.VerySlow].cd, ccd: 0, overrides: { ap: 100 } } }, info: "前排终极Boss, 最高HP+高速" }, @@ -825,7 +825,7 @@ export interface HeroComboInfo { name: string; // 阵容名称(体现流派) heroes: number[]; // 英雄 uuid 列表,固定 3 个;索引 0=前排,其余按站位从近到远 desc: string; // 配合思路说明(信息面板展示) - low_heroes?: number[]; // 低配替代阵容(card_lv 1~2,供新手期引导) + low_heroes?: number[]; // 低配替代阵容(rarity 1~2,供新手期引导) } /** @@ -883,21 +883,21 @@ export const HeroComboList: number[] = [8001, 8002, 8003, 8004, 8005, 8006]; * 英雄卡费用规则 * lv1=5, lv2=10, lv3+=15 */ -function getHeroCost(cardLv: number): number { - if (cardLv === 1) return 5; - if (cardLv === 2) return 10; +function getHeroCost(rarity: number): number { + if (rarity === 1) return 5; + if (rarity === 2) return 10; return 15; } /** - * 英雄卡按 card_lv 分配抽取权重(几何递减,高等级越稀有) + * 英雄卡按 rarity 分配抽取权重(几何递减,高等级越稀有) * 梯度:lv1=40, lv2=25, lv3=15, lv4=8, lv5=3 */ const HERO_WEIGHT_BY_LV: Record = { 1: 40, 2: 25, 3: 15, 4: 8, 5: 3, }; -function getHeroWeight(cardLv: number): number { - return HERO_WEIGHT_BY_LV[cardLv] ?? HERO_WEIGHT_BY_LV[1]; +function getHeroWeight(rarity: number): number { + return HERO_WEIGHT_BY_LV[rarity] ?? HERO_WEIGHT_BY_LV[1]; } // 动态生成英雄卡池:所有英雄统一生成 lv1 卡牌 @@ -906,9 +906,9 @@ HeroList.forEach(uuid => { if (!hero) return; HeroCardPoolList.push({ uuid: hero.uuid, - cost: getHeroCost(hero.card_lv ?? 1), - weight: getHeroWeight(hero.card_lv ?? 1), - card_lv: hero.card_lv ?? 1, + cost: getHeroCost(hero.rarity ?? 1), + weight: getHeroWeight(hero.rarity ?? 1), + rarity: hero.rarity ?? 1, }); }); @@ -1039,7 +1039,7 @@ export function getEffectiveStats(hero: heroInfo, targetLv: number): { hp: numbe */ export function getHeroDisplayStats(hero: heroInfo, targetLv: number): { hp: number, ap: number, def: number } { const lv = Math.max(1, Math.floor(targetLv)); - const coef = getHeroQualityCoef(hero.card_lv ?? 1); + const coef = getHeroQualityCoef(hero.rarity ?? 1); const eff = getEffectiveStats(hero, lv); const stats = { hp: Math.round(hero.hp * coef) + (eff.hp - hero.hp), @@ -1057,7 +1057,7 @@ export function getHeroDisplayStats(hero: heroInfo, targetLv: number): { hp: num /** 内部:lv12 专项基数(不含 lv12 自身)的展示有效值 */ function getHeroDisplayStatsBase(hero: heroInfo, targetLv: number): { hp: number, ap: number, def: number } { - const coef = getHeroQualityCoef(hero.card_lv ?? 1); + const coef = getHeroQualityCoef(hero.rarity ?? 1); const eff = getEffectiveStats(hero, targetLv); return { hp: Math.round(hero.hp * coef) + (eff.hp - hero.hp), diff --git a/assets/script/game/common/config/几何王国英雄复刻建议.md b/assets/script/game/common/config/几何王国英雄复刻建议.md index 0eb2cb93..280ca5a4 100644 --- a/assets/script/game/common/config/几何王国英雄复刻建议.md +++ b/assets/script/game/common/config/几何王国英雄复刻建议.md @@ -27,7 +27,7 @@ | 剧毒利刃(普攻30%淬毒) | lv2 atking:6010 紫魔球(远程法师普攻)+ `overrides: { timed_buff_id: 7005(中毒) }`,t_num=3 模拟 30% | | 强化声波(击退+30%) | lv3/5 提升 `bck` 档位 | | 女王尖啸(第20秒全场失去18%当前生命+眩晕2秒,每场1次) | lv7 大招升级:6203 大能量波 + `overrides: { ap: 400, timed_buff_id: 7004(击晕) }`;"失去当前生命%"简化为高 ap 直接伤害 | -| 攻击增强 +25% | lv9(card_lv 4/5)攻击光环 7002 | +| 攻击增强 +25% | lv9(rarity 4/5)攻击光环 7002 | **推荐配置**:普攻 6010 紫魔球(远程法师系);大招 6203 大能量波(远程群体,击退/击晕);光环 HeroAtk。定位:远程控场法师。 @@ -106,7 +106,7 @@ ## 四、复刻落地清单(按优先级) -| 优先级 | 英雄(新名) | card_lv 建议 | 核心组合 | 一句话卖点 | +| 优先级 | 英雄(新名) | rarity 建议 | 核心组合 | 一句话卖点 | |---|---|---|---|---| | P0 | 紫电魔女 | 4 | 6010 紫魔球 + 6203 大能量波(击退/击晕)+ 7005 中毒 + 攻击光环 | 远程群体击退+毒+控场法师 | | P0 | 刀刀暴击 | 5 | 6100 光闪多段 + `crt` + 7007 出血 + 暴击光环 | 暴击流血剑士 | diff --git a/assets/script/game/common/config/英雄设计指引.md b/assets/script/game/common/config/英雄设计指引.md index 0656df9a..da7a6f57 100644 --- a/assets/script/game/common/config/英雄设计指引.md +++ b/assets/script/game/common/config/英雄设计指引.md @@ -27,7 +27,7 @@ ``` 英雄名称:xxx -card_lv:4 // 品质 1~5,决定 uuid 段位与 lv6 是否有光环 +rarity:4 // 品质 1~5,决定 uuid 段位与 lv6 是否有光环 类型:tank // HRole 职业定位(tank/warrior/assassin/mage/support) 形态:远程 // 攻击定位:近战/中距/远程(决定普攻底座与 dis) ap:tank+5 // 职业基础值 + 手动偏移 @@ -41,7 +41,7 @@ atking[0]_lv6:攻击触发(t_num 模拟概率,1=每次 3≈33% 4≈25%) atked[0]_lv6:无 fstart[0]_lv6:无 dead[0]_lv6:无 -field[0]_lv6:驻场光环(仅 card_lv 4/5;card_lv 1/2/3 改为属性+30/40/50%) +field[0]_lv6:驻场光环(仅 rarity 4/5;rarity 1/2/3 改为属性+30/40/50%) revive[0]_lv1:无(与 skills[1] 互斥二选一;配置时与大招同走 lv1/lv9/lv16 三档) revive[0]_lv9:无 revive[0]_lv16:无 @@ -52,7 +52,7 @@ revive[0]_lv16:无 - 等级节奏:lv1 激活 skills[0]/skills[1];lv6 解锁 atking/atked/fstart/dead/field 触发技能(触发类技能统一 lv6 激活,各触发槽最多 1 个);大招(skills[1])lv9/lv16 走 `lv_entries` 分档提升;lv12 按职业对单项基础属性 +50%(基数取 lv11 当前等级有效值:坦克→def、战士/辅助→hp、刺客/射手/法师→ap);lv6 光环或属性补偿 - **revive 与大招互斥**:`revive[0]` 与 `skills[1]` 只能二选一;配置 revive 的英雄不走大招体系,revive 采用与大招相同的 3 级成长机制(lv1/lv9/lv16 走 `lv_entries` 分档强化) -- 品质差异:相邻品质(card_lv)lv1 初始基础属性(AP/HP/DEF)相差 5%(系数 1+0.05×(card_lv-1)),其余配置参数完全一致 +- 品质差异:相邻品质(rarity)lv1 初始基础属性(AP/HP/DEF)相差 5%(系数 1+0.05×(rarity-1)),其余配置参数完全一致 - 能力只能从能力池(BuffList 7001\~7024 / FieldSkillSet 7001\~7020 / SkillSet 底座)引用 + `overrides` 数值覆盖,**禁止新增同义底座** **大招召唤数约束**(`summon_count` 覆写规则): @@ -69,7 +69,7 @@ revive[0]_lv16:无 ``` 英雄名称:紫电魔女 -card_lv:4 +rarity:4 类型:mage 形态:远程 ap:mage+10 @@ -94,7 +94,7 @@ revive[0]_lv16:无 ``` 英雄名称:刀刀暴击 -card_lv:5 +rarity:5 类型:warrior 形态:近战 ap:warrior+15 @@ -119,7 +119,7 @@ revive[0]_lv16:无 ``` 英雄名称:格挡反杀 -card_lv:4 +rarity:4 类型:warrior 形态:近战 ap:warrior+5 @@ -144,7 +144,7 @@ revive[0]_lv16:无 ``` 英雄名称:冻住不谢 -card_lv:4 +rarity:4 类型:mage 形态:远程 ap:mage+5 @@ -173,7 +173,7 @@ revive[0]_lv16:无 ``` 英雄名称:叠甲骑士 -card_lv:5 +rarity:5 类型:tank 形态:近战 ap:tank+0 @@ -198,7 +198,7 @@ revive[0]_lv16:无 ``` 英雄名称:光明奶爸 -card_lv:4 +rarity:4 类型:support 形态:远程 ap:support+0 @@ -223,7 +223,7 @@ revive[0]_lv16:无 ``` 英雄名称:微醺战神 -card_lv:3 +rarity:3 类型:tank 形态:近战 ap:tank+5 @@ -237,7 +237,7 @@ atking[0]_lv6:雷霆一击——普攻3次附加击退强化(t_num3,bck40 atked[0]_lv6:无 fstart[0]_lv6:无 dead[0]_lv6:无 -field[0]_lv6:无(card_lv3 → 基础属性+50%:ap_bonus/hp_bonus 按档) +field[0]_lv6:无(rarity3 → 基础属性+50%:ap_bonus/hp_bonus 按档) revive[0]_lv1:无 revive[0]_lv9:无 revive[0]_lv16:无 @@ -248,7 +248,7 @@ revive[0]_lv16:无 ``` 英雄名称:眩晕暴击哥 -card_lv:5 +rarity:5 类型:warrior 形态:近战 ap:warrior+20 @@ -273,7 +273,7 @@ revive[0]_lv16:无 ``` 英雄名称:铁壳斧弟 -card_lv:3 +rarity:3 类型:tank 形态:近战 ap:tank+5 @@ -287,7 +287,7 @@ atking[0]_lv6:嗜血战斧——攻击4次触发自疗(t_num4,6302 ap120 atked[0]_lv6:坚硬皮肤——受击2次叠加防御(t_num2,buff 7023 防御强化,buff_duration 10 可叠层) fstart[0]_lv6:无 dead[0]_lv6:无 -field[0]_lv6:无(card_lv3 → 基础属性+50%:ap_bonus/hp_bonus 按档) +field[0]_lv6:无(rarity3 → 基础属性+50%:ap_bonus/hp_bonus 按档) revive[0]_lv1:无 revive[0]_lv9:无 revive[0]_lv16:无 @@ -316,10 +316,10 @@ revive[0]_lv16:无 怪物与英雄采用同一套设定体系: -- **基础值与品质**:基础属性取 `HERO_ROLE_BASE[role]`,`card_lv` 决定品质(相邻品质基础属性差 5%,仅作用 lv1 初始 AP/HP/DEF) +- **基础值与品质**:基础属性取 `HERO_ROLE_BASE[role]`,`rarity` 决定品质(相邻品质基础属性差 5%,仅作用 lv1 初始 AP/HP/DEF) - **成长系数**:走 `HERO_GROW_COEF[grow_type]`(含 hp/ap/def),与英雄一致 -- **数值平衡**:怪物与英雄仅通过**品质差异**(`card_lv`)拉开数值,高难波次用更高 `card_lv` 的怪物变体承担压场 -- **Boss**:同体系,通过高 `card_lv`(4/5)实现承伤/输出压制 +- **数值平衡**:怪物与英雄仅通过**品质差异**(`rarity`)拉开数值,高难波次用更高 `rarity` 的怪物变体承担压场 +- **Boss**:同体系,通过高 `rarity`(4/5)实现承伤/输出压制 - **成长驱动**:怪物按等级成长由后续肉鸽配置驱动;当前配置承担“职业基准 + 品质差异”的静态表达,运行时按品质系数缩放基础值 ## 配置检查清单 diff --git a/assets/script/game/common/config/英雄设计方案.md b/assets/script/game/common/config/英雄设计方案.md index 39025cd8..1feb1dd9 100644 --- a/assets/script/game/common/config/英雄设计方案.md +++ b/assets/script/game/common/config/英雄设计方案.md @@ -2,11 +2,11 @@ > **前置约束**(已确认的设计原则): > - 局内固定(战斗开始召唤的时候同)等级成长移交局外(局外等级与碎片数量) > - 单场战斗 30 左右秒 -> - card_lv 角色品质(1~5):初始基础数值带有品质增量,每升 1级都是按 20% 增量。 +> - rarity 角色品质(1~5):初始基础数值带有品质增量,每升 1级都是按 20% 增量。 > - 初始 技能 普通攻击和大招 skills[0]、skills[1](对应"普通攻击"、"大招"),| 复活 | `SkillTriggerType.Revive` | 属于大招 > - lv2: atking/atked/fstart 提升普通攻击能力,atking/atked 附加临时buff,fstart 局内持久 buff > - lv3/lv5/lv7: skills[1] 提升大招能力,攻击附加 buff 或 debuff -> - lv9 card_lv 4/5 英雄新增能力驻场光环;card_lv 1/2/3 额外提升基础属性30/40/50% +> - lv9 rarity 4/5 英雄新增能力驻场光环;rarity 1/2/3 额外提升基础属性30/40/50% > - 能力的附加 采用引用+数值覆盖 skillset 和 bufflist(skillset 和 bufflist是底座,已存在能力就不能添加,只要数值替代就可以) --- @@ -76,7 +76,7 @@ | `bck` | 额外击退距离增量 | `overrides.bck` | 气斩、重击 | ### 2.4 驻场光环能力池(FieldSkillType) -| 能力 | FieldSkillType | 底座 uuid | 适用 card_lv | 几何王国对应场景 | +| 能力 | FieldSkillType | 底座 uuid | 适用 rarity | 几何王国对应场景 | |---|---|---|---|---| | 战后恢复 | WaveHeal | 7001 | 4/5 | 团队续航 | | 攻击光环 | HeroAtk | 7002 | 4/5 | 团队输出强化 | @@ -106,7 +106,7 @@ | 多段释放 | `num` | `overrides: { num: 2 }` | ### 2.6 能力组合范式(英雄设计指引) -| 英雄定位 | 普攻(lv2) | 大招(lv3/5/7) | 光环(lv9,card_lv 4/5) | 核心能力组合 | +| 英雄定位 | 普攻(lv2) | 大招(lv3/5/7) | 光环(lv9,rarity 4/5) | 核心能力组合 | |---|---|---|---|---| | 暴击输出 | `crt` + 攻击强化(7001) | `crt` + 出血(7007) | 暴击光环(7004)/暴伤光环(7005) | 暴击率→出血→被暴击率联动 | | 冰冻控制 | `frz` + 冰冻(7003) | `frz` + 冰冻(7003)+ 减攻(7006) | 击晕光环(7003) | 冰冻→减攻→团队控制链 | diff --git a/assets/script/game/common/config/英雄配置UI设计方案.md b/assets/script/game/common/config/英雄配置UI设计方案.md index f4e42a21..1dcc6cdb 100644 --- a/assets/script/game/common/config/英雄配置UI设计方案.md +++ b/assets/script/game/common/config/英雄配置UI设计方案.md @@ -98,13 +98,13 @@ interface HeroConfigFile { | 不变量 | 依赖方 | |---|---| | 4 空格缩进、双引号、行尾无分号风格跟随原文件 | 全部 diff 工具 | -| 条目头字段单行紧凑(`uuid, name, path, fac, card_lv, lv, type, grow_type, role, hp, ap, def` 一行),触发块换行展开 | 现有阅读习惯 | -| 按 uuid 段位插入注释块(`// ===== card_lv=5(5401-5499)=====`) | 段位规则 | +| 条目头字段单行紧凑(`uuid, name, path, fac, rarity, lv, type, grow_type, role, hp, ap, def` 一行),触发块换行展开 | 现有阅读习惯 | +| 按 uuid 段位插入注释块(`// ===== rarity=5(5401-5499)=====`) | 段位规则 | | **档位数组 lv 严格升序**(lv_entries / LvTriggerEntry[] / field / revive / ap_bonus / hp_bonus) | `HeroSkillDesc.ts:384` 的 `filter(e=>e.lv<=lv).pop()` | | 数字键无引号、保持插入序 | Record 索引 | | `ccd: 0` 占位字段不丢(HSkillInfo 必填) | Hero.ts 加载 | | 字段顺序稳定(skills → atked/atking → dead → fstart → field → revive → info) | 减少 diff 噪音 | -| HeroList 按 card_lv 分组升序 | CardSet 卡池派生顺序 | +| HeroList 按 rarity 分组升序 | CardSet 卡池派生顺序 | | `info: ""` 收尾、`path/icon/info` 字符串原样不转义变换 | 文本保真 | | **文件头 BOM 原样保留**(读 utf-8 后首字符检测写回) | 避免整文件 diff | @@ -163,8 +163,8 @@ interface HeroConfigFile { | 规则 | 说明 | |---|---| | lv > 6 档位 | `HERO_MAX_LV=6` 封顶,lv7/9 档当前永不生效(数据先行,运行时扩展上限后自动生效) | -| card_lv 1/2/3 配了 field | 应改走 ap_bonus/hp_bonus(30/40/50% 补偿) | -| card_lv 4/5 的 lv9 未配 field | 按设计指引应有驻场光环 | +| rarity 1/2/3 配了 field | 应改走 ap_bonus/hp_bonus(30/40/50% 补偿) | +| rarity 4/5 的 lv9 未配 field | 按设计指引应有驻场光环 | | infos 条数与实际档位不匹配 | 面板逐条展示依赖 | ## 六、UI 设计 @@ -177,7 +177,7 @@ interface HeroConfigFile { ┌ [强度评估 | 英雄配置●] ────────────────────────── ●=有未保存改动 ┐ ├────────────┬──────────────────────────────┬─────────┤ │ 🔍搜索 │ 锚点导航: 基础|技能|触发|光环|复活|加成|说明 │ 校验抽屉 │ -│ ▾LV5 │ ①基础: uuid/name/path/card_lv/role/type │ ✕2 ⚠1 │ +│ ▾LV5 │ ①基础: uuid/name/path/rarity/role/type │ ✕2 ⚠1 │ │ ●5401 刀刀│ hp/ap/def 基准+增量双输入(显示合计) │ 点击 │ │ ▾LV4 … │ ②技能: [普攻|大招] SkillPicker + 底座只读条 │ 定位 │ │ [+新建] │ + OverridesEditor + 档位矩阵 │ [保存] │ @@ -188,7 +188,7 @@ interface HeroConfigFile { | 组件 | 职责 | 数据源 | 校验 | |---|---|---|---| -| HeroListView | card_lv 分组、搜索、dirty 圆点、新建入口 | heroSet.data.json | – | +| HeroListView | rarity 分组、搜索、dirty 圆点、新建入口 | heroSet.data.json | – | | BaseForm | 基础字段;hp/ap/def 基准+增量双输入 | HERO_ROLE_BASE | uuid 段位/重复;role→type 联动锁定 | | SkillPicker | 自制搜索下拉选 SkillSet,显示 `6200 火焰喷射 · 远程 · AOE` | SkillSet | 普攻限 6001~6012 按 IType 过滤;大招按形态过滤;辅助技能放行 | | SkillBasePanel | 底座关键参数只读展示(ap/cd/hit/IType/RType/DTType) | SkillSet | – | @@ -196,14 +196,14 @@ interface HeroConfigFile { | LvMatrix | lv 档位矩阵(技能 lv_entries / 触发档 / field / revive 复用变体):行=lv1/2/3/5/7/9、列=参数,可整行复制加档;**lv7/9 行黄色边框+⚠「运行时 HERO_MAX_LV=6 暂不生效」** | 当前英雄 | lv 升序不重复;t_num≥1 | | TriggerGroupEditor | s_uuid 卡片嵌套档位行(外层技能组、内层档位),保存时统一升序 | SkillSet | s_uuid 存在性 | | InfosEditor | 9 档分级说明文本 | 当前英雄 | 条数与档位对照提示 | -| BonusEditor | ap_bonus/hp_bonus 档位(lv+value) | 当前英雄 | 仅 card_lv1/2/3 提示使用 | +| BonusEditor | ap_bonus/hp_bonus 档位(lv+value) | 当前英雄 | 仅 rarity1/2/3 提示使用 | | ValidationPanel | 错误/警告列表(区域·字段·消息),点击 scrollIntoView + 字段红框高亮;保存按钮 error>0 时禁用 | 校验器输出 | – | ### 6.3 关键交互 - **ui- 组件与 Vue 混用**:`isCustomElement` 已配置;ui- 元素 `v-model` 不生效,须 `:value` + `@change`/`@confirm` 手动双向;属性用 kebab-case - **自制组件**(ui- 缺失):档位矩阵表格、可搜索 SkillPicker、BuffList 分组下拉、校验列表、确认 modal -- **新建向导**:单屏 modal——选 card_lv → role →(形态按映射自动锁定为只读徽章)→ 模板预填:uuid 取段位内最小空位、职业基准属性(增量 0)、按指引 2.6 能力组合范式推荐技能(tank→6004+6301、support→6009+6302 等)、lv3/5/7 空档骨架;提供「空白模板」选项 +- **新建向导**:单屏 modal——选 rarity → role →(形态按映射自动锁定为只读徽章)→ 模板预填:uuid 取段位内最小空位、职业基准属性(增量 0)、按指引 2.6 能力组合范式推荐技能(tank→6004+6301、support→6009+6302 等)、lv3/5/7 空档骨架;提供「空白模板」选项 - **状态管理**:dirty 深度 watch(加载时存 snapshot 对比),列表项与 tab 标题打点;切换英雄/切 tab 弹确认(放弃/留下);底座加载沿用 spawn 异步 + loading 态 - **保存流程**:error>0 → 保存禁用(tooltip 显示错误数);仅 warning → 自制 modal 确认后执行保存流水线 diff --git a/assets/script/game/hero/Hero.ts b/assets/script/game/hero/Hero.ts index 6e1e395e..73fd0ba2 100644 --- a/assets/script/game/hero/Hero.ts +++ b/assets/script/game/hero/Hero.ts @@ -74,7 +74,7 @@ export class Hero extends ecs.Entity { * 2) 初始化表现与属性数据 * 3) 播放下落入场并在落地后启用碰撞与移动 */ - load(pos: Vec3 = Vec3.ZERO, scale: number = 1, uuid: number = 1001, dropToY: number = pos.y, hero_lv: number = 1, card_lv: number = 1, posIndex: number = -1) { + load(pos: Vec3 = Vec3.ZERO, scale: number = 1, uuid: number = 1001, dropToY: number = pos.y, hero_lv: number = 1, rarity: number = 1, posIndex: number = -1) { // 英雄始终朝右,表现缩放固定为正向 scale = 1 // 英雄等级上限以配置为准,合成可升到 HERO_MAX_LV @@ -117,8 +117,8 @@ export class Hero extends ecs.Entity { model.hero_uuid = uuid; model.hero_name = hero.name; model.lv = hero_lv; - model.card_lv = card_lv; - model.base_card_lv = hero.card_lv ?? 1; + model.rarity = rarity; + model.base_rarity = hero.rarity ?? 1; model.type = hero.type; model.grow_type = hero.grow_type; model.role = hero.role; @@ -144,7 +144,7 @@ export class Hero extends ecs.Entity { // 基础属性:固定基础值 × 品质系数(相邻品质差 5%),成长由 grow_type 线性递增提供 // TODO: 局外升级机制落地后,此处基础值将与存档强化累加重算 - const qualityCoef = getHeroQualityCoef(hero.card_lv ?? 1); + const qualityCoef = getHeroQualityCoef(hero.rarity ?? 1); let base_ap = Math.round(hero.ap * qualityCoef); let base_hp = Math.round(hero.hp * qualityCoef); let base_def = Math.round(hero.def * qualityCoef); diff --git a/assets/script/game/hero/HeroAtkSystem.ts b/assets/script/game/hero/HeroAtkSystem.ts index f844c78c..d956fdf3 100644 --- a/assets/script/game/hero/HeroAtkSystem.ts +++ b/assets/script/game/hero/HeroAtkSystem.ts @@ -428,7 +428,7 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpda smc.mission.dead_heroes.push({ uuid: attrs.hero_uuid, lv: attrs.lv, - card_lv: attrs.card_lv, + rarity: attrs.rarity, posIndex: attrs.posIndex, wave: Math.max(1, smc.vmdata?.mission_data?.level ?? 1), }); diff --git a/assets/script/game/hero/HeroAttrsComp.ts b/assets/script/game/hero/HeroAttrsComp.ts index e711f973..2104b064 100644 --- a/assets/script/game/hero/HeroAttrsComp.ts +++ b/assets/script/game/hero/HeroAttrsComp.ts @@ -25,8 +25,8 @@ export class HeroAttrsComp extends ecs.Comp { hero_uuid: number = 1001; hero_name: string = "hero"; lv: number = 1; - card_lv: number = 1; - base_card_lv: number = 1; + rarity: number = 1; + base_rarity: number = 1; type: number = 0; // 0近战 1远程 2辅助 fac: number = 0; // 0:hero 1:monster grow_type?: number; // 成长类型(HGrowType),驱动每级 hp/ap 线性成长 diff --git a/assets/script/game/hero/Mon.ts b/assets/script/game/hero/Mon.ts index d2402158..b5840599 100644 --- a/assets/script/game/hero/Mon.ts +++ b/assets/script/game/hero/Mon.ts @@ -170,7 +170,7 @@ export class Monster extends ecs.Entity { // 模型层参数:身份、阵营、基础数值(基础值按品质系数缩放,与英雄同一套设定) model.hero_uuid = uuid; model.hero_name = hero.name; - const coef = getHeroQualityCoef(hero.card_lv ?? 1); + const coef = getHeroQualityCoef(hero.rarity ?? 1); model.hp = model.hp_max = Math.round(hero.hp * coef); model.ap = Math.round(hero.ap * coef); // TODO: 局外升级机制落地后,此处基础值将与存档强化累加重算 diff --git a/assets/script/game/hero/SCastSystem.ts b/assets/script/game/hero/SCastSystem.ts index d7e06416..6f304f93 100644 --- a/assets/script/game/hero/SCastSystem.ts +++ b/assets/script/game/hero/SCastSystem.ts @@ -53,7 +53,7 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate heroView?: HeroViewComp, triggerType?: string, isCardSkill?: boolean, - card_lv?: number, + rarity?: number, targetPos?: Vec3, overrides?: any }) { @@ -61,7 +61,7 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate // 卡牌技能直接触发 if (args.isCardSkill) { - this.forceCastCardSkill(args.s_uuid, args.card_lv || 1, args.targetPos || new Vec3(FightSet.CSKILL_START_X, FightSet.CSKILL_START_Y, 0), args.overrides); + this.forceCastCardSkill(args.s_uuid, args.rarity || 1, args.targetPos || new Vec3(FightSet.CSKILL_START_X, FightSet.CSKILL_START_Y, 0), args.overrides); return; } @@ -74,7 +74,7 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate * 强制执行卡牌技能 * 卡牌技能没有施法者主体,直接从指定坐标释放,或者对全体/随机友方生效 */ - public forceCastCardSkill(s_uuid: number, cardLv: number, spawnPos: Vec3, overrides?: SkillOverrides) { + public forceCastCardSkill(s_uuid: number, rarity: number, spawnPos: Vec3, overrides?: SkillOverrides) { let config = SkillSet[s_uuid]; if (!config) return; config = mergeSkillParams(config, overrides); @@ -102,7 +102,7 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate // 动态计算卡牌的虚拟攻击力: // 1. 根据卡牌等级给予基础成长(同英雄升级公式,基准设为 100) - let baseAp = 100 * Math.pow(FightSet.HERO_LV_MULTIPLIER, cardLv - 1); + let baseAp = 100 * Math.pow(FightSet.HERO_LV_MULTIPLIER, rarity - 1); let highestAp = baseAp; // 2. 获取场上最高攻击力的英雄,保证后期奶量/增益绝对够用 @@ -156,10 +156,10 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate const friendlyTargets = this.resolveFriendlyTargets(targetEids, FacSet.HERO); mLogger.log(this.debugMode, "SCastSystem", "friendlyTargets count =", friendlyTargets.length); if (friendlyTargets.length === 0) return; - this.applyFriendlySkillEffects(s_uuid, cardLv, config, null as any, mockAttrs, friendlyTargets, spawnPos); + this.applyFriendlySkillEffects(s_uuid, rarity, config, null as any, mockAttrs, friendlyTargets, spawnPos); } else { const enemyTargetPos = this.resolveRepeatCastTargetPos(targetPos, i); - this.createSkillEntityForCard(s_uuid, cardLv, mockAttrs, spawnPos, enemyTargetPos, i, overrides); + this.createSkillEntityForCard(s_uuid, rarity, mockAttrs, spawnPos, enemyTargetPos, i, overrides); } }; if (i === 0) { diff --git a/assets/script/game/map/CHeroComp.ts b/assets/script/game/map/CHeroComp.ts index 3f265995..558d3d0b 100644 --- a/assets/script/game/map/CHeroComp.ts +++ b/assets/script/game/map/CHeroComp.ts @@ -158,7 +158,7 @@ export class CHeroComp extends CCComp { nodeUuid: this.node?.uuid, uuid: data?.uuid ?? null, name: data?.name ?? null, - card_lv: data?.card_lv ?? null, + rarity: data?.rarity ?? null, cost: data?.cost ?? null, nodeActiveBefore: this.node?.active }); @@ -267,7 +267,7 @@ export class CHeroComp extends CCComp { this.level_label.string = heroLv > 1 ? `Lv.${heroLv}` : ""; } - // 背景:按 card_lv 激活对应颜色子节点(1→green 2→blue 3→purple 4→red 5→yellow) + // 背景:按 rarity 激活对应颜色子节点(1→green 2→blue 3→purple 4→red 5→yellow) this.updateBgNode(); // 描述富文本:展示英雄当前局外等级的能力(buildHeroSkillDesc 文本一) @@ -301,13 +301,13 @@ export class CHeroComp extends CCComp { } /** - * 根据 card_lv 切换 bg_node 下的颜色子节点显示。 + * 根据 rarity 切换 bg_node 下的颜色子节点显示。 * 等级与颜色对应关系: - * card_lv 1 → green - * card_lv 2 → blue - * card_lv 3 → purple - * card_lv 4 → red - * card_lv 5 → yellow + * rarity 1 → green + * rarity 2 → blue + * rarity 3 → purple + * rarity 4 → red + * rarity 5 → yellow */ private updateBgNode() { if (!this.bg_node || !this.cardData) return; @@ -318,7 +318,7 @@ export class CHeroComp extends CCComp { 4: "red", 5: "yellow", }; - const targetColor = lvToColor[this.cardData.card_lv ?? 1]; + const targetColor = lvToColor[this.cardData.rarity ?? 1]; this.bg_node.children.forEach(child => { child.active = (child.name === targetColor); }); @@ -542,7 +542,7 @@ export class CHeroComp extends CCComp { reason: "", uuid: this.cardData.uuid, hero_lv: smc.getHeroOuterLv(this.cardData.uuid), - card_lv: this.cardData.base_card_lv ?? this.cardData.card_lv ?? 1 + rarity: this.cardData.base_rarity ?? this.cardData.rarity ?? 1 }; oops.message.dispatchEvent(GameEvent.UseHeroCard, guard); if (guard.cancel) return; diff --git a/assets/script/game/map/CardBgComp.ts b/assets/script/game/map/CardBgComp.ts index d28c4ded..fa10a61f 100644 --- a/assets/script/game/map/CardBgComp.ts +++ b/assets/script/game/map/CardBgComp.ts @@ -1,13 +1,13 @@ import { _decorator, Component } from "cc"; -import { CARD_LV_BG_COLORS } from "../common/config/GameSet"; +import { RARITY_BG_COLORS } from "../common/config/GameSet"; const { ccclass } = _decorator; @ccclass('CardBgComp') export class CardBgComp extends Component { - apply(card_lv: number) { - const color = CARD_LV_BG_COLORS[Math.min(card_lv, 5) - 1]; + apply(rarity: number) { + const color = RARITY_BG_COLORS[Math.min(rarity, 5) - 1]; this.node.children.forEach(c => c.active = c.name === color); } diff --git a/assets/script/game/map/CardLiteComp.ts b/assets/script/game/map/CardLiteComp.ts index be81ae20..ee18ee52 100644 --- a/assets/script/game/map/CardLiteComp.ts +++ b/assets/script/game/map/CardLiteComp.ts @@ -25,7 +25,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 { HeroInfo } from "../common/config/heroSet"; -import { getLvColor, CARD_LV_BG_COLORS } from "../common/config/GameSet"; +import { getLvColor, RARITY_BG_COLORS } from "../common/config/GameSet"; import { canHeroUpgrade } from "../common/config/heroUpSet"; import { GameEvent } from "../common/config/GameEvent"; import { smc } from "../common/SingletonModuleComp"; @@ -178,7 +178,7 @@ export class CardLiteComp extends CCComp { /** * 渲染英雄卡面。 * - * 1. 背景:按 card_lv 切换颜色底框(green/blue/purple/yellow/red)。 + * 1. 背景:按 rarity 切换颜色底框(green/blue/purple/yellow/red)。 * 2. 名称:英雄名。 * 3. 等级:局外成长等级(Lv.X),颜色按 getLvColor。 * 4. 图标:idle 动画首帧静态展示。 @@ -187,10 +187,10 @@ export class CardLiteComp extends CCComp { this.iconVisualToken += 1; if (this.opacityComp) this.opacityComp.opacity = 255; - // 背景:按 card_lv 切换颜色底框 + // 背景:按 rarity 切换颜色底框 if (this.BG_node) { - const bgLv = Math.min(Math.max(hero.card_lv ?? 1, 1), 5); - const color = CARD_LV_BG_COLORS[bgLv - 1]; + const bgLv = Math.min(Math.max(hero.rarity ?? 1, 1), 5); + const color = RARITY_BG_COLORS[bgLv - 1]; this.BG_node.children.forEach(child => child.active = (child.name === color)); } diff --git a/assets/script/game/map/ChipComp.ts b/assets/script/game/map/ChipComp.ts index c45a598e..eee0034b 100644 --- a/assets/script/game/map/ChipComp.ts +++ b/assets/script/game/map/ChipComp.ts @@ -4,7 +4,7 @@ * * 职责: * 1. 根据英雄 UUID 渲染 **图标**(idle 动画首帧静态展示,零运行时动画开销)。 - * 2. 根据 HeroInfo.card_lv 切换 **背景底框颜色**(BG_node 下的 green/blue/purple/yellow/red 子节点)。 + * 2. 根据 HeroInfo.rarity 切换 **背景底框颜色**(BG_node 下的 green/blue/purple/yellow/red 子节点)。 * * 说明: * - 仅处理英雄展示,数据源为 heroSet 的 HeroInfo,不依赖 CardSet。 @@ -16,7 +16,7 @@ import { _decorator, AnimationClip, Node, Sprite, resources, SpriteFrame } from import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS"; import { CCComp } from "../../../../extensions/oops-plugin-framework/assets/module/common/CCComp"; import { HeroInfo } from "../common/config/heroSet"; -import { CARD_LV_BG_COLORS } from "../common/config/GameSet"; +import { RARITY_BG_COLORS } from "../common/config/GameSet"; const { ccclass, property } = _decorator; @@ -55,9 +55,9 @@ export class ChipComp extends CCComp { this.node.active = true; this.iconVisualToken += 1; - // 背景:按 card_lv 切换颜色底框(green/blue/purple/yellow/red) + // 背景:按 rarity 切换颜色底框(green/blue/purple/yellow/red) if (this.BG_node) { - const color = CARD_LV_BG_COLORS[Math.min(Math.max(hero.card_lv ?? 1, 1), 5) - 1]; + const color = RARITY_BG_COLORS[Math.min(Math.max(hero.rarity ?? 1, 1), 5) - 1]; this.BG_node.children.forEach(child => child.active = (child.name === color)); } diff --git a/assets/script/game/map/EBox.ts b/assets/script/game/map/EBox.ts index 4a076324..daf49594 100644 --- a/assets/script/game/map/EBox.ts +++ b/assets/script/game/map/EBox.ts @@ -29,7 +29,7 @@ export class EBox extends ecs.Entity { * 1) 创建节点并挂到 parent 下(未传时默认 SKILL 层) * 2) 初始化表现与属性数据 */ - load(uuid: number, card_lv: number, pos: Vec3, prefab: Prefab, parent?: Node): Node { + load(uuid: number, rarity: number, pos: Vec3, prefab: Prefab, parent?: Node): Node { let node = instantiate(prefab); // 默认挂到实体显示层 SKILL 节点下 @@ -47,7 +47,7 @@ export class EBox extends ecs.Entity { this.add(eboxComp); // 初始化业务逻辑 - eboxComp.init(uuid, card_lv); + eboxComp.init(uuid, rarity); return node; } diff --git a/assets/script/game/map/EquipBoxComp.ts b/assets/script/game/map/EquipBoxComp.ts index 016234a9..733157c1 100644 --- a/assets/script/game/map/EquipBoxComp.ts +++ b/assets/script/game/map/EquipBoxComp.ts @@ -82,7 +82,7 @@ export class EquipBoxComp extends CCComp { /** 技能 UUID */ private s_uuid: number = 0; /** 卡牌等级 */ - private card_lv: number = 1; + private rarity: number = 1; /** 是否为即时技能(true=使用后立即触发,false=战斗中定时触发) */ private is_instant: boolean = true; /** 总触发次数 */ @@ -245,10 +245,10 @@ export class EquipBoxComp extends CCComp { * 3. 按 trigger_type 注册对应事件监听并执行首次触发。 * * @param uuid 卡牌 UUID - * @param card_lv 技能卡等级 + * @param rarity 技能卡等级 */ - init(uuid: number, card_lv: number) { - this.card_lv = card_lv; + init(uuid: number, rarity: number) { + this.rarity = rarity; // 装备卡配置已迁移至 EquipPoolList const config = EquipPoolList.find(c => c.uuid === uuid); @@ -381,9 +381,9 @@ export class EquipBoxComp extends CCComp { /** * 根据技能等级切换 bg_node 下的颜色子节点显示。 * 等级与颜色对应关系(技能卡 wave 档位): - * card_lv 1 (wave 1) → green - * card_lv 2 (wave 5) → blue - * card_lv 3 (wave 8) → purple + * rarity 1 (wave 1) → green + * rarity 2 (wave 5) → blue + * rarity 3 (wave 8) → purple */ private updateBgNode() { if (!this.bg_node) return; @@ -392,7 +392,7 @@ export class EquipBoxComp extends CCComp { 2: "blue", 3: "purple", }; - const targetColor = lvToColor[this.card_lv]; + const targetColor = lvToColor[this.rarity]; this.bg_node.children.forEach(child => { child.active = (child.name === targetColor); }); @@ -625,7 +625,7 @@ export class EquipBoxComp extends CCComp { oops.message.dispatchEvent(GameEvent.TriggerSkill, { s_uuid: this.s_uuid, isCardSkill: true, // 标记为卡牌技能(区别于英雄自身技能) - card_lv: this.card_lv, + rarity: this.rarity, targetPos: targetPos, overrides: this.overrides }); diff --git a/assets/script/game/map/EquipListComp.ts b/assets/script/game/map/EquipListComp.ts index d4dce995..40ebeeee 100644 --- a/assets/script/game/map/EquipListComp.ts +++ b/assets/script/game/map/EquipListComp.ts @@ -42,7 +42,7 @@ export class EquipListComp extends CCComp { @property({ type: Node }) private icon_node: Node = null; - /** 背景节点(含 green/blue/purple/red/yellow 颜色子节点,按 card_lv 激活) */ + /** 背景节点(含 green/blue/purple/red/yellow 颜色子节点,按 rarity 激活) */ @property({ type: Node }) private bg_node: Node = null; @@ -148,11 +148,11 @@ export class EquipListComp extends CCComp { // 等级标签(Lv.1 / Lv.2 / Lv.3) if (this.level_label) { - const lv = this.cardData.card_lv ?? 1; + const lv = this.cardData.rarity ?? 1; this.level_label.string = `Lv.${lv}`; } - // 背景:按 card_lv 激活对应颜色子节点(1→green 2→blue 3→purple 4→red 5→yellow) + // 背景:按 rarity 激活对应颜色子节点(1→green 2→blue 3→purple 4→red 5→yellow) this.updateBgNode(); // 属性词条富文本(多词条装备由 buildEquipRich 按 \n 多行渲染,数值实时高亮) @@ -187,13 +187,13 @@ export class EquipListComp extends CCComp { } /** - * 根据 card_lv 切换 bg_node 下的颜色子节点显示。 + * 根据 rarity 切换 bg_node 下的颜色子节点显示。 * 等级与颜色对应关系: - * card_lv 1 → green - * card_lv 2 → blue - * card_lv 3 → purple - * card_lv 4 → red - * card_lv 5 → yellow + * rarity 1 → green + * rarity 2 → blue + * rarity 3 → purple + * rarity 4 → red + * rarity 5 → yellow */ private updateBgNode() { if (!this.bg_node || !this.cardData) return; @@ -204,7 +204,7 @@ export class EquipListComp extends CCComp { 4: "red", 5: "yellow", }; - const targetColor = lvToColor[this.cardData.card_lv ?? 1]; + const targetColor = lvToColor[this.cardData.rarity ?? 1]; this.bg_node.children.forEach(child => { child.active = (child.name === targetColor); }); diff --git a/assets/script/game/map/HeroBoxComp.ts b/assets/script/game/map/HeroBoxComp.ts index 9e0c3a5b..84461143 100644 --- a/assets/script/game/map/HeroBoxComp.ts +++ b/assets/script/game/map/HeroBoxComp.ts @@ -512,8 +512,8 @@ export class HeroBoxComp extends CCComp { const heroUuid = this.model.hero_uuid ?? 0; const hero = HeroInfo[heroUuid]; - // ---- 背景(按 card_lv 切换 bg_node 颜色子节点) ---- - this.updateBgNode(hero?.card_lv ?? 1); + // ---- 背景(按 rarity 切换 bg_node 颜色子节点) ---- + this.updateBgNode(hero?.rarity ?? 1); // ---- 名称 ---- if (this.name_label && this.name_label.isValid) { @@ -568,16 +568,16 @@ export class HeroBoxComp extends CCComp { // ======================== 内部工具 ======================== /** - * 根据 card_lv 切换 bg_node 下的颜色子节点显示。 + * 根据 rarity 切换 bg_node 下的颜色子节点显示。 * 等级与颜色对应关系: - * card_lv 1 → green - * card_lv 2 → blue - * card_lv 3 → purple - * card_lv 4 → red - * card_lv 5 → yellow - * @param cardLv 英雄卡牌等级(HeroInfo.card_lv,缺省按 1 处理) + * rarity 1 → green + * rarity 2 → blue + * rarity 3 → purple + * rarity 4 → red + * rarity 5 → yellow + * @param rarity 英雄卡牌等级(HeroInfo.rarity,缺省按 1 处理) */ - private updateBgNode(cardLv: number) { + private updateBgNode(rarity: number) { if (!this.bg_node || !this.bg_node.isValid) return; const lvToColor: Record = { 1: "green", @@ -586,7 +586,7 @@ export class HeroBoxComp extends CCComp { 4: "red", 5: "yellow", }; - const targetColor = lvToColor[cardLv] ?? lvToColor[1]; + const targetColor = lvToColor[rarity] ?? lvToColor[1]; this.bg_node.children.forEach(child => { child.active = (child.name === targetColor); }); diff --git a/assets/script/game/map/HerosListComp.ts b/assets/script/game/map/HerosListComp.ts index 67d0cffd..1df3427b 100644 --- a/assets/script/game/map/HerosListComp.ts +++ b/assets/script/game/map/HerosListComp.ts @@ -25,7 +25,7 @@ import { mLogger } from "../common/Logger"; import { HeroInfo, HeroList, SkillTriggerType, LvFieldEntry, LvReviveEntry, LvTriggerEntry, TriggerGrouped, getHeroDisplayStats } from "../common/config/heroSet"; import { buildHeroSkillDesc } from "../common/HeroSkillText"; import { GameEvent } from "../common/config/GameEvent"; -import { HERO_UPGRADE_NEED_FRAGMENTS, CARD_LV_BG_COLORS } from "../common/config/GameSet"; +import { HERO_UPGRADE_NEED_FRAGMENTS, RARITY_BG_COLORS } from "../common/config/GameSet"; import { CardLiteComp } from "./CardLiteComp"; import { ChipComp } from "./ChipComp"; import { SmallTipComp } from "./SmallTipComp"; @@ -313,7 +313,7 @@ export class HerosListComp extends CCComp { this.cards_node.removeAllChildren() const sorted = [...HeroList].sort((a, b) => { - return (HeroInfo[a]?.card_lv ?? 1) - (HeroInfo[b]?.card_lv ?? 1); + return (HeroInfo[a]?.rarity ?? 1) - (HeroInfo[b]?.rarity ?? 1); }); for (const uuid of sorted) { @@ -410,7 +410,7 @@ export class HerosListComp extends CCComp { if (infoLabel) infoLabel.string = desc || hero.info || "" } - this.updatePoolLvBg(hero.card_lv ?? 1) + this.updatePoolLvBg(hero.rarity ?? 1) this.updateLvDisplay(uuid) this.updateRoleDisplay(hero) this.updateHeroAnimation(uuid) @@ -418,10 +418,10 @@ export class HerosListComp extends CCComp { this.updateSkillIcons(hero) } - private updatePoolLvBg(card_lv: number) { + private updatePoolLvBg(rarity: number) { if (!this.BG_node) return // BG_node 下直接放置颜色节点(green/blue/purple/yellow/red),按卡池等级激活对应颜色 - const color = CARD_LV_BG_COLORS[Math.min(card_lv, 5) - 1] + const color = RARITY_BG_COLORS[Math.min(rarity, 5) - 1] this.BG_node.children.forEach(child => { child.active = (child.name === color) }) diff --git a/assets/script/game/map/ItemListComp.ts b/assets/script/game/map/ItemListComp.ts index 68216517..41aec3a0 100644 --- a/assets/script/game/map/ItemListComp.ts +++ b/assets/script/game/map/ItemListComp.ts @@ -44,7 +44,7 @@ export class ItemListComp extends CCComp { @property({ type: Node }) private icon_node: Node = null; - /** 背景节点(含 green/blue/purple/red/yellow 颜色子节点,按 card_lv 激活) */ + /** 背景节点(含 green/blue/purple/red/yellow 颜色子节点,按 rarity 激活) */ @property({ type: Node }) private bg_node: Node = null; @@ -156,11 +156,11 @@ export class ItemListComp extends CCComp { // 等级标签(★ 表示卡牌等级) if (this.level_label) { - const lv = this.cardData.card_lv ?? 1; + const lv = this.cardData.rarity ?? 1; this.level_label.string = lv >= 2 ? "★".repeat(lv - 1) : ""; } - // 背景:按 card_lv 激活对应颜色子节点(1→green 2→blue 3→purple 4→red 5→yellow) + // 背景:按 rarity 激活对应颜色子节点(1→green 2→blue 3→purple 4→red 5→yellow) this.updateBgNode(); // 描述/属性词条富文本(装备逐词条多行;药品/技能卡数值随 overrides 档位自动同步) @@ -201,13 +201,13 @@ export class ItemListComp extends CCComp { } /** - * 根据 card_lv 切换 bg_node 下的颜色子节点显示。 + * 根据 rarity 切换 bg_node 下的颜色子节点显示。 * 等级与颜色对应关系: - * card_lv 1 → green - * card_lv 2 → blue - * card_lv 3 → purple - * card_lv 4 → red - * card_lv 5 → yellow + * rarity 1 → green + * rarity 2 → blue + * rarity 3 → purple + * rarity 4 → red + * rarity 5 → yellow */ private updateBgNode() { if (!this.bg_node || !this.cardData) return; @@ -218,7 +218,7 @@ export class ItemListComp extends CCComp { 4: "red", 5: "yellow", }; - const targetColor = lvToColor[this.cardData.card_lv ?? 1]; + const targetColor = lvToColor[this.cardData.rarity ?? 1]; this.bg_node.children.forEach(child => { child.active = (child.name === targetColor); }); diff --git a/assets/script/game/map/MissEquipComp.ts b/assets/script/game/map/MissEquipComp.ts index 2c8cbd39..12aefe5d 100644 --- a/assets/script/game/map/MissEquipComp.ts +++ b/assets/script/game/map/MissEquipComp.ts @@ -145,16 +145,16 @@ export class MissEquipComp extends CCComp { } /** - * 处理使用装备卡事件:提取 uuid 和 card_lv 后调用 addEquip。 + * 处理使用装备卡事件:提取 uuid 和 rarity 后调用 addEquip。 * @param event 事件名 - * @param args 卡牌数据(含 uuid、card_lv) + * @param args 卡牌数据(含 uuid、rarity) */ private onUseEquipCard(event: string, args: any) { const payload = args ?? event; const uuid = Number(payload?.uuid ?? 0); - const card_lv = Math.max(1, Math.floor(Number(payload?.card_lv ?? 1))); + const rarity = Math.max(1, Math.floor(Number(payload?.rarity ?? 1))); if (!uuid) return; - this.addSkill(uuid, card_lv); + this.addSkill(uuid, rarity); } start() { @@ -168,9 +168,9 @@ export class MissEquipComp extends CCComp { * 3. 获取或添加 EquipBoxComp 并初始化。 * * @param uuid 装备 UUID - * @param card_lv 装备卡等级 + * @param rarity 装备卡等级 */ - addSkill(uuid: number, card_lv: number) { + addSkill(uuid: number, rarity: number) { if (!this.equip_box) { mLogger.error(this.debugMode, "MissEquipComp", "equip_box prefab not set"); return; @@ -190,7 +190,7 @@ export class MissEquipComp extends CCComp { // 使用 ECS 实体创建装备节点,挂载到对应 ebar 子节点下 let ebox = ecs.getEntity(EBox); - let node = ebox.load(uuid, card_lv, Vec3.ZERO, this.equip_box, this.ebars_node.children[emptyIndex]); + let node = ebox.load(uuid, rarity, Vec3.ZERO, this.equip_box, this.ebars_node.children[emptyIndex]); this.slots[emptyIndex].used = true; this.slots[emptyIndex].node = node; diff --git a/assets/script/game/map/MissSkillsComp.ts b/assets/script/game/map/MissSkillsComp.ts index e9fa4189..b16c0fcf 100644 --- a/assets/script/game/map/MissSkillsComp.ts +++ b/assets/script/game/map/MissSkillsComp.ts @@ -154,18 +154,18 @@ export class MissSkillsComp extends CCComp { } /** - * 处理使用技能卡事件:提取 uuid 和 card_lv 后调用 addSkill。 + * 处理使用技能卡事件:提取 uuid 和 rarity 后调用 addSkill。 * @param event 事件名 - * @param args 卡牌数据(含 uuid、card_lv) + * @param args 卡牌数据(含 uuid、rarity) */ private onUseSkillCard(event: string, args: any) { const payload = args ?? event; // 卡 uuid 仅用于查配置;真正施法用技能 id(payload.skill),缺省时退回 uuid(兼容技能卡直接用技能 id 的场景) const skillUuid = Number(payload?.skill ?? payload?.uuid ?? 0); - const card_lv = Math.max(1, Math.floor(Number(payload?.card_lv ?? 1))); + const rarity = Math.max(1, Math.floor(Number(payload?.rarity ?? 1))); if (!skillUuid) return; // 药水/技能卡的 overrides(含 buff_value)需透传到技能实体 - this.addSkill(skillUuid, card_lv, payload?.overrides); + this.addSkill(skillUuid, rarity, payload?.overrides); } /** @@ -215,9 +215,9 @@ export class MissSkillsComp extends CCComp { * 3. 获取或添加 SkillBoxComp 并初始化。 * * @param uuid 技能 UUID - * @param card_lv 技能卡等级 + * @param rarity 技能卡等级 */ - addSkill(uuid: number, card_lv: number, overrides?: SkillOverrides) { + addSkill(uuid: number, rarity: number, overrides?: SkillOverrides) { if (!this.skill_box) { mLogger.error(this.debugMode, "MissSkillsComp", "skill_box prefab not set"); return; @@ -234,7 +234,7 @@ export class MissSkillsComp extends CCComp { // 使用 ECS 实体创建技能节点 let sbox = ecs.getEntity(SBox); let pos = new Vec3(this.slots[emptyIndex].x, this.slots[emptyIndex].y, 0); - let node = sbox.load(uuid, card_lv, pos, this.skill_box, overrides); + let node = sbox.load(uuid, rarity, pos, this.skill_box, overrides); this.slots[emptyIndex].used = true; this.slots[emptyIndex].node = node; diff --git a/assets/script/game/map/MissionCardComp.ts b/assets/script/game/map/MissionCardComp.ts index 12ed8f70..3abf6d94 100644 --- a/assets/script/game/map/MissionCardComp.ts +++ b/assets/script/game/map/MissionCardComp.ts @@ -2152,7 +2152,7 @@ export class MissionCardComp extends CCComp { model.lv = nextLv; // 同步 base 快照(与 Hero.load 同公式:固定基础值 × 品质系数,成长由 grow_type 线性递增提供) - const qualityCoef = getHeroQualityCoef(hero.card_lv ?? 1); + const qualityCoef = getHeroQualityCoef(hero.rarity ?? 1); const base_ap = Math.round(hero.ap * qualityCoef); const base_hp = Math.round(hero.hp * qualityCoef); model.base_ap = base_ap; diff --git a/assets/script/game/map/MissionHeroComp.ts b/assets/script/game/map/MissionHeroComp.ts index 355569e6..5164c6fd 100644 --- a/assets/script/game/map/MissionHeroComp.ts +++ b/assets/script/game/map/MissionHeroComp.ts @@ -96,7 +96,7 @@ export class MissionHeroComp extends CCComp { /** 是否正在消费召唤队列(防止并发) */ is_processing_queue: boolean = false /** 召唤请求队列:按职业优先级排序后串行登场 */ - summon_queue: { uuid: number; hero_lv: number; card_lv: number; role: HRole }[] = [] + summon_queue: { uuid: number; hero_lv: number; rarity: number; role: HRole }[] = [] /** 英雄出生序计数器(编队排队/渲染排序的稳定决胜) */ private heroSpawnOrder = 0 /** 预留英雄列表 */ @@ -160,12 +160,12 @@ export class MissionHeroComp extends CCComp { /** * 召唤请求入口: - * 从事件参数中提取 uuid / hero_lv / card_lv,放入串行队列。 + * 从事件参数中提取 uuid / hero_lv / rarity,放入串行队列。 * 队列按职业优先级(坦克→战士→刺客→射手→法师→辅助,HRole 升序)排序, * 保证高优先级职业先登场。 * * @param event 事件名 - * @param args { uuid, hero_lv, card_lv } + * @param args { uuid, hero_lv, rarity } */ private async call_hero(event: string, args: any) { const payload = args ?? event; @@ -174,10 +174,10 @@ export class MissionHeroComp extends CCComp { // payload.hero_lv 保留作为下限兜底,防止外部显式指定更高等级 const outer_lv = smc.getHeroOuterLv(uuid); const hero_lv = Math.max(outer_lv, Math.max(1, Number(payload?.hero_lv ?? 1))); - const card_lv = Math.max(1, Number(payload?.card_lv ?? 1)); + const rarity = Math.max(1, Number(payload?.rarity ?? 1)); const role = HeroInfo[uuid]?.role ?? HRole.Support; - this.summon_queue.push({ uuid, hero_lv, card_lv, role }); + this.summon_queue.push({ uuid, hero_lv, rarity, role }); // 按职业优先级稳定排序:HRole 升序,同职业保持入队先后 this.summon_queue.sort((a, b) => a.role - b.role); this.processSummonQueue(); @@ -224,10 +224,10 @@ export class MissionHeroComp extends CCComp { * * @param uuid 英雄 UUID * @param hero_lv 英雄等级 - * @param card_lv 卡牌等级(驱动 bg_node 颜色) + * @param rarity 卡牌等级(驱动 bg_node 颜色) * @returns 创建的 Hero 实体 */ - private spawnHeroAt(uuid: number, hero_lv: number, card_lv: number) { + private spawnHeroAt(uuid: number, hero_lv: number, rarity: number) { let hero = ecs.getEntity(Hero); let scale = 1 const role = HeroInfo[uuid]?.role ?? HRole.Support; @@ -241,7 +241,7 @@ export class MissionHeroComp extends CCComp { const landingPos = slot.landingPos; let spawnPos: Vec3 = v3(landingPos.x, landingPos.y + MissionHeroComp.HERO_DROP_HEIGHT, 0); - hero.load(spawnPos, scale, uuid, landingPos.y, hero_lv, card_lv, finalPosIndex); + hero.load(spawnPos, scale, uuid, landingPos.y, hero_lv, rarity, finalPosIndex); // 登记出生序,供编队排队/渲染排序做稳定决胜 const move = hero.get(MoveComp); @@ -289,7 +289,7 @@ export class MissionHeroComp extends CCComp { while (this.summon_queue.length > 0) { const payload = this.summon_queue.shift(); if (!payload) continue; - this.spawnHeroAt(payload.uuid, payload.hero_lv, payload.card_lv); + this.spawnHeroAt(payload.uuid, payload.hero_lv, payload.rarity); // 登场间隔:让掉落动画逐个播放,避免同帧堆叠 if (this.summon_queue.length > 0) { await new Promise(resolve => setTimeout(resolve, MissionHeroComp.SUMMON_INTERVAL * 1000)); diff --git a/assets/script/game/map/SBox.ts b/assets/script/game/map/SBox.ts index c5dcb7de..97632cd2 100644 --- a/assets/script/game/map/SBox.ts +++ b/assets/script/game/map/SBox.ts @@ -30,7 +30,7 @@ export class SBox extends ecs.Entity { * 1) 创建节点并挂到 SKILL 层 * 2) 初始化表现与属性数据 */ - load(uuid: number, card_lv: number, pos: Vec3, prefab: Prefab, overrides?: SkillOverrides): Node { + load(uuid: number, rarity: number, pos: Vec3, prefab: Prefab, overrides?: SkillOverrides): Node { let node = instantiate(prefab); let scene = smc.map.MapView.scene; @@ -46,7 +46,7 @@ export class SBox extends ecs.Entity { this.add(sboxComp); // 初始化业务逻辑(透传药水卡 overrides,含 buff_value) - sboxComp.init(uuid, card_lv, overrides); + sboxComp.init(uuid, rarity, overrides); return node; } diff --git a/assets/script/game/map/SCardComp.ts b/assets/script/game/map/SCardComp.ts index 0eb25bc6..17578130 100644 --- a/assets/script/game/map/SCardComp.ts +++ b/assets/script/game/map/SCardComp.ts @@ -43,7 +43,7 @@ export class SCardComp extends CCComp { @property({ type: Node }) private icon_node: Node = null; - /** 背景节点(含 green/blue/purple/red/yellow 颜色子节点,按 card_lv 激活) */ + /** 背景节点(含 green/blue/purple/red/yellow 颜色子节点,按 rarity 激活) */ @property({ type: Node }) private bg_node: Node = null; @@ -189,11 +189,11 @@ export class SCardComp extends CCComp { // 等级标签(★ 表示卡牌等级) if (this.level_label) { - const lv = this.cardData.card_lv ?? 1; + const lv = this.cardData.rarity ?? 1; this.level_label.string = lv >= 2 ? "★".repeat(lv - 1) : ""; } - // 背景:按 card_lv 激活对应颜色子节点(1→green 2→blue 3→purple 4→red 5→yellow) + // 背景:按 rarity 激活对应颜色子节点(1→green 2→blue 3→purple 4→red 5→yellow) this.updateBgNode(); // 描述富文本(数值随 overrides 档位自动同步高亮) @@ -228,13 +228,13 @@ export class SCardComp extends CCComp { } /** - * 根据 card_lv 切换 bg_node 下的颜色子节点显示。 + * 根据 rarity 切换 bg_node 下的颜色子节点显示。 * 等级与颜色对应关系: - * card_lv 1 → green - * card_lv 2 → blue - * card_lv 3 → purple - * card_lv 4 → red - * card_lv 5 → yellow + * rarity 1 → green + * rarity 2 → blue + * rarity 3 → purple + * rarity 4 → red + * rarity 5 → yellow */ private updateBgNode() { if (!this.bg_node || !this.cardData) return; @@ -245,7 +245,7 @@ export class SCardComp extends CCComp { 4: "red", 5: "yellow", }; - const targetColor = lvToColor[this.cardData.card_lv ?? 1]; + const targetColor = lvToColor[this.cardData.rarity ?? 1]; this.bg_node.children.forEach(child => { child.active = (child.name === targetColor); }); diff --git a/assets/script/game/map/SSkillBoxComp.ts b/assets/script/game/map/SSkillBoxComp.ts index 141e4aaf..f235a8cf 100644 --- a/assets/script/game/map/SSkillBoxComp.ts +++ b/assets/script/game/map/SSkillBoxComp.ts @@ -46,7 +46,7 @@ export class SSkillBoxComp extends CCComp { * 弹窗按槽位精确取档,避免自动定位命中错误分组 */ private hero_slot?: SkillTriggerType; /** 卡牌等级 */ - private card_lv: number = 1; + private rarity: number = 1; /** 卡牌自定义图标ID(优先级最高,未定义则按 trigger_type 自动取) */ private card_icon?: string; /** 技能名称(装备卡取卡牌名,英雄图鉴取技能名) */ @@ -75,7 +75,7 @@ export class SSkillBoxComp extends CCComp { oops.audio.playEffect("music/button"); oops.gui.open(UIID.SInfo, { uuid: this.s_uuid, - skill_lv: this.card_lv, + skill_lv: this.rarity, card_icon: this.card_icon, skill_name: this.resolveSkillName(), field: this.field, @@ -112,7 +112,7 @@ export class SSkillBoxComp extends CCComp { this.s_uuid = s_uuid; this.hero_uuid = heroUuid; this.hero_slot = slot; - this.card_lv = s_lv; + this.rarity = s_lv; this.hero_icon_source = isField ? "field" : "skill"; this.updateUI(); this.setLocked(locked); @@ -244,7 +244,7 @@ export class SSkillBoxComp extends CCComp { // 显示技能等级(Lv.x 样式) if (this.lv_label) { - this.lv_label.string = `Lv.${this.card_lv}`; + this.lv_label.string = `Lv.${this.rarity}`; } } diff --git a/assets/script/game/map/SkillBoxComp.ts b/assets/script/game/map/SkillBoxComp.ts index 38bc8b03..d8e898e1 100644 --- a/assets/script/game/map/SkillBoxComp.ts +++ b/assets/script/game/map/SkillBoxComp.ts @@ -82,7 +82,7 @@ export class SkillBoxComp extends CCComp { /** 技能 UUID */ private s_uuid: number = 0; /** 卡牌等级 */ - private card_lv: number = 1; + private rarity: number = 1; /** 是否为即时技能(true=使用后立即触发,false=战斗中定时触发) */ private is_instant: boolean = true; /** 总触发次数 */ @@ -218,7 +218,7 @@ export class SkillBoxComp extends CCComp { }); ibox?.init({ skillUuid, - skillLv: this.card_lv, + skillLv: this.rarity, overrides: this.overrides, }); mLogger.log(this.debugMode, "SkillBoxComp", "ibox init done", { @@ -241,10 +241,10 @@ export class SkillBoxComp extends CCComp { * 3. 按 trigger_type 注册对应事件监听并执行首次触发。 * * @param uuid 卡牌 UUID - * @param card_lv 技能卡等级 + * @param rarity 技能卡等级 */ - init(uuid: number, card_lv: number, overrides?: SkillOverrides) { - this.card_lv = card_lv; + init(uuid: number, rarity: number, overrides?: SkillOverrides) { + this.rarity = rarity; // 查询触发配置(药水卡不在 SkillCardList,会走 else 分支) // 同时按 卡uuid 或 技能skill id 查找:MissSkillsComp.addSkill 传入的是 payload.skill(技能ID), @@ -388,9 +388,9 @@ export class SkillBoxComp extends CCComp { /** * 根据技能等级切换 bg_node 下的颜色子节点显示。 * 等级与颜色对应关系(技能卡 wave 档位): - * card_lv 1 (wave 1) → green - * card_lv 2 (wave 5) → blue - * card_lv 3 (wave 8) → purple + * rarity 1 (wave 1) → green + * rarity 2 (wave 5) → blue + * rarity 3 (wave 8) → purple */ private updateBgNode() { if (!this.bg_node) return; @@ -399,7 +399,7 @@ export class SkillBoxComp extends CCComp { 2: "blue", 3: "purple", }; - const targetColor = lvToColor[this.card_lv]; + const targetColor = lvToColor[this.rarity]; this.bg_node.children.forEach(child => { child.active = (child.name === targetColor); }); @@ -631,7 +631,7 @@ export class SkillBoxComp extends CCComp { oops.message.dispatchEvent(GameEvent.TriggerSkill, { s_uuid: this.s_uuid, isCardSkill: true, // 标记为卡牌技能(区别于英雄自身技能) - card_lv: this.card_lv, + rarity: this.rarity, targetPos: targetPos, overrides: this.overrides });