From 0b2a042175f92d3d73ed7e8139a6895613cee91b Mon Sep 17 00:00:00 2001 From: Sylvania Date: Tue, 1 Sep 2026 22:43:06 +0200 Subject: [PATCH] Arenes cotees : bracket 14 code en dur, hors plage et introuvable BattlegroundMgr::Update forcait la mise a jour des files cotees avec BattlegroundBracketId(14) -- la boucle sur les brackets avait ete commentee en amont. Deux consequences : - m_QueuedGroups ne compte que MAX_BATTLEGROUND_BRACKETS (12) entrees : chaque passage lisait au-dela du tableau, toutes les 5 secondes. - aucune entree PVPDifficulty ne correspond au couple (carte du template BATTLEGROUND_AA, bracket 14), donc la fonction sortait aussitot en journalisant une erreur : 585 000 lignes dans dc-world.log, soit la moitie du fichier, et le force-update des arenes cotees ne servait a rien depuis toujours. On parcourt desormais les brackets reellement declares pour la carte, et BattlegroundQueueUpdate refuse un bracket hors plage au lieu de lire a cote. Co-Authored-By: Claude Opus 5 --- .../game/Battlegrounds/BattlegroundMgr.cpp | 23 +++++++++++++++---- .../game/Battlegrounds/BattlegroundQueue.cpp | 9 ++++++++ 2 files changed, 27 insertions(+), 5 deletions(-) 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() &&