aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorQAston <qaston@gmail.com>2011-09-21 01:03:53 -0700
committerQAston <qaston@gmail.com>2011-09-21 01:03:53 -0700
commitd628145d9548bd4591f192e0bad01d96dcce8f2d (patch)
tree1af80d33303634d4171a01d5ade5430061748228 /src
parentcdb4f60a147b7d9a180eaa5e20ab898fda96a5c3 (diff)
parent4ccb22e1a6756cd31eee6d328ed995e192e2a8a5 (diff)
Merge pull request #3143 from megamage/master
Threat manager. Fix crashes #2396 and #2992.
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Combat/ThreatManager.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/server/game/Combat/ThreatManager.cpp b/src/server/game/Combat/ThreatManager.cpp
index 58d46dda62f..e5a2460b1a6 100755
--- a/src/server/game/Combat/ThreatManager.cpp
+++ b/src/server/game/Combat/ThreatManager.cpp
@@ -74,6 +74,10 @@ bool ThreatCalcHelper::isValidProcess(Unit* hatedUnit, Unit* hatingUnit, SpellIn
if (!hatedUnit->isAlive() || !hatingUnit->isAlive())
return false;
+ // not in same map or phase
+ if (!hatedUnit->IsInMap(hatingUnit))
+ return false;
+
// spell not causing threat
if (threatSpell && threatSpell->AttributesEx & SPELL_ATTR1_NO_THREAT)
return false;
@@ -174,11 +178,13 @@ void HostileReference::updateOnlineStatus()
// ref is valid
// target is no player or not gamemaster
// target is not in flight
- if (isValid() &&
- ((getTarget()->GetTypeId() != TYPEID_PLAYER || !getTarget()->ToPlayer()->isGameMaster()) ||
- !getTarget()->HasUnitState(UNIT_STAT_IN_FLIGHT)))
+ if (isValid()
+ && (getTarget()->GetTypeId() != TYPEID_PLAYER || !getTarget()->ToPlayer()->isGameMaster())
+ && !getTarget()->HasUnitState(UNIT_STAT_IN_FLIGHT)
+ && getTarget()->IsInMap(getSourceUnit())
+ )
{
- Creature* creature = getSourceUnit()->ToCreature();
+ Creature* creature = getSourceUnit()->ToCreature();
online = getTarget()->isInAccessiblePlaceFor(creature);
if (!online)
{