From d435d5d5ba7040a0de16d5b97202b2e61fd03344 Mon Sep 17 00:00:00 2001 From: Shauren Date: Wed, 27 May 2020 00:29:13 +0200 Subject: Core/PacketIO: Fixed BattlefieldStatusHeader structure and QueueID values for other battleground types --- src/server/game/Battlegrounds/Battleground.cpp | 6 +++++- src/server/game/Battlegrounds/Battleground.h | 9 +++++++++ src/server/game/Battlegrounds/BattlegroundMgr.cpp | 2 +- src/server/game/Server/Packets/BattlegroundPackets.cpp | 5 ++++- src/server/game/Server/Packets/BattlegroundPackets.h | 2 +- 5 files changed, 20 insertions(+), 4 deletions(-) (limited to 'src/server') diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index 14c0a8b0d9e..3296726efa8 100644 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -1868,7 +1868,11 @@ char const* Battleground::GetName() const uint64 Battleground::GetQueueId() const { - return uint64(_battlegroundTemplate->Id) | UI64LIT(0x1F10000000000000); + BattlegroundQueueIdType type = BattlegroundQueueIdType::Battleground; + if (isArena()) + type = isRated() ? BattlegroundQueueIdType::Arena : BattlegroundQueueIdType::ArenaSkirmish; + + return uint64(_battlegroundTemplate->Id) | uint64(type) << 16 | UI64LIT(0x1F10000000000000); } BattlegroundTypeId Battleground::GetTypeID(bool getRandom) const diff --git a/src/server/game/Battlegrounds/Battleground.h b/src/server/game/Battlegrounds/Battleground.h index 23a01a37f44..e0c5083e429 100644 --- a/src/server/game/Battlegrounds/Battleground.h +++ b/src/server/game/Battlegrounds/Battleground.h @@ -230,6 +230,15 @@ enum BattlegroundPlayerPositionConstants PLAYER_POSITION_ARENA_SLOT_5 = 6 }; +enum class BattlegroundQueueIdType : uint8 +{ + Battleground = 0, + Arena = 1, + Wargame = 2, + Cheat = 3, + ArenaSkirmish = 4 +}; + /* This class is used to: 1. Add player to battleground diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp index bc401647ae1..2556ac012c3 100644 --- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp +++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp @@ -190,7 +190,7 @@ void BattlegroundMgr::BuildBattlegroundStatusHeader(WorldPackets::Battleground:: header->Ticket.Id = ticketId; header->Ticket.Type = WorldPackets::LFG::RideType::Battlegrounds; header->Ticket.Time = joinTime; - header->QueueID = bg->GetQueueId(); + header->QueueID.push_back(bg->GetQueueId()); header->RangeMin = bg->GetMinLevel(); header->RangeMax = bg->GetMaxLevel(); header->TeamSize = bg->isArena() ? arenaType : 0; diff --git a/src/server/game/Server/Packets/BattlegroundPackets.cpp b/src/server/game/Server/Packets/BattlegroundPackets.cpp index a6a7657e11e..1b974829633 100644 --- a/src/server/game/Server/Packets/BattlegroundPackets.cpp +++ b/src/server/game/Server/Packets/BattlegroundPackets.cpp @@ -149,11 +149,14 @@ void WorldPackets::Battleground::BattlemasterJoinArena::Read() ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Battleground::BattlefieldStatusHeader const& header) { data << header.Ticket; - data << uint64(header.QueueID); + data << uint32(header.QueueID.size()); data << uint8(header.RangeMin); data << uint8(header.RangeMax); data << uint8(header.TeamSize); data << uint32(header.InstanceID); + for (uint64 queueID : header.QueueID) + data << uint64(queueID); + data.WriteBit(header.RegisteredMatch); data.WriteBit(header.TournamentRules); data.FlushBits(); diff --git a/src/server/game/Server/Packets/BattlegroundPackets.h b/src/server/game/Server/Packets/BattlegroundPackets.h index 9e9617b5030..6914dfef818 100644 --- a/src/server/game/Server/Packets/BattlegroundPackets.h +++ b/src/server/game/Server/Packets/BattlegroundPackets.h @@ -150,7 +150,7 @@ namespace WorldPackets struct BattlefieldStatusHeader { WorldPackets::LFG::RideTicket Ticket; - uint64 QueueID = 0; + std::vector QueueID; uint8 RangeMin = 0; uint8 RangeMax = 0; uint8 TeamSize = 0; -- cgit v1.2.3