diff options
| author | megamage <none@none> | 2009-02-27 12:13:59 -0600 | 
|---|---|---|
| committer | megamage <none@none> | 2009-02-27 12:13:59 -0600 | 
| commit | 472f897b0a1475991f70fdc428387ce3d322d5ce (patch) | |
| tree | 5ebd3cd397bfff6d18c9beeb8c5a1aa3be9fda29 /src/game/BattleGroundHandler.cpp | |
| parent | d3a69006675bb5317fab76584d5990b36c2fd5a5 (diff) | |
    [7336] Implemented new BattleGroundQueue invitation system. Now it supports premade group versus premade group matches.
    Added 2 new config options - InvitationType and PremadeGroupWaitForMatch - you can find more info in default config file.
    This patch can cause crashes.
Author: Triply
[7338] Little cleanup in battleground queues code. Author: ApoC
--HG--
branch : trunk
Diffstat (limited to 'src/game/BattleGroundHandler.cpp')
| -rw-r--r-- | src/game/BattleGroundHandler.cpp | 23 | 
1 files changed, 11 insertions, 12 deletions
diff --git a/src/game/BattleGroundHandler.cpp b/src/game/BattleGroundHandler.cpp index 7d5a2f503bf..1f75bab4429 100644 --- a/src/game/BattleGroundHandler.cpp +++ b/src/game/BattleGroundHandler.cpp @@ -80,6 +80,7 @@ void WorldSession::HandleBattleGroundJoinOpcode( WorldPacket & recv_data )      uint32 bgTypeId_;      uint32 instanceId;      uint8 joinAsGroup; +    bool isPremade = false;      Group * grp;      recv_data >> guid;                                      // battlemaster guid @@ -148,6 +149,7 @@ void WorldSession::HandleBattleGroundJoinOpcode( WorldPacket & recv_data )          if(!grp)              return;          uint32 err = grp->CanJoinBattleGroundQueue(bgTypeId, bgQueueTypeId, 0, bg->GetMaxPlayersPerTeam(), false, 0); +        isPremade = (grp->GetMembersCount() >= bg->GetMinPlayersPerTeam());          if (err != BG_JOIN_ERR_OK)          {              SendBattleGroundOrArenaJoinError(err); @@ -160,7 +162,7 @@ void WorldSession::HandleBattleGroundJoinOpcode( WorldPacket & recv_data )      if(joinAsGroup /* && _player->GetGroup()*/)      {          sLog.outDebug("Battleground: the following players are joining as group:"); -        GroupQueueInfo * ginfo = sBattleGroundMgr.m_BattleGroundQueues[bgQueueTypeId].AddGroup(_player, bgTypeId, 0, false, 0); +        GroupQueueInfo * ginfo = sBattleGroundMgr.m_BattleGroundQueues[bgQueueTypeId].AddGroup(_player, bgTypeId, 0, false, isPremade, 0);          for(GroupReference *itr = grp->GetFirstMember(); itr != NULL; itr = itr->next())          {              Player *member = itr->getSource(); @@ -197,7 +199,7 @@ void WorldSession::HandleBattleGroundJoinOpcode( WorldPacket & recv_data )          sBattleGroundMgr.BuildBattleGroundStatusPacket(&data, bg, _player->GetTeam(), queueSlot, STATUS_WAIT_QUEUE, 0, 0);          SendPacket(&data); -        GroupQueueInfo * ginfo = sBattleGroundMgr.m_BattleGroundQueues[bgQueueTypeId].AddGroup(_player, bgTypeId, 0, false, 0); +        GroupQueueInfo * ginfo = sBattleGroundMgr.m_BattleGroundQueues[bgQueueTypeId].AddGroup(_player, bgTypeId, 0, false, false, 0);          sBattleGroundMgr.m_BattleGroundQueues[bgQueueTypeId].AddPlayer(_player, ginfo);          sBattleGroundMgr.m_BattleGroundQueues[bgQueueTypeId].Update(bgTypeId, _player->GetBattleGroundQueueIdFromLevel(bgTypeId));          if(!ginfo->IsInvitedToBGInstanceGUID) @@ -318,8 +320,7 @@ void WorldSession::HandleBattleGroundPlayerPortOpcode( WorldPacket &recv_data )                  if(!bgQueueTypeId)                      continue;                  BattleGroundTypeId bgTypeId = BattleGroundMgr::BGTemplateId(bgQueueTypeId); -                uint32 queue_id = _player->GetBattleGroundQueueIdFromLevel(bgTypeId); -                BattleGroundQueue::QueuedPlayersMap& qpMap = sBattleGroundMgr.m_BattleGroundQueues[bgQueueTypeId].m_QueuedPlayers[queue_id]; +                BattleGroundQueue::QueuedPlayersMap& qpMap = sBattleGroundMgr.m_BattleGroundQueues[bgQueueTypeId].m_QueuedPlayers;                  BattleGroundQueue::QueuedPlayersMap::iterator itrPlayerStatus = qpMap.find(_player->GetGUID());                  // if the player is not in queue, continue                  if(itrPlayerStatus == qpMap.end()) @@ -372,7 +373,7 @@ void WorldSession::HandleBattleGroundPlayerPortOpcode( WorldPacket &recv_data )      BattleGroundQueueTypeId bgQueueTypeId = BATTLEGROUND_QUEUE_NONE;      // get the bg what we were invited to      bgQueueTypeId = BattleGroundMgr::BGQueueTypeId(bgTypeId,type); -    BattleGroundQueue::QueuedPlayersMap& qpMap = sBattleGroundMgr.m_BattleGroundQueues[bgQueueTypeId].m_QueuedPlayers[_player->GetBattleGroundQueueIdFromLevel(bgTypeId)]; +    BattleGroundQueue::QueuedPlayersMap& qpMap = sBattleGroundMgr.m_BattleGroundQueues[bgQueueTypeId].m_QueuedPlayers;      BattleGroundQueue::QueuedPlayersMap::iterator itrPlayerStatus = qpMap.find(_player->GetGUID());      if(itrPlayerStatus == qpMap.end())      { @@ -412,7 +413,7 @@ void WorldSession::HandleBattleGroundPlayerPortOpcode( WorldPacket &recv_data )          uint32 opponentsRating = 0;          // get the team info from the queue -        BattleGroundQueue::QueuedPlayersMap& qpMap2 = sBattleGroundMgr.m_BattleGroundQueues[bgQueueTypeId].m_QueuedPlayers[_player->GetBattleGroundQueueIdFromLevel(bgTypeId)]; +        BattleGroundQueue::QueuedPlayersMap& qpMap2 = sBattleGroundMgr.m_BattleGroundQueues[bgQueueTypeId].m_QueuedPlayers;          BattleGroundQueue::QueuedPlayersMap::iterator pitr = qpMap2.find(_player->GetGUID());          if (pitr !=qpMap2.end() && pitr->second.GroupInfo)          { @@ -548,8 +549,7 @@ void WorldSession::HandleBattlefieldStatusOpcode( WorldPacket & /*recv_data*/ )                  BattleGroundTypeId bgTypeId = BattleGroundMgr::BGTemplateId(bgQueueTypeId);                  uint8 arenatype = BattleGroundMgr::BGArenaType(bgQueueTypeId);                  uint8 isRated = 0; -                uint32 queue_id = _player->GetBattleGroundQueueIdFromLevel(bgTypeId); -                BattleGroundQueue::QueuedPlayersMap& qpMap = sBattleGroundMgr.m_BattleGroundQueues[bgQueueTypeId].m_QueuedPlayers[queue_id]; +                BattleGroundQueue::QueuedPlayersMap& qpMap = sBattleGroundMgr.m_BattleGroundQueues[bgQueueTypeId].m_QueuedPlayers;                  BattleGroundQueue::QueuedPlayersMap::iterator itrPlayerStatus = qpMap.find(_player->GetGUID());                  if(itrPlayerStatus == qpMap.end())                      continue; @@ -580,9 +580,8 @@ void WorldSession::HandleBattlefieldStatusOpcode( WorldPacket & /*recv_data*/ )              BattleGroundTypeId bgTypeId = BattleGroundMgr::BGTemplateId(bgQueueTypeId);              uint8 arenatype = BattleGroundMgr::BGArenaType(bgQueueTypeId);              uint8 isRated = 0; -            uint32 queue_id = _player->GetBattleGroundQueueIdFromLevel(bgTypeId);              BattleGround *bg = sBattleGroundMgr.GetBattleGroundTemplate(bgTypeId); -            BattleGroundQueue::QueuedPlayersMap& qpMap = sBattleGroundMgr.m_BattleGroundQueues[bgQueueTypeId].m_QueuedPlayers[queue_id]; +            BattleGroundQueue::QueuedPlayersMap& qpMap = sBattleGroundMgr.m_BattleGroundQueues[bgQueueTypeId].m_QueuedPlayers;              BattleGroundQueue::QueuedPlayersMap::iterator itrPlayerStatus = qpMap.find(_player->GetGUID());              if(itrPlayerStatus == qpMap.end())                  continue; @@ -770,7 +769,7 @@ void WorldSession::HandleBattleGroundArenaJoin( WorldPacket & recv_data )      if(asGroup)      { -        GroupQueueInfo * ginfo = sBattleGroundMgr.m_BattleGroundQueues[bgQueueTypeId].AddGroup(_player, bgTypeId, arenatype, isRated, arenaRating, ateamId); +        GroupQueueInfo * ginfo = sBattleGroundMgr.m_BattleGroundQueues[bgQueueTypeId].AddGroup(_player, bgTypeId, arenatype, isRated, false, arenaRating, ateamId);          sLog.outDebug("Battleground: arena join as group start");          if(isRated)              sLog.outDebug("Battleground: arena team id %u, leader %s queued with rating %u for type %u",_player->GetArenaTeamId(arenaslot),_player->GetName(),arenaRating,arenatype); @@ -809,7 +808,7 @@ void WorldSession::HandleBattleGroundArenaJoin( WorldPacket & recv_data )          // send status packet (in queue)          sBattleGroundMgr.BuildBattleGroundStatusPacket(&data, bg, _player->GetTeam(), queueSlot, STATUS_WAIT_QUEUE, 0, 0, arenatype, isRated);          SendPacket(&data); -        GroupQueueInfo * ginfo = sBattleGroundMgr.m_BattleGroundQueues[bgQueueTypeId].AddGroup(_player, bgTypeId, arenatype, isRated, arenaRating); +        GroupQueueInfo * ginfo = sBattleGroundMgr.m_BattleGroundQueues[bgQueueTypeId].AddGroup(_player, bgTypeId, arenatype, isRated, false, arenaRating);          sBattleGroundMgr.m_BattleGroundQueues[bgQueueTypeId].AddPlayer(_player, ginfo);          sBattleGroundMgr.m_BattleGroundQueues[bgQueueTypeId].Update(bgTypeId, _player->GetBattleGroundQueueIdFromLevel(bgTypeId), arenatype, isRated, arenaRating);          sLog.outDebug("Battleground: player joined queue for arena, skirmish, bg queue type %u bg type %u: GUID %u, NAME %s",bgQueueTypeId,bgTypeId,_player->GetGUIDLow(), _player->GetName());  | 
