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。