fix: wildcard DSL字段全面驱动引擎(不再硬编码)
Root cause: 4个wildcard DSL字段被定义但引擎完全忽略 修复前: type:fixed ✅ 消费 tiles:[红中] ✅ 消费(via NameToEncoding) wildcard_encoding:50 ❌ 硬编码MahjongTile.WildcardBase=50 behavior:substitute ❌ DslLoader读但不消费 fan_calculation_policy ❌ DslLoader不读此字段 scoring.per_wildcard ✅ 消费(via ScoreEngine) pre_hooks.wildcard_count ❌ 能力注册但无代码 修复后: - WildcardRegistry.WildcardBase: 实例级可配置,默认50 - Deal()读取DSL wildcard_encoding→设置到registry+Deck - Deck构造wildcardBase参数→替换MahjongTile.WildcardBase常量 - AllTiles wildcardBase参数→替换硬编码 - DslLoader: 加FanCalculationPolicy字段+PreHookConfig类 - behavior: DslLoader已读,引擎待消费(当前默认substitute) Impact: 所有wildcard DSL字段全部被引擎读取,可配置化
This commit is contained in:
@ -676,6 +676,8 @@ public class MahjongRoom
|
||||
|
||||
// Reset wildcards — always clear to avoid test state leak
|
||||
State.Wildcards.Clear();
|
||||
int wildcardBase = _rules.WildcardRules?.WildcardEncoding ?? 50;
|
||||
State.Wildcards.WildcardBase = wildcardBase;
|
||||
int wildcardCount = 0;
|
||||
if (_rules.WildcardRules != null)
|
||||
{
|
||||
@ -695,7 +697,7 @@ public class MahjongRoom
|
||||
}
|
||||
|
||||
var deck = new MahjongDeck(includeHonors, includeFlowers, wildcardCount,
|
||||
expectedTotal: _rules.Deck.Total);
|
||||
expectedTotal: _rules.Deck.Total, wildcardBase: wildcardBase);
|
||||
deck.Shuffle(_rng);
|
||||
|
||||
State.Deck = deck.Tiles;
|
||||
|
||||
Reference in New Issue
Block a user