fix: excludes引用检查用enginePatterns替代fanTypes(修正误报)
根因分析: - excludes用字符串匹配(ApplyFanExclusions操作输出名单),不依赖_fanConfig 例: 清一色excludes缺一门→引擎生成'缺一门'时排除生效,即使缺一门不在fan_types 之前按fan_types检查导致误报(武汉4个/国标2个) - conflicts需要双方都在_fanConfig才能比较BaseFan数值 修复: - excludes: 改查enginePatterns(39个引擎可生成名)替代fanNames - conflicts: 保持查fanNames(必须双方在_fan_config) - guobiao.yaml: conflicts[暗七对]→[七对](引擎通过FanName解析返回七对) 效果: 武汉5→1 国标15→12 (消除误报,剩余为真缺失:圈风/门风等引擎不支持)
This commit is contained in:
@ -132,17 +132,19 @@ public class CapabilityRegistry
|
|||||||
if (recognized < rules.FanTypes.Count)
|
if (recognized < rules.FanTypes.Count)
|
||||||
warnings.Add($"番型识别率: {recognized}/{rules.FanTypes.Count}→{rules.FanTypes.Count - recognized} 个番型得分为0");
|
warnings.Add($"番型识别率: {recognized}/{rules.FanTypes.Count}→{rules.FanTypes.Count - recognized} 个番型得分为0");
|
||||||
|
|
||||||
// Excludes/Conflicts 引用完整性: 引用的番型名必须存在于 fan_types
|
// Excludes/Conflicts 引用完整性
|
||||||
|
// excludes: 用字符串匹配(不依赖_fanConfig), 只检查引擎是否可能生成该番型名
|
||||||
|
// conflicts: 需要双方都在_fanConfig中才能比较BaseFan
|
||||||
var fanNames = rules.FanTypes.Select(f => f.Name).ToHashSet();
|
var fanNames = rules.FanTypes.Select(f => f.Name).ToHashSet();
|
||||||
foreach (var f in rules.FanTypes)
|
foreach (var f in rules.FanTypes)
|
||||||
{
|
{
|
||||||
if (f.Excludes != null)
|
if (f.Excludes != null)
|
||||||
foreach (var excluded in f.Excludes)
|
foreach (var excluded in f.Excludes)
|
||||||
if (!fanNames.Contains(excluded))
|
if (!enginePatterns.Contains(excluded)) // excludes work on string names, check engine can generate
|
||||||
warnings.Add($"番型「{f.Name}」excludes 引用了不存在的番型「{excluded}」→排除规则失效");
|
warnings.Add($"番型「{f.Name}」excludes 引用了引擎不识别的番型「{excluded}」→排除规则无效(引擎不生成此名)");
|
||||||
if (f.Conflicts != null)
|
if (f.Conflicts != null)
|
||||||
foreach (var conflict in f.Conflicts)
|
foreach (var conflict in f.Conflicts)
|
||||||
if (!fanNames.Contains(conflict))
|
if (!fanNames.Contains(conflict)) // conflicts need _fanConfig for comparison
|
||||||
warnings.Add($"番型「{f.Name}」conflicts 引用了不存在的番型「{conflict}」→冲突规则失效");
|
warnings.Add($"番型「{f.Name}」conflicts 引用了不存在的番型「{conflict}」→冲突规则失效");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -65,7 +65,7 @@ fan_types:
|
|||||||
- { name: 大于五, base_fan: 8, level: 5 }
|
- { name: 大于五, base_fan: 8, level: 5 }
|
||||||
- { name: 小于五, base_fan: 8, level: 5 }
|
- { name: 小于五, base_fan: 8, level: 5 }
|
||||||
# 6番
|
# 6番
|
||||||
- { name: 碰碰和, base_fan: 6, level: 4, conflicts: [暗七对] }
|
- { name: 碰碰和, base_fan: 6, level: 4, conflicts: [七对] }
|
||||||
- { name: 混一色, base_fan: 6, level: 4, excludes: [缺一门] }
|
- { name: 混一色, base_fan: 6, level: 4, excludes: [缺一门] }
|
||||||
- { name: 五门齐, base_fan: 6, level: 4 }
|
- { name: 五门齐, base_fan: 6, level: 4 }
|
||||||
- { name: 全求人, base_fan: 6, level: 4 }
|
- { name: 全求人, base_fan: 6, level: 4 }
|
||||||
|
|||||||
Reference in New Issue
Block a user