Beispiel #1
0
        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;
                    }
                }
            }
        }
Beispiel #2
0
        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;
                    }
                }
            }
        }