aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Combat/ThreatManager.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-03-04 00:05:35 +0100
committerShauren <shauren.trinity@gmail.com>2024-03-04 00:05:35 +0100
commit1369b8708458fb5020b6ab7a9608123459d4eb26 (patch)
tree005298c2db7f1b5067f8e1746f74541cf1b9c9d8 /src/server/game/Combat/ThreatManager.cpp
parent74ec1d3cfb3172a7bb3c2d2317396ff82245418e (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.cpp13
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()