UE_ <int> Read_UE_Int32(ValueInfo value_info)
        {
            int value;

            if (value_info.position == PositionToken.Normal)
            {
                var terminator = reader.ReadByte();
                if (terminator != 0)
                {
                    throw new FormatException($"Offset: 0x{reader.BaseStream.Position - 1:X8}. Expected terminator (0x00), but was (0x{terminator:X2})");
                }
                if (value_info.length != SerializationConstant.I64_Size_IntProperty)
                {
                    throw new FormatException($"Expected int value of length {SerializationConstant.I64_Size_IntProperty}, but was {value_info.length}");
                }
                value = reader.ReadInt32();
            }
            else if (value_info.position == PositionToken.InsideArray)
            {
                value = reader.ReadInt32();
            }
            else
            {
                throw new NotImplementedException(value_info.position.ToString());
            }
            return(new UE_ <int>(value_info.type, value));
        }
 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);
     }
 }
Пример #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);
        }