69 for (GroupsQueueType::iterator itr = groupToKick; itr !=
SelectedGroups.end(); ++itr)
71 if (abs((
int32)((*itr)->Players.size() - size)) <= 1)
76 else if (!found && (*itr)->Players.size() >= (*groupToKick)->Players.size())
87 if (ginfo->
Players.size() <= size + 1)
140 if (!isRated && !isPremade)
144 SF_LOG_DEBUG(
"bg.battleground",
"Adding Group to BattlegroundQueue bgTypeId : %u, bracket_id : %u, index : %u",
uint32(BgTypeId), BracketID, index);
153 Player* member = itr->GetSource();
180 char const* bgName = bg->GetName();
181 uint32 MinPlayers = bg->GetMinPlayersPerTeam();
186 GroupsQueueType::const_iterator itr;
188 if (!(*itr)->IsInvitedToBGInstanceGUID)
189 qAlliance += (*itr)->Players.size();
191 if (!(*itr)->IsInvitedToBGInstanceGUID)
192 qHorde += (*itr)->Players.size();
198 qAlliance, (MinPlayers > qAlliance) ? MinPlayers - qAlliance : (
uint32)0, qHorde, (MinPlayers > qHorde) ? MinPlayers - qHorde : (
uint32)0);
204 qAlliance, (MinPlayers > qAlliance) ? MinPlayers - qAlliance : (
uint32)0, qHorde, (MinPlayers > qHorde) ? MinPlayers - qHorde : (
uint32)0);
235 m_WaitTimes[team_index][BracketID][(*lastPlayerAddedPointer)] = timeInQueue;
239 (*lastPlayerAddedPointer)++;
268 int32 bracket_id = -1;
269 QueuedPlayersMap::iterator itr;
275 std::string playerName =
"Unknown";
277 playerName = player->GetName();
278 SF_LOG_ERROR(
"bg.battleground",
"BattlegroundQueue: couldn't find player %s (GUID: %u)", playerName.c_str(),
GUID_LOPART(guid));
283 GroupsQueueType::iterator group_itr;
295 GroupsQueueType::iterator k =
m_QueuedGroups[bracket_id_tmp][j].begin();
300 bracket_id = bracket_id_tmp;
311 if (bracket_id == -1)
313 SF_LOG_ERROR(
"bg.battleground",
"BattlegroundQueue: ERROR Cannot find groupinfo for player GUID: %u",
GUID_LOPART(guid));
324 std::map<uint64, PlayerQueueInfo*>::iterator pitr = group->
Players.find(guid);
325 if (pitr != group->
Players.end())
331 bg->DecreaseInvitedCount(group->
Team);
371 uint32 queueSlot = plr2->GetBattlegroundQueueIndex(bgQueueTypeId);
373 plr2->RemoveBattlegroundQueueId(bgQueueTypeId);
377 plr2->GetSession()->SendPacket(&data);
389 && qItr->second.GroupInfo->IsInvitedToBGInstanceGUID == bgInstanceGuid
390 && qItr->second.GroupInfo->RemoveInviteTime == removeTime);
398 *ginfo = *(qItr->second.GroupInfo);
425 for (std::map<uint64, PlayerQueueInfo*>::iterator itr = ginfo->
Players.begin(); itr != ginfo->
Players.end(); ++itr)
453 SF_LOG_DEBUG(
"bg.battleground",
"Battleground: invited player %s (%u) to BG instance %u queueindex %u bgtype %u",
510 if (diffAli < diffHorde)
515 for (; aliIndex < aliCount &&
m_SelectionPools[
TEAM_ALLIANCE].AddGroup((*Ali_itr), (aliFree >= diffHorde) ? aliFree - diffHorde : 0); aliIndex++)
521 if (aliFree <= diffHorde + 1)
531 for (; hordeIndex < hordeCount &&
m_SelectionPools[
TEAM_HORDE].AddGroup((*Horde_itr), (hordeFree >= diffAli) ? hordeFree - diffAli : 0); hordeIndex++)
536 if (hordeFree <= diffAli + 1)
558 GroupsQueueType::const_iterator ali_group, horde_group;
560 if (!(*ali_group)->IsInvitedToBGInstanceGUID)
563 if (!(*horde_group)->IsInvitedToBGInstanceGUID)
572 GroupsQueueType::const_iterator itr;
578 if (!(*itr)->IsInvitedToBGInstanceGUID && !
m_SelectionPools[i].AddGroup((*itr), maxPlayers))
596 if (!(*itr)->IsInvitedToBGInstanceGUID && ((*itr)->JoinTime < time_before || (*itr)->Players.size() < MinPlayersPerTeam))
618 if (!(*(itr_team[i]))->IsInvitedToBGInstanceGUID)
637 if (!(*(itr_team[j]))->IsInvitedToBGInstanceGUID)
674 if (ginfo == *itr_team)
678 GroupsQueueType::iterator itr_team2 = itr_team;
684 if (!(*itr_team2)->IsInvitedToBGInstanceGUID && !
m_SelectionPools[otherTeam].AddGroup(*itr_team2, minPlayersPerTeam))
694 (*itr)->Team = otherTeamId;
698 GroupsQueueType::iterator itr2 = itr_team;
735 for (BGFreeSlotQueueContainer::iterator itr = bgQueues.begin(); itr != bgQueues.end();)
766 SF_LOG_ERROR(
"bg.battleground",
"Battleground: Update: bg template not found for %u",
uint32(bgTypeId));
773 SF_LOG_ERROR(
"bg.battleground",
"Battleground: Update: bg bracket entry not found for map %u bracket id %u", bg_template->
GetMapId(), BracketID);
783 MaxPlayersPerTeam = arenaType;
787 MinPlayersPerTeam = 1;
800 SF_LOG_ERROR(
"bg.battleground",
"BattlegroundQueue::Update - Cannot create battleground: %u",
uint32(bgTypeId));
819 if (
CheckNormalMatch(bg_template, bracket_id, MinPlayersPerTeam, MaxPlayersPerTeam)
826 SF_LOG_ERROR(
"bg.battleground",
"BattlegroundQueue::Update - Cannot create battleground: %u",
uint32(bgTypeId));
838 else if (bg_template->
isArena())
857 if (front1 && front2)
862 else if (!front1 && !front2)
884 GroupsQueueType::iterator itr2 =
m_QueuedGroups[BracketID][i].begin();
888 if (!(*itr2)->IsInvitedToBGInstanceGUID
889 && (((*itr2)->ArenaMatchmakerRating >= arenaMinRating && (*itr2)->ArenaMatchmakerRating <= arenaMaxRating)
890 || (*itr2)->JoinTime < discardTime))
892 itr_teams[found++] = itr2;
904 for (GroupsQueueType::iterator itr3 = itr_teams[0]; itr3 !=
m_QueuedGroups[BracketID][team].end(); ++itr3)
906 if (!(*itr3)->IsInvitedToBGInstanceGUID
907 && (((*itr3)->ArenaMatchmakerRating >= arenaMinRating && (*itr3)->ArenaMatchmakerRating <= arenaMaxRating)
908 || (*itr3)->JoinTime < discardTime)
909 && (*itr_teams[0])->ArenaGroup != (*itr3)->ArenaGroup)
911 itr_teams[found++] = itr3;
925 SF_LOG_ERROR(
"bg.battleground",
"BattlegroundQueue::Update couldn't create arena instance for rated arena match!");
951 SF_LOG_DEBUG(
"bg.battleground",
"Starting rated arena match!");
@ INVITE_ACCEPT_WAIT_TIME
@ BG_QUEUE_NORMAL_ALLIANCE
@ BG_QUEUE_PREMADE_ALLIANCE
#define BG_QUEUE_GROUP_TYPES_COUNT
#define COUNT_OF_PLAYERS_TO_AVERAGE_WAIT_TIME
std::list< Battleground * > BGFreeSlotQueueContainer
#define MAX_BATTLEGROUND_BRACKETS
PvPDifficultyEntry const * GetBattlegroundBracketById(uint32 mapid, BattlegroundBracketId id)
@ LANG_BG_QUEUE_ANNOUNCE_SELF
@ LANG_BG_QUEUE_ANNOUNCE_WORLD
#define SF_LOG_DEBUG(filterType__,...)
#define SF_LOG_ERROR(filterType__,...)
uint32 GUID_LOPART(uint64 x)
#define PLAYER_MAX_BATTLEGROUND_QUEUES
uint32 getMSTimeDiff(uint32 oldMSTime, uint32 newMSTime)
BattlegroundTypeId m_BgTypeId
virtual bool Execute(uint64 e_time, uint32 p_time)
virtual void Abort(uint64 e_time)
virtual bool Execute(uint64 e_time, uint32 p_time)
virtual void Abort(uint64 e_time)
BattlegroundTypeId m_BgTypeId
BattlegroundQueueTypeId m_BgQueueTypeId
void IncreaseInvitedCount(uint32 team)
BattlegroundTypeId GetTypeID(bool GetRandom=false) const
uint32 GetMinPlayersPerTeam() const
uint8 GetArenaType() const
uint32 GetMaxPlayersPerTeam() const
uint32 GetInstanceID() const
void SetArenaMatchmakerRating(uint32 Team, uint32 MMR)
bool isBattleground() const
BattlegroundStatus GetStatus() const
bool HasFreeSlots() const
void RemoveFromBGFreeSlotQueue()
BattlegroundBracketId GetBracketId() const
uint32 GetFreeSlotsForTeam(uint32 Team) const
static BattlegroundQueueTypeId BGQueueTypeId(BattlegroundTypeId bgTypeId, uint8 arenaType)
GroupsQueueType SelectedGroups
bool KickGroup(uint32 size)
bool AddGroup(GroupQueueInfo *ginfo, uint32 desiredCount)
uint32 GetPlayerCount() const
uint32 m_SumOfWaitTimes[BG_TEAMS_COUNT][MAX_BATTLEGROUND_BRACKETS]
void FillPlayersToBG(Battleground *bg, BattlegroundBracketId bracket_id)
void UpdateEvents(uint32 diff)
void PlayerInvitedToBGUpdateAverageWaitTime(GroupQueueInfo *ginfo, BattlegroundBracketId bracket_id)
uint32 m_WaitTimes[BG_TEAMS_COUNT][MAX_BATTLEGROUND_BRACKETS][COUNT_OF_PLAYERS_TO_AVERAGE_WAIT_TIME]
GroupQueueInfo * AddGroup(Player *leader, Group *group, BattlegroundTypeId bgTypeId, PvPDifficultyEntry const *bracketEntry, uint8 ArenaType, bool isRated, bool isPremade, uint32 ArenaRating, uint32 MatchmakerRating)
uint32 GetAverageQueueWaitTime(GroupQueueInfo *ginfo, BattlegroundBracketId bracket_id) const
QueuedPlayersMap m_QueuedPlayers
bool CheckNormalMatch(Battleground *bg_template, BattlegroundBracketId bracket_id, uint32 minPlayers, uint32 maxPlayers)
bool InviteGroupToBG(GroupQueueInfo *ginfo, Battleground *bg, uint32 side)
bool CheckSkirmishForSameFaction(BattlegroundBracketId bracket_id, uint32 minPlayersPerTeam)
bool GetPlayerGroupInfoData(uint64 guid, GroupQueueInfo *ginfo)
void BattlegroundQueueUpdate(uint32 diff, BattlegroundTypeId bgTypeId, BattlegroundBracketId bracket_id, uint8 arenaType=0, bool isRated=false, uint32 minRating=0)
bool IsPlayerInvited(uint64 pl_guid, const uint32 bgInstanceGuid, const uint32 removeTime)
void RemovePlayer(uint64 guid, bool decreaseInvitedCount)
GroupsQueueType m_QueuedGroups[MAX_BATTLEGROUND_BRACKETS][BG_QUEUE_GROUP_TYPES_COUNT]
uint32 GetPlayersInQueue(TeamId id)
bool CheckPremadeMatch(BattlegroundBracketId bracket_id, uint32 MinPlayersPerTeam, uint32 MaxPlayersPerTeam)
uint32 m_WaitTimeLastPlayer[BG_TEAMS_COUNT][MAX_BATTLEGROUND_BRACKETS]
SelectionPool m_SelectionPools[BG_TEAMS_COUNT]
void PSendSysMessage(const char *format,...) ATTR_PRINTF(2
GroupReference * GetFirstMember()
static Player * FindPlayer(uint64)
uint32 GetGUIDLow() const
uint32 GetBattlegroundQueueJoinTime(BattlegroundTypeId bgTypeId) const
WorldSession * GetSession() const
void RemoveBattlegroundQueueId(BattlegroundQueueTypeId val)
uint32 GetBattlegroundQueueIndex(BattlegroundQueueTypeId bgQueueTypeId) const
void SetInviteForBattlegroundQueueType(BattlegroundQueueTypeId bgQueueTypeId, uint32 instanceId)
std::string const & GetName() const
void SendPacket(WorldPacket const *packet, bool forced=false)
Send a packet to the client.
@ CONFIG_BATTLEGROUND_PREMADE_GROUP_WAIT_FOR_MATCH
@ CONFIG_BATTLEGROUND_INVITATION_TYPE
@ CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_PLAYERONLY
@ CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE
uint32 IsInvitedToBGInstanceGUID
std::map< uint64, PlayerQueueInfo * > Players
uint32 OpponentsMatchmakerRating
BattlegroundTypeId BgTypeId
uint32 OpponentsTeamRating
uint32 ArenaMatchmakerRating
GroupQueueInfo * GroupInfo
BattlegroundBracketId GetBracketId() const