From d7a640650f18f49c3258a12be83e3c8257a361fd Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Wed, 7 Oct 2026 22:39:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D:=20=E5=A4=A9=E8=B5=8B?= =?UTF-8?q?=E6=A0=91=E8=B4=A7=E5=B8=81=E7=94=B2=E6=A1=88=E2=80=94=E2=80=94?= =?UTF-8?q?=E6=A0=91=E5=85=A8=E9=92=A5=E7=9F=B3=E5=8D=95=E5=B8=81=E8=90=BD?= =?UTF-8?q?=E5=AE=9A=EF=BC=882026-10-07=20=E7=94=A8=E6=88=B7=E8=A3=81?= =?UTF-8?q?=E7=94=B2=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - meta_tree.tres: 脊柱 16 行 currency gp→keystone(价格 10/20/30/40 不动,provisional 归 M4); 表尾 T8 注释改钥石口径+裁甲销账行注 - meta_progression.gd tree_buy: 删 currency 分叉直走 spend_keystone(前后同消费口=零行为变更; free 行 price=0 零额消费无副作用),T8 双币骨架披露注释销账 - meta_tree_table.gd: CURRENCIES 枚举 {gp,keystone,free}→{keystone,free}(currency 字段保留为呈现 元数据),头注补单币口径 - camp_overlay_view.gd: 树购买钮文案「购买 N」→「购买 N 钥石」(行板紧凑钮豁免) - smoke_all.gd: 4670/4677 断言消息文字随批换代(逻辑零改) - meta.tres: 表尾陈旧注释订正(「GP 商店同族…base 10」→同族指数值档位非货币+base_price 现值 20 系 2026-09-22 对齿批投值) 闸: 基线 834/0;改后 smoke 834/0+probe_gate --click 全绿+ui_layout/ui_tune 过; run_all 17 套件全绿;MC 零跑(静态论证:改动前后同走 spend_keystone,currency 无残余消费方) --- game/core/meta_progression.gd | 11 +++--- game/data/schemas/meta_tree_table.gd | 9 ++--- game/data/tables/meta.tres | 3 +- game/data/tables/meta_tree.tres | 36 +++++++++++--------- game/presentation/views/camp_overlay_view.gd | 2 +- game/smoke/smoke_all.gd | 4 +-- 6 files changed, 33 insertions(+), 32 deletions(-) diff --git a/game/core/meta_progression.gd b/game/core/meta_progression.gd index 775705c9..252e71c8 100644 --- a/game/core/meta_progression.gd +++ b/game/core/meta_progression.gd @@ -184,18 +184,15 @@ func tree_can_buy(node_id: String) -> bool: return true -# 节点购买(营地树 UI 唯一写口):**单币=钥石先行**(双币铁律中 GP 需局外余额承载域——GP 冒险 -# 收束清零=局内死钱不跨局,GP 余额域缺位,脊柱 GP 节点暂走钥石消费——表 currency 字段保留语义, -# T9/数值批补 GP 余额域后切回——台账披露待追认)。free=迁移点亮/彩蛋觉醒零币。 +# 节点购买(营地树 UI 唯一写口):树全钥石单币(2026-10-07 用户裁甲——原 T8 双币骨架披露销账; +# 表内 currency 字段保留为呈现元数据)。free=迁移点亮/彩蛋觉醒零币(price 0,零额消费无副作用)。 func tree_buy(node_id: String) -> bool: var row: Dictionary = db.tree_node(node_id) if row.is_empty() or not tree_can_buy(node_id): return false var price := int(row.get("price", 0)) - var currency := String(row.get("currency", "gp")) - if currency == "gp" or currency == "keystone": - if not save.spend_keystone(price): - return false # T8 骨架单币承载(GP 余额域缺位——披露待追认) + if not save.spend_keystone(price): + return false save.set_tree_level(node_id, save.tree_level(node_id) + 1) _check_easter_egg() return save.write_to_disk() diff --git a/game/data/schemas/meta_tree_table.gd b/game/data/schemas/meta_tree_table.gd index 4ae7a4f5..bf3117d5 100644 --- a/game/data/schemas/meta_tree_table.gd +++ b/game/data/schemas/meta_tree_table.gd @@ -4,11 +4,12 @@ # Date: 2026-10-04(双层 BD 实施批 T8;设计权威 双层BD体系-整合定稿-2026-10-03 §1.4) # 数据配置 MetaTreeTable schema(元进度 回填 owner 批末落文;行 = Dictionary 键 node_id,Rule 4 豁免 # 定义表——FeatTable 先例)。 -# 行字段:node_id / display_name / vein ∈ VEINS(spine=主干脊柱 row-gating,GP 买深度;forge=锻造脉 +# 行字段:node_id / display_name / vein ∈ VEINS(spine=主干脊柱 row-gating,钥石买深度〔2026-10-07 +# 用户裁甲——树全钥石单币,原双币铁律骨架披露销账〕;forge=锻造脉 # 数值专精;keystone=钥石脉内容解锁;attune=同调脉槽位与规则)/ kind ∈ KINDS(stat=四线数值/ # rule=全局规则/unlock=内容解锁/socket=同调位/fork=A/B 互斥对/easter=彩蛋觉醒)/ -# currency ∈ {gp, keystone, free}(双币铁律:GP 喂脊柱数值、钥石喂 Unlock/Socket/Fork——哈迪斯镜内 -# 双币同构;free=迁移点亮与彩蛋)/ price [0,9999] / cap [1,9](等级上限;fork/unlock 恒 1)/ +# currency ∈ {keystone, free}(树全钥石单币——2026-10-07 用户裁甲;free=迁移点亮与彩蛋)/ +# price [0,9999] / cap [1,9](等级上限;fork/unlock 恒 1)/ # row(脊柱行号 1..N——row-gating:行 N 可购条件 = 全树已购等级总和 ≥ SPINE_ROW_GATE×(N-1))/ # requires Array[node_id](显式前置——父开子脉内链)/ effects Dictionary(stat 四线 flat: # atk/max_hp/hit/armor_class;rule 键封闭 RULE_KEYS)/ fork_group/fork_side(a/b——同组互斥、 @@ -24,7 +25,7 @@ extends Resource const VEINS := ["spine", "forge", "keystone", "attune"] const KINDS := ["stat", "rule", "unlock", "socket", "fork", "easter"] -const CURRENCIES := ["gp", "keystone", "free"] +const CURRENCIES := ["keystone", "free"] # 树全钥石单币(2026-10-07 用户裁甲——原 gp 枚举值退役,字段保留为呈现元数据) const STAT_KEYS := ["atk", "max_hp", "hit", "armor_class"] ## 规则键封闭词表(零裸 flat 同族护栏——effects.rule 键出域=加载致命;首期两键=T8 Fork 面真实接线) const RULE_KEYS := ["posture_first_strike", "posture_bulwark"] diff --git a/game/data/tables/meta.tres b/game/data/tables/meta.tres index d5532d9a..3d2cddb7 100644 --- a/game/data/tables/meta.tres +++ b/game/data/tables/meta.tres @@ -89,7 +89,8 @@ attune_refresh_upgrade = [{ ; 元进度实现批(2026-09-21,设计权威 design/gdd/systems/冒险循环/元进度.md 定稿 v1.2): ; 数值全 provisional 归元进度设计批配读数(骨架先行——元进度实现批 2026-09-21,先例 = GP+商店房批)。 -; forge flat 档与 GP 商店同族(血+3/攻+1/甲+1),base 10 / ratio 150 三行同;boss 两档 L1 5/1 · L2 8/2 · L3 12/3 +; forge flat 档与局内 GP 商店同族指数值档位非货币(血+3/攻+1/甲+1),base_price 现值 20(2026-09-22 对齿批投值)/ ratio 150 三行同;boss 两档 L1 5/1 · L2 8/2 · L3 12/3 +; 〔2026-10-07 天赋树货币甲案修复批订正——原句「GP 商店同族…base 10」陈旧:GP 字样误导(锻造消费货币=钥石,meta_progression.gd:59 spend_keystone),base 20 经 2026-09-22 对齿批改值〕 ; (首杀全量、重复杀固定小额恒定不递减);工坊六件阈值 1/1/2/2/3/3 按总通关次数(首版只挂通关次数渠道, ; 钥石直购价随定价批后补);conversion 全 0 = 未标定占位(标定归设计批,护甲行强条目:验收读数必须按 ; 解锁后参数重测)。 diff --git a/game/data/tables/meta_tree.tres b/game/data/tables/meta_tree.tres index b37942f9..527d04b3 100644 --- a/game/data/tables/meta_tree.tres +++ b/game/data/tables/meta_tree.tres @@ -9,7 +9,7 @@ rows = [{ "display_name": "生命淬炼·1 层", "vein": "spine", "kind": "stat", - "currency": "gp", + "currency": "keystone", "price": 10, "cap": 3, "row": 1, @@ -21,7 +21,7 @@ rows = [{ "display_name": "攻击淬炼·1 层", "vein": "spine", "kind": "stat", - "currency": "gp", + "currency": "keystone", "price": 10, "cap": 3, "row": 1, @@ -33,7 +33,7 @@ rows = [{ "display_name": "命中淬炼·1 层", "vein": "spine", "kind": "stat", - "currency": "gp", + "currency": "keystone", "price": 10, "cap": 3, "row": 1, @@ -45,7 +45,7 @@ rows = [{ "display_name": "护甲淬炼·1 层", "vein": "spine", "kind": "stat", - "currency": "gp", + "currency": "keystone", "price": 10, "cap": 3, "row": 1, @@ -57,7 +57,7 @@ rows = [{ "display_name": "生命淬炼·2 层", "vein": "spine", "kind": "stat", - "currency": "gp", + "currency": "keystone", "price": 20, "cap": 3, "row": 2, @@ -69,7 +69,7 @@ rows = [{ "display_name": "攻击淬炼·2 层", "vein": "spine", "kind": "stat", - "currency": "gp", + "currency": "keystone", "price": 20, "cap": 3, "row": 2, @@ -81,7 +81,7 @@ rows = [{ "display_name": "命中淬炼·2 层", "vein": "spine", "kind": "stat", - "currency": "gp", + "currency": "keystone", "price": 20, "cap": 3, "row": 2, @@ -93,7 +93,7 @@ rows = [{ "display_name": "护甲淬炼·2 层", "vein": "spine", "kind": "stat", - "currency": "gp", + "currency": "keystone", "price": 20, "cap": 3, "row": 2, @@ -105,7 +105,7 @@ rows = [{ "display_name": "生命淬炼·3 层", "vein": "spine", "kind": "stat", - "currency": "gp", + "currency": "keystone", "price": 30, "cap": 3, "row": 3, @@ -117,7 +117,7 @@ rows = [{ "display_name": "攻击淬炼·3 层", "vein": "spine", "kind": "stat", - "currency": "gp", + "currency": "keystone", "price": 30, "cap": 3, "row": 3, @@ -129,7 +129,7 @@ rows = [{ "display_name": "命中淬炼·3 层", "vein": "spine", "kind": "stat", - "currency": "gp", + "currency": "keystone", "price": 30, "cap": 3, "row": 3, @@ -141,7 +141,7 @@ rows = [{ "display_name": "护甲淬炼·3 层", "vein": "spine", "kind": "stat", - "currency": "gp", + "currency": "keystone", "price": 30, "cap": 3, "row": 3, @@ -153,7 +153,7 @@ rows = [{ "display_name": "生命淬炼·4 层", "vein": "spine", "kind": "stat", - "currency": "gp", + "currency": "keystone", "price": 40, "cap": 3, "row": 4, @@ -165,7 +165,7 @@ rows = [{ "display_name": "攻击淬炼·4 层", "vein": "spine", "kind": "stat", - "currency": "gp", + "currency": "keystone", "price": 40, "cap": 3, "row": 4, @@ -177,7 +177,7 @@ rows = [{ "display_name": "命中淬炼·4 层", "vein": "spine", "kind": "stat", - "currency": "gp", + "currency": "keystone", "price": 40, "cap": 3, "row": 4, @@ -189,7 +189,7 @@ rows = [{ "display_name": "护甲淬炼·4 层", "vein": "spine", "kind": "stat", - "currency": "gp", + "currency": "keystone", "price": 40, "cap": 3, "row": 4, @@ -407,9 +407,11 @@ rows = [{ }] ; 双层 BD 实施批 T8(2026-10-04,R1 甲融合案——整合定稿 §1.4 一树双币三脉一脊+装配区+彩蛋): -; 脊柱 4 行×4 线(生命/攻击/命中/护甲——GP 买深度 cap3 价 10×row;row-gating=全树已购总等级 +; 脊柱 4 行×4 线(生命/攻击/命中/护甲——钥石买深度 cap3 价 10×row〔2026-10-07 用户裁甲 gp→keystone〕; +; row-gating=全树已购总等级 ; ≥ 4×(row−1));锻造脉 3 节点收编 forge_levels(钥石付价=现行迁移零痛);钥石脉=工坊解锁收编 ; (free 迁移点亮)+刷新升级移植;同调脉 socket 3(钥石=规则面首站)+Fork 4 对(A/B 集中同调脉 ; 营地免费切换——effects 首期两 rule 键真实接线余组 stat 面 provisional);彩蛋 1(锻造满排觉醒)。 ; 🔴 层级纪律:局外树只放全局规则件——零 archetype 键(schema 校验强制);规则改写型特性只走局内随机渠道。 ; 数值全 provisional 归 M-4 数值批;A/B 两侧差 <~3pp 验收=T10 MC。 +; 2026-10-07 用户裁甲:树全钥石单币落定(脊柱 16 行 currency gp→keystone;T8「GP 余额域缺位」双币骨架披露销账——GP 局内清零不入存档永不互兑条款不动,元进度.md:55)。数值 provisional 归 M4。 diff --git a/game/presentation/views/camp_overlay_view.gd b/game/presentation/views/camp_overlay_view.gd index 8a910815..01cf6dc9 100644 --- a/game/presentation/views/camp_overlay_view.gd +++ b/game/presentation/views/camp_overlay_view.gd @@ -200,7 +200,7 @@ func _rebuild_tree(data: Dictionary) -> void: hb.add_child(name_l) if String(row.get("kind", "")) == "fork": continue # Fork 行去 UI 化——由 fork_groups 段承载切换钮 - var btn := UiKit.button("购买 %d" % int(row.get("price", 0)), 0.0) # 柜台行板紧凑钮豁免宽度基准 + var btn := UiKit.button("购买 %d 钥石" % int(row.get("price", 0)), 0.0) # 柜台行板紧凑钮豁免宽度基准(树全钥石单币 2026-10-07 裁甲) btn.pressed.connect(func(): tree_buy_requested.emit(String(row.get("node_id", "")))) btn.disabled = not bool(row.get("can_buy", false)) hb.add_child(btn) diff --git a/game/smoke/smoke_all.gd b/game/smoke/smoke_all.gd index 3d5a04c0..9da0c5a9 100644 --- a/game/smoke/smoke_all.gd +++ b/game/smoke/smoke_all.gd @@ -4667,14 +4667,14 @@ func _smoke_tree() -> void: print("--- 天赋树(MetaTreeTable · 购买面 · A/B 切换 · 三体系迁移)---") check(_db.meta_tree != null and (_db.meta_tree.rows as Array).size() == 33, "meta_tree 已加载(33 节点=脊柱 16+锻造 3+钥石 2+socket 3+Fork 8+彩蛋 1——R1 甲融合案)") - check(_db.meta_tree.validate().is_empty(), "MetaTreeTable.validate 零违例(双币/互斥对/彩蛋 ≤3/零 archetype 层级纪律护栏)") + check(_db.meta_tree.validate().is_empty(), "MetaTreeTable.validate 零违例(单币枚举/互斥对/彩蛋 ≤3/零 archetype 层级纪律护栏)") var sv = _meta_new_save(_META_SMOKE_PATHS[8]) var mp = load("res://core/meta_progression.gd").new(_db, sv) # row-gating:行 2 可购需总等级 ≥4——零购时行 2 拒绝 check(not mp.tree_can_buy("sp_hp_r2"), "row-gating:行 2 不可购(总等级 0 < 4——投入点数累计解锁新行)") check(mp.tree_can_buy("sp_hp_r1") == false or true, "行 1 可购性读面(白板钥石 0=余额面拒)") sv.add_keystone(1000) - check(mp.tree_buy("sp_hp_r1") and sv.tree_level("sp_hp_r1") == 1, "树购买受理(钥石单币承载——GP 余额域缺位披露待追认)") + check(mp.tree_buy("sp_hp_r1") and sv.tree_level("sp_hp_r1") == 1, "树购买受理(树全钥石单币——2026-10-07 用户裁甲)") for i in 3: mp.tree_buy("sp_atk_r1") check(not mp.tree_can_buy("sp_atk_r1"), "cap 拦截(atk 行 1 已满 3 级——购买拒绝)")