示例#1
0
            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;
                }
            }
示例#2
0
        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();
            }
        }
示例#3
0
 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();
        }
示例#5
0
        /// <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();
            }
        }
示例#6
0
        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();
        }