public static Gvas ReadGvas(Stream stream)
 {
     using (var reader = new UE_BinaryReader(stream, true))
     {
         int type_tag = reader.ReadInt32();
         if (type_tag != GvasFormat.SaveGameHeader.UE4_SAVEGAME_FILE_TYPE_TAG)
         {
             throw new NotSupportedException("Only `GVAS` file is supported.");
         }
         var result = new Gvas();
         //
         result.Header = SaveGameHeader.Read(reader);
         //
         var list           = new List <UE_Property>();
         var ue_prop_reader = new UE_Property_Reader(reader);
         while (ue_prop_reader.Read() is UE_Property prop)
         {
             if (prop is UE_None)
             {
                 break;
             }
             list.Add(prop);
         }
         result.PropertyList = list;
         //
         return(result);
     }
 }
Esempio n. 2
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);
        }
 internal UE_Property_Reader(UE_BinaryReader reader)
 {
     this.reader = reader;
 }