iter8-T5 卡⑥ 战斗胜利总结结算接线:_on_choices_presented 战斗节点停点判据(battle 型+current_battle 已收场+非空候选三条件天然分流入口/兑付/商店停点)挂 BattleEndOverlay 胜利形态(金蜡封+GP 增量〔wallet_changed gain 载荷取数〕+总量 runner.gp+判定行+下一节点+明细回看既有按钮)——_on_battle_end_continue 挂起分派(_settlement_stop_pending→暂存候选回放进选路页,choices_presented 链保持在后);Boss 胜/失败走 level_finished 另路零变化——探针:结算框已拍板面断言(GP 行=钱包实态逐字/判定行/下一节点进选路)入 ui_click_probe 主循环;四探针段首清场补丁(残留断点触发互斥确认早退=本轮 input 挂死根因之二)——闸:冒烟 593/0+三探针全绿(click 问题=0)
This commit is contained in:
1 parent
d599743433
commit
3f46edbfa3
5 files changed
+57
No files matched your search
@@ -42,6 +42,9 @@ var _seed_edit: LineEdit
|
||||
var _lvbtn: Button # 开始冒险按钮句柄(迭代 8 卡③——有断点时互斥二次确认文案换面)
|
||||
var _resume_btn: Button # 继续上局按钮句柄(迭代 8 卡②——有断点才亮)
|
||||
var _lv_start_armed := false # 新冒险二次确认态(首击置位、二击提交、3s 超时回落——仿放弃确认)
|
||||
var _settlement_stop_pending := false # 卡⑥ 战斗胜利总结结算框挂起态(确认「下一节点」后进选路页)
|
||||
var _pending_candidates: Array = [] # 结算框挂起期的选路候选暂存(choices_presented 载荷)
|
||||
var _last_gain_amount := 0 # 最近一笔钱包入账(卡⑥ GP 增量取数面——wallet_changed gain 载荷)
|
||||
var _start_overlay: Control
|
||||
var _end_overlay: BattleEndOverlay
|
||||
var _inter_overlay: Control
|
||||
@@ -432,6 +435,14 @@ func _on_battle_end_continue() -> void:
|
||||
# 终局出口:返回开始界面(冒险摘要留档试玩日志;钥石已在收束时入存档——存档序列化批)
|
||||
_close_modal(_end_overlay)
|
||||
_end_overlay.close()
|
||||
# 卡⑥ 挂起分派:战斗胜利总结结算框的「下一节点」≠ 终局——进选路页(暂存候选恢复呈现)
|
||||
if _settlement_stop_pending:
|
||||
_settlement_stop_pending = false
|
||||
_enter_level_screen()
|
||||
level_screen.open_choices(_pending_candidates, runner)
|
||||
_pending_candidates = []
|
||||
_refresh_presentations()
|
||||
return
|
||||
_debug.reset()
|
||||
if runner != null:
|
||||
runner.restore_hero_base()
|
||||
@@ -687,6 +698,20 @@ func _on_choices_presented(candidates: Array) -> void:
|
||||
if runner == null:
|
||||
return
|
||||
log_view.append_bb(Narrator.route_line(candidates, runner))
|
||||
# 卡⑥ 战斗胜利总结结算(battle.md OQ14 拍板面接线——欠账清偿):战斗胜利停点先弹 BattleEndOverlay
|
||||
# 胜利形态(金蜡封+GP 增量+总量+判定行+「下一节点」+明细回看),确认后进选路页。判据 = 战斗节点
|
||||
# 的选路停点且战斗已收场(battle 收尾分支 _settlement 置 null 先于本信号;入口/兑付/商店停点
|
||||
# 的当前节点非 battle 型——三态天然分流)。Boss 胜/失败走 level_finished 另路不经此处。
|
||||
if _adventure_mode and runner.current_battle() == null \
|
||||
and String(runner.current_node().get("type", "")) == "battle" and not candidates.is_empty():
|
||||
_settlement_stop_pending = true
|
||||
_pending_candidates = candidates.duplicate()
|
||||
_end_overlay.open_victory(Narrator.battle_end_text("victory", false), "下一节点",
|
||||
board_view.get_global_rect(),
|
||||
"战利品 GP +%d · 合计 %d" % [_last_gain_amount, int(runner.gp)])
|
||||
_open_modal(_end_overlay)
|
||||
_refresh_presentations()
|
||||
return
|
||||
_enter_level_screen()
|
||||
level_screen.open_choices(candidates, runner)
|
||||
_refresh_presentations()
|
||||
@@ -953,9 +978,12 @@ func _on_wallet_changed(event: String, gp: int, extra: Dictionary) -> void:
|
||||
match String(event): # GP 影子账(迭代 6 T7——收束清零前取值,纯呈现零核心触碰=C1 呈现层方案)
|
||||
"gain", "buy":
|
||||
_adventure_gp_view = gp
|
||||
if String(event) == "gain":
|
||||
_last_gain_amount = int(extra.get("amount", 0)) # 卡⑥ GP 增量取数(每战恰一笔 gain)
|
||||
"clear":
|
||||
_adventure_gp_final = _adventure_gp_view
|
||||
_adventure_gp_view = 0
|
||||
_last_gain_amount = 0
|
||||
if shop_overlay.visible and runner != null:
|
||||
shop_overlay.refresh_state(runner.shop_products(), int(runner.gp))
|
||||
_refresh_presentations()
|
||||
|
||||
@@ -26,6 +26,7 @@ var _tested_end_review := false # 迭代 6 T7——终局面板回看入口(
|
||||
var _tested_refresh_chain := false
|
||||
var _tested_tooltip := false
|
||||
var _inter_confirms := 0 # 大奖励屏确认计数(冒险推进停点——首见确认推进 L2,再见 = L2 通关收口)
|
||||
var _settlement_confirms := 0 # 卡⑥ 胜利结算框确认计数(观测面——每场普通战斗胜利恰一)
|
||||
var _route_clicks := 0 # 选路覆盖层点击计数(岔路使用率观测面)
|
||||
|
||||
|
||||
@@ -142,6 +143,9 @@ func _ready() -> void:
|
||||
if legacy_motion != null:
|
||||
_problems.append("调整板减动效旧入口未退役(设置面唯一入口失守——卡④ AC③)")
|
||||
# 换回全新零档(营地购买态不泄入后续冒险段——确定性;档案残留下次段首清理兜底)
|
||||
for p0 in ["user://smoke_click_probe_reset.json", "user://smoke_click_probe_reset.json.tmp"]:
|
||||
if FileAccess.file_exists(p0):
|
||||
DirAccess.remove_absolute(p0) # 段首清场——上次运行的残留断点会触发互斥确认早退
|
||||
var iso_reset = load("res://core/save_manager.gd").new("user://smoke_click_probe_reset.json")
|
||||
iso_reset.load_from_disk()
|
||||
iso_reset.mark_first_adventure_done() # 对齐基线(真实档已有游玩史)——非首次脚本模式=逐关抽签模板
|
||||
@@ -217,6 +221,22 @@ func _ready() -> void:
|
||||
break
|
||||
_flags_placed.clear()
|
||||
continue
|
||||
if main._end_overlay.is_open() and main._settlement_stop_pending:
|
||||
# 卡⑥ 战斗胜利总结结算框(真实信号路径——每场普通胜利到达):断言已拍板面后点「下一节点」
|
||||
if not main._input_locked():
|
||||
_problems.append("胜利结算框打开时输入未锁定")
|
||||
var gp_line: String = main._end_overlay._gp_line.text
|
||||
if not gp_line.contains("GP +%d" % main._last_gain_amount) or not gp_line.contains("合计 %d" % int(main.runner.gp)):
|
||||
_problems.append("胜利结算框 GP 增量/总量与钱包实态不符(%s|实态 +%d/%d)" % [gp_line, main._last_gain_amount, int(main.runner.gp)])
|
||||
if main._end_overlay.verdict_text() == "":
|
||||
_problems.append("胜利结算框判定行缺失")
|
||||
_settlement_confirms += 1
|
||||
main._end_overlay._btn.pressed.emit() # 「下一节点」真实信号路径
|
||||
await get_tree().process_frame
|
||||
await get_tree().process_frame
|
||||
if main._settlement_stop_pending or not main.level_screen.visible:
|
||||
_problems.append("胜利结算框「下一节点」未进选路页(卡⑥ AC②)")
|
||||
continue
|
||||
if main._end_overlay.is_open():
|
||||
# 冒险终局(失败/放弃/打穿)——单关直入口退役后无二段入口,见终局即收口(模态断言照旧)
|
||||
if not main._input_locked():
|
||||
|
||||
@@ -27,6 +27,9 @@ func _ready() -> void:
|
||||
await get_tree().process_frame
|
||||
# 存档隔离(迭代 8 卡①②——断点写盘面随冒险挂 main.save_manager;探针禁碰真实档 user://save.json,
|
||||
# 同 ui_click_probe 隔离纪律。首次冒险布尔位置位=对齐真实档游玩史口径,模板抽签路径不变)
|
||||
for p0 in ["user://smoke_input_probe_save.json", "user://smoke_input_probe_save.json.tmp"]:
|
||||
if FileAccess.file_exists(p0):
|
||||
DirAccess.remove_absolute(p0) # 段首清场——上次运行的残留断点会触发互斥确认早退
|
||||
var iso = load("res://core/save_manager.gd").new("user://smoke_input_probe_save.json")
|
||||
iso.load_from_disk()
|
||||
iso.mark_first_adventure_done()
|
||||
|
||||
@@ -11,6 +11,9 @@ func _ready() -> void:
|
||||
add_child(main)
|
||||
await get_tree().process_frame
|
||||
# 存档隔离(迭代 8 卡①②——停点断点写盘随 main.save_manager;探针禁碰真实档,同族探针隔离纪律)
|
||||
for p0 in ["user://smoke_layout_probe_save.json", "user://smoke_layout_probe_save.json.tmp"]:
|
||||
if FileAccess.file_exists(p0):
|
||||
DirAccess.remove_absolute(p0) # 段首清场——上次运行的残留断点会触发互斥确认早退
|
||||
var iso = load("res://core/save_manager.gd").new("user://smoke_layout_probe_save.json")
|
||||
iso.load_from_disk()
|
||||
iso.mark_first_adventure_done()
|
||||
|
||||
@@ -60,6 +60,9 @@ func _ready() -> void:
|
||||
# ⑧ 单次加成生效回归断言:应用加成 + 启动单场战斗 → 呈现快照 hero 必须是"基线 × 单次加成"
|
||||
# (攻击 ×2 / 生命 +50%)——旧缺陷(残留值被当基线再乘)在 encounter 参数链上同样被抓获
|
||||
# 存档隔离(迭代 8 卡①——停点断点写盘随 main.save_manager;探针禁碰真实档,同族探针隔离纪律)
|
||||
for p0 in ["user://smoke_tune_probe_save.json", "user://smoke_tune_probe_save.json.tmp"]:
|
||||
if FileAccess.file_exists(p0):
|
||||
DirAccess.remove_absolute(p0) # 段首清场——上次运行的残留断点会触发互斥确认早退
|
||||
var iso_tune = load("res://core/save_manager.gd").new("user://smoke_tune_probe_save.json")
|
||||
iso_tune.load_from_disk()
|
||||
iso_tune.mark_first_adventure_done()
|
||||
|
||||
Reference in new issue
Block a user