Beispiel #1
0
        private static SwitchArgument <RepairState> GetRepairStep(RepairContext context)
        {
            var closeAction = new Action(r =>
            {
                Repair.Close();
                context.State = BotManager.Current.Name != "Fate Bot"
                    ? RepairState.MovingBack : RepairState.None;

                Logger.AgilMessage("Ended repair step, now on: {0}", context.State);
            });

            var close = new Decorator(req => Equipment.GetCondition() >= context.MinimumDurability && Repair.IsOpen,
                                      closeAction);

            var dismount = new Decorator(req => Core.Me.IsMounted,
                                         new Action(r => Actionmanager.Dismount()));

            var selectYes = new Decorator(req => SelectYesno.IsOpen,
                                          new Action(r => SelectYesno.ClickYes()));

            var move         = Movement.SprintMove(r => context.Location);
            var repairAll    = new RepairAll();
            var selectRepair = new SetIconString(2);
            var setTarget    = new SetTarget(() => context.NpcId);

            var interact = new Decorator(req => !Repair.IsOpen && !SelectIconString.IsOpen && !SelectYesno.IsOpen,
                                         new Interact());

            var repairStep = new PrioritySelector(move, dismount, close, selectYes, repairAll, selectRepair,
                                                  setTarget, interact, new Action(r => RunStatus.Success));

            return(new SwitchArgument <RepairState>(repairStep, RepairState.Repairing));
        }
        public static async Task <bool> MoveTo(Vector3 location)
        {
            bool goalReached = false;

            float distance = Core.Me.Location.Distance(location);

            if (distance < 3f)
            {
                return(true);
            }

            while (Core.Me.IsAlive && !goalReached)
            {
                Navigator.MoveTo(location);
                distance    = Core.Me.Location.Distance(location);
                goalReached = distance < 3f;

                if (MovementManager.IsMoving && !Core.Me.IsMounted)
                {
                    if (Actionmanager.IsSprintReady && WorldManager.InSanctuary)
                    {
                        Actionmanager.Sprint();
                    }
                    else if (Actionmanager.IsSprintReady && !WorldManager.InSanctuary && Core.Me.InCombat)
                    {
                        Actionmanager.Sprint();
                    }
                }

                await Coroutine.Yield();
            }

            return(true);
        }
Beispiel #3
0
        internal async Task UseItem()
        {
            if (_obj != null)
            {
                while (CanUseItem)
                {
                    if (Item != null)
                    {
                        if (_obj.NpcId == ItemTarget)
                        {
                            Navigator.Stop();

                            if (Me.IsMounted)
                            {
                                await Dismount();
                            }

                            if (!Actionmanager.DoAction(Item.ActionType, Item.RawItemId, _obj) && Item.CanUse(_obj))
                            {
                                Log("Using {0} on {1}.", Item.Name, _obj.Name);
                                Item.UseItem(_obj);
                                await ShortCircuit(_obj, false, false, 5000);
                            }
                        }
                    }
                    await Coroutine.Yield();
                }
            }
            else
            {
                return;
            }
        }
Beispiel #4
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);
        }
Beispiel #5
0
        protected async Task <bool> Convert()
        {
            if (GatheringManager.WindowOpen)
            {
                Log("Waiting for gathering window to close");
                Thread.Sleep(2000);
            }

            if (FishingManager.State != FishingState.None)
            {
                Log("Stop fishing");
                Actionmanager.DoAction("Quit", Core.Me);
                await Coroutine.Wait(5000, () => FishingManager.State == FishingState.None);
            }

            await CommonTasks.StopAndDismount();

            if (ItemIds != null && ItemIds.Length > 0)
            {
                foreach (var id in ItemIds)
                {
                    await ConvertByItemId((uint)id, (ushort)MaxWait, NqOnly);
                }
            }

            return(_done = true);
        }
Beispiel #6
0
        private async Task UseItem()
        {
            if (TargetForUseItem != null)
            {
                while (CanUseItem)
                {
                    if (Item != null)
                    {
                        if (TargetForUseItem.NpcId == ItemTarget)
                        {
                            Navigator.Stop();

                            if (Me.IsMounted)
                            {
                                await Dismount();
                            }

                            if (!Actionmanager.DoAction(Item.ActionType, Item.RawItemId, TargetForUseItem) && Item.CanUse(TargetForUseItem))
                            {
                                Log("Using {0} on {1}.", Item.Name, TargetForUseItem.Name);
                                Item.UseItem(TargetForUseItem);
                                await Coroutine.Wait(6000, () => !Me.IsCasting && (TargetForUseItem as BattleCharacter).HasAura(LacksAuraId));
                            }
                        }
                    }
                    await Coroutine.Yield();
                }
            }
            else
            {
                return;
            }
        }
