From 7e74fbe1811340c2679eea2577ef17a90c927042 Mon Sep 17 00:00:00 2001 From: EricksOliveira Date: Sun, 3 Nov 2024 12:15:16 +0000 Subject: [PATCH] Fix Crash QuestAction (#665) Added checks to ensure bot and botAI are valid at function start. Added extra pointer checks when accessing unit and gameobj in loops that iterate over nearest NPCs and game objects. This adjustment ensures that objects are initialized correctly before being used in the ProcessQuests function. --- src/strategy/actions/QuestAction.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/strategy/actions/QuestAction.cpp b/src/strategy/actions/QuestAction.cpp index 139033f1..13ed7bba 100644 --- a/src/strategy/actions/QuestAction.cpp +++ b/src/strategy/actions/QuestAction.cpp @@ -15,9 +15,13 @@ bool QuestAction::Execute(Event event) { ObjectGuid guid = event.getObject(); - Player* master = GetMaster(); + // Checks if the bot and botAI are valid + if (!bot || !botAI) + return false; + + // Sets guid based on bot or master target if (!guid) { if (!master) @@ -36,19 +40,27 @@ bool QuestAction::Execute(Event event) } bool result = false; + + // Check the nearest NPCs GuidVector npcs = AI_VALUE(GuidVector, "nearest npcs"); - for (const auto npc : npcs) + for (const auto& npc : npcs) { Unit* unit = botAI->GetUnit(npc); if (unit && bot->GetDistance(unit) <= INTERACTION_DISTANCE) + { result |= ProcessQuests(unit); + } } + + // Checks the nearest game objects std::list gos = AI_VALUE(std::list, "nearest game objects"); - for (const auto go : gos) + for (const auto& go : gos) { GameObject* gameobj = botAI->GetGameObject(go); if (gameobj && bot->GetDistance(gameobj) <= INTERACTION_DISTANCE) + { result |= ProcessQuests(gameobj); + } } return result;