diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp index fee4116..05aac48 100644 --- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp +++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp @@ -155,12 +155,25 @@ void BattlegroundMgr::Update(uint32 diff) { // forced update for rated arenas (scan all, but skipped non rated) TC_LOG_TRACE("bg.arena", "BattlegroundMgr: UPDATING ARENA QUEUES"); - for (int qtype = BATTLEGROUND_QUEUE_2v2; qtype <= BATTLEGROUND_QUEUE_5v5; ++qtype) + // SylvaniaCore : l amont avait commente la boucle sur les brackets et fige + // le bracket a 14, qui n existe pas dans PVPDifficulty pour la carte du + // template BATTLEGROUND_AA. Resultat : aucune file cotee n etait reellement + // mise a jour, et BattlegroundQueueUpdate journalisait une erreur toutes les + // 5 secondes. On parcourt les brackets reellement declares pour cette carte. + if (Battleground* arenaTemplate = GetBattlegroundTemplate(BATTLEGROUND_AA)) { - //for (int bracket = BG_BRACKET_ID_FIRST; bracket < MAX_BATTLEGROUND_BRACKETS; ++bracket) - m_BattlegroundQueues[qtype].BattlegroundQueueUpdate(diff, - BATTLEGROUND_AA, BattlegroundBracketId(14),//bracket - BattlegroundMgr::BGArenaType(BattlegroundQueueTypeId(qtype)), true, 0); + for (int qtype = BATTLEGROUND_QUEUE_2v2; qtype <= BATTLEGROUND_QUEUE_5v5; ++qtype) + { + for (uint8 bracket = BG_BRACKET_ID_FIRST; bracket < MAX_BATTLEGROUND_BRACKETS; ++bracket) + { + if (!DB2Manager::GetBattlegroundBracketById(arenaTemplate->GetMapId(), BattlegroundBracketId(bracket))) + continue; + + m_BattlegroundQueues[qtype].BattlegroundQueueUpdate(diff, + BATTLEGROUND_AA, BattlegroundBracketId(bracket), + BattlegroundMgr::BGArenaType(BattlegroundQueueTypeId(qtype)), true, 0); + } + } } m_NextRatedArenaUpdate = sWorld->getIntConfig(CONFIG_ARENA_RATED_UPDATE_TIMER); diff --git a/src/server/game/Battlegrounds/BattlegroundQueue.cpp b/src/server/game/Battlegrounds/BattlegroundQueue.cpp index 1c604cc..8c3afdb 100644 --- a/src/server/game/Battlegrounds/BattlegroundQueue.cpp +++ b/src/server/game/Battlegrounds/BattlegroundQueue.cpp @@ -938,6 +938,15 @@ should be called from Battleground::RemovePlayer function in some cases */ void BattlegroundQueue::BattlegroundQueueUpdate(uint32 /*diff*/, BattlegroundTypeId bgTypeId, BattlegroundBracketId bracket_id, uint8 arenaType, bool isRated, uint32 arenaRating) { + // SylvaniaCore : garde-fou. m_QueuedGroups n a que MAX_BATTLEGROUND_BRACKETS + // entrees ; un appelant qui fabrique un bracket hors plage lisait au-dela du + // tableau (comportement indefini) des la premiere ligne de la fonction. + if (bracket_id >= MAX_BATTLEGROUND_BRACKETS) + { + TC_LOG_ERROR("bg.battleground", "Battleground: Update: bracket id %u hors plage pour le bg %u", uint32(bracket_id), uint32(bgTypeId)); + return; + } + //if no players in queue - do nothing if (m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_ALLIANCE].empty() && m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_HORDE].empty() &&