feat(rogue): 调整刷怪配置,减少数量并提升质量

- 将最大同屏怪物数量从 50 减少到 10,追求更高质量的战斗体验
- 降低刷怪频率和单次生成上限,适配新的怪物总量
- 为平衡收益,将怪物属性、金币和经验产出均提升 5 倍
- 调整基础预算和出怪间隔以匹配新的配置策略
This commit is contained in:
walkpan
2026-01-29 23:32:31 +08:00
parent bff20f0ded
commit 4e28ea6859

View File

@@ -92,14 +92,14 @@ export interface IRogueGlobalConfig {
* 默认配置 * 默认配置
*/ */
export const DefaultRogueConfig: IRogueGlobalConfig = { export const DefaultRogueConfig: IRogueGlobalConfig = {
maxMonsterCount: 50, // 默认同屏50只 maxMonsterCount: 10, // 默认同屏10只 (原25) - 追求极致质量
spawnLogicInterval: 1.0, // 每秒计算一次 spawnLogicInterval: 1.0, // 每秒计算一次
spawnInterval: 0.6, // 队列出怪间隔0.6秒 spawnInterval: 2.5, // 队列出怪间隔2.5秒 (原1.2) - 降低频率适配总量
baseBudget: 5.0, // 基础预算 baseBudget: 1.0, // 基础预算 (原2.5) - 降低产出适配总量
timeDifficultyFactor: 0.5, // 每分钟增加50%预算 timeDifficultyFactor: 0.5, // 每分钟增加50%预算
survivalHpThreshold: 0.4, // 40%血量触发保护 survivalHpThreshold: 0.4, // 40%血量触发保护
survivalBudgetMultiplier: 0.7, // 保护时预算打7折 survivalBudgetMultiplier: 0.7, // 保护时预算打7折
maxSpawnPerLogic: 5 // 单次最多生成5只 maxSpawnPerLogic: 2 // 单次最多生成2只 (原3)
}; };
// 当前配置实例 // 当前配置实例
@@ -258,6 +258,9 @@ export function getMonAttr(stage: number, uuid: number, monType: MonType = MonTy
// 计算波次因子 // 计算波次因子
const waveFactor = calculateWaveFactor(stage, timeInSeconds); const waveFactor = calculateWaveFactor(stage, timeInSeconds);
// 质量系数数量减至10(原50的1/5)质量x5
const qualityRatio = 5.0;
// 根据怪物类型应用额外的倍率 // 根据怪物类型应用额外的倍率
let typeMultiplier = 1.0; let typeMultiplier = 1.0;
if (monType === MonType.ELITE) { if (monType === MonType.ELITE) {
@@ -266,14 +269,14 @@ export function getMonAttr(stage: number, uuid: number, monType: MonType = MonTy
typeMultiplier = 5.0; // Boss 5倍属性 typeMultiplier = 5.0; // Boss 5倍属性
} }
// 应用不同的成长类型 // 应用不同的成长类型 (应用质量系数)
const hp = applyGrowthFormula(baseMonster.hp, waveFactor, GrowthType.EXPONENTIAL) * typeMultiplier; const hp = applyGrowthFormula(baseMonster.hp, waveFactor, GrowthType.EXPONENTIAL) * typeMultiplier * qualityRatio;
const ap = applyGrowthFormula(baseMonster.ap, waveFactor, GrowthType.LINEAR) * typeMultiplier; const ap = applyGrowthFormula(baseMonster.ap, waveFactor, GrowthType.LINEAR) * typeMultiplier * qualityRatio;
const speed = applyGrowthFormula(baseMonster.speed, waveFactor, GrowthType.LOGARITHMIC); const speed = applyGrowthFormula(baseMonster.speed, waveFactor, GrowthType.LOGARITHMIC);
// MP和DEF使用线性成长 // MP和DEF使用线性成长 (应用质量系数)
const mp = applyGrowthFormula(baseMonster.mp, waveFactor, GrowthType.LINEAR); const mp = applyGrowthFormula(baseMonster.mp, waveFactor, GrowthType.LINEAR) * qualityRatio;
const def = applyGrowthFormula(baseMonster.def, waveFactor, GrowthType.LINEAR) * typeMultiplier; const def = applyGrowthFormula(baseMonster.def, waveFactor, GrowthType.LINEAR) * typeMultiplier * qualityRatio;
return { return {
hp: Math.floor(hp), hp: Math.floor(hp),
@@ -367,7 +370,8 @@ export function calculateMonsterGold(uuid: number, level: number, type: MonType)
// 公式: 基础(10) * 类型 * 危险值 + 等级加成 // 公式: 基础(10) * 类型 * 危险值 + 等级加成
const baseGold = 10; const baseGold = 10;
let gold = Math.floor(baseGold * type_ratio * danger_ratio + level); // 数量减至1/5收益x5
let gold = Math.floor((baseGold * type_ratio * danger_ratio + level) * 5);
return gold; return gold;
} }
@@ -384,7 +388,8 @@ export function calculateMonsterExp(uuid: number, level: number): number {
// 这样设计是为了对抗升级所需经验的指数增长 (1.2^L),同时平衡刷怪数量的线性增长 // 这样设计是为了对抗升级所需经验的指数增长 (1.2^L),同时平衡刷怪数量的线性增长
// T=0 (Lv1): Unit Exp ≈ 0.8 // T=0 (Lv1): Unit Exp ≈ 0.8
// T=13 (Lv14): Unit Exp ≈ 0.8 * 1.1^13 ≈ 2.76 // T=13 (Lv14): Unit Exp ≈ 0.8 * 1.1^13 ≈ 2.76
return Math.max(1, Math.floor(cost * 0.8 * Math.pow(1.1, level - 1))); // 数量减至1/5收益x5
return Math.max(1, Math.floor(cost * 0.8 * Math.pow(1.1, level - 1) * 5));
} }
// 怪物消耗点数配置 // 怪物消耗点数配置