From afbdb99d90a1c8c3046a07edd35e582b7289ebd5 Mon Sep 17 00:00:00 2001 From: ccrs Date: Sun, 17 Jul 2016 01:12:57 +0200 Subject: Core/UnitAI: SelectTarget correction (#17309) Core/UnitAI: SelectTarget correction - have current victim always be first element of target list (cherry picked from commit 63e62117ea339e6d76958b13bba8ec7ed99b7616) --- src/server/game/AI/CoreAI/UnitAI.h | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h index 31881cf3b7e..15fba06df1b 100644 --- a/src/server/game/AI/CoreAI/UnitAI.h +++ b/src/server/game/AI/CoreAI/UnitAI.h @@ -148,15 +148,21 @@ class TC_GAME_API 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 TC_GAME_API 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); -- cgit v1.2.3