private static async Task LeaveArea()
        {
            GlobalLog.Error("[HandleBlockingObjectTask] Fail to remove a blocking object. Now requesting a new instance.");

            EXtensions.AbandonCurrentArea();

            if (!await PlayerAction.TpToTown())
            {
                ErrorManager.ReportError();
            }
        }
Ejemplo n.º 2
0
        private static void HandleStuck()
        {
            if (StopBotOnStuck)
            {
                GlobalLog.Warn("[StuckDetection] StopBotOnStuck is true. Now reseting stuck counters and stopping the bot.");
                Reset();
                BotManager.Stop();
                return;
            }

            var cache = CombatAreaCache.Current;

            ++cache.StuckCount;

            GlobalLog.Error($"[StuckDetection] Stuck incidents in current area: {cache.StuckCount}");

            if (cache.StuckCount >= Settings.Instance.MaxStucksPerInstance)
            {
                GlobalLog.Error($"[StuckDetection] Too many stuck incidents in current area ({World.CurrentArea.Name}). Now requesting a new instance.");
                EXtensions.AbandonCurrentArea();
            }

            var err = LokiPoe.EscapeState.LogoutToTitleScreen();

            if (err != LokiPoe.EscapeState.LogoutError.None)
            {
                GlobalLog.Error($"[StuckDetection] Logout error: \"{err}\".");
                //stuck incident was not properly handled if we did not logout
                --cache.StuckCount;
            }
            else
            {
                GlobalLog.Info($"[StuckDetection] Triggered event ({cache.StuckCount})");
                Triggered?.Invoke(cache.StuckCount);
                Utility.BroadcastMessage(null, TriggeredMessage);
                Reset();
            }
        }