diff --git a/Source/Game/Entities/Unit/Unit.Spells.cs b/Source/Game/Entities/Unit/Unit.Spells.cs index 98a6ac4c3..2d99d6600 100644 --- a/Source/Game/Entities/Unit/Unit.Spells.cs +++ b/Source/Game/Entities/Unit/Unit.Spells.cs @@ -1382,14 +1382,20 @@ namespace Game.Entities return 0; } - public bool CanMoveDuringChannel() + public bool IsMovementPreventedByCasting() { + // can always move when not casting + if (!HasUnitState(UnitState.Casting)) + return false; + + // channeled spells during channel stage (after the initial cast timer) allow movement with a specific spell attribute Spell spell = m_currentSpells.LookupByKey(CurrentSpellTypes.Channeled); if (spell) if (spell.getState() != SpellState.Finished && spell.IsChannelActive()) - if (!spell.GetSpellInfo().IsMoveAllowedChannel()) + if (spell.GetSpellInfo().IsMoveAllowedChannel()) return false; + // prohibit movement for all other spell casts return true; } diff --git a/Source/Game/Movement/Generators/FleeingGenerator.cs b/Source/Game/Movement/Generators/FleeingGenerator.cs index 9e272052d..70cafb5e3 100644 --- a/Source/Game/Movement/Generators/FleeingGenerator.cs +++ b/Source/Game/Movement/Generators/FleeingGenerator.cs @@ -40,7 +40,7 @@ namespace Game.Movement if (owner.HasUnitState(UnitState.Root | UnitState.Stunned)) return; - if (owner.HasUnitState(UnitState.Casting) && !owner.CanMoveDuringChannel()) + if (owner.IsMovementPreventedByCasting()) { owner.CastStop(); return; diff --git a/Source/Game/Movement/Generators/RandomMovement.cs b/Source/Game/Movement/Generators/RandomMovement.cs index 0e6f8bfc7..8ca764d46 100644 --- a/Source/Game/Movement/Generators/RandomMovement.cs +++ b/Source/Game/Movement/Generators/RandomMovement.cs @@ -86,7 +86,7 @@ namespace Game.Movement public void _setRandomLocation(T creature) { - if (creature.HasUnitState(UnitState.Casting) && !creature.CanMoveDuringChannel()) + if (creature.IsMovementPreventedByCasting()) { creature.CastStop(); return; diff --git a/Source/Game/Movement/Generators/TargetMovement.cs b/Source/Game/Movement/Generators/TargetMovement.cs index 3adfeba19..96e9d207e 100644 --- a/Source/Game/Movement/Generators/TargetMovement.cs +++ b/Source/Game/Movement/Generators/TargetMovement.cs @@ -64,7 +64,7 @@ namespace Game.Movement } // prevent movement while casting spells with cast time or channel time - if (owner.HasUnitState(UnitState.Casting) && !owner.CanMoveDuringChannel()) + if (owner.IsMovementPreventedByCasting()) { if (!owner.isStopped()) owner.StopMoving(); @@ -144,7 +144,7 @@ namespace Game.Movement if (owner.HasUnitState(UnitState.NotMove)) return; - if (owner.HasUnitState(UnitState.Casting) && !owner.CanMoveDuringChannel()) + if (owner.IsMovementPreventedByCasting()) return; if (owner.IsTypeId(TypeId.Unit) && !target.isInAccessiblePlaceFor(owner.ToCreature()))