diff options
-rw-r--r-- | src/server/game/AI/CoreAI/UnitAI.h | 18 |
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; |