/// <summary> /// checked if the spell has an instant cast, the spell is one which can be cast while moving, or we have an aura active which allows moving without interrupting casting. /// does not check whether you are presently moving, only whether you could cast if you are moving /// </summary> /// <param name="spell">spell to cast</param> /// <returns>true if spell can be cast while moving, false if it cannot</returns> private static bool AllowMovingWhileCasting(WoWSpell spell) { // quick return for instant spells if (spell.IsInstantCast() && !spell.IsChanneled) { if (SingularSettings.DebugSpellCasting) Logger.WriteFile( "MoveWhileCasting[{0}]: true, since instant cast and not a funnel spell", spell.Name ); return true; } // assume we cant move, but check for class specific buffs which allow movement while casting bool allowMovingWhileCasting = false; if (Me.Class == WoWClass.Shaman) allowMovingWhileCasting = spell.Name == "Lightning Bolt"; else if (TalentManager.CurrentSpec == WoWSpec.MageFire) allowMovingWhileCasting = spell.Name == "Scorch"; else if (Me.Class == WoWClass.Hunter) allowMovingWhileCasting = spell.Name == "Steady Shot" || (spell.Name == "Aimed Shot" && TalentManager.HasGlyph("Aimed Shot")) || spell.Name == "Cobra Shot"; else if (Me.Class == WoWClass.Warlock) allowMovingWhileCasting = (spell.Name == "Incinerate" || spell.Name == "Malefic Grasp" || spell.Name == "Shadow Bolt") && ClassSpecific.Warlock.Common.HasTalent(ClassSpecific.Warlock.WarlockTalents.KiljaedensCunning); // if (!allowMovingWhileCasting && Me.ZoneId == 5723) // allowMovingWhileCasting = Me.HasAura("Molten Feather"); if (!allowMovingWhileCasting) { allowMovingWhileCasting = HaveAllowMovingWhileCastingAura(spell); // we will atleast check spell cooldown... we may still end up wasting buff, but this reduces the chance if (!allowMovingWhileCasting && spell.CooldownTimeLeft == TimeSpan.Zero ) { bool castSuccess = CastBuffToAllowCastingWhileMoving(); if (castSuccess) allowMovingWhileCasting = HaveAllowMovingWhileCastingAura(); } } return allowMovingWhileCasting; }