Entities/Unit: Fix an issue where Unit pointers could be left dangling if a channeled Charm was interrupted by a control aura application.

Port From (https://github.com/TrinityCore/TrinityCore/commit/d10554da14fb8371072567f673c9f919cbe6b929)
This commit is contained in:
hondacrx
2021-12-23 20:19:55 -05:00
parent 1f58dc2b53
commit e28b42b270
3 changed files with 7 additions and 12 deletions
+4
View File
@@ -7217,7 +7217,11 @@ namespace Game.Entities
{
// still affected by some aura that shouldn't allow control, only allow on last such aura to be removed
if (allowMove && target.HasUnitState(UnitState.CantClientControl))
{
// this should never happen, otherwise m_unitBeingMoved might be left dangling!
Cypher.Assert(GetUnitBeingMoved() == target);
return;
}
ControlUpdate packet = new();
packet.Guid = target.GetGUID();
-9
View File
@@ -1043,15 +1043,6 @@ namespace Game.Entities
}
}
}
public override void RemoveFromWorld()
{
if (!IsInWorld)
return;
RemoveCharmedBy(null);
base.RemoveFromWorld();
}
}
public class ForcedUnsummonDelayEvent : BasicEvent
+3 -3
View File
@@ -1125,12 +1125,14 @@ namespace Game.Entities
if (HasUnitState(state))
return;
if (state.HasFlag(UnitState.Controlled))
CastStop();
AddUnitState(state);
switch (state)
{
case UnitState.Stunned:
SetStunned(true);
CastStop();
break;
case UnitState.Root:
if (!HasUnitState(UnitState.Stunned))
@@ -1143,7 +1145,6 @@ namespace Game.Entities
SendMeleeAttackStop();
// SendAutoRepeatCancel ?
SetConfused(true);
CastStop();
}
break;
case UnitState.Fleeing:
@@ -1153,7 +1154,6 @@ namespace Game.Entities
SendMeleeAttackStop();
// SendAutoRepeatCancel ?
SetFeared(true);
CastStop();
}
break;
default: