157 lines
5.5 KiB
TypeScript
157 lines
5.5 KiB
TypeScript
/**
|
||
* @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,远程 1,Boss 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 }
|
||
]
|
||
|