diff options
| author | Treeston <treeston.mmoc@gmail.com> | 2018-09-09 14:47:49 +0200 |
|---|---|---|
| committer | Treeston <treeston.mmoc@gmail.com> | 2018-09-09 14:48:11 +0200 |
| commit | 9f1755dbf13d475a26741690ec5d6a340a7f4230 (patch) | |
| tree | 8fb9f4c9cb5e9d15c9abeba1c53d67b36db155aa /src | |
| parent | 71c5569d186c4c24382b7c2846630da4a9edfb4f (diff) | |
Core/Threat: Properly sequence checking offline state _after_ adding the reference to the threat list. This ensures IsEngagedWith reports consistent values for downstack calls in Creature. Closes #22406.
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Combat/ThreatManager.cpp | 8 | ||||
| -rw-r--r-- | src/server/game/Combat/ThreatManager.h | 6 |
2 files changed, 10 insertions, 4 deletions
diff --git a/src/server/game/Combat/ThreatManager.cpp b/src/server/game/Combat/ThreatManager.cpp index 73cd43bb0de..f41368614af 100644 --- a/src/server/game/Combat/ThreatManager.cpp +++ b/src/server/game/Combat/ThreatManager.cpp @@ -389,9 +389,15 @@ void ThreatManager::AddThreat(Unit* target, float amount, SpellInfo const* spell } // 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); + ThreatReference* ref = new ThreatReference(this, target); PutThreatListRef(target->GetGUID(), ref); target->GetThreatManager().PutThreatenedByMeRef(_owner->GetGUID(), ref); + + // afterwards, we evaluate whether this is an online reference (it might not be an acceptable target, but we need to add it to our threat list before we check!) + ref->UpdateOffline(); + if (ref->IsOnline()) // ...and if the ref is online it also gets the threat it should have + ref->AddThreat(amount); + if (!_ownerEngaged) { Creature* cOwner = ASSERT_NOTNULL(_owner->ToCreature()); // if we got here the owner can have a threat list, and must be a creature! diff --git a/src/server/game/Combat/ThreatManager.h b/src/server/game/Combat/ThreatManager.h index 0fbe71a654c..733365b5446 100644 --- a/src/server/game/Combat/ThreatManager.h +++ b/src/server/game/Combat/ThreatManager.h @@ -278,10 +278,10 @@ class TC_GAME_API ThreatReference private: static bool FlagsAllowFighting(Unit const* a, Unit const* b); - ThreatReference(ThreatManager* mgr, Unit* victim, float amount) : + ThreatReference(ThreatManager* mgr, Unit* victim) : _owner(reinterpret_cast<Creature*>(mgr->_owner)), _mgr(*mgr), _victim(victim), - _online(ShouldBeOffline() ? ONLINE_STATE_OFFLINE : ShouldBeSuppressed() ? ONLINE_STATE_SUPPRESSED : ONLINE_STATE_ONLINE), - _baseAmount(IsOnline() ? amount : 0.0f), _tempModifier(0), _taunted(TAUNT_STATE_NONE) { } + _online(ShouldBeSuppressed() ? ONLINE_STATE_SUPPRESSED : ONLINE_STATE_ONLINE), + _baseAmount(0.0f), _tempModifier(0), _taunted(TAUNT_STATE_NONE) { } void UnregisterAndFree(); |
