diff options
author | QAston <qaston@gmail.com> | 2011-09-21 01:03:53 -0700 |
---|---|---|
committer | QAston <qaston@gmail.com> | 2011-09-21 01:03:53 -0700 |
commit | d628145d9548bd4591f192e0bad01d96dcce8f2d (patch) | |
tree | 1af80d33303634d4171a01d5ade5430061748228 | |
parent | cdb4f60a147b7d9a180eaa5e20ab898fda96a5c3 (diff) | |
parent | 4ccb22e1a6756cd31eee6d328ed995e192e2a8a5 (diff) |
Merge pull request #3143 from megamage/master
Threat manager. Fix crashes #2396 and #2992.
-rwxr-xr-x | src/server/game/Combat/ThreatManager.cpp | 14 |
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) { |