Example #1
0
        private async Task <bool> Raise()
        {
            if (Ultima.UltSettings.ConjurerRaise &&
                !Helpers.HealManager.Any(hm => hm.CurrentHealthPercent <= 70))
            {
                var target = Helpers.PartyMembers.FirstOrDefault(pm =>
                                                                 pm.IsDead &&
                                                                 pm.Type == GameObjectType.Pc &&
                                                                 !pm.HasAura(MySpells.Raise.Name));

                if (target != null &&
                    Actionmanager.CanCast(MySpells.Raise.Name, target))
                {
                    if (Actionmanager.CanCast(MySpells.CrossClass.Swiftcast.Name, Core.Player))
                    {
                        if (await MySpells.CrossClass.Swiftcast.Cast())
                        {
                            await Coroutine.Wait(3000, () => Actionmanager.CanCast(MySpells.Raise.Name, target) &&
                                                 Core.Player.HasAura(MySpells.CrossClass.Swiftcast.Name));
                        }
                    }
                    return(await MySpells.Raise.Cast(target));
                }
            }
            return(false);
        }
Example #2
0
 private async Task <bool> ShadowFlare()
 {
     if (!Core.Player.HasAura(MySpells.ShadowFlare.Name, true, 4000) &&
         Core.Player.CurrentTarget.HasAura(MySpells.Bio.Name, true, 4000))
     {
         if (Actionmanager.CanCast(MySpells.RuinII.Name, Core.Player.CurrentTarget) &&
             Actionmanager.CanCast(MySpells.CrossClass.Swiftcast.Name, Core.Player))
         {
             if (await MySpells.RuinII.Cast())
             {
                 await Coroutine.Wait(5000, () => Actionmanager.CanCast(MySpells.CrossClass.Swiftcast.Name, Core.Player));
             }
         }
         if (Actionmanager.CanCast(MySpells.CrossClass.Swiftcast.Name, Core.Player))
         {
             if (await MySpells.CrossClass.Swiftcast.Cast())
             {
                 await Coroutine.Wait(5000, () => Actionmanager.CanCast(MySpells.ShadowFlare.Name, Core.Player.CurrentTarget) &&
                                      Core.Player.HasAura(MySpells.CrossClass.Swiftcast.Name));
             }
         }
         if (await MySpells.ShadowFlare.Cast())
         {
             await Coroutine.Wait(3000, () => Core.Player.HasAura(MySpells.ShadowFlare.Name));
         }
         return(true);
     }
     return(false);
 }
Example #3
0
        private async Task <bool> FumaShuriken()
        {
            if (Ultima.UltSettings.NinjaFumaShuriken ||
                Core.Player.ClassLevel < MySpells.Raiton.Level)
            {
                if (Actionmanager.CanCast(MySpells.Ten.ID, Core.Player) &&
                    DataManager.GetSpellData(2240).Cooldown.TotalMilliseconds >= 1000 &&
                    Core.Player.HasTarget &&
                    Core.Player.CurrentTarget.Type == GameObjectType.BattleNpc &&
                    Core.Player.CurrentTarget.InLineOfSight() &&
                    Core.Player.Distance(Core.Player.CurrentTarget) <= 25 ||
                    Core.Player.HasAura("Mudra"))
                {
                    if (Ultima.LastSpell.ID != MySpells.Ten.ID &&
                        Ultima.LastSpell.ID != MySpells.Chi.ID &&
                        Ultima.LastSpell.ID != MySpells.Jin.ID)
                    {
                        if (await MySpells.Ten.Cast())
                        {
                            await Coroutine.Wait(2000, () => Actionmanager.CanCast(MySpells.Ten.ID, Core.Player));
                        }
                    }
                    if (Ultima.LastSpell.ID == MySpells.Ten.ID)
                    {
                        if (await MySpells.FumaShuriken.Cast())
                        {
                            await Coroutine.Wait(2000, () => !Core.Player.HasAura("Mudra"));

                            return(true);
                        }
                    }
                }
            }
            return(false);
        }
Example #4
0
 private async Task <bool> RuinII()
 {
     if (MovementManager.IsMoving)
     {
         return(await MySpells.RuinII.Cast());
     }
     if (Core.Player.CurrentManaPercent > 40)
     {
         if (Actionmanager.CanCast(MySpells.Aetherflow.Name, Core.Player) &&
             !Core.Player.HasAura(MySpells.Aetherflow.Name) ||
             Actionmanager.CanCast(MySpells.EnergyDrain.Name, Core.Player.CurrentTarget) &&
             Core.Player.CurrentManaPercent <= 90 &&
             Helpers.EnemiesNearTarget(8) <= 1 &&
             Ultima.UltSettings.SmartTarget ||
             Actionmanager.CanCast(MySpells.EnergyDrain.Name, Core.Player.CurrentTarget) &&
             Core.Player.CurrentManaPercent <= 90 &&
             Ultima.UltSettings.SingleTarget ||
             Actionmanager.CanCast(MySpells.Bane.Name, Core.Player.CurrentTarget) &&
             !Ultima.UltSettings.SingleTarget &&
             Helpers.EnemiesNearTarget(8) > 1 &&
             Core.Player.CurrentTarget.HasAura(MySpells.BioII.Name, true, 8000) &&
             Core.Player.CurrentTarget.HasAura(MySpells.Miasma.Name, true, 8000) &&
             Core.Player.CurrentTarget.HasAura(MySpells.Bio.Name, true, 5000) ||
             Actionmanager.CanCast(MySpells.Rouse.Name, Core.Player))
         {
             return(await MySpells.RuinII.Cast());
         }
     }
     return(false);
 }
Example #5
0
        protected override async Task <bool> CustomLogic()
        {
            if (Target != null)
            {
                await MoveAndStop(Target.Location, Distance, "Moving to " + Target.Name, true);

                if (InPosition(Target.Location, Distance))
                {
                    if (Target.IsTargetable && Target.IsVisible)
                    {
                        Target.Face();
                        Log("Using {0} on {1}.", Spell.LocalizedName, Target.Name);
                        StatusText = "Using " + Spell.LocalizedName + " on " + Target.Name;

                        if (!Actionmanager.DoAction(Spell.Id, Target) && Actionmanager.CanCast(Spell, Target))
                        {
                            Actionmanager.DoAction(Spell.Id, Target);
                        }
                        else
                        if (!Actionmanager.DoActionLocation(Spell.Id, Target.Location) && Actionmanager.CanCastLocation(Spell, Target.Location))
                        {
                            Actionmanager.DoActionLocation(Spell.Id, Target.Location);
                        }

                        await ShortCircuit(Target, PersistentObject, IgnoreCombat, 5000);
                    }
                }
            }

            return(false);
        }
