public Character(PacketReader reader) { GUID = reader.ReadUInt64(); Name = reader.ReadCString(); Race = reader.ReadByte(); Class = reader.ReadByte(); Gender = (Gender)reader.ReadByte(); Bytes = reader.ReadBytes(5); Level = reader.ReadByte(); ZoneId = reader.ReadUInt32(); MapId = reader.ReadUInt32(); X = reader.ReadSingle(); Y = reader.ReadSingle(); Z = reader.ReadSingle(); GuildId = reader.ReadUInt32(); Flags = reader.ReadUInt32(); reader.ReadUInt32(); reader.ReadByte(); PetInfoId = reader.ReadUInt32(); PetLevel = reader.ReadUInt32(); PetFamilyId = reader.ReadUInt32(); for (int i = 0; i < Items.Length - 1; ++i) Items[i] = new Item(reader); for (int i = 0; i < 4; ++i) { reader.ReadUInt32(); reader.ReadByte(); reader.ReadUInt32(); } }
void HandleServerAuthChallenge(PacketReader reader) { uint one = reader.ReadUInt32(); uint seed = reader.ReadUInt32(); BigInteger seed1 = reader.ReadBytes(16).ToBigInteger(); BigInteger seed2 = reader.ReadBytes(16).ToBigInteger(); var rand = System.Security.Cryptography.RandomNumberGenerator.Create(); byte[] bytes = new byte[4]; rand.GetBytes(bytes); BigInteger _seed = bytes.ToBigInteger(); uint zero = 0; byte[] response = HashAlgorithm.SHA1.Hash(Encoding.ASCII.GetBytes(Manager.m_WorldServer.username.ToUpper()), BitConverter.GetBytes(zero), BitConverter.GetBytes((uint)_seed), BitConverter.GetBytes(seed), Manager.m_WorldServer.SessionKey.ToCleanByteArray()); PacketWriter writer = new PacketWriter(Opcodes.ClientAuthSession); writer.Write((uint)12340); writer.Write(zero); writer.Write(Manager.m_WorldServer.username.ToUpper().ToCString()); writer.Write(zero); writer.Write((uint)_seed); writer.Write(zero); writer.Write(zero); writer.Write(zero); writer.Write((ulong)zero); writer.Write(response); writer.Write(zero); Send(writer); AuthenticationCrypto.Initialize(Manager.m_WorldServer.SessionKey.ToCleanByteArray()); }