Пример #1
0
        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();
            }
        }
Пример #2
0
        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());
        }