Example #6
0
 private async Task <bool> Flare()
 {
     if (Actionmanager.HasSpell(MySpells.Flare.Name) &&
         AstralAura &&
         Actionmanager.CanCast(MySpells.Convert.Name, Core.Player))
     {
         if (Core.Player.CurrentMana <= 904 ||
             Ultima.LastSpell.Name == MySpells.FireII.Name &&
             Core.Player.CurrentMana <= 1116)
         {
             if (Actionmanager.CanCast(MySpells.Swiftcast.Name, Core.Player) ||
                 Core.Player.HasAura(MySpells.Swiftcast.Name))
             {
                 if (await MySpells.Swiftcast.Cast())
                 {
                     await Coroutine.Wait(3000, () => Actionmanager.CanCast(MySpells.Flare.Name, Core.Player.CurrentTarget));
                 }
                 if (await MySpells.Flare.Cast())
                 {
                     await Coroutine.Wait(3000, () => Actionmanager.CanCast(MySpells.Convert.Name, Core.Player));
                 }
                 if (await MySpells.Convert.Cast())
                 {
                     await Coroutine.Wait(3000, () => !Actionmanager.CanCast(MySpells.Convert.Name, Core.Player));
                 }
                 return(true);
             }
         }
     }
     return(false);
 }
Example #7
0
 private async Task <bool> Ninjutsu()
 {
     if (Actionmanager.CanCast(MySpells.Ten.ID, Core.Player) &&
         Core.Player.HasAura("Mudra"))
     {
         return(await MySpells.Ninjutsu.Cast());
     }
     return(false);
 }
Example #8
0
 private async Task <bool> PowerSurge()
 {
     if (Ultima.UltSettings.DragoonPowerSurge &&
         Actionmanager.CanCast(MySpells.Jump.Name, Core.Player.CurrentTarget))
     {
         return(await MySpells.PowerSurge.Cast());
     }
     return(false);
 }
Example #9
0
 private async Task <bool> Enkindle()
 {
     if (!Actionmanager.CanCast(MySpells.Rouse.Name, Core.Player) &&
         !Actionmanager.CanCast(MySpells.Spur.Name, Core.Player))
     {
         return(await MySpells.Enkindle.Cast());
     }
     return(false);
 }
Example #10
0
 private async Task <bool> AeolianEdge()
 {
     if (Actionmanager.LastSpell.Name == MySpells.GustSlash.Name)
     {
         if (await MySpells.Duality.Cast())
         {
             await Coroutine.Wait(3000, () => Actionmanager.CanCast(MySpells.AeolianEdge.Name, Core.Player.CurrentTarget));
         }
         return(await MySpells.AeolianEdge.Cast());
     }
     return(false);
 }
Example #11
0
 private async Task <bool> FullThrust()
 {
     if (Actionmanager.LastSpell.Name == MySpells.VorpalThrust.Name)
     {
         if (await MySpells.LifeSurge.Cast())
         {
             await Coroutine.Wait(3000, () => Actionmanager.CanCast(MySpells.FullThrust.Name, Core.Player.CurrentTarget));
         }
         return(await MySpells.FullThrust.Cast());
     }
     return(false);
 }
Example #12
0
 private async Task <bool> Swiftcast()
 {
     if (AstralAura)
     {
         if (!Actionmanager.CanCast(MySpells.Convert.Name, Core.Player) &&
             !LowMP)
         {
             return(await MySpells.Swiftcast.Cast());
         }
     }
     return(false);
 }
Example #13
0
        private async Task <bool> Huton()
        {
            if (Actionmanager.CanCast(MySpells.Jin.ID, Core.Player))
            {
                if (!Core.Player.HasAura(MySpells.Huton.Name) &&
                    DataManager.GetSpellData(2240).Cooldown.TotalMilliseconds <= DataManager.GetSpellData(2240).AdjustedCooldown.TotalMilliseconds - 1000 ||
                    !Actionmanager.HasSpell(MySpells.ArmorCrush.Name) &&
                    !Core.Player.HasAura(MySpells.Huton.Name, true, 20000) &&
                    DataManager.GetSpellData(2240).Cooldown.TotalMilliseconds <= DataManager.GetSpellData(2240).AdjustedCooldown.TotalMilliseconds - 1000 ||
                    Core.Player.HasAura("Mudra"))
                {
                    if (!Actionmanager.CanCast(MySpells.Ninjutsu.ID, Core.Player) &&
                        Ultima.LastSpell.ID != MySpells.Ten.ID &&
                        Ultima.LastSpell.ID != MySpells.Jin.ID &&
                        Ultima.LastSpell.ID != MySpells.Ninjutsu.ID)
                    {
                        if (await MySpells.Chi.Cast())
                        {
                            await Coroutine.Wait(2000, () => Actionmanager.CanCast(MySpells.Ninjutsu.ID, Core.Player));
                        }
                    }
                    if (Actionmanager.CanCast(MySpells.Ninjutsu.ID, Core.Player) &&
                        Ultima.LastSpell.ID == MySpells.Chi.ID)
                    {
                        if (await MySpells.Jin.Cast())
                        {
                            await Coroutine.Wait(2000, () => Actionmanager.CanCast(MySpells.Jin.ID, Core.Player));
                        }
                    }
                    if (Ultima.LastSpell.ID == MySpells.Jin.ID)
                    {
                        if (await MySpells.Ten.Cast())
                        {
                            await Coroutine.Wait(2000, () => Actionmanager.CanCast(MySpells.Ten.ID, Core.Player));
                        }
                    }
                    if (Ultima.LastSpell.ID == MySpells.Ten.ID ||
                        Ultima.LastSpell.ID == MySpells.Huton.ID)
                    {
                        if (await MySpells.Huton.Cast())
                        {
                            await Coroutine.Wait(2000, () => !Core.Player.HasAura("Mudra"));

                            return(true);
                        }
                    }
                }
            }
            return(false);
        }
