Пример #1
0
        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);
        }
Пример #3
0
        public static async Task <bool> SyncedCast(SpellData spell, GameObject target)
        {
            if (spell.LevelAcquired > SyncedLevel)
            {
                return(false);
            }

            return(await spell.Cast(target));
        }
Пример #4
0
 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);
 }
Пример #5
0
        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);
            }
        }
Пример #6
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);
        }
Пример #7
0
        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);
        }
Пример #9
0
        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);
        }