diff options
author | Shauren <shauren.trinity@gmail.com> | 2011-03-15 12:08:07 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2011-03-15 12:08:07 +0100 |
commit | 119bb6fcd5b2c17173648f0bc58523e84117f71b (patch) | |
tree | 9b5a0478332bfa34502e6f203c044edc0f8c9961 /src | |
parent | 4f48b7ae8d0f4b2d271c0fecac3d1dc9894451d9 (diff) |
Core/Units: Fixed SelectNearbyTarget to ignore totems, critters and spirit healers
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Entities/Unit/Unit.cpp | 17 |
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; } |