Example #14
0
        private async Task <bool> Doton()
        {
            if (Actionmanager.CanCast(MySpells.Jin.ID, Core.Player) &&
                DataManager.GetSpellData(2240).Cooldown.TotalMilliseconds <= DataManager.GetSpellData(2240).AdjustedCooldown.TotalMilliseconds - 1000 &&
                Core.Player.HasAura(MySpells.Kassatsu.Name) ||
                Core.Player.HasAura("Mudra"))
            {
                if (Ultima.UltSettings.SmartTarget &&
                    Helpers.EnemiesNearPlayer(5) > 2 ||
                    Ultima.UltSettings.MultiTarget)
                {
                    if (!Actionmanager.CanCast(MySpells.Ninjutsu.ID, Core.Player) &&
                        Ultima.LastSpell.ID != MySpells.Chi.ID &&
                        Ultima.LastSpell.ID != MySpells.Jin.ID &&
                        Ultima.LastSpell.ID != MySpells.Ninjutsu.ID)
                    {
                        if (await MySpells.Ten.Cast())
                        {
                            await Coroutine.Wait(2000, () => Actionmanager.CanCast(MySpells.Ninjutsu.ID, Core.Player));
                        }
                    }
                    if (Actionmanager.CanCast(MySpells.Ninjutsu.ID, Core.Player) &&
                        Ultima.LastSpell.ID == MySpells.Ten.ID)
                    {
                        if (await MySpells.Jin.Cast())
                        {
                            await Coroutine.Wait(2000, () => Actionmanager.CanCast(MySpells.Jin.ID, Core.Player));
                        }
                    }
                    if (Ultima.LastSpell.ID == MySpells.Jin.ID)
                    {
                        if (await MySpells.Chi.Cast())
                        {
                            await Coroutine.Wait(2000, () => Actionmanager.CanCast(MySpells.Chi.ID, Core.Player));
                        }
                    }
                    if (Ultima.LastSpell.ID == MySpells.Chi.ID ||
                        Ultima.LastSpell.ID == MySpells.Doton.ID)
                    {
                        if (await MySpells.Doton.Cast())
                        {
                            await Coroutine.Wait(2000, () => !Core.Player.HasAura("Mudra"));

                            return(true);
                        }
                    }
                }
            }
            return(false);
        }
Example #15
0
        private async Task <bool> Suiton()
        {
            if (Actionmanager.CanCast(MySpells.Jin.ID, Core.Player) &&
                DataManager.GetSpellData(2240).Cooldown.TotalMilliseconds <= DataManager.GetSpellData(2240).AdjustedCooldown.TotalMilliseconds - 1000 &&
                DataManager.GetSpellData(MySpells.TrickAttack.ID).Cooldown.TotalMilliseconds == 0 &&
                Core.Player.TargetDistance(15, false) &&
                Core.Player.CurrentTarget.CanAttack &&
                !Core.Player.CurrentTarget.HasAura(MySpells.TrickAttack.Name, false, 3000) ||
                Core.Player.HasAura("Mudra"))
            {
                if (!Actionmanager.CanCast(MySpells.Ninjutsu.ID, Core.Player) &&
                    Ultima.LastSpell.ID != MySpells.Chi.ID &&
                    Ultima.LastSpell.ID != MySpells.Jin.ID &&
                    Ultima.LastSpell.ID != MySpells.Ninjutsu.ID)

                {
                    if (await MySpells.Ten.Cast())
                    {
                        await Coroutine.Wait(2000, () => Actionmanager.CanCast(MySpells.Ninjutsu.ID, Core.Player));
                    }
                }
                if (Actionmanager.CanCast(MySpells.Ninjutsu.ID, Core.Player) &&
                    Ultima.LastSpell.ID == MySpells.Ten.ID)
                {
                    if (await MySpells.Chi.Cast())
                    {
                        await Coroutine.Wait(2000, () => Actionmanager.CanCast(MySpells.Chi.ID, Core.Player));
                    }
                }
                if (Ultima.LastSpell.ID == MySpells.Chi.ID)
                {
                    if (await MySpells.Jin.Cast())
                    {
                        await Coroutine.Wait(2000, () => Actionmanager.CanCast(MySpells.Jin.ID, Core.Player));
                    }
                }
                if (Ultima.LastSpell.ID == MySpells.Jin.ID ||
                    Ultima.LastSpell.ID == MySpells.Suiton.ID)
                {
                    if (await MySpells.Suiton.Cast())
                    {
                        await Coroutine.Wait(2000, () => !Core.Player.HasAura("Mudra"));

                        return(true);
                    }
                }
            }
            return(false);
        }
Example #16
0
 private async Task <bool> CleanShot()
 {
     if (Core.Player.HasAura(857))
     {
         if (Core.Player.HasAura(862))
         {
             if (await MySpells.Reassemble.Cast())
             {
                 await Coroutine.Wait(3000, () => Actionmanager.CanCast(MySpells.CleanShot.Name, Core.Player.CurrentTarget));
             }
         }
         return(await MySpells.CleanShot.Cast());
     }
     return(false);
 }
Example #17
0
 private async Task <bool> Kassatsu()
 {
     if (Core.Player.CurrentTarget.HasAura("Vulnerability Up") ||
         Ultima.UltSettings.SmartTarget &&
         Helpers.EnemiesNearPlayer(5) > 2 ||
         Ultima.UltSettings.MultiTarget ||
         BotManager.Current.IsAutonomous &&
         !Actionmanager.CanCast(MySpells.Ten.ID, Core.Player) &&
         DataManager.GetSpellData(MySpells.SneakAttack.ID).Cooldown.TotalMilliseconds > 5 &&
         Core.Player.HasAura(MySpells.Huton.Name, true, 20000))
     {
         return(await MySpells.Kassatsu.Cast());
     }
     return(false);
 }
Example #18
0
        private async Task <bool> PerfectBalance()
        {
            if (Ultima.UltSettings.MonkPerfectBalance &&
                Actionmanager.CanCast(MySpells.Bootshine.Name, Core.Player.CurrentTarget))
            {
                if (await MySpells.PerfectBalance.Cast())
                {
                    await Coroutine.Wait(5000, () => Core.Player.HasAura(MySpells.PerfectBalance.Name));

                    return(true);
                }
                return(false);
            }
            return(false);
        }
