From 119bb6fcd5b2c17173648f0bc58523e84117f71b Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 15 Mar 2011 12:08:07 +0100 Subject: Core/Units: Fixed SelectNearbyTarget to ignore totems, critters and spirit healers --- src/server/game/Entities/Unit/Unit.cpp | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) (limited to 'src/server') diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index b03657b73bf..b2d44e0a8a8 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -14454,14 +14454,10 @@ Unit* Unit::SelectNearbyTarget(float dist) const targets.remove(getVictim()); // remove not LoS targets - for (std::list::iterator tIter = targets.begin(); tIter != targets.end();) + for (std::list::iterator tIter = targets.begin(); tIter != targets.end();) { - if (!IsWithinLOSInMap(*tIter)) - { - std::list::iterator tIter2 = tIter; - ++tIter; - targets.erase(tIter2); - } + if (!IsWithinLOSInMap(*tIter) || (*tIter)->isTotem() || (*tIter)->isSpiritService() || (*tIter)->GetCreatureType() == CREATURE_TYPE_CRITTER) + targets.erase(tIter++); else ++tIter; } @@ -14471,11 +14467,8 @@ Unit* Unit::SelectNearbyTarget(float dist) const return NULL; // select random - uint32 rIdx = urand(0,targets.size()-1); - std::list::const_iterator tcIter = targets.begin(); - for (uint32 i = 0; i < rIdx; ++i) - ++tcIter; - + std::list::const_iterator tcIter = targets.begin(); + std::advance(tcIter, urand(0, targets.size()-1)); return *tcIter; } -- cgit v1.2.3