Esempio n. 1
0
        private List <IMetaValue> ReadBlock(DataBlock_GTA5_pc block, CreateMetaValueDelegate CreateMetaValue)
        {
            var result = new List <IMetaValue>();
            var reader = new DataReader(new MemoryStream(ToBytes(block.Data)));

            while (reader.Position < reader.Length)
            {
                var value = CreateMetaValue();
                value.Read(reader);
                result.Add(value);
            }
            return(result);
        }
Esempio n. 2
0
        public Meta_GTA5_pc Build(IMetaValue value)
        {
            MetaInitialize();
            MetaBuildStructuresAndEnums();

            var writer = new MetaDataWriter();

            writer.SelectBlockByNameHash(((MetaStructure)value).info.StructureNameHash);
            WriteStructure(writer, (MetaStructure)value);

            for (int k = meta.StructureInfos.Count - 1; k >= 0; k--)
            {
                if (!usedStructureKeys.Contains(meta.StructureInfos[k].StructureKey))
                {
                    meta.StructureInfos.RemoveAt(k);
                }
            }

            meta.DataBlocks = new ResourceSimpleArray <DataBlock_GTA5_pc>();
            foreach (var block in writer.Blocks)
            {
                var metaDataBlock = new DataBlock_GTA5_pc();
                metaDataBlock.StructureNameHash = block.NameHash;
                metaDataBlock.Data = StreamToResourceBytes(block.Stream);
                meta.DataBlocks.Add(metaDataBlock);
            }

            for (int i = 0; i < meta.DataBlocks.Count; i++)
            {
                if (meta.DataBlocks[i].StructureNameHash == ((MetaStructure)value).info.StructureNameHash)
                {
                    meta.RootBlockIndex = i + 1;
                }
            }

            return(meta);
        }