aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2018-01-15 15:42:41 +0100
committerShauren <shauren.trinity@gmail.com>2021-06-15 23:22:50 +0200
commit56fcd8ba1dc33e00ff6f98704764dcdebd838fd3 (patch)
treedff461aff58b367ebb7ad2a4c3ebbd26c4c6b443 /src/server/game
parent08ac27d9598d8b2708de502ed9d83a554949af93 (diff)
Core/Threat: Fix a potential crash that would occur in specific edge cases of AI being a bit naughty.
(cherry picked from commit 1847555c8c9e630d4d5f1328f25c875f408be949)
Diffstat (limited to 'src/server/game')
-rw-r--r--src/server/game/Combat/CombatManager.cpp2
-rw-r--r--src/server/game/Combat/ThreatManager.cpp8
2 files changed, 5 insertions, 5 deletions
diff --git a/src/server/game/Combat/CombatManager.cpp b/src/server/game/Combat/CombatManager.cpp
index f2186d7fa8a..7630e3c1d2d 100644
--- a/src/server/game/Combat/CombatManager.cpp
+++ b/src/server/game/Combat/CombatManager.cpp
@@ -201,7 +201,7 @@ bool CombatManager::SetInCombatWith(Unit* who)
NotifyAICombat(_owner, who);
if (needOtherAI)
NotifyAICombat(who, _owner);
- return true;
+ return IsInCombatWith(who);
}
bool CombatManager::IsInCombatWith(ObjectGuid const& guid) const
diff --git a/src/server/game/Combat/ThreatManager.cpp b/src/server/game/Combat/ThreatManager.cpp
index 6d24750a6be..8ca4dac268c 100644
--- a/src/server/game/Combat/ThreatManager.cpp
+++ b/src/server/game/Combat/ThreatManager.cpp
@@ -363,6 +363,10 @@ void ThreatManager::AddThreat(Unit* target, float amount, SpellInfo const* spell
}
}
+ // ensure we're in combat (threat implies combat!)
+ if (!_owner->GetCombatManager().SetInCombatWith(target)) // if this returns false, we're not actually in combat, and thus cannot have threat!
+ return; // typical causes: bad scripts trying to add threat to GMs, dead targets etc
+
// ok, now we actually apply threat
// check if we already have an entry - if we do, just increase threat for that entry and we're done
auto it = _myThreatListEntries.find(target->GetGUID());
@@ -372,10 +376,6 @@ void ThreatManager::AddThreat(Unit* target, float amount, SpellInfo const* spell
return;
}
- // otherwise, ensure we're in combat (threat implies combat!)
- if (!_owner->GetCombatManager().SetInCombatWith(target)) // if this returns false, we're not actually in combat, and thus cannot have threat!
- return; // typical causes: bad scripts trying to add threat to GMs, dead targets etc
-
// ok, we're now in combat - create the threat list reference and push it to the respective managers
ThreatReference* ref = new ThreatReference(this, target, amount);
PutThreatListRef(target->GetGUID(), ref);