Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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));
        }