diff --git a/src/Luban.Job.Cfg/Source/Defs/DefAssembly.cs b/src/Luban.Job.Cfg/Source/Defs/DefAssembly.cs index da64749..2b0fbbb 100644 --- a/src/Luban.Job.Cfg/Source/Defs/DefAssembly.cs +++ b/src/Luban.Job.Cfg/Source/Defs/DefAssembly.cs @@ -24,6 +24,7 @@ namespace Luban.Job.Cfg.Defs public Service CfgTargetService { get; private set; } private readonly string _patchName; + private readonly List _excludeTags; public Patch TargetPatch { get; private set; } @@ -34,6 +35,8 @@ namespace Luban.Job.Cfg.Defs public string TableManagerName => CfgTargetService.Manager; + public List ExcludeTags => _excludeTags; + public DefAssembly(string patchName, TimeZoneInfo timezone, List excludeTags, IAgent agent) { this._patchName = patchName; diff --git a/src/Luban.Job.Cfg/Source/Validators/RefValidator.cs b/src/Luban.Job.Cfg/Source/Validators/RefValidator.cs index c5ade92..4a0b33b 100644 --- a/src/Luban.Job.Cfg/Source/Validators/RefValidator.cs +++ b/src/Luban.Job.Cfg/Source/Validators/RefValidator.cs @@ -1,4 +1,5 @@ using Luban.Job.Cfg.Datas; +using Luban.Job.Cfg.DataSources; using Luban.Job.Cfg.DataVisitors; using Luban.Job.Cfg.Defs; using Luban.Job.Cfg.RawDefs; @@ -58,8 +59,14 @@ namespace Luban.Job.Cfg.Validators case ETableMode.MAP: { var recordMap = assembly.GetTableDataInfo(defTable).FinalRecordMap; - if (recordMap.ContainsKey(key)) + if (recordMap.TryGetValue(key, out Record rec)) { + if (!rec.IsNotFiltered(assembly.ExcludeTags)) + { + string locationFile = ValidatorContext.CurrentVisitor.CurrentValidateRecord.Source; + assembly.Agent.Error("记录 {0} = {1} (来自文件:{2}) 在引用表:{3} 中存在,但导出时被过滤了", + ValidatorContext.CurrentRecordPath, key, locationFile, defTable.FullName); + } return; } break; @@ -67,8 +74,14 @@ namespace Luban.Job.Cfg.Validators case ETableMode.LIST: { var recordMap = assembly.GetTableDataInfo(defTable).FinalRecordMapByIndexs[field]; - if (recordMap.ContainsKey(key)) + if (recordMap.TryGetValue(key, out Record rec)) { + if (!rec.IsNotFiltered(assembly.ExcludeTags)) + { + string locationFile = ValidatorContext.CurrentVisitor.CurrentValidateRecord.Source; + assembly.Agent.Error("记录 {0} = {1} (来自文件:{2}) 在引用表:{3} 中存在,但导出时被过滤了", + ValidatorContext.CurrentRecordPath, key, locationFile, defTable.FullName); + } return; } break;