private void LoadEncodingFile() { var encodingKeyStr = mBuildConfig["encoding"].ElementAtOrDefault(1); if (encodingKeyStr == null) { throw new InvalidOperationException("Build config is missing encoding key"); } Log.Debug(string.Format("Encoding file key is {0}", encodingKeyStr)); var encodingKey = new Binary(encodingKeyStr.HexToBytes().Take(9).ToArray()); if (mIndexData.ContainsKey(encodingKey) == false) { throw new InvalidOperationException("Encoding file not found"); } var entry = mIndexData[encodingKey]; var strm = GetDataStream(entry.Index); using (var fileReader = new BinaryReader(strm.Stream, Encoding.UTF8, true)) { fileReader.BaseStream.Position = entry.Offset + 30; using (var reader = new BinaryReader(BlteGetData(fileReader, entry.Size - 30))) { reader.BaseStream.Position = 9; var numEntries = reader.ReadUInt32Be(); reader.BaseStream.Position += 5; var ofsEntries = reader.ReadUInt32Be(); reader.BaseStream.Position += ofsEntries + 32 * numEntries; for (var i = 0; i < numEntries; ++i) { var curPos = reader.BaseStream.Position; var keys = reader.ReadUInt16(); while (keys != 0) { var size = reader.ReadUInt32Be(); var md5 = reader.ReadBytes(16); var keyValues = reader.ReadBytes(keys * 16); var e = new EncodingEntry() { Size = size, Keys = new Binary[keys] }; for (var j = 0; j < keys; ++j) { var b = j * 16; e.Keys[j] = new Binary(new[] { keyValues[b], keyValues[b + 1], keyValues[b + 2], keyValues[b + 3], keyValues[b + 4], keyValues[b + 5], keyValues[b + 6], keyValues[b + 7], keyValues[b + 8], keyValues[b + 9], keyValues[b + 10], keyValues[b + 11], keyValues[b + 12], keyValues[b + 13], keyValues[b + 14], keyValues[b + 15] }); } mEncodingData.Add(new Binary(md5), e); keys = reader.ReadUInt16(); } reader.BaseStream.Position = curPos + 0x1000; } } } }
private void LoadEncodingFile() { var encodingKeyStr = mBuildConfig["encoding"].ElementAtOrDefault(1); if (encodingKeyStr == null) throw new InvalidOperationException("Build config is missing encoding key"); var encodingKey = new Binary(encodingKeyStr.HexToBytes().Take(9).ToArray()); if (mIndexData.ContainsKey(encodingKey) == false) throw new InvalidOperationException("Encoding file not found"); var entry = mIndexData[encodingKey]; var strm = GetDataStream(entry.Index); using (var fileReader = new BinaryReader(strm.Stream, Encoding.UTF8, true)) { fileReader.BaseStream.Position = entry.Offset + 30; using (var reader = new BinaryReader(BlteGetData(fileReader, entry.Size - 30))) { reader.BaseStream.Position = 9; var numEntries = reader.ReadUInt32Be(); reader.BaseStream.Position += 5; var ofsEntries = reader.ReadUInt32Be(); reader.BaseStream.Position += ofsEntries + 32 * numEntries; for (var i = 0; i < numEntries; ++i) { var keys = reader.ReadUInt16(); while (keys != 0) { var size = reader.ReadUInt32Be(); var md5 = reader.ReadBytes(16); var keyValues = reader.ReadBytes(keys * 16); var e = new EncodingEntry() { Size = size, Keys = new Binary[keys] }; for (var j = 0; j < keys; ++j) { var b = j * 16; e.Keys[j] = new Binary(new[] { keyValues[b], keyValues[b + 1], keyValues[b + 2], keyValues[b + 3],keyValues[b + 4],keyValues[b + 5],keyValues[b + 6],keyValues[b + 7], keyValues[b + 8],keyValues[b + 9],keyValues[b + 10],keyValues[b + 11],keyValues[b + 12],keyValues[b + 13],keyValues[b + 14],keyValues[b + 15] }); } mEncodingData.Add(new Binary(md5), e); keys = reader.ReadUInt16(); } try { var curb = reader.BaseStream.ReadByte(); while (curb == 0) curb = reader.BaseStream.ReadByte(); reader.BaseStream.Position -= 1; } catch (EndOfStreamException) { } } } } }