Example #19
0
        private async Task <bool> Suiton()
        {
            if (Actionmanager.CanCast(MySpells.Jin.ID, Core.Player) &&
                DataManager.GetSpellData(2240).Cooldown.TotalMilliseconds >= 1000 &&
                DataManager.GetSpellData(MySpells.TrickAttack.ID).Cooldown.TotalMilliseconds == 0 &&
                Core.Player.HasTarget &&
                !Core.Player.CurrentTarget.HasAura(MySpells.TrickAttack.Name, true, 3000) &&
                !Core.Player.CurrentTarget.HasAura(MySpells.TrickAttack.Name, false, 3000) &&
                Core.Player.CurrentTarget.Type == GameObjectType.BattleNpc &&
                Core.Player.CurrentTarget.IsBehind &&
                Core.Player.Distance(Core.Player.CurrentTarget) <= (3 + Core.Player.CombatReach + Core.Player.CurrentTarget.CombatReach))
            {
                if (Ultima.LastSpell.ID != MySpells.Ten.ID &&
                    Ultima.LastSpell.ID != MySpells.Chi.ID &&
                    Ultima.LastSpell.ID != MySpells.Jin.ID)
                {
                    if (await MySpells.Ten.Cast())
                    {
                        await Coroutine.Wait(2000, () => Actionmanager.CanCast(MySpells.Ten.ID, Core.Player));
                    }
                }
                if (Ultima.LastSpell.ID == MySpells.Ten.ID)
                {
                    if (await MySpells.Chi.Cast())
                    {
                        await Coroutine.Wait(2000, () => Actionmanager.CanCast(MySpells.Chi.ID, Core.Player));
                    }
                }
                if (Ultima.LastSpell.ID == MySpells.Chi.ID)
                {
                    if (await MySpells.Jin.Cast())
                    {
                        await Coroutine.Wait(2000, () => Actionmanager.CanCast(MySpells.Jin.ID, Core.Player));
                    }
                }
                if (Ultima.LastSpell.ID == MySpells.Jin.ID)
                {
                    if (await MySpells.Suiton.Cast())
                    {
                        await Coroutine.Wait(2000, () => !Core.Player.HasAura("Mudra"));

                        return(true);
                    }
                }
            }
            return(false);
        }
Example #20
0
 private async Task <bool> BloodForBlood()
 {
     if (Ultima.UltSettings.ArcherBloodForBlood)
     {
         if (Actionmanager.HasSpell(MySpells.Barrage.Name) &&
             Actionmanager.CanCast(MySpells.HawksEye.Name, Core.Player) &&
             Actionmanager.CanCast(MySpells.Barrage.Name, Core.Player))
         {
             return(await MySpells.CrossClass.BloodForBlood.Cast());
         }
         if (!Actionmanager.HasSpell(MySpells.Barrage.Name))
         {
             return(await MySpells.CrossClass.BloodForBlood.Cast());
         }
     }
     return(false);
 }
Example #21
0
 private async Task <bool> EmpyrealArrow()
 {
     if (Core.Player.HasAura(MySpells.StraightShot.Name, true, 4000) &&
         Core.Player.CurrentTarget.HasAura(MySpells.VenomousBite.Name, true, 4000) &&
         Core.Player.CurrentTarget.HasAura(MySpells.Windbite.Name, true, 4000) &&
         DataManager.GetSpellData(97).Cooldown.TotalMilliseconds <= 700)
     {
         if (Actionmanager.CanCast(MySpells.EmpyrealArrow.Name, Core.Player.CurrentTarget))
         {
             if (await MySpells.Barrage.Cast())
             {
                 await Coroutine.Wait(3000, () => Actionmanager.CanCast(MySpells.EmpyrealArrow.Name, Core.Player.CurrentTarget));
             }
         }
         return(await MySpells.EmpyrealArrow.Cast());
     }
     return(false);
 }
Example #22
0
        private async Task <bool> Huton()
        {
            if (Actionmanager.CanCast(MySpells.Jin.ID, Core.Player))
            {
                if (!Core.Player.HasAura("Huton") ||
                    !Core.Player.HasAura("Huton", true, 20000) &&
                    DataManager.GetSpellData(2240).Cooldown.TotalMilliseconds >= 1000)
                {
                    if (Ultima.LastSpell.ID != MySpells.Ten.ID &&
                        Ultima.LastSpell.ID != MySpells.Chi.ID &&
                        Ultima.LastSpell.ID != MySpells.Jin.ID)
                    {
                    }
                    if (await MySpells.Chi.Cast())
                    {
                        await Coroutine.Wait(2000, () => Actionmanager.CanCast(MySpells.Chi.ID, Core.Player));
                    }
                    if (Ultima.LastSpell.ID == MySpells.Chi.ID)
                    {
                        if (await MySpells.Jin.Cast())
                        {
                            await Coroutine.Wait(2000, () => Actionmanager.CanCast(MySpells.Jin.ID, Core.Player));
                        }
                    }
                    if (Ultima.LastSpell.ID == MySpells.Jin.ID)
                    {
                        if (await MySpells.Ten.Cast())
                        {
                            await Coroutine.Wait(2000, () => Actionmanager.CanCast(MySpells.Ten.ID, Core.Player));
                        }
                    }
                    if (Ultima.LastSpell.ID == MySpells.Ten.ID)
                    {
                        if (await MySpells.Huton.Cast())
                        {
                            await Coroutine.Wait(2000, () => !Core.Player.HasAura("Mudra"));

                            return(true);
                        }
                    }
                }
            }
            return(false);
        }
