Example #1
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();
            }
        }
Example #2
0
 public static bool IsSaveCompatibleWith(string version)
 {
     if (VersionControl.BuildFromVersionString(version) == VersionControl.CurrentBuild)
     {
         return(true);
     }
     if (VersionControl.MajorFromVersionString(version) == 0 && VersionControl.CurrentMajor == 0)
     {
         int num          = VersionControl.MinorFromVersionString(version);
         int currentMinor = VersionControl.CurrentMinor;
         for (int i = 0; i < BackCompatibility.SaveCompatibleMinorVersions.Length; i++)
         {
             if (BackCompatibility.SaveCompatibleMinorVersions[i].First == num && BackCompatibility.SaveCompatibleMinorVersions[i].Second == currentMinor)
             {
                 return(true);
             }
         }
         return(false);
     }
     return(false);
 }
        public IEnumerable <Thing> ThingsToSpawnAfterLoad()
        {
            Dictionary <ushort, ThingDef> thingDefsByShortHash = new Dictionary <ushort, ThingDef>();

            foreach (ThingDef current in DefDatabase <ThingDef> .AllDefs)
            {
                if (thingDefsByShortHash.ContainsKey(current.shortHash))
                {
                    Log.Error(string.Concat(new object[]
                    {
                        "Hash collision between ",
                        current,
                        " and  ",
                        thingDefsByShortHash[current.shortHash],
                        ": both have short hash ",
                        current.shortHash
                    }), false);
                }
                else
                {
                    thingDefsByShortHash.Add(current.shortHash, current);
                }
            }
            int          major     = VersionControl.MajorFromVersionString(ScribeMetaHeaderUtility.loadedGameVersion);
            int          minor     = VersionControl.MinorFromVersionString(ScribeMetaHeaderUtility.loadedGameVersion);
            List <Thing> loadables = new List <Thing>();

            MapSerializeUtility.LoadUshort(this.compressedData, this.map, delegate(IntVec3 c, ushort val)
            {
                if (val == 0)
                {
                    return;
                }
                ThingDef thingDef = BackCompatibility.BackCompatibleThingDefWithShortHash_Force(val, major, minor);
                if (thingDef == null)
                {
                    try
                    {
                        thingDef = thingDefsByShortHash[val];
                    }
                    catch (KeyNotFoundException)
                    {
                        ThingDef thingDef2 = BackCompatibility.BackCompatibleThingDefWithShortHash(val);
                        if (thingDef2 != null)
                        {
                            thingDef = thingDef2;
                            thingDefsByShortHash.Add(val, thingDef2);
                        }
                        else
                        {
                            Log.Error("Map compressor decompression error: No thingDef with short hash " + val + ". Adding as null to dictionary.", false);
                            thingDefsByShortHash.Add(val, null);
                        }
                    }
                }
                if (thingDef != null)
                {
                    try
                    {
                        Thing thing = ThingMaker.MakeThing(thingDef, null);
                        thing.SetPositionDirect(c);
                        loadables.Add(thing);
                    }
                    catch (Exception arg)
                    {
                        Log.Error("Could not instantiate compressed thing: " + arg, false);
                    }
                }
            });
            return(loadables);
        }
Example #4
0
 public bool AppliesToLoadedGameVersion(bool allowInactiveScribe = false)
 {
     if (ScribeMetaHeaderUtility.loadedGameVersion.NullOrEmpty())
     {
         return(false);
     }
     if (!allowInactiveScribe && Scribe.mode == LoadSaveMode.Inactive)
     {
         return(false);
     }
     return(AppliesToVersion(VersionControl.MajorFromVersionString(ScribeMetaHeaderUtility.loadedGameVersion), VersionControl.MinorFromVersionString(ScribeMetaHeaderUtility.loadedGameVersion)));
 }
Example #5
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();
        }
Example #6
0
 public static bool CheckSpawnBackCompatibleThingAfterLoading(Thing thing, Map map)
 {
     if (VersionControl.MajorFromVersionString(ScribeMetaHeaderUtility.loadedGameVersion) == 0 && VersionControl.MinorFromVersionString(ScribeMetaHeaderUtility.loadedGameVersion) <= 18 && thing.stackCount > thing.def.stackLimit && thing.stackCount != 1 && thing.def.stackLimit != 1)
     {
         tmpThingsToSpawnLater.Add(thing);
         return(true);
     }
     return(false);
 }