private void Inject(ArchiveListing listing, ArchiveEntry entry, Dictionary <String, String> sourceEntries, Stream output)
        {
            ZtrFileType type = ZtrFileType.LittleEndianUncompressedDictionary;

            ZtrFileEntry[] targetEntries;
            using (Stream original = listing.Accessor.ExtractBinary(entry))
            {
                ZtrFileUnpacker unpacker = new ZtrFileUnpacker(original, InteractionService.TextEncoding.Provide().Encoding);
                targetEntries = unpacker.Unpack();

                if (InteractionService.GamePart == FFXIIIGamePart.Part2)
                {
                    if (entry.Name.StartsWith("txtres/resident/system/txtres_", StringComparison.InvariantCultureIgnoreCase))
                    {
                        type = ZtrFileType.BigEndianCompressedDictionary;
                    }
                }
            }

            MergeEntries(sourceEntries, targetEntries);

            ZtrFilePacker packer = new ZtrFilePacker(output, InteractionService.TextEncoding.Provide().Encoding, type);

            packer.Pack(targetEntries);
        }
Exemplo n.º 2
0
        public ZtrFileEntry[] Unpack()
        {
            if (_input.Length < 5)
            {
                return(new ZtrFileEntry[0]);
            }

            Type = (ZtrFileType)_br.ReadInt32();
            switch (Type)
            {
            case ZtrFileType.LittleEndianUncompressedPair:
                return(ExtractLittleEndianUncompressedPair());

            case ZtrFileType.BigEndianCompressedDictionary:
                return(ExtractBigEndianCompressedDictionary());

            default:
                return(ExtractLittleEndianUncompressedDictionary((int)Type));
            }
        }