feat: 调整怪物属性与波次生成逻辑,新增测试脚本

1.  全怪物基础属性翻倍调整,同步更新英雄配置表
2.  修改模板M1的最低生效等级为1
3.  调整首波生成预算计算方式,修复低预算利用率检查逻辑
4.  新增spawn测试脚本,调整UI预制体布局参数
This commit is contained in:
walkpan
2026-05-15 20:42:24 +08:00
parent 9687adb559
commit e5e379aecc
6 changed files with 123 additions and 285 deletions

View File

@@ -221,16 +221,16 @@ export interface MonsterBaseStats {
* @see MonsterBaseStats 字段说明
*/
export const MonsterStats: Record<MonType, MonsterBaseStats> = {
[MonType.Melee]: { hp: 120, ap: 12, cost: 30, isBoss: false },
[MonType.Heavy]: { hp: 350, ap: 30, cost: 50, isBoss: false },
[MonType.Long]: { hp: 80, ap: 45, cost: 40, isBoss: false },
[MonType.Support]: { hp: 80, ap: 20, cost: 50, isBoss: false },
[MonType.Bomber]: { hp: 60, ap: 80, cost: 35, isBoss: false },
[MonType.Summoner]: { hp: 100, ap: 15, cost: 60, isBoss: false },
[MonType.Assassin]: { hp: 90, ap: 55, cost: 45, isBoss: false },
[MonType.Splitter]: { hp: 150, ap: 20, cost: 55, isBoss: false },
[MonType.MeleeBoss]: { hp: 1500, ap: 20, cost: 200, isBoss: true },
[MonType.LongBoss]: { hp: 350, ap: 30, cost: 200, isBoss: true },
[MonType.Melee]: { hp: 360, ap: 12, cost: 30, isBoss: false },
[MonType.Heavy]: { hp: 1050, ap: 30, cost: 50, isBoss: false },
[MonType.Long]: { hp: 240, ap: 45, cost: 40, isBoss: false },
[MonType.Support]: { hp: 240, ap: 20, cost: 50, isBoss: false },
[MonType.Bomber]: { hp: 180, ap: 80, cost: 35, isBoss: false },
[MonType.Summoner]: { hp: 300, ap: 15, cost: 60, isBoss: false },
[MonType.Assassin]: { hp: 270, ap: 55, cost: 45, isBoss: false },
[MonType.Splitter]: { hp: 450, ap: 20, cost: 55, isBoss: false },
[MonType.MeleeBoss]: { hp: 4500, ap: 20, cost: 200, isBoss: true },
[MonType.LongBoss]: { hp: 1050, ap: 30, cost: 200, isBoss: true },
}
// ======================== 阶梯Tier配置 ========================
@@ -399,7 +399,7 @@ export const BlueprintTemplates: BlueprintTemplate[] = [
] },
// ---- MIXED 类 ----
{ id: "M1", type: TemplateType.MIXED, tierMin: 2, allowAffix: true,
{ id: "M1", type: TemplateType.MIXED, tierMin: 1, allowAffix: true,
slots: [
{ typePool: [MonType.Melee, MonType.Heavy], countMin: 10, countMax: 15, weight: 0.4 },
{ typePool: [MonType.Long], countMin: 5, countMax: 10, weight: 0.3 },
@@ -624,7 +624,7 @@ export class RogueSpawningEngine {
if (waveNumber === 1) {
return this.spawnFromTemplate(
BlueprintTemplates.find(t => t.id === "TUTORIAL")!,
1, 1
1, getTierConfig(1).budget * this.adaptiveFactor
)
}
@@ -878,7 +878,7 @@ export class RogueSpawningEngine {
// 预算利用率检查 (目标 >= 70%)
let totalCost = budget - remainingBudget
if (budget > 0 && totalCost / budget < 0.7) {
if (budget > 0 && totalCost / budget < 0.7 && template.id !== "TUTORIAL") {
const tierConfig = getTierConfig(tier)
const type = MonType.Melee
const stats = MonsterStats[type]