aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Combat/CombatManager.cpp
diff options
context:
space:
mode:
authorLucas Nascimento <keader.android@gmail.com>2021-11-06 10:24:32 -0300
committerShauren <shauren.trinity@gmail.com>2022-03-21 22:02:34 +0100
commit4ed918fcb38d7fd3752899a0eafd7ad62b7217af (patch)
treebb960252953f275963354d8e62c589733f96113f /src/server/game/Combat/CombatManager.cpp
parent64a217801b08452b26eb641c3eb324691006b732 (diff)
Core/Combat: Fixed combat after remove charm (#27248)
https://github.com/TrinityCore/TrinityCore/pull/27038#issuecomment-958784361 (cherry picked from commit 0cc0b3f926a55fd70a51a90631dde99fbb8c6b8b)
Diffstat (limited to 'src/server/game/Combat/CombatManager.cpp')
-rw-r--r--src/server/game/Combat/CombatManager.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/server/game/Combat/CombatManager.cpp b/src/server/game/Combat/CombatManager.cpp
index 7cbab16aa04..41ee2147113 100644
--- a/src/server/game/Combat/CombatManager.cpp
+++ b/src/server/game/Combat/CombatManager.cpp
@@ -294,6 +294,35 @@ void CombatManager::EndAllPvECombat()
_pveRefs.begin()->second->EndCombat();
}
+void CombatManager::RevalidateCombat()
+{
+ auto it = _pveRefs.begin(), end = _pveRefs.end();
+ while (it != end)
+ {
+ CombatReference* const ref = it->second;
+ if (!CanBeginCombat(_owner, ref->GetOther(_owner)))
+ {
+ it = _pveRefs.erase(it), end = _pveRefs.end(); // erase manually here to avoid iterator invalidation
+ ref->EndCombat();
+ }
+ else
+ ++it;
+ }
+
+ auto it2 = _pvpRefs.begin(), end2 = _pvpRefs.end();
+ while (it2 != end2)
+ {
+ CombatReference* const ref = it2->second;
+ if (!CanBeginCombat(_owner, ref->GetOther(_owner)))
+ {
+ it2 = _pvpRefs.erase(it2), end2 = _pvpRefs.end(); // erase manually here to avoid iterator invalidation
+ ref->EndCombat();
+ }
+ else
+ ++it2;
+ }
+}
+
void CombatManager::EndAllPvPCombat()
{
while (!_pvpRefs.empty())