chore(map): 调整关卡波次上限为15波并完善怪物队列检测
1. 将显示的波次文字从30波改为15波 2. 修改通关判定条件为当前波次达到15波 3. 新增待刷新怪物数量的状态跟踪 4. 完善怪物全灭的判定逻辑,加入待刷新队列检测 5. 移除了测试用的ts和js脚本文件 6. 添加了怪物生成相关的调试日志
This commit is contained in:
@@ -398,7 +398,7 @@ export class MissionComp extends CCComp {
|
|||||||
const label = phaseNode.getComponent(Label);
|
const label = phaseNode.getComponent(Label);
|
||||||
if (label) {
|
if (label) {
|
||||||
const wave = Math.max(1, this.currentWave || (smc.vmdata && smc.vmdata.mission_data ? smc.vmdata.mission_data.level : 1) || 1);
|
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++;
|
smc.vmdata.scores.wave_all_alive_count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 【评分系统 - 战绩分】判断是否通过最后一关(第30回合)
|
// 【评分系统 - 战绩分】判断是否通过最后一关(第15回合)
|
||||||
if (this.currentWave === 30) {
|
if (this.currentWave === 15) {
|
||||||
smc.vmdata.scores.passed_wave_20 = true;
|
smc.vmdata.scores.passed_wave_20 = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -853,15 +853,16 @@ export class MissionComp extends CCComp {
|
|||||||
});
|
});
|
||||||
this.handleHeroWipe(heroCount);
|
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 个站位,或者直接基于存活数算比例
|
let heroesAliveRatio = heroCount / 6.0; // 假设最大 6 个站位,或者直接基于存活数算比例
|
||||||
// 如果能获取当前已部署英雄数最好,这里简化处理,大于 4 个就算高存活
|
// 如果能获取当前已部署英雄数最好,这里简化处理,大于 4 个就算高存活
|
||||||
heroesAliveRatio = Math.min(1.0, heroCount / 4.0);
|
heroesAliveRatio = Math.min(1.0, heroCount / 4.0);
|
||||||
spawningEngine.updateAdaptive(heroesAliveRatio, this.clearTime);
|
spawningEngine.updateAdaptive(heroesAliveRatio, this.clearTime);
|
||||||
|
|
||||||
if (this.currentWave >= 30) {
|
if (this.currentWave >= 15) {
|
||||||
// 30 波通关
|
// 15 波通关
|
||||||
this.open_Victory(null, false);
|
this.open_Victory(null, false);
|
||||||
} else {
|
} else {
|
||||||
oops.message.dispatchEvent("TimeUpAdvanceWave");
|
oops.message.dispatchEvent("TimeUpAdvanceWave");
|
||||||
|
|||||||
@@ -115,6 +115,8 @@ export class MissionMonCompComp extends CCComp {
|
|||||||
* 3. 逐步从 pendingMonsters 队列中生成怪物(受 stop_spawn_mon 限制)。
|
* 3. 逐步从 pendingMonsters 队列中生成怪物(受 stop_spawn_mon 限制)。
|
||||||
*/
|
*/
|
||||||
protected update(dt: number): void {
|
protected update(dt: number): void {
|
||||||
|
smc.vmdata.mission_data.pending_mon_num = this.pendingMonsters.length;
|
||||||
|
|
||||||
if(!smc.mission.play) return
|
if(!smc.mission.play) return
|
||||||
if(smc.mission.pause) return
|
if(smc.mission.pause) return
|
||||||
if(smc.mission.stop_mon_action) return;
|
if(smc.mission.stop_mon_action) return;
|
||||||
@@ -135,6 +137,7 @@ export class MissionMonCompComp extends CCComp {
|
|||||||
if (this.pendingMonsters.length === 0) break;
|
if (this.pendingMonsters.length === 0) break;
|
||||||
const monData = this.pendingMonsters.shift()!;
|
const monData = this.pendingMonsters.shift()!;
|
||||||
const lane = this.pickBalancedLane();
|
const lane = this.pickBalancedLane();
|
||||||
|
console.log(`[MissionMonComp] 准备生成怪物 UUID=${monData.uuid}, 剩余数量=${this.pendingMonsters.length}`);
|
||||||
this.addMonsterAt(lane, this.laneIndices[lane], monData);
|
this.addMonsterAt(lane, this.laneIndices[lane], monData);
|
||||||
this.laneIndices[lane]++;
|
this.laneIndices[lane]++;
|
||||||
this.waveSpawnedCount++;
|
this.waveSpawnedCount++;
|
||||||
@@ -184,9 +187,14 @@ export class MissionMonCompComp extends CCComp {
|
|||||||
// 预生成第一波数据以获取数量和 Boss 信息
|
// 预生成第一波数据以获取数量和 Boss 信息
|
||||||
const monsters = spawningEngine.generateWave(this.currentWave);
|
const monsters = spawningEngine.generateWave(this.currentWave);
|
||||||
this.pendingMonsters = monsters;
|
this.pendingMonsters = monsters;
|
||||||
|
smc.vmdata.mission_data.pending_mon_num = this.pendingMonsters.length;
|
||||||
this.waveTargetCount = monsters.length;
|
this.waveTargetCount = monsters.length;
|
||||||
let hasBoss = monsters.some(m => m.isBoss);
|
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, {
|
oops.message.dispatchEvent(GameEvent.NewWave, {
|
||||||
wave: this.currentWave,
|
wave: this.currentWave,
|
||||||
total: this.waveTargetCount,
|
total: this.waveTargetCount,
|
||||||
@@ -258,9 +266,14 @@ export class MissionMonCompComp extends CCComp {
|
|||||||
// 预生成新一波数据以获取数量和 Boss 信息
|
// 预生成新一波数据以获取数量和 Boss 信息
|
||||||
const monsters = spawningEngine.generateWave(this.currentWave);
|
const monsters = spawningEngine.generateWave(this.currentWave);
|
||||||
this.pendingMonsters = monsters;
|
this.pendingMonsters = monsters;
|
||||||
|
smc.vmdata.mission_data.pending_mon_num = this.pendingMonsters.length;
|
||||||
this.waveTargetCount = monsters.length;
|
this.waveTargetCount = monsters.length;
|
||||||
let hasBoss = monsters.some(m => m.isBoss);
|
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, {
|
oops.message.dispatchEvent(GameEvent.NewWave, {
|
||||||
wave: this.currentWave,
|
wave: this.currentWave,
|
||||||
total: this.waveTargetCount,
|
total: this.waveTargetCount,
|
||||||
|
|||||||
@@ -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);
|
|
||||||
@@ -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);
|
|
||||||
Reference in New Issue
Block a user