From 0abc13fa953d839cee60d7bf62d4f5a1e00b24fe Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Fri, 23 Oct 2026 02:54:11 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=9C=AF=E8=AF=AD=E4=BC=A0=E5=AF=BC):=20?= =?UTF-8?q?=E4=B8=93=E9=95=BF=E5=87=AD=E8=AF=81=E4=BB=B6=E7=8E=A9=E5=AE=B6?= =?UTF-8?q?=E9=9D=A2=E6=96=87=E6=A1=88=E6=8D=A2=E4=BB=A3=EF=BC=8B=E8=B4=A7?= =?UTF-8?q?=E6=9E=B6=20heal/feat=5Fticket=20=E8=AF=8D=E8=A1=A8=E8=A1=A5?= =?UTF-8?q?=E9=BD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - shop.tres feat_ticket 件名「奇物门票」→「专长获取」(分类术语=专长凭证、物品名=专长获取) - curio_interact_controller 三选一卡文案改为「专长获取/选中或买下后立刻开一次专长三选一」,去掉内部任务号 T5 与「持有集」措辞 - shop_overlay_view:KIND_LABELS 补 heal=回复、feat_ticket=专长凭证;feat_ticket 件描述走「开一次专长三选一」,不再落到「feat_ticket +0」 - ui_kit add_footer:get_child_index(Godot 3 遗留 API)改 foot_l.get_index()——货架卡购买钮落位真实路径的运行时错误 - ui_struct_probe:新增货架两卡(feat_ticket/heal)与三选一卡文案断言,经真实 open_shelf/_curio_card_texts 入口 变异验证:件名回退/词表删键/文案回退/描述分支删除均使对应断言变红(记录见提交后验证) --- game/data/tables/shop.tres | 2 +- .../presentation/curio_interact_controller.gd | 4 +-- game/presentation/views/shop_overlay_view.gd | 10 +++++-- game/presentation/views/ui_kit.gd | 2 +- game/smoke/ui_struct_probe.gd | 28 +++++++++++++++++++ 5 files changed, 39 insertions(+), 7 deletions(-) diff --git a/game/data/tables/shop.tres b/game/data/tables/shop.tres index f5af6c56..8d502b2f 100644 --- a/game/data/tables/shop.tres +++ b/game/data/tables/shop.tres @@ -83,7 +83,7 @@ pool_shelf = [{ "base_price": 5 }, { "kind_id": "feat_ticket", -"display_name": "奇物门票", +"display_name": "专长获取", "base_price": 5 }, { "kind_id": "heal", diff --git a/game/presentation/curio_interact_controller.gd b/game/presentation/curio_interact_controller.gd index 25710a56..5fa0e55a 100644 --- a/game/presentation/curio_interact_controller.gd +++ b/game/presentation/curio_interact_controller.gd @@ -162,8 +162,8 @@ func _curio_card_texts(candidates: Array) -> Array: var cid := "%s|%s|%s" % [kind, tier, rid] var text := "" if kind == "feat_ticket": - text = "奇物门票 -选定即开一次奇物三选一(T5 门票——拿到即开不进持有集)" + text = "专长获取 +选中或买下后立刻开一次专长三选一" elif kind == "relic": text = Narrator.feat_card_text(db.feat_row(rid)) else: diff --git a/game/presentation/views/shop_overlay_view.gd b/game/presentation/views/shop_overlay_view.gd index 234d858f..3b905b40 100644 --- a/game/presentation/views/shop_overlay_view.gd +++ b/game/presentation/views/shop_overlay_view.gd @@ -8,7 +8,7 @@ signal buy_requested(product_id: String) # legacy=product_id / pool=kind_id( signal leave_pressed const ATTR_LABELS := {"atk": "攻击", "max_hp": "生命上限", "armor_class": "护甲"} # 档位文案轴(数据契约 attr 词表) -const KIND_LABELS := {"attack": "攻击", "max_hp": "生命上限", "armor": "护甲", "ap": "行动点"} # 货架件值文案轴(共享池 kind 词表——迭代 11 第②批) +const KIND_LABELS := {"attack": "攻击", "max_hp": "生命上限", "armor": "护甲", "ap": "行动点", "heal": "回复", "feat_ticket": "专长凭证"} # 货架件值文案轴(共享池 kind 词表——迭代 11 第②批) var _gp_label: Label var _refresh_btn: Button # M6 呈现位——MC-1 起由 set_refresh_display 投喂启用 @@ -204,8 +204,12 @@ func _build_shelf_card(holder: Control, c: Dictionary) -> Dictionary: icon_key = UiKit.TEX_ICON_SHIELD elif kl.contains("ap") or kl.contains("action") or kl.contains("pouch"): icon_key = UiKit.TEX_ICON_POUCH - var card := UiKit.bcard(String(c.get("display_name", kind)), - "%s %+d(本冒险)" % [String(KIND_LABELS.get(kind, kind)), int(c.get("value", 0))], + var body := "" + if kind == "feat_ticket": + body = "开一次专长三选一" + else: + body = "%s %+d(本冒险)" % [String(KIND_LABELS.get(kind, kind)), int(c.get("value", 0))] + var card := UiKit.bcard(String(c.get("display_name", kind)), body, UiKit.tg_band(kl), icon_key, # 类型色带单点(N4c/Q4 甲——货架与三选一同源判定,原固定默认带) "%d ◈" % int(c.get("price", 0)), String(KIND_LABELS.get(kind, kind))) var btn := UiKit.button("购买") diff --git a/game/presentation/views/ui_kit.gd b/game/presentation/views/ui_kit.gd index 4e483058..eb2441dd 100644 --- a/game/presentation/views/ui_kit.gd +++ b/game/presentation/views/ui_kit.gd @@ -806,7 +806,7 @@ class BCard: func add_footer(c: Control) -> void: body.add_child(c) - body.move_child(c, body.get_child_index(foot_l)) + body.move_child(c, foot_l.get_index()) static func bcard(title: String, desc: String, band: Color, icon_path: String, price := "", footnote := "") -> BCard: diff --git a/game/smoke/ui_struct_probe.gd b/game/smoke/ui_struct_probe.gd index 4319c84a..c064e67b 100644 --- a/game/smoke/ui_struct_probe.gd +++ b/game/smoke/ui_struct_probe.gd @@ -189,6 +189,34 @@ func _ready() -> void: _settle() await _audit("shop", [main.shop_overlay]) + # ---- 术语传导:货架卡与三选一卡片的玩家面文案(物品名=专长获取、分类=专长凭证) + main.shop_overlay.open_shelf([ + {"kind_id": "feat_ticket", "display_name": "专长获取", "value": 0, "price": 5}, + {"kind_id": "heal", "display_name": "应急回复", "value": 6, "price": 5}, + ], 20) + _settle() + var ticket_row: Dictionary = main.shop_overlay._shelf_rows[0] + if ticket_row.card.name_l.text != "专长获取": + problems.append("[shop_term] 专长凭证件名未用物品名「专长获取」(现=%s)" % ticket_row.card.name_l.text) + if ticket_row.card.desc_l.text != "开一次专长三选一": + problems.append("[shop_term] 专长凭证件描述未用规范流程句(现=%s)" % ticket_row.card.desc_l.text) + if ticket_row.card.foot_l.text != "专长凭证": + problems.append("[shop_term] 专长凭证件分类标注未用「专长凭证」(现=%s)" % ticket_row.card.foot_l.text) + var heal_row: Dictionary = main.shop_overlay._shelf_rows[1] + if heal_row.card.desc_l.text != "回复 +6(本冒险)": + problems.append("[shop_term] 回复件描述漏了 heal 词表(现=%s)" % heal_row.card.desc_l.text) + if heal_row.card.foot_l.text != "回复": + problems.append("[shop_term] 回复件分类标注落到英文 kind(现=%s)" % heal_row.card.foot_l.text) + var ticket_texts: Array = main._bonus._curio_card_texts([{"kind": "feat_ticket", "tier": "excellent"}]) + var ticket_text := String((ticket_texts[0] as Dictionary).get("text", "")) + var ticket_lines := ticket_text.replace("\r\n", "\n").split("\n") + if ticket_lines.size() < 2 or ticket_lines[0] != "专长获取" or not ticket_lines[1].contains("专长三选一"): + problems.append("[curio_term] 专长凭证三选一卡未用物品名/规范流程句(现=%s)" % ticket_text) + if ticket_text.contains("门票") or ticket_text.contains("T5") or ticket_text.contains("持有集") or ticket_text.contains("奇物三选一"): + problems.append("[curio_term] 专长凭证三选一卡残留退役词/内部任务号(现=%s)" % ticket_text) + main.shop_overlay.visible = false + _settle() + # ---- ⑦resume 专项:续玩停点恢复(main.gd:717 报错回归闸)---- # 三选一停点续玩分支在 level_started 之前同步 curio_choice_presented.emit(adventure_runner # resume 提前 return)——GP 总结 lambda 求值时 runner 尚未赋值,修复前 717 炸 null。