From faa310252f9734b1ab6d5d641e9c8951ce91b614 Mon Sep 17 00:00:00 2001 From: ccrs Date: Sun, 17 Jul 2016 01:12:57 +0200 Subject: [PATCH] Core/UnitAI: SelectTarget correction (#17309) Core/UnitAI: SelectTarget correction - have current victim always be first element of target list --- src/server/game/AI/CoreAI/UnitAI.h | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h index 3c95890c12c..06f48ce5787 100644 --- a/src/server/game/AI/CoreAI/UnitAI.h +++ b/src/server/game/AI/CoreAI/UnitAI.h @@ -148,15 +148,21 @@ class UnitAI { ThreatContainer::StorageType const& threatlist = me->getThreatManager().getThreatList(); if (position >= threatlist.size()) - return NULL; + return nullptr; std::list targetList; + Unit* currentVictim = me->getThreatManager().getCurrentVictim()->getTarget(); + + // Current victim always goes first + if (predicate(currentVictim)) + targetList.push_back(currentVictim); + for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr) - if (predicate((*itr)->getTarget())) + if ((*itr)->getTarget() != currentVictim && predicate((*itr)->getTarget())) targetList.push_back((*itr)->getTarget()); if (position >= targetList.size()) - return NULL; + return nullptr; if (targetType == SELECT_TARGET_NEAREST || targetType == SELECT_TARGET_FARTHEST) targetList.sort(Trinity::ObjectDistanceOrderPred(me)); @@ -187,7 +193,7 @@ class UnitAI break; } - return NULL; + return nullptr; } void SelectTargetList(std::list& targetList, uint32 num, SelectAggroTarget targetType, float dist = 0.0f, bool playerOnly = false, int32 aura = 0);