private static void CheckLoadOrder() { var loadedModules = ModuleInfoHelper.GetLoadedModules().ToList(); var sb = new StringBuilder(); var harmonyModule = loadedModules.SingleOrDefault(x => x.Id == "Bannerlord.Harmony"); var harmonyModuleIndex = harmonyModule is not null?loadedModules.IndexOf(harmonyModule) : -1; if (harmonyModuleIndex == -1) { if (sb.Length != 0) { sb.AppendLine(); } sb.AppendLine(TextObjectHelper.Create(SErrorHarmonyNotFound)?.ToString() ?? "ERROR"); } var uiExtenderModule = loadedModules.SingleOrDefault(x => x.Id == "Bannerlord.UIExtenderEx"); var uiExtenderIndex = uiExtenderModule is not null?loadedModules.IndexOf(uiExtenderModule) : -1; if (uiExtenderIndex == -1) { if (sb.Length != 0) { sb.AppendLine(); } sb.AppendLine(TextObjectHelper.Create(SErrorUIExtenderExNotFound)?.ToString() ?? "ERROR"); } var officialModules = loadedModules.Where(x => x.IsOfficial).Select(x => (Module: x, Index: loadedModules.IndexOf(x))); var modulesLoadedBefore = officialModules.Where(tuple => tuple.Index < uiExtenderIndex).ToList(); if (modulesLoadedBefore.Count > 0) { if (sb.Length != 0) { sb.AppendLine(); } sb.AppendLine(TextObjectHelper.Create(SErrorOfficialModulesLoadedBefore)?.ToString() ?? "ERROR"); sb.AppendLine(TextObjectHelper.Create(SErrorOfficialModules)?.ToString() ?? "ERROR"); foreach (var(module, _) in modulesLoadedBefore) { sb.AppendLine(module.Id); } } if (sb.Length > 0) { sb.AppendLine(); sb.AppendLine(TextObjectHelper.Create(SMessageContinue)?.ToString() ?? "ERROR"); switch (MessageBox.Show(sb.ToString(), TextObjectHelper.Create(SWarningTitle)?.ToString() ?? "ERROR", MessageBoxButtons.YesNo)) { case DialogResult.Yes: Environment.Exit(1); break; } } }
public static void OnInitializeSubModulesPrefix() { var loadedSubModuleTypes = LoadedSubModuleTypes?.Invoke(Module.CurrentModule); foreach (var moduleInfo in ModuleInfoHelper.GetLoadedModules()) { var xmlDocument = new XmlDocument(); xmlDocument.Load(moduleInfo.XmlPath); var moduleNode = xmlDocument.SelectSingleNode("Module"); var subModules = moduleNode?.SelectSingleNode("SubModules"); var subModuleList = subModules?.SelectNodes("SubModulePython"); for (var i = 0; i < subModuleList?.Count; i++) { var subModuleNode = subModuleList[i]; var name = subModuleNode?.SelectSingleNode("Name")?.Attributes["value"]?.InnerText ?? string.Empty; var scriptName = subModuleNode?.SelectSingleNode("ScriptName")?.Attributes["value"]?.InnerText ?? string.Empty; var subModuleClassType = subModuleNode?.SelectSingleNode("SubModuleClassType")?.Attributes["value"]?.InnerText ?? string.Empty; loadedSubModuleTypes?.Add(name, new WrappedSubModulePythonType(moduleInfo.Folder, scriptName, subModuleClassType)); } } }