奇物批T5+T6a:专长门票入表(schema四字段provisional 20%/2/1/5+域校验+runner保底/限购/出现三计数+节点与商店双注入(替换末位占一席,同scope取数零漂移)+拿到即开三入口分支(节点本地重绘/店内临时停点payload.context)+断点扩列两键向后兼容+shop.tres门票行base5+SHELF_KINDS扩+校验豁免+A5/A6断言7条);T6a商店补回复heal行(默认原则:分类内成员都入该渠道池)+registry刷新边界写死(商店自身服务vs奇物授予重抽次数);终局池读数断言4→6键适配(冒烟782/0)

This commit is contained in:
DKChan committed 2026-10-05 20:03:20 +08:00
1 parent 6812ebbb73
commit 95b66f0d60
10 files changed
+148 -6

No files matched your search

+19 -1
View File
@@ -72,6 +72,13 @@ func resume_if_pending() -> bool:
# 三选一停点(非末关通关恰一次):Boss 胜利先经战斗总结结算面(settlement-summary v1.1——钥石
# 增量行在其上),确认后进三选一面(level-clear.md v2);续玩停点恢复同入口(零自动推进契约)
func on_presented(payload: Dictionary) -> void:
if String(payload.get("context", "")) == "feat_ticket":
# T5 店内门票兑付——临时停点开专长三选一面(零胜利总结面;确认后只关面回店)
_pending_curio = payload.duplicate(true)
_curio_context = "feat_ticket"
_open_modal.call(curio_overlay)
curio_overlay.open_pick(Narrator.node_curio_header(), _curio_card_texts(payload.get("candidates", []) as Array))
return
if int(payload.get("aux_cleared", 0)) > 0:
toast.show_toast("上关剩余 %d 件秘宝已随关卡结束清空" % int(payload.get("aux_cleared", 0)), "info") # 迭代 7 T4 清空反馈
_pending_curio = payload.duplicate(true)
@@ -122,7 +129,10 @@ func _curio_card_texts(candidates: Array, treasure_detail: Array = []) -> Array:
var rid := String((tok as Dictionary).get("feat_id", ""))
var cid := "%s|%s|%s" % [kind, tier, rid]
var text := ""
if kind == "relic":
if kind == "feat_ticket":
text = "奇物门票
选定即开一次奇物三选一(T5 门票——拿到即开不进持有集)"
elif kind == "relic":
text = Narrator.feat_card_text(db.feat_row(rid))
elif kind == "treasure_item":
var iid := String(treasure_detail[treasure_i]) if treasure_i < treasure_detail.size() else ""
@@ -183,6 +193,12 @@ func on_pick_confirmed(item_id: String) -> void:
var ok: bool = adventure.apply_node_curio(kind, tier, rid) if _curio_context == "reward_node" else adventure.pick_curio(kind, tier, rid)
if not ok:
push_error("[bonus_interact] 三选一兑付被拒——见输出日志")
return
# T5——节点渠道门票拿到即开:候选已被替换为专长面,本地读在途态重绘(零 emit——context 保持 reward_node,
# 后续兑付/确认仍走节点路径回图选路)
if _curio_context == "reward_node" and kind == "feat_ticket":
var st2: Dictionary = adventure.node_curio_pending_state()
curio_overlay.open_pick(Narrator.node_curio_header(), _curio_card_texts(st2.get("candidates", []) as Array))
func on_treasure_replace_presented(items: Array, incoming: Dictionary) -> void:
@@ -221,6 +237,8 @@ func on_continue() -> void:
_close_modal.call(curio_overlay)
curio_overlay.close_pick()
var adventure = _adventure_get.call()
if _curio_context == "feat_ticket":
return # T5 店内门票面——专长兑付完成后关面回店(无推进/无回图)
if _curio_context == "reward_node":
var runner = _runner_get.call()
if runner != null: