From f515feda7be23448beaf5f40e34173cc8c6345e3 Mon Sep 17 00:00:00 2001 From: walkpan Date: Fri, 15 May 2026 22:24:29 +0800 Subject: [PATCH] =?UTF-8?q?chore(map):=20=E8=B0=83=E6=95=B4=E5=85=B3?= =?UTF-8?q?=E5=8D=A1=E6=B3=A2=E6=AC=A1=E4=B8=8A=E9=99=90=E4=B8=BA15?= =?UTF-8?q?=E6=B3=A2=E5=B9=B6=E5=AE=8C=E5=96=84=E6=80=AA=E7=89=A9=E9=98=9F?= =?UTF-8?q?=E5=88=97=E6=A3=80=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 将显示的波次文字从30波改为15波 2. 修改通关判定条件为当前波次达到15波 3. 新增待刷新怪物数量的状态跟踪 4. 完善怪物全灭的判定逻辑,加入待刷新队列检测 5. 移除了测试用的ts和js脚本文件 6. 添加了怪物生成相关的调试日志 --- assets/script/game/map/MissionComp.ts | 15 ++++++++------- assets/script/game/map/MissionMonComp.ts | 13 +++++++++++++ test_spawn.js | 4 ---- test_spawn.ts | 4 ---- 4 files changed, 21 insertions(+), 15 deletions(-) delete mode 100644 test_spawn.js delete mode 100644 test_spawn.ts diff --git a/assets/script/game/map/MissionComp.ts b/assets/script/game/map/MissionComp.ts index 7cb591ba..b64edbe1 100644 --- a/assets/script/game/map/MissionComp.ts +++ b/assets/script/game/map/MissionComp.ts @@ -398,7 +398,7 @@ export class MissionComp extends CCComp { const label = phaseNode.getComponent(Label); if (label) { const wave = Math.max(1, this.currentWave || (smc.vmdata && smc.vmdata.mission_data ? smc.vmdata.mission_data.level : 1) || 1); - label.string = `第 ${wave}/30 波`; + label.string = `第 ${wave}/15 波`; } // 阶段切换动感表现:只在进入战斗阶段跳动一下,让流程充满心流体验 @@ -473,8 +473,8 @@ export class MissionComp extends CCComp { smc.vmdata.scores.wave_all_alive_count++; } - // 【评分系统 - 战绩分】判断是否通过最后一关(第30回合) - if (this.currentWave === 30) { + // 【评分系统 - 战绩分】判断是否通过最后一关(第15回合) + if (this.currentWave === 15) { smc.vmdata.scores.passed_wave_20 = true; } } @@ -853,15 +853,16 @@ export class MissionComp extends CCComp { }); this.handleHeroWipe(heroCount); - // 怪物全灭检测:如果战斗阶段场上没有任何活着的怪物,直接结束战斗进入下一波的准备阶段 - if (monsterCount === 0 && smc.mission.play && !smc.mission.pause && this.currentPhase === MissionPhase.Battle) { + // 怪物全灭检测:如果战斗阶段场上没有任何活着的怪物,且待刷新的怪物队列也为空,直接结束战斗进入下一波的准备阶段 + const pendingCount = smc.vmdata.mission_data.pending_mon_num || 0; + if (monsterCount === 0 && pendingCount === 0 && smc.mission.play && !smc.mission.pause && this.currentPhase === MissionPhase.Battle) { let heroesAliveRatio = heroCount / 6.0; // 假设最大 6 个站位,或者直接基于存活数算比例 // 如果能获取当前已部署英雄数最好,这里简化处理,大于 4 个就算高存活 heroesAliveRatio = Math.min(1.0, heroCount / 4.0); spawningEngine.updateAdaptive(heroesAliveRatio, this.clearTime); - if (this.currentWave >= 30) { - // 30 波通关 + if (this.currentWave >= 15) { + // 15 波通关 this.open_Victory(null, false); } else { oops.message.dispatchEvent("TimeUpAdvanceWave"); diff --git a/assets/script/game/map/MissionMonComp.ts b/assets/script/game/map/MissionMonComp.ts index e0258bbf..0bb5e043 100644 --- a/assets/script/game/map/MissionMonComp.ts +++ b/assets/script/game/map/MissionMonComp.ts @@ -115,6 +115,8 @@ export class MissionMonCompComp extends CCComp { * 3. 逐步从 pendingMonsters 队列中生成怪物(受 stop_spawn_mon 限制)。 */ protected update(dt: number): void { + smc.vmdata.mission_data.pending_mon_num = this.pendingMonsters.length; + if(!smc.mission.play) return if(smc.mission.pause) return if(smc.mission.stop_mon_action) return; @@ -135,6 +137,7 @@ export class MissionMonCompComp extends CCComp { if (this.pendingMonsters.length === 0) break; const monData = this.pendingMonsters.shift()!; const lane = this.pickBalancedLane(); + console.log(`[MissionMonComp] 准备生成怪物 UUID=${monData.uuid}, 剩余数量=${this.pendingMonsters.length}`); this.addMonsterAt(lane, this.laneIndices[lane], monData); this.laneIndices[lane]++; this.waveSpawnedCount++; @@ -184,9 +187,14 @@ export class MissionMonCompComp extends CCComp { // 预生成第一波数据以获取数量和 Boss 信息 const monsters = spawningEngine.generateWave(this.currentWave); this.pendingMonsters = monsters; + smc.vmdata.mission_data.pending_mon_num = this.pendingMonsters.length; this.waveTargetCount = monsters.length; let hasBoss = monsters.some(m => m.isBoss); + console.log(`[MissionMonComp] 波次 ${this.currentWave} 生成怪物总数: ${this.waveTargetCount}`); + const uuids = monsters.map(m => m.uuid); + console.log(`[MissionMonComp] 波次 ${this.currentWave} 怪物 UUID 列表:`, uuids); + oops.message.dispatchEvent(GameEvent.NewWave, { wave: this.currentWave, total: this.waveTargetCount, @@ -258,9 +266,14 @@ export class MissionMonCompComp extends CCComp { // 预生成新一波数据以获取数量和 Boss 信息 const monsters = spawningEngine.generateWave(this.currentWave); this.pendingMonsters = monsters; + smc.vmdata.mission_data.pending_mon_num = this.pendingMonsters.length; this.waveTargetCount = monsters.length; let hasBoss = monsters.some(m => m.isBoss); + console.log(`[MissionMonComp] 波次 ${this.currentWave} 生成怪物总数: ${this.waveTargetCount}`); + const uuids = monsters.map(m => m.uuid); + console.log(`[MissionMonComp] 波次 ${this.currentWave} 怪物 UUID 列表:`, uuids); + oops.message.dispatchEvent(GameEvent.NewWave, { wave: this.currentWave, total: this.waveTargetCount, diff --git a/test_spawn.js b/test_spawn.js deleted file mode 100644 index e1dae989..00000000 --- a/test_spawn.js +++ /dev/null @@ -1,4 +0,0 @@ -import { spawningEngine } from "./assets/script/game/map/RogueConfig.js"; -console.log("Wave 1:", spawningEngine.generateWave(1).length); -console.log("Wave 2:", spawningEngine.generateWave(2).length); -console.log("Wave 3:", spawningEngine.generateWave(3).length); diff --git a/test_spawn.ts b/test_spawn.ts deleted file mode 100644 index 647d08c6..00000000 --- a/test_spawn.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { spawningEngine } from "./assets/script/game/map/RogueConfig"; -console.log("Wave 1:", spawningEngine.generateWave(1).length); -console.log("Wave 2:", spawningEngine.generateWave(2).length); -console.log("Wave 3:", spawningEngine.generateWave(3).length);