UE_Map Read_UE_Map(ValueInfo value_info)
        {
            string key_type         = reader.ReadString();
            string value_type       = reader.ReadString();
            long   unknown_position = reader.BaseStream.Position;
            var    unknown          = reader.ReadBytes(5);

            if (unknown.Any(b => b != 0))
            {
                throw new InvalidOperationException($"Offset 0x{unknown_position:X8}: the 5 bytes are expected to be all 0. I cannot do json to gvas conversion in this case.");
            }
            int count = reader.ReadInt32();
            List <UE_Map_KeyValuePair> content = new List <UE_Map_KeyValuePair>();
            ValueInfo value_info_temp          = new ValueInfo();

            value_info_temp.length   = -1;
            value_info_temp.position = PositionToken.InsideMap;
            for (int i = 0; i < count; i++)
            {
                value_info_temp.type = key_type;
                UE_Value key = Read_UE_Value(value_info_temp);
                value_info_temp.type = value_type;
                UE_Value value = Read_UE_Value(value_info_temp);
                content.Add(new UE_Map_KeyValuePair(key, value));
            }
            return(new UE_Map(value_info.type, key_type, value_type, count, content));
        }
Beispiel #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);
        }