// 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);
            }
        }
Ejemplo n.º 3
0
 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>();
 }
Ejemplo n.º 4
0
        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"));
            }
        }
Ejemplo n.º 5
0
        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);
        }