From 56fcd8ba1dc33e00ff6f98704764dcdebd838fd3 Mon Sep 17 00:00:00 2001 From: Treeston Date: Mon, 15 Jan 2018 15:42:41 +0100 Subject: Core/Threat: Fix a potential crash that would occur in specific edge cases of AI being a bit naughty. (cherry picked from commit 1847555c8c9e630d4d5f1328f25c875f408be949) --- src/server/game/Combat/CombatManager.cpp | 2 +- src/server/game/Combat/ThreatManager.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'src/server/game') 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); -- cgit v1.2.3