Example #23
0
        private async Task <bool> Katon()
        {
            if (Actionmanager.CanCast(MySpells.Chi.ID, Core.Player) &&
                DataManager.GetSpellData(2240).Cooldown.TotalMilliseconds <= DataManager.GetSpellData(2240).AdjustedCooldown.TotalMilliseconds - 1000 &&
                Core.Player.TargetDistance(15, false) &&
                Core.Player.CurrentTarget.CanAttack &&
                Core.Player.CurrentTarget.InLineOfSight() ||
                Core.Player.HasAura("Mudra"))
            {
                if (Helpers.EnemiesNearTarget(5) > 2 ||
                    Ultima.UltSettings.MultiTarget)
                {
                    if (!Actionmanager.CanCast(MySpells.Ninjutsu.ID, Core.Player) &&
                        Ultima.LastSpell.ID != MySpells.Ten.ID &&
                        Ultima.LastSpell.ID != MySpells.Jin.ID &&
                        Ultima.LastSpell.ID != MySpells.Ninjutsu.ID)
                    {
                        if (await MySpells.Chi.Cast())
                        {
                            await Coroutine.Wait(2000, () => Actionmanager.CanCast(MySpells.Ninjutsu.ID, Core.Player));
                        }
                    }
                    if (Actionmanager.CanCast(MySpells.Ninjutsu.ID, Core.Player) &&
                        Ultima.LastSpell.ID == MySpells.Chi.ID)
                    {
                        if (await MySpells.Ten.Cast())
                        {
                            await Coroutine.Wait(2000, () => Actionmanager.CanCast(MySpells.Ten.ID, Core.Player));
                        }
                    }
                    if (Ultima.LastSpell.ID == MySpells.Ten.ID ||
                        Ultima.LastSpell.ID == MySpells.Katon.ID)
                    {
                        if (await MySpells.Katon.Cast())
                        {
                            await Coroutine.Wait(2000, () => !Core.Player.HasAura("Mudra"));

                            return(true);
                        }
                    }
                }
            }
            return(false);
        }
Example #24
0
        public override async Task <bool> ExecuteRotation(ExGatherTag tag)
        {
            if (Core.Player.CurrentGP < 400 || tag.GatherItemIsFallback)
            {
                return(true);
            }

            await Wait();

            var ward = WardSkills.FirstOrDefault(w => Actionmanager.CanCast(w, Core.Player));

            if (ward > 0)
            {
                Actionmanager.DoAction(ward, Core.Player);
                await IncreaseChance(tag);
            }

            return(true);
        }
Example #25
0
 private async Task <bool> RuinII()
 {
     if (MovementManager.IsMoving)
     {
         return(await MySpells.RuinII.Cast());
     }
     if (Core.Player.CurrentManaPercent > 40)
     {
         if (Actionmanager.CanCast(MySpells.Aetherflow.Name, Core.Player) &&
             !Core.Player.HasAura(MySpells.Aetherflow.Name) ||
             Actionmanager.CanCast(MySpells.EnergyDrain.Name, Core.Player.CurrentTarget) &&
             Core.Player.CurrentManaPercent <= 90 ||
             Actionmanager.CanCast(MySpells.Rouse.Name, Core.Player))
         {
             return(await MySpells.RuinII.Cast());
         }
     }
     return(false);
 }
Example #26
0
 private async Task <bool> Souleater()
 {
     if (Actionmanager.LastSpell.Name == MySpells.SyphonStrike.Name)
     {
         if (Ultima.UltSettings.DarkKnightDarkArts &&
             !Core.Player.HasAura(MySpells.DarkArts.Name) &&
             Core.Player.TargetDistance(3, false) &&
             Core.Player.CurrentManaPercent >= 50 &&
             (!Actionmanager.HasSpell(MySpells.Delirium.Name) ||
              Core.Player.CurrentTarget.HasAura(MySpells.Delirium.Name, false, 4000) ||
              Core.Player.CurrentTarget.HasAura("Dragon Kick")))
         {
             if (await MySpells.DarkArts.Cast())
             {
                 await Coroutine.Wait(3000, () => Actionmanager.CanCast(MySpells.Souleater.Name, Core.Player.CurrentTarget));
             }
         }
         return(await MySpells.Souleater.Cast());
     }
     return(false);
 }
Example #27
0
        private async Task <bool> BlizzardIII()
        {
            if (LowMP)
            {
                if (AstralAura)
                {
                    if (!Actionmanager.HasSpell(MySpells.Flare.Name))
                    {
                        if (await MySpells.BlizzardIII.Cast())
                        {
                            await Coroutine.Wait(5000, () => UmbralAura);

                            return(true);
                        }
                    }
                    if (!Actionmanager.CanCast(MySpells.Swiftcast.Name, Core.Player) ||
                        !Actionmanager.CanCast(MySpells.Convert.Name, Core.Player))
                    {
                        if (await MySpells.BlizzardIII.Cast())
                        {
                            await Coroutine.Wait(5000, () => UmbralAura);

                            return(true);
                        }
                    }
                }
                if (!AstralAura &&
                    !UmbralAura)
                {
                    if (await MySpells.BlizzardIII.Cast())
                    {
                        await Coroutine.Wait(5000, () => UmbralAura);

                        return(true);
                    }
                }
            }
            return(false);
        }
Example #28
0
        private async Task <bool> FumaShuriken()
        {
            if (Ultima.UltSettings.NinjaFumaShuriken ||
                Core.Player.ClassLevel < MySpells.Raiton.Level)
            {
                if (Actionmanager.CanCast(MySpells.Ten.ID, Core.Player) &&
                    DataManager.GetSpellData(2240).Cooldown.TotalMilliseconds <= DataManager.GetSpellData(2240).AdjustedCooldown.TotalMilliseconds - 1000 &&
                    Core.Player.TargetDistance(25, false) &&
                    Core.Player.CurrentTarget.CanAttack &&
                    Core.Player.CurrentTarget.InLineOfSight() ||
                    Core.Player.HasAura("Mudra"))
                {
                    if (!Actionmanager.CanCast(MySpells.Ninjutsu.ID, Core.Player) &&
                        Ultima.LastSpell.ID != MySpells.Chi.ID &&
                        Ultima.LastSpell.ID != MySpells.Jin.ID &&
                        Ultima.LastSpell.ID != MySpells.Ninjutsu.ID)
                    {
                        if (await MySpells.Ten.Cast())
                        {
                            await Coroutine.Wait(2000, () => Actionmanager.CanCast(MySpells.Ninjutsu.ID, Core.Player));
                        }
                    }
                    if (Actionmanager.CanCast(MySpells.Ninjutsu.ID, Core.Player) &&
                        (Ultima.LastSpell.ID == MySpells.Ten.ID ||
                         Ultima.LastSpell.ID == MySpells.FumaShuriken.ID))
                    {
                        if (await MySpells.FumaShuriken.Cast())
                        {
                            await Coroutine.Wait(2000, () => !Core.Player.HasAura("Mudra"));

                            return(true);
                        }
                    }
                }
            }
            return(false);
        }
