Пример #1
0
        public async Task <bool> Run()
        {
            // ReSharper disable once PossibleInvalidOperationException
            if (!MapData.Current.TrackMob.Value)
            {
                return(false);
            }

            if (!World.CurrentArea.IsMap)
            {
                return(false);
            }

            return(await TrackMobLogic.Execute(_range));
        }
        public static async Task <bool> KillDaresso()
        {
            if (Helpers.PlayerHasQuestItem(QuestItemMetadata.EyeOfDesire))
            {
                return(false);
            }

            if (World.Act4.GrandArena.IsCurrentArea)
            {
                var daresso = Daresso;
                if (daresso != null && daresso.PathExists())
                {
                    if (await Helpers.StopBeforeBoss(Settings.BossNames.Daresso))
                    {
                        return(true);
                    }

                    await Helpers.MoveAndWait(daresso);

                    return(true);
                }
                // Gladiators
                var mob = AnyUniqueMob;
                if (mob != null && mob.PathExists())
                {
                    await Helpers.MoveAndWait(mob);

                    return(true);
                }
                await Helpers.Explore();

                return(true);
            }
            if (World.Act4.DaressoDream.IsCurrentArea)
            {
                if (await TrackMobLogic.Execute(100))
                {
                    return(true);
                }

                await Travel.To(World.Act4.GrandArena);

                return(true);
            }
            await Travel.To(World.Act4.GrandArena);

            return(true);
        }
Пример #3
0
        public static async Task <bool> ClearStrand()
        {
            if (_finished)
            {
                return(false);
            }

            if (World.Act6.TwilightStrand.IsCurrentArea)
            {
                if (await TrackMobLogic.Execute())
                {
                    return(true);
                }

                if (!await CombatAreaCache.Current.Explorer.Execute())
                {
                    if (QuestManager.GetState(Quests.FallenFromGrace) <= FinishedStateMinimum)
                    {
                        return(false);
                    }

                    GlobalLog.Error("[ClearTwilightStrand] Twilight Strand is fully explored but not all monsters were killed. Now going to create a new Twilight Strand instance.");

                    Travel.RequestNewInstance(World.Act6.TwilightStrand);

                    if (!await PlayerAction.TpToTown())
                    {
                        ErrorManager.ReportError();
                    }
                }
                return(true);
            }
            await Travel.To(World.Act6.TwilightStrand);

            return(true);
        }
Пример #4
0
        public async Task <bool> Run()
        {
            if (!World.CurrentArea.IsTempleOfAtzoatl)
            {
                return(false);
            }

            var settings = Settings.Instance;

            if (settings.SkipTemple)
            {
                await Leave();

                return(true);
            }

            if (settings.TrackMobInTemple && await TrackMobLogic.Execute())
            {
                return(true);
            }

            var explorer   = CombatAreaCache.Current.Explorer;
            var isExplored = explorer.BasicExplorer.PercentComplete >= settings.ExplorationPercent;

            if (settings.IgnoreBossroom)
            {
                if (isExplored)
                {
                    GlobalLog.Warn($"[HandleTempleTask] Exploration limit has been reached ({settings.ExplorationPercent}%). Now leaving the temple.");
                    await Leave();

                    return(true);
                }
            }
            else
            {
                if (isExplored && !explorer.Settings.FastTransition)
                {
                    GlobalLog.Warn($"[HandleTempleTask] Exploration limit has been reached ({settings.ExplorationPercent}%). Now seeking the bossroom.");
                    explorer.Settings.FastTransition = true;
                    return(true);
                }

                var boss = Incursion.CachedOmnitect;
                if (boss != null && !boss.Ignored && !boss.Unwalkable)
                {
                    var pos = boss.Position;
                    if (pos.IsFar)
                    {
                        if (!pos.TryCome())
                        {
                            GlobalLog.Error("[HandleTempleTask] Fail to move to Vaal Omnitect. Now marking it as unwalkable.");
                            boss.Unwalkable = true;
                        }
                        return(true);
                    }
                    var attempts = ++boss.InteractionAttempts;
                    if (attempts > MaxOmnitectAttempts)
                    {
                        GlobalLog.Error("[HandleTempleTask] Vaal Omnitect did not become active. Now ignoring it.");
                        boss.Ignored = true;
                        return(true);
                    }
                    await Coroutines.FinishCurrentAction();

                    GlobalLog.Debug($"[HandleTempleTask] Waiting for Vaal Omnitect to become active ({attempts}/{MaxOmnitectAttempts})");
                    await Wait.StuckDetectionSleep(200);

                    return(true);
                }
            }

            if (await explorer.Execute())
            {
                return(true);
            }

            GlobalLog.Warn("[HandleTempleTask] Temple is fully explored.");
            await Leave();

            return(true);
        }
        public async Task <bool> Run()
        {
            var area = World.CurrentArea;

            if (!area.IsMap && !area.IsOverworldArea)
            {
                return(false);
            }

            var cache = CombatAreaCache.Current;

            if (!CombatAreaCache.IsInIncursion)
            {
                return(false);
            }

            var settings = Incursion.CurrentRoomSettings;

            if (settings != null)
            {
                if (settings.PriorityAction == PriorityAction.Upgrading)
                {
                    if (await KillArchitect(IconUpgrade))
                    {
                        return(true);
                    }
                }
                else if (settings.PriorityAction == PriorityAction.Changing)
                {
                    if (await KillArchitect(IconChange))
                    {
                        return(true);
                    }
                }
            }

            if (await OpenIncursionDoor())
            {
                return(true);
            }

            if (await TrackMobLogic.Execute())
            {
                return(true);
            }

            if (await cache.Explorer.Execute())
            {
                return(true);
            }

            if (await ExitIncursion())
            {
                return(true);
            }

            GlobalLog.Debug("[HandleIncursionTask] Incursion is fully explored. Waiting for timer to run out...");
            await Wait.StuckDetectionSleep(200);

            return(true);
        }