public override async Task <bool> Execute(ObservableCollection <IGambitCondition> conditions) { if (SpellData == null) { return(false); } if (!Core.Me.HasTarget) { return(false); } var target = Core.Me.CurrentTarget; if (target == null) { return(false); } if (conditions.Any(condition => !condition.Check(target))) { return(false); } if (!await SpellData.Cast(target)) { return(false); } Casting.CastingGambit = true; return(true); }
public override async Task <bool> Execute(ObservableCollection <IGambitCondition> conditions) { if (SpellData == null) { return(false); } var target = Combat.Enemies.FirstOrDefault(x => conditions.All(z => z.Check(x))); if (target == null) { return(false); } if (!await SpellData.Cast(target)) { return(false); } // Dragon Specific for Mirage Dive tracking if (SpellData == Spells.MirageDive) { Utilities.Routines.Dragoon.MirageDives++; } Casting.CastingGambit = true; return(true); }
public static async Task <bool> SyncedCast(SpellData spell, GameObject target) { if (spell.LevelAcquired > SyncedLevel) { return(false); } return(await spell.Cast(target)); }
private static async Task <bool> EndCurrentSong(BardSong currentSong, SpellData nextSong) { if (BardSong.ArmysPaeon.Equals(currentSong) && BardSettings.Instance.EndArmysPaeonEarly && ActionResourceManager.Bard.Timer.TotalMilliseconds <= BardSettings.Instance.EndArmysPaeonEarlyWithXMilliSecondsRemaining || BardSong.MagesBallad.Equals(currentSong) && BardSettings.Instance.EndMagesBalladEarly && ActionResourceManager.Bard.Timer.TotalMilliseconds <= BardSettings.Instance.EndMagesBalladEarlyWithXMilliSecondsRemaining || BardSong.WanderersMinuet.Equals(currentSong) && BardSettings.Instance.EndWanderersMinuetEarly && ActionResourceManager.Bard.Timer.TotalMilliseconds <= BardSettings.Instance.EndWanderersMinuetEarlyWithXMilliSecondsRemaining ) { Logger.WriteInfo($@"[Cast {nextSong}] Time remaining for {ActionResourceManager.Bard.ActiveSong} : {ActionResourceManager.Bard.Timer.TotalMilliseconds}"); return(await nextSong.Cast(Core.Me.CurrentTarget)); } return(false); }
private void CastSpell(int spellIndex) { SpellData spellToCast = _spells[spellIndex - 1]; if (spellToCast.DamageToCast <= 0) { spellToCast.Cast(transform, GetSpellTarget(spellToCast.CastType)); spellToCast.DamageToCast = spellToCast.Cooldown; OnCooldownChanged?.Invoke(spellIndex - 1, spellToCast); ReduceCooldowns(0); } }
//Swiftcast the specified spell. Magitek nevers swiftcast as having been correctly cast, so this workaround is necessary. //This method first casts swiftcast, then the specified spell. It is compatible with SyncedCast. public static async Task <bool> Swiftcast(SpellData spell, GameObject target) { if (spell.LevelAcquired > SmUtil.SyncedLevel) { return(false); } if (await SmUtil.SyncedCast(Spells.Swiftcast, Core.Me)) { await Coroutine.Wait(2000, () => Core.Me.HasAura(Auras.Swiftcast)); await Coroutine.Wait(2000, () => ActionManager.CanCast(spell, target)); return(await spell.Cast(target)); } return(false); }
public override async Task <bool> Execute(ObservableCollection <IGambitCondition> conditions) { if (SpellData == null) { return(false); } if (conditions.Any(condition => !condition.Check(Core.Me))) { return(false); } if (!await SpellData.Cast(Core.Me)) { return(false); } Casting.CastingGambit = true; return(true); }
public override async Task <bool> Execute(ObservableCollection <IGambitCondition> conditions) { if (SpellData == null) { return(false); } var target = Group.CastableAlliesWithin30.FirstOrDefault(x => conditions.All(z => z.Check(x))); if (target == null) { return(false); } if (!await SpellData.Cast(target)) { return(false); } Casting.CastingGambit = true; return(true); }
public override async Task <bool> Execute(ObservableCollection <IGambitCondition> conditions) { if (SpellData == null) { return(false); } var target = GameObjectManager.GameObjects.FirstOrDefault(x => !x.CanAttack && x.Type != GameObjectType.Pc && conditions.All(z => z.Check(x))); if (target == null) { return(false); } if (!await SpellData.Cast(target)) { return(false); } Casting.CastingGambit = true; return(true); }