Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
0
        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;
            }
        }