Files
pixelheros/assets/script/game/map/RogueConfig.ts
panw f86c08a77d refactor(map): 将战场槽位从6个减少到5个并调整刷怪配置
- 减少总槽位数量以简化战场布局
- 更新所有波次的怪物配置以匹配新槽位限制
- 调整Boss放置规则,现在只能放置在0、2号位
- 更新默认配置和文档注释以反映新的战场结构
2026-04-08 09:10:22 +08:00

157 lines
5.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* @file RogueConfig.ts
* @description Roguelike 关卡配置 —— 怪物类型、成长值、波次刷怪方案
*
* 职责:
* 1. 定义怪物属性成长类型UpType和每种类型的 AP / HP 每阶段成长值。
* 2. 定义怪物分类MonType和对应的怪物 UUID 池。
* 3. 定义每一波Wave的怪物占位配置WaveSlotConfig / DefaultWaveSlot
* 4. 提供全局刷怪强度偏差系数SpawnPowerBias
*
* 设计说明:
* - 战场固定 5 个占位槽(索引 0-4
* - Boss 占 2 个槽位,只能放在 0、2 号位(确保有连续 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远程 1Boss 3 等)。
// - count: 该类型的怪在场上同时存在几个。
// - slotsPerMon: (可选) 单个怪物体积占用几个占位坑,默认为 1。
// 大型 Boss 设为 2它会跨占位降落。
//
// 【规则约束】:
// - 全场固定 5 个槽位(索引 0-4
// - Boss 固定占用 2 个位置,且只能出现在 1、3 号位(对应索引 0, 2
// - 每波怪物总槽位占用不能超过 5。
// =========================================================================================
/** 各波次的怪物占位配置key = 波次编号) */
export const WaveSlotConfig: { [wave: number]: IWaveSlot[] } = {
/** 第 1 波2 近战 + 3 远程 */
1: [
{ type: MonType.Melee, count: 2 },
{ type: MonType.Long, count: 3 }
],
/** 第 2 波2 近战 + 2 远程 + 1 辅助 */
2: [
{ type: MonType.Melee, count: 2 },
{ type: MonType.Long, count: 2 },
{ type: MonType.Support, count: 1 }
],
/** 第 3 波2 近战 + 1 近战Boss(占2格) + 1 远程 */
3: [
{ type: MonType.Melee, count: 2 },
{ type: MonType.MeleeBoss, count: 1, slotsPerMon: 2 },
{ type: MonType.Long, count: 1 }
],
/** 第 4 波2 近战 + 1 远程 + 1 远程Boss(占2格) */
4: [
{ type: MonType.Melee, count: 2 },
{ type: MonType.Long, count: 1 },
{ type: MonType.LongBoss, count: 1, slotsPerMon: 2 }
],
}
/**
* 默认占位配置:
* 当 WaveSlotConfig 中找不到对应波次时使用此兜底配置。
* 默认 2 近战 + 3 远程。
*/
export const DefaultWaveSlot: IWaveSlot[] = [
{ type: MonType.Melee, count: 2 },
{ type: MonType.Long, count: 3 }
]