public void replaceTlkwithFile(ME1Package pcc, int Index)
{
/* converts Huffmann Tree to binary form */
byte[] treeBuffer = ConvertHuffmanTreeToBuffer();
List<EncodedString> encodedStrings = new List<EncodedString>();
int i = 0;
foreach (var entry in _inputData)
{
if (entry.Flags == 0)
{
if (entry.StringID > 0)
entry.index = -1;
else
entry.index = 0;
}
else
{
entry.index = i;
i++;
List<BitArray> binaryData = new List<BitArray>();
int binaryLength = 0;
/* for every character in a string, put it's binary code into data array */
foreach (char c in entry.data)
{
binaryData.Add(_huffmanCodes[c]);
binaryLength += _huffmanCodes[c].Count;
}
byte[] buffer = BitArrayListToByteArray(binaryData, binaryLength);
encodedStrings.Add(new EncodedString(entry.data.Length, buffer.Length, buffer));
}
}
/* get properties from object we're replacing*/
byte[] properties = pcc.Exports[Index].Data.Take(40).ToArray();
MemoryStream m = new MemoryStream();
/* writing properties */
m.Write(properties, 0, 40);
m.Seek(0x1C, SeekOrigin.Begin);
m.Write(BitConverter.GetBytes(_inputData.Count), 0, 4);
m.Seek(0, SeekOrigin.End);
/* writing entries */
m.Write(BitConverter.GetBytes(_inputData.Count), 0, 4);
foreach (TLKEntry entry in _inputData)
{
m.Write(BitConverter.GetBytes(entry.StringID), 0, 4);
m.Write(BitConverter.GetBytes(entry.Flags), 0, 4);
m.Write(BitConverter.GetBytes(entry.index), 0, 4);
}
/* writing HuffmanTree */
m.Write(treeBuffer, 0, treeBuffer.Length);
/* writing data */
m.Write(BitConverter.GetBytes(encodedStrings.Count), 0, 4);
foreach (EncodedString enc in encodedStrings)
{
m.Write(BitConverter.GetBytes(enc.stringLength), 0, 4);
m.Write(BitConverter.GetBytes(enc.encodedLength), 0, 4);
m.Write(enc.binaryData, 0, enc.encodedLength);
}
byte[] buff = m.ToArray();
pcc.Exports[Index].Data = buff;
pcc.save(pcc.FileName);
}