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