static GvasFormat.SaveGameHeader SaveGameHeader(JsonReader reader)
            {
                var _R = new GvasFormat.SaveGameHeader();

                reader.AssertReadToken(JsonToken.StartObject);
                _R.FileTypeTag           = reader.AssertReadPropertyNameValue <int>(JsonNaming.SaveGameHeader.FileTypeTag);
                _R.SaveGameFileVersion   = reader.AssertReadPropertyNameValue <int>(JsonNaming.SaveGameHeader.SaveGameFileVersion);
                _R.PackageFileUE4Version = reader.AssertReadPropertyNameValue <int>(JsonNaming.SaveGameHeader.PackageFileUE4Version);
                reader.AssertReadPropertyName(JsonNaming.SaveGameHeader.SavedEngineVersion);
                {
                    _R.SavedEngineVersion = new EngineVersion();
                    reader.AssertReadToken(JsonToken.StartObject);
                    _R.SavedEngineVersion.Major      = reader.AssertReadPropertyNameValue <UInt16>(JsonNaming.SaveGameHeader.EngineVersion.Major);
                    _R.SavedEngineVersion.Minor      = reader.AssertReadPropertyNameValue <UInt16>(JsonNaming.SaveGameHeader.EngineVersion.Minor);
                    _R.SavedEngineVersion.Patch      = reader.AssertReadPropertyNameValue <UInt16>(JsonNaming.SaveGameHeader.EngineVersion.Patch);
                    _R.SavedEngineVersion.ChangeList = reader.AssertReadPropertyNameValue <UInt32>(JsonNaming.SaveGameHeader.EngineVersion.ChangeList);
                    _R.SavedEngineVersion.Branch     = reader.AssertReadPropertyNameValue <string>(JsonNaming.SaveGameHeader.EngineVersion.Branch);
                    reader.AssertReadToken(JsonToken.EndObject);
                }
                _R.CustomVersionFormat = reader.AssertReadPropertyNameValue <int>(JsonNaming.SaveGameHeader.CustomVersionFormat);
                reader.AssertReadPropertyName(JsonNaming.SaveGameHeader.CustomVersions);
                {
                    reader.AssertReadToken(JsonToken.StartObject);
                    reader.AssertReadPropertyNameValue <int>(JsonNaming.SaveGameHeader.CustomVersionContainer.Count);
                    reader.AssertReadPropertyName(JsonNaming.SaveGameHeader.CustomVersionContainer.Versions);
                    var version_list = new List <CustomVersion>();
                    reader.AssertReadToken(JsonToken.StartArray);
                    while (true)
                    {
                        var token = reader.AssertRead();
                        if (token == JsonToken.StartObject)
                        {
                            string key_string = reader.AssertReadPropertyNameValue <string>(JsonNaming.SaveGameHeader.CustomVersion.Key);
                            Guid   key        = Guid.Parse(key_string);
                            int    version    = reader.AssertReadPropertyNameValue <int>(JsonNaming.SaveGameHeader.CustomVersion.Version);
                            reader.AssertReadToken(JsonToken.EndObject);
                            var _ver = new CustomVersion();
                            _ver.Key     = key;
                            _ver.Version = version;
                            version_list.Add(_ver);
                        }
                        else if (token == JsonToken.EndArray)
                        {
                            break;
                        }
                        else
                        {
                            throw new FormatException();
                        }
                    }
                    reader.AssertReadToken(JsonToken.EndObject);
                    _R.CustomVersions          = new CustomVersionContainer();
                    _R.CustomVersions.Count    = version_list.Count;
                    _R.CustomVersions.Versions = version_list.ToArray();
                }
                _R.SaveGameClassName = reader.AssertReadPropertyNameValue <string>(JsonNaming.SaveGameHeader.SaveGameClassName);
                reader.AssertReadToken(JsonToken.EndObject);
                return(_R);
            }
            public static GvasFormat.Gvas Gvas(JsonReader reader)
            {
                reader.AssertReadToken(JsonToken.StartObject);

                reader.AssertReadPropertyName(JsonNaming.Gvas.Header);
                GvasFormat.SaveGameHeader header = Read.SaveGameHeader(reader);

                reader.AssertReadPropertyName(JsonNaming.Gvas.Content);
                List <UE_Property> content = Read.Object_as_PropertyList(reader);

                reader.AssertReadToken(JsonToken.EndObject);

                return(new Gvas()
                {
                    Header = header,
                    PropertyList = content
                });
            }
Пример #3
0
        internal static GvasFormat.SaveGameHeader Read(UE_BinaryReader reader)
        {
            var result = new GvasFormat.SaveGameHeader();

            result.FileTypeTag = GvasFormat.SaveGameHeader.UE4_SAVEGAME_FILE_TYPE_TAG;
            {
                result.SaveGameFileVersion   = reader.ReadInt32();
                result.PackageFileUE4Version = reader.ReadInt32();
            }
            //
            var engine_version = new EngineVersion();

            {
                engine_version.Major      = reader.ReadUInt16();
                engine_version.Minor      = reader.ReadUInt16();
                engine_version.Patch      = reader.ReadUInt16();
                engine_version.ChangeList = reader.ReadUInt32();
                engine_version.Branch     = reader.ReadString();
            }
            result.SavedEngineVersion = engine_version;
            //
            result.CustomVersionFormat = reader.ReadInt32();
            //
            var version_container = new CustomVersionContainer();

            {
                version_container.Count    = reader.ReadInt32();
                version_container.Versions = new CustomVersion[version_container.Count];
                for (var i = 0; i < version_container.Count; i++)
                {
                    var version = new CustomVersion();
                    {
                        version.Key     = new Guid(reader.ReadBytes(16));
                        version.Version = reader.ReadInt32();
                    }
                    version_container.Versions[i] = version;
                }
            }
            result.CustomVersions = version_container;
            //
            result.SaveGameClassName = reader.ReadString();
            return(result);
        }
Пример #4
0
 internal static void Write(UE_BinaryWriter writer, GvasFormat.SaveGameHeader header)
 {
     writer.Write(header.FileTypeTag);
     writer.Write(header.SaveGameFileVersion);
     writer.Write(header.PackageFileUE4Version);
     //
     writer.Write(header.SavedEngineVersion.Major);
     writer.Write(header.SavedEngineVersion.Minor);
     writer.Write(header.SavedEngineVersion.Patch);
     writer.Write(header.SavedEngineVersion.ChangeList);
     writer.Write(header.SavedEngineVersion.Branch);
     //
     writer.Write(header.CustomVersionFormat);
     writer.Write(header.CustomVersions.Count);
     for (int i = 0; i < header.CustomVersions.Versions.Length; i++)
     {
         var v   = header.CustomVersions.Versions[i];
         var bin = v.Key.ToByteArray();
         writer.Write(bin, 0, bin.Length);
         writer.Write(v.Version);
     }
     //
     writer.Write(header.SaveGameClassName);
 }