iter10 目检修复批: 掷定前置落籍(用户推荐案获批)——道具件具体道具随候选抽定(_last_draw_aux/reward_pick流序内挪)+卡片直显「魔法道具/道具名·效果摘要」(_aux_card_line+Narrator aux_line参)+断点快照随载aux_detail(续玩详情不丢)+node_bonus_candidates扩dict+候选一致要求降级(冒险结构/level-clear 措辞软化——用户裁决非验收义务)+fx_shot_probe演出抓帧探针入册+目检台账收口(7/9/10/11/14机测承载或实测PASS/8项用户终裁非本迭代不追)(冒烟628/0+run_all 15套+五探针+三闸零新增+熵增PASS)
This commit is contained in:
1 parent
1a46854337
commit
cc8807e66c
11 files changed
+255
-37
No files matched your search
@@ -92,8 +92,9 @@ static func bonus_pick_header(payload: Dictionary) -> String:
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
# 三选一选项卡文案(件名 + 效果读数;值 = 冒险表行值,组合根喂入)
|
||||
static func bonus_card_text(id: String, value: int) -> String:
|
||||
# 三选一选项卡文案(件名 + 效果读数;值 = 冒险表行值,组合根喂入;道具件掷定前置时
|
||||
# aux_line = 具体道具「名 · 效果摘要」行——追加批二,空 = 无预掷回退通用文案)
|
||||
static func bonus_card_text(id: String, value: int, aux_line: String = "") -> String:
|
||||
match id:
|
||||
"attack":
|
||||
return "攻击力提升\n攻击 +%d" % value
|
||||
@@ -104,6 +105,8 @@ static func bonus_card_text(id: String, value: int) -> String:
|
||||
"gp":
|
||||
return "金币袋\n金币 +%d" % value
|
||||
"aux_item":
|
||||
if aux_line != "":
|
||||
return "魔法道具\n%s" % aux_line
|
||||
return "魔法道具\n随机获得一件"
|
||||
"ap":
|
||||
return "行动点提升\n每战首轮 AP +%d" % value
|
||||
|
||||
@@ -397,10 +397,11 @@ func _on_runner_node(node: Dictionary, info: Dictionary) -> void:
|
||||
# 奖励节点三选一(迭代 10 追加批——与通关三选一共享同池同权重同上限;BonusPickOverlay 共用面,
|
||||
# 道具件满位替换子交互同构)。原「魔法道具投放渠道」三选一(迭代 7 过渡形态)随批退役。
|
||||
_bonus_context = "reward_node"
|
||||
var node_cands: Array = adventure.node_bonus_candidates()
|
||||
var node_draw: Dictionary = adventure.node_bonus_candidates()
|
||||
var node_cands: Array = node_draw.get("candidates", []) as Array
|
||||
_open_modal(bonus_overlay)
|
||||
bonus_overlay.open_pick(Narrator.node_bonus_header(), _bonus_card_texts(node_cands))
|
||||
adventure.present_node_bonus(node_cands)
|
||||
bonus_overlay.open_pick(Narrator.node_bonus_header(), _bonus_card_texts(node_cands, node_draw.get("aux_detail", []) as Array))
|
||||
adventure.present_node_bonus(node_cands, node_draw.get("aux_detail", []) as Array)
|
||||
log_view.append_bb(Narrator.reward_line())
|
||||
elif t == "rest":
|
||||
var healed: int = int(info.get("healed", 0))
|
||||
@@ -441,20 +442,52 @@ func _on_bonus_presented(payload: Dictionary) -> void:
|
||||
func _show_bonus_pick() -> void:
|
||||
var payload: Dictionary = _pending_bonus
|
||||
_open_modal(bonus_overlay)
|
||||
bonus_overlay.open_pick(Narrator.bonus_pick_header(payload), _bonus_card_texts(payload.get("candidates", []) as Array))
|
||||
bonus_overlay.open_pick(Narrator.bonus_pick_header(payload), _bonus_card_texts(payload.get("candidates", []) as Array, payload.get("aux_detail", []) as Array))
|
||||
_refresh_presentations()
|
||||
|
||||
var _last_replace_items: Array = [] # 替换子态续玩重建缓存(aux_replace_presented 载荷)
|
||||
var _last_replace_incoming := {} # 同上——incoming 记录
|
||||
|
||||
|
||||
func _bonus_card_texts(candidates: Array) -> Array:
|
||||
func _bonus_card_texts(candidates: Array, aux_detail: Array = []) -> Array:
|
||||
var out: Array = []
|
||||
var aux_i := 0
|
||||
for id in candidates:
|
||||
out.append({"id": String(id), "text": Narrator.bonus_card_text(String(id), int(db.adventure.bonus_value(String(id))))})
|
||||
var cid := String(id)
|
||||
var text := ""
|
||||
if cid == "aux_item":
|
||||
var iid := String(aux_detail[aux_i]) if aux_i < aux_detail.size() else ""
|
||||
aux_i += 1
|
||||
text = Narrator.bonus_card_text(cid, int(db.adventure.bonus_value(cid)), _aux_card_line(iid))
|
||||
else:
|
||||
text = Narrator.bonus_card_text(cid, int(db.adventure.bonus_value(cid)))
|
||||
out.append({"id": cid, "text": text})
|
||||
return out
|
||||
|
||||
|
||||
# 道具件卡片行(掷定前置——具体道具名 + 效果摘要;空 iid = 无预掷回退态显示通用文案)
|
||||
func _aux_card_line(iid: String) -> String:
|
||||
if iid == "":
|
||||
return ""
|
||||
var row: Dictionary = db.aux_item_row(iid)
|
||||
if row.is_empty():
|
||||
return ""
|
||||
var parts: Array[String] = []
|
||||
for k in (row.get("effect_kinds", []) as Array):
|
||||
if String(k) == "mine_reveal":
|
||||
parts.append("真视")
|
||||
elif String(k) == "reward_preview":
|
||||
parts.append("预读")
|
||||
elif String(k) == "ap_grant":
|
||||
parts.append("AP +%d" % int(row.get("magnitude", 0)))
|
||||
var tgt := String(row.get("target", "none"))
|
||||
if tgt == "area_3x3":
|
||||
parts.append("3×3")
|
||||
elif tgt == "board_wide":
|
||||
parts.append("全图")
|
||||
return "%s · %s" % [String(row.get("display_name", iid)), " ".join(parts)]
|
||||
|
||||
|
||||
func _on_bonus_pick_confirmed(item_id: String) -> void:
|
||||
if adventure == null:
|
||||
return
|
||||
|
||||
Reference in new issue
Block a user