From a15370c524c43493974be45740d19bfca26ecf38 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Mon, 26 Oct 2026 05:52:49 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=BF=AD=E4=BB=A338=E5=8D=A1=E2=91=A2=20?= =?UTF-8?q?=E6=95=88=E6=9E=9C=E6=96=87=E6=A1=88=E6=89=B9):=20effect=5Fengi?= =?UTF-8?q?ne=20=E6=A0=A1=E9=AA=8C=E6=96=87=E6=A1=88=E8=AE=A1=E6=95=B0?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E2=80=94=E2=80=94b1=20fact=20=E5=87=BA?= =?UTF-8?q?=E5=9F=9F=E6=8A=A5=E9=94=99=E6=96=87=E6=A1=88=E5=8A=A8=E6=80=81?= =?UTF-8?q?=E5=8F=96=20FACTS.size()=EF=BC=88=E7=94=A8=E6=88=B7=E8=A3=81=20?= =?UTF-8?q?Q=20=E7=94=B2=EF=BC=9A=E4=B8=A4=E6=AC=A1=E6=BC=82=E7=A7=BB?= =?UTF-8?q?=E5=AE=9E=E8=AF=81=EF=BC=8C=E7=A6=81=E7=95=99=E6=AD=BB=E6=95=B0?= =?UTF-8?q?=EF=BC=89=EF=BC=8Bb2=20EFFECT=5FKINDS=20=E5=A4=B4=E6=B3=A8?= =?UTF-8?q?=E8=AE=A1=E6=95=B0=E8=A1=A8=E8=BF=B0=E6=B2=BB=E7=90=86=EF=BC=88?= =?UTF-8?q?=E5=8E=BB=E5=86=99=E6=AD=BB=E3=80=8C=E5=AE=9A=E7=A8=BF=2019=20?= =?UTF-8?q?=E8=A1=8C=EF=BC=9B=E7=B1=BB=E5=9E=8B=E5=AE=9E=E6=95=B0=2024?= =?UTF-8?q?=E3=80=8D=E2=86=92=E5=AE=9E=E6=95=B0=E4=BB=A5=E5=B8=B8=E9=87=8F?= =?UTF-8?q?=E4=B8=BA=E5=87=86=EF=BC=8C=E5=8E=86=E5=8F=B2=E7=AC=94=E8=AF=AF?= =?UTF-8?q?=E5=8F=99=E4=BA=8B=E5=8F=A5=E6=8C=89=E7=A6=81=E5=86=99=E5=8F=98?= =?UTF-8?q?=E6=9B=B4=E8=AE=B0=E5=BD=95=E7=BA=A2=E7=BA=BF=E4=BF=9D=E7=95=99?= =?UTF-8?q?=EF=BC=89=EF=BC=9Bwr1=20=E6=96=AD=E8=A8=80=E4=B8=80=E6=9D=A1?= =?UTF-8?q?=EF=BC=88message=20=E5=90=AB=E8=AF=8D=E8=A1=A8=E5=AE=9E?= =?UTF-8?q?=E6=95=B0=2019=E3=80=81=E6=97=A0=E3=80=8C9=20=E9=A1=B9=E3=80=8D?= =?UTF-8?q?=E5=86=99=E6=AD=BB=EF=BC=8Ceffect=5Fwords=5Ft1=20=E2=91=A2-b=20?= =?UTF-8?q?=E6=AE=B5=EF=BC=89=EF=BC=9B=E6=92=A4=E9=94=80=E8=AF=81=E6=98=8E?= =?UTF-8?q?=3D=E5=9B=9E=E9=80=80=20b1=20hunk=E2=86=92=E6=96=AD=E8=A8=80?= =?UTF-8?q?=E7=BA=A2=E2=86=92=E8=BF=98=E5=8E=9F=E5=A4=8D=E7=BB=BF=EF=BC=88?= =?UTF-8?q?=E5=AE=9E=E6=B5=8B=E7=BA=A2=E7=BB=BF=E5=A4=8D=E7=8E=B0=EF=BC=89?= =?UTF-8?q?=EF=BC=9B=E5=90=88=E6=B3=95=E6=95=B0=E6=8D=AE=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E9=9B=B6=E5=8F=98=E5=8C=96=EF=BC=88=E5=A5=91=E7=BA=A6=202?= =?UTF-8?q?=EF=BC=8Cerrs=20=E7=BB=93=E6=9E=84=E9=9B=B6=E8=A7=A6=E7=A2=B0?= =?UTF-8?q?=EF=BC=89=EF=BC=9BT0=20=E5=A4=8D=E6=A0=B8=20FACTS=2019/EFFECT?= =?UTF-8?q?=5FKINDS=2032=20=E5=8F=8C=E8=AF=8D=E8=A1=A8=E5=AE=9E=E6=95=B0?= =?UTF-8?q?=E5=9C=A8=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/core/effect_engine.gd | 4 ++-- game/tests/unit/core/effect_words_t1_test.gd | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/game/core/effect_engine.gd b/game/core/effect_engine.gd index e425518e..ebff39b7 100644 --- a/game/core/effect_engine.gd +++ b/game/core/effect_engine.gd @@ -18,7 +18,7 @@ const EVENTS := ["dig_reveal", "dig_paid", "seal_hit", "mine_hit", "attack_commi ## 原 MINE_HOOKS 的同义迁移:挖掘/封印/轮末结算面事件) const MINE_EVENTS := ["dig_reveal", "dig_paid", "seal_hit", "mine_hit", "seal_settle", "round_end", "reward_roll"] -## 效果类型词汇(解释器 switch 闭集——需求卡片 §3.3 定稿 19 行;类型实数 24,含共享行拆型: +## 效果类型词汇(解释器 switch 闭集——词表实数以 EFFECT_KINDS 常量为准,含共享行拆型: ## grant_gp/bias_wallet、counter_add/counter_spend、reveal_tiles/remove_mines/refresh_pick、 ## bias_rewards/preview。需求卡片标题计 23 系笔误,落码按行内容全收——commit 留痕) const EFFECT_KINDS := ["add_ticket_rider", "modify_ticket", "damage_mult", "open_ticket", @@ -357,7 +357,7 @@ static func validate_trigger_row(rid: String, row: Dictionary, triggers: Array, errs.append({"category": "zero_flat", "message": "%s when 键出白名单: %s" % [rid, String(k)]}) var fact := String(c.get("fact", "")) if not FACTS.has(fact): - errs.append({"category": "enum", "message": "%s fact 出域(事实词汇封闭 9 项): %s" % [rid, fact]}) + errs.append({"category": "enum", "message": "%s fact 出域(事实词汇封闭 %d 项): %s" % [rid, FACTS.size(), fact]}) if not OPS.has(String(c.get("op", "eq"))): errs.append({"category": "enum", "message": "%s when 算子出域: %s" % [rid, String(c.get("op", ""))]}) var do_d: Dictionary[Variant, Variant] = tr.get("do", {}) as Dictionary diff --git a/game/tests/unit/core/effect_words_t1_test.gd b/game/tests/unit/core/effect_words_t1_test.gd index 0979ef5d..3f5d44f1 100644 --- a/game/tests/unit/core/effect_words_t1_test.gd +++ b/game/tests/unit/core/effect_words_t1_test.gd @@ -45,6 +45,10 @@ func _init() -> void: EffectEngineScript.validate_trigger_row("出域op", {}, [{"on": "dig_stop", "when": [{"fact": "ap_left", "op": "mod_odd", "value": 2}], "do": {"kind": "heal", "value": 1}}], errs) EffectEngineScript.validate_trigger_row("出域kind", {}, [{"on": "dig_stop", "do": {"kind": "nope_kind", "value": 1}}], errs) Kit.check_quiet(errs.size() == 4, "出域 on/fact/op/kind 各一行全部被拒(4 违例)〔专长批 V1〕") + # ③-b fact 出域文案随词表实数(动态取 FACTS.size()——禁写死计数,词表增删文案自动随)〔效果文案批 V1〕 + Kit.check_quiet(String(errs[1].get("message", "")).contains(str(EffectEngineScript.FACTS.size())) + and not String(errs[1].get("message", "")).contains(" 9 项"), + "fact 出域文案含词表实数 %d、无写死计数〔效果文案批 V1〕" % EffectEngineScript.FACTS.size()) # ④ 运行期命中序(合法新事件;dispatch 出域 fail-fast=debug assert;引擎无状态——计数器经 ctx) var fx = EffectEngineScript.new(null)