aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/AI/CoreAI/UnitAI.h18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h
index 15fba06df1b..2ca49653b50 100644
--- a/src/server/game/AI/CoreAI/UnitAI.h
+++ b/src/server/game/AI/CoreAI/UnitAI.h
@@ -151,15 +151,23 @@ class TC_GAME_API UnitAI
return nullptr;
std::list<Unit*> targetList;
- Unit* currentVictim = me->getThreatManager().getCurrentVictim()->getTarget();
+ Unit* currentVictim = nullptr;
+ if (auto currentVictimReference = me->getThreatManager().getCurrentVictim())
+ {
+ currentVictim = currentVictimReference->getTarget();
- // Current victim always goes first
- if (predicate(currentVictim))
- targetList.push_back(currentVictim);
+ // Current victim always goes first
+ if (currentVictim && predicate(currentVictim))
+ targetList.push_back(currentVictim);
+ }
for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr)
- if ((*itr)->getTarget() != currentVictim && predicate((*itr)->getTarget()))
+ {
+ if (currentVictim != nullptr && (*itr)->getTarget() != currentVictim && predicate((*itr)->getTarget()))
targetList.push_back((*itr)->getTarget());
+ else if (currentVictim == nullptr && predicate((*itr)->getTarget()))
+ targetList.push_back((*itr)->getTarget());
+ }
if (position >= targetList.size())
return nullptr;