Beispiel #1
0
        static string SaveFileToJSON(string path, int gameVersion)
        {
            byte[] array = File.ReadAllBytes(path);
            MGHelper.KeyEncode(array);
            byte[] buffer = CLZF2.Decompress(array);

            StringBuilder output = new StringBuilder();

            using (JsonTextWriter writer = new JsonTextWriter(new StringWriter(output))
            {
                Formatting = Formatting.Indented
            }) {
                writer.DateFormatHandling   = DateFormatHandling.IsoDateFormat;
                writer.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
                writer.WriteStartObject();
                using (MemoryStream input = new MemoryStream(buffer)) {
                    using (BinaryReader reader = new BinaryReader(input)) {
                        string magic = new string(reader.ReadChars(4));
                        if (magic != "MGSV")
                        {
                            throw new FileLoadException("Save file does not appear to be valid! Invalid header.");
                        }
                        int num = reader.ReadInt32();
                        if (num != 1)
                        {
                            throw new FileLoadException("Save file does not appear to be valid! Invalid version number.");
                        }
                        writer.WritePropertyName("Time");
                        writer.WriteValue(DateTime.FromBinary(reader.ReadInt64()));
                        foreach (var name in new string[] { "TextJP", "TextEN", "PrevTextJP", "PrevTextEN" })
                        {
                            writer.WriteNameValue(name, reader.ReadString());
                        }
                        writer.WriteNameValue("PrevAppendState", reader.ReadBoolean());
                        int stackSize = reader.ReadInt32();
                        writer.WritePropertyName("CallStack");
                        writer.WriteStartArray();
                        for (int i = 0; i < stackSize; i++)
                        {
                            StackEntryToJSON(writer, reader);
                        }
                        writer.WriteEndArray();
                        NamedObjectToJSON(StackEntryToJSON, writer, reader, "CurrentScript");
                        MemoryToJSON(writer, input);
                        CurrentAudioToJSON(writer, input);
                        SceneToJSON(writer, input, gameVersion);
                    }
                }
                writer.WriteEndObject();
            }

            return(output.ToString());
        }