ABClient.ABForms.FormMain.FastAttackAsync C# (CSharp) Method

FastAttackAsync() private static method

private static FastAttackAsync ( object stateInfo ) : void
stateInfo object
return void
        private static void FastAttackAsync(object stateInfo)
        {
            var ai = (AttackInfo) stateInfo;
            var nick = StripItalic(ai.TargetNick);
            var userInfo = NeverApi.GetAll(nick);
            if (userInfo == null)
            {
                if (AppVars.MainForm != null)
                    AppVars.MainForm.WriteChatMsgSafe("Ошибка анализа инфы атакуемого.");

                return;
            }

            var flog = userInfo.FightLog;
            if (flog.Equals("0", StringComparison.Ordinal))
            {
                flog = string.Empty;
            }

            if (!string.IsNullOrEmpty(flog))
            {
                var scans = 0;
                var swatch = new Stopwatch();
                swatch.Start();
                AppVars.FastWaitEndOfBoiCancel = false;
                while (!AppVars.FastWaitEndOfBoiCancel)
                {
                    AppVars.FastWaitEndOfBoiActive = true;
                    var html = NeverApi.GetFlog(flog);
                    if (string.IsNullOrEmpty(html))
                        continue;

                    scans++;

                    // var off = 1;
                    // var off = 0;

                    var off = HelperStrings.SubString(html, "var off = ", ";");
                    if (string.IsNullOrEmpty(off))
                        continue;

                    if (off.Equals("1"))
                    {
                        break;
                    }
                    
                    if (
                        (html.IndexOf("нападение бота", StringComparison.CurrentCultureIgnoreCase) == -1) &&
                        (html.IndexOf("закрытый бой", StringComparison.CurrentCultureIgnoreCase) == -1) &&
                        (html.IndexOf("закрытое нападение", StringComparison.CurrentCultureIgnoreCase) == -1) &&
                        (html.IndexOf("закрытое кулачное нападение", StringComparison.CurrentCultureIgnoreCase) == -1) &&
                        (html.IndexOf("закрытое боевое нападение", StringComparison.CurrentCultureIgnoreCase) == -1)
                        )
                    {
                        if (!AppVars.WaitOpen)
                        {
                            break;
                        }
                    }

                    if (scans == 1)
                    {
                        if (AppVars.MainForm != null)
                            AppVars.MainForm.WriteChatMsgSafe("Ожидание окончания боя (отмена: меню/быстрые действия/отмена).");
                    }
                    else
                    {
                        if ((scans%100) == 0)
                        {
                            if (AppVars.MainForm != null)
                                AppVars.MainForm.WriteChatMsgSafe(
                                    $"Ожидание окончания боя (запросов: {scans}, средн: {swatch.ElapsedMilliseconds / scans}мс)");
                        }
                    }
                }
            }

            AppVars.FastWaitEndOfBoiActive = false;

            if (AppVars.FastWaitEndOfBoiCancel)
            {
                AppVars.FastWaitEndOfBoiCancel = false;
                if (AppVars.MainForm != null) 
                    AppVars.MainForm.WriteChatMsgSafe("Ожидание окончания боя прекращено.");
            }
            else
            {
                if (AppVars.MainForm != null)
                {
                    AppVars.MainForm.FastStartSafe(ai.Weapon, nick, AppVars.DoPerenap ? int.MaxValue : 1);
                    ReloadMainFrame();
                }
            }
        }