T1机制件基建(迭代12双层BD——relic_table+档位激活引擎+机制件带池接线):RelicTable schema新建(relic_id/rarity三档对齐令牌池/archetype七流派标签/hook挂点枚举23点位/effects键白名单零裸flat同族护栏+扫雷触发点铁律=有行流派各≥1扫雷端〔部分填充合法·七流派全量归T7出口〕);RelicsEngine纯函数引擎(集2档一/4档二/散件保底·成型=tier≥1·挂点投影表序稳定);relics.tres空表合法态(池98张零扰动硬断言);池接线=relic活行每件1张入稀有/罕见档(common/rare→rare·rarest→rarest·永不入普通档)+令牌身份键relic_id(同档多件可同屏)+兑付入持有集先校验后摘牌+_relics冒险级跨关携带+断点扩键relics持有集/余库relic_id随还原+摘要additive键relics(清账前快照——pool_stock同坑预防)+RUNSUM行relics字段;呈现=relic卡「流派件·流派名」+卡片id三段复合键;autoplay读数面;冒烟14新断言(空表零扰动/引擎四断言/接线含断点往返)→684/0+run_all 15套全绿
This commit is contained in:
1 parent
2352eab988
commit
c25e8bab3e
12 files changed
+413
-50
No files matched your search
@@ -123,10 +123,24 @@ static func bonus_card_text(id: String, tier: String, value: int, aux_line: Stri
|
||||
|
||||
# 三选一兑付反馈行(选中件效果 + 丢弃提示;tier 缺省普通档——旧载荷防御口径)
|
||||
static func bonus_result_text(result: Dictionary) -> String:
|
||||
var name := bonus_card_text(String(result.get("picked", "")), String(result.get("tier", "")), int(result.get("value", 0))).replace("\n", " · ")
|
||||
var name := ""
|
||||
if String(result.get("picked", "")) == "relic" and String(result.get("relic_id", "")) != "":
|
||||
name = relic_card_text({"relic_id": String(result.get("relic_id", "")), "display_name": String(result.get("relic_name", "")), "archetype": String(result.get("relic_archetype", ""))}).replace("\n", " · ")
|
||||
else:
|
||||
name = bonus_card_text(String(result.get("picked", "")), String(result.get("tier", "")), int(result.get("value", 0))).replace("\n", " · ")
|
||||
return "已选择:%s\n其余选项已丢弃(不可反悔)" % name
|
||||
|
||||
|
||||
# 流派件卡片文案(迭代 12 T1——「流派件 · 流派名」形制+件名;空行 = 防御通用文案)
|
||||
static func relic_card_text(row: Dictionary) -> String:
|
||||
if row.is_empty() or String(row.get("relic_id", "")) == "":
|
||||
return "流派件\n???"
|
||||
var arch_names := {"magic": "魔法", "pierce": "穿刺", "normal": "普攻", "dig": "开格",
|
||||
"flag": "标旗", "charge": "蓄力", "devour": "吞噬"}
|
||||
var arch := String(arch_names.get(String(row.get("archetype", "")), "流派"))
|
||||
return "流派件 · %s\n%s" % [arch, String(row.get("display_name", row.get("relic_id", "")))]
|
||||
|
||||
|
||||
# Boss 胜利战斗总结结算行(settlement-summary v1.1——钥石增量行;组合根拼 GP 行后追加)
|
||||
static func bonus_keystone_line(payload: Dictionary) -> String:
|
||||
return "钥石 +%d · 累计 %d" % [int(payload.get("keystone_gained", 0)), int(payload.get("keystone_total", 0))]
|
||||
|
||||
@@ -542,16 +542,19 @@ var _last_replace_incoming := {} # 同上——incoming 记录
|
||||
|
||||
|
||||
func _bonus_card_texts(candidates: Array, aux_detail: Array = []) -> Array:
|
||||
# TP0 令牌池——候选 = {"kind","tier"} 令牌字典;卡片 id = "kind|tier" 复合键(同 kind 大小两档
|
||||
# 可同屏,kind 单键不构成唯一身份),确认回程拆键(_on_bonus_pick_confirmed)
|
||||
# TP0 令牌池——候选 = {"kind","tier"} 令牌字典;卡片 id = "kind|tier|relic_id" 复合键(同 kind
|
||||
# 大小两档/同档多 relic 可同屏,kind 单键不构成唯一身份),确认回程拆键(_on_bonus_pick_confirmed)
|
||||
var out: Array = []
|
||||
var aux_i := 0
|
||||
for tok in candidates:
|
||||
var kind := String((tok as Dictionary).get("kind", ""))
|
||||
var tier := String((tok as Dictionary).get("tier", ""))
|
||||
var cid := "%s|%s" % [kind, tier]
|
||||
var rid := String((tok as Dictionary).get("relic_id", ""))
|
||||
var cid := "%s|%s|%s" % [kind, tier, rid]
|
||||
var text := ""
|
||||
if kind == "aux_item":
|
||||
if kind == "relic":
|
||||
text = Narrator.relic_card_text(db.relic_row(rid))
|
||||
elif kind == "aux_item":
|
||||
var iid := String(aux_detail[aux_i]) if aux_i < aux_detail.size() else ""
|
||||
aux_i += 1
|
||||
text = Narrator.bonus_card_text(kind, tier, int(db.adventure.bonus_value(kind, tier)), _aux_card_line(iid))
|
||||
@@ -600,11 +603,12 @@ func _on_bonus_refresh() -> void:
|
||||
func _on_bonus_pick_confirmed(item_id: String) -> void:
|
||||
if adventure == null:
|
||||
return
|
||||
# TP0 令牌池——卡片 id "kind|tier" 拆键(缺 | = 旧载荷防御归普通档)
|
||||
# TP0 令牌池——卡片 id "kind|tier|relic_id" 拆键(缺 | = 旧载荷防御归普通档;relic 三段)
|
||||
var parts := item_id.split("|")
|
||||
var kind := parts[0]
|
||||
var tier := parts[1] if parts.size() > 1 else ""
|
||||
var ok: bool = adventure.apply_node_bonus(kind, tier) if _bonus_context == "reward_node" else adventure.pick_bonus(kind, tier)
|
||||
var rid := parts[2] if parts.size() > 2 else ""
|
||||
var ok: bool = adventure.apply_node_bonus(kind, tier, rid) if _bonus_context == "reward_node" else adventure.pick_bonus(kind, tier, rid)
|
||||
if not ok:
|
||||
push_error("[组合根] 三选一兑付被拒——见输出日志")
|
||||
|
||||
|
||||
Reference in new issue
Block a user