diff options
author | Treeston <treeston.mmoc@gmail.com> | 2018-05-04 14:49:08 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-09-26 16:12:33 +0200 |
commit | 16eb5032ad0e8fbc9cd9d3229be65a8f0190347b (patch) | |
tree | 5041f78ab1509768a1502641e8c9a1203385ca7d /src/server/game/Combat/ThreatManager.cpp | |
parent | c926e2fc940fdf8e328dddb829e0aaafea1e8a90 (diff) |
Core/Threat: Re-add fixtate system. I am being told Netherspite needs it.
(cherry picked from commit fd33b1cd02a1c69fc78f47f079eadc43c331d054)
Diffstat (limited to 'src/server/game/Combat/ThreatManager.cpp')
-rw-r--r-- | src/server/game/Combat/ThreatManager.cpp | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/src/server/game/Combat/ThreatManager.cpp b/src/server/game/Combat/ThreatManager.cpp index ad1c513ffd1..82e98c91dbf 100644 --- a/src/server/game/Combat/ThreatManager.cpp +++ b/src/server/game/Combat/ThreatManager.cpp @@ -459,10 +459,36 @@ void ThreatManager::ClearAllThreat() while (!_myThreatListEntries.empty()); } +void ThreatManager::FixtateTarget(Unit* target) +{ + if (target) + { + auto it = _myThreatListEntries.find(target->GetGUID()); + if (it != _myThreatListEntries.end()) + { + _fixtateRef = it->second; + return; + } + } + _fixtateRef = nullptr; +} + +Unit* ThreatManager::GetFixtateTarget() const +{ + if (_fixtateRef) + return _fixtateRef->GetVictim(); + else + return nullptr; +} + ThreatReference const* ThreatManager::ReselectVictim() { + // fixtated target is always preferred + if (_fixtateRef && _fixtateRef->IsAvailable()) + return _fixtateRef; + ThreatReference const* oldVictimRef = _currentVictimRef; - if (oldVictimRef && !oldVictimRef->IsAvailable()) + if (oldVictimRef && oldVictimRef->IsOffline()) oldVictimRef = nullptr; // in 99% of cases - we won't need to actually look at anything beyond the first element ThreatReference const* highest = _sortedThreatList.top(); @@ -705,6 +731,8 @@ void ThreatManager::PurgeThreatListRef(ObjectGuid const& guid, bool sendRemove) if (_currentVictimRef == ref) _currentVictimRef = nullptr; + if (_fixtateRef == ref) + _fixtateRef = nullptr; _sortedThreatList.erase(ref->_handle); if (sendRemove && ref->IsAvailable()) |