Core/Spells: Fixed logic related to movement while channeling

This commit is contained in:
hondacrx
2018-02-12 23:16:54 -05:00
parent da5fd47650
commit 13dcfddc83
4 changed files with 12 additions and 6 deletions
+8 -2
View File
@@ -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;
}
@@ -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;
@@ -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;
@@ -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()))