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); } } } }
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); } }
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); } }