diff --git a/assets/script/game/map/MissionMonComp.ts b/assets/script/game/map/MissionMonComp.ts index 3bfb4d4b..6ebd6dc2 100644 --- a/assets/script/game/map/MissionMonComp.ts +++ b/assets/script/game/map/MissionMonComp.ts @@ -35,7 +35,7 @@ import { HeroInfo, HType } from "../common/config/heroSet"; import { smc } from "../common/SingletonModuleComp"; import { GameEvent } from "../common/config/GameEvent"; import {BoxSet, FacSet } from "../common/config/GameSet"; -import { spawningEngine, GeneratedMonster, AffixType, MonType, MonList } from "./RogueConfig"; +import { spawningEngine, GeneratedMonster, AffixType, MonType, MonList, TestModeConfig } from "./RogueConfig"; import { HeroAttrsComp } from "../hero/HeroAttrsComp"; import { MonMoveComp } from "../hero/MonMoveComp"; const { ccclass, property } = _decorator; @@ -195,6 +195,11 @@ export class MissionMonCompComp extends CCComp { const monsters = spawningEngine.generateWave(this.currentWave); this.setupWaveData(monsters); + // 如果处于测试模式,英雄也需要限制为只产出一个,这部分通知可以配合使用 + if (TestModeConfig.enable) { + mLogger.log(this.debugMode, 'MissionMonComp', "[MissionMonComp] 测试模式已开启:每波仅生成1只基准怪物"); + } + mLogger.log(this.debugMode, 'MissionMonComp', "[MissionMonComp] Starting Wave System"); } diff --git a/assets/script/game/map/RogueConfig.ts b/assets/script/game/map/RogueConfig.ts index fa46b448..03646d54 100644 --- a/assets/script/game/map/RogueConfig.ts +++ b/assets/script/game/map/RogueConfig.ts @@ -278,16 +278,26 @@ const BOSS_TIERS = new Set([1, 2, 3, 4, 5]) const MAJOR_BOSS_TIERS = new Set([3, 5]) /** - * 5 阶梯配置表 - * key = 阶梯编号 1-5,value = 该阶梯的完整配置 - * 主线 15 波映射:wave 1-3 → T1, wave 4-6 → T2, ..., wave 13-15 → T5 + * 5 阶梯配置表 (基于"第5波单怪=1个英雄"的基准推演) + * + * 核心设计推演: + * 1. 玩家反馈:Tier 2 (第4-6波) 的单只怪物强度,刚好对应 1 个 Lv1 英雄。 + * 2. 设 Tier 2 的 Multiplier 为 2.0,基准近战怪成本为 22。 + * 3. 则 1个购卡战力 (1个Lv1英雄) = 22 * 2.0 = 44 难度点。 + * 4. 推演公式:当前波次总难度 (Budget * Multiplier) ≈ 累计购卡数 * 44。 + * 5. 约束:为避免触发同屏最大 12 只怪的截断机制,后期 Budget 锁定在 260-280,难度全靠 Multiplier (属性) 拉升。 */ export const TierConfigs: Record = { - 1: { multiplier: 1.0, budget: 60, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long], isBossTier: false }, - 2: { multiplier: 1.5, budget: 120, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support], isBossTier: true }, - 3: { multiplier: 2.2, budget: 180, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support, MonType.Assassin], isBossTier: true }, - 4: { multiplier: 3.2, budget: 240, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support, MonType.Assassin, MonType.Summoner], isBossTier: true }, - 5: { multiplier: 4.5, budget: 300, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support, MonType.Assassin, MonType.Summoner], isBossTier: true }, + // T1(W1-W3): 预计累计 2.3 卡。目标总难度 101。Budget 80 * 1.1 = 88 + 1: { multiplier: 1.1, budget: 80, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long], isBossTier: false }, + // T2(W4-W6): 预计累计 8.0 卡。目标总难度 352。Budget 160 * 2.0 = 320 + 2: { multiplier: 2.0, budget: 160, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support], isBossTier: true }, + // T3(W7-W9): 预计累计 15.3卡。目标总难度 673。Budget 220 * 3.0 = 660 + 3: { multiplier: 3.0, budget: 220, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support, MonType.Assassin], isBossTier: true }, + // T4(W10-W12):预计累计 23.3卡。目标总难度 1025。Budget 260 * 4.0 = 1040 + 4: { multiplier: 4.0, budget: 260, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support, MonType.Assassin, MonType.Summoner], isBossTier: true }, + // T5(W13-W15):预计累计 31.3卡。目标总难度 1377。Budget 280 * 5.2 = 1456 + 5: { multiplier: 5.2, budget: 280, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support, MonType.Assassin, MonType.Summoner], isBossTier: true }, } /** @@ -525,6 +535,28 @@ export const InfiniteModeConfig = { megaBossInterval: 3, } +// ======================== 测试模式配置 ======================== + +/** + * 单挑测试模式配置 + * 用于寻找 1v1 环境下单只怪物与单只英雄的战力基准 + * 开启后每波只生成 1 只怪物,且其属性随波次平滑递增 + */ +export const TestModeConfig = { + /** 是否开启单挑测试模式 */ + enable: true, + /** 测试模式中生成怪物的基础生命值 (对应 1级 英雄) */ + baseHp: 150, + /** 测试模式中生成怪物的基础攻击力 (对应 1级 英雄) */ + baseAp: 12, + /** 每波次基础属性增加比例 (例如 0.2 表示每波增加 20%) */ + growthRatePerWave: 0.2, + /** 固定的测试怪物类型 */ + monType: MonType.Melee, + /** 固定的测试怪物 UUID (如 6001 兽人战士) */ + monUuid: 6001 +} + // ======================== 向后兼容接口 ======================== /** @@ -635,6 +667,20 @@ export class RogueSpawningEngine { generateWave(waveNumber: number): GeneratedMonster[] { if (waveNumber < 1) return [] + // 测试模式拦截 + if (TestModeConfig.enable) { + const growth = 1 + (waveNumber - 1) * TestModeConfig.growthRatePerWave; + return [{ + uuid: TestModeConfig.monUuid, + type: TestModeConfig.monType, + hp: Math.round(TestModeConfig.baseHp * growth), + ap: Math.round(TestModeConfig.baseAp * growth), + affixes: [], + isBoss: false, + spawnIndex: 0 + }]; + } + const tier = Math.ceil(waveNumber / 3) const waveInTier = ((waveNumber - 1) % 3) + 1 // 1, 2, or 3