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); }
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)); } }