From 5cacfee288879fe0b4f5dceeb04bd8cdf6da0450 Mon Sep 17 00:00:00 2001 From: walkpan Date: Sat, 23 May 2026 22:06:46 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E8=B0=83=E6=95=B4=E6=80=AA=E7=89=A9?= =?UTF-8?q?=E6=95=B0=E5=80=BC=E4=B8=8E=E6=B3=A2=E6=AC=A1=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=EF=BC=8C=E4=BC=98=E5=8C=96=E6=B8=B8=E6=88=8F=E7=88=BD=E6=84=9F?= =?UTF-8?q?=E4=B8=8E=E9=9A=BE=E5=BA=A6=E5=B9=B3=E8=A1=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 调整MissionComp中怪物上限与恢复阈值,提升刷怪容错空间 2. 下调全基础怪物属性并调整注释,降低初期怪物强度,同时调整BOSS属性降低其压力 3. 更新MonsterStats与TierConfigs,调整怪物消耗、预算与生成数量 4. 调整各波次模板的怪物生成数量,优化战斗体验 5. 调整自适应刷怪的最大填充比例,提升怪物生成效率 6. 更新部分配置注释,补充设计说明 --- assets/script/game/common/config/heroSet.ts | 32 +++--- assets/script/game/map/MissionComp.ts | 4 +- assets/script/game/map/RogueConfig.ts | 117 ++++++++++---------- 3 files changed, 78 insertions(+), 75 deletions(-) diff --git a/assets/script/game/common/config/heroSet.ts b/assets/script/game/common/config/heroSet.ts index 8d396f27..c4bb697f 100644 --- a/assets/script/game/common/config/heroSet.ts +++ b/assets/script/game/common/config/heroSet.ts @@ -421,38 +421,38 @@ export const HeroInfo: Record = { // 基础怪物 (全部远程攻击,HType仅决定站位) - // 近战位怪物 (站在前排,承受更多伤害) -6001:{uuid:6001,name:"兽人战士",path:"m1", fac:FacSet.MON,lv:1,type:HType.Melee,dis:360,hp:360,ap:15,speed:100, + // 近战位怪物 (站在前排,承受更多伤害) — v4: 数量×2 强度×0.6 爽感设计 +6001:{uuid:6001,name:"兽人战士",path:"m1", fac:FacSet.MON,lv:1,type:HType.Melee,dis:360,hp:220,ap:10,speed:100, skills:{6005:{uuid:6005,lv:1,cd:0.65,ccd:0}},info:"基础近战位怪"}, -6002:{uuid:6002,name:"兽人精锐战士",path:"m2", fac:FacSet.MON,lv:1,type:HType.Melee,dis:360,hp:500,ap:20,speed:110, +6002:{uuid:6002,name:"兽人精锐战士",path:"m2", fac:FacSet.MON,lv:1,type:HType.Melee,dis:360,hp:300,ap:14,speed:110, skills:{6005:{uuid:6005,lv:1,cd:0.55,ccd:0}},info:"进阶近战位怪,更快更痛"}, -6003:{uuid:6003,name:"兽人重装兵",path:"m3", fac:FacSet.MON,lv:1,type:HType.Melee,dis:360,hp:1400,ap:28,speed:80, +6003:{uuid:6003,name:"兽人重装兵",path:"m3", fac:FacSet.MON,lv:1,type:HType.Melee,dis:360,hp:850,ap:20,speed:80, skills:{6008:{uuid:6008,lv:1,cd:1.8,ccd:0}},info:"重型坦克怪,高HP慢攻"}, // 远程位怪物 (站在后排,输出更高) -6004:{uuid:6004,name:"兽人射手",path:"m4", fac:FacSet.MON,lv:1,type:HType.Long,hp:320,ap:50,speed:100, +6004:{uuid:6004,name:"兽人射手",path:"m4", fac:FacSet.MON,lv:1,type:HType.Long,hp:190,ap:35,speed:100, skills:{6008:{uuid:6008,lv:1,cd:1.2,ccd:0}},info:"远程高DPS怪"}, -6005:{uuid:6005,name:"兽人刺客",path:"m5", fac:FacSet.MON,lv:1,type:HType.Long,hp:350,ap:55,speed:130, +6005:{uuid:6005,name:"兽人刺客",path:"m5", fac:FacSet.MON,lv:1,type:HType.Long,hp:210,ap:38,speed:130, skills:{6103:{uuid:6103,lv:1,cd:0.8,ccd:0}},info:"高AP快速攻击刺客"}, // 特殊位怪物 -6006:{uuid:6006,name:"骷髅领主",path:"m6", fac:FacSet.MON,lv:1,type:HType.Melee,dis:360,hp:8000,ap:30,speed:90, +6006:{uuid:6006,name:"骷髅领主",path:"m6", fac:FacSet.MON,lv:1,type:HType.Melee,dis:360,hp:5000,ap:20,speed:90, skills:{6005:{uuid:6005,lv:1,cd:1.5,ccd:0}},info:"MiniBoss级坦克"}, -6007:{uuid:6007,name:"兽人术士",path:"m7", fac:FacSet.MON,lv:1,type:HType.Melee,dis:360,hp:500,ap:35,speed:100, +6007:{uuid:6007,name:"兽人术士",path:"m7", fac:FacSet.MON,lv:1,type:HType.Melee,dis:360,hp:300,ap:24,speed:100, skills:{6103:{uuid:6103,lv:1,cd:1.2,ccd:0}},info:"法师怪,远程魔法攻击"}, -6008:{uuid:6008,name:"兽人火法",path:"m8", fac:FacSet.MON,lv:1,type:HType.Melee,dis:360,hp:450,ap:45,speed:100, +6008:{uuid:6008,name:"兽人火法",path:"m8", fac:FacSet.MON,lv:1,type:HType.Melee,dis:360,hp:270,ap:32,speed:100, skills:{6103:{uuid:6103,lv:1,cd:1.0,ccd:0}},info:"高输出法师怪"}, -// BOSS怪物 -6101:{uuid:6101,name:"兽人首领-双刀战士",path:"mb1", fac:FacSet.MON,lv:6,type:HType.Long,hp:2500,ap:40,speed:120, +// BOSS怪物 — Boss强度降低~25%,靠护卫小怪制造场面压力 +6101:{uuid:6101,name:"兽人首领-双刀战士",path:"mb1", fac:FacSet.MON,lv:6,type:HType.Long,hp:1900,ap:30,speed:120, skills:{6103:{uuid:6103,lv:1,cd:0.8,ccd:0},6206:{uuid:6206,lv:1,cd:10,ccd:0}},info:"远程Boss,高攻速"}, -6102:{uuid:6102,name:"兽人首领-斧头战士",path:"mb2", fac:FacSet.MON,lv:6,type:HType.Melee,dis:360,hp:10000,ap:35,speed:90, +6102:{uuid:6102,name:"兽人首领-斧头战士",path:"mb2", fac:FacSet.MON,lv:6,type:HType.Melee,dis:360,hp:7500,ap:26,speed:90, skills:{6005:{uuid:6005,lv:1,cd:1.2,ccd:0}},info:"近战Boss,超高HP"}, -6103:{uuid:6103,name:"兽人首领-魔法师",path:"mb3", fac:FacSet.MON,lv:6,type:HType.Long,hp:3000,ap:50,speed:110, +6103:{uuid:6103,name:"兽人首领-魔法师",path:"mb3", fac:FacSet.MON,lv:6,type:HType.Long,hp:2250,ap:38,speed:110, skills:{6103:{uuid:6103,lv:1,cd:0.7,ccd:0},6206:{uuid:6206,lv:1,cd:8,ccd:0}},info:"远程法系Boss,高AP"}, -6104:{uuid:6104,name:"兽人首领-射手",path:"mb4", fac:FacSet.MON,lv:6,type:HType.Melee,dis:360,hp:9000,ap:40,speed:100, +6104:{uuid:6104,name:"兽人首领-射手",path:"mb4", fac:FacSet.MON,lv:6,type:HType.Melee,dis:360,hp:6800,ap:30,speed:100, skills:{6005:{uuid:6005,lv:1,cd:1.0,ccd:0}},info:"近战位Boss,均衡型"}, -6105:{uuid:6105,name:"亡灵首领-法师",path:"mb5", fac:FacSet.MON,lv:6,type:HType.Long,hp:3500,ap:55,speed:110, +6105:{uuid:6105,name:"亡灵首领-法师",path:"mb5", fac:FacSet.MON,lv:6,type:HType.Long,hp:2600,ap:42,speed:110, skills:{6103:{uuid:6103,lv:1,cd:0.7,ccd:0},6206:{uuid:6206,lv:1,cd:8,ccd:0}},info:"远程高AP Boss"}, -6106:{uuid:6106,name:"亡灵首领-骑马战士",path:"mb6", fac:FacSet.MON,lv:6,type:HType.Melee,dis:360,hp:12000,ap:35,speed:130, +6106:{uuid:6106,name:"亡灵首领-骑马战士",path:"mb6", fac:FacSet.MON,lv:6,type:HType.Melee,dis:360,hp:9000,ap:26,speed:130, skills:{6005:{uuid:6005,lv:1,cd:1.0,ccd:0}},info:"终极Boss,最高HP+高速"}, diff --git a/assets/script/game/map/MissionComp.ts b/assets/script/game/map/MissionComp.ts index 2b4295a6..ff600a0c 100644 --- a/assets/script/game/map/MissionComp.ts +++ b/assets/script/game/map/MissionComp.ts @@ -84,9 +84,9 @@ export class MissionComp extends CCComp { // ======================== 配置参数 ======================== /** 怪物数量上限(超过后暂停刷怪) */ - private maxMonsterCount: number = 50; + private maxMonsterCount: number = 80; /** 怪物数量恢复阈值(降至此值以下恢复刷怪) */ - private resumeMonsterCount: number = 30; + private resumeMonsterCount: number = 45; /** 新一波金币奖励基础值 */ private prepareBaseCoinReward: number = 10; /** 每一波金币增长值(公式: base + (wave-1) * growth) */ diff --git a/assets/script/game/map/RogueConfig.ts b/assets/script/game/map/RogueConfig.ts index b9b257f1..48bd4ca2 100644 --- a/assets/script/game/map/RogueConfig.ts +++ b/assets/script/game/map/RogueConfig.ts @@ -215,14 +215,14 @@ export interface MonsterBaseStats { * @see MonsterBaseStats 字段说明 */ export const MonsterStats: Record = { - [MonType.Melee]: { hp: 360, ap: 15, cost: 25, isBoss: false }, - [MonType.Heavy]: { hp: 1400, ap: 28, cost: 50, isBoss: false }, - [MonType.Long]: { hp: 320, ap: 50, cost: 35, isBoss: false }, - [MonType.Support]: { hp: 500, ap: 35, cost: 40, isBoss: false }, - [MonType.Summoner]: { hp: 450, ap: 45, cost: 50, isBoss: false }, - [MonType.Assassin]: { hp: 350, ap: 55, cost: 35, isBoss: false }, - [MonType.MeleeBoss]: { hp: 10000, ap: 35, cost: 200, isBoss: true }, - [MonType.LongBoss]: { hp: 3000, ap: 50, cost: 200, isBoss: true }, + [MonType.Melee]: { hp: 220, ap: 10, cost: 18, isBoss: false }, + [MonType.Heavy]: { hp: 850, ap: 20, cost: 35, isBoss: false }, + [MonType.Long]: { hp: 190, ap: 35, cost: 25, isBoss: false }, + [MonType.Support]: { hp: 300, ap: 24, cost: 28, isBoss: false }, + [MonType.Summoner]: { hp: 270, ap: 32, cost: 35, isBoss: false }, + [MonType.Assassin]: { hp: 210, ap: 38, cost: 25, isBoss: false }, + [MonType.MeleeBoss]: { hp: 7000, ap: 26, cost: 130, isBoss: true }, + [MonType.LongBoss]: { hp: 2100, ap: 38, cost: 130, isBoss: true }, } // ======================== 阶梯(Tier)配置 ======================== @@ -252,11 +252,11 @@ const MAJOR_BOSS_TIERS = new Set([3, 5]) * 主线 15 波映射:wave 1-3 → T1, wave 4-6 → T2, ..., wave 13-15 → T5 */ export const TierConfigs: Record = { - 1: { multiplier: 1.0, budget: 200, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long], isBossTier: false }, - 2: { multiplier: 2.0, budget: 600, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support], isBossTier: true }, - 3: { multiplier: 3.5, budget: 1400, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support, MonType.Assassin], isBossTier: true }, - 4: { multiplier: 5.5, budget: 2500, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support, MonType.Assassin, MonType.Summoner], isBossTier: true }, - 5: { multiplier: 8.5, budget: 4000, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support, MonType.Assassin, MonType.Summoner], isBossTier: true }, + 1: { multiplier: 1.0, budget: 350, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long], isBossTier: false }, + 2: { multiplier: 2.0, budget: 1000, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support], isBossTier: true }, + 3: { multiplier: 3.5, budget: 2300, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support, MonType.Assassin], isBossTier: true }, + 4: { multiplier: 5.5, budget: 4000, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support, MonType.Assassin, MonType.Summoner], isBossTier: true }, + 5: { multiplier: 8.5, budget: 6500, availableTypes: [MonType.Melee, MonType.Heavy, MonType.Long, MonType.Support, MonType.Assassin, MonType.Summoner], isBossTier: true }, } /** @@ -363,102 +363,105 @@ export interface BlueprintTemplate { export const BlueprintTemplates: BlueprintTemplate[] = [ // ---- REST 类 (恢复波:少量怪,让玩家喘口气) ---- { id: "R1", type: TemplateType.REST, tierMin: 1, allowAffix: false, - slots: [{ typePool: [MonType.Melee], countMin: 3, countMax: 5, weight: 1.0 }] }, + slots: [{ typePool: [MonType.Melee], countMin: 4, countMax: 7, weight: 1.0 }] }, { id: "R2", type: TemplateType.REST, tierMin: 2, allowAffix: false, - slots: [{ typePool: [MonType.Melee, MonType.Heavy], countMin: 5, countMax: 8, weight: 1.0 }] }, + slots: [{ typePool: [MonType.Melee, MonType.Heavy], countMin: 6, countMax: 10, weight: 1.0 }] }, { id: "R3", type: TemplateType.REST, tierMin: 3, allowAffix: false, - slots: [{ typePool: [MonType.Melee, MonType.Long], countMin: 6, countMax: 10, weight: 1.0 }] }, + slots: [{ typePool: [MonType.Melee, MonType.Long], countMin: 8, countMax: 14, weight: 1.0 }] }, // ---- NORMAL 类 ---- - // N1/N2: T1专用(1-5英雄),数量少 + // N1/N2: T1专用(1-5英雄) { id: "N1", type: TemplateType.NORMAL, tierMin: 1, allowAffix: false, - slots: [{ typePool: [MonType.Melee], countMin: 3, countMax: 5, weight: 1.0 }] }, + slots: [{ typePool: [MonType.Melee], countMin: 4, countMax: 7, weight: 1.0 }] }, { id: "N2", type: TemplateType.NORMAL, tierMin: 1, allowAffix: false, slots: [ - { typePool: [MonType.Melee], countMin: 2, countMax: 4, weight: 0.6 }, - { typePool: [MonType.Long], countMin: 1, countMax: 3, weight: 0.4 }, + { typePool: [MonType.Melee], countMin: 3, countMax: 6, weight: 0.6 }, + { typePool: [MonType.Long], countMin: 2, countMax: 4, weight: 0.4 }, ] }, // N3+: T2起(5-6英雄),正常数量 { id: "N3", type: TemplateType.NORMAL, tierMin: 2, allowAffix: true, slots: [ - { typePool: [MonType.Melee, MonType.Heavy], countMin: 5, countMax: 8, weight: 0.5 }, - { typePool: [MonType.Long], countMin: 3, countMax: 6, weight: 0.3 }, - { typePool: [MonType.Support], countMin: 2, countMax: 3, weight: 0.2 }, + { typePool: [MonType.Melee, MonType.Heavy], countMin: 6, countMax: 12, weight: 0.5 }, + { typePool: [MonType.Long], countMin: 4, countMax: 8, weight: 0.3 }, + { typePool: [MonType.Support], countMin: 2, countMax: 5, weight: 0.2 }, ] }, { id: "N4", type: TemplateType.NORMAL, tierMin: 3, allowAffix: true, slots: [ - { typePool: [MonType.Melee, MonType.Heavy], countMin: 6, countMax: 10, weight: 0.4 }, - { typePool: [MonType.Long, MonType.Assassin], countMin: 4, countMax: 8, weight: 0.3 }, - { typePool: [MonType.Support], countMin: 2, countMax: 4, weight: 0.3 }, + { typePool: [MonType.Melee, MonType.Heavy], countMin: 8, countMax: 14, weight: 0.4 }, + { typePool: [MonType.Long, MonType.Assassin], countMin: 5, countMax: 10, weight: 0.3 }, + { typePool: [MonType.Support], countMin: 3, countMax: 6, weight: 0.3 }, ] }, // ---- MIXED 类 ---- - // M1: T1专用(波3,5英雄),适中数量 + // M1: T1专用(波3,5英雄) { id: "M1", type: TemplateType.MIXED, tierMin: 1, allowAffix: true, slots: [ - { typePool: [MonType.Melee, MonType.Heavy], countMin: 3, countMax: 5, weight: 0.4 }, - { typePool: [MonType.Long], countMin: 2, countMax: 3, weight: 0.3 }, - { typePool: [MonType.Support], countMin: 1, countMax: 2, weight: 0.3 }, + { typePool: [MonType.Melee, MonType.Heavy], countMin: 4, countMax: 7, weight: 0.4 }, + { typePool: [MonType.Long], countMin: 3, countMax: 5, weight: 0.3 }, + { typePool: [MonType.Support], countMin: 1, countMax: 3, weight: 0.3 }, ] }, - // M2+: T3起(6英雄),正常数量 + // M2+: T3起(6英雄) { id: "M2", type: TemplateType.MIXED, tierMin: 3, allowAffix: true, slots: [ - { typePool: [MonType.Melee, MonType.Heavy], countMin: 6, countMax: 10, weight: 0.3 }, - { typePool: [MonType.Long, MonType.Assassin], countMin: 5, countMax: 8, weight: 0.3 }, - { typePool: [MonType.Support], countMin: 3, countMax: 5, weight: 0.4 }, + { typePool: [MonType.Melee, MonType.Heavy], countMin: 8, countMax: 14, weight: 0.3 }, + { typePool: [MonType.Long, MonType.Assassin], countMin: 6, countMax: 10, weight: 0.3 }, + { typePool: [MonType.Support], countMin: 4, countMax: 7, weight: 0.4 }, ] }, { id: "M3", type: TemplateType.MIXED, tierMin: 4, allowAffix: true, slots: [ - { typePool: [MonType.Melee, MonType.Heavy], countMin: 8, countMax: 12, weight: 0.3 }, - { typePool: [MonType.Long, MonType.Assassin], countMin: 5, countMax: 8, weight: 0.3 }, - { typePool: [MonType.Summoner], countMin: 2, countMax: 4, weight: 0.2 }, - { typePool: [MonType.Support], countMin: 2, countMax: 4, weight: 0.2 }, + { typePool: [MonType.Melee, MonType.Heavy], countMin: 10, countMax: 16, weight: 0.3 }, + { typePool: [MonType.Long, MonType.Assassin], countMin: 6, countMax: 12, weight: 0.3 }, + { typePool: [MonType.Summoner], countMin: 3, countMax: 5, weight: 0.2 }, + { typePool: [MonType.Support], countMin: 3, countMax: 6, weight: 0.2 }, ] }, // ---- ELITE 类 (精英波:少但强,考验单兵质量) ---- { id: "E1", type: TemplateType.ELITE, tierMin: 3, allowAffix: true, slots: [ - { typePool: [MonType.Heavy], countMin: 3, countMax: 5, weight: 0.5, forceAffix: true }, - { typePool: [MonType.Long, MonType.Assassin], countMin: 3, countMax: 6, weight: 0.5, forceAffix: true }, + { typePool: [MonType.Heavy], countMin: 4, countMax: 7, weight: 0.5, forceAffix: true }, + { typePool: [MonType.Long, MonType.Assassin], countMin: 4, countMax: 8, weight: 0.5, forceAffix: true }, ] }, { id: "E2", type: TemplateType.ELITE, tierMin: 4, allowAffix: true, slots: [ - { typePool: [MonType.Heavy], countMin: 3, countMax: 5, weight: 0.3, forceAffix: true }, - { typePool: [MonType.Assassin], countMin: 4, countMax: 6, weight: 0.4, forceAffix: true }, - { typePool: [MonType.Support], countMin: 2, countMax: 4, weight: 0.3, forceAffix: true }, + { typePool: [MonType.Heavy], countMin: 4, countMax: 7, weight: 0.3, forceAffix: true }, + { typePool: [MonType.Assassin], countMin: 5, countMax: 8, weight: 0.4, forceAffix: true }, + { typePool: [MonType.Support], countMin: 3, countMax: 5, weight: 0.3, forceAffix: true }, ] }, - // ---- BOSS 类 (Boss波:1个Boss + 少量精英随从) ---- + // ---- BOSS 类 (Boss波:1个Boss + 大量护卫小怪,制造清杂兵爽感) ---- { id: "B1", type: TemplateType.BOSS, tierMin: 2, allowAffix: true, slots: [ { typePool: [MonType.MeleeBoss], countMin: 1, countMax: 1, weight: 1.0 }, - { typePool: [MonType.Melee], countMin: 4, countMax: 6, weight: 0.6 }, - { typePool: [MonType.Long], countMin: 2, countMax: 4, weight: 0.4 }, + { typePool: [MonType.Melee], countMin: 6, countMax: 10, weight: 0.5 }, + { typePool: [MonType.Long], countMin: 4, countMax: 7, weight: 0.3 }, + { typePool: [MonType.Support], countMin: 2, countMax: 3, weight: 0.2 }, ] }, { id: "B2", type: TemplateType.BOSS, tierMin: 2, allowAffix: true, slots: [ { typePool: [MonType.MeleeBoss], countMin: 1, countMax: 1, weight: 1.0 }, - { typePool: [MonType.Melee, MonType.Heavy], countMin: 5, countMax: 8, weight: 0.5 }, - { typePool: [MonType.Long, MonType.Support], countMin: 3, countMax: 6, weight: 0.5 }, + { typePool: [MonType.Melee, MonType.Heavy], countMin: 8, countMax: 12, weight: 0.5 }, + { typePool: [MonType.Long, MonType.Support], countMin: 5, countMax: 8, weight: 0.3 }, + { typePool: [MonType.Assassin], countMin: 2, countMax: 4, weight: 0.2 }, ] }, { id: "B3", type: TemplateType.BOSS, tierMin: 3, allowAffix: true, slots: [ { typePool: [MonType.MeleeBoss, MonType.LongBoss], countMin: 1, countMax: 1, weight: 1.0 }, - { typePool: [MonType.Melee, MonType.Heavy], countMin: 6, countMax: 10, weight: 0.4 }, - { typePool: [MonType.Long, MonType.Assassin], countMin: 3, countMax: 6, weight: 0.3 }, - { typePool: [MonType.Support], countMin: 2, countMax: 4, weight: 0.3 }, + { typePool: [MonType.Melee, MonType.Heavy], countMin: 8, countMax: 14, weight: 0.35 }, + { typePool: [MonType.Long, MonType.Assassin], countMin: 5, countMax: 10, weight: 0.35 }, + { typePool: [MonType.Support], countMin: 3, countMax: 6, weight: 0.3 }, ] }, { id: "B4", type: TemplateType.BOSS, tierMin: 4, allowAffix: true, slots: [ { typePool: [MonType.MeleeBoss, MonType.LongBoss], countMin: 1, countMax: 1, weight: 1.0 }, - { typePool: [MonType.Heavy], countMin: 5, countMax: 8, weight: 0.4 }, - { typePool: [MonType.Assassin], countMin: 3, countMax: 6, weight: 0.3 }, - { typePool: [MonType.Summoner, MonType.Support], countMin: 3, countMax: 5, weight: 0.3 }, + { typePool: [MonType.Heavy], countMin: 6, countMax: 12, weight: 0.35 }, + { typePool: [MonType.Assassin], countMin: 5, countMax: 8, weight: 0.3 }, + { typePool: [MonType.Summoner, MonType.Support], countMin: 4, countMax: 8, weight: 0.2 }, + { typePool: [MonType.Melee], countMin: 5, countMax: 10, weight: 0.15 }, ] }, - // ---- 教程专用 (波1: 1个英雄) ---- + // ---- 教程专用 (波1: 1个英雄,3只弱怪热身) ---- { id: "TUTORIAL", type: TemplateType.NORMAL, tierMin: 1, allowAffix: false, - slots: [{ typePool: [MonType.Melee], countMin: 2, countMax: 2, weight: 1.0 }] }, + slots: [{ typePool: [MonType.Melee], countMin: 3, countMax: 3, weight: 1.0 }] }, ] // ======================== 自适应难度配置 ======================== @@ -876,7 +879,7 @@ export class RogueSpawningEngine { const tierConfig = getTierConfig(tier) const type = MonType.Melee const stats = MonsterStats[type] - const maxFill = Math.max(5, Math.ceil(monsters.length * 0.5)) + const maxFill = Math.max(5, Math.ceil(monsters.length * 0.8)) let fillCount = 0 while (remainingBudget >= stats.cost && fillCount < maxFill) { const finalHp = Math.max(1, Math.round(stats.hp * tierConfig.multiplier * this.adaptiveFactor))