jemxx / autobot

Autobot for TSO
3 stars 2 forks source link

Функция find_sektor() #54

Closed ghost closed 3 years ago

ghost commented 3 years ago

На мой взгляд в ней в самом начале вот этот кусок абсолютно бессмысленный. Кроме того два условия еще и дублируют друг друга - сначала $ttx = $tx and $tty = $ty, потом сначала $tty = $ty and $txy = $tx Закомментил - послежу.

            If $ttx = $tx Then
                If $tty = $ty Then
                    If $else_y < 0 Then
                        Send("{DOWN}")
                        Send("{DOWN}")
                        Send("{DOWN}")
                        Send("{DOWN}")
                        Send("{DOWN}")
                        Send("{DOWN}")
                        Send("{DOWN}")
                        Send("{DOWN}")
                        Send("{DOWN}")
                        Send("{DOWN}")
                    EndIf
                    If $else_y > 0 Then
                        Send("{UP}")
                        Send("{UP}")
                        Send("{UP}")
                        Send("{UP}")
                        Send("{UP}")
                        Send("{UP}")
                        Send("{UP}")
                        Send("{UP}")
                        Send("{UP}")
                        Send("{UP}")
                    EndIf
                    If $else_x < 0 Then
                        Send("{RIGHT}")
                        Send("{RIGHT}")
                        Send("{RIGHT}")
                        Send("{RIGHT}")
                        Send("{RIGHT}")
                        Send("{RIGHT}")
                        Send("{RIGHT}")
                        Send("{RIGHT}")
                        Send("{RIGHT}")
                        Send("{RIGHT}")
                    EndIf
                    If $else_x > 0 Then
                        Send("{LEFT}")
                        Send("{LEFT}")
                        Send("{LEFT}")
                        Send("{LEFT}")
                        Send("{LEFT}")
                        Send("{LEFT}")
                        Send("{LEFT}")
                        Send("{LEFT}")
                        Send("{LEFT}")
                        Send("{LEFT}")
                    EndIf
                EndIf
            EndIf
            If $tty = $ty Then
                If $ttx = $tx Then
                    If $else_y < 0 Then
                        Send("{DOWN}")
                        Send("{DOWN}")
                        Send("{DOWN}")
                        Send("{DOWN}")
                        Send("{DOWN}")
                        Send("{DOWN}")
                        Send("{DOWN}")
                        Send("{DOWN}")
                        Send("{DOWN}")
                        Send("{DOWN}")
                    EndIf
                    If $else_y > 0 Then
                        Send("{UP}")
                        Send("{UP}")
                        Send("{UP}")
                        Send("{UP}")
                        Send("{UP}")
                        Send("{UP}")
                        Send("{UP}")
                        Send("{UP}")
                        Send("{UP}")
                        Send("{UP}")
                    EndIf
                    If $else_x < 0 Then
                        Send("{RIGHT}")
                        Send("{RIGHT}")
                        Send("{RIGHT}")
                        Send("{RIGHT}")
                        Send("{RIGHT}")
                        Send("{RIGHT}")
                        Send("{RIGHT}")
                        Send("{RIGHT}")
                        Send("{RIGHT}")
                        Send("{RIGHT}")
                    EndIf
                    If $else_x > 0 Then
                        Send("{LEFT}")
                        Send("{LEFT}")
                        Send("{LEFT}")
                        Send("{LEFT}")
                        Send("{LEFT}")
                        Send("{LEFT}")
                        Send("{LEFT}")
                        Send("{LEFT}")
                        Send("{LEFT}")
                        Send("{LEFT}")
                    EndIf
                EndIf
            EndIf
            $ttx = $tx
            $tty = $ty
ghost commented 3 years ago

Отрою, пожалуй, задачу заново, т.к. этот функционал явно лишний. Буду копать дальше

ghost commented 3 years ago

Закоментил, пока не вижу проблем, зачем этот кусок кода нужен. Еще послежу, возможно когда точка привязки будет не в поле видимости экрана - этот кусок и отработает.

ghost commented 3 years ago

Поделюсь первыми впечатлениями, прошел где-то с десяток приклов с закоментированным куском. Среди них и те, где точка привязки не попадала в видимую область, и бот карту двигал. Ничего странного в работе бота не заметил. Продолжаю пока думать, что этот кусок лишний. Плюс еще подумал о такой вещи - очень многие вещи (как например, баг с листанием звезды, кот. был поправлен) в боте завязаны на Desktop.Width и Desktop.Hight. Мне кажется, это не всегда корректно, особенно для владельцев очень больших экранов. Куда как правильнее привязываться к ширине и высоте окна клиента. И тут мы точно никуда не денемся от определения хендла клиента. О чем я уже писал

Тут после дискуссии в Дискроде впомнил одну фигню. я писал выше, что

Почему-то напрямую без поиска хендла у окна по части заголовка работать не хотело, поэтому решил так. С лета бегает без проблем на твинах.

Теперь после выхода официального клиента один из игроков пишет, что

Бот ждет всех простых ген, перенос фокуса на второй монитор и бот не видит клиента, стоит кликнуть в клиенте и бот продолжает как ни в чем не бывало

Возможно эти две проблемы связаны, сейчас в коде стоит один WinActivate($WinTitle), но похоже для exe-клиента этого мало. У меня так и не получилось решить для exe-клиента Сирриса без получения хендла окна.

Originally posted by @Marsik-A in https://github.com/jemxx/autobot/issues/31#issuecomment-748460378

ghost commented 3 years ago

Вернусь к дискуссии. Этот блок отвечает за случай, когда точка привязки видна на экране, но находится в серой зоне, которая составляет по 200 пикселей снизу/сверху, справа/слева. В этой зоне бот не может ухватиться за точку, чтобы перетянуть карту.