// Handle the reloading of mods when the Mods screen is closed. public override void PostClose() { base.PostClose(); // Only reloads mods if the user actually made changes to the mod configuration. if (HasConfigurationChanged) { // Deactivate all of the mods... foreach (InstalledMod mod in InstalledModLister.AllInstalledMods) { mod.Active = false; } // ...and then activate them in the selected order foreach (InstalledMod mod in activeMods) { mod.Active = true; } ModsConfig.Save(); PlayDataLoader.ClearAllPlayData(); PlayDataLoader.LoadAllPlayData(false); } else { Log.Message("Mod selection did not change. Skipping mod reload."); } // TODO: Alpha 12 //Find.WindowStack.Add(new Page_MainMenu()); }
private static void PostCloseDetour(this Page_ModsConfig self) { if (SettingsHandler.LastRestartOnClose.Value != RestartOnClose) { SettingsHandler.LastRestartOnClose.Value = RestartOnClose; HugsLibController.Instance.Settings.SaveChanges(); } ModsConfig.Save(); int activeModsWhenOpenedHash = (int)typeof(Page_ModsConfig).GetField("activeModsWhenOpenedHash", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(self); if (activeModsWhenOpenedHash != ModLister.InstalledModsListHash(true)) { if (RestartOnClose) { PlatformHandler.RestartRimWorld(); } //Copy of source from here bool assemblyWasLoaded = LoadedModManager.RunningMods.Any((ModContentPack m) => m.LoadedAnyAssembly); LongEventHandler.QueueLongEvent(delegate { PlayDataLoader.ClearAllPlayData(); PlayDataLoader.LoadAllPlayData(false); if (assemblyWasLoaded) { LongEventHandler.ExecuteWhenFinished(delegate { Find.WindowStack.Add(new Dialog_MessageBox("ModWithAssemblyWasUnloaded".Translate(), null, null, null, null, null, false)); }); } }, "LoadingLongEvent", true, null); } }
public static void Init() { if (!PlayDataLoader.loaded) { PlayDataLoader.LoadAllPlayData(false); } ConceptDatabase.Save(); ShipCountdown.CancelCountdown(); MainMenuDrawer.anyWorldFiles = SavedWorldsDatabase.AllWorldFiles.Any <FileInfo>(); MainMenuDrawer.anyMapFiles = MapFilesUtility.AllMapFiles.Any <FileInfo>(); }
internal static void LoadAllPlayData(bool recovering = false) { if (PlayDataLoader.Loaded) { Log.Error("Loading play data when already loaded. Call ClearAllPlayData first."); } else { queueRecovering = false; queueLoadAllPlayData = false; DeepProfiler.Start("LoadAllPlayData"); try { DoPlayLoad(); } catch (Exception ex) { if (!Prefs.ResetModsConfigOnCrash) { throw; } else if (recovering) { Log.Warning("Could not recover from errors loading play data. Giving up."); throw; } else { IEnumerable <ModMetaData> activeMods = ModsConfig.ActiveModsInLoadOrder; if (Enumerable.Count <ModMetaData>(activeMods) == 1 && Enumerable.First <ModMetaData>(activeMods).IsCoreMod) { throw; } else { Log.Warning("Caught exception while loading play data but there are active mods other than Core. Resetting mods config and trying again.\nThe exception was: " + (object)ex); try { PlayDataLoader.ClearAllPlayData(); } catch { Log.Warning("Caught exception while recovering from errors and trying to clear all play data. Ignoring it.\nThe exception was: " + (object)ex); } ModsConfig.Reset(); CrossRefLoader.Clear(); PostLoadInitter.Clear(); PlayDataLoader.LoadAllPlayData(true); return; } } } finally { DeepProfiler.End(); } // A14 - PlayDataLoader.loaded is now private, Loaded property is getter only PlayDataLoader_loaded.SetValue(null, false); if (!recovering) { return; } Log.Message("Successfully recovered from errors and loaded play data."); DelayedErrorWindowRequest.Add(Translator.Translate("RecoveredFromErrorsText"), Translator.Translate("RecoveredFromErrorsDialogTitle")); } }
private static void ExportLangbase(string languagesPath, int index) { if (index >= LanguageMap.Count) { LongEventHandler.QueueLongEvent(delegate { Prefs.LangFolderName = originLangFolderName; PlayDataLoader.ClearAllPlayData(); PlayDataLoader.LoadAllPlayData(false); ExportDeclaration(); }, "LoadingLongEvent", false, null); return; } string code = LanguageMap[index][0]; string folderName = LanguageMap[index][1]; LoadedLanguage lang = null; foreach (var loadedLanugage in LanguageDatabase.AllLoadedLanguages) { if (loadedLanugage.folderName == folderName) { lang = loadedLanugage; break; } } if (lang == null) { throw new Exception($"{ExporterMod.Name} Language '{code}-{folderName}' no found."); } var path = Path.Combine(languagesPath, code); Directory.CreateDirectory(path); LongEventHandler.QueueLongEvent(delegate { Prefs.LangFolderName = folderName; ExporterMod.Log($"Start Loading language {Prefs.LangFolderName}"); PlayDataLoader.ClearAllPlayData(); PlayDataLoader.LoadAllPlayData(false); LongEventHandler.QueueLongEvent(delegate { ExporterMod.Log($"Complete Loading language {Prefs.LangFolderName}", true); ExporterMod.Log($"Start exporting language {Prefs.LangFolderName}"); var allLangTypes = typeof(ELang).AllSubclassesNonAbstract().ToList(); allLangTypes.Sort((Type a, Type b) => { return(a.Name.CompareTo(b.Name)); }); foreach (var langType in allLangTypes) { var typeArguments = new Type[] { langType, (Activator.CreateInstance(langType) as ELang).DefType }; var databaseType = typeof(Database <,>).MakeGenericType(typeArguments); var category = databaseType.GetProperty("Category").GetValue(null, null) as string; databaseType.GetMethod("Save", BindingFlags.Static | BindingFlags.Public).Invoke(null, new[] { Path.Combine(path, category) }); } ExporterMod.Log($"Complete exporting language {Prefs.LangFolderName}", true); ExportLangbase(languagesPath, index + 1); }, "LoadingLongEvent", false, null); }, "LoadingLongEvent", false, null); //LongEventHandler.QueueLongEvent(delegate { //}, $"LoadingLongEvent", false, null); }