From 1c9eeb403a7d60fa52702ef413cc60a13d0c88b3 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Tue, 22 Jun 2021 20:51:08 -0400 Subject: [PATCH] Core/Threat: Fix a potential crash that would occur in specific edge cases of AI being a bit naughty. Port From (https://github.com/TrinityCore/TrinityCore/commit/56fcd8ba1dc33e00ff6f98704764dcdebd838fd3) --- Source/Game/Combat/CombatManager.cs | 3 ++- Source/Game/Combat/ThreatManager.cs | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Source/Game/Combat/CombatManager.cs b/Source/Game/Combat/CombatManager.cs index 9c1a20abd..1ad078a1e 100644 --- a/Source/Game/Combat/CombatManager.cs +++ b/Source/Game/Combat/CombatManager.cs @@ -146,7 +146,8 @@ namespace Game.Combat NotifyAICombat(_owner, who); if (needOtherAI) NotifyAICombat(who, _owner); - return true; + + return IsInCombatWith(who); } public bool IsInCombatWith(ObjectGuid guid) diff --git a/Source/Game/Combat/ThreatManager.cs b/Source/Game/Combat/ThreatManager.cs index cddfd5a2b..03ce0dc50 100644 --- a/Source/Game/Combat/ThreatManager.cs +++ b/Source/Game/Combat/ThreatManager.cs @@ -285,6 +285,10 @@ namespace Game.Combat } } + // 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 var targetRefe = _myThreatListEntries.LookupByKey(target.GetGUID()); @@ -294,10 +298,6 @@ namespace Game.Combat 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 newRefe = new(this, target, amount); PutThreatListRef(target.GetGUID(), newRefe);