public KeyResource GetKeyResource(GameEnum gameEnum, string keyfilePath)
        {
            byte[] content = _fileProvider.GetByteContentOfFile(keyfilePath);
            _fileExtensionMap = MapExtensions(gameEnum);

            KeyResource keyResource = _keyResourceBuilder.BuildKeyResource(content);

            foreach (var resourceEntryResource in keyResource.ResourceEntries)
            {
                SetResourceEntryFileInformation(resourceEntryResource);
            }

            return keyResource;
        }
        private FileExtensionMap MapExtensions(GameEnum gameEnum)
        {
            var extensionMap = new FileExtensionMap();

            if (gameEnum == GameEnum.NewerwinterNights)
            {
                extensionMap.Add(0x001, "BMP");
                extensionMap.Add(0x003, "TGA");
                extensionMap.Add(0x004, "WAV");
                extensionMap.Add(0x006, "PLT");
                extensionMap.Add(0x007, "INI");
                extensionMap.Add(0x00A, "TXT");
                extensionMap.Add(0x7D2, "MDL"); // Aurora model - not supported
                extensionMap.Add(0x7D9, "NSS");
                extensionMap.Add(0x7DA, "NCS");
                extensionMap.Add(0x7DC, "ARE");
                extensionMap.Add(0x7DD, "SET");
                extensionMap.Add(0x7DE, "IFO");
                extensionMap.Add(0x7DF, "BIC");
                extensionMap.Add(0x7E0, "WOK");
                extensionMap.Add(0x7E1, "2DA");
                extensionMap.Add(0x7E6, "TXI");
                extensionMap.Add(0x7E7, "GIT");
                extensionMap.Add(0x7E9, "UTI");
                extensionMap.Add(0x7EB, "UTC");
                extensionMap.Add(0x7ED, "DLG");
                extensionMap.Add(0x7EE, "ITP");
                extensionMap.Add(0x7F0, "UTT");
                extensionMap.Add(0x7F1, "DDS"); // Compressed texture file - not supported
                extensionMap.Add(0x7F3, "UTS");
                extensionMap.Add(0x7F4, "LTR"); // Letter-combo probability info for name generation - not supported
                extensionMap.Add(0x7F5, "GFF");
                extensionMap.Add(0x7F6, "FAC");
                extensionMap.Add(0x7F8, "UTE");
                extensionMap.Add(0x7FA, "UTD");
                extensionMap.Add(0x7FC, "UTP");
                extensionMap.Add(0x7FD, "DFT");
                extensionMap.Add(0x7FE, "GIC");
                extensionMap.Add(0x7FF, "GUI");
                extensionMap.Add(0x803, "UTM");
                extensionMap.Add(0x804, "DWK");
                extensionMap.Add(0x805, "PWK");
                extensionMap.Add(0x808, "JRL");
                extensionMap.Add(0x80A, "UTW");
                extensionMap.Add(0x80C, "SSF");
                extensionMap.Add(0x810, "NDB");
                extensionMap.Add(0x811, "PTM");
                extensionMap.Add(0x812, "PTT");
            }
            else if (gameEnum == GameEnum.Kotor || gameEnum == GameEnum.Kotor2)
            {
                extensionMap.Add(0x000, "INV");
                extensionMap.Add(0x003, "TGA");
                extensionMap.Add(0x004, "WAV");
                extensionMap.Add(0x7D2, "MDL"); // Aurora model - not supported
                extensionMap.Add(0x7D9, "NSS");
                extensionMap.Add(0x7DA, "NCS");
                extensionMap.Add(0x7DC, "ARE");
                extensionMap.Add(0x7DE, "IFO");
                extensionMap.Add(0x7DF, "BIC");
                extensionMap.Add(0x7E0, "BWM"); // ?????
                extensionMap.Add(0x7E1, "2DA");
                extensionMap.Add(0x7E6, "TXI");
                extensionMap.Add(0x7E7, "GIT");
                extensionMap.Add(0x7E8, "BTI");
                extensionMap.Add(0x7E9, "UTI");
                extensionMap.Add(0x7EA, "BTC");
                extensionMap.Add(0x7EB, "UTC");
                extensionMap.Add(0x7ED, "DLG");
                extensionMap.Add(0x7EE, "ITP");
                extensionMap.Add(0x7F0, "UTT");
                extensionMap.Add(0x7F3, "UTS");
                extensionMap.Add(0x7F4, "LTR"); // Letter-combo probability info for name generation - not supported
                extensionMap.Add(0x7F6, "FAC");
                extensionMap.Add(0x7F8, "UTE");
                extensionMap.Add(0x7FA, "UTD");
                extensionMap.Add(0x7FC, "UTP");
                extensionMap.Add(0x7FF, "GUI");
                extensionMap.Add(0x803, "UTM");
                extensionMap.Add(0x804, "BWM"); // ??????
                extensionMap.Add(0x805, "BWM"); // ??????
                extensionMap.Add(0x808, "JRL");
                extensionMap.Add(0x809, "MOD"); // MOD 1.0 - name might be incorrect
                extensionMap.Add(0x80A, "UTW");
                extensionMap.Add(0x80C, "SSF");
                extensionMap.Add(0xBBB, "PTH");
                extensionMap.Add(0xBBC, "LIP"); // ??? binary format
            }
            else
            {
                extensionMap.Add(0x001, "BMP");
                extensionMap.Add(0x002, "MVE");
                extensionMap.Add(0x004, "WAV");
                extensionMap.Add(0x005, "WFX");
                extensionMap.Add(0x006, "PLT");
                extensionMap.Add(0x3e8, "BAM");
                extensionMap.Add(0x3e9, "WED");
                extensionMap.Add(0x3ea, "CHU");
                extensionMap.Add(0x3eb, "TIS");
                extensionMap.Add(0x3ec, "MOS");
                extensionMap.Add(0x3ed, "ITM");
                extensionMap.Add(0x3ee, "SPL");
                extensionMap.Add(0x3ef, "BCS");
                extensionMap.Add(0x3f0, "IDS");
                extensionMap.Add(0x3f1, "CRE");
                extensionMap.Add(0x3f2, "ARE");
                extensionMap.Add(0x3f3, "DLG");
                extensionMap.Add(0x3f4, "2DA");
                extensionMap.Add(0x3f5, "GAM");
                extensionMap.Add(0x3f6, "STO");
                extensionMap.Add(0x3f7, "WMP");
                extensionMap.Add(0x3f8, "EFF");
                extensionMap.Add(0x3f9, "BS");
                extensionMap.Add(0x3fa, "CHR");
                extensionMap.Add(0x3fb, "VVC");
                extensionMap.Add(0x3fc, "VEF"); // ????????
                extensionMap.Add(0x3fd, "PRO");
                extensionMap.Add(0x3fe, "BIO");
                extensionMap.Add(0x404, "PVR");
                extensionMap.Add(0x44c, "BAH"); // ???????
                extensionMap.Add(0x802, "INI");
                extensionMap.Add(0x803, "SRC");
            }

            return extensionMap;
        }
 public Example(FileExtensionMap map)
 {
     this.map = map;
 }