diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index b03657b73b..b2d44e0a8a 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; }