示例#1
0
        public static void HandleBattleFieldStatusRequest(IRealmClient client, RealmPacketIn packet)
        {
            Character activeCharacter = client.ActiveCharacter;

            if (!activeCharacter.Battlegrounds.IsEnqueuedForBattleground)
            {
                return;
            }
            BattlegroundRelation[] relations = activeCharacter.Battlegrounds.Relations;
            int length = activeCharacter.Battlegrounds.Relations.Length;

            for (int index = 0; index < length; ++index)
            {
                BattlegroundRelation relation = relations[index];
                if (relation != null)
                {
                    if (relation.IsEnqueued)
                    {
                        SendStatusEnqueued(activeCharacter, index, relation,
                                           relation.Queue.ParentQueue);
                    }
                    else if (activeCharacter.Map is Battleground &&
                             relation.BattlegroundId == ((Battleground)activeCharacter.Map).Template.Id)
                    {
                        SendStatusActive(activeCharacter, (Battleground)activeCharacter.Map,
                                         index);
                    }
                }
            }
        }
示例#2
0
        public static void SendStatusEnqueued(Character chr,
                                              int index,
                                              BattlegroundRelation relation,
                                              BattlegroundQueue queue)
        {
            var status = BattlegroundStatus.Enqueued;

            using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_BATTLEFIELD_STATUS))
            {
                packet.Write(index);

                var bgId = queue.Template.Id;

                // 64-bit guid start
                packet.Write((byte)ArenaType.None);
                packet.Write((byte)1);              // affects level range calculation?
                packet.Write((uint)bgId);
                packet.Write((ushort)8080);
                // 64-bit guid stop

                packet.Write((byte)0);              // since 3.3
                packet.Write((byte)0);              // since 3.3
                packet.Write(queue.InstanceId);     // instance id
                packet.Write(false);                // bool isRatedMatch
                packet.Write((int)status);

                packet.Write(queue.AverageWaitTime);                     // avg wait time for queue, in ms
                packet.Write((int)relation.QueueTime.TotalMilliseconds); // time in the queue, also in ms

                chr.Send(packet);
            }
        }
示例#3
0
        public static void SendStatusEnqueued(Character chr, int index, BattlegroundRelation relation,
                                              BattlegroundQueue queue)
        {
            BattlegroundStatus battlegroundStatus = BattlegroundStatus.Enqueued;

            using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.SMSG_BATTLEFIELD_STATUS))
            {
                packet.Write(index);
                BattlegroundId id = queue.Template.Id;
                packet.Write((byte)0);
                packet.Write((byte)1);
                packet.Write((uint)id);
                packet.Write((ushort)8080);
                packet.Write((byte)0);
                packet.Write((byte)0);
                packet.Write(queue.InstanceId);
                packet.Write(false);
                packet.Write((int)battlegroundStatus);
                packet.Write(queue.AverageWaitTime);
                packet.Write((int)relation.QueueTime.TotalMilliseconds);
                chr.Send(packet, false);
            }
        }