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); } }
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(); } }
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(); }
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); }