From d402ea143aed0cc0c48b22311f533a306c090f28 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Tue, 20 Oct 2026 23:05:39 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=8D=A1=E2=91=A1=20T5-=E9=83=A8=E5=88=86?= =?UTF-8?q?):=20validate=5Ftrigger=5Frow=20=E5=A2=9E=20counter=5Fid=20?= =?UTF-8?q?=E5=89=8D=E7=BC=80=E5=90=88=E6=B3=95=E6=80=A7=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=EF=BC=88.tres=20=E8=A1=8C=E5=8A=A0=E8=BD=BD=E8=87=B4=E5=91=BD?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 判据单点 counter_id_legal(与 _push_trigger assert 同源,无第二份前缀表);meta_ 出域→errs→加载致命。 feat_vouchers 26 checks 在 ctx 化引擎下全绿(保险 V25 + 卡① A10–A12 未破,契约 5)。 引用闭合校验 + 负面套件 + manifest 归 T5 续(下一轮)。 --- game/core/effect_engine.gd | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/game/core/effect_engine.gd b/game/core/effect_engine.gd index 4ce6d5e4..0883c8f4 100644 --- a/game/core/effect_engine.gd +++ b/game/core/effect_engine.gd @@ -367,6 +367,11 @@ static func validate_trigger_row(rid: String, row: Dictionary, triggers: Array, var kind := String(do_d.get("kind", "")) if not EFFECT_KINDS.has(kind): errs.append({"category": "enum", "message": "%s 效果类型出域(解释器闭集): %s" % [rid, kind]}) + # 计数器前缀归属合法性(.tres 行路径——写错前缀加载致命;判据单点 counter_id_legal,与 _push_trigger 同源) + if do_d.has("counter_id"): + var cid := String(do_d.counter_id) + if not counter_id_legal(cid): + errs.append({"category": "enum", "message": "%s counter_id 前缀非法(meta_ 出域/引擎不接存档级): %s" % [rid, cid]}) # value_from/delta_from/mult_from/cap_from 引用面:行字段存在性(悬空=加载致命)—— # do 与 when 两侧同面(when value_from=dawn_order effective_rounds 先例) for vf_k in ["value_from", "delta_from", "mult_from", "cap_from"]: