Exemple #1
0
        /// <summary>
        /// Handles all packets received by the game auth server.
        /// </summary>
        /// <param name="client">The socket client.</param>
        /// <param name="Packet">The packet.</param>
        /// <returns>ALWAYS returns false.</returns>
        private static bool HandlePacket(SocketClient client, DataPacket Packet)
        {
            if (Packet.PacketID == 9001)
            {
                if (Packet.ReadString(4, 16) == Program.Config.ReadString("ServerPassword"))
                {
                    string Account = Packet.ReadString(20, 16);
                    int DatabaseUID = Packet.ReadInt32(36);
                    if (DatabaseUID == 0)
                        return false;
                    uint EntityUID = Packet.ReadUInt32(40);
                    if (EntityUID == 0)
                        return false;

                    if (Core.Kernel.Clients.Contains(EntityUID))
                    {
                        UIDCollection.TryRemove(EntityUID);
                        return false;
                    }

                    if (UIDCollection.Contains(EntityUID))
                    {
                        int secondkey;
                        if (UIDCollection.TryGetSecondKey(EntityUID, out secondkey))
                        {
                            if (DatabaseUID == secondkey)
                                UIDCollection.TryRemove(EntityUID);
                        }
                        return false;
                    }

                    if (UIDCollection.Contains(DatabaseUID))
                    {
                        uint firstkey;
                        if (UIDCollection.TryGetFirstKey(DatabaseUID, out firstkey))
                        {
                            UIDCollection.TryRemove(DatabaseUID);
                        }
                    }

                    UIDCollection.TryAdd(EntityUID, DatabaseUID, DateTime.Now.AddMinutes(10));
                    //	return false;
                }
            }
            return false;
        }
        /*
            MemoryStream strm = new MemoryStream();
            BinaryWriter wtr = new BinaryWriter(strm);
            wtr.Write((ushort)0); 0
            wtr.Write((ushort)2206); 2
            wtr.Write((uint)page); 4
            wtr.Write((uint)0x6); 8
            wtr.Write((uint)Matches.Count); 12
            wtr.Write((uint)PlayersInWaiting.Count); 16
            wtr.Write((uint)0); 20
            page--;
            wtr.Write((uint)(Matches.Count - page)); 24
            QualifierMatch[] GroupsList = Matches.ToArray();
            for (int count = page; count < page + 6; count++)
            {
                if (count >= Matches.Count)
                    break;

                QualifierMatch entry = GroupsList[count];

                wtr.Write((uint)entry.Player1.UID);
                wtr.Write((uint)entry.Player1.Mesh);
                for (int i = 0; i < 16; i++)
                {
                    if (i < entry.Player1.Name.Length)
                    {
                        wtr.Write((byte)entry.Player1.Name[i]);
                    }
                    else
                        wtr.Write((byte)0);
                }

                wtr.Write((uint)entry.Player1.Level);
                wtr.Write((uint)entry.Player1.Profession);
                wtr.Write((uint)0);
                wtr.Write((uint)entry.Player1.ArenaStats.Rank);
                wtr.Write((uint)entry.Player1.ArenaStats.ArenaPoints);
                wtr.Write((uint)entry.Player1.ArenaStats.WinsToday);
                wtr.Write((uint)entry.Player1.ArenaStats.LossesToday);
                wtr.Write((uint)entry.Player1.ArenaStats.CurrentHonor);
                wtr.Write((uint)entry.Player1.ArenaStats.TotalHonor);

                wtr.Write((uint)entry.Player2.UID);
                wtr.Write((uint)entry.Player2.Mesh);
                for (int i = 0; i < 16; i++)
                {
                    if (i < entry.Player2.Name.Length)
                    {
                        wtr.Write((byte)entry.Player2.Name[i]);
                    }
                    else
                        wtr.Write((byte)0);
                }

                wtr.Write((uint)entry.Player2.Level);
                wtr.Write((uint)entry.Player2.Profession);
                wtr.Write((uint)0);
                wtr.Write((uint)entry.Player2.ArenaStats.Rank);
                wtr.Write((uint)entry.Player2.ArenaStats.ArenaPoints);
                wtr.Write((uint)entry.Player2.ArenaStats.WinsToday);
                wtr.Write((uint)entry.Player2.ArenaStats.LossesToday);
                wtr.Write((uint)entry.Player2.ArenaStats.CurrentHonor);
                wtr.Write((uint)entry.Player2.ArenaStats.TotalHonor);
            }
            int packetlength = (int)strm.Length;
            strm.Position = 0;
            wtr.Write((ushort)packetlength);
            strm.Position = strm.Length;
            wtr.Write(Encoding.ASCII.GetBytes("TQServer"));
            strm.Position = 0;
            byte[] buf = new byte[strm.Length];
            strm.Read(buf, 0, buf.Length);
            wtr.Close();
            strm.Close();*/
        public static void Handle(Entities.GameClient client, DataPacket packet)
        {
            //if (Data.ArenaQualifier.MatchQueue.Count > 0)
            //{
            Data.ArenaMatch[] matchesArray = null;
            if (Data.ArenaQualifier.MatchQueue.Count > 0)
            {
                matchesArray = Data.ArenaQualifier.MatchQueue.ToDictionary().Values.ToArray();

                if (matchesArray.Length > 10)
                    Array.Resize(ref matchesArray, 10);
            }
            using (var matches = new Packets.ArenaBattleInfoPacket(matchesArray))
            {
                matches.Page = packet.ReadUInt32(4);
                matches.SetSize();
                client.Send(matches);
            }
            //}
        }