From 8757e7d355b6d63f589c8e274e9aa45de3439979 Mon Sep 17 00:00:00 2001 From: botnomicon Date: Sat, 25 Jan 2025 11:01:37 -0500 Subject: [PATCH] Plaerbot BG Queue fixes (#130) Need to fix up the queue so that we pass around a guid that we look up otherwise it is possible to crash on message processing with an invalid pointer (for example, if the playerbot disappears due to logout). --- playerbot/RandomPlayerbotMgr.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/playerbot/RandomPlayerbotMgr.cpp b/playerbot/RandomPlayerbotMgr.cpp index 62ddddde2..a424c8393 100644 --- a/playerbot/RandomPlayerbotMgr.cpp +++ b/playerbot/RandomPlayerbotMgr.cpp @@ -1213,12 +1213,16 @@ void RandomPlayerbotMgr::CheckBgQueue() #ifdef MANGOSBOT_ONE if (ArenaType arenaType = sServerFacade.BgArenaType(queueTypeId)) { - sWorld.GetBGQueue().GetMessager().AddMessage([queueTypeId, player = player, arenaType = arenaType, bracketId = bracketId, tempT = TeamId](BattleGroundQueue* bgQueue) + sWorld.GetBGQueue().GetMessager().AddMessage([queueTypeId, playerId = player->GetObjectGuid(), arenaType = arenaType, bracketId = bracketId, tempT = TeamId](BattleGroundQueue* bgQueue) { uint32 TeamId; GroupQueueInfo ginfo; BattleGroundQueueItem* queueItem = &bgQueue->GetBattleGroundQueue(queueTypeId); + Player *player = RandomPlayerbotMgr::instance().GetPlayer(playerId); + + if (!player) + return; if (queueItem->GetPlayerGroupInfoData(player->GetObjectGuid(), &ginfo)) { @@ -1339,12 +1343,15 @@ void RandomPlayerbotMgr::CheckBgQueue() ArenaType arenaType = sServerFacade.BgArenaType(queueTypeId); if (arenaType != ARENA_TYPE_NONE) { - sWorld.GetBGQueue().GetMessager().AddMessage([queueTypeId, bot = bot, arenaType = arenaType, bracketId = bracketId, tempT = TeamId](BattleGroundQueue* bgQueue) + sWorld.GetBGQueue().GetMessager().AddMessage([queueTypeId, botId = bot->GetObjectGuid(), arenaType = arenaType, bracketId = bracketId, tempT = TeamId](BattleGroundQueue* bgQueue) { uint32 TeamId; GroupQueueInfo ginfo; BattleGroundQueueItem* queueItem = &bgQueue->GetBattleGroundQueue(queueTypeId); + Player *bot = RandomPlayerbotMgr::instance().GetPlayer(botId); + if (!bot) + return; if (queueItem->GetPlayerGroupInfoData(bot->GetObjectGuid(), &ginfo)) {