diff --git a/RuleEngine/Dsl/DslLoader.cs b/RuleEngine/Dsl/DslLoader.cs index 2ea7783..baeefd5 100644 --- a/RuleEngine/Dsl/DslLoader.cs +++ b/RuleEngine/Dsl/DslLoader.cs @@ -236,6 +236,25 @@ public class CapabilityRegistry if (f.Condition != "hand_contains_wildcard") warnings.Add($"番型「{f.Name}」condition={f.Condition}→引擎仅支持hand_contains_wildcard"); + // Deck generator + if (rules.Deck.Generator != "mahjong") + warnings.Add($"deck.generator={rules.Deck.Generator}→引擎仅支持mahjong"); + + // Flower replace_tiles: warning about partial support + if (rules.FlowerRules != null && !string.IsNullOrEmpty(rules.FlowerRules.ReplaceTiles) + && rules.FlowerRules.ReplaceTiles != "BEFORE_GAME_START") + warnings.Add($"flower_rules.replace_tiles={rules.FlowerRules.ReplaceTiles}→仅BEFORE_GAME_START完全支持"); + + // Condition strings: can_win*_and_fan_ge_8 is known but fanSum=0 in CheckCondition + if (rules.Phases.Any(p => + (p.SubPhases?.SelfAction?.Options?.Any(o => o.Condition == "can_win_tumo_and_fan_ge_8") == true) + || (p.SubPhases?.OthersReaction?.Options?.Any(o => o.Condition == "can_win_and_fan_ge_8") == true))) + warnings.Add("win condition can_win*_and_fan_ge_8 引擎用硬编码检查替代→DSL condition不生效"); + + // Scoring pre_hooks: conditions not evaluated + if (rules.Scoring.PreHooks.Any(h => !string.IsNullOrEmpty(h.Condition))) + warnings.Add("scoring.pre_hooks 的 condition 字段引擎不评估→条件逻辑为硬编码"); + return warnings; } }