aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2011-03-15 12:08:07 +0100
committerShauren <shauren.trinity@gmail.com>2011-03-15 12:08:07 +0100
commit119bb6fcd5b2c17173648f0bc58523e84117f71b (patch)
tree9b5a0478332bfa34502e6f203c044edc0f8c9961 /src
parent4f48b7ae8d0f4b2d271c0fecac3d1dc9894451d9 (diff)
Core/Units: Fixed SelectNearbyTarget to ignore totems, critters and spirit healers
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.cpp17
1 files changed, 5 insertions, 12 deletions
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<Unit *>::iterator tIter = targets.begin(); tIter != targets.end();)
+ for (std::list<Unit*>::iterator tIter = targets.begin(); tIter != targets.end();)
{
- if (!IsWithinLOSInMap(*tIter))
- {
- std::list<Unit *>::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<Unit *>::const_iterator tcIter = targets.begin();
- for (uint32 i = 0; i < rIdx; ++i)
- ++tcIter;
-
+ std::list<Unit*>::const_iterator tcIter = targets.begin();
+ std::advance(tcIter, urand(0, targets.size()-1));
return *tcIter;
}