diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/actormanager.cpp | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/src/actormanager.cpp b/src/actormanager.cpp index 80dc6e25d..c5d1bd1a7 100644 --- a/src/actormanager.cpp +++ b/src/actormanager.cpp @@ -1405,12 +1405,34 @@ bool ActorManager::validateBeing(const Being *const aroundBeing, { if (localPlayer == nullptr) return false; - return (being != nullptr) && ((being->getType() == type - || type == ActorType::Unknown) && (being->isAlive() - || (mTargetDeadPlayers && type == ActorType::Player)) - && being != aroundBeing) && being != excluded - && (type != ActorType::Monster || !mTargetOnlyReachable - || localPlayer->isReachable(being, maxCost)); + + if (being == nullptr) + return false; + + // Exclude the being we're checking around of. + if (being == aroundBeing) + return false; + + // and the one that is specifically excluded. + if (being == excluded) + return false; + + // If specific being type is given, it must match. + if (!(being->getType() == type || type == ActorType::Unknown)) + return false; + + if (!being->isAlive()) + if (!mTargetDeadPlayers || type != ActorType::Player) + return false; + + // Why are we ignoring real reachability checks for non-monsters? + if (type != ActorType::Monster) + return true; + + if (!mTargetOnlyReachable) + return true; + + return localPlayer->isReachable(being, maxCost); } #ifdef TMWA_SUPPORT |