Core/Combat: Fixed combat after remove charm (#27248)

https://github.com/TrinityCore/TrinityCore/pull/27038#issuecomment-958784361
# Conflicts:
#	src/server/game/Combat/CombatManager.h
This commit is contained in:
Lucas Nascimento authored and Ovahlord committed 2021-11-28 12:21:59 +01:00
1 parent 34c2da7bd9
commit 336ed5ce54
3 files changed
+31

No files matched your search

+29
View File
@@ -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())
+1
View File
@@ -122,6 +122,7 @@ class TC_GAME_API CombatManager
// flags any pvp refs for suppression on owner's side - these refs will not generate combat until refreshed
void SuppressPvPCombat();
void EndAllPvECombat();
void RevalidateCombat();
void EndAllPvPCombat();
void EndAllCombat() { EndAllPvECombat(); EndAllPvPCombat(); }
+1
View File
@@ -12422,6 +12422,7 @@ void Unit::RemoveCharmedBy(Unit* charmer)
ASSERT(type != CHARM_TYPE_VEHICLE || (GetTypeId() == TYPEID_UNIT && IsVehicle()));
charmer->SetCharm(this, false);
m_combatManager.RevalidateCombat();
Player* playerCharmer = charmer->ToPlayer();