diff --git a/Source/Game/Entities/Player/Player.cs b/Source/Game/Entities/Player/Player.cs index 5ef7cb0ca..606f23b25 100644 --- a/Source/Game/Entities/Player/Player.cs +++ b/Source/Game/Entities/Player/Player.cs @@ -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(); diff --git a/Source/Game/Entities/TemporarySummon.cs b/Source/Game/Entities/TemporarySummon.cs index 5429ffde3..d07837ff8 100644 --- a/Source/Game/Entities/TemporarySummon.cs +++ b/Source/Game/Entities/TemporarySummon.cs @@ -1043,15 +1043,6 @@ namespace Game.Entities } } } - - public override void RemoveFromWorld() - { - if (!IsInWorld) - return; - - RemoveCharmedBy(null); - base.RemoveFromWorld(); - } } public class ForcedUnsummonDelayEvent : BasicEvent diff --git a/Source/Game/Entities/Unit/Unit.Movement.cs b/Source/Game/Entities/Unit/Unit.Movement.cs index 7c63d4f73..d07637096 100644 --- a/Source/Game/Entities/Unit/Unit.Movement.cs +++ b/Source/Game/Entities/Unit/Unit.Movement.cs @@ -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: