Skip to content

Commit

Permalink
Unify SMSG_GROUP_JOINED_BATTLEGROUND partly with tbc
Browse files Browse the repository at this point in the history
  • Loading branch information
killerwife committed Jul 21, 2024
1 parent 10e5691 commit f3f0df5
Show file tree
Hide file tree
Showing 6 changed files with 55 additions and 50 deletions.
34 changes: 17 additions & 17 deletions src/game/BattleGround/BattleGround.h
Original file line number Diff line number Diff line change
Expand Up @@ -269,25 +269,25 @@ enum BattleGroundStartingEventsIds
};
#define BG_STARTING_EVENT_COUNT 4

enum GroupJoinBattlegroundResult
enum BattleGroundGroupJoinStatus
{
// positive values are indexes in BattlemasterList.dbc
ERR_GROUP_JOIN_BATTLEGROUND_FAIL = 0, // Your group has joined a battleground queue, but you are not eligible (showed for non existing BattlemasterList.dbc indexes)
ERR_BATTLEGROUND_NONE = -1, // not show anything
ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS = -2, // You cannot join the battleground yet because you or one of your party members is flagged as a Deserter.
ERR_ARENA_TEAM_PARTY_SIZE = -3, // Incorrect party size for this arena.
ERR_BATTLEGROUND_TOO_MANY_QUEUES = -4, // You can only be queued for 2 battles at once
ERR_BATTLEGROUND_CANNOT_QUEUE_FOR_RATED = -5, // You cannot queue for a rated match while queued for other battles
ERR_BATTLEDGROUND_QUEUED_FOR_RATED = -6, // You cannot queue for another battle while queued for a rated arena match
ERR_BATTLEGROUND_TEAM_LEFT_QUEUE = -7, // Your team has left the arena queue
ERR_BATTLEGROUND_NOT_IN_BATTLEGROUND = -8, // You can't do that in a battleground.
ERR_BATTLEGROUND_JOIN_XP_GAIN = -9, // wtf, doesn't exist in client...
ERR_BATTLEGROUND_JOIN_RANGE_INDEX = -10, // Cannot join the queue unless all members of your party are in the same battleground level range.
ERR_BATTLEGROUND_JOIN_TIMED_OUT = -11, // %s was unavailable to join the queue. (uint64 guid exist in client cache)
ERR_BATTLEGROUND_JOIN_FAILED = -12, // Join as a group failed (uint64 guid doesn't exist in client cache)
ERR_LFG_CANT_USE_BATTLEGROUND = -13, // You cannot queue for a battleground or arena while using the dungeon system.
ERR_IN_RANDOM_BG = -14, // Can't do that while in a Random Battleground queue.
ERR_IN_NON_RANDOM_BG = -15, // Can't queue for Random Battleground while in another Battleground queue.
BG_GROUP_JOIN_STATUS_BATTLEGROUND_FAIL = 0, // Your group has joined a battleground queue, but you are not eligible (showed for non existing BattlemasterList.dbc indexes)
BG_GROUP_JOIN_STATUS_NOT_ELIGIBLE = -1, // not show anything
BG_GROUP_JOIN_STATUS_DESERTERS = -2, // You cannot join the battleground yet because you or one of your party members is flagged as a Deserter.
BG_GROUP_JOIN_STATUS_NOT_IN_TEAM = -3, // Incorrect party size for this arena.
BG_GROUP_JOIN_STATUS_TOO_MANY_QUEUES = -4, // You can only be queued for 2 battles at once
BG_GROUP_JOIN_STATUS_CANNOT_QUEUE_FOR_RATED = -5, // You cannot queue for a rated match while queued for other battles
BG_GROUP_JOIN_STATUS_QUEUED_FOR_RATED = -6, // You cannot queue for another battle while queued for a rated arena match
BG_GROUP_JOIN_STATUS_TEAM_LEFT_QUEUE = -7, // Your team has left the arena queue
BG_GROUP_JOIN_STATUS_NOT_IN_BATTLEGROUND = -8, // You can't do that in a battleground.
BG_GROUP_JOIN_STATUS_XP_GAIN = -9, // wtf, doesn't exist in client...
BG_GROUP_JOIN_STATUS_JOIN_RANGE_INDEX = -10, // Cannot join the queue unless all members of your party are in the same battleground level range.
BG_GROUP_JOIN_STATUS_JOIN_TIMED_OUT = -11, // %s was unavailable to join the queue. (uint64 guid exist in client cache)
BG_GROUP_JOIN_STATUS_JOIN_FAILED = -12, // Join as a group failed (uint64 guid doesn't exist in client cache)
BG_GROUP_JOIN_STATUS_LFG_CANT_USE_BATTLEGROUND = -13, // You cannot queue for a battleground or arena while using the dungeon system.
BG_GROUP_JOIN_STATUS_IN_RANDOM_BG = -14, // Can't do that while in a Random Battleground queue.
BG_GROUP_JOIN_STATUS_IN_NON_RANDOM_BG = -15, // Can't queue for Random Battleground while in another Battleground queue.
};

/*
Expand Down
22 changes: 11 additions & 11 deletions src/game/BattleGround/BattleGroundHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recv_data)
if (!bracketEntry)
return;

GroupJoinBattlegroundResult err = ERR_GROUP_JOIN_BATTLEGROUND_FAIL;
BattleGroundGroupJoinStatus err = BG_GROUP_JOIN_STATUS_BATTLEGROUND_FAIL;

// check queue conditions
if (!joinAsGroup)
Expand All @@ -143,7 +143,7 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recv_data)
if (!_player->CanJoinToBattleground())
{
WorldPacket data;
sBattleGroundMgr.BuildGroupJoinedBattlegroundPacket(data, ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS);
sBattleGroundMgr.BuildGroupJoinedBattlegroundPacket(data, BG_GROUP_JOIN_STATUS_DESERTERS);
_player->GetSession()->SendPacket(data);
return;
}
Expand All @@ -152,7 +152,7 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recv_data)
if (_player->GetBattleGroundQueueIndex(bgQueueTypeIdRandom) < PLAYER_MAX_BATTLEGROUND_QUEUES)
{
WorldPacket data;
sBattleGroundMgr.BuildGroupJoinedBattlegroundPacket(data, ERR_IN_RANDOM_BG);
sBattleGroundMgr.BuildGroupJoinedBattlegroundPacket(data, BG_GROUP_JOIN_STATUS_IN_RANDOM_BG);
_player->GetSession()->SendPacket(data);
return;
}
Expand All @@ -161,7 +161,7 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recv_data)
if(_player->InBattleGroundQueue() && bgTypeId == BATTLEGROUND_RB)
{
WorldPacket data;
sBattleGroundMgr.BuildGroupJoinedBattlegroundPacket(data, ERR_IN_NON_RANDOM_BG);
sBattleGroundMgr.BuildGroupJoinedBattlegroundPacket(data, BG_GROUP_JOIN_STATUS_IN_NON_RANDOM_BG);
_player->GetSession()->SendPacket(data);
return;
}
Expand All @@ -175,7 +175,7 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recv_data)
if (!_player->HasFreeBattleGroundQueueId())
{
WorldPacket data;
sBattleGroundMgr.BuildGroupJoinedBattlegroundPacket(data, ERR_BATTLEGROUND_TOO_MANY_QUEUES);
sBattleGroundMgr.BuildGroupJoinedBattlegroundPacket(data, BG_GROUP_JOIN_STATUS_TOO_MANY_QUEUES);
_player->GetSession()->SendPacket(data);
return;
}
Expand All @@ -201,7 +201,7 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recv_data)
GroupQueueInfo* queueInfo = nullptr;
uint32 avgTime = 0;

if (err > ERR_GROUP_JOIN_BATTLEGROUND_FAIL)
if (err > BG_GROUP_JOIN_STATUS_BATTLEGROUND_FAIL)
{
DEBUG_LOG("Battleground: the following players are joining as group:");
queueInfo = bgQueue.AddGroup(_player, grp, bgTypeId, bracketEntry, ARENA_TYPE_NONE, false, isPremade, instanceId, 0);
Expand All @@ -216,7 +216,7 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recv_data)

WorldPacket data;

if (err <= ERR_GROUP_JOIN_BATTLEGROUND_FAIL)
if (err <= BG_GROUP_JOIN_STATUS_BATTLEGROUND_FAIL)
{
sBattleGroundMgr.BuildGroupJoinedBattlegroundPacket(data, err);
member->GetSession()->SendPacket(data);
Expand Down Expand Up @@ -461,7 +461,7 @@ void WorldSession::HandleBattlefieldPortOpcode(WorldPacket& recv_data)
{
// send bg command result to show nice message
WorldPacket data2;
sBattleGroundMgr.BuildGroupJoinedBattlegroundPacket(data2, ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS);
sBattleGroundMgr.BuildGroupJoinedBattlegroundPacket(data2, BG_GROUP_JOIN_STATUS_DESERTERS);
_player->GetSession()->SendPacket(data2);
action = 0;

Expand Down Expand Up @@ -745,7 +745,7 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recv_data)
if (!bracketEntry)
return;

GroupJoinBattlegroundResult err = ERR_GROUP_JOIN_BATTLEGROUND_FAIL;
BattleGroundGroupJoinStatus err = BG_GROUP_JOIN_STATUS_BATTLEGROUND_FAIL;

Group* group = nullptr;

Expand Down Expand Up @@ -818,7 +818,7 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recv_data)
{
uint32 avgTime = 0;

if (err > ERR_GROUP_JOIN_BATTLEGROUND_FAIL)
if (err > BG_GROUP_JOIN_STATUS_BATTLEGROUND_FAIL)
{
DEBUG_LOG("Battleground: arena join as group start");
if (isRated)
Expand All @@ -839,7 +839,7 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recv_data)

WorldPacket data;

if (err <= ERR_GROUP_JOIN_BATTLEGROUND_FAIL)
if (err <= BG_GROUP_JOIN_STATUS_BATTLEGROUND_FAIL)
{
sBattleGroundMgr.BuildGroupJoinedBattlegroundPacket(data, err);
member->GetSession()->SendPacket(data);
Expand Down
11 changes: 8 additions & 3 deletions src/game/BattleGround/BattleGroundMgr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1554,12 +1554,17 @@ void BattleGroundMgr::BuildPvpLogDataPacket(WorldPacket& data, BattleGround* bg)
@param packet
@param result
*/
void BattleGroundMgr::BuildGroupJoinedBattlegroundPacket(WorldPacket& data, GroupJoinBattlegroundResult result) const
void BattleGroundMgr::BuildGroupJoinedBattlegroundPacket(WorldPacket& data, BattleGroundGroupJoinStatus result) const
{
data.Initialize(SMSG_GROUP_JOINED_BATTLEGROUND, 4);
data << int32(result);
if (result == ERR_BATTLEGROUND_JOIN_TIMED_OUT || result == ERR_BATTLEGROUND_JOIN_FAILED)
data << uint64(0); // player guid
switch (result)
{
case BG_GROUP_JOIN_STATUS_JOIN_TIMED_OUT:
case BG_GROUP_JOIN_STATUS_JOIN_FAILED:
data << uint64(0); // player guid
break;
}
}