Example #29
0
        public async Task <bool> Cast(GameObject target = null)
        {
            #region Target
            if (target == null)
            {
                switch (CastType)
                {
                case CastType.TargetLocation:
                    if (!Core.Player.HasTarget)
                    {
                        return(false);
                    }
                    target = Core.Player.CurrentTarget;
                    break;

                case CastType.Target:
                    if (!Core.Player.HasTarget)
                    {
                        return(false);
                    }
                    target = Core.Player.CurrentTarget;
                    break;

                default:
                    target = Core.Player;
                    break;
                }
            }
            #endregion

            #region Recent Spell Check
            RecentSpell.RemoveAll(t => DateTime.UtcNow > t);

            if (RecentSpell.ContainsKey(target.ObjectId.ToString("X") + "-" + Name))
            {
                return(false);
            }
            #endregion

            #region Bard Song Check

            if (Core.Player.CurrentJob == ClassJobType.Bard &&
                SpellType == SpellType.Buff)
            {
                if (Core.Player.HasAura(135, true) ||
                    Core.Player.HasAura(137, true))
                {
                    return(false);
                }
            }

            #endregion

            #region AoE Check

            if (SpellType == SpellType.AoE &&
                Ultima.UltSettings.SmartTarget)
            {
                var EnemyCount = Helpers.EnemyUnit.Count(eu => eu.Distance2D(target) - eu.CombatReach - target.CombatReach <= DataManager.GetSpellData(ID).Radius);

                switch (Core.Player.CurrentJob)
                {
                case ClassJobType.Arcanist:
                case ClassJobType.Scholar:
                case ClassJobType.Summoner:
                    if (EnemyCount < 2)
                    {
                        return(false);
                    }
                    break;

                case ClassJobType.Archer:
                case ClassJobType.Bard:
                    if (EnemyCount < 3)
                    {
                        return(false);
                    }
                    break;

                case ClassJobType.Astrologian:
                    if (EnemyCount < 3)
                    {
                        return(false);
                    }
                    break;

                case ClassJobType.Conjurer:
                case ClassJobType.WhiteMage:
                    if (EnemyCount < 3)
                    {
                        return(false);
                    }
                    break;

                case ClassJobType.DarkKnight:
                    if (EnemyCount < 3)
                    {
                        return(false);
                    }
                    break;

                case ClassJobType.Gladiator:
                case ClassJobType.Paladin:
                    if (EnemyCount < 3)
                    {
                        return(false);
                    }
                    break;

                case ClassJobType.Lancer:
                case ClassJobType.Dragoon:
                    if (EnemyCount < 3)
                    {
                        return(false);
                    }
                    break;

                case ClassJobType.Machinist:
                    if (EnemyCount < 3)
                    {
                        return(false);
                    }
                    break;

                case ClassJobType.Marauder:
                case ClassJobType.Warrior:
                    if (EnemyCount < 3)
                    {
                        return(false);
                    }
                    break;

                case ClassJobType.Pugilist:
                case ClassJobType.Monk:
                    if (EnemyCount < 3)
                    {
                        return(false);
                    }
                    break;

                case ClassJobType.Rogue:
                case ClassJobType.Ninja:
                    if (EnemyCount < 3)
                    {
                        return(false);
                    }
                    break;

                case ClassJobType.Thaumaturge:
                case ClassJobType.BlackMage:
                    if (EnemyCount < 3)
                    {
                        return(false);
                    }
                    break;
                }
            }

            #region Cone Check

            if (ID == 106 || ID == 41 || ID == 70)
            {
                if (!Helpers.InView(Core.Player.Location, Core.Player.Heading, target.Location))
                {
                    return(false);
                }
            }

            #endregion

            #region Rectangle Check

            if (ID == 86)
            {
                if (!Core.Player.IsFacing(target))
                {
                    return(false);
                }
            }

            #endregion

            #endregion

            #region Pet Exception
            if (SpellType == SpellType.Pet)
            {
                if (Core.Player.Pet == null)
                {
                    return(false);
                }

                if (Pet.PetMode != PetMode.Obey)
                {
                    if (!await Coroutine.Wait(1000, () => Pet.DoAction("Obey", Core.Player)))
                    {
                        return(false);
                    }
                    Logging.Write(Colors.OrangeRed, @"[Ultima] Ability: Pet Obey");
                }

                #region IsMounted Check

                if (Core.Player.IsMounted)
                {
                    return(false);
                }

                #endregion

                #region CanCast

                if (!Pet.CanCast(Name, target))
                {
                    return(false);
                }

                #endregion

                #region DoAction

                if (!await Coroutine.Wait(5000, () => Pet.DoAction(Name, target)))
                {
                    return(false);
                }

                #endregion

                Ultima.LastSpell = this;

                #region Recent Spell Add
                var key = target.ObjectId.ToString("X") + "-" + Name;
                var val = DateTime.UtcNow + DataManager.GetSpellData(Name).AdjustedCastTime + TimeSpan.FromSeconds(5);
                RecentSpell.Add(key, val);
                #endregion

                Logging.Write(Colors.OrangeRed, @"[Ultima] Ability: " + Name);

                return(true);
            }
            #endregion

            #region Card Exception

            if (SpellType == SpellType.Card)
            {
                if (!await Coroutine.Wait(1000, () => Actionmanager.DoAction(ID, target)))
                {
                    return(false);
                }
                Ultima.LastSpell = this;
                #region Recent Spell Add
                var key = target.ObjectId.ToString("X") + "-" + Name;
                var val = DateTime.UtcNow + DataManager.GetSpellData(3590).AdjustedCastTime + TimeSpan.FromSeconds(5);
                RecentSpell.Add(key, val);
                #endregion
                Logging.Write(Colors.OrangeRed, @"[Ultima] Ability: " + Name);
                return(true);
            }

            #endregion

            #region CanAttack Check

            if (!target.CanAttack &&
                CastType != CastType.Self)
            {
                switch (SpellType)
                {
                case SpellType.Damage:
                case SpellType.DoT:
                case SpellType.Movement:
                case SpellType.Cooldown:
                case SpellType.Interrupt:
                case SpellType.Execute:
                case SpellType.Knockback:
                case SpellType.Debuff:
                case SpellType.Flank:
                case SpellType.Behind:
                    return(false);
                }
            }

            #endregion

            #region Ninjutsu Exception

            if (SpellType == SpellType.Ninjutsu ||
                SpellType == SpellType.Mudra)
            {
                #region Player Movement

                if (BotManager.Current.IsAutonomous)
                {
                    switch (Actionmanager.InSpellInRangeLOS(2247, target))
                    {
                    case SpellRangeCheck.ErrorNotInLineOfSight:
                        Navigator.MoveTo(target.Location);
                        return(false);

                    case SpellRangeCheck.ErrorNotInRange:
                        Navigator.MoveTo(target.Location);
                        return(false);

                    case SpellRangeCheck.ErrorNotInFront:
                        if (!target.InLineOfSight())
                        {
                            Navigator.MoveTo(target.Location);
                            return(false);
                        }
                        target.Face();
                        return(false);

                    case SpellRangeCheck.Success:
                        if (MovementManager.IsMoving)
                        {
                            Navigator.PlayerMover.MoveStop();
                        }
                        break;
                    }
                }

                #endregion

                #region IsMounted Check

                if (Core.Player.IsMounted)
                {
                    return(false);
                }

                #endregion

                #region CanCast

                if (Ultima.UltSettings.QueueSpells)
                {
                    if (!Actionmanager.CanCastOrQueue(DataManager.GetSpellData(ID), target))
                    {
                        return(false);
                    }
                }
                else
                {
                    if (!Actionmanager.CanCast(ID, target))
                    {
                        return(false);
                    }
                }

                #endregion

                #region Wait For Animation

                if (Ultima.LastSpell.ID != null &&
                    Ultima.LastSpell.SpellType != SpellType.Ninjutsu &&
                    Ultima.LastSpell.SpellType != SpellType.Mudra)
                {
                    await Coroutine.Wait(1000, () => DataManager.GetSpellData(Ultima.LastSpell.ID).Cooldown.TotalMilliseconds <= DataManager.GetSpellData(Ultima.LastSpell.ID).AdjustedCooldown.TotalMilliseconds - 1000);
                }

                #endregion

                #region DoAction

                if (!await Coroutine.Wait(1000, () => Actionmanager.DoAction(ID, target)))
                {
                    return(false);
                }

                #endregion

                #region Wait For Cast Completion

                await Coroutine.Wait(2000, () => !Actionmanager.CanCast(ID, target));

                #endregion

                Ultima.LastSpell = this;

                #region Recent Spell Add

                if (SpellType == SpellType.Mudra)
                {
                    var key = target.ObjectId.ToString("X") + "-" + Name;
                    var val = DateTime.UtcNow + DataManager.GetSpellData(ID).AdjustedCastTime + TimeSpan.FromSeconds(1);
                    RecentSpell.Add(key, val);
                }

                #endregion

                Logging.Write(Colors.OrangeRed, @"[Ultima] Ability: " + Name);

                return(true);
            }

            #endregion

            #region HasSpell Check

            if (!Actionmanager.HasSpell(ID))
            {
                return(false);
            }

            #endregion

            #region Player Movement

            if (BotManager.Current.IsAutonomous)
            {
                switch (Actionmanager.InSpellInRangeLOS(ID, target))
                {
                case SpellRangeCheck.ErrorNotInLineOfSight:
                    Navigator.MoveTo(target.Location);
                    return(false);

                case SpellRangeCheck.ErrorNotInRange:
                    Navigator.MoveTo(target.Location);
                    return(false);

                case SpellRangeCheck.ErrorNotInFront:
                    if (!target.InLineOfSight())
                    {
                        Navigator.MoveTo(target.Location);
                        return(false);
                    }
                    target.Face();
                    return(false);

                case SpellRangeCheck.Success:
                    if (CastType == CastType.TargetLocation &&
                        Core.Player.Distance2D(target) + Core.Player.CombatReach + target.CombatReach > 25)
                    {
                        Navigator.MoveTo(target.Location);
                        await Coroutine.Wait(1000, () => Core.Player.Distance2D(target) + Core.Player.CombatReach + target.CombatReach <= 25);

                        return(false);
                    }
                    Navigator.PlayerMover.MoveStop();
                    break;
                }

                if (Core.Player.HasTarget &&
                    !MovementManager.IsMoving &&
                    Core.Player.IsMounted)
                {
                    Logging.Write(Colors.Yellow, @"[Ultima] Dismounting...");
                    Actionmanager.Dismount();
                    await Coroutine.Sleep(1000);
                }
            }

            #endregion

            #region IsMounted Check

            if (Core.Player.IsMounted)
            {
                return(false);
            }

            #endregion

            #region CanCast Check

            switch (CastType)
            {
            case CastType.TargetLocation:
            case CastType.SelfLocation:
                if (!Actionmanager.CanCastLocation(ID, target.Location))
                {
                    return(false);
                }
                break;

            default:
                if (Ultima.UltSettings.QueueSpells)
                {
                    if (!Actionmanager.CanCastOrQueue(DataManager.GetSpellData(ID), target))
                    {
                        return(false);
                    }
                }
                else
                {
                    if (!Actionmanager.CanCast(ID, target))
                    {
                        return(false);
                    }
                }
                break;
            }

            if (MovementManager.IsMoving &&
                DataManager.GetSpellData(ID).AdjustedCastTime.TotalMilliseconds > 0)
            {
                if (!BotManager.Current.IsAutonomous)
                {
                    return(false);
                }
                Navigator.PlayerMover.MoveStop();
            }

            #endregion

            #region InView Check

            if (GameSettingsManager.FaceTargetOnAction == false &&
                CastType == CastType.Target &&
                SpellType != SpellType.Heal &&
                SpellType != SpellType.Defensive &&
                !Helpers.InView(Core.Player.Location, Core.Player.Heading, target.Location))
            {
                return(false);
            }

            #endregion

            #region Off-GCD Check
            if (GCDType == GCDType.Off)
            {
                switch (Core.Player.CurrentJob)
                {
                case ClassJobType.Arcanist:
                case ClassJobType.Scholar:
                case ClassJobType.Summoner:
                    if (Core.Player.ClassLevel >= 38 &&
                        Core.Player.CurrentManaPercent > 40 &&
                        DataManager.GetSpellData(163).Cooldown.TotalMilliseconds <= 1000)
                    {
                        return(false);
                    }
                    break;

                case ClassJobType.Archer:
                case ClassJobType.Bard:
                    if (DataManager.GetSpellData(97).Cooldown.TotalMilliseconds <= 700)
                    {
                        return(false);
                    }
                    break;

                case ClassJobType.Astrologian:
                    if (DataManager.GetSpellData(3596).Cooldown.TotalMilliseconds <= 1000)
                    {
                        return(false);
                    }
                    break;

                case ClassJobType.Conjurer:
                case ClassJobType.WhiteMage:
                    if (DataManager.GetSpellData(119).Cooldown.TotalMilliseconds <= 1000)
                    {
                        return(false);
                    }
                    break;

                case ClassJobType.DarkKnight:
                    if (DataManager.GetSpellData(3617).Cooldown.TotalMilliseconds <= 1000)
                    {
                        return(false);
                    }
                    break;

                case ClassJobType.Gladiator:
                case ClassJobType.Paladin:
                    if (DataManager.GetSpellData(9).Cooldown.TotalMilliseconds <= 1000)
                    {
                        return(false);
                    }
                    break;

                case ClassJobType.Lancer:
                case ClassJobType.Dragoon:
                    if (DataManager.GetSpellData(75).Cooldown.TotalMilliseconds <= 1000)
                    {
                        return(false);
                    }
                    break;

                case ClassJobType.Machinist:
                    if (DataManager.GetSpellData(2866).Cooldown.TotalMilliseconds <= 1000)
                    {
                        return(false);
                    }
                    break;

                case ClassJobType.Marauder:
                case ClassJobType.Warrior:
                    if (DataManager.GetSpellData(31).Cooldown.TotalMilliseconds <= 1000)
                    {
                        return(false);
                    }
                    break;

                case ClassJobType.Pugilist:
                case ClassJobType.Monk:
                    if (DataManager.GetSpellData(53).Cooldown.TotalMilliseconds <= 1000)
                    {
                        return(false);
                    }
                    break;

                case ClassJobType.Rogue:
                case ClassJobType.Ninja:
                    if (DataManager.GetSpellData(2240).Cooldown.TotalMilliseconds <= 1000)
                    {
                        return(false);
                    }
                    break;

                case ClassJobType.Thaumaturge:
                case ClassJobType.BlackMage:
                    if (DataManager.GetSpellData(142).Cooldown.TotalMilliseconds <= 1000)
                    {
                        return(false);
                    }
                    break;
                }
            }
            #endregion

            #region Cleric Stance Check

            if (Actionmanager.HasSpell(122))
            {
                switch (Core.Player.HasAura("Cleric Stance"))
                {
                case true:
                    if (SpellType == SpellType.Heal)
                    {
                        await Coroutine.Wait(1000, () => Actionmanager.DoAction(122, Core.Player));

                        Logging.Write(Colors.OrangeRed, @"[Ultima] Removing Cleric Stance");
                        await Coroutine.Wait(3000, () => !Core.Player.HasAura(145));
                    }
                    break;

                case false:
                    if (SpellType == SpellType.Damage ||
                        SpellType == SpellType.DoT)
                    {
                        await Coroutine.Wait(1000, () => Actionmanager.DoAction(122, Core.Player));

                        Logging.Write(Colors.OrangeRed, @"[Ultima] Ability: Cleric Stance");
                        await Coroutine.Wait(3000, () => Core.Player.HasAura(145));
                    }
                    break;
                }
            }

            #endregion

            #region DoAction
            switch (CastType)
            {
            case CastType.TargetLocation:
                if (Ultima.UltSettings.RandomCastLocation)
                {
                    var rndx   = (target.CombatReach * _rnd.NextDouble() * GetMultiplier());
                    var rndz   = (target.CombatReach * _rnd.NextDouble() * GetMultiplier());
                    var rndxz  = new Vector3((float)rndx, 0f, (float)rndz);
                    var tarloc = target.Location;
                    var rndloc = tarloc + rndxz;

                    if (!await Coroutine.Wait(1000, () => Actionmanager.DoActionLocation(ID, rndloc)))
                    {
                        return(false);
                    }
                }
                else
                {
                    if (!await Coroutine.Wait(1000, () => Actionmanager.DoActionLocation(ID, target.Location)))
                    {
                        return(false);
                    }
                }
                break;

            case CastType.SelfLocation:
                if (Ultima.UltSettings.RandomCastLocation)
                {
                    var rndx   = ((1f * _rnd.NextDouble() + 1f) * GetMultiplier());
                    var rndz   = ((1f * _rnd.NextDouble() + 1f) * GetMultiplier());
                    var rndxz  = new Vector3((float)rndx, 0f, (float)rndz);
                    var tarloc = target.Location;
                    var rndloc = tarloc + rndxz;

                    if (!await Coroutine.Wait(1000, () => Actionmanager.DoActionLocation(ID, rndloc)))
                    {
                        return(false);
                    }
                }
                else
                {
                    if (!await Coroutine.Wait(1000, () => Actionmanager.DoActionLocation(ID, target.Location)))
                    {
                        return(false);
                    }
                }
                break;

            default:
                if (!await Coroutine.Wait(1000, () => Actionmanager.DoAction(ID, target)))
                {
                    return(false);
                }
                break;
            }
            #endregion

            #region Wait For Cast Completion

            switch (CastType)
            {
            case CastType.SelfLocation:
            case CastType.TargetLocation:
                await Coroutine.Wait(3000, () => !Actionmanager.CanCastLocation(ID, target.Location));

                break;

            default:
                await Coroutine.Wait(3000, () => !Actionmanager.CanCast(ID, target));

                break;
            }

            #endregion

            Ultima.LastSpell = this;

            #region Recent Spell Add
            if (SpellType != SpellType.Damage &&
                SpellType != SpellType.Heal &&
                SpellType != SpellType.AoE &&
                SpellType != SpellType.Behind &&
                SpellType != SpellType.Flank)
            {
                var key = target.ObjectId.ToString("X") + "-" + Name;
                var val = DateTime.UtcNow + DataManager.GetSpellData(ID).AdjustedCastTime + TimeSpan.FromSeconds(5);
                RecentSpell.Add(key, val);
            }
            if (SpellType == SpellType.Heal)
            {
                var key = target.ObjectId.ToString("X") + "-" + Name;
                var val = DateTime.UtcNow + DataManager.GetSpellData(ID).AdjustedCastTime + TimeSpan.FromSeconds(3);
                RecentSpell.Add(key, val);
            }
            #endregion

            Logging.Write(Colors.OrangeRed, @"[Ultima] Ability: " + Name);

            return(true);
        }
Example #30
0
 internal bool CanDoAbility(Abilities ability)
 {
     return(Actionmanager.CanCast((uint)ability, ExProfileBehavior.Me));
 }