diff options
author | Lucas Nascimento <keader.android@gmail.com> | 2021-11-06 10:24:32 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-06 10:24:32 -0300 |
commit | 0cc0b3f926a55fd70a51a90631dde99fbb8c6b8b (patch) | |
tree | 519768f1637f904be88d314732f039f60577b8f2 /src/server/game/Combat/CombatManager.cpp | |
parent | a4574cf674e81dee7ae98af31cf7d40f16601a05 (diff) |
Core/Combat: Fixed combat after remove charm (#27248)
https://github.com/TrinityCore/TrinityCore/pull/27038#issuecomment-958784361
Diffstat (limited to 'src/server/game/Combat/CombatManager.cpp')
-rw-r--r-- | src/server/game/Combat/CombatManager.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/server/game/Combat/CombatManager.cpp b/src/server/game/Combat/CombatManager.cpp index ce6ca5e6d54..f35feb7cf92 100644 --- a/src/server/game/Combat/CombatManager.cpp +++ b/src/server/game/Combat/CombatManager.cpp @@ -295,6 +295,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()) |