iter9-T11+T12: 卡⑪ GP 常驻核验收口(实态已符 level-map spec:徽章 M-2 已落+刷新=写路径回执后重查〔open_choices 回执点〕合法路径;shot_probe 补徽章可见+读数=runner.gp 断言实测过;06 条目四承载面全闭移除〔钥石三处/胜利结算/冒险终局/关卡画面常驻〕)+卡⑫ C 区本关强化列表接线(HudPresenter.refresh 单点投影 runner 统一加算区 bonus{atk,max_hp,armor_class}→三行文案〔攻击/生命上限/护甲 AC,行文=代拍板〕,空加算整节隐藏;零核心触碰——呈现只读投影);冒烟 596/0+shot_probe 问题=0

This commit is contained in:
DKChan committed 2026-09-30 07:08:11 +08:00
1 parent 053baeeef6
commit fb665f87dc
3 files changed
+44 -23

No files matched your search

-14
View File
@@ -388,20 +388,6 @@
**状态**:部分收口——魔法道具槽已随迭代 7 落地(C 区四槽两步交互+库存只读面);本关强化列表**编入 M-3 迭代 9 卡⑫**(2026-09-30 用户扩编,台账 288——set_level_bonuses→runner 加算区投影接线)
#### GP/钥石迁出战斗屏后的展示面接线(2026-09-26 登记)
**现状**:信息归属批(台账 165)将 GP(中循环资源)/钥石(大循环资源)自战斗屏 C 区退役(用户二轮拍板去向):**GP = 关卡画面常驻总量 + 战斗结算画面总量+增量;钥石 = 结算画面 + 营地**。原 C 区钱包行为唯一展示面已删——数据源完好(runner.gp / MetaProgression 账本),纯呈现接线。
**归属冲突已收口——2026-09-27 用户拍板**:战斗胜利出现战斗总结结算、展示获得的资源(目前 = GP);战斗失败出现冒险总结结算、确认后回存档首页。battle.md OQ14「战斗结算画面」口径为准,GP 总量+增量归**战斗胜利总结结算**;本条原归属行「结算画面批 GP 增量」系登记偏差已修正。
**接线缺口**:战斗胜利结算现行文案(battle_end_text「战斗胜利!敌人全灭。」)无 GP 呈现——增量+总量上胜利结算为本条剩余实装面;关卡画面常驻总量的呈现规格已建 [level-map](ux/level-map.md)(2026-09-27,顶栏 GP 常驻徽章 = 图标+数字直角数据框),实装归关卡画面批。
钥石呈现现行承载即拍板口径——大奖励屏(big_reward_text 钥石增量+累计 = Boss 层进账)、冒险总结结算(keystone_settle_text 入账明细 = 「结算画面」指认)、营地(存量);三处并存系「进账时刻 / 收束明细 / 存量可用」不同义,不构成重复展示(level-clear.md OQ3 已收口维持)。
**归属**:战斗屏胜利结算批(GP 增量+总量呈现接线——battle.md 域)/ 关卡画面 UX 批(GP 常驻总量)/ 钥石侧已全部承载(大奖励屏 + 冒险总结结算 + 营地,无剩余)
**状态**:部分收口——2026-09-27 用户拍板归属冲突收口 + 钥石三处承载确认;剩 = 关卡画面 GP 常驻(纯呈现,归关卡画面批)。**2026-09-29 迭代 6 T7 批注记**:冒险终局面板补「本局 GP 入账 · 合计 N」(adventure_finished 收束清零前呈现侧影子账取值,零核心触碰)——「战斗结算画面」双形态(单场战斗胜利总结〔M-1 迭代 2 T5 已接〕/冒险终局面板〔本批〕)均已承载 GP,本条剩余实装面只剩关卡画面常驻。**关卡画面 GP 常驻编入 M-3 迭代 9 卡⑪**(2026-09-30 用户扩编,台账 288——level-map spec 顶栏徽章接线)
#### 节点奖励屏 UX spec(随魔法道具内容重定批交付,2026-09-27 登记)
**现状**:battle.md 原幽灵引用——design/gdd/ux/node-reward.md,2026-09-20 链接审计批入欠账基线——经 2026-09-27 欠账处置拍板改挂本条名下:节点奖励屏不立独立 spec,待魔法道具内容重定批给出奖励内容后随批出生。
+15
View File
@@ -19,6 +19,21 @@ extends RefCounted
# HP/状态效果单投喂 B 区站桩(原 B/C 双投喂为重复展示——信息归属拍板单一展示面原则)
static func refresh(stage: BattleStageView, info: HeroInfoPanelView, ap_bar: ApBarView,
settlement, runner, level_active: bool, db, refresh_remaining: int) -> void:
# 本关强化列表(v3.5 迭代 9 卡⑫ 2026-09-30——runner 统一加算区投影:商店购买与关卡大奖励
# 共账本〔level_runner bonus{atk,max_hp,armor_class}〕;空加算=整节隐藏〔视图内空态纪律〕。
# 呈现只读投影零核心触碰;行文格式=代拍板白名单项)
if runner != null and level_active:
var b: Dictionary = runner.bonus
var lines: Array[String] = []
if int(b.get("atk", 0)) != 0:
lines.append("攻击 %+d" % int(b.get("atk", 0)))
if int(b.get("max_hp", 0)) != 0:
lines.append("生命上限 %+d" % int(b.get("max_hp", 0)))
if int(b.get("armor_class", 0)) != 0:
lines.append("护甲 AC %+d" % int(b.get("armor_class", 0)))
info.set_level_bonuses(lines)
else:
info.set_level_bonuses([])
if settlement == null:
_refresh_out_of_battle(stage, info, ap_bar, runner, level_active, db)
return
+29 -9
View File
@@ -51,15 +51,23 @@ func _ready() -> void:
if close_btn != null:
close_btn.pressed.emit()
await get_tree().process_frame
# ③ 关卡画面(开始冒险→停点出图——冒险开始即出图,停点前移批语义)
var lvbtn: Button = _find_button_by_prefix(main._start_overlay, "开始冒险")
if lvbtn == null:
_problems.append("开始冒险按钮缺失(开始层 lvbtn)")
else:
lvbtn.pressed.emit()
for i in 4:
await get_tree().process_frame
await _snap("level")
# ③ 关卡画面(开始冒险→停点出图——冒险开始即出图,停点前移批语义)
var lvbtn: Button = _find_button_by_prefix(main._start_overlay, "开始冒险")
if lvbtn == null:
_problems.append("开始冒险按钮缺失(开始层 lvbtn)")
else:
lvbtn.pressed.emit()
for i in 4:
await get_tree().process_frame
await _snap("level")
# GP 常驻徽章断言(迭代 9 卡⑪核验——读数=runner.gp 现值,刷新=写路径回执后重查〔open_choices〕)
var gp_label: Label = _find_label_by_text(main.level_screen, "◈ ")
if gp_label == null or not gp_label.is_visible_in_tree():
_problems.append("GP 徽章不可见(关卡画面顶栏)")
elif main.level_screen.get("_runner") != null:
var expect := "◈ %d" % int(main.level_screen.get("_runner").gp)
if gp_label.text != expect:
_problems.append("GP 徽章读数不符: %s != %s" % [gp_label.text, expect])
# ④ 战斗(节点一——真实选路提交路径 press_candidate,ui_click_probe :199 同款)
if main.level_screen != null and main.level_screen.visible:
main.level_screen.press_candidate(0)
@@ -128,6 +136,18 @@ func _find_label_rect(root: Node, text_fragment: String) -> Dictionary:
return {}
func _find_label_by_text(root: Node, text_fragment: String) -> Label:
if root == null:
return null
if root is Label and String(root.text).contains(text_fragment):
return root
for c in root.get_children():
var r := _find_label_by_text(c, text_fragment)
if r != null:
return r
return null
func _node_rect(n: Node) -> Dictionary:
if n == null or not (n is CanvasItem):
return {}