public void ReadMainSaveFromFile(string savePath) { MainSaveIsEmpty = false; MainCheckpoints.Clear(); PlayedEpisodes.Clear(); // Read and decode Data var fileContent = File.ReadAllBytes(savePath); try { MainData = JsonConverter.DecodeFileContentToJson(fileContent); RawMainSave = MainData.ToString(); } catch { MainSaveIsEmpty = true; goto SkipMain; } if (MainData["$type"] == "T_881EAB14") //opened a Bonus save instead of main { MainSaveIsEmpty = true; MainData = null; goto SkipMain; } Dictionary <string, VariableState> variables; Dictionary <string, FloatState> floats; Dictionary <string, ItemState> items; // Add regular checkpoints foreach (var checkpoint in MainData.checkpoints) { if (!IsFarewellCheckpoint(checkpoint.pointIdentifier.Value)) //ignore Farewell checkpoint data in main save { var cpFlags = new List <string>(); variables = GetCheckpointVariables(checkpoint); floats = GetCheckpointFloats(checkpoint); items = GetCheckpointItems(checkpoint); foreach (var flag in checkpoint.flags) { cpFlags.Add(flag.Value); } MainCheckpoints.Add(new Checkpoint(checkpoint, variables, cpFlags, floats, items)); } } // Add currentcheckpoint (seems to be identical to latest checkpoint...) try { var currentCpFlags = new List <string>(); foreach (var flag in MainData.currentCheckpoint.stateCheckpoint.flags) { currentCpFlags.Add(flag.Value); } variables = GetCheckpointVariables(MainData.currentCheckpoint.stateCheckpoint); floats = GetCheckpointFloats(MainData.currentCheckpoint.stateCheckpoint); items = GetCheckpointItems(MainData.currentCheckpoint.stateCheckpoint); MainCheckpoints.Add(new Checkpoint(MainData.currentCheckpoint.stateCheckpoint, variables, currentCpFlags, floats, items)); } catch (Microsoft.CSharp.RuntimeBinder.RuntimeBinderException) { MainSaveIsEmpty = true; goto SkipMain; } // Add global variables as a last checkpoint.. // hack... variables = GetCheckpointVariables(MainData); floats = GetCheckpointFloats(MainData); var globalFlags = new List <string>(); foreach (var flag in MainData.flags) { globalFlags.Add(flag.Value); } MainCheckpoints.Add(new Checkpoint(new { pointIdentifier = "Global Vars", currentObjective = MainData.currentObjective }, variables, globalFlags, floats, null)); // Fill episodeState (?) foreach (var episode in MainData.episodes) { string episodeName = episode.name; string episodeState = episode.episodeState; var isPlayed = episodeState == Consts.EpisodeStates.Finished || episodeState == Consts.EpisodeStates.InProgress; PlayedEpisodes[episodeName] = isPlayed; } SkipMain: if (File.Exists(Path.GetDirectoryName(savePath) + @"\Header.Save")) { ReadHeaderFromFile(Path.GetDirectoryName(savePath) + @"\Header.Save"); } else { Header = null; } if (File.Exists(savePath.Replace("SLOT_", "Bonus"))) { ReadFarewellSaveFromFile(Path.GetDirectoryName(savePath).Replace("SLOT_", "Bonus") + @"\Data.Save"); } else { FarewellData = null; FarewellSaveIsEmpty = true; } }
public void ReadSaveFromFile(string savePath) { SaveIsEmpty = false; Checkpoints.Clear(); PlayedEpisodes.Clear(); // Read and decode Data var fileContent = File.ReadAllBytes(savePath); try { Data = JsonConverter.DecodeFileContentToJson(fileContent); RawSave = Data.ToString(); } catch { SaveIsEmpty = true; return; } Dictionary <string, VariableState> variables; Dictionary <string, FloatState> floats; // Add regular checkpoints foreach (var checkpoint in Data.checkpoints) { var cpFlags = new List <string>(); variables = GetCheckpointVariables(checkpoint); floats = GetCheckpointFloats(checkpoint); foreach (var flag in checkpoint.flags) { cpFlags.Add(flag.Value); } Checkpoints.Add(new Checkpoint(checkpoint, variables, cpFlags, floats)); } // Add currentcheckpoint (seems to be identical to latest checkpoint...) try { var currentCpFlags = new List <string>(); foreach (var fl in Data.currentCheckpoint.stateCheckpoint.flags) { currentCpFlags.Add(fl.Value); } variables = GetCheckpointVariables(Data.currentCheckpoint.stateCheckpoint); floats = GetCheckpointFloats(Data.currentCheckpoint.stateCheckpoint); Checkpoints.Add(new Checkpoint(Data.currentCheckpoint.stateCheckpoint, variables, currentCpFlags, floats)); } catch (Microsoft.CSharp.RuntimeBinder.RuntimeBinderException) { SaveIsEmpty = true; return; } // Add global variables as a last checkpoint.. // hack... variables = GetCheckpointVariables(Data); floats = GetCheckpointFloats(Data); Checkpoints.Add(new Checkpoint(new { pointIdentifier = "Global Vars", currentObjective = Data.currentObjective }, variables, null, floats)); // Fill episodeState (?) foreach (var episode in Data.episodes) { string episodeName = episode.name; string episodeState = episode.episodeState; var isPlayed = episodeState == Consts.EpisodeStates.Finished || episodeState == Consts.EpisodeStates.InProgress; PlayedEpisodes[episodeName] = isPlayed; } if (File.Exists(Path.GetDirectoryName(savePath) + @"\Header.Save")) { ReadHeaderFromFile(Path.GetDirectoryName(savePath) + @"\Header.Save"); } else { Header = null; } }