From 413124b0b8ffb7081013af2497f69bd33166d388 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Thu, 29 Oct 2026 22:45:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D(=E8=BF=AD=E4=BB=A3=2041=20?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E5=80=BA=E6=89=B9=C2=B7=E9=97=B8=E9=9D=A2?= =?UTF-8?q?=E7=BB=AD=E4=BF=AE):=2003/04/05=20=E4=B8=89=E9=97=B8=E5=BD=92?= =?UTF-8?q?=E7=BB=BF=E2=80=94=E2=80=94=E2=91=A0board=5Fcell=5Funit=20?= =?UTF-8?q?=E6=95=B0=E5=AD=97=E8=89=B2=E7=89=8C=E5=AE=88=E5=8D=AB=E6=81=A2?= =?UTF-8?q?=E5=A4=8D=EF=BC=88iter41=20=E5=8D=A12=20=E5=88=86=E5=B1=82?= =?UTF-8?q?=E6=8B=86=E5=88=86=E4=B8=A2=20if=20plate:=20=E8=87=B4=20dungeon?= =?UTF-8?q?=20=E6=95=B0=E5=AD=97=E4=B8=80=E5=BE=8B=E5=9E=AB=E7=89=8C?= =?UTF-8?q?=EF=BC=8CL1=20=E6=A3=8B=E7=9B=98=20golden=20=E7=94=B1=202.74%?= =?UTF-8?q?=20=E5=9B=9E=200.00%=20=E9=80=90=E5=83=8F=E7=B4=A0=E5=A4=8D?= =?UTF-8?q?=E7=8E=B0=E5=9F=BA=E7=BA=BF=EF=BC=89=EF=BC=9B=E2=91=A1curio=5Fi?= =?UTF-8?q?nteract=5Fcontroller.open=5Fvictory=20=E7=AC=AC=204=20=E5=8F=82?= =?UTF-8?q?=E9=9A=8F=20opts=20=E6=94=B9=E5=9E=8B=EF=BC=88=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=E4=B8=B2=E2=86=92{"gp=5Fsummary":=E2=80=A6}=EF=BC=8C?= =?UTF-8?q?=E8=83=9C=E5=88=A9=E6=80=BB=E7=BB=93=E9=9D=A2=E7=BB=AD=E7=8E=A9?= =?UTF-8?q?=E6=81=A2=E5=A4=8D=E8=B7=AF=E5=BE=84=E8=BF=90=E8=A1=8C=E6=9C=9F?= =?UTF-8?q?=E6=96=AD=E9=93=BE=EF=BC=89=EF=BC=9B=E2=91=A2=E6=8E=A2=E9=92=88?= =?UTF-8?q?=E9=9A=8F=20iter41=20=E6=8B=86=E4=BB=B6=E6=94=B9=E5=9D=80?= =?UTF-8?q?=EF=BC=88ui=5Finput=5Fprobe=20=E6=A0=BC=E9=9D=A2=E6=88=90?= =?UTF-8?q?=E5=91=98=E5=85=A5=20st=20=E5=85=AD=E5=A4=84=E3=80=81ui=5Fstruc?= =?UTF-8?q?t=5Fprobe=20level=5Fscreen.=5Frunner=E2=86=92.=5Fmap.=5Frunner?= =?UTF-8?q?=EF=BC=89=EF=BC=9B=E2=91=A3config=5Fdb=5Ftest=20=E5=95=86?= =?UTF-8?q?=E5=BA=97=E8=A1=8C=E6=97=8F=E6=94=B9=E7=9B=B4=E8=AF=BB=E8=A1=A8?= =?UTF-8?q?=E6=88=90=E5=91=98=EF=BC=88=5Fshop=5Frows=20=E8=AE=BF=E9=97=AE?= =?UTF-8?q?=E5=99=A8=E5=B7=B2=E9=80=80=E5=BD=B9=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/curio_interact_controller.gd | 2 +- game/presentation/views/board_cell_unit.gd | 3 ++- game/probe/ui_input_probe.gd | 22 +++++++++---------- game/probe/ui_struct_probe.gd | 6 ++--- game/tests/unit/data_config/config_db_test.gd | 6 ++--- 5 files changed, 20 insertions(+), 19 deletions(-) diff --git a/game/presentation/curio_interact_controller.gd b/game/presentation/curio_interact_controller.gd index df3f20fc..3b16d2dc 100644 --- a/game/presentation/curio_interact_controller.gd +++ b/game/presentation/curio_interact_controller.gd @@ -78,7 +78,7 @@ func on_presented(payload: Dictionary) -> void: return ctx.views.end_overlay.open_victory(Narrator.battle_end_text("victory", false), "继续", ctx.views.board_view.get_global_rect(), - "%s\n%s" % [String(ctx.flow.gp_summary.call()), Narrator.bonus_keystone_line(payload)]) + {"gp_summary": "%s\n%s" % [String(ctx.flow.gp_summary.call()), Narrator.bonus_keystone_line(payload)]}) ctx.flow.open_modal_after_playback.call(ctx.views.end_overlay) ctx.flow.refresh_presentations.call() diff --git a/game/presentation/views/board_cell_unit.gd b/game/presentation/views/board_cell_unit.gd index 38ceac79..f1c99076 100644 --- a/game/presentation/views/board_cell_unit.gd +++ b/game/presentation/views/board_cell_unit.gd @@ -198,7 +198,8 @@ func _draw_glyph_layer(rect: Rect2) -> void: draw_texture_rect(st.tex_mutation, rect, false) # ③ 数字/徽章(数字 ≥ 格高 50% 墨族对格底 ≥4.5:1;徽章右下角金,遮蔽态 = "?") if glyph != "": - _draw_digit_plate() + if plate: + _draw_digit_plate() if st.tex_glyph != null: draw_texture_rect(st.tex_glyph, rect, false) else: diff --git a/game/probe/ui_input_probe.gd b/game/probe/ui_input_probe.gd index ba6c4ac7..669bd081 100644 --- a/game/probe/ui_input_probe.gd +++ b/game/probe/ui_input_probe.gd @@ -231,8 +231,8 @@ func _ready() -> void: if bv.hover_probe() != seal_t: _problems.append("case① 悬停未到达(_hover=%s 应=%s)" % [bv.hover_probe(), seal_t]) var u1 = bv.cells_probe()[seal_t] - if not u1.hl_visible or u1.hl_color != UiKit.GOLD: - _problems.append("case① 悬停金框缺失(visible=%s color=%s)" % [str(u1.hl_visible), str(u1.hl_color)]) + if not u1.st.hl_visible or u1.st.hl_color != UiKit.GOLD: + _problems.append("case① 悬停金框缺失(visible=%s color=%s)" % [str(u1.st.hl_visible), str(u1.st.hl_color)]) if bv.mouse_default_cursor_shape != Input.CURSOR_CROSS: _problems.append("case① 挖掘光标未切十字(%d)" % bv.mouse_default_cursor_shape) # ---- case② 悬停禁入:hover_forbidden 信号 + 灰禁红框 ---- @@ -240,14 +240,14 @@ func _ready() -> void: await get_tree().process_frame if _forbids.is_empty() or _forbids[_forbids.size() - 1] != forbid_t: _problems.append("case② hover_forbidden 未达(%s)" % [str(_forbids)]) - if bv.cells_probe()[forbid_t].hl_color != UiKit.RED_FORBID: - _problems.append("case② 禁入红框缺失(color=%s)" % str(bv.cells_probe()[forbid_t].hl_color)) + if bv.cells_probe()[forbid_t].st.hl_color != UiKit.RED_FORBID: + _problems.append("case② 禁入红框缺失(color=%s)" % str(bv.cells_probe()[forbid_t].st.hl_color)) # ---- case③ 悬停已开格:路径预览点迹 + 移动光标 ---- _push_motion(_pos(bv, reveal_t)) await get_tree().process_frame var dots := 0 for c in bv.cells_probe(): - if bv.cells_probe()[c].dot_visible: + if bv.cells_probe()[c].st.dot_visible: dots += 1 if dots < 1: _problems.append("case③ 路径预览点迹未亮(dots=0)") @@ -266,8 +266,8 @@ func _ready() -> void: # 掩盖)——有盘断言纹理在槽、缺盘断言字形回退,两分支防双写踩踏复活 ---- var seal_unit = bv.cells_probe().get(seal_t) if bv._palette.seal_tex != null: - if seal_unit == null or seal_unit.tex_seal != bv._palette.seal_tex: - _problems.append("case④b 封印纹理槽未挂封印印记纹理(tex_seal=%s)" % ["无单元" if seal_unit == null else str(seal_unit.tex_seal)]) + if seal_unit == null or seal_unit.st.tex_seal != bv._palette.seal_tex: + _problems.append("case④b 封印纹理槽未挂封印印记纹理(tex_seal=%s)" % ["无单元" if seal_unit == null else str(seal_unit.st.tex_seal)]) elif seal_unit == null or seal_unit.glyph != "封": _problems.append("case④b 缺盘字形回退缺失(glyph=%s)" % ["无单元" if seal_unit == null else String(seal_unit.glyph)]) # ---- case⑤ 双击 chord:禁入格双左击(核心拒挖零副作用)→ chord_attempted ---- @@ -371,12 +371,12 @@ func _ready() -> void: if mark_t.x >= 0: bv.set_variant_mark_resolver(func(_c): return "flat_damage") bv.refresh() - if String(bv.cells_probe()[mark_t].mutation_mark) != "flat_damage": - _problems.append("case⑭ 变异角标未落位(mutation_mark=%s)" % str(bv.cells_probe()[mark_t].mutation_mark)) + if String(bv.cells_probe()[mark_t].st.mutation_mark) != "flat_damage": + _problems.append("case⑭ 变异角标未落位(mutation_mark=%s)" % str(bv.cells_probe()[mark_t].st.mutation_mark)) bv.set_variant_mark_resolver(Callable()) bv.refresh() - if String(bv.cells_probe()[mark_t].mutation_mark) != "": - _problems.append("case⑭ 角标未随 resolver 复位(mutation_mark=%s)" % str(bv.cells_probe()[mark_t].mutation_mark)) + if String(bv.cells_probe()[mark_t].st.mutation_mark) != "": + _problems.append("case⑭ 角标未随 resolver 复位(mutation_mark=%s)" % str(bv.cells_probe()[mark_t].st.mutation_mark)) else: _problems.append("case⑭ 无未开格可验(板面异常)") # ---- case⑮ 视野迷雾(三态呈态/半径圈/移动跟随/开关两态零扰动/提灯插值位; diff --git a/game/probe/ui_struct_probe.gd b/game/probe/ui_struct_probe.gd index 77c2f02c..cda2253a 100644 --- a/game/probe/ui_struct_probe.gd +++ b/game/probe/ui_struct_probe.gd @@ -281,11 +281,11 @@ func _pick_battle_node(main: Node) -> int: # 入口/兑付停点走 level_screen.open_choices 直传(不写 _pending_candidates)—— # 候选从视图态取:_cand_ids × runner.nodes() 的 type(编号解析=node_id_of 单一出口) var ls: Node = main.level_screen - if ls._runner == null: + if ls._map._runner == null: return -1 - for nd in ls._runner.nodes(): + for nd in ls._map._runner.nodes(): if String(nd.get("type", "")) in ["battle", "boss"]: - var nid: int = ls._runner.node_id_of(nd) + var nid: int = ls._map._runner.node_id_of(nd) if nid in ls._cand_ids: return nid return -1 diff --git a/game/tests/unit/data_config/config_db_test.gd b/game/tests/unit/data_config/config_db_test.gd index 75916573..68bcc7b6 100644 --- a/game/tests/unit/data_config/config_db_test.gd +++ b/game/tests/unit/data_config/config_db_test.gd @@ -137,16 +137,16 @@ func _test_shop_accessors(db) -> void: var got: Dictionary = db.run.shop.product_row(String(first.product_id)) Kit.check("shop_product_row 按 product_id 精确命中首行", got == first) Kit.check("shop_product_row 未知 id 返回空字典(容错通道)", db.run.shop.product_row("no_such_product_id__").is_empty()) - var tier_rows: Array = db._shop_rows("gp_drops") + var tier_rows: Array = db.run.shop.gp_drops if not tier_rows.is_empty(): var tier0: String = String(tier_rows[0].tier) Kit.check("shop_gp_drop_row 按 tier 命中", not db.run.shop.gp_drop_row(tier0).is_empty()) - var bonus_rows: Array = db._shop_rows("level_gp_bonus") + var bonus_rows: Array = db.run.shop.level_gp_bonus if not bonus_rows.is_empty(): var blv: int = int(bonus_rows[0].level_index) Kit.check("shop_level_gp_bonus 按关卡序号命中行值", db.run.shop.level_gp_bonus_at(blv) == int(bonus_rows[0].bonus)) Kit.check("shop_level_gp_bonus 未登记关卡返回 0(兜底通道)", db.run.shop.level_gp_bonus_at(-1) == 0) - var price_rows: Array = db._shop_rows("price_level_bonus") + var price_rows: Array = db.run.shop.price_level_bonus if not price_rows.is_empty(): var plv: int = int(price_rows[0].level_index) Kit.check("shop_price_level_bonus 按关卡序号命中行值", db.run.shop.price_level_bonus_at(plv) == int(price_rows[0].bonus))