public static HashSet <int> GetAllHashesFromResourceMetas(string gameDirectoryName) { var hashes = new HashSet <int>(); ArchiveUtilities.ForEachResourceFile(gameDirectoryName, (fullFileName, file, encryption) => { if (file.Name.EndsWith(ResourceFileTypes_GTA5_pc.Meta.Extension, StringComparison.OrdinalIgnoreCase) || file.Name.EndsWith(ResourceFileTypes_GTA5_pc.Types.Extension, StringComparison.OrdinalIgnoreCase) || file.Name.EndsWith(ResourceFileTypes_GTA5_pc.Maps.Extension, StringComparison.OrdinalIgnoreCase) ) { var stream = new MemoryStream(); file.Export(stream); stream.Position = 0; var resource = new ResourceFile_GTA5_pc <MetaFile>(); resource.Load(stream); var meta = resource.ResourceData; if (meta.StructureInfos != null) { foreach (var structureInfo in meta.StructureInfos) { hashes.Add(structureInfo.StructureKey); hashes.Add(structureInfo.StructureNameHash); foreach (var structureEntryInfo in structureInfo.Entries) { if (structureEntryInfo.EntryNameHash != 0x100) { hashes.Add(structureEntryInfo.EntryNameHash); } } } } if (meta.EnumInfos != null) { foreach (var enumInfo in meta.EnumInfos) { hashes.Add(enumInfo.EnumKey); hashes.Add(enumInfo.EnumNameHash); foreach (var enumEntryInfo in enumInfo.Entries) { hashes.Add(enumEntryInfo.EntryNameHash); } } } Console.WriteLine(file.Name); } }); return(hashes); }
public static Tuple <Dictionary <int, StructureInfo>, Dictionary <int, EnumInfo> > GetAllStructureInfoAndEnumInfoFromMetas(string gameDirectoryName) { Dictionary <int, StructureInfo> structureInfos = new Dictionary <int, StructureInfo>(); Dictionary <int, EnumInfo> enumInfos = new Dictionary <int, EnumInfo>(); ArchiveUtilities.ForEachResourceFile(gameDirectoryName, (fullFileName, file, encryption) => { if (file.Name.EndsWith(ResourceFileTypes_GTA5_pc.Meta.Extension, StringComparison.OrdinalIgnoreCase) || file.Name.EndsWith(ResourceFileTypes_GTA5_pc.Types.Extension, StringComparison.OrdinalIgnoreCase) || file.Name.EndsWith(ResourceFileTypes_GTA5_pc.Maps.Extension, StringComparison.OrdinalIgnoreCase) ) { var stream = new MemoryStream(); file.Export(stream); stream.Position = 0; var resource = new ResourceFile_GTA5_pc <MetaFile>(); resource.Load(stream); var meta = resource.ResourceData; if (meta.StructureInfos != null) { foreach (var structureInfo in meta.StructureInfos) { structureInfos.TryAdd(structureInfo.StructureKey, structureInfo); } } if (meta.EnumInfos != null) { foreach (var enumInfo in meta.EnumInfos) { enumInfos.TryAdd(enumInfo.EnumKey, enumInfo); } } Console.WriteLine(file.Name); } }); return(new Tuple <Dictionary <int, StructureInfo>, Dictionary <int, EnumInfo> >(structureInfos, enumInfos)); }