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:
@@ -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() &&
|
||||
|
||||
Reference in New Issue
Block a user