diff --git a/assets/script/game/map/VictoryComp.ts b/assets/script/game/map/VictoryComp.ts index ae124894..c26d05b6 100644 --- a/assets/script/game/map/VictoryComp.ts +++ b/assets/script/game/map/VictoryComp.ts @@ -842,15 +842,26 @@ export class VictoryComp extends CCComp { /** * 确认按钮点击(代码绑定,btns/btn): - * - 小节胜利(section)→ 派发 NextSection 推进下一节(修复:之前直接 MissionEnd 导致关卡未推进) + * - 小节胜利(section)→ 推进存档到下一节并保存 → 派发 MissionEnd → 关闭结算弹窗 * - 末关通关(final) → 清理数据 → 派发 MissionEnd → 关闭结算弹窗 * - 失败(defeat) → 清理数据 → 派发 MissionEnd → 关闭结算弹窗 + * + * Why: 小节胜利点"退出"既要保存进度(避免下次重玩卡在原节), + * 又不能像"下一节"按钮那样直接开战(玩家已选退出,不再继续本局战斗)。 */ victory_end() { if (this.settleType === "section") { - // 小节胜利:与"下一节"按钮行为一致,避免胜利后点退出直接结束关卡 - oops.message.dispatchEvent(GameEvent.NextSection); - return; + // 小节胜利:手动推进 section 到下一节并保存存档,避免点退出后进度丢失。 + // 注:MissionComp 的 NextSection 会进入战斗流程,这里不走该事件以避免自动开战。 + const cur = (smc.data.stage_progress ?? { chapter: 1, stage: 1, section: 1 }) as { chapter: number; stage: number; section: number }; + // 当前节已胜利,写入下一节作为待挑战存档;若已是末节(section=10),则不做 section 推进 + if (cur.section < 10) { + smc.updateStageProgress({ + chapter: cur.chapter, + stage: cur.stage, + section: cur.section + 1, + }); + } } this.clear_data() oops.message.dispatchEvent(GameEvent.MissionEnd)