/**
Expand Down
2 changes: 1 addition & 1 deletion src/game/BattleGround/BattleGroundMgr.h
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ class BattleGroundMgr
void BuildPlayerJoinedBattleGroundPacket(WorldPacket& /*data*/, Player* /*player*/) const;
void BuildPlayerLeftBattleGroundPacket(WorldPacket& /*data*/, ObjectGuid /*guid*/) const;
void BuildBattleGroundListPacket(WorldPacket& /*data*/, ObjectGuid /*guid*/, Player* /*player*/, BattleGroundTypeId /*bgTypeId*/, uint8 /*fromWhere*/) const;
void BuildGroupJoinedBattlegroundPacket(WorldPacket& /*data*/, GroupJoinBattlegroundResult /*result*/) const;
void BuildGroupJoinedBattlegroundPacket(WorldPacket& /*data*/, BattleGroundGroupJoinStatus /*result*/) const;
void BuildUpdateWorldStatePacket(WorldPacket& /*data*/, uint32 /*field*/, uint32 /*value*/) const;
void BuildPvpLogDataPacket(WorldPacket& /*data*/, BattleGround* /*bg*/) const;
void BuildBattleGroundStatusPacket(WorldPacket& /*data*/, BattleGround* /*bg*/, uint8 /*queueSlot*/, uint8 /*statusId*/, uint32 /*time1*/, uint32 /*time2*/, ArenaType /*arenaType*/, Team /*arenaTeam*/) const;
Expand Down
34 changes: 17 additions & 17 deletions src/game/Groups/Group.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1290,31 +1290,31 @@ uint32 Group::GetMaxSkillValueForGroup(SkillType skill)
return maxvalue;
}

