diff --git a/assets/script/game/map/RogueConfig.ts b/assets/script/game/map/RogueConfig.ts index 9616f498..dc4645f3 100644 --- a/assets/script/game/map/RogueConfig.ts +++ b/assets/script/game/map/RogueConfig.ts @@ -82,47 +82,47 @@ export interface AffixConfig { export const AffixConfigs: Record = { [AffixType.Elite]: { name: "精英", hpMultiplier: 1.5, apMultiplier: 1.3, - cost: 20, tierMin: 3, description: "+50% HP, +30% AP", + cost: 20, tierMin: 2, description: "+50% HP, +30% AP", }, [AffixType.Berserk]: { name: "狂暴", hpMultiplier: 1.0, apMultiplier: 1.0, - cost: 15, tierMin: 3, description: "攻速 ×1.5 (行为层实现)", + cost: 15, tierMin: 2, description: "攻速 ×1.5 (行为层实现)", }, [AffixType.Shield]: { name: "护盾", hpMultiplier: 1.0, apMultiplier: 1.0, - cost: 25, tierMin: 3, description: "开局带 抵御2次 伤害吸收盾", + cost: 25, tierMin: 2, description: "开局带 抵御2次 伤害吸收盾", }, [AffixType.Regen]: { name: "再生", hpMultiplier: 1.0, apMultiplier: 1.0, - cost: 20, tierMin: 4, description: "每秒回复 2% HP", + cost: 20, tierMin: 3, description: "每秒回复 2% HP", }, [AffixType.Swift]: { name: "疾速", hpMultiplier: 1.0, apMultiplier: 1.0, - cost: 10, tierMin: 4, description: "移速 ×2", + cost: 10, tierMin: 3, description: "移速 ×2", }, [AffixType.Giant]: { name: "巨型", hpMultiplier: 2.0, apMultiplier: 1.5, - cost: 30, tierMin: 4, description: "×2 体型, +100% HP, +50% AP", + cost: 30, tierMin: 3, description: "×2 体型, +100% HP, +50% AP", }, [AffixType.Chain]: { name: "连锁", hpMultiplier: 1.0, apMultiplier: 1.0, - cost: 20, tierMin: 5, description: "攻击附带 50% 溅射伤害", + cost: 20, tierMin: 4, description: "攻击附带 50% 溅射伤害", }, [AffixType.SummonerA]: { name: "召唤", hpMultiplier: 1.0, apMultiplier: 1.0, - cost: 25, tierMin: 5, description: "每 8 秒召唤 1 个小怪", + cost: 25, tierMin: 4, description: "每 8 秒召唤 1 个小怪", }, [AffixType.CritRes]: { name: "坚韧", hpMultiplier: 1.0, apMultiplier: 1.0, - cost: 15, tierMin: 3, description: "+暴击抗性", + cost: 15, tierMin: 2, description: "+暴击抗性", }, [AffixType.FreezeRes]: { name: "防寒", hpMultiplier: 1.0, apMultiplier: 1.0, - cost: 15, tierMin: 3, description: "+冰冻抗性", + cost: 15, tierMin: 2, description: "+冰冻抗性", }, [AffixType.KnockbackRes]: { name: "稳固", hpMultiplier: 1.0, apMultiplier: 1.0, - cost: 15, tierMin: 3, description: "+击退抗性", + cost: 15, tierMin: 2, description: "+击退抗性", }, } @@ -252,11 +252,11 @@ const MAJOR_BOSS_TIERS = new Set([3, 5]) * 主线 15 波映射:wave 1-3 → T1, wave 4-6 → T2, ..., wave 13-15 → T5 */ export const TierConfigs: Record = { - 1: { multiplier: 1.0, budget: 300, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long], isBossTier: false }, - 2: { multiplier: 2.0, budget: 800, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support], isBossTier: true }, - 3: { multiplier: 3.5, budget: 1800, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support, MonType.Assassin], isBossTier: true }, - 4: { multiplier: 5.5, budget: 3200, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support, MonType.Assassin, MonType.Summoner], isBossTier: true }, - 5: { multiplier: 8.5, budget: 5200, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support, MonType.Assassin, MonType.Summoner], isBossTier: true }, + 1: { multiplier: 1.0, budget: 200, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long], isBossTier: false }, + 2: { multiplier: 2.0, budget: 500, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support], isBossTier: true }, + 3: { multiplier: 3.5, budget: 1100, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support, MonType.Assassin], isBossTier: true }, + 4: { multiplier: 5.5, budget: 2000, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support, MonType.Assassin, MonType.Summoner], isBossTier: true }, + 5: { multiplier: 8.5, budget: 3200, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support, MonType.Assassin, MonType.Summoner], isBossTier: true }, } /** @@ -293,7 +293,7 @@ export function getTierConfig(tier: number): TierConfig { * 最终概率 = baseAffixChance × roleMultiplier */ export const BaseAffixChance: Record = { - 1: 0, 2: 0, 3: 0.15, 4: 0.30, 5: 0.50, + 1: 0, 2: 0.10, 3: 0.25, 4: 0.40, 5: 0.60, } /** @@ -362,96 +362,96 @@ export interface BlueprintTemplate { */ export const BlueprintTemplates: BlueprintTemplate[] = [ { id: "R1", type: TemplateType.REST, tierMin: 1, allowAffix: false, - slots: [{ typePool: [MonType.Melee], countMin: 3, countMax: 5, weight: 1.0 }] }, + slots: [{ typePool: [MonType.Melee], countMin: 2, countMax: 3, weight: 1.0 }] }, { id: "R2", type: TemplateType.REST, tierMin: 2, allowAffix: false, - slots: [{ typePool: [MonType.Melee, MonType.Heavy], countMin: 4, countMax: 6, weight: 1.0 }] }, + slots: [{ typePool: [MonType.Melee, MonType.Heavy], countMin: 2, countMax: 4, weight: 1.0 }] }, { id: "R3", type: TemplateType.REST, tierMin: 3, allowAffix: false, - slots: [{ typePool: [MonType.Melee, MonType.Long], countMin: 5, countMax: 8, weight: 1.0 }] }, + slots: [{ typePool: [MonType.Melee, MonType.Long], countMin: 3, countMax: 5, weight: 1.0 }] }, { id: "N1", type: TemplateType.NORMAL, tierMin: 1, allowAffix: false, - slots: [{ typePool: [MonType.Melee], countMin: 3, countMax: 5, weight: 1.0 }] }, - { id: "N2", type: TemplateType.NORMAL, tierMin: 1, allowAffix: false, + slots: [{ typePool: [MonType.Melee], countMin: 2, countMax: 3, weight: 1.0 }] }, + { id: "N2", type: TemplateType.NORMAL, tierMin: 1, allowAffix: true, slots: [ - { typePool: [MonType.Melee], countMin: 2, countMax: 4, weight: 0.6 }, - { typePool: [MonType.Long], countMin: 1, countMax: 3, weight: 0.4 }, + { typePool: [MonType.Melee], countMin: 1, countMax: 3, weight: 0.6 }, + { typePool: [MonType.Long], countMin: 1, countMax: 2, weight: 0.4 }, ] }, { id: "N3", type: TemplateType.NORMAL, tierMin: 2, allowAffix: true, slots: [ - { typePool: [MonType.Melee, MonType.Heavy], countMin: 3, countMax: 7, weight: 0.5 }, - { typePool: [MonType.Long], countMin: 2, countMax: 5, weight: 0.3 }, - { typePool: [MonType.Support], countMin: 1, countMax: 3, weight: 0.2 }, + { typePool: [MonType.Melee, MonType.Heavy], countMin: 2, countMax: 4, weight: 0.5 }, + { typePool: [MonType.Long], countMin: 1, countMax: 3, weight: 0.3 }, + { typePool: [MonType.Support], countMin: 1, countMax: 2, weight: 0.2 }, ] }, { id: "N4", type: TemplateType.NORMAL, tierMin: 3, allowAffix: true, slots: [ - { typePool: [MonType.Melee, MonType.Heavy], countMin: 4, countMax: 8, weight: 0.4 }, - { typePool: [MonType.Long, MonType.Assassin], countMin: 3, countMax: 6, weight: 0.3 }, - { typePool: [MonType.Support], countMin: 2, countMax: 4, weight: 0.3 }, + { typePool: [MonType.Melee, MonType.Heavy], countMin: 3, countMax: 5, weight: 0.4 }, + { typePool: [MonType.Long, MonType.Assassin], countMin: 2, countMax: 4, weight: 0.3 }, + { typePool: [MonType.Support], countMin: 1, countMax: 2, weight: 0.3 }, ] }, { id: "M1", type: TemplateType.MIXED, tierMin: 1, allowAffix: true, slots: [ - { typePool: [MonType.Melee, MonType.Heavy], countMin: 3, countMax: 5, weight: 0.4 }, - { typePool: [MonType.Long], countMin: 2, countMax: 3, weight: 0.3 }, - { typePool: [MonType.Support], countMin: 1, countMax: 2, weight: 0.3 }, + { typePool: [MonType.Melee, MonType.Heavy], countMin: 2, countMax: 3, weight: 0.4 }, + { typePool: [MonType.Long], countMin: 1, countMax: 2, weight: 0.3 }, + { typePool: [MonType.Support], countMin: 1, countMax: 1, weight: 0.3 }, ] }, - { id: "M2", type: TemplateType.MIXED, tierMin: 3, allowAffix: true, + { id: "M2", type: TemplateType.MIXED, tierMin: 2, allowAffix: true, slots: [ - { typePool: [MonType.Melee, MonType.Heavy], countMin: 5, countMax: 8, weight: 0.3 }, - { typePool: [MonType.Long, MonType.Assassin], countMin: 3, countMax: 6, weight: 0.3 }, - { typePool: [MonType.Support], countMin: 2, countMax: 4, weight: 0.4 }, + { typePool: [MonType.Melee, MonType.Heavy], countMin: 3, countMax: 5, weight: 0.3 }, + { typePool: [MonType.Long, MonType.Assassin], countMin: 2, countMax: 4, weight: 0.3 }, + { typePool: [MonType.Support], countMin: 1, countMax: 2, weight: 0.4 }, ] }, - { id: "M3", type: TemplateType.MIXED, tierMin: 4, allowAffix: true, + { id: "M3", type: TemplateType.MIXED, tierMin: 3, allowAffix: true, slots: [ - { typePool: [MonType.Melee, MonType.Heavy], countMin: 6, countMax: 10, weight: 0.3 }, - { typePool: [MonType.Long, MonType.Assassin], countMin: 4, countMax: 7, weight: 0.3 }, - { typePool: [MonType.Summoner], countMin: 2, countMax: 3, weight: 0.2 }, - { typePool: [MonType.Support], countMin: 2, countMax: 4, weight: 0.2 }, + { typePool: [MonType.Melee, MonType.Heavy], countMin: 3, countMax: 6, weight: 0.3 }, + { typePool: [MonType.Long, MonType.Assassin], countMin: 2, countMax: 4, weight: 0.3 }, + { typePool: [MonType.Summoner], countMin: 1, countMax: 2, weight: 0.2 }, + { typePool: [MonType.Support], countMin: 1, countMax: 2, weight: 0.2 }, ] }, - { id: "E1", type: TemplateType.ELITE, tierMin: 3, allowAffix: true, + { id: "E1", type: TemplateType.ELITE, tierMin: 2, allowAffix: true, slots: [ - { typePool: [MonType.Heavy], countMin: 2, countMax: 4, weight: 0.5, forceAffix: true }, - { typePool: [MonType.Long, MonType.Assassin], countMin: 2, countMax: 5, weight: 0.5, forceAffix: true }, + { typePool: [MonType.Heavy], countMin: 1, countMax: 3, weight: 0.5, forceAffix: true }, + { typePool: [MonType.Long, MonType.Assassin], countMin: 1, countMax: 3, weight: 0.5, forceAffix: true }, ] }, - { id: "E2", type: TemplateType.ELITE, tierMin: 4, allowAffix: true, + { id: "E2", type: TemplateType.ELITE, tierMin: 3, allowAffix: true, slots: [ - { typePool: [MonType.Heavy], countMin: 2, countMax: 4, weight: 0.3, forceAffix: true }, - { typePool: [MonType.Assassin], countMin: 3, countMax: 5, weight: 0.4, forceAffix: true }, - { typePool: [MonType.Support], countMin: 2, countMax: 3, weight: 0.3, forceAffix: true }, + { typePool: [MonType.Heavy], countMin: 1, countMax: 3, weight: 0.3, forceAffix: true }, + { typePool: [MonType.Assassin], countMin: 2, countMax: 3, weight: 0.4, forceAffix: true }, + { typePool: [MonType.Support], countMin: 1, countMax: 2, weight: 0.3, forceAffix: true }, ] }, { id: "B1", type: TemplateType.BOSS, tierMin: 2, allowAffix: true, slots: [ { typePool: [MonType.MeleeBoss], countMin: 1, countMax: 1, weight: 1.0 }, - { typePool: [MonType.Melee], countMin: 4, countMax: 6, weight: 0.5 }, - { typePool: [MonType.Long], countMin: 2, countMax: 4, weight: 0.3 }, - { typePool: [MonType.Support], countMin: 1, countMax: 2, weight: 0.2 }, + { typePool: [MonType.Melee], countMin: 2, countMax: 4, weight: 0.5 }, + { typePool: [MonType.Long], countMin: 1, countMax: 2, weight: 0.3 }, + { typePool: [MonType.Support], countMin: 1, countMax: 1, weight: 0.2 }, ] }, { id: "B2", type: TemplateType.BOSS, tierMin: 2, allowAffix: true, slots: [ { typePool: [MonType.MeleeBoss], countMin: 1, countMax: 1, weight: 1.0 }, - { typePool: [MonType.Melee, MonType.Heavy], countMin: 5, countMax: 8, weight: 0.5 }, - { typePool: [MonType.Long, MonType.Support], countMin: 3, countMax: 5, weight: 0.3 }, - { typePool: [MonType.Assassin], countMin: 1, countMax: 3, weight: 0.2 }, + { typePool: [MonType.Melee, MonType.Heavy], countMin: 3, countMax: 5, weight: 0.5 }, + { typePool: [MonType.Long, MonType.Support], countMin: 1, countMax: 3, weight: 0.3 }, + { typePool: [MonType.Assassin], countMin: 1, countMax: 2, weight: 0.2 }, ] }, { id: "B3", type: TemplateType.BOSS, tierMin: 3, allowAffix: true, slots: [ { typePool: [MonType.MeleeBoss, MonType.LongBoss], countMin: 1, countMax: 1, weight: 1.0 }, - { typePool: [MonType.Melee, MonType.Heavy], countMin: 5, countMax: 8, weight: 0.35 }, - { typePool: [MonType.Long, MonType.Assassin], countMin: 3, countMax: 6, weight: 0.35 }, - { typePool: [MonType.Support], countMin: 2, countMax: 4, weight: 0.3 }, + { typePool: [MonType.Melee, MonType.Heavy], countMin: 3, countMax: 5, weight: 0.35 }, + { typePool: [MonType.Long, MonType.Assassin], countMin: 2, countMax: 4, weight: 0.35 }, + { typePool: [MonType.Support], countMin: 1, countMax: 2, weight: 0.3 }, ] }, { id: "B4", type: TemplateType.BOSS, tierMin: 4, allowAffix: true, slots: [ { typePool: [MonType.MeleeBoss, MonType.LongBoss], countMin: 1, countMax: 1, weight: 1.0 }, - { typePool: [MonType.Heavy], countMin: 4, countMax: 7, weight: 0.35 }, - { typePool: [MonType.Assassin], countMin: 3, countMax: 5, weight: 0.3 }, - { typePool: [MonType.Summoner, MonType.Support], countMin: 2, countMax: 5, weight: 0.2 }, - { typePool: [MonType.Melee], countMin: 3, countMax: 6, weight: 0.15 }, + { typePool: [MonType.Heavy], countMin: 2, countMax: 4, weight: 0.35 }, + { typePool: [MonType.Assassin], countMin: 2, countMax: 3, weight: 0.3 }, + { typePool: [MonType.Summoner, MonType.Support], countMin: 1, countMax: 3, weight: 0.2 }, + { typePool: [MonType.Melee], countMin: 2, countMax: 4, weight: 0.15 }, ] }, { id: "TUTORIAL", type: TemplateType.NORMAL, tierMin: 1, allowAffix: false, - slots: [{ typePool: [MonType.Melee], countMin: 3, countMax: 3, weight: 1.0 }] }, + slots: [{ typePool: [MonType.Melee], countMin: 2, countMax: 2, weight: 1.0 }] }, ] // ======================== 自适应难度配置 ========================