public static void JoinArena(Entities.GameClient Player)
        {
            if (Player.Battle != null)
            {
                return;
            }
            if (Player.DynamicMap != null)
            {
                return;
            }
            if (Player.ArenaMatch != null)
            {
                return;
            }

            if (PlayerQueue.Contains(Player))
            {
                Player.Arena.Status = Enums.ArenaStatus.NotSignedUp;
                using (var wait = Player.Arena.Build())
                    Player.Send(wait);

                Player.Arena.Status = Enums.ArenaStatus.WaitingForOpponent;
                using (var wait = Player.Arena.Build())
                    Player.Send(wait);
            }
            else
            {
                Player.Arena.Status = Enums.ArenaStatus.WaitingForOpponent;
                using (var wait = Player.Arena.Build())
                    Player.Send(wait);
            }
            if (MatchQueue.Count > 0)
            {
                using (var matches = new Packets.ArenaBattleInfoPacket(MatchQueue.ToDictionary().Values.ToArray()))
                {
                    matches.Page = 1;
                    matches.SetSize();
                    Player.Send(matches);
                }
            }
            PlayerQueue.Add(Player);
            uint DelayedID = 0;

            DelayedID = ProjectX_V3_Lib.Threading.DelayedTask.StartDelayedTask(() =>
            {
                if (HandleMatchUp(Player, FindMatchUp(Player)))
                {
                    ProjectX_V3_Lib.Threading.DelayedTask.Remove(DelayedID);
                }
            }, 10000, 0);
        }
示例#2
0
        /*
         * 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);
            }
            //}
        }
        public static void JoinArena(Entities.GameClient Player)
        {
            if (Player.Battle != null)
                return;
            if (Player.DynamicMap != null)
                return;
            if (Player.ArenaMatch != null)
                return;

            if (PlayerQueue.Contains(Player))
            {

                Player.Arena.Status = Enums.ArenaStatus.NotSignedUp;
                using (var wait = Player.Arena.Build())
                    Player.Send(wait);

                Player.Arena.Status = Enums.ArenaStatus.WaitingForOpponent;
                using (var wait = Player.Arena.Build())
                    Player.Send(wait);
            }
            else
            {
                Player.Arena.Status = Enums.ArenaStatus.WaitingForOpponent;
                using (var wait = Player.Arena.Build())
                    Player.Send(wait);
            }
            if (MatchQueue.Count > 0)
            {
                using (var matches = new Packets.ArenaBattleInfoPacket(MatchQueue.ToDictionary().Values.ToArray()))
                {
                    matches.Page = 1;
                    matches.SetSize();
                    Player.Send(matches);
                }
            }
            PlayerQueue.Add(Player);
            uint DelayedID = 0;
            DelayedID = ProjectX_V3_Lib.Threading.DelayedTask.StartDelayedTask(() =>
                                                                               {
                                                                               	if (HandleMatchUp(Player, FindMatchUp(Player)))
                                                                               	{
                                                                               		ProjectX_V3_Lib.Threading.DelayedTask.Remove(DelayedID);
                                                                               	}
                                                                               }, 10000, 0);
        }
        /*
            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);
            }
            //}
        }