GroupJoinBattlegroundResult Group::CanJoinBattleGroundQueue(BattleGround const* bgOrTemplate, BattleGroundQueueTypeId bgQueueTypeId, uint32 MinPlayerCount, uint32 /*MaxPlayerCount*/, bool isRated, uint32 arenaSlot)
BattleGroundGroupJoinStatus Group::CanJoinBattleGroundQueue(BattleGround const* bgOrTemplate, BattleGroundQueueTypeId bgQueueTypeId, uint32 MinPlayerCount, uint32 /*MaxPlayerCount*/, bool isRated, uint32 arenaSlot)
{
BattlemasterListEntry const* bgEntry = sBattlemasterListStore.LookupEntry(bgOrTemplate->GetTypeId());
if (!bgEntry)
return ERR_GROUP_JOIN_BATTLEGROUND_FAIL; // shouldn't happen
return BG_GROUP_JOIN_STATUS_BATTLEGROUND_FAIL; // shouldn't happen

// check for min / max count
uint32 memberscount = GetMembersCount();

// only check for MinPlayerCount since MinPlayerCount == MaxPlayerCount for arenas...
if (bgOrTemplate->IsArena() && memberscount != MinPlayerCount)
return ERR_ARENA_TEAM_PARTY_SIZE;
return BG_GROUP_JOIN_STATUS_NOT_IN_TEAM;

if (memberscount > bgEntry->maxGroupSize) // no MinPlayerCount for battlegrounds
return ERR_BATTLEGROUND_NONE; // ERR_GROUP_JOIN_BATTLEGROUND_TOO_MANY handled on client side
return BG_GROUP_JOIN_STATUS_NOT_ELIGIBLE; // ERR_GROUP_JOIN_BATTLEGROUND_TOO_MANY handled on client side

// get a player as reference, to compare other players' stats to (arena team id, queue id based on level, etc.)
Player* reference = GetFirstMember()->getSource();
// no reference found, can't join this way
if (!reference)
return ERR_BATTLEGROUND_JOIN_FAILED;
return BG_GROUP_JOIN_STATUS_JOIN_FAILED;

PvPDifficultyEntry const* bracketEntry = GetBattlegroundBracketByLevel(bgOrTemplate->GetMapId(), reference->GetLevel());
if (!bracketEntry)
return ERR_BATTLEGROUND_JOIN_FAILED;
return BG_GROUP_JOIN_STATUS_JOIN_FAILED;

uint32 arenaTeamId = reference->GetArenaTeamId(arenaSlot);
Team team = reference->GetTeam();
Expand All @@ -1327,37 +1327,37 @@ GroupJoinBattlegroundResult Group::CanJoinBattleGroundQueue(BattleGround const*
Player* member = itr->getSource();
// offline member? don't let join
if (!member)
return ERR_BATTLEGROUND_JOIN_FAILED;
return BG_GROUP_JOIN_STATUS_JOIN_FAILED;
// don't allow cross-faction join as group
if (member->GetTeam() != team)
return ERR_BATTLEGROUND_JOIN_TIMED_OUT;
return BG_GROUP_JOIN_STATUS_JOIN_TIMED_OUT;
// not in the same battleground level bracket, don't let join
PvPDifficultyEntry const* memberBracketEntry = GetBattlegroundBracketByLevel(bracketEntry->mapId, member->GetLevel());
if (memberBracketEntry != bracketEntry)
return ERR_BATTLEGROUND_JOIN_RANGE_INDEX;
return BG_GROUP_JOIN_STATUS_JOIN_RANGE_INDEX;
// don't let join rated matches if the arena team id doesn't match
if (isRated && member->GetArenaTeamId(arenaSlot) != arenaTeamId)
return ERR_BATTLEGROUND_JOIN_FAILED;
return BG_GROUP_JOIN_STATUS_JOIN_FAILED;
// don't let join if someone from the group is already in that bg queue
if (member->InBattleGroundQueueForBattleGroundQueueType(bgQueueTypeId))
return ERR_BATTLEGROUND_JOIN_FAILED; // not blizz-like
return BG_GROUP_JOIN_STATUS_JOIN_FAILED; // not blizz-like
// don't let join if someone from the group is in bg queue random
if (bgOrTemplate->GetTypeId() != BATTLEGROUND_AA && member->InBattleGroundQueueForBattleGroundQueueType(bgQueueTypeIdRandom))
return ERR_IN_RANDOM_BG;
return BG_GROUP_JOIN_STATUS_IN_RANDOM_BG;
// don't let join to bg queue random if someone from the group is already in bg queue
if (bgOrTemplate->GetTypeId() == BATTLEGROUND_RB && member->InBattleGroundQueue())
return ERR_IN_NON_RANDOM_BG;
return BG_GROUP_JOIN_STATUS_IN_NON_RANDOM_BG;
// check for deserter debuff in case not arena queue
if (bgOrTemplate->GetTypeId() != BATTLEGROUND_AA && !member->CanJoinToBattleground())
return ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS;
return BG_GROUP_JOIN_STATUS_DESERTERS;
// check if member can join any more battleground queues
if (!member->HasFreeBattleGroundQueueId())
return ERR_BATTLEGROUND_TOO_MANY_QUEUES; // not blizz-like
return BG_GROUP_JOIN_STATUS_TOO_MANY_QUEUES; // not blizz-like
// do not allow joining queue if member still in arena
if (member->InArena())
return ERR_BATTLEGROUND_JOIN_FAILED;
return BG_GROUP_JOIN_STATUS_JOIN_FAILED;
}
return GroupJoinBattlegroundResult(bgOrTemplate->GetTypeId());
return BattleGroundGroupJoinStatus(bgOrTemplate->GetTypeId());
}

void Group::SetDungeonDifficulty(Difficulty difficulty)
Expand Down
2 changes: 1 addition & 1 deletion src/game/Groups/Group.h
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@ class Group

void SetBattlegroundGroup(BattleGround* bg) { m_bgGroup = bg; }
void SetBattlefieldGroup(Battlefield* bf) { m_bfGroup = bf; }
GroupJoinBattlegroundResult CanJoinBattleGroundQueue(BattleGround const* bgOrTemplate, BattleGroundQueueTypeId bgQueueTypeId, uint32 MinPlayerCount, uint32 MaxPlayerCount, bool isRated, uint32 arenaSlot);
BattleGroundGroupJoinStatus CanJoinBattleGroundQueue(BattleGround const* bgOrTemplate, BattleGroundQueueTypeId bgQueueTypeId, uint32 MinPlayerCount, uint32 MaxPlayerCount, bool isRated, uint32 arenaSlot);

void ChangeMembersGroup(ObjectGuid guid, uint8 group);
void ChangeMembersGroup(Player* player, uint8 group);
Expand Down

0 comments on commit f3f0df5

Please sign in to comment.