public UndoActionType(int state, LastActionType lastAction = LastActionType.none) { Main.LogDebug("Creating last action type {1} for state {0}", state, lastAction.ToString()); State = state; LastAction = lastAction; switch (LastAction) { case LastActionType.restore: ModData = new ModsConfigData { buildNumber = RimWorld.VersionControl.CurrentBuild, activeMods = GetActiveMods() }; break; case LastActionType.backup: if (!StateIsSet(state)) { ModData = null; } else { ModData = ReadState(GenBackupStateFile(state)); } break; case LastActionType.none: default: Main.Log.Warning("Last Undo Action was not set with a type"); break; } }
static ModsConfig() { bool flag = false; data = DirectXmlLoader.ItemFromXmlFile <ModsConfigData>(GenFilePaths.ModsConfigFilePath); if (data.version != null) { bool flag2 = false; int result; if (data.version.Contains(".")) { int num = VersionControl.MinorFromVersionString(data.version); int num2 = VersionControl.MajorFromVersionString(data.version); if (num2 != VersionControl.CurrentMajor || num != VersionControl.CurrentMinor) { flag2 = true; } } else if (data.version.Length > 0 && data.version.All(char.IsNumber) && int.TryParse(data.version, out result) && result <= 2009) { flag2 = true; } if (flag2) { Log.Message("Mods config data is from version " + data.version + " while we are running " + VersionControl.CurrentVersionStringWithRev + ". Resetting."); data = new ModsConfigData(); flag = true; } } if (!File.Exists(GenFilePaths.ModsConfigFilePath) || flag) { data.activeMods.Add(ModContentPack.CoreModIdentifier); Save(); } }
static ModsConfigHandler() { Data = new ModsConfigData { buildNumber = RimWorld.VersionControl.CurrentBuild, activeMods = GetActiveMods() }; }
static ModsConfig() { bool flag = false; ModsConfig.data = DirectXmlLoader.ItemFromXmlFile <ModsConfigData>(GenFilePaths.ModsConfigFilePath, true); if (ModsConfig.data.buildNumber < VersionControl.CurrentBuild) { Log.Message("Mods config data is from build " + ModsConfig.data.buildNumber + " while we are at build " + VersionControl.CurrentBuild + ". Resetting."); ModsConfig.data = new ModsConfigData(); flag = true; } ModsConfig.data.buildNumber = VersionControl.CurrentBuild; if (File.Exists(GenFilePaths.ModsConfigFilePath) && !flag) { return; } ModsConfig.data.activeMods.Add(ModContentPack.CoreModIdentifier); ModsConfig.Save(); }
/// <summary> /// Saves or Loads the state /// </summary> /// <param name="filepath">The filepath to the state</param> private static void ExposeData(string filepath, bool useUndoAction = false) { try { if (CurrentMode == Mode.Saving) { Main.LogDebug("Saving state to {0}", filepath); Data = new ModsConfigData { buildNumber = RimWorld.VersionControl.CurrentBuild, activeMods = GetActiveMods() }; XmlSaverAPI.SaveDataObject((object)Data, filepath); } else if (CurrentMode == Mode.Loading) { Main.LogDebug("Loading state from {0}", filepath); List <string> current = new List <string>(); Data = ReadState(filepath); ClearLoadedMods(true); foreach (string modID in Data.activeMods) { ModsConfigAPI.SetActive(modID, true); } } } catch (System.Exception e) { //An error occurred, output to log and reset loaded mods Main.Log.ReportException(e, Globals.MOD_IDENTIFIER, true, "ExposeData"); ClearLoadedMods(); } }
static ModsConfig() { activeModsHashSet = new HashSet <string>(); activeModsInLoadOrderCached = new List <ModMetaData>(); bool flag = false; bool flag2 = false; data = DirectXmlLoader.ItemFromXmlFile <ModsConfigData>(GenFilePaths.ModsConfigFilePath); if (data.version != null) { bool flag3 = false; int result; if (data.version.Contains(".")) { int num = VersionControl.MinorFromVersionString(data.version); if (VersionControl.MajorFromVersionString(data.version) != VersionControl.CurrentMajor || num != VersionControl.CurrentMinor) { flag3 = true; } } else if (data.version.Length > 0 && data.version.All((char x) => char.IsNumber(x)) && int.TryParse(data.version, out result) && result <= 2009) { flag3 = true; } if (flag3) { Log.Message("Mods config data is from version " + data.version + " while we are running " + VersionControl.CurrentVersionStringWithRev + ". Resetting."); data = new ModsConfigData(); flag = true; } } for (int i = 0; i < data.activeMods.Count; i++) { string packageId = data.activeMods[i]; if (ModLister.GetModWithIdentifier(packageId) == null) { ModMetaData modMetaData = ModLister.AllInstalledMods.FirstOrDefault((ModMetaData m) => m.FolderName == packageId); if (modMetaData != null) { data.activeMods[i] = modMetaData.PackageId; flag2 = true; } if (TryGetPackageIdWithoutExtraSteamPostfix(packageId, out var nonSteamPackageId) && ModLister.GetModWithIdentifier(nonSteamPackageId) != null) { data.activeMods[i] = nonSteamPackageId; } } } HashSet <string> hashSet = new HashSet <string>(); foreach (ModMetaData allInstalledMod in ModLister.AllInstalledMods) { if (allInstalledMod.Active) { if (hashSet.Contains(allInstalledMod.PackageIdNonUnique)) { allInstalledMod.Active = false; Log.Warning("There was more than one enabled instance of mod with PackageID: " + allInstalledMod.PackageIdNonUnique + ". Disabling the duplicates."); continue; } hashSet.Add(allInstalledMod.PackageIdNonUnique); } if (!allInstalledMod.IsCoreMod && allInstalledMod.Official && IsExpansionNew(allInstalledMod.PackageId)) { SetActive(allInstalledMod.PackageId, active: true); AddKnownExpansion(allInstalledMod.PackageId); flag2 = true; } } if (!File.Exists(GenFilePaths.ModsConfigFilePath) || flag) { Reset(); } else if (flag2) { Save(); } RecacheActiveMods(); }