Еще одно доказательство дороговизны близзардовской травы: вот как теперь читается и пишется опкод CMSG_PLAYER_LOGIN:
Код:
private static int[] s_maskSeq = { 3, 4, 6, 2, 1, 7, 0, 5 };
private static int[] s_byteSeq = { 6, 4, 0, 1, 5, 7, 3, 2 };
private static int s_byteXor = 1;
public override void Read(BinaryReader reader)
{
byte[] guid = new byte[8];
BitArray src = new BitArray(new byte[] { reader.ReadByte() });
BitArray dst = new BitArray(8);
for (int i = 0; i < 8; ++i)
dst[s_maskSeq[i]] = src[i];
for (int i = 0; i < 8; ++i)
{
if (dst[s_byteSeq[i]])
guid[s_byteSeq[i]] = (byte)(reader.ReadByte() ^ s_byteXor);
}
Guid = new WowGuid(BitConverter.ToUInt64(guid, 0));
}
public override void Save(BinaryWriter writer)
{
byte mask = 0;
byte[] guid = BitConverter.GetBytes(Guid.Raw);
for (int i = 0; i < 8; ++i)
{
if (guid[s_maskSeq[i]] != 0)
mask |= (byte)(1 << i);
}
writer.Write((byte)mask);
for (int i = 0; i < 8; ++i)
{
if (guid[s_byteSeq[i]] != 0)
writer.Write((byte)(guid[s_byteSeq[i]] ^ s_byteXor));
}
}