feat(map/rogue): 新增单挑测试模式并优化Rogue阶梯配置

重新基于1v1英雄战力基准推演,更新各Tier的难度乘数和预算参数
新增TestModeConfig配置项,支持自定义测试怪物的基础属性、类型和增长比例
在怪物生成逻辑中加入测试模式分支,开启后每波仅生成1只匹配配置的怪物
在MissionMonComp组件中添加测试模式开启的日志提示
This commit is contained in:
pan
2026-06-12 16:15:04 +08:00
parent 3f73669ba4
commit 85ab6b0507
2 changed files with 60 additions and 9 deletions

View File

@@ -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");
}

View File

@@ -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-5value = 该阶梯的完整配置
* 主线 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<number, TierConfig> = {
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