diff options
author | Shauren <shauren.trinity@gmail.com> | 2024-03-04 00:05:35 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2024-03-04 00:05:35 +0100 |
commit | 1369b8708458fb5020b6ab7a9608123459d4eb26 (patch) | |
tree | 005298c2db7f1b5067f8e1746f74541cf1b9c9d8 /src/server/game/Combat/ThreatManager.cpp | |
parent | 74ec1d3cfb3172a7bb3c2d2317396ff82245418e (diff) |
Core/Creatures: Implemented CREATURE_STATIC_FLAG_2_IGNORE_SANCTUARY (ignore SPELL_EFFECT_SANCTUARY, used by Vanish)
Diffstat (limited to 'src/server/game/Combat/ThreatManager.cpp')
-rw-r--r-- | src/server/game/Combat/ThreatManager.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/server/game/Combat/ThreatManager.cpp b/src/server/game/Combat/ThreatManager.cpp index 9376d42b010..04ff7e36da1 100644 --- a/src/server/game/Combat/ThreatManager.cpp +++ b/src/server/game/Combat/ThreatManager.cpp @@ -743,13 +743,16 @@ void ThreatManager::ForwardThreatForAssistingMe(Unit* assistant, float baseAmoun threatened->GetThreatManager().AddThreat(assistant, 0.0f, spell, true); } -void ThreatManager::RemoveMeFromThreatLists() +void ThreatManager::RemoveMeFromThreatLists(bool (*unitFilter)(Unit const* otherUnit)) { - while (!_threatenedByMe.empty()) - { - auto& ref = _threatenedByMe.begin()->second; + std::vector<ThreatReference*> threatReferencesToRemove; + threatReferencesToRemove.reserve(_threatenedByMe.size()); + for (auto const& [guid, ref] : _threatenedByMe) + if (!unitFilter || unitFilter(ref->GetOwner())) + threatReferencesToRemove.push_back(ref); + + for (ThreatReference* ref : threatReferencesToRemove) ref->_mgr.ClearThreat(_owner); - } } void ThreatManager::UpdateMyTempModifiers() |