From fdc1c5b6c952262f98f15f35dcf19fe293c65d5b Mon Sep 17 00:00:00 2001 From: Treeston Date: Mon, 29 Jan 2018 03:07:43 +0100 Subject: Combat/Threat: Now set engaged state for all units on offline reference registration (vanished/invis'd units). For non-PASSIVE units, this will immediately cause an evade. This fixes an exploit where creating the reference as offline (by vanishing while a spell was mid-flight) you could damage a creature further without it ever engaging you. (cherry picked from commit 24024062280e6963f713348baba2b8c69437891a) --- src/server/game/Combat/ThreatManager.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'src/server') diff --git a/src/server/game/Combat/ThreatManager.cpp b/src/server/game/Combat/ThreatManager.cpp index 3cbd1c39bf3..9cc86ceb625 100644 --- a/src/server/game/Combat/ThreatManager.cpp +++ b/src/server/game/Combat/ThreatManager.cpp @@ -380,13 +380,12 @@ void ThreatManager::AddThreat(Unit* target, float amount, SpellInfo const* spell ThreatReference* ref = new ThreatReference(this, target, amount); PutThreatListRef(target->GetGUID(), ref); target->GetThreatManager().PutThreatenedByMeRef(_owner->GetGUID(), ref); - - Creature* cOwner = _owner->ToCreature(); - ASSERT(cOwner); // if we got here the owner can have a threat list, and must be a creature! - if (!_ownerEngaged && (cOwner->HasReactState(REACT_PASSIVE) || !ref->IsOffline())) + if (!_ownerEngaged) { _ownerEngaged = true; + Creature* cOwner = _owner->ToCreature(); + ASSERT(cOwner); // if we got here the owner can have a threat list, and must be a creature! SaveCreatureHomePositionIfNeed(cOwner); if (cOwner->IsAIEnabled) cOwner->AI()->JustEngagedWith(target); -- cgit v1.2.3