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); } }
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); }