mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-19 14:39:43 -04:00
Core/PacketIO: Updated and enabled some battleground packets
This commit is contained in:
@@ -177,7 +177,7 @@ Battleground::Battleground()
|
||||
m_PrematureCountDown = false;
|
||||
m_PrematureCountDownTimer = 0;
|
||||
|
||||
m_Guid = 0;
|
||||
m_queueId = 0;
|
||||
|
||||
m_HonorMode = BG_NORMAL;
|
||||
|
||||
@@ -527,12 +527,12 @@ inline void Battleground::_ProcessJoin(uint32 diff)
|
||||
if (Player* player = ObjectAccessor::FindPlayer(itr->first))
|
||||
{
|
||||
// BG Status packet
|
||||
WorldPacket status;
|
||||
BattlegroundQueueTypeId bgQueueTypeId = sBattlegroundMgr->BGQueueTypeId(m_TypeID, GetArenaType());
|
||||
BattlegroundQueueTypeId bgQueueTypeId = BattlegroundMgr::BGQueueTypeId(m_TypeID, GetArenaType());
|
||||
uint32 queueSlot = player->GetBattlegroundQueueIndex(bgQueueTypeId);
|
||||
|
||||
sBattlegroundMgr->BuildBattlegroundStatusPacket(&status, this, player, queueSlot, STATUS_IN_PROGRESS, player->GetBattlegroundQueueJoinTime(m_TypeID), GetElapsedTime(), GetArenaType());
|
||||
player->GetSession()->SendPacket(&status);
|
||||
WorldPackets::Battleground::BattlefieldStatusActive battlefieldStatus;
|
||||
sBattlegroundMgr->BuildBattlegroundStatusActive(&battlefieldStatus, this, player, queueSlot, player->GetBattlegroundQueueJoinTime(bgQueueTypeId), GetArenaType());
|
||||
player->SendDirectMessage(battlefieldStatus.Write());
|
||||
|
||||
// Correctly display EnemyUnitFrame
|
||||
player->SetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_ARENA_FACTION, player->GetBGTeam());
|
||||
@@ -885,9 +885,9 @@ void Battleground::EndBattleground(uint32 winner)
|
||||
|
||||
player->SendDirectMessage(pvpLogData.Write());
|
||||
|
||||
WorldPacket data;
|
||||
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player, player->GetBattlegroundQueueIndex(bgQueueTypeId), STATUS_IN_PROGRESS, player->GetBattlegroundQueueJoinTime(GetTypeID()), GetElapsedTime(), GetArenaType());
|
||||
player->SendDirectMessage(&data);
|
||||
WorldPackets::Battleground::BattlefieldStatusActive battlefieldStatus;
|
||||
sBattlegroundMgr->BuildBattlegroundStatusActive(&battlefieldStatus, this, player, player->GetBattlegroundQueueIndex(bgQueueTypeId), player->GetBattlegroundQueueJoinTime(bgQueueTypeId), GetArenaType());
|
||||
player->SendDirectMessage(battlefieldStatus.Write());
|
||||
|
||||
player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND, 1);
|
||||
}
|
||||
@@ -973,9 +973,9 @@ void Battleground::RemovePlayerAtLeave(ObjectGuid guid, bool Transport, bool Sen
|
||||
|
||||
if (SendPacket)
|
||||
{
|
||||
WorldPacket data;
|
||||
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player, player->GetBattlegroundQueueIndex(bgQueueTypeId), STATUS_NONE, player->GetBattlegroundQueueJoinTime(bgTypeId), 0, m_ArenaType);
|
||||
player->SendDirectMessage(&data);
|
||||
WorldPackets::Battleground::BattlefieldStatusNone battlefieldStatus;
|
||||
sBattlegroundMgr->BuildBattlegroundStatusNone(&battlefieldStatus, player, player->GetBattlegroundQueueIndex(bgQueueTypeId), player->GetBattlegroundQueueJoinTime(bgQueueTypeId), m_ArenaType);
|
||||
player->SendDirectMessage(battlefieldStatus.Write());
|
||||
}
|
||||
|
||||
// this call is important, because player, when joins to battleground, this method is not called, so it must be called when leaving bg
|
||||
@@ -1008,7 +1008,6 @@ void Battleground::RemovePlayerAtLeave(ObjectGuid guid, bool Transport, bool Sen
|
||||
player->SetBattlegroundId(0, BATTLEGROUND_TYPE_NONE); // We're not in BG.
|
||||
// reset destination bg team
|
||||
player->SetBGTeam(0);
|
||||
player->RemoveBattlegroundQueueJoinTime(bgTypeId);
|
||||
|
||||
if (Transport)
|
||||
player->TeleportToBGEntryPoint();
|
||||
@@ -1093,8 +1092,9 @@ void Battleground::AddPlayer(Player* player)
|
||||
BattlegroundQueueTypeId bgQueueTypeId = sBattlegroundMgr->BGQueueTypeId(m_TypeID, GetArenaType());
|
||||
uint32 queueSlot = player->GetBattlegroundQueueIndex(bgQueueTypeId);
|
||||
|
||||
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player, queueSlot, STATUS_IN_PROGRESS, player->GetBattlegroundQueueJoinTime(m_TypeID), GetElapsedTime(), GetArenaType());
|
||||
player->GetSession()->SendPacket(&data);
|
||||
WorldPackets::Battleground::BattlefieldStatusActive battlefieldStatus;
|
||||
sBattlegroundMgr->BuildBattlegroundStatusActive(&battlefieldStatus, this, player, queueSlot, player->GetBattlegroundQueueJoinTime(bgQueueTypeId), GetArenaType());
|
||||
player->SendDirectMessage(battlefieldStatus.Write());
|
||||
|
||||
player->RemoveAurasByType(SPELL_AURA_MOUNTED);
|
||||
|
||||
@@ -1832,9 +1832,9 @@ void Battleground::PlayerAddedToBGCheckIfBGIsRunning(Player* player)
|
||||
BuildPvPLogDataPacket(pvpLogData);
|
||||
player->SendDirectMessage(pvpLogData.Write());
|
||||
|
||||
WorldPacket data;
|
||||
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player, player->GetBattlegroundQueueIndex(bgQueueTypeId), STATUS_IN_PROGRESS, player->GetBattlegroundQueueJoinTime(GetTypeID()), GetElapsedTime(), GetArenaType());
|
||||
player->SendDirectMessage(&data);
|
||||
WorldPackets::Battleground::BattlefieldStatusActive battlefieldStatus;
|
||||
sBattlegroundMgr->BuildBattlegroundStatusActive(&battlefieldStatus, this, player, player->GetBattlegroundQueueIndex(bgQueueTypeId), player->GetBattlegroundQueueJoinTime(bgQueueTypeId), GetArenaType());
|
||||
player->SendDirectMessage(battlefieldStatus.Write());
|
||||
}
|
||||
|
||||
uint32 Battleground::GetAlivePlayersCountByTeam(uint32 Team) const
|
||||
|
||||
@@ -250,7 +250,7 @@ class Battleground
|
||||
/* Battleground */
|
||||
// Get methods:
|
||||
std::string const& GetName() const { return m_Name; }
|
||||
uint64 GetGUID() { return m_Guid; }
|
||||
uint64 GetQueueId() { return m_queueId; }
|
||||
BattlegroundTypeId GetTypeID(bool GetRandom = false) const { return GetRandom ? m_RandomTypeID : m_TypeID; }
|
||||
BattlegroundBracketId GetBracketId() const { return m_BracketId; }
|
||||
uint32 GetInstanceID() const { return m_InstanceID; }
|
||||
@@ -276,7 +276,7 @@ class Battleground
|
||||
bool IsRandom() const { return m_IsRandom; }
|
||||
|
||||
// Set methods:
|
||||
void SetGuid(uint64 newGuid) { m_Guid = newGuid; }
|
||||
void SetQueueId(uint64 queueId) { m_queueId = queueId; }
|
||||
void SetName(std::string const& name) { m_Name = name; }
|
||||
void SetTypeID(BattlegroundTypeId TypeID) { m_TypeID = TypeID; }
|
||||
void SetRandomTypeID(BattlegroundTypeId TypeID) { m_RandomTypeID = TypeID; }
|
||||
@@ -546,7 +546,7 @@ class Battleground
|
||||
bool m_PrematureCountDown;
|
||||
uint32 m_PrematureCountDownTimer;
|
||||
std::string m_Name;
|
||||
uint64 m_Guid;
|
||||
uint64 m_queueId;
|
||||
|
||||
/* Pre- and post-update hooks */
|
||||
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
#include "BattlegroundIC.h"
|
||||
#include "BattlegroundTP.h"
|
||||
#include "BattlegroundBFG.h"
|
||||
#include "BattlegroundPackets.h"
|
||||
#include "Chat.h"
|
||||
#include "Map.h"
|
||||
#include "MapInstanced.h"
|
||||
@@ -148,282 +149,67 @@ void BattlegroundMgr::Update(uint32 diff)
|
||||
}
|
||||
}
|
||||
|
||||
void BattlegroundMgr::BuildBattlegroundStatusPacket(WorldPacket* data, Battleground* bg, Player* player, uint8 QueueSlot, uint8 StatusID, uint32 Time1, uint32 Time2, uint8 arenatype)
|
||||
void BattlegroundMgr::BuildBattlegroundStatusHeader(WorldPackets::Battleground::BattlefieldStatusHeader* header, Battleground* bg, Player* player, uint32 ticketId, uint32 joinTime, uint32 arenaType)
|
||||
{
|
||||
ObjectGuid playerGuid = player->GetGUID();
|
||||
ObjectGuid bgGuid;
|
||||
|
||||
if (bg)
|
||||
;//bgGuid = bg->GetGUID();
|
||||
else
|
||||
StatusID = STATUS_NONE;
|
||||
|
||||
switch (StatusID)
|
||||
{
|
||||
case STATUS_NONE:
|
||||
{
|
||||
data->Initialize(SMSG_BATTLEFIELD_STATUS_NONE);
|
||||
|
||||
data->WriteBit(playerGuid[0]);
|
||||
data->WriteBit(playerGuid[4]);
|
||||
data->WriteBit(playerGuid[7]);
|
||||
data->WriteBit(playerGuid[1]);
|
||||
data->WriteBit(playerGuid[6]);
|
||||
data->WriteBit(playerGuid[3]);
|
||||
data->WriteBit(playerGuid[5]);
|
||||
data->WriteBit(playerGuid[2]);
|
||||
|
||||
data->WriteByteSeq(playerGuid[5]);
|
||||
data->WriteByteSeq(playerGuid[6]);
|
||||
data->WriteByteSeq(playerGuid[7]);
|
||||
data->WriteByteSeq(playerGuid[2]);
|
||||
*data << uint32(arenatype ? arenatype : 1); // Player count, 1 for bgs, 2-3-5 for arenas
|
||||
data->WriteByteSeq(playerGuid[3]);
|
||||
data->WriteByteSeq(playerGuid[1]);
|
||||
*data << uint32(QueueSlot); // Queue slot
|
||||
*data << uint32(Time1); // Join Time
|
||||
data->WriteByteSeq(playerGuid[0]);
|
||||
data->WriteByteSeq(playerGuid[4]);
|
||||
break;
|
||||
}
|
||||
case STATUS_WAIT_QUEUE:
|
||||
{
|
||||
data->Initialize(SMSG_BATTLEFIELD_STATUS_QUEUED);
|
||||
|
||||
data->WriteBit(playerGuid[3]);
|
||||
data->WriteBit(playerGuid[0]);
|
||||
data->WriteBit(bgGuid[3]);
|
||||
data->WriteBit(playerGuid[2]);
|
||||
data->WriteBit(1); // Eligible In Queue
|
||||
data->WriteBit(0); // Join Failed, 1 when it's arena ...
|
||||
data->WriteBit(bgGuid[2]);
|
||||
data->WriteBit(playerGuid[1]);
|
||||
data->WriteBit(bgGuid[0]);
|
||||
data->WriteBit(bgGuid[6]);
|
||||
data->WriteBit(bgGuid[4]);
|
||||
data->WriteBit(playerGuid[6]);
|
||||
data->WriteBit(playerGuid[7]);
|
||||
data->WriteBit(bgGuid[7]);
|
||||
data->WriteBit(bgGuid[5]);
|
||||
data->WriteBit(playerGuid[4]);
|
||||
data->WriteBit(playerGuid[5]);
|
||||
data->WriteBit(bg->isRated()); // Is Rated
|
||||
data->WriteBit(0); // Waiting On Other Activity
|
||||
data->WriteBit(bgGuid[1]);
|
||||
|
||||
data->FlushBits();
|
||||
|
||||
data->WriteByteSeq(playerGuid[0]);
|
||||
*data << uint32(bg->isArena() ? arenatype : 1); // Player count, 1 for bgs, 2-3-5 for arena (2v2, 3v3, 5v5)
|
||||
data->WriteByteSeq(bgGuid[5]);
|
||||
data->WriteByteSeq(playerGuid[3]);
|
||||
*data << uint32(Time1); // Estimated Wait Time
|
||||
data->WriteByteSeq(bgGuid[7]);
|
||||
data->WriteByteSeq(bgGuid[1]);
|
||||
data->WriteByteSeq(bgGuid[2]);
|
||||
*data << uint8(0); // unk
|
||||
data->WriteByteSeq(bgGuid[4]);
|
||||
data->WriteByteSeq(playerGuid[2]);
|
||||
*data << uint8(0); // unk
|
||||
data->WriteByteSeq(bgGuid[6]);
|
||||
data->WriteByteSeq(playerGuid[7]);
|
||||
data->WriteByteSeq(bgGuid[3]);
|
||||
data->WriteByteSeq(playerGuid[6]);
|
||||
data->WriteByteSeq(bgGuid[0]);
|
||||
*data << uint32(Time2); // Join Time
|
||||
*data << uint32(QueueSlot); // Queue slot
|
||||
*data << uint8(bg->GetMinLevel()); // Min Level
|
||||
*data << uint32(GetMSTimeDiffToNow(Time2)); // Time since joined
|
||||
data->WriteByteSeq(playerGuid[1]);
|
||||
data->WriteByteSeq(playerGuid[5]);
|
||||
*data << uint32(bg->GetClientInstanceID()); // Client Instance ID
|
||||
data->WriteByteSeq(playerGuid[4]);
|
||||
break;
|
||||
}
|
||||
case STATUS_WAIT_JOIN:
|
||||
{
|
||||
data->Initialize(SMSG_BATTLEFIELD_STATUS_NEED_CONFIRMATION);
|
||||
|
||||
*data << uint32(bg->GetClientInstanceID()); // Client Instance ID
|
||||
*data << uint32(Time1); // Time until closed
|
||||
*data << uint8(0); // unk
|
||||
*data << uint32(QueueSlot); // Queue slot
|
||||
*data << uint32(Time2); // Join Time
|
||||
*data << uint8(bg->GetMinLevel()); // Min Level
|
||||
*data << uint32(bg->isArena() ? arenatype : 1); // Player count, 1 for bgs, 2-3-5 for arena (2v2, 3v3, 5v5)
|
||||
*data << uint32(bg->GetMapId()); // Map Id
|
||||
*data << uint8(0); // unk
|
||||
|
||||
data->WriteBit(playerGuid[5]);
|
||||
data->WriteBit(playerGuid[2]);
|
||||
data->WriteBit(playerGuid[1]);
|
||||
data->WriteBit(bgGuid[2]);
|
||||
data->WriteBit(playerGuid[4]);
|
||||
data->WriteBit(bgGuid[6]);
|
||||
data->WriteBit(bgGuid[3]);
|
||||
data->WriteBit(bg->isRated()); // Is Rated
|
||||
data->WriteBit(playerGuid[7]);
|
||||
data->WriteBit(playerGuid[3]);
|
||||
data->WriteBit(bgGuid[7]);
|
||||
data->WriteBit(bgGuid[0]);
|
||||
data->WriteBit(bgGuid[4]);
|
||||
data->WriteBit(playerGuid[6]);
|
||||
data->WriteBit(bgGuid[1]);
|
||||
data->WriteBit(bgGuid[5]);
|
||||
data->WriteBit(playerGuid[0]);
|
||||
|
||||
data->WriteByteSeq(bgGuid[6]);
|
||||
data->WriteByteSeq(bgGuid[5]);
|
||||
data->WriteByteSeq(bgGuid[7]);
|
||||
data->WriteByteSeq(bgGuid[2]);
|
||||
data->WriteByteSeq(playerGuid[0]);
|
||||
data->WriteByteSeq(playerGuid[7]);
|
||||
data->WriteByteSeq(bgGuid[4]);
|
||||
data->WriteByteSeq(playerGuid[1]);
|
||||
data->WriteByteSeq(bgGuid[0]);
|
||||
data->WriteByteSeq(playerGuid[4]);
|
||||
data->WriteByteSeq(bgGuid[1]);
|
||||
data->WriteByteSeq(playerGuid[5]);
|
||||
data->WriteByteSeq(bgGuid[3]);
|
||||
data->WriteByteSeq(playerGuid[6]);
|
||||
data->WriteByteSeq(playerGuid[2]);
|
||||
data->WriteByteSeq(playerGuid[3]);
|
||||
break;
|
||||
}
|
||||
case STATUS_IN_PROGRESS:
|
||||
{
|
||||
data->Initialize(SMSG_BATTLEFIELD_STATUS_ACTIVE);
|
||||
|
||||
data->WriteBit(playerGuid[2]);
|
||||
data->WriteBit(playerGuid[7]);
|
||||
data->WriteBit(bgGuid[7]);
|
||||
data->WriteBit(bgGuid[1]);
|
||||
data->WriteBit(playerGuid[5]);
|
||||
data->WriteBit(player->GetBGTeam() == HORDE ? 0 : 1);
|
||||
data->WriteBit(bgGuid[0]);
|
||||
data->WriteBit(playerGuid[1]);
|
||||
data->WriteBit(bgGuid[3]);
|
||||
data->WriteBit(playerGuid[6]);
|
||||
data->WriteBit(bgGuid[5]);
|
||||
data->WriteBit(bg->isRated()); // Is Rated
|
||||
data->WriteBit(playerGuid[4]);
|
||||
data->WriteBit(bgGuid[6]);
|
||||
data->WriteBit(bgGuid[4]);
|
||||
data->WriteBit(bgGuid[2]);
|
||||
data->WriteBit(playerGuid[3]);
|
||||
data->WriteBit(playerGuid[0]);
|
||||
|
||||
data->FlushBits();
|
||||
|
||||
data->WriteByteSeq(bgGuid[4]);
|
||||
data->WriteByteSeq(bgGuid[5]);
|
||||
data->WriteByteSeq(playerGuid[5]);
|
||||
data->WriteByteSeq(bgGuid[1]);
|
||||
data->WriteByteSeq(bgGuid[6]);
|
||||
data->WriteByteSeq(bgGuid[3]);
|
||||
data->WriteByteSeq(bgGuid[7]);
|
||||
data->WriteByteSeq(playerGuid[6]);
|
||||
|
||||
*data << uint32(Time1); // Join Time
|
||||
*data << uint8(0); // unk
|
||||
|
||||
data->WriteByteSeq(playerGuid[4]);
|
||||
data->WriteByteSeq(playerGuid[1]);
|
||||
|
||||
*data << uint32(QueueSlot); // Queue slot
|
||||
*data << uint8(0); // unk
|
||||
*data << uint32(bg->isArena() ? arenatype : 1); // Player count, 1 for bgs, 2-3-5 for arena (2v2, 3v3, 5v5)
|
||||
*data << uint32(bg->GetMapId()); // Map Id
|
||||
*data << uint8(bg->GetMinLevel()); // Min Level
|
||||
*data << uint32(Time2); // Elapsed Time
|
||||
|
||||
data->WriteByteSeq(playerGuid[2]);
|
||||
*data << uint32(bg->GetRemainingTime()); // Remaining Time
|
||||
|
||||
data->WriteByteSeq(playerGuid[0]);
|
||||
data->WriteByteSeq(playerGuid[3]);
|
||||
data->WriteByteSeq(bgGuid[2]);
|
||||
|
||||
*data << uint32(bg->GetClientInstanceID()); // Client Instance ID or faction ?
|
||||
|
||||
data->WriteByteSeq(bgGuid[0]);
|
||||
data->WriteByteSeq(playerGuid[7]);
|
||||
break;
|
||||
}
|
||||
case STATUS_WAIT_LEAVE:
|
||||
break;
|
||||
}
|
||||
header->Ticket.RequesterGuid = player->GetGUID();
|
||||
header->Ticket.Id = ticketId;
|
||||
header->Ticket.Type = bg->isArena() ? arenaType : 1;
|
||||
header->Ticket.Time = joinTime;
|
||||
header->QueueID = bg->GetQueueId();
|
||||
header->RangeMin = bg->GetMinLevel();
|
||||
header->RangeMax = bg->GetMaxLevel();
|
||||
header->TeamSize = bg->isArena() ? arenaType : 0;
|
||||
header->InstanceID = bg->GetClientInstanceID();
|
||||
header->RegisteredMatch = bg->isRated();
|
||||
header->TournamentRules = false;
|
||||
}
|
||||
|
||||
void BattlegroundMgr::BuildStatusFailedPacket(WorldPacket* data, Battleground* bg, Player* player, uint8 QueueSlot, GroupJoinBattlegroundResult result)
|
||||
void BattlegroundMgr::BuildBattlegroundStatusNone(WorldPackets::Battleground::BattlefieldStatusNone* battlefieldStatus, Player* player, uint32 ticketId, uint32 joinTime, uint32 arenaType)
|
||||
{
|
||||
ObjectGuid guidBytes1 = player->GetGUID(); // player who caused the error
|
||||
ObjectGuid guidBytes2;// = bg->GetGUID();
|
||||
ObjectGuid unkGuid3;
|
||||
battlefieldStatus->Ticket.RequesterGuid = player->GetGUID();
|
||||
battlefieldStatus->Ticket.Id = ticketId;
|
||||
battlefieldStatus->Ticket.Type = arenaType;
|
||||
battlefieldStatus->Ticket.Time = joinTime;
|
||||
}
|
||||
|
||||
data->Initialize(SMSG_BATTLEFIELD_STATUS_FAILED);
|
||||
void BattlegroundMgr::BuildBattlegroundStatusNeedConfirmation(WorldPackets::Battleground::BattlefieldStatusNeedConfirmation* battlefieldStatus, Battleground* bg, Player* player, uint32 ticketId, uint32 joinTime, uint32 timeout, uint32 arenaType)
|
||||
{
|
||||
BuildBattlegroundStatusHeader(&battlefieldStatus->Hdr, bg, player, ticketId, joinTime, arenaType);
|
||||
battlefieldStatus->Mapid = bg->GetMapId();
|
||||
battlefieldStatus->Timeout = timeout;
|
||||
battlefieldStatus->Role = 0;
|
||||
}
|
||||
|
||||
data->WriteBit(guidBytes2[3]);
|
||||
data->WriteBit(unkGuid3[3]);
|
||||
data->WriteBit(guidBytes1[3]);
|
||||
data->WriteBit(unkGuid3[0]);
|
||||
data->WriteBit(guidBytes2[6]);
|
||||
data->WriteBit(guidBytes1[5]);
|
||||
data->WriteBit(guidBytes1[6]);
|
||||
data->WriteBit(guidBytes1[4]);
|
||||
void BattlegroundMgr::BuildBattlegroundStatusActive(WorldPackets::Battleground::BattlefieldStatusActive* battlefieldStatus, Battleground* bg, Player* player, uint32 ticketId, uint32 joinTime, uint32 arenaType)
|
||||
{
|
||||
BuildBattlegroundStatusHeader(&battlefieldStatus->Hdr, bg, player, ticketId, joinTime, arenaType);
|
||||
battlefieldStatus->ShutdownTimer = bg->GetRemainingTime();
|
||||
battlefieldStatus->ArenaFaction = player->GetBGTeam() == HORDE ? BG_TEAM_HORDE : BG_TEAM_ALLIANCE;
|
||||
battlefieldStatus->LeftEarly = false;
|
||||
battlefieldStatus->StartTimer = bg->GetElapsedTime();
|
||||
battlefieldStatus->Mapid = bg->GetMapId();
|
||||
}
|
||||
|
||||
data->WriteBit(guidBytes1[2]);
|
||||
data->WriteBit(unkGuid3[1]);
|
||||
data->WriteBit(guidBytes2[1]);
|
||||
data->WriteBit(unkGuid3[5]);
|
||||
data->WriteBit(unkGuid3[6]);
|
||||
data->WriteBit(guidBytes1[1]);
|
||||
data->WriteBit(guidBytes2[7]);
|
||||
data->WriteBit(unkGuid3[4]);
|
||||
void BattlegroundMgr::BuildBattlegroundStatusQueued(WorldPackets::Battleground::BattlefieldStatusQueued* battlefieldStatus, Battleground* bg, Player* player, uint32 ticketId, uint32 joinTime, uint32 avgWaitTime, uint32 arenaType, bool asGroup)
|
||||
{
|
||||
BuildBattlegroundStatusHeader(&battlefieldStatus->Hdr, bg, player, ticketId, joinTime, arenaType);
|
||||
battlefieldStatus->AverageWaitTime = avgWaitTime;
|
||||
battlefieldStatus->AsGroup = asGroup;
|
||||
battlefieldStatus->SuspendedQueue = false;
|
||||
battlefieldStatus->EligibleForMatchmaking = true;
|
||||
battlefieldStatus->WaitTime = GetMSTimeDiffToNow(joinTime);
|
||||
}
|
||||
|
||||
data->WriteBit(guidBytes2[2]);
|
||||
data->WriteBit(guidBytes2[5]);
|
||||
data->WriteBit(unkGuid3[7]);
|
||||
data->WriteBit(guidBytes2[4]);
|
||||
data->WriteBit(guidBytes2[0]);
|
||||
data->WriteBit(guidBytes1[0]);
|
||||
data->WriteBit(unkGuid3[2]);
|
||||
data->WriteBit(guidBytes1[7]);
|
||||
|
||||
data->WriteByteSeq(guidBytes2[1]);
|
||||
|
||||
*data << uint32(1); // Unk, always 1
|
||||
*data << uint32(QueueSlot); // Queue slot
|
||||
|
||||
data->WriteByteSeq(guidBytes1[6]);
|
||||
data->WriteByteSeq(guidBytes1[3]);
|
||||
data->WriteByteSeq(guidBytes1[7]);
|
||||
data->WriteByteSeq(guidBytes1[4]);
|
||||
data->WriteByteSeq(guidBytes2[0]);
|
||||
data->WriteByteSeq(guidBytes1[5]);
|
||||
data->WriteByteSeq(guidBytes2[7]);
|
||||
data->WriteByteSeq(guidBytes2[6]);
|
||||
data->WriteByteSeq(guidBytes2[2]);
|
||||
data->WriteByteSeq(unkGuid3[6]);
|
||||
data->WriteByteSeq(unkGuid3[3]);
|
||||
data->WriteByteSeq(guidBytes1[1]);
|
||||
data->WriteByteSeq(guidBytes2[3]);
|
||||
data->WriteByteSeq(unkGuid3[0]);
|
||||
data->WriteByteSeq(unkGuid3[1]);
|
||||
data->WriteByteSeq(unkGuid3[4]);
|
||||
data->WriteByteSeq(guidBytes1[0]);
|
||||
data->WriteByteSeq(guidBytes2[5]);
|
||||
data->WriteByteSeq(unkGuid3[7]);
|
||||
data->WriteByteSeq(guidBytes2[4]);
|
||||
data->WriteByteSeq(guidBytes1[2]);
|
||||
|
||||
*data << uint32(result); // Result
|
||||
|
||||
data->WriteByteSeq(unkGuid3[2]);
|
||||
|
||||
*data << uint32(player->GetBattlegroundQueueJoinTime(bg->GetTypeID())); // Join Time
|
||||
|
||||
data->WriteByteSeq(unkGuid3[5]);
|
||||
void BattlegroundMgr::BuildBattlegroundStatusFailed(WorldPackets::Battleground::BattlefieldStatusFailed* battlefieldStatus, Battleground* bg, Player* pPlayer, uint32 ticketId, uint32 arenaType, GroupJoinBattlegroundResult result, ObjectGuid const* errorGuid /*= nullptr*/)
|
||||
{
|
||||
battlefieldStatus->Ticket.RequesterGuid = pPlayer->GetGUID();
|
||||
battlefieldStatus->Ticket.Id = ticketId;
|
||||
battlefieldStatus->Ticket.Type = arenaType;
|
||||
battlefieldStatus->Ticket.Time = pPlayer->GetBattlegroundQueueJoinTime(BGQueueTypeId(bg->GetTypeID(), arenaType));
|
||||
battlefieldStatus->QueueID = bg->GetQueueId();
|
||||
battlefieldStatus->Reason = result;
|
||||
if (errorGuid && (result == ERR_BATTLEGROUND_NOT_IN_BATTLEGROUND || result == ERR_BATTLEGROUND_JOIN_TIMED_OUT))
|
||||
battlefieldStatus->ClientID = *errorGuid;
|
||||
}
|
||||
|
||||
void BattlegroundMgr::BuildPlaySoundPacket(WorldPacket* data, uint32 soundid)
|
||||
@@ -479,30 +265,6 @@ void BattlegroundMgr::BuildPlayerJoinedBattlegroundPacket(WorldPacket* data, Obj
|
||||
data->WriteByteSeq(guid[6]);
|
||||
}
|
||||
|
||||
Battleground* BattlegroundMgr::GetBattlegroundThroughClientInstance(uint32 instanceId, BattlegroundTypeId bgTypeId)
|
||||
{
|
||||
//cause at HandleBattlegroundJoinOpcode the clients sends the instanceid he gets from
|
||||
//SMSG_BATTLEFIELD_LIST we need to find the battleground with this clientinstance-id
|
||||
Battleground* bg = GetBattlegroundTemplate(bgTypeId);
|
||||
if (!bg)
|
||||
return NULL;
|
||||
|
||||
if (bg->isArena())
|
||||
return GetBattleground(instanceId, bgTypeId);
|
||||
|
||||
BattlegroundDataContainer::const_iterator it = bgDataStore.find(bgTypeId);
|
||||
if (it == bgDataStore.end())
|
||||
return NULL;
|
||||
|
||||
for (BattlegroundContainer::const_iterator itr = it->second.m_Battlegrounds.begin(); itr != it->second.m_Battlegrounds.end(); ++itr)
|
||||
{
|
||||
if (itr->second->GetClientInstanceID() == instanceId)
|
||||
return itr->second;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Battleground* BattlegroundMgr::GetBattleground(uint32 instanceId, BattlegroundTypeId bgTypeId)
|
||||
{
|
||||
if (!instanceId)
|
||||
@@ -645,7 +407,7 @@ Battleground* BattlegroundMgr::CreateNewBattleground(BattlegroundTypeId original
|
||||
bg->SetRandomTypeID(bgTypeId);
|
||||
bg->SetRated(isRated);
|
||||
bg->SetRandom(isRandom);
|
||||
bg->SetGuid(uint64(bgTypeId) | UI64LIT(0x1F10000000000000));
|
||||
bg->SetQueueId(uint64(bgTypeId) | UI64LIT(0x1F10000000000000));
|
||||
|
||||
// Set up correct min/max player counts for scoreboards
|
||||
if (bg->isArena())
|
||||
@@ -748,7 +510,7 @@ bool BattlegroundMgr::CreateBattleground(BattlegroundTemplate const* bgTemplate)
|
||||
bg->SetStartMaxDist(bgTemplate->MaxStartDistSq);
|
||||
bg->SetLevelRange(bgTemplate->MinLevel, bgTemplate->MaxLevel);
|
||||
bg->SetScriptId(bgTemplate->ScriptId);
|
||||
bg->SetGuid(uint64(bgTemplate->Id) | UI64LIT(0x1F10000000000000));
|
||||
bg->SetQueueId(uint64(bgTemplate->Id) | UI64LIT(0x1F10000000000000));
|
||||
|
||||
AddBattleground(bg);
|
||||
|
||||
@@ -855,74 +617,22 @@ void BattlegroundMgr::LoadBattlegroundTemplates()
|
||||
TC_LOG_INFO("server.loading", ">> Loaded %u battlegrounds in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
|
||||
}
|
||||
|
||||
void BattlegroundMgr::BuildBattlegroundListPacket(WorldPacket* data, ObjectGuid guid, Player* player, BattlegroundTypeId bgTypeId)
|
||||
void BattlegroundMgr::SendBattlegroundList(Player* player, ObjectGuid const& guid, BattlegroundTypeId bgTypeId)
|
||||
{
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
BattlegroundTemplate const* bgTemplate = GetBattlegroundTemplateByTypeId(bgTypeId);
|
||||
if (!bgTemplate)
|
||||
return;
|
||||
|
||||
uint32 winnerConquest = (player->GetRandomWinner() ? sWorld->getIntConfig(CONFIG_BG_REWARD_WINNER_CONQUEST_FIRST) : sWorld->getIntConfig(CONFIG_BG_REWARD_WINNER_CONQUEST_LAST)) / CURRENCY_PRECISION;
|
||||
uint32 winnerHonor = (player->GetRandomWinner() ? sWorld->getIntConfig(CONFIG_BG_REWARD_WINNER_HONOR_FIRST) : sWorld->getIntConfig(CONFIG_BG_REWARD_WINNER_HONOR_LAST)) / CURRENCY_PRECISION;
|
||||
uint32 loserHonor = (!player->GetRandomWinner() ? sWorld->getIntConfig(CONFIG_BG_REWARD_LOSER_HONOR_FIRST) : sWorld->getIntConfig(CONFIG_BG_REWARD_LOSER_HONOR_LAST)) / CURRENCY_PRECISION;
|
||||
|
||||
data->Initialize(SMSG_BATTLEFIELD_LIST);
|
||||
*data << uint32(winnerConquest) // Winner Conquest Reward or Random Winner Conquest Reward
|
||||
<< uint32(winnerConquest) // Winner Conquest Reward or Random Winner Conquest Reward
|
||||
<< uint32(loserHonor) // Loser Honor Reward or Random Loser Honor Reward
|
||||
<< uint32(bgTypeId) // battleground id
|
||||
<< uint32(loserHonor) // Loser Honor Reward or Random Loser Honor Reward
|
||||
<< uint32(winnerHonor) // Winner Honor Reward or Random Winner Honor Reward
|
||||
<< uint32(winnerHonor) // Winner Honor Reward or Random Winner Honor Reward
|
||||
<< uint8(bgTemplate->MaxLevel) // max level
|
||||
<< uint8(bgTemplate->MinLevel); // min level
|
||||
|
||||
data->WriteBit(guid[0]);
|
||||
data->WriteBit(guid[1]);
|
||||
data->WriteBit(guid[7]);
|
||||
data->WriteBit(0); // unk
|
||||
data->WriteBit(0); // unk
|
||||
|
||||
size_t count_pos = data->bitwpos();
|
||||
data->WriteBits(0, 24); // placeholder
|
||||
|
||||
data->WriteBit(guid[6]);
|
||||
data->WriteBit(guid[4]);
|
||||
data->WriteBit(guid[2]);
|
||||
data->WriteBit(guid[3]);
|
||||
data->WriteBit(0); // unk
|
||||
data->WriteBit(guid[5]);
|
||||
data->WriteBit(1); // hide battleground list window
|
||||
|
||||
data->FlushBits();
|
||||
|
||||
data->WriteByteSeq(guid[6]);
|
||||
data->WriteByteSeq(guid[1]);
|
||||
data->WriteByteSeq(guid[7]);
|
||||
data->WriteByteSeq(guid[5]);
|
||||
|
||||
BattlegroundDataContainer::iterator it = bgDataStore.find(bgTypeId);
|
||||
if (it != bgDataStore.end())
|
||||
{
|
||||
|
||||
PvPDifficultyEntry const* bracketEntry = GetBattlegroundBracketByLevel(it->second.m_Battlegrounds.begin()->second->GetMapId(), player->getLevel());
|
||||
if (bracketEntry)
|
||||
{
|
||||
BattlegroundBracketId bracketId = bracketEntry->GetBracketId();
|
||||
BattlegroundClientIdsContainer& clientIds = it->second.m_ClientBattlegroundIds[bracketId];
|
||||
for (BattlegroundClientIdsContainer::const_iterator itr = clientIds.begin(); itr != clientIds.end(); ++itr)
|
||||
*data << uint32(*itr);
|
||||
|
||||
data->PutBits(count_pos, clientIds.size(), 24); // bg instance count
|
||||
}
|
||||
}
|
||||
|
||||
data->WriteByteSeq(guid[0]);
|
||||
data->WriteByteSeq(guid[2]);
|
||||
data->WriteByteSeq(guid[4]);
|
||||
data->WriteByteSeq(guid[3]);
|
||||
WorldPackets::Battleground::BattlefieldList battlefieldList;
|
||||
battlefieldList.BattlemasterGuid = guid;
|
||||
battlefieldList.BattlemasterListID = bgTypeId;
|
||||
battlefieldList.MinLevel = bgTemplate->MinLevel;
|
||||
battlefieldList.MaxLevel = bgTemplate->MaxLevel;
|
||||
battlefieldList.PvpAnywhere = guid.IsEmpty();
|
||||
battlefieldList.HasRandomWinToday = player->GetRandomWinner();
|
||||
battlefieldList.HasHolidayWinToday = false;
|
||||
battlefieldList.IsRandomBG = bgTypeId == BATTLEGROUND_RB;
|
||||
player->SendDirectMessage(battlefieldList.Write());
|
||||
}
|
||||
|
||||
void BattlegroundMgr::SendToBattleground(Player* player, uint32 instanceId, BattlegroundTypeId bgTypeId)
|
||||
|
||||
@@ -54,6 +54,19 @@ struct BattlegroundTemplate
|
||||
bool IsArena() const { return BattlemasterEntry->InstanceType == MAP_ARENA; }
|
||||
};
|
||||
|
||||
namespace WorldPackets
|
||||
{
|
||||
namespace Battleground
|
||||
{
|
||||
struct BattlefieldStatusHeader;
|
||||
class BattlefieldStatusNone;
|
||||
class BattlefieldStatusNeedConfirmation;
|
||||
class BattlefieldStatusActive;
|
||||
class BattlefieldStatusQueued;
|
||||
class BattlefieldStatusFailed;
|
||||
}
|
||||
}
|
||||
|
||||
class BattlegroundMgr
|
||||
{
|
||||
private:
|
||||
@@ -72,14 +85,17 @@ class BattlegroundMgr
|
||||
/* Packet Building */
|
||||
void BuildPlayerJoinedBattlegroundPacket(WorldPacket* data, ObjectGuid guid);
|
||||
void BuildPlayerLeftBattlegroundPacket(WorldPacket* data, ObjectGuid guid);
|
||||
void BuildBattlegroundListPacket(WorldPacket* data, ObjectGuid guid, Player* player, BattlegroundTypeId bgTypeId);
|
||||
void BuildStatusFailedPacket(WorldPacket* data, Battleground* bg, Player* pPlayer, uint8 QueueSlot, GroupJoinBattlegroundResult result);
|
||||
void BuildBattlegroundStatusPacket(WorldPacket* data, Battleground* bg, Player* player, uint8 queueSlot, uint8 statusId, uint32 time1, uint32 time2, uint8 arenaType);
|
||||
void SendBattlegroundList(Player* player, ObjectGuid const& guid, BattlegroundTypeId bgTypeId);
|
||||
void BuildBattlegroundStatusHeader(WorldPackets::Battleground::BattlefieldStatusHeader* battlefieldStatus, Battleground* bg, Player* player, uint32 ticketId, uint32 joinTime, uint32 arenaType);
|
||||
void BuildBattlegroundStatusNone(WorldPackets::Battleground::BattlefieldStatusNone* battlefieldStatus, Player* player, uint32 ticketId, uint32 joinTime, uint32 arenaType);
|
||||
void BuildBattlegroundStatusNeedConfirmation(WorldPackets::Battleground::BattlefieldStatusNeedConfirmation* battlefieldStatus, Battleground* bg, Player* player, uint32 ticketId, uint32 joinTime, uint32 timeout, uint32 arenaType);
|
||||
void BuildBattlegroundStatusActive(WorldPackets::Battleground::BattlefieldStatusActive* battlefieldStatus, Battleground* bg, Player* player, uint32 ticketId, uint32 joinTime, uint32 arenaType);
|
||||
void BuildBattlegroundStatusQueued(WorldPackets::Battleground::BattlefieldStatusQueued* battlefieldStatus, Battleground* bg, Player* player, uint32 ticketId, uint32 joinTime, uint32 avgWaitTime, uint32 arenaType, bool asGroup);
|
||||
void BuildBattlegroundStatusFailed(WorldPackets::Battleground::BattlefieldStatusFailed* battlefieldStatus, Battleground* bg, Player* pPlayer, uint32 ticketId, uint32 arenaType, GroupJoinBattlegroundResult result, ObjectGuid const* errorGuid = nullptr);
|
||||
void BuildPlaySoundPacket(WorldPacket* data, uint32 soundId);
|
||||
void SendAreaSpiritHealerQueryOpcode(Player* player, Battleground* bg, ObjectGuid guid);
|
||||
|
||||
/* Battlegrounds */
|
||||
Battleground* GetBattlegroundThroughClientInstance(uint32 instanceId, BattlegroundTypeId bgTypeId);
|
||||
Battleground* GetBattleground(uint32 InstanceID, BattlegroundTypeId bgTypeId);
|
||||
Battleground* GetBattlegroundTemplate(BattlegroundTypeId bgTypeId);
|
||||
Battleground* CreateNewBattleground(BattlegroundTypeId bgTypeId, PvPDifficultyEntry const* bracketEntry, uint8 arenaType, bool isRated);
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include "ArenaTeamMgr.h"
|
||||
#include "BattlegroundMgr.h"
|
||||
#include "BattlegroundQueue.h"
|
||||
#include "BattlegroundPackets.h"
|
||||
#include "Chat.h"
|
||||
#include "Group.h"
|
||||
#include "Log.h"
|
||||
@@ -387,15 +388,15 @@ void BattlegroundQueue::RemovePlayer(ObjectGuid guid, bool decreaseInvitedCount)
|
||||
// first send removal information
|
||||
if (Player* plr2 = ObjectAccessor::FindConnectedPlayer(group->Players.begin()->first))
|
||||
{
|
||||
Battleground* bg = sBattlegroundMgr->GetBattlegroundTemplate(group->BgTypeId);
|
||||
BattlegroundQueueTypeId bgQueueTypeId = BattlegroundMgr::BGQueueTypeId(group->BgTypeId, group->ArenaType);
|
||||
uint32 queueSlot = plr2->GetBattlegroundQueueIndex(bgQueueTypeId);
|
||||
|
||||
plr2->RemoveBattlegroundQueueId(bgQueueTypeId); // must be called this way, because if you move this call to
|
||||
// queue->removeplayer, it causes bugs
|
||||
WorldPacket data;
|
||||
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, plr2, queueSlot, STATUS_NONE, plr2->GetBattlegroundQueueJoinTime(group->BgTypeId), 0, group->ArenaType);
|
||||
plr2->GetSession()->SendPacket(&data);
|
||||
|
||||
WorldPackets::Battleground::BattlefieldStatusNone battlefieldStatus;
|
||||
sBattlegroundMgr->BuildBattlegroundStatusNone(&battlefieldStatus, plr2, queueSlot, plr2->GetBattlegroundQueueJoinTime(bgQueueTypeId), group->ArenaType);
|
||||
plr2->SendDirectMessage(battlefieldStatus.Write());
|
||||
}
|
||||
// then actually delete, this may delete the group as well!
|
||||
RemovePlayer(group->Players.begin()->first, decreaseInvitedCount);
|
||||
@@ -478,9 +479,9 @@ bool BattlegroundQueue::InviteGroupToBG(GroupQueueInfo* ginfo, Battleground* bg,
|
||||
TC_LOG_DEBUG("bg.battleground", "Battleground: invited player %s (%s) to BG instance %u queueindex %u bgtype %u",
|
||||
player->GetName().c_str(), player->GetGUID().ToString().c_str(), bg->GetInstanceID(), queueSlot, bg->GetTypeID());
|
||||
|
||||
// send status packet
|
||||
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, player, queueSlot, STATUS_WAIT_JOIN, INVITE_ACCEPT_WAIT_TIME, player->GetBattlegroundQueueJoinTime(bgTypeId), ginfo->ArenaType);
|
||||
player->GetSession()->SendPacket(&data);
|
||||
WorldPackets::Battleground::BattlefieldStatusNeedConfirmation battlefieldStatus;
|
||||
sBattlegroundMgr->BuildBattlegroundStatusNeedConfirmation(&battlefieldStatus, bg, player, queueSlot, player->GetBattlegroundQueueJoinTime(bgQueueTypeId), INVITE_ACCEPT_WAIT_TIME, ginfo->ArenaType);
|
||||
player->SendDirectMessage(battlefieldStatus.Write());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -999,10 +1000,9 @@ bool BGQueueInviteEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
|
||||
BattlegroundQueue &bgQueue = sBattlegroundMgr->GetBattlegroundQueue(bgQueueTypeId);
|
||||
if (bgQueue.IsPlayerInvited(m_PlayerGuid, m_BgInstanceGUID, m_RemoveTime))
|
||||
{
|
||||
WorldPacket data;
|
||||
//we must send remaining time in queue
|
||||
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, player, queueSlot, STATUS_WAIT_JOIN, INVITE_ACCEPT_WAIT_TIME - INVITATION_REMIND_TIME, player->GetBattlegroundQueueJoinTime(m_BgTypeId), m_ArenaType);
|
||||
player->GetSession()->SendPacket(&data);
|
||||
WorldPackets::Battleground::BattlefieldStatusNeedConfirmation battlefieldStatus;
|
||||
sBattlegroundMgr->BuildBattlegroundStatusNeedConfirmation(&battlefieldStatus, bg, player, queueSlot, player->GetBattlegroundQueueJoinTime(bgQueueTypeId), INVITE_ACCEPT_WAIT_TIME - INVITATION_REMIND_TIME, m_ArenaType);
|
||||
player->SendDirectMessage(battlefieldStatus.Write());
|
||||
}
|
||||
}
|
||||
return true; //event will be deleted
|
||||
@@ -1048,9 +1048,9 @@ bool BGQueueRemoveEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
|
||||
if (bg && bg->isBattleground() && bg->GetStatus() != STATUS_WAIT_LEAVE)
|
||||
sBattlegroundMgr->ScheduleQueueUpdate(0, 0, m_BgQueueTypeId, m_BgTypeId, bg->GetBracketId());
|
||||
|
||||
WorldPacket data;
|
||||
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, player, queueSlot, STATUS_NONE, player->GetBattlegroundQueueJoinTime(m_BgTypeId), 0, m_ArenaType);
|
||||
player->GetSession()->SendPacket(&data);
|
||||
WorldPackets::Battleground::BattlefieldStatusNone battlefieldStatus;
|
||||
sBattlegroundMgr->BuildBattlegroundStatusNone(&battlefieldStatus, player, queueSlot, player->GetBattlegroundQueueJoinTime(m_BgQueueTypeId), m_ArenaType);
|
||||
player->SendDirectMessage(battlefieldStatus.Write());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -751,6 +751,7 @@ Player::Player(WorldSession* session): Unit(true)
|
||||
{
|
||||
m_bgBattlegroundQueueID[j].bgQueueTypeId = BATTLEGROUND_QUEUE_NONE;
|
||||
m_bgBattlegroundQueueID[j].invitedToInstance = 0;
|
||||
m_bgBattlegroundQueueID[j].joinTime = 0;
|
||||
}
|
||||
|
||||
m_logintime = time(NULL);
|
||||
@@ -13953,7 +13954,7 @@ void Player::OnGossipSelect(WorldObject* source, uint32 gossipListId, uint32 men
|
||||
return;
|
||||
}
|
||||
|
||||
GetSession()->SendBattleGroundList(guid, bgTypeId);
|
||||
sBattlegroundMgr->SendBattlegroundList(this, guid, bgTypeId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -23098,6 +23099,14 @@ Battleground* Player::GetBattleground() const
|
||||
return sBattlegroundMgr->GetBattleground(GetBattlegroundId(), m_bgData.bgTypeID);
|
||||
}
|
||||
|
||||
uint32 Player::GetBattlegroundQueueJoinTime(BattlegroundQueueTypeId bgQueueTypeId) const
|
||||
{
|
||||
for (uint8 i = 0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; ++i)
|
||||
if (m_bgBattlegroundQueueID[i].bgQueueTypeId == bgQueueTypeId)
|
||||
return m_bgBattlegroundQueueID[i].joinTime;
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool Player::InBattlegroundQueue() const
|
||||
{
|
||||
for (uint8 i = 0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; ++i)
|
||||
@@ -23108,7 +23117,10 @@ bool Player::InBattlegroundQueue() const
|
||||
|
||||
BattlegroundQueueTypeId Player::GetBattlegroundQueueTypeId(uint32 index) const
|
||||
{
|
||||
return m_bgBattlegroundQueueID[index].bgQueueTypeId;
|
||||
if (index < PLAYER_MAX_BATTLEGROUND_QUEUES)
|
||||
return m_bgBattlegroundQueueID[index].bgQueueTypeId;
|
||||
|
||||
return BATTLEGROUND_QUEUE_NONE;
|
||||
}
|
||||
|
||||
uint32 Player::GetBattlegroundQueueIndex(BattlegroundQueueTypeId bgQueueTypeId) const
|
||||
@@ -23146,6 +23158,7 @@ uint32 Player::AddBattlegroundQueueId(BattlegroundQueueTypeId val)
|
||||
{
|
||||
m_bgBattlegroundQueueID[i].bgQueueTypeId = val;
|
||||
m_bgBattlegroundQueueID[i].invitedToInstance = 0;
|
||||
m_bgBattlegroundQueueID[i].joinTime = getMSTime();
|
||||
return i;
|
||||
}
|
||||
}
|
||||
@@ -23168,6 +23181,7 @@ void Player::RemoveBattlegroundQueueId(BattlegroundQueueTypeId val)
|
||||
{
|
||||
m_bgBattlegroundQueueID[i].bgQueueTypeId = BATTLEGROUND_QUEUE_NONE;
|
||||
m_bgBattlegroundQueueID[i].invitedToInstance = 0;
|
||||
m_bgBattlegroundQueueID[i].joinTime = 0;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1133,14 +1133,12 @@ class Player;
|
||||
struct BGData
|
||||
{
|
||||
BGData() : bgInstanceID(0), bgTypeID(BATTLEGROUND_TYPE_NONE), bgAfkReportedCount(0), bgAfkReportedTimer(0),
|
||||
bgTeam(0), mountSpell(0) { bgQueuesJoinedTime.clear(); ClearTaxiPath(); }
|
||||
bgTeam(0), mountSpell(0) { ClearTaxiPath(); }
|
||||
|
||||
uint32 bgInstanceID; ///< This variable is set to bg->m_InstanceID,
|
||||
/// when player is teleported to BG - (it is battleground's GUID)
|
||||
BattlegroundTypeId bgTypeID;
|
||||
|
||||
std::map<uint32, uint32> bgQueuesJoinedTime;
|
||||
|
||||
GuidSet bgAfkReporter;
|
||||
uint8 bgAfkReportedCount;
|
||||
time_t bgAfkReportedTimer;
|
||||
@@ -2317,18 +2315,8 @@ class Player : public Unit, public GridObject<Player>
|
||||
BattlegroundTypeId GetBattlegroundTypeId() const { return m_bgData.bgTypeID; }
|
||||
Battleground* GetBattleground() const;
|
||||
|
||||
uint32 GetBattlegroundQueueJoinTime(uint32 bgTypeId) const { return m_bgData.bgQueuesJoinedTime.find(bgTypeId)->second; }
|
||||
void AddBattlegroundQueueJoinTime(uint32 bgTypeId, uint32 joinTime)
|
||||
{
|
||||
m_bgData.bgQueuesJoinedTime[bgTypeId] = joinTime;
|
||||
}
|
||||
void RemoveBattlegroundQueueJoinTime(uint32 bgTypeId)
|
||||
{
|
||||
m_bgData.bgQueuesJoinedTime.erase(m_bgData.bgQueuesJoinedTime.find(bgTypeId)->second);
|
||||
}
|
||||
|
||||
uint32 GetBattlegroundQueueJoinTime(BattlegroundQueueTypeId bgQueueTypeId) const;
|
||||
bool InBattlegroundQueue() const;
|
||||
|
||||
BattlegroundQueueTypeId GetBattlegroundQueueTypeId(uint32 index) const;
|
||||
uint32 GetBattlegroundQueueIndex(BattlegroundQueueTypeId bgQueueTypeId) const;
|
||||
bool IsInvitedForBattlegroundQueueType(BattlegroundQueueTypeId bgQueueTypeId) const;
|
||||
@@ -2652,6 +2640,7 @@ class Player : public Unit, public GridObject<Player>
|
||||
{
|
||||
BattlegroundQueueTypeId bgQueueTypeId;
|
||||
uint32 invitedToInstance;
|
||||
uint32 joinTime;
|
||||
};
|
||||
|
||||
BgBattlegroundQueueID_Rec m_bgBattlegroundQueueID[PLAYER_MAX_BATTLEGROUND_QUEUES];
|
||||
|
||||
@@ -1840,7 +1840,7 @@ void Group::UpdateLooterGuid(WorldObject* pLootedObject, bool ifneed)
|
||||
}
|
||||
}
|
||||
|
||||
GroupJoinBattlegroundResult Group::CanJoinBattlegroundQueue(Battleground const* bgOrTemplate, BattlegroundQueueTypeId bgQueueTypeId, uint32 MinPlayerCount, uint32 /*MaxPlayerCount*/, bool isRated, uint32 arenaSlot)
|
||||
GroupJoinBattlegroundResult Group::CanJoinBattlegroundQueue(Battleground const* bgOrTemplate, BattlegroundQueueTypeId bgQueueTypeId, uint32 MinPlayerCount, uint32 /*MaxPlayerCount*/, bool isRated, uint32 arenaSlot, ObjectGuid& errorGuid)
|
||||
{
|
||||
// check if this group is LFG group
|
||||
if (isLFGGroup())
|
||||
@@ -1881,7 +1881,10 @@ GroupJoinBattlegroundResult Group::CanJoinBattlegroundQueue(Battleground const*
|
||||
return ERR_BATTLEGROUND_JOIN_FAILED;
|
||||
// don't allow cross-faction join as group
|
||||
if (member->GetTeam() != team)
|
||||
{
|
||||
errorGuid = member->GetGUID();
|
||||
return ERR_BATTLEGROUND_JOIN_TIMED_OUT;
|
||||
}
|
||||
// not in the same battleground level braket, don't let join
|
||||
PvPDifficultyEntry const* memberBracketEntry = GetBattlegroundBracketByLevel(bracketEntry->MapID, member->getLevel());
|
||||
if (memberBracketEntry != bracketEntry)
|
||||
|
||||
@@ -251,7 +251,7 @@ class Group
|
||||
|
||||
void SetBattlegroundGroup(Battleground* bg);
|
||||
void SetBattlefieldGroup(Battlefield* bf);
|
||||
GroupJoinBattlegroundResult CanJoinBattlegroundQueue(Battleground const* bgOrTemplate, BattlegroundQueueTypeId bgQueueTypeId, uint32 MinPlayerCount, uint32 MaxPlayerCount, bool isRated, uint32 arenaSlot);
|
||||
GroupJoinBattlegroundResult CanJoinBattlegroundQueue(Battleground const* bgOrTemplate, BattlegroundQueueTypeId bgQueueTypeId, uint32 MinPlayerCount, uint32 MaxPlayerCount, bool isRated, uint32 arenaSlot, ObjectGuid& errorGuid);
|
||||
|
||||
void ChangeMembersGroup(ObjectGuid guid, uint8 group);
|
||||
void SetTargetIcon(uint8 id, ObjectGuid whoGuid, ObjectGuid targetGuid);
|
||||
|
||||
@@ -36,15 +36,12 @@
|
||||
#include "Group.h"
|
||||
#include "Battlefield.h"
|
||||
#include "BattlefieldMgr.h"
|
||||
#include "NPCPackets.h"
|
||||
#include "BattlegroundPackets.h"
|
||||
|
||||
void WorldSession::HandleBattlemasterHelloOpcode(WorldPacket& recvData)
|
||||
void WorldSession::HandleBattlemasterHelloOpcode(WorldPackets::NPC::Hello& hello)
|
||||
{
|
||||
ObjectGuid guid;
|
||||
recvData >> guid;
|
||||
TC_LOG_DEBUG("network", "WORLD: Recvd CMSG_BATTLEMASTER_HELLO Message from %s", guid.ToString().c_str());
|
||||
|
||||
Creature* unit = GetPlayer()->GetMap()->GetCreature(guid);
|
||||
Creature* unit = GetPlayer()->GetMap()->GetCreature(hello.Unit);
|
||||
if (!unit)
|
||||
return;
|
||||
|
||||
@@ -63,48 +60,14 @@ void WorldSession::HandleBattlemasterHelloOpcode(WorldPacket& recvData)
|
||||
return;
|
||||
}
|
||||
|
||||
SendBattleGroundList(guid, bgTypeId);
|
||||
sBattlegroundMgr->SendBattlegroundList(_player, hello.Unit, bgTypeId);
|
||||
}
|
||||
|
||||
void WorldSession::SendBattleGroundList(ObjectGuid guid, BattlegroundTypeId bgTypeId)
|
||||
void WorldSession::HandleBattlemasterJoinOpcode(WorldPackets::Battleground::BattlemasterJoin& battlemasterJoin)
|
||||
{
|
||||
WorldPacket data;
|
||||
sBattlegroundMgr->BuildBattlegroundListPacket(&data, guid, _player, bgTypeId);
|
||||
SendPacket(&data);
|
||||
}
|
||||
|
||||
void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData)
|
||||
{
|
||||
uint32 bgTypeId_;
|
||||
uint32 instanceId;
|
||||
uint8 asGroup;
|
||||
bool isPremade = false;
|
||||
Group* grp = NULL;
|
||||
ObjectGuid guid;
|
||||
|
||||
recvData >> instanceId; // Instance Id
|
||||
guid[2] = recvData.ReadBit();
|
||||
guid[0] = recvData.ReadBit();
|
||||
guid[3] = recvData.ReadBit();
|
||||
guid[1] = recvData.ReadBit();
|
||||
guid[5] = recvData.ReadBit();
|
||||
asGroup = recvData.ReadBit(); // As Group
|
||||
guid[4] = recvData.ReadBit();
|
||||
guid[6] = recvData.ReadBit();
|
||||
guid[7] = recvData.ReadBit();
|
||||
|
||||
recvData.ReadByteSeq(guid[2]);
|
||||
recvData.ReadByteSeq(guid[6]);
|
||||
recvData.ReadByteSeq(guid[4]);
|
||||
recvData.ReadByteSeq(guid[3]);
|
||||
recvData.ReadByteSeq(guid[7]);
|
||||
recvData.ReadByteSeq(guid[0]);
|
||||
recvData.ReadByteSeq(guid[5]);
|
||||
recvData.ReadByteSeq(guid[1]);
|
||||
|
||||
//extract from guid
|
||||
bgTypeId_ = uint64(guid.GetCounter()) & 0xFFFFFFFF;
|
||||
|
||||
uint32 bgTypeId_ = battlemasterJoin.QueueID & 0xFFFF;
|
||||
if (!sBattlemasterListStore.LookupEntry(bgTypeId_))
|
||||
{
|
||||
TC_LOG_ERROR("network", "Battleground: invalid bgtype (%u) received. possible cheater? %s", bgTypeId_, _player->GetGUID().ToString().c_str());
|
||||
@@ -116,9 +79,8 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData)
|
||||
ChatHandler(this).PSendSysMessage(LANG_BG_DISABLED);
|
||||
return;
|
||||
}
|
||||
BattlegroundTypeId bgTypeId = BattlegroundTypeId(bgTypeId_);
|
||||
|
||||
TC_LOG_DEBUG("network", "WORLD: Recvd CMSG_BATTLEMASTER_JOIN Message from %s", guid.ToString().c_str());
|
||||
BattlegroundTypeId bgTypeId = BattlegroundTypeId(bgTypeId_);
|
||||
|
||||
// can do this, since it's battleground, not arena
|
||||
BattlegroundQueueTypeId bgQueueTypeId = BattlegroundMgr::BGQueueTypeId(bgTypeId, 0);
|
||||
@@ -129,12 +91,7 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData)
|
||||
return;
|
||||
|
||||
// get bg instance or bg template if instance not found
|
||||
Battleground* bg = NULL;
|
||||
if (instanceId)
|
||||
bg = sBattlegroundMgr->GetBattlegroundThroughClientInstance(instanceId, bgTypeId);
|
||||
|
||||
if (!bg)
|
||||
bg = sBattlegroundMgr->GetBattlegroundTemplate(bgTypeId);
|
||||
Battleground* bg = sBattlegroundMgr->GetBattlegroundTemplate(bgTypeId);
|
||||
if (!bg)
|
||||
return;
|
||||
|
||||
@@ -146,40 +103,40 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData)
|
||||
GroupJoinBattlegroundResult err = ERR_BATTLEGROUND_NONE;
|
||||
|
||||
// check queue conditions
|
||||
if (!asGroup)
|
||||
if (!battlemasterJoin.JoinAsGroup)
|
||||
{
|
||||
if (GetPlayer()->isUsingLfg())
|
||||
{
|
||||
WorldPacket data;
|
||||
sBattlegroundMgr->BuildStatusFailedPacket(&data, bg, _player, 0, ERR_LFG_CANT_USE_BATTLEGROUND);
|
||||
SendPacket(&data);
|
||||
WorldPackets::Battleground::BattlefieldStatusFailed battlefieldStatus;
|
||||
sBattlegroundMgr->BuildBattlegroundStatusFailed(&battlefieldStatus, bg, _player, 0, 0, ERR_LFG_CANT_USE_BATTLEGROUND);
|
||||
SendPacket(battlefieldStatus.Write());
|
||||
return;
|
||||
}
|
||||
|
||||
// check Deserter debuff
|
||||
if (!_player->CanJoinToBattleground(bg))
|
||||
{
|
||||
WorldPacket data;
|
||||
sBattlegroundMgr->BuildStatusFailedPacket(&data, bg, _player, 0, ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS);
|
||||
SendPacket(&data);
|
||||
WorldPackets::Battleground::BattlefieldStatusFailed battlefieldStatus;
|
||||
sBattlegroundMgr->BuildBattlegroundStatusFailed(&battlefieldStatus, bg, _player, 0, 0, ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS);
|
||||
SendPacket(battlefieldStatus.Write());
|
||||
return;
|
||||
}
|
||||
|
||||
if (_player->GetBattlegroundQueueIndex(bgQueueTypeIdRandom) < PLAYER_MAX_BATTLEGROUND_QUEUES)
|
||||
{
|
||||
// player is already in random queue
|
||||
WorldPacket data;
|
||||
sBattlegroundMgr->BuildStatusFailedPacket(&data, bg, _player, 0, ERR_IN_RANDOM_BG);
|
||||
SendPacket(&data);
|
||||
WorldPackets::Battleground::BattlefieldStatusFailed battlefieldStatus;
|
||||
sBattlegroundMgr->BuildBattlegroundStatusFailed(&battlefieldStatus, bg, _player, 0, 0, ERR_IN_RANDOM_BG);
|
||||
SendPacket(battlefieldStatus.Write());
|
||||
return;
|
||||
}
|
||||
|
||||
if (_player->InBattlegroundQueue() && bgTypeId == BATTLEGROUND_RB)
|
||||
{
|
||||
// player is already in queue, can't start random queue
|
||||
WorldPacket data;
|
||||
sBattlegroundMgr->BuildStatusFailedPacket(&data, bg, _player, 0, ERR_IN_NON_RANDOM_BG);
|
||||
SendPacket(&data);
|
||||
WorldPackets::Battleground::BattlefieldStatusFailed battlefieldStatus;
|
||||
sBattlegroundMgr->BuildBattlegroundStatusFailed(&battlefieldStatus, bg, _player, 0, 0, ERR_IN_NON_RANDOM_BG);
|
||||
SendPacket(battlefieldStatus.Write());
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -191,9 +148,9 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData)
|
||||
// check if has free queue slots
|
||||
if (!_player->HasFreeBattlegroundQueueId())
|
||||
{
|
||||
WorldPacket data;
|
||||
sBattlegroundMgr->BuildStatusFailedPacket(&data, bg, _player, 0, ERR_BATTLEGROUND_TOO_MANY_QUEUES);
|
||||
SendPacket(&data);
|
||||
WorldPackets::Battleground::BattlefieldStatusFailed battlefieldStatus;
|
||||
sBattlegroundMgr->BuildBattlegroundStatusFailed(&battlefieldStatus, bg, _player, 0, 0, ERR_BATTLEGROUND_TOO_MANY_QUEUES);
|
||||
SendPacket(battlefieldStatus.Write());
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -203,12 +160,9 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData)
|
||||
uint32 avgTime = bgQueue.GetAverageQueueWaitTime(ginfo, bracketEntry->GetBracketId());
|
||||
uint32 queueSlot = _player->AddBattlegroundQueueId(bgQueueTypeId);
|
||||
|
||||
// add joined time data
|
||||
_player->AddBattlegroundQueueJoinTime(bgTypeId, ginfo->JoinTime);
|
||||
|
||||
WorldPacket data; // send status packet (in queue)
|
||||
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, _player, queueSlot, STATUS_WAIT_QUEUE, avgTime, ginfo->JoinTime, ginfo->ArenaType);
|
||||
SendPacket(&data);
|
||||
WorldPackets::Battleground::BattlefieldStatusQueued battlefieldStatus;
|
||||
sBattlegroundMgr->BuildBattlegroundStatusQueued(&battlefieldStatus, bg, _player, queueSlot, ginfo->JoinTime, avgTime, ginfo->ArenaType, false);
|
||||
SendPacket(battlefieldStatus.Write());
|
||||
|
||||
TC_LOG_DEBUG("bg.battleground", "Battleground: player joined queue for bg queue type %u bg type %u, %s, NAME %s",
|
||||
bgQueueTypeId, bgTypeId, _player->GetGUID().ToString().c_str(), _player->GetName().c_str());
|
||||
@@ -223,7 +177,8 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData)
|
||||
if (grp->GetLeaderGUID() != _player->GetGUID())
|
||||
return;
|
||||
|
||||
err = grp->CanJoinBattlegroundQueue(bg, bgQueueTypeId, 0, bg->GetMaxPlayersPerTeam(), false, 0);
|
||||
ObjectGuid errorGuid;
|
||||
err = grp->CanJoinBattlegroundQueue(bg, bgQueueTypeId, 0, bg->GetMaxPlayersPerTeam(), false, 0, errorGuid);
|
||||
isPremade = (grp->GetMembersCount() >= bg->GetMinPlayersPerTeam());
|
||||
|
||||
BattlegroundQueue& bgQueue = sBattlegroundMgr->GetBattlegroundQueue(bgQueueTypeId);
|
||||
@@ -245,21 +200,18 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData)
|
||||
|
||||
if (err)
|
||||
{
|
||||
WorldPacket data;
|
||||
sBattlegroundMgr->BuildStatusFailedPacket(&data, bg, _player, 0, err);
|
||||
member->GetSession()->SendPacket(&data);
|
||||
WorldPackets::Battleground::BattlefieldStatusFailed battlefieldStatus;
|
||||
sBattlegroundMgr->BuildBattlegroundStatusFailed(&battlefieldStatus, bg, _player, 0, 0, err, &errorGuid);
|
||||
member->SendDirectMessage(battlefieldStatus.Write());
|
||||
continue;
|
||||
}
|
||||
|
||||
// add to queue
|
||||
uint32 queueSlot = member->AddBattlegroundQueueId(bgQueueTypeId);
|
||||
|
||||
// add joined time data
|
||||
member->AddBattlegroundQueueJoinTime(bgTypeId, ginfo->JoinTime);
|
||||
|
||||
WorldPacket data; // send status packet (in queue)
|
||||
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, member, queueSlot, STATUS_WAIT_QUEUE, avgTime, ginfo->JoinTime, ginfo->ArenaType);
|
||||
member->GetSession()->SendPacket(&data);
|
||||
WorldPackets::Battleground::BattlefieldStatusQueued battlefieldStatus;
|
||||
sBattlegroundMgr->BuildBattlegroundStatusQueued(&battlefieldStatus, bg, member, queueSlot, ginfo->JoinTime, avgTime, ginfo->ArenaType, true);
|
||||
member->SendDirectMessage(battlefieldStatus.Write());
|
||||
TC_LOG_DEBUG("bg.battleground", "Battleground: player joined queue for bg queue type %u bg type %u, %s, NAME %s",
|
||||
bgQueueTypeId, bgTypeId, member->GetGUID().ToString().c_str(), member->GetName().c_str());
|
||||
}
|
||||
@@ -374,67 +326,32 @@ void WorldSession::HandlePVPLogDataOpcode(WorldPackets::Battleground::PVPLogData
|
||||
SendPacket(pvpLogData.Write());
|
||||
}
|
||||
|
||||
void WorldSession::HandleBattlefieldListOpcode(WorldPacket& recvData)
|
||||
void WorldSession::HandleBattlefieldListOpcode(WorldPackets::Battleground::BattlefieldListRequest& battlefieldList)
|
||||
{
|
||||
uint32 bgTypeId;
|
||||
recvData >> bgTypeId; // id from DBC
|
||||
|
||||
BattlemasterListEntry const* bl = sBattlemasterListStore.LookupEntry(bgTypeId);
|
||||
if (!bl)
|
||||
BattlemasterListEntry const* battlemasterListEntry = sBattlemasterListStore.LookupEntry(battlefieldList.ListID);
|
||||
if (!battlemasterListEntry)
|
||||
{
|
||||
TC_LOG_DEBUG("bg.battleground", "BattlegroundHandler: invalid bgtype (%u) with player (Name: %s, %s) received.", bgTypeId, _player->GetName().c_str(), _player->GetGUID().ToString().c_str());
|
||||
TC_LOG_DEBUG("bg.battleground", "BattlegroundHandler: invalid bgtype (%u) with player (Name: %s, %s) received.", battlefieldList.ListID, _player->GetName().c_str(), _player->GetGUID().ToString().c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
WorldPacket data;
|
||||
sBattlegroundMgr->BuildBattlegroundListPacket(&data, ObjectGuid::Empty, _player, BattlegroundTypeId(bgTypeId));
|
||||
SendPacket(&data);
|
||||
sBattlegroundMgr->SendBattlegroundList(_player, ObjectGuid::Empty, BattlegroundTypeId(battlefieldList.ListID));
|
||||
}
|
||||
|
||||
void WorldSession::HandleBattleFieldPortOpcode(WorldPacket &recvData)
|
||||
void WorldSession::HandleBattleFieldPortOpcode(WorldPackets::Battleground::BattlefieldPort& battlefieldPort)
|
||||
{
|
||||
uint32 time;
|
||||
uint32 queueSlot;
|
||||
uint32 unk;
|
||||
uint8 action; // enter battle 0x1, leave queue 0x0
|
||||
ObjectGuid guid;
|
||||
|
||||
recvData >> time;
|
||||
recvData >> queueSlot;
|
||||
recvData >> unk;
|
||||
|
||||
guid[0] = recvData.ReadBit();
|
||||
guid[1] = recvData.ReadBit();
|
||||
guid[5] = recvData.ReadBit();
|
||||
guid[6] = recvData.ReadBit();
|
||||
guid[7] = recvData.ReadBit();
|
||||
guid[4] = recvData.ReadBit();
|
||||
guid[3] = recvData.ReadBit();
|
||||
guid[2] = recvData.ReadBit();
|
||||
|
||||
action = recvData.ReadBit();
|
||||
|
||||
recvData.ReadByteSeq(guid[1]);
|
||||
recvData.ReadByteSeq(guid[3]);
|
||||
recvData.ReadByteSeq(guid[5]);
|
||||
recvData.ReadByteSeq(guid[7]);
|
||||
recvData.ReadByteSeq(guid[0]);
|
||||
recvData.ReadByteSeq(guid[2]);
|
||||
recvData.ReadByteSeq(guid[6]);
|
||||
recvData.ReadByteSeq(guid[4]);
|
||||
|
||||
if (!_player->InBattlegroundQueue())
|
||||
{
|
||||
TC_LOG_DEBUG("bg.battleground", "CMSG_BATTLEFIELD_PORT %s Slot: %u, Unk: %u, Time: %u, Action: %u. Player not in queue!",
|
||||
GetPlayerInfo().c_str(), queueSlot, unk, time, action);
|
||||
TC_LOG_DEBUG("bg.battleground", "CMSG_BATTLEFIELD_PORT %s Slot: %u, Unk: %u, Time: %u, AcceptedInvite: %u. Player not in queue!",
|
||||
GetPlayerInfo().c_str(), battlefieldPort.Ticket.Id, battlefieldPort.Ticket.Type, battlefieldPort.Ticket.Time, uint32(battlefieldPort.AcceptedInvite));
|
||||
return;
|
||||
}
|
||||
|
||||
BattlegroundQueueTypeId bgQueueTypeId = _player->GetBattlegroundQueueTypeId(queueSlot);
|
||||
BattlegroundQueueTypeId bgQueueTypeId = _player->GetBattlegroundQueueTypeId(battlefieldPort.Ticket.Id);
|
||||
if (bgQueueTypeId == BATTLEGROUND_QUEUE_NONE)
|
||||
{
|
||||
TC_LOG_DEBUG("bg.battleground", "CMSG_BATTLEFIELD_PORT %s Slot: %u, Unk: %u, Time: %u, Action: %u. Invalid queueSlot!",
|
||||
GetPlayerInfo().c_str(), queueSlot, unk, time, action);
|
||||
TC_LOG_DEBUG("bg.battleground", "CMSG_BATTLEFIELD_PORT %s Slot: %u, Unk: %u, Time: %u, AcceptedInvite: %u. Invalid queueSlot!",
|
||||
GetPlayerInfo().c_str(), battlefieldPort.Ticket.Id, battlefieldPort.Ticket.Type, battlefieldPort.Ticket.Time, uint32(battlefieldPort.AcceptedInvite));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -444,15 +361,15 @@ void WorldSession::HandleBattleFieldPortOpcode(WorldPacket &recvData)
|
||||
GroupQueueInfo ginfo;
|
||||
if (!bgQueue.GetPlayerGroupInfoData(_player->GetGUID(), &ginfo))
|
||||
{
|
||||
TC_LOG_DEBUG("bg.battleground", "CMSG_BATTLEFIELD_PORT %s Slot: %u, Unk: %u, Time: %u, Action: %u. Player not in queue (No player Group Info)!",
|
||||
GetPlayerInfo().c_str(), queueSlot, unk, time, action);
|
||||
TC_LOG_DEBUG("bg.battleground", "CMSG_BATTLEFIELD_PORT %s Slot: %u, Unk: %u, Time: %u, AcceptedInvite: %u. Player not in queue (No player Group Info)!",
|
||||
GetPlayerInfo().c_str(), battlefieldPort.Ticket.Id, battlefieldPort.Ticket.Type, battlefieldPort.Ticket.Time, uint32(battlefieldPort.AcceptedInvite));
|
||||
return;
|
||||
}
|
||||
// if action == 1, then instanceId is required
|
||||
if (!ginfo.IsInvitedToBGInstanceGUID && action == 1)
|
||||
// if action == 1, then player must have been invited to join
|
||||
if (!ginfo.IsInvitedToBGInstanceGUID && battlefieldPort.AcceptedInvite)
|
||||
{
|
||||
TC_LOG_DEBUG("bg.battleground", "CMSG_BATTLEFIELD_PORT %s Slot: %u, Unk: %u, Time: %u, Action: %u. Player is not invited to any bg!",
|
||||
GetPlayerInfo().c_str(), queueSlot, unk, time, action);
|
||||
TC_LOG_DEBUG("bg.battleground", "CMSG_BATTLEFIELD_PORT %s Slot: %u, Unk: %u, Time: %u, AcceptedInvite: %u. Player is not invited to any bg!",
|
||||
GetPlayerInfo().c_str(), battlefieldPort.Ticket.Id, battlefieldPort.Ticket.Type, battlefieldPort.Ticket.Time, uint32(battlefieldPort.AcceptedInvite));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -462,10 +379,10 @@ void WorldSession::HandleBattleFieldPortOpcode(WorldPacket &recvData)
|
||||
Battleground* bg = sBattlegroundMgr->GetBattleground(ginfo.IsInvitedToBGInstanceGUID, bgTypeId == BATTLEGROUND_AA ? BATTLEGROUND_TYPE_NONE : bgTypeId);
|
||||
if (!bg)
|
||||
{
|
||||
if (action)
|
||||
if (battlefieldPort.AcceptedInvite)
|
||||
{
|
||||
TC_LOG_DEBUG("bg.battleground", "CMSG_BATTLEFIELD_PORT %s Slot: %u, Unk: %u, Time: %u, Action: %u. Cant find BG with id %u!",
|
||||
GetPlayerInfo().c_str(), queueSlot, unk, time, action, ginfo.IsInvitedToBGInstanceGUID);
|
||||
TC_LOG_DEBUG("bg.battleground", "CMSG_BATTLEFIELD_PORT %s Slot: %u, Unk: %u, Time: %u, AcceptedInvite: %u. Cant find BG with id %u!",
|
||||
GetPlayerInfo().c_str(), battlefieldPort.Ticket.Id, battlefieldPort.Ticket.Type, battlefieldPort.Ticket.Time, uint32(battlefieldPort.AcceptedInvite), ginfo.IsInvitedToBGInstanceGUID);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -477,8 +394,8 @@ void WorldSession::HandleBattleFieldPortOpcode(WorldPacket &recvData)
|
||||
}
|
||||
}
|
||||
|
||||
TC_LOG_DEBUG("bg.battleground", "CMSG_BATTLEFIELD_PORT %s Slot: %u, Unk: %u, Time: %u, Action: %u.",
|
||||
GetPlayerInfo().c_str(), queueSlot, unk, time, action);
|
||||
TC_LOG_DEBUG("bg.battleground", "CMSG_BATTLEFIELD_PORT %s Slot: %u, Unk: %u, Time: %u, AcceptedInvite: %u.",
|
||||
GetPlayerInfo().c_str(), battlefieldPort.Ticket.Id, battlefieldPort.Ticket.Type, battlefieldPort.Ticket.Time, uint32(battlefieldPort.AcceptedInvite));
|
||||
|
||||
// get real bg type
|
||||
bgTypeId = bg->GetTypeID();
|
||||
@@ -489,16 +406,16 @@ void WorldSession::HandleBattleFieldPortOpcode(WorldPacket &recvData)
|
||||
return;
|
||||
|
||||
//some checks if player isn't cheating - it is not exactly cheating, but we cannot allow it
|
||||
if (action == 1 && ginfo.ArenaType == 0)
|
||||
if (battlefieldPort.AcceptedInvite && ginfo.ArenaType == 0)
|
||||
{
|
||||
//if player is trying to enter battleground (not arena!) and he has deserter debuff, we must just remove him from queue
|
||||
if (!_player->CanJoinToBattleground(bg))
|
||||
{
|
||||
//send bg command result to show nice message
|
||||
WorldPacket data2;
|
||||
sBattlegroundMgr->BuildStatusFailedPacket(&data2, bg, _player, 0, ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS);
|
||||
_player->GetSession()->SendPacket(&data2);
|
||||
action = 0;
|
||||
WorldPackets::Battleground::BattlefieldStatusFailed battlefieldStatus;
|
||||
sBattlegroundMgr->BuildBattlegroundStatusFailed(&battlefieldStatus, bg, _player, battlefieldPort.Ticket.Id, 0, ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS);
|
||||
SendPacket(battlefieldPort.Write());
|
||||
battlefieldPort.AcceptedInvite = false;
|
||||
TC_LOG_DEBUG("bg.battleground", "Player %s (%s) has a deserter debuff, do not port him to battleground!", _player->GetName().c_str(), _player->GetGUID().ToString().c_str());
|
||||
}
|
||||
//if player don't match battleground max level, then do not allow him to enter! (this might happen when player leveled up during his waiting in queue
|
||||
@@ -506,12 +423,11 @@ void WorldSession::HandleBattleFieldPortOpcode(WorldPacket &recvData)
|
||||
{
|
||||
TC_LOG_DEBUG("network", "Player %s (%s) has level (%u) higher than maxlevel (%u) of battleground (%u)! Do not port him to battleground!",
|
||||
_player->GetName().c_str(), _player->GetGUID().ToString().c_str(), _player->getLevel(), bg->GetMaxLevel(), bg->GetTypeID());
|
||||
action = 0;
|
||||
battlefieldPort.AcceptedInvite = false;
|
||||
}
|
||||
}
|
||||
|
||||
WorldPacket data;
|
||||
if (action)
|
||||
if (battlefieldPort.AcceptedInvite)
|
||||
{
|
||||
if (!_player->IsInvitedForBattlegroundQueueType(bgQueueTypeId))
|
||||
return; // cheating?
|
||||
@@ -532,8 +448,9 @@ void WorldSession::HandleBattleFieldPortOpcode(WorldPacket &recvData)
|
||||
_player->CleanupAfterTaxiFlight();
|
||||
}
|
||||
|
||||
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, _player, queueSlot, STATUS_IN_PROGRESS, _player->GetBattlegroundQueueJoinTime(bgTypeId), bg->GetElapsedTime(), bg->GetArenaType());
|
||||
_player->GetSession()->SendPacket(&data);
|
||||
WorldPackets::Battleground::BattlefieldStatusActive battlefieldStatus;
|
||||
sBattlegroundMgr->BuildBattlegroundStatusActive(&battlefieldStatus, bg, _player, battlefieldPort.Ticket.Id, _player->GetBattlegroundQueueJoinTime(bgQueueTypeId), bg->GetArenaType());
|
||||
SendPacket(battlefieldStatus.Write());
|
||||
|
||||
// remove battleground queue status from BGmgr
|
||||
bgQueue.RemovePlayer(_player->GetGUID(), false);
|
||||
@@ -566,8 +483,10 @@ void WorldSession::HandleBattleFieldPortOpcode(WorldPacket &recvData)
|
||||
at->SaveToDB();
|
||||
}
|
||||
}
|
||||
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, _player, queueSlot, STATUS_NONE, _player->GetBattlegroundQueueJoinTime(bgTypeId), 0, ginfo.ArenaType);
|
||||
SendPacket(&data);
|
||||
|
||||
WorldPackets::Battleground::BattlefieldStatusNone battlefieldStatus;
|
||||
battlefieldStatus.Ticket = battlefieldPort.Ticket;
|
||||
SendPacket(battlefieldStatus.Write());
|
||||
|
||||
_player->RemoveBattlegroundQueueId(bgQueueTypeId); // must be called this way, because if you move this call to queue->removeplayer, it causes bugs
|
||||
bgQueue.RemovePlayer(_player->GetGUID(), true);
|
||||
@@ -579,7 +498,7 @@ void WorldSession::HandleBattleFieldPortOpcode(WorldPacket &recvData)
|
||||
}
|
||||
}
|
||||
|
||||
void WorldSession::HandleBattlefieldLeaveOpcode(WorldPacket& /*recvData*/)
|
||||
void WorldSession::HandleBattlefieldLeaveOpcode(WorldPackets::Battleground::BattlefieldLeave& /*battlefieldLeave*/)
|
||||
{
|
||||
// not allow leave battleground in combat
|
||||
if (_player->IsInCombat())
|
||||
@@ -590,9 +509,8 @@ void WorldSession::HandleBattlefieldLeaveOpcode(WorldPacket& /*recvData*/)
|
||||
_player->LeaveBattleground();
|
||||
}
|
||||
|
||||
void WorldSession::HandleRequestBattlefieldStatusOpcode(WorldPacket& /*recvData*/)
|
||||
void WorldSession::HandleRequestBattlefieldStatusOpcode(WorldPackets::Battleground::RequestBattlefieldStatus& /*requestBattlefieldStatus*/)
|
||||
{
|
||||
WorldPacket data;
|
||||
// we must update all queues here
|
||||
Battleground* bg = NULL;
|
||||
for (uint8 i = 0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; ++i)
|
||||
@@ -609,10 +527,9 @@ void WorldSession::HandleRequestBattlefieldStatusOpcode(WorldPacket& /*recvData*
|
||||
//so i must use bg pointer to get that information
|
||||
if (bg && bg->GetArenaType() == arenaType)
|
||||
{
|
||||
// this line is checked, i only don't know if GetElapsedTime() is changing itself after bg end!
|
||||
// send status in Battleground
|
||||
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, GetPlayer(), i, STATUS_IN_PROGRESS, _player->GetBattlegroundQueueJoinTime(bgTypeId), bg->GetElapsedTime(), arenaType);
|
||||
SendPacket(&data);
|
||||
WorldPackets::Battleground::BattlefieldStatusActive battlefieldStatus;
|
||||
sBattlegroundMgr->BuildBattlegroundStatusActive(&battlefieldStatus, bg, _player, i, _player->GetBattlegroundQueueJoinTime(bgQueueTypeId), arenaType);
|
||||
SendPacket(battlefieldStatus.Write());
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -629,9 +546,10 @@ void WorldSession::HandleRequestBattlefieldStatusOpcode(WorldPacket& /*recvData*
|
||||
if (!bg)
|
||||
continue;
|
||||
|
||||
// send status invited to Battleground
|
||||
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, GetPlayer(), i, STATUS_WAIT_JOIN, getMSTimeDiff(getMSTime(), ginfo.RemoveInviteTime), _player->GetBattlegroundQueueJoinTime(bgTypeId), arenaType);
|
||||
SendPacket(&data);
|
||||
|
||||
WorldPackets::Battleground::BattlefieldStatusNeedConfirmation battlefieldStatus;
|
||||
sBattlegroundMgr->BuildBattlegroundStatusNeedConfirmation(&battlefieldStatus, bg, _player, i, _player->GetBattlegroundQueueJoinTime(bgQueueTypeId), getMSTimeDiff(getMSTime(), ginfo.RemoveInviteTime), arenaType);
|
||||
SendPacket(battlefieldStatus.Write());
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -645,9 +563,9 @@ void WorldSession::HandleRequestBattlefieldStatusOpcode(WorldPacket& /*recvData*
|
||||
continue;
|
||||
|
||||
uint32 avgTime = bgQueue.GetAverageQueueWaitTime(&ginfo, bracketEntry->GetBracketId());
|
||||
// send status in Battleground Queue
|
||||
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, GetPlayer(), i, STATUS_WAIT_QUEUE, avgTime, _player->GetBattlegroundQueueJoinTime(bgTypeId), arenaType);
|
||||
SendPacket(&data);
|
||||
WorldPackets::Battleground::BattlefieldStatusQueued battlefieldStatus;
|
||||
sBattlegroundMgr->BuildBattlegroundStatusQueued(&battlefieldStatus, bg, _player, i, _player->GetBattlegroundQueueJoinTime(bgQueueTypeId), avgTime, arenaType, ginfo.Players.size() > 1);
|
||||
SendPacket(battlefieldStatus.Write());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -718,7 +636,8 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recvData)
|
||||
uint32 avgTime = 0;
|
||||
GroupQueueInfo* ginfo = NULL;
|
||||
|
||||
err = grp->CanJoinBattlegroundQueue(bg, bgQueueTypeId, arenatype, arenatype, true, arenaslot);
|
||||
ObjectGuid errorGuid;
|
||||
err = grp->CanJoinBattlegroundQueue(bg, bgQueueTypeId, arenatype, arenatype, true, arenaslot, errorGuid);
|
||||
if (!err)
|
||||
{
|
||||
TC_LOG_DEBUG("bg.battleground", "Battleground: arena team id %u, leader %s queued with matchmaker rating %u for type %u", _player->GetArenaTeamId(arenaslot), _player->GetName().c_str(), matchmakerRating, arenatype);
|
||||
@@ -735,21 +654,18 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recvData)
|
||||
|
||||
if (err)
|
||||
{
|
||||
WorldPacket data;
|
||||
sBattlegroundMgr->BuildStatusFailedPacket(&data, bg, _player, 0, err);
|
||||
member->GetSession()->SendPacket(&data);
|
||||
WorldPackets::Battleground::BattlefieldStatusFailed battlefieldStatus;
|
||||
sBattlegroundMgr->BuildBattlegroundStatusFailed(&battlefieldStatus, bg, _player, 0, arenatype, err, &errorGuid);
|
||||
member->SendDirectMessage(battlefieldStatus.Write());
|
||||
continue;
|
||||
}
|
||||
|
||||
// add to queue
|
||||
uint32 queueSlot = member->AddBattlegroundQueueId(bgQueueTypeId);
|
||||
|
||||
// add joined time data
|
||||
member->AddBattlegroundQueueJoinTime(bgTypeId, ginfo->JoinTime);
|
||||
|
||||
WorldPacket data; // send status packet (in queue)
|
||||
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, member, queueSlot, STATUS_WAIT_QUEUE, avgTime, ginfo->JoinTime, arenatype);
|
||||
member->GetSession()->SendPacket(&data);
|
||||
WorldPackets::Battleground::BattlefieldStatusQueued battlefieldStatus;
|
||||
sBattlegroundMgr->BuildBattlegroundStatusQueued(&battlefieldStatus, bg, member, queueSlot, ginfo->JoinTime, avgTime, arenatype, true);
|
||||
member->SendDirectMessage(battlefieldStatus.Write());
|
||||
|
||||
TC_LOG_DEBUG("bg.battleground", "Battleground: player joined queue for arena as group bg queue type %u bg type %u, %s, NAME %s", bgQueueTypeId, bgTypeId, member->GetGUID().ToString().c_str(), member->GetName().c_str());
|
||||
}
|
||||
@@ -806,19 +722,17 @@ void WorldSession::HandleRequestRatedBattlefieldInfo(WorldPacket& recvData)
|
||||
SendPacket(&data);
|
||||
}
|
||||
|
||||
void WorldSession::HandleGetPVPOptionsEnabled(WorldPacket& /*recvData*/)
|
||||
void WorldSession::HandleGetPVPOptionsEnabled(WorldPackets::Battleground::GetPVPOptionsEnabled& /*getPvPOptionsEnabled*/)
|
||||
{
|
||||
/// @Todo: perfome research in this case
|
||||
WorldPacket data(SMSG_PVP_OPTIONS_ENABLED, 1);
|
||||
data.WriteBit(1);
|
||||
data.WriteBit(1); // WargamesEnabled
|
||||
data.WriteBit(1);
|
||||
data.WriteBit(1); // RatedBGsEnabled
|
||||
data.WriteBit(1); // RatedArenasEnabled
|
||||
|
||||
data.FlushBits();
|
||||
|
||||
SendPacket(&data);
|
||||
// This packet is completely irrelevant, it triggers PVP_TYPES_ENABLED lua event but that is not handled in interface code as of 6.1.2
|
||||
WorldPackets::Battleground::PVPOptionsEnabled pvpOptionsEnabled;
|
||||
pvpOptionsEnabled.WargameArenas = false;
|
||||
pvpOptionsEnabled.RatedArenas = false;
|
||||
pvpOptionsEnabled.WargameBattlegrounds = false;
|
||||
pvpOptionsEnabled.ArenaSkirmish = false;
|
||||
pvpOptionsEnabled.PugBattlegrounds = true;
|
||||
pvpOptionsEnabled.RatedBattlegrounds = false;
|
||||
SendPacket(pvpOptionsEnabled.Write());
|
||||
}
|
||||
|
||||
void WorldSession::HandleRequestPvpReward(WorldPacket& /*recvData*/)
|
||||
|
||||
@@ -4784,7 +4784,11 @@ enum GroupJoinBattlegroundResult
|
||||
ERR_REMOVE_FROM_PVP_QUEUE_GRANT_LEVEL = 33,
|
||||
ERR_REMOVE_FROM_PVP_QUEUE_FACTION_CHANGE = 34,
|
||||
ERR_BATTLEGROUND_JOIN_FAILED = 35,
|
||||
ERR_BATTLEGROUND_DUPE_QUEUE = 43
|
||||
ERR_BATTLEGROUND_DUPE_QUEUE = 43,
|
||||
ERR_BATTLEGROUND_JOIN_NO_VALID_SPEC_FOR_ROLE = 44,
|
||||
ERR_BATTLEGROUND_JOIN_RESPEC = 45,
|
||||
ERR_ALREADY_USING_LFG_LIST = 46,
|
||||
ERR_BATTLEGROUND_JOIN_MUST_COMPLETE_QUEST = 47
|
||||
};
|
||||
|
||||
enum PetNameInvalidReason
|
||||
|
||||
@@ -110,3 +110,114 @@ WorldPacket const* WorldPackets::Battleground::PVPLogData::Write()
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Battleground::BattlemasterJoin::Read()
|
||||
{
|
||||
_worldPacket >> QueueID;
|
||||
_worldPacket >> Roles;
|
||||
_worldPacket >> BlacklistMap[0] >> BlacklistMap[1];
|
||||
JoinAsGroup = _worldPacket.ReadBit();
|
||||
}
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Battleground::BattlefieldStatusHeader const& header)
|
||||
{
|
||||
data << header.Ticket;
|
||||
data << uint64(header.QueueID);
|
||||
data << uint8(header.RangeMin);
|
||||
data << uint8(header.RangeMax);
|
||||
data << uint8(header.TeamSize);
|
||||
data << uint32(header.InstanceID);
|
||||
data.WriteBit(header.RegisteredMatch);
|
||||
data.WriteBit(header.TournamentRules);
|
||||
data.FlushBits();
|
||||
return data;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Battleground::BattlefieldStatusNone::Write()
|
||||
{
|
||||
_worldPacket << Ticket;
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Battleground::BattlefieldStatusNeedConfirmation::Write()
|
||||
{
|
||||
_worldPacket << Hdr;
|
||||
_worldPacket << uint32(Mapid);
|
||||
_worldPacket << uint32(Timeout);
|
||||
_worldPacket << uint8(Role);
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Battleground::BattlefieldStatusActive::Write()
|
||||
{
|
||||
_worldPacket << Hdr;
|
||||
_worldPacket << uint32(Mapid);
|
||||
_worldPacket << uint32(ShutdownTimer);
|
||||
_worldPacket << uint32(StartTimer);
|
||||
_worldPacket.WriteBit(ArenaFaction);
|
||||
_worldPacket.WriteBit(LeftEarly);
|
||||
_worldPacket.FlushBits();
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Battleground::BattlefieldStatusQueued::Write()
|
||||
{
|
||||
_worldPacket << Hdr;
|
||||
_worldPacket << uint32(AverageWaitTime);
|
||||
_worldPacket << uint32(WaitTime);
|
||||
_worldPacket.WriteBit(AsGroup);
|
||||
_worldPacket.WriteBit(EligibleForMatchmaking);
|
||||
_worldPacket.WriteBit(SuspendedQueue);
|
||||
_worldPacket.FlushBits();
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Battleground::BattlefieldStatusFailed::Write()
|
||||
{
|
||||
_worldPacket << Ticket;
|
||||
_worldPacket << uint64(QueueID);
|
||||
_worldPacket << uint32(Reason);
|
||||
_worldPacket << ClientID;
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Battleground::BattlefieldPort::Read()
|
||||
{
|
||||
_worldPacket >> Ticket;
|
||||
AcceptedInvite = _worldPacket.ReadBit();
|
||||
}
|
||||
|
||||
void WorldPackets::Battleground::BattlefieldListRequest::Read()
|
||||
{
|
||||
_worldPacket >> ListID;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Battleground::BattlefieldList::Write()
|
||||
{
|
||||
_worldPacket << BattlemasterGuid;
|
||||
_worldPacket << int32(BattlemasterListID);
|
||||
_worldPacket << uint8(MinLevel);
|
||||
_worldPacket << uint8(MaxLevel);
|
||||
_worldPacket << uint32(Battlefields.size());
|
||||
if (!Battlefields.empty())
|
||||
_worldPacket.append(Battlefields.data(), Battlefields.size());
|
||||
|
||||
_worldPacket.WriteBit(PvpAnywhere);
|
||||
_worldPacket.WriteBit(HasHolidayWinToday);
|
||||
_worldPacket.WriteBit(HasRandomWinToday);
|
||||
_worldPacket.WriteBit(IsRandomBG);
|
||||
_worldPacket.FlushBits();
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Battleground::PVPOptionsEnabled::Write()
|
||||
{
|
||||
_worldPacket.WriteBit(RatedBattlegrounds);
|
||||
_worldPacket.WriteBit(PugBattlegrounds);
|
||||
_worldPacket.WriteBit(WargameBattlegrounds);
|
||||
_worldPacket.WriteBit(WargameArenas);
|
||||
_worldPacket.WriteBit(RatedArenas);
|
||||
_worldPacket.WriteBit(ArenaSkirmish);
|
||||
_worldPacket.FlushBits();
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
|
||||
#include "ObjectGuid.h"
|
||||
#include "Packet.h"
|
||||
#include "LFGPackets.h"
|
||||
|
||||
namespace WorldPackets
|
||||
{
|
||||
@@ -116,6 +117,175 @@ namespace WorldPackets
|
||||
Optional<RatingData> Ratings;
|
||||
int8 PlayerCount[2] = { };
|
||||
};
|
||||
|
||||
struct BattlefieldStatusHeader
|
||||
{
|
||||
WorldPackets::LFG::RideTicket Ticket;
|
||||
uint64 QueueID = 0;
|
||||
uint8 RangeMin = 0;
|
||||
uint8 RangeMax = 0;
|
||||
uint8 TeamSize = 0;
|
||||
uint32 InstanceID = 0;
|
||||
bool RegisteredMatch = false;
|
||||
bool TournamentRules = false;
|
||||
};
|
||||
|
||||
class BattlefieldStatusNone final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
BattlefieldStatusNone() : ServerPacket(SMSG_BATTLEFIELD_STATUS_NONE, 16 + 4 + 4 + 4) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
WorldPackets::LFG::RideTicket Ticket;
|
||||
};
|
||||
|
||||
class BattlefieldStatusNeedConfirmation final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
BattlefieldStatusNeedConfirmation() : ServerPacket(SMSG_BATTLEFIELD_STATUS_NEED_CONFIRMATION, 4 + 4 + sizeof(BattlefieldStatusHeader) + 1) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
uint32 Timeout = 0;
|
||||
uint32 Mapid = 0;
|
||||
BattlefieldStatusHeader Hdr;
|
||||
uint8 Role = 0;
|
||||
};
|
||||
|
||||
class BattlefieldStatusActive final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
BattlefieldStatusActive() : ServerPacket(SMSG_BATTLEFIELD_STATUS_ACTIVE, sizeof(BattlefieldStatusHeader) + 4 + 1 + 1 + 4 + 4) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
BattlefieldStatusHeader Hdr;
|
||||
uint32 ShutdownTimer = 0;
|
||||
uint8 ArenaFaction = 0;
|
||||
bool LeftEarly = false;
|
||||
uint32 StartTimer = 0;
|
||||
uint32 Mapid = 0;
|
||||
};
|
||||
|
||||
class BattlefieldStatusQueued final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
BattlefieldStatusQueued() : ServerPacket(SMSG_BATTLEFIELD_STATUS_QUEUED, 4 + sizeof(BattlefieldStatusHeader) + 1 + 1 + 1 + 4) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
uint32 AverageWaitTime = 0;
|
||||
BattlefieldStatusHeader Hdr;
|
||||
bool AsGroup = false;
|
||||
bool SuspendedQueue = false;
|
||||
bool EligibleForMatchmaking = false;
|
||||
uint32 WaitTime = 0;
|
||||
};
|
||||
|
||||
class BattlefieldStatusFailed final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
BattlefieldStatusFailed() : ServerPacket(SMSG_BATTLEFIELD_STATUS_FAILED, 8 + 16 + 4 + 16 + 4 + 4 + 4) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
uint64 QueueID = 0;
|
||||
ObjectGuid ClientID;
|
||||
int32 Reason = 0;
|
||||
WorldPackets::LFG::RideTicket Ticket;
|
||||
};
|
||||
|
||||
class BattlemasterJoin final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
BattlemasterJoin(WorldPacket&& packet) : ClientPacket(CMSG_BATTLEMASTER_JOIN, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
bool JoinAsGroup = false;
|
||||
uint8 Roles = 0;
|
||||
uint64 QueueID = 0;
|
||||
int32 BlacklistMap[2] = { };
|
||||
};
|
||||
|
||||
class BattlefieldLeave final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
BattlefieldLeave(WorldPacket&& packet) : ClientPacket(CMSG_BATTLEFIELD_LEAVE, std::move(packet)) { }
|
||||
|
||||
void Read() override { }
|
||||
};
|
||||
|
||||
class BattlefieldPort final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
BattlefieldPort(WorldPacket&& packet) : ClientPacket(CMSG_BATTLEFIELD_PORT, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
WorldPackets::LFG::RideTicket Ticket;
|
||||
bool AcceptedInvite = false;
|
||||
};
|
||||
|
||||
class BattlefieldListRequest final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
BattlefieldListRequest(WorldPacket&& packet) : ClientPacket(CMSG_BATTLEFIELD_LIST, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
int32 ListID = 0;
|
||||
};
|
||||
|
||||
class BattlefieldList final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
BattlefieldList() : ServerPacket(SMSG_BATTLEFIELD_LIST, 1 + 1 + 16 + 1 + 1 + 1 + 4 + 1 + 4) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
uint8 MaxLevel = 0;
|
||||
bool PvpAnywhere = false;
|
||||
ObjectGuid BattlemasterGuid;
|
||||
bool IsRandomBG = false;
|
||||
uint8 MinLevel = 0;
|
||||
bool HasHolidayWinToday = false;
|
||||
int32 BattlemasterListID = 0;
|
||||
bool HasRandomWinToday = false;
|
||||
std::vector<int32> Battlefields; // Players cannot join a specific battleground instance anymore - this is always empty
|
||||
};
|
||||
|
||||
class GetPVPOptionsEnabled final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GetPVPOptionsEnabled(WorldPacket&& packet) : ClientPacket(CMSG_GET_PVP_OPTIONS_ENABLED, std::move(packet)) { }
|
||||
|
||||
void Read() override { }
|
||||
};
|
||||
|
||||
class PVPOptionsEnabled final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
PVPOptionsEnabled() : ServerPacket(SMSG_PVP_OPTIONS_ENABLED, 1) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
bool WargameArenas = false;
|
||||
bool RatedArenas = false;
|
||||
bool WargameBattlegrounds = false;
|
||||
bool ArenaSkirmish = false;
|
||||
bool PugBattlegrounds = false;
|
||||
bool RatedBattlegrounds = false;
|
||||
};
|
||||
|
||||
class RequestBattlefieldStatus final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
RequestBattlefieldStatus(WorldPacket&& packet) : ClientPacket(CMSG_REQUEST_BATTLEFIELD_STATUS, std::move(packet)) { }
|
||||
|
||||
void Read() override { }
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -26,3 +26,13 @@ ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::LFG::RideTicket& ticket)
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::LFG::RideTicket const& ticket)
|
||||
{
|
||||
data << ticket.RequesterGuid;
|
||||
data << int32(ticket.Id);
|
||||
data << int32(ticket.Type);
|
||||
data << uint32(ticket.Time);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
@@ -35,5 +35,6 @@ namespace WorldPackets
|
||||
}
|
||||
|
||||
ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::LFG::RideTicket& ticket);
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::LFG::RideTicket const& ticket);
|
||||
|
||||
#endif // LFGPackets_h__
|
||||
|
||||
@@ -34,6 +34,7 @@ namespace WorldPackets
|
||||
// CMSG_GOSSIP_HELLO
|
||||
// CMSG_LIST_INVENTORY
|
||||
// CMSG_TRAINER_LIST
|
||||
// CMSG_BATTLEMASTER_HELLO
|
||||
class Hello final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -184,11 +184,11 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_AUTO_EQUIP_ITEM_SLOT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Item::AutoEquipItemSlot, &WorldSession::HandleAutoEquipItemSlotOpcode);
|
||||
DEFINE_HANDLER(CMSG_AUTO_STORE_BAG_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Item::AutoStoreBagItem, &WorldSession::HandleAutoStoreBagItemOpcode);
|
||||
DEFINE_HANDLER(CMSG_BANKER_ACTIVATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::NPC::Hello, &WorldSession::HandleBankerActivateOpcode);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_BATTLEFIELD_LEAVE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::HandleBattlefieldLeaveOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_BATTLEFIELD_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlefieldListOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_BATTLEFIELD_PORT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleBattleFieldPortOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_BATTLEMASTER_HELLO, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlemasterHelloOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_BATTLEMASTER_JOIN, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlemasterJoinOpcode );
|
||||
DEFINE_HANDLER(CMSG_BATTLEFIELD_LEAVE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Battleground::BattlefieldLeave, &WorldSession::HandleBattlefieldLeaveOpcode);
|
||||
DEFINE_HANDLER(CMSG_BATTLEFIELD_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Battleground::BattlefieldListRequest, &WorldSession::HandleBattlefieldListOpcode);
|
||||
DEFINE_HANDLER(CMSG_BATTLEFIELD_PORT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Battleground::BattlefieldPort, &WorldSession::HandleBattleFieldPortOpcode);
|
||||
DEFINE_HANDLER(CMSG_BATTLEMASTER_HELLO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::NPC::Hello, &WorldSession::HandleBattlemasterHelloOpcode);
|
||||
DEFINE_HANDLER(CMSG_BATTLEMASTER_JOIN, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Battleground::BattlemasterJoin, &WorldSession::HandleBattlemasterJoinOpcode);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_BATTLEMASTER_JOIN_ARENA, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlemasterJoinArena );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_BATTLEMASTER_JOIN_SKIRMISH, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_BATTLENET_CHALLENGE_RESPONSE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
@@ -392,7 +392,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_GET_GARRISON_INFO, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_HANDLER(CMSG_GET_ITEM_PURCHASE_DATA, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Item::GetItemPurchaseData, &WorldSession::HandleGetItemPurchaseData);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_GET_MIRROR_IMAGE_DATA, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleMirrorImageDataRequest );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_GET_PVP_OPTIONS_ENABLED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::HandleGetPVPOptionsEnabled );
|
||||
DEFINE_HANDLER(CMSG_GET_PVP_OPTIONS_ENABLED, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Battleground::GetPVPOptionsEnabled, &WorldSession::HandleGetPVPOptionsEnabled);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_GET_REMAINING_GAME_TIME, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_GET_TROPHY_LIST, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_HANDLER(CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS, STATUS_AUTHED, PROCESS_THREADUNSAFE, WorldPackets::Character::GetUndeleteCharacterCooldownStatus, &WorldSession::HandleGetUndeleteCooldownStatus);
|
||||
@@ -665,7 +665,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_REPOP_REQUEST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Misc::RepopRequest, &WorldSession::HandleRepopRequest);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_REPORT_PVP_PLAYER_AFK, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleReportPvPAFK );
|
||||
DEFINE_HANDLER(CMSG_REQUEST_ACCOUNT_DATA, STATUS_AUTHED, PROCESS_THREADUNSAFE, WorldPackets::ClientConfig::RequestAccountData, &WorldSession::HandleRequestAccountData);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_REQUEST_BATTLEFIELD_STATUS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestBattlefieldStatusOpcode);
|
||||
DEFINE_HANDLER(CMSG_REQUEST_BATTLEFIELD_STATUS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Battleground::RequestBattlefieldStatus, &WorldSession::HandleRequestBattlefieldStatusOpcode);
|
||||
DEFINE_HANDLER(CMSG_REQUEST_CATEGORY_COOLDOWNS, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Spells::RequestCategoryCooldowns, &WorldSession::HandleRequestCategoryCooldowns);
|
||||
DEFINE_HANDLER(CMSG_REQUEST_CEMETERY_LIST, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Misc::RequestCemeteryList, &WorldSession::HandleRequestCemeteryList);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_REQUEST_CONQUEST_FORMULA_CONSTANTS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
@@ -886,13 +886,13 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUTH_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AVAILABLE_VOICE_CHANNEL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BARBER_SHOP_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLEFIELD_LIST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLEFIELD_LIST, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLEFIELD_PORT_DENIED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLEFIELD_STATUS_ACTIVE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLEFIELD_STATUS_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLEFIELD_STATUS_NEED_CONFIRMATION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLEFIELD_STATUS_NONE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLEFIELD_STATUS_QUEUED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLEFIELD_STATUS_ACTIVE, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLEFIELD_STATUS_FAILED, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLEFIELD_STATUS_NEED_CONFIRMATION, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLEFIELD_STATUS_NONE, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLEFIELD_STATUS_QUEUED, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLEFIELD_STATUS_WAIT_FOR_GROUPS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLEGROUND_INFO_THROTTLED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLEGROUND_INIT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
@@ -1497,7 +1497,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PROPOSE_LEVEL_GRANT, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_CREDIT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_LOG_DATA, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_OPTIONS_ENABLED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_OPTIONS_ENABLED, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_SEASON, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_BATTLE_PET_NAME_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_CREATURE_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
|
||||
@@ -110,6 +110,12 @@ namespace WorldPackets
|
||||
class AreaSpiritHealerQueue;
|
||||
class HearthAndResurrect;
|
||||
class PVPLogDataRequest;
|
||||
class BattlemasterJoin;
|
||||
class BattlefieldLeave;
|
||||
class BattlefieldPort;
|
||||
class BattlefieldListRequest;
|
||||
class GetPVPOptionsEnabled;
|
||||
class RequestBattlefieldStatus;
|
||||
}
|
||||
|
||||
namespace BlackMarket
|
||||
@@ -740,8 +746,6 @@ class WorldSession
|
||||
|
||||
void SendAttackStop(Unit const* enemy);
|
||||
|
||||
void SendBattleGroundList(ObjectGuid guid, BattlegroundTypeId bgTypeId = BATTLEGROUND_RB);
|
||||
|
||||
void SendTradeStatus(WorldPackets::Trade::TradeStatus& status);
|
||||
void SendUpdateTrade(bool trader_data = true);
|
||||
void SendCancelTrade();
|
||||
@@ -1013,9 +1017,6 @@ class WorldSession
|
||||
|
||||
void HandleRequestRaidInfoOpcode(WorldPacket& recvData);
|
||||
|
||||
void HandleRequestBattlefieldStatusOpcode(WorldPacket& recvData);
|
||||
void HandleBattleMasterHelloOpcode(WorldPacket& recvData);
|
||||
|
||||
void HandleGroupInviteOpcode(WorldPacket& recvPacket);
|
||||
//void HandleGroupCancelOpcode(WorldPacket& recvPacket);
|
||||
void HandleGroupInviteResponseOpcode(WorldPacket& recvPacket);
|
||||
@@ -1273,21 +1274,22 @@ class WorldSession
|
||||
void HandleDismissCritter(WorldPacket& recvData);
|
||||
|
||||
//Battleground
|
||||
void HandleBattlemasterHelloOpcode(WorldPacket& recvData);
|
||||
void HandleBattlemasterJoinOpcode(WorldPacket& recvData);
|
||||
void HandleBattlemasterHelloOpcode(WorldPackets::NPC::Hello& hello);
|
||||
void HandleBattlemasterJoinOpcode(WorldPackets::Battleground::BattlemasterJoin& battlemasterJoin);
|
||||
void HandleBattlegroundPlayerPositionsOpcode(WorldPacket& recvData);
|
||||
void HandlePVPLogDataOpcode(WorldPackets::Battleground::PVPLogDataRequest& pvpLogDataRequest);
|
||||
void HandleBattleFieldPortOpcode(WorldPacket& recvData);
|
||||
void HandleBattlefieldListOpcode(WorldPacket& recvData);
|
||||
void HandleBattlefieldLeaveOpcode(WorldPacket& recvData);
|
||||
void HandleBattleFieldPortOpcode(WorldPackets::Battleground::BattlefieldPort& battlefieldPort);
|
||||
void HandleBattlefieldListOpcode(WorldPackets::Battleground::BattlefieldListRequest& battlefieldList);
|
||||
void HandleBattlefieldLeaveOpcode(WorldPackets::Battleground::BattlefieldLeave& battlefieldLeave);
|
||||
void HandleBattlemasterJoinArena(WorldPacket& recvData);
|
||||
void HandleReportPvPAFK(WorldPacket& recvData);
|
||||
void HandleRequestRatedBattlefieldInfo(WorldPacket& recvData);
|
||||
void HandleGetPVPOptionsEnabled(WorldPacket& recvData);
|
||||
void HandleGetPVPOptionsEnabled(WorldPackets::Battleground::GetPVPOptionsEnabled& getPvPOptionsEnabled);
|
||||
void HandleRequestPvpReward(WorldPacket& recvData);
|
||||
void HandleAreaSpiritHealerQueryOpcode(WorldPackets::Battleground::AreaSpiritHealerQuery& areaSpiritHealerQuery);
|
||||
void HandleAreaSpiritHealerQueueOpcode(WorldPackets::Battleground::AreaSpiritHealerQueue& areaSpiritHealerQueue);
|
||||
void HandleHearthAndResurrect(WorldPackets::Battleground::HearthAndResurrect& hearthAndResurrect);
|
||||
void HandleRequestBattlefieldStatusOpcode(WorldPackets::Battleground::RequestBattlefieldStatus& requestBattlefieldStatus);
|
||||
|
||||
// Battlefield
|
||||
void SendBfInvitePlayerToWar(ObjectGuid guid, uint32 zoneId, uint32 time);
|
||||
|
||||
Reference in New Issue
Block a user