示例#1
0
 public static void LoadGameDataHeader(ScribeMetaHeaderUtility.ScribeHeaderMode mode, bool logVersionConflictWarning)
 {
     ScribeMetaHeaderUtility.loadedGameVersion  = "Unknown";
     ScribeMetaHeaderUtility.loadedModIdsList   = null;
     ScribeMetaHeaderUtility.loadedModNamesList = null;
     ScribeMetaHeaderUtility.lastMode           = mode;
     if (Scribe.mode != LoadSaveMode.Inactive && Scribe.EnterNode("meta"))
     {
         try
         {
             Scribe_Values.Look <string>(ref ScribeMetaHeaderUtility.loadedGameVersion, "gameVersion", null, false);
             Scribe_Collections.Look <string>(ref ScribeMetaHeaderUtility.loadedModIdsList, "modIds", LookMode.Undefined, new object[0]);
             Scribe_Collections.Look <string>(ref ScribeMetaHeaderUtility.loadedModNamesList, "modNames", LookMode.Undefined, new object[0]);
         }
         finally
         {
             Scribe.ExitNode();
         }
     }
     if (logVersionConflictWarning && (mode == ScribeMetaHeaderUtility.ScribeHeaderMode.Map || !UnityData.isEditor) && !ScribeMetaHeaderUtility.VersionsMatch())
     {
         Log.Warning(string.Concat(new object[]
         {
             "Loaded file (",
             mode,
             ") is from version ",
             ScribeMetaHeaderUtility.loadedGameVersion,
             ", we are running version ",
             VersionControl.CurrentVersionStringWithRev,
             "."
         }), false);
     }
 }
示例#2
0
 public static void CheckVersionAndLoad(string path, ScribeMetaHeaderUtility.ScribeHeaderMode mode, Action loadAct)
 {
     try
     {
         Scribe.loader.InitLoadingMetaHeaderOnly(path);
         ScribeMetaHeaderUtility.LoadGameDataHeader(mode, logVersionConflictWarning: false);
         Scribe.loader.FinalizeLoading();
     }
     catch (Exception ex)
     {
         Log.Warning("Exception loading " + path + ": " + ex);
         Scribe.ForceStop();
     }
     if (!ScribeMetaHeaderUtility.TryCreateDialogsForVersionMismatchWarnings(loadAct))
     {
         loadAct();
     }
 }
示例#3
0
        internal static void _CheckVersionAndLoad(string path, ScribeMetaHeaderUtility.ScribeHeaderMode mode, Action loadAct)
        {
            bool mismatchWarnings;

            try
            {
                try
                {
                    Scribe.InitLoadingMetaHeaderOnly(path);
                }
                catch (Exception ex)
                {
                    Log.Warning(string.Concat(new object[4]
                    {
                        (object)"Exception loading ",
                        (object)path,
                        (object)": ",
                        (object)ex
                    }));
                }
                ScribeMetaHeaderUtility.LoadGameDataHeader(mode, false);
                mismatchWarnings = ScribeMetaHeaderUtility.TryCreateDialogsForVersionMismatchWarnings(loadAct);
                CrossRefResolver.ResolveAllCrossReferences();
                PostLoadInitter.DoAllPostLoadInits();
            }
            catch
            {
                CrossRefResolver.Clear();
                PostLoadInitter.Clear();
                throw;
            }
            Controller.Data.ResetInjectionSubController();
            if (mismatchWarnings)
            {
                return;
            }
            loadAct();
        }
示例#4
0
 public static void CheckVersionAndLoad(string path, ScribeMetaHeaderUtility.ScribeHeaderMode mode, Action loadAct)
 {
     try
     {
         Scribe.loader.InitLoadingMetaHeaderOnly(path);
         ScribeMetaHeaderUtility.LoadGameDataHeader(mode, false);
         Scribe.loader.FinalizeLoading();
     }
     catch (Exception ex)
     {
         Log.Warning(string.Concat(new object[]
         {
             "Exception loading ",
             path,
             ": ",
             ex
         }), false);
         Scribe.ForceStop();
     }
     if (!ScribeMetaHeaderUtility.TryCreateDialogsForVersionMismatchWarnings(loadAct))
     {
         loadAct();
     }
 }
        public static bool Prefix(bool __result, Action confirmedAction, ScribeMetaHeaderUtility.ScribeHeaderMode ___lastMode)
        {
            string message = null;
            string title   = null;

            if (!BackCompatibility.IsSaveCompatibleWith(ScribeMetaHeaderUtility.loadedGameVersion) &&
                // ScribeMetaHeaderUtility.VersionsMatch is private, it's component parts are not...
                VersionControl.BuildFromVersionString(ScribeMetaHeaderUtility.loadedGameVersion) != VersionControl.BuildFromVersionString(VersionControl.CurrentVersionStringWithRev))
            {
                title = "VersionMismatch".Translate();
                var loadedVersion = !ScribeMetaHeaderUtility.loadedGameVersion.NullOrEmpty() ? ScribeMetaHeaderUtility.loadedGameVersion : ("(" + "UnknownLower".Translate() + ")");
                switch (___lastMode)
                {
                case ScribeMetaHeaderUtility.ScribeHeaderMode.Map:
                    message = "SaveGameIncompatibleWarningText".Translate(loadedVersion, VersionControl.CurrentVersionString);
                    break;

                case ScribeMetaHeaderUtility.ScribeHeaderMode.World:
                    message = "WorldFileVersionMismatch".Translate(loadedVersion, VersionControl.CurrentVersionString);
                    break;

                default:
                    message = "FileIncompatibleWarning".Translate(loadedVersion, VersionControl.CurrentVersionString);
                    break;
                }
            }
            bool modMismatch = false;

            if (!ScribeMetaHeaderUtility.LoadedModsMatchesActiveMods(out string loadedMods, out string activeMods))
            {
                modMismatch = true;
                string modsMismatchMessage = "We're terribly sorry this message is so useless" + "ModsMismatchWarningText".Translate(loadedMods, activeMods);
                if (message == null)
                {
                    message = modsMismatchMessage;
                }
                else
                {
                    message = message + "\n\n" + modsMismatchMessage;
                }
                if (title == null)
                {
                    title = "ModsMismatchWarningTitle".Translate();
                }
            }
            if (message != null)
            {
                var dialog = Dialog_MessageBox.CreateConfirmation(message, confirmedAction, false, title);
                dialog.buttonAText = "LoadAnyway".Translate();

                if (modMismatch)
                {
                    dialog.buttonCText   = "ChangeLoadedMods".Translate();
                    dialog.buttonCAction = delegate()
                    {
                        // TODO: load mods from save game, mod manager style.
                        // Probably want to open the mod menu?
                        // ModsConfig.RestartFromChangedMods();
                    };
                }
                Find.WindowStack.Add(dialog);
                __result = true;
            }
            else
            {
                __result = false;
            }

            return(false);
        }