feat(术语传导): 专长凭证件玩家面文案换代+货架 heal/feat_ticket 词表补齐

- 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 入口

变异验证:件名回退/词表删键/文案回退/描述分支删除均使对应断言变红(记录见提交后验证)
This commit is contained in:
DKChan committed 2026-10-23 02:54:11 +08:00
1 parent a840b96bd6
commit 0abc13fa95
5 files changed
+39 -7

No files matched your search

+1 -1
View File
@@ -83,7 +83,7 @@ pool_shelf = [{
"base_price": 5
}, {
"kind_id": "feat_ticket",
"display_name": "奇物门票",
"display_name": "专长获取",
"base_price": 5
}, {
"kind_id": "heal",
@@ -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:
+7 -3
View File
@@ -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("购买")
+1 -1
View File
@@ -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:
+28
View File
@@ -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。