aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2018-01-29 03:07:43 +0100
committerShauren <shauren.trinity@gmail.com>2021-06-19 01:35:40 +0200
commitfdc1c5b6c952262f98f15f35dcf19fe293c65d5b (patch)
tree14cdac7c3e69fb55bf2375120cd76412d1a51356
parent75a3b2f122f04a70f3e9eeed21cbe71d131c425f (diff)
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)
-rw-r--r--src/server/game/Combat/ThreatManager.cpp7
1 files changed, 3 insertions, 4 deletions
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);