/** * @file RogueConfig.ts * @description Roguelike 关卡配置 —— 怪物类型、成长值、波次刷怪方案 * * 职责: * 1. 定义怪物属性成长类型(UpType)和每种类型的 AP / HP 每阶段成长值。 * 2. 定义怪物分类(MonType)和对应的怪物 UUID 池。 * 3. 定义每一波(Wave)的怪物占位配置(WaveSlotConfig / DefaultWaveSlot)。 * 4. 提供全局刷怪强度偏差系数(SpawnPowerBias)。 * * 设计说明: * - 战场固定 6 个占位槽(索引 0-5)。 * - Boss 占 2 个槽位,只能放在 0、2、4 号位(确保有连续 2 格)。 * - MissionMonComp 在每波开始时读取本配置,决定刷怪组合。 * * 注意: * - StageGrow / StageBossGrow 的索引 [0] 为 AP 成长,[1] 为 HP 成长。 * - 实际计算公式:base_stat + stage × grow_value × SpawnPowerBias。 */ // ======================== 属性成长类型枚举 ======================== /** 怪物属性成长类型 */ export enum UpType { /** 平衡型:AP 和 HP 均匀成长 */ AP1_HP1 = 0, /** 强 HP 型:以血量为主成长 */ HP2 = 1, /** 强 AP 型:以攻击力为主成长 */ AP2 = 2 } // ======================== 普通怪成长配置 ======================== /** * 普通怪每阶段成长值:[AP 成长, HP 成长] * 每经历一波(stage +1),怪物的 base_ap / base_hp 增加对应值。 */ export const StageGrow = { [UpType.AP1_HP1]: [4,10], // 平衡型:每波攻击+4 血量+10 [UpType.HP2]: [2,20], // 强HP型:每波攻击+2 血量+20 [UpType.AP2]: [8,0], // 强AP型:每波攻击+8 血量+0 } // ======================== Boss 额外成长配置 ======================== /** * Boss 在普通怪成长基础上的 **额外** 成长值:[AP 增量, HP 增量] * 实际 Boss 成长 = StageGrow + StageBossGrow。 */ export const StageBossGrow = { [UpType.AP1_HP1]: [3,16], // 平衡型 Boss:额外攻击+3 血量+16 [UpType.HP2]: [1,24], // 强HP型 Boss:额外攻击+1 血量+24 [UpType.AP2]: [10,4], // 强AP型 Boss:额外攻击+10 血量+4 } // ======================== 怪物类型定义 ======================== /** 怪物类型常量(用于 WaveSlotConfig 中引用) */ export const MonType = { /** 近战普通怪 */ Melee: 0, /** 远程普通怪 */ Long: 1, /** 辅助怪(支持类) */ Support: 2, /** 近战 Boss */ MeleeBoss: 3, /** 远程 Boss */ LongBoss: 4, } // ======================== 怪物 UUID 池 ======================== /** 各类型对应的怪物 UUID 列表(随机抽取) */ export const MonList = { [MonType.Melee]: [6001,6002,6003], // 近战怪池 [MonType.Long]: [6004,6005], // 远程怪池 [MonType.Support]: [6005], // 辅助怪池 [MonType.MeleeBoss]:[6006,6015], // 近战 Boss 池 [MonType.LongBoss]:[6104], // 远程 Boss 池 } // ======================== 全局刷怪强度系数 ======================== /** * 全局刷怪强度偏差系数。 * 所有怪物的最终 AP / HP 会乘以此系数。 * 后期可根据玩家强度动态调整以实现自适应难度。 */ export const SpawnPowerBias = 1 // ======================== 波次占位配置数据结构 ======================== /** 单条波次占位配置 */ export interface IWaveSlot { /** 怪物类型(参考 MonType) */ type: number; /** 该类型的怪物数量 */ count: number; /** (可选)每个怪物占用几个槽位,默认 1;大型 Boss 设为 2 */ slotsPerMon?: number; } // ========================================================================================= // 【每波怪物占位与刷怪配置说明】 // // 字段说明: // - type: 怪物类型 (参考 MonType,如近战 0,远程 1,Boss 3 等)。 // - count: 该类型的怪在场上同时存在几个。 // - slotsPerMon: (可选) 单个怪物体积占用几个占位坑,默认为 1。 // 大型 Boss 设为 2,它会跨占位降落。 // // 【规则约束】: // - 全场固定 6 个槽位(索引 0-5)。 // - Boss 固定占用 2 个位置,且只能出现在 1、3、5 号位(对应索引 0, 2, 4)。 // - 每波怪物总槽位占用不能超过 6。 // ========================================================================================= /** 各波次的怪物占位配置(key = 波次编号) */ export const WaveSlotConfig: { [wave: number]: IWaveSlot[] } = { /** 第 1 波:3 近战 + 3 远程 */ 1: [ { type: MonType.Melee, count: 3 }, { type: MonType.Long, count: 3 } ], /** 第 2 波:2 近战 + 2 远程 + 2 辅助 */ 2: [ { type: MonType.Melee, count: 2 }, { type: MonType.Long, count: 2 }, { type: MonType.Support, count: 2 } ], /** 第 3 波:2 近战 + 1 近战Boss(占2格) + 2 远程 */ 3: [ { type: MonType.Melee, count: 2 }, { type: MonType.MeleeBoss, count: 1, slotsPerMon: 2 }, { type: MonType.Long, count: 2 } ], /** 第 4 波:2 近战 + 2 远程 + 1 远程Boss(占2格) */ 4: [ { type: MonType.Melee, count: 2 }, { type: MonType.Long, count: 2 }, { type: MonType.LongBoss, count: 1, slotsPerMon: 2 } ], } /** * 默认占位配置: * 当 WaveSlotConfig 中找不到对应波次时使用此兜底配置。 * 默认 3 近战 + 3 远程。 */ export const DefaultWaveSlot: IWaveSlot[] = [ { type: MonType.Melee, count: 3 }, { type: MonType.Long, count: 3 } ]