Beispiel #7
0
        public static async Task <bool> Dismount(byte maxTicks = 100, ushort interval = 100)
        {
            var dismountTicks = 0;

            while (dismountTicks++ < maxTicks && Core.Player.IsMounted && Behaviors.ShouldContinue)
            {
                if (MovementManager.IsFlying)
                {
                    if (Navigator.PlayerMover is FlightEnabledSlideMover)
                    {
                        Navigator.Stop();
                    }
                    else
                    {
                        MovementManager.StartDescending();
                    }
                }
                else
                {
                    Actionmanager.Dismount();
                }

                await Wait(interval, () => !Core.Player.IsMounted);
            }

            if (dismountTicks > maxTicks)
            {
                Logger.Instance.Error("Failed to dismount.");
                return(false);
            }

            return(true);
        }
Beispiel #8
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);
        }
Beispiel #9
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);
 }
Beispiel #10
0
 private async Task <bool> Thundercloud()
 {
     if (Core.Player.HasAura("Thundercloud"))
     {
         if (!UmbralAura)
         {
             if (Ultima.LastSpell.Name == MySpells.Fire.Name ||
                 Ultima.LastSpell.Name == MySpells.FireII.Name ||
                 !Core.Player.HasAura("Thundercloud", false, 5000))
             {
                 if (!Actionmanager.HasSpell(MySpells.ThunderIII.Name))
                 {
                     return(await MySpells.ThunderII.Cast());
                 }
                 return(await MySpells.ThunderIII.Cast());
             }
         }
         if (UmbralAura)
         {
             Spell.RecentSpell.RemoveAll(t => DateTime.UtcNow > t);
             if (!RecentThunder)
             {
                 if (!Actionmanager.HasSpell(MySpells.ThunderIII.Name))
                 {
                     return(await MySpells.ThunderII.Cast());
                 }
                 return(await MySpells.ThunderIII.Cast());
             }
         }
     }
     return(false);
 }
Beispiel #11
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);
 }
Beispiel #12
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);
 }
Beispiel #13
0
 private async Task <bool> Transpose()
 {
     if (AstralAura)
     {
         if (!Core.Player.InCombat &&
             LowMP)
         {
             return(await MySpells.Transpose.Cast());
         }
     }
     if (UmbralAura &&
         Core.Player.HasAura("Firestarter"))
     {
         if (Ultima.LastSpell.Name == MySpells.Scathe.Name &&
             Core.Player.CurrentManaPercent != 100)
         {
             await Coroutine.Wait(5000, () => Core.Player.CurrentManaPercent == 100 ||
                                  MovementManager.IsMoving);
         }
         if (Core.Player.CurrentManaPercent == 100)
         {
             return(await MySpells.Transpose.Cast());
         }
     }
     if (!Actionmanager.HasSpell(MySpells.BlizzardIII.Name) &&
         LowMP)
     {
         return(await MySpells.Transpose.Cast());
     }
     return(false);
 }
Beispiel #14
0
 private async Task <bool> Thunder()
 {
     if (UmbralAura &&
         Core.Player.CurrentManaPercent < 100)
     {
         if (!Actionmanager.HasSpell(MySpells.BlizzardIII.Name) &&
             !Core.Player.CurrentTarget.HasAura("Thunder", true, 3000))
         {
             return(await MySpells.Thunder.Cast());
         }
         Spell.RecentSpell.RemoveAll(t => DateTime.UtcNow > t);
         if (!RecentThunder)
         {
             return(await MySpells.Thunder.Cast());
         }
     }
     if (!AstralAura &&
         !UmbralAura)
     {
         if (!Actionmanager.HasSpell(MySpells.ThunderII.Name) &&
             !Core.Player.CurrentTarget.HasAura("Thunder", true))
         {
             return(await MySpells.Thunder.Cast());
         }
     }
     return(false);
 }
Beispiel #15
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);
        }
Beispiel #16
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);
 }
Beispiel #17
0
 private async Task <bool> Barrage()
 {
     if (!Actionmanager.HasSpell(MySpells.EmpyrealArrow.Name) &&
         DataManager.GetSpellData(97).Cooldown.TotalMilliseconds <= 1000)
     {
         return(await MySpells.Barrage.Cast());
     }
     return(false);
 }
Beispiel #18
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);
 }
Beispiel #19
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);
 }
Beispiel #20
0
 private async Task <bool> ImpulseDrive()
 {
     if (Actionmanager.HasSpell(MySpells.Disembowel.Name) &&
         !Core.Player.CurrentTarget.HasAura(MySpells.Disembowel.Name, false, 5000) ||
         Actionmanager.HasSpell(MySpells.ChaosThrust.Name) &&
         !Core.Player.CurrentTarget.HasAura(MySpells.ChaosThrust.Name, true, 5000))
     {
         return(await MySpells.ImpulseDrive.Cast());
     }
     return(false);
 }
        public override async Task <bool> ExecuteRotation(ExGatherTag tag)
        {
            if (Core.Player.CurrentGP > 399)
            {
                await Wait();

                Actionmanager.DoAction(293U, Core.Player);
            }

            return(await base.ExecuteRotation(tag));
        }
Beispiel #22
0
        public static Composite SprintMove(ValueRetriever <Vector3> location)
        {
            var move   = CommonBehaviors.MoveAndStop(location, 1f, true);
            var sprint = new Decorator(req => CanSprint,
                                       new Action(r =>
            {
                Actionmanager.Sprint();
                return(RunStatus.Failure);
            }));

            return(new PrioritySelector(sprint, move));
        }
Beispiel #23
0
 private async Task <bool> Mutilate()
 {
     if (!Actionmanager.HasSpell(MySpells.ShadowFang.Name) ||
         Core.Player.CurrentTarget.HasAura(MySpells.ShadowFang.Name, true, 4000))
     {
         if (!Core.Player.CurrentTarget.HasAura("Mutilation", true, 4000))
         {
             return(await MySpells.Mutilate.Cast());
         }
     }
     return(false);
 }
Beispiel #24
0
 private async Task <bool> HawksEye()
 {
     if (Core.Player.HasAura(MySpells.CrossClass.BloodForBlood.Name))
     {
         return(await MySpells.HawksEye.Cast());
     }
     if (!Actionmanager.HasSpell(MySpells.CrossClass.BloodForBlood.Name))
     {
         return(await MySpells.HawksEye.Cast());
     }
     return(false);
 }
Beispiel #25
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);
 }
Beispiel #26
0
 private async Task <bool> KissOfTheWasp()
 {
     if (Ultima.UltSettings.RogueKissOfTheWasp ||
         !Actionmanager.HasSpell(MySpells.KissOfTheViper.Name))
     {
         if (!Core.Player.HasAura(MySpells.KissOfTheWasp.Name))
         {
             return(await MySpells.KissOfTheWasp.Cast());
         }
     }
     return(false);
 }
Beispiel #27
0
 private async Task <bool> Swiftcast()
 {
     if (AstralAura)
     {
         if (!Actionmanager.CanCast(MySpells.Convert.Name, Core.Player) &&
             !LowMP)
         {
             return(await MySpells.Swiftcast.Cast());
         }
     }
     return(false);
 }
Beispiel #28
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);
 }
Beispiel #29
0
 private async Task <bool> SwordOath()
 {
     if (Ultima.UltSettings.PaladinSwordOath ||
         !Actionmanager.HasSpell(MySpells.ShieldOath.Name))
     {
         if (!Core.Player.HasAura(MySpells.SwordOath.Name))
         {
             return(await MySpells.SwordOath.Cast());
         }
     }
     return(false);
 }
 protected Composite Behavior()
 {
     return(new PrioritySelector(
                new Decorator(ret => Condition != null && !ConditionCheck(),
                              new Action(ret => _done = true)),
                new Decorator(ret => QuestId != 0 && StepId != 0 && QuestLogManager.GetQuestById(QuestId).Step > StepId,
                              new Action(r =>
     {
         _done = true;
     })
                              ),
                new Decorator(ret => Core.Player.IsMounted,
                              CommonBehaviors.Dismount()
                              ),
                new Decorator(ret => Talk.DialogOpen,
                              new Action(r =>
     {
         Talk.Next();
     })
                              ),
                new Decorator(ret => casted,
                              new Sequence(
                                  new Sleep(3, 5),
                                  new Action(r => casted = false)
                                  )
                              ),
                new Decorator(ret => Core.Me.Location.Distance(Position) <= Distance && IsFinished,
                              new Action(ret => _done = true)),
                new Decorator(ret => Core.Me.Location.Distance(Position) <= Distance && !casted,
                              new Action(r =>
     {
         Navigator.PlayerMover.MoveStop();
         if (!Core.Player.IsCasting)
         {
             GameObjectManager.GetObjectByNPCId(NPC).Face();
             if (Actionmanager.DoAction(SpellID, GameObjectManager.GetObjectByNPCId(NPC)))
             {
                 Actionmanager.DoAction(SpellID, GameObjectManager.GetObjectByNPCId(NPC));
                 casted = true;
             }
             else
             {
                 Actionmanager.DoActionLocation(SpellID, Core.Player.Location);
                 casted = true;
             }
         }
     })
                              ),
                CommonBehaviors.MoveAndStop(ret => Position, Distance, stopInRange: true, destinationName: Name),
                new ActionAlwaysSucceed()
                ));
 }