コード例 #1
0
        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;
                }
            }
        }
コード例 #2
0
        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));
                }
            }
        }