diff options
Diffstat (limited to 'src/server/game/Combat/ThreatManager.cpp')
-rw-r--r-- | src/server/game/Combat/ThreatManager.cpp | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/server/game/Combat/ThreatManager.cpp b/src/server/game/Combat/ThreatManager.cpp index 04ff7e36da1..57ff0aca131 100644 --- a/src/server/game/Combat/ThreatManager.cpp +++ b/src/server/game/Combat/ThreatManager.cpp @@ -189,7 +189,7 @@ void ThreatReference::HeapNotifyDecreased() return true; } -ThreatManager::ThreatManager(Unit* owner) : _owner(owner), _ownerCanHaveThreatList(false), _needClientUpdate(false), _updateTimer(THREAT_UPDATE_INTERVAL), +ThreatManager::ThreatManager(Unit* owner) : _owner(owner), _ownerCanHaveThreatList(false), _needClientUpdate(false), _needThreatClearUpdate(false), _updateTimer(THREAT_UPDATE_INTERVAL), _sortedThreatList(std::make_unique<Heap>()), _currentVictimRef(nullptr), _fixateRef(nullptr) { for (int8 i = 0; i < MAX_SPELL_SCHOOL; ++i) @@ -210,17 +210,31 @@ void ThreatManager::Initialize() void ThreatManager::Update(uint32 tdiff) { - if (!CanHaveThreatList() || IsThreatListEmpty(true)) + if (!CanHaveThreatList()) return; + if (_updateTimer <= tdiff) { - UpdateVictim(); + if (_needThreatClearUpdate) + { + SendClearAllThreatToClients(); + _needThreatClearUpdate = false; + } + + if (!IsThreatListEmpty(true)) + UpdateVictim(); + _updateTimer = THREAT_UPDATE_INTERVAL; } else _updateTimer -= tdiff; } +void ThreatManager::ResetUpdateTimer() +{ + _updateTimer = THREAT_UPDATE_INTERVAL; +} + Unit* ThreatManager::GetCurrentVictim() { if (!_currentVictimRef || _currentVictimRef->ShouldBeOffline()) @@ -539,7 +553,7 @@ void ThreatManager::ClearAllThreat() { if (!_myThreatListEntries.empty()) { - SendClearAllThreatToClients(); + _needThreatClearUpdate = true; do _myThreatListEntries.begin()->second->UnregisterAndFree(); while (!_myThreatListEntries.empty()); |