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)