Core/Combat: Fixed combat after remove charm
Port From (https://github.com/TrinityCore/TrinityCore/commit/4ed918fcb38d7fd3752899a0eafd7ad62b7217af)
This commit is contained in:
@@ -235,6 +235,27 @@ namespace Game.Combat
|
|||||||
_pveRefs.First().Value.EndCombat();
|
_pveRefs.First().Value.EndCombat();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void RevalidateCombat()
|
||||||
|
{
|
||||||
|
foreach(var (guid, refe) in _pveRefs.ToList())
|
||||||
|
{
|
||||||
|
if (!CanBeginCombat(_owner, refe.GetOther(_owner)))
|
||||||
|
{
|
||||||
|
_pveRefs.Remove(guid); // erase manually here to avoid iterator invalidation
|
||||||
|
refe.EndCombat();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var (guid, refe) in _pvpRefs.ToList())
|
||||||
|
{
|
||||||
|
if (!CanBeginCombat(_owner, refe.GetOther(_owner)))
|
||||||
|
{
|
||||||
|
_pvpRefs.Remove(guid); // erase manually here to avoid iterator invalidation
|
||||||
|
refe.EndCombat();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void EndAllPvPCombat()
|
void EndAllPvPCombat()
|
||||||
{
|
{
|
||||||
while (!_pvpRefs.Empty())
|
while (!_pvpRefs.Empty())
|
||||||
|
|||||||
@@ -481,6 +481,7 @@ namespace Game.Entities
|
|||||||
Cypher.Assert(type != CharmType.Vehicle || (IsTypeId(TypeId.Unit) && IsVehicle()));
|
Cypher.Assert(type != CharmType.Vehicle || (IsTypeId(TypeId.Unit) && IsVehicle()));
|
||||||
|
|
||||||
charmer.SetCharm(this, false);
|
charmer.SetCharm(this, false);
|
||||||
|
m_combatManager.RevalidateCombat();
|
||||||
|
|
||||||
Player playerCharmer = charmer.ToPlayer();
|
Player playerCharmer = charmer.ToPlayer();
|
||||||
if (playerCharmer)
|
if (playerCharmer)
|
||||||
|
|||||||
Reference in New Issue
Block a user