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 <noreply@anthropic.com>
This commit is contained in:
Sylvania
2026-09-01 22:43:06 +02:00
parent 04b6dd20f5
commit 0b2a042175
2 changed files with 27 additions and 5 deletions
@@ -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);
@@ -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() &&