private static void AddMapNames(Database db) { foreach (ResourceKey key in db.Keys.Where(candidate => candidate.TypeId == 0x0166038C)) { Stream stream = db.GetResourceStream(key); KeyNameMapFile keyNameMap = new KeyNameMapFile(); keyNameMap.Read(stream); foreach (KeyValuePair <UInt64, string> value in keyNameMap.Map) { UInt64 realHash = value.Value.HashFNV64(); if (realHash == value.Key) { Lookup.Files[value.Key] = value.Value; } else if ((realHash & 0x7FFFFFFFFFFFFFFF) == value.Key) { Lookup.Files[value.Key] = "*" + value.Value; } else if (value.Value.HashFNV32() == value.Key) { Lookup.Files[value.Key] = ":" + value.Value; } } } }
private void AddMapNames(DatabasePackedFile dbpf, Stream input) { foreach (DatabasePackedFile.Entry entry in dbpf.Entries.FindAll(entry => entry.Key.TypeId == 0x0166038C)) { MemoryStream memory = new MemoryStream(); input.Seek(entry.Offset, SeekOrigin.Begin); if (entry.Compressed) { byte[] decompressed = input.RefPackDecompress(); memory.Write(decompressed, 0, decompressed.Length); } else { input.Seek(entry.Offset, SeekOrigin.Begin); int left = (int)entry.DecompressedSize; byte[] data = new byte[4096]; while (left > 0) { int block = Math.Min(4096, left); input.Read(data, 0, block); memory.Write(data, 0, block); left -= block; } } memory.Seek(0, SeekOrigin.Begin); KeyNameMapFile keyNameMap = new KeyNameMapFile(); keyNameMap.Read(memory); foreach (KeyValuePair <UInt64, string> value in keyNameMap.Map) { UInt64 realHash = value.Value.HashFNV64(); if (realHash == value.Key) { Lookup.Files[value.Key] = value.Value; } else if ((realHash & 0x7FFFFFFFFFFFFFFF) == value.Key) { Lookup.Files[value.Key] = "*" + value.Value; } else if (value.Value.HashFNV32() == value.Key) { Lookup.Files[value.Key] = ":" + value.Value; } } } }