jemxx / autobot

Autobot for TSO
3 stars 2 forks source link

Команда работы с клиентом от Сирриса #31

Closed ghost closed 3 years ago

ghost commented 4 years ago

К счастью, в заголовке клиента отображается ник игрока, поэтому я сделал так ввел глобал переменную Global $WinTitle = "The Settlers" В основной юнит добавил обработчик команды Клиент

Case "Клиент"
      $WinTitle = "The Settlers"
      If ($komanda[2] <> "Браузер") then $WinTitle = $komanda[2]
      Return 1

а по всем юнитам заменил строку

WinActivate("The Settlers Онлайн") На группу

 Local $hWnd
 ...
 Opt("WinTitleMatchMode",2)
 $hWnd = WinWait($WinTitle)
 WinActivate($hWnd)

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

Синтаксис Клиент=Браузер - должен работать в любом браузере, я не проверял. Сделано, если в одном текстовике надо, например, послать разведов у твинов в клиенте, а потом у себя в основе в браузере Клиент=часть_ника_игрока - будет работать в клиенте Сирриса. ник похоже регистрочувствительный

ghost commented 3 years ago

А этот функционал будет реализован?

ghost commented 3 years ago

После выхода офф промежуточного клиента функционал, увы, стал неактуальным( Если Сиррис не починит свои проги, то закрою задачу.

ghost commented 3 years ago

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

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

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

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

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

ghost commented 3 years ago

Сиррис починил своего клиента, но скорее всего до первых техработ. Теперь можно заходить на нескольких акках сразу, а значит функционал снова востребован. Если зарелизить в ближайшее время - многие ботоводы будут очень благодарны, тем более что Рождество - ивент разведов.

jemxx commented 3 years ago

Это хорошо. Ссылочку бы, где его скачать, что бы это добавить

ghost commented 3 years ago

все утилиты Сирриса в его паблик сообщениях на оф. форуме https://forum.thesettlersonline.ru/members/517659-SirriS

jemxx commented 3 years ago

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

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

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

Теряет он фокус видимо по тому, что в autobot.ini не правильное название окна прописано. Оказывается теперь The Settlers Online а не The Settlers Онлайн. Надо поменять на правильное и попробовать

ghost commented 3 years ago

Он пробовал, говорит все равно теряет. Я же писал, что у меня такое было когда я с клиентом возился. Если не через хендл, то окно не находилось. а у Вас не теряет?

jemxx commented 3 years ago

Вроди бы не теряет. Бегает в приклы и бегает. Вчера на оф клиенте, сегодня на Сиррисе

ghost commented 3 years ago

Ок, отписал ему. Посмотрим, что ответит. У него два клиента одновременно

jemxx commented 3 years ago

Вообще нужно попробовать с этим исправлением https://github.com/jemxx/autobot/commit/573655e0f7be72475e121c9edf12d612e06ebbfd

ghost commented 3 years ago

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

jemxx commented 3 years ago

Потому что папка называлась по-русски. А еще не работал любимый файл если он тоже назван по-русски) В этом исправлении это поправлено.

Вот это прикручу и скомпилирую.

jemxx commented 3 years ago

Я то по-русски ничего не называю, вот и пропустил эту проблему. Но сразу о ней сообщили соги

ghost commented 3 years ago

Я то по-русски ничего не называю, вот и пропустил эту проблему. Но сразу о ней сообщили соги

о как! Ну я тоже не называю, старая досовская привычка! и разделитесь сразу на точку меняю.

jemxx commented 3 years ago

Интересно, а если вот так сократить, будет работать

Opt("WinTitleMatchMode",2)
WinActivate(WinWait($WinTitle))

Валидатор ошибку не выдает

ghost commented 3 years ago

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

jemxx commented 3 years ago

Уже проверил. Работает)

ghost commented 3 years ago

@jemxx Зря закрыли, хотел предложить еще такую фичу У меня бывает подглючивает оф. клиент, и я переключаюсь на клиент Сирриса. Каждый раз лезть в ини и править - лениво, да и помнить надо, что последним в том ини написано. А при затыке прохода и старте не с 1й строки бот забывает, что где-то в начале я ему указывал, что клиент от Сирриса, поэтому сделал в главном окне чек-бокс "Клиент Sirris-а", если он взведен, то $win_title = "TSO Game", если погашен, то читаем из ини

jemxx commented 3 years ago

Вроди бы как все добавил и закрыл. Можно конечно добавить, вопрос в том долго ли будет этот клиент работать) А так для него и место есть, вместо Повторять бесконечно, которое решили, но не убрали еще

jemxx commented 3 years ago

Открою пока, так как обнаружил баг, что бы не забыть. Суть бага вот в чем. Есть 2 файла. Содержимое первого. Например такое

Клиент=Ник1
Разведчики=1,0,0,Сокровища,ОченьДолгий
Клиент=Ник2
Разведчики=1,0,0,Сокровища,ОченьДолгий

Содержимое второго

Разведчики=1,0,0,Сокровища,ОченьДолгий

Если сначала запустить первый, то отправит разведов как нужно. Сначала Ник1, а затем Ник2 А если затем запустить второй файл что бы отправить разведов у Ник3 то бот будет пытаться отправить разведов в окне Ник2. Хотя активно окно с Ник 3 и по логике должно браться название окна с ini. Но бот переходит на окно с Ник2

ghost commented 3 years ago

Отвечаю, чтобы закрыть хвосты.

Открою пока, так как обнаружил баг, что бы не забыть. Суть бага вот в чем. Есть 2 файла. Содержимое первого. Например такое

Клиент=Ник1
Разведчики=1,0,0,Сокровища,ОченьДолгий
Клиент=Ник2
Разведчики=1,0,0,Сокровища,ОченьДолгий

Содержимое второго

Разведчики=1,0,0,Сокровища,ОченьДолгий

Если сначала запустить первый, то отправит разведов как нужно. Сначала Ник1, а затем Ник2 А если затем запустить второй файл что бы отправить разведов у Ник3 то бот будет пытаться отправить разведов в окне Ник2. Хотя активно окно с Ник 3 и по логике должно браться название окна с ini. Но бот переходит на окно с Ник2

Так это не баг, это фича. Правильно все работает. Посмотрите код, у Вас где $winTitle инициализируется? при старте самого бота, вот тут https://github.com/jemxx/autobot/blob/870991c40fc20785e07b22c7da5b697f1c193695/autobot.au3#L44

Теперь смотрим: бот запущен, открыт 1й тестовик, сначала $winTitle = Ник1, потом $winTitle = Ник2, бот и запомнил его, как последнее значение. Чтения-то из ини больше не будет, оно один раз при старте бота, а бот-то запущен уже. Чтобы при запуске 2го текстовика бот брал из ини, надо вставить, к примеру, вот сюда - при смене файла в комбобоксе

https://github.com/jemxx/autobot/blob/870991c40fc20785e07b22c7da5b697f1c193695/autobot.au3#L102

$windowTitle = ReadINI("main", "window_title", "The Settlers Online")
if $windowTitle == "" Then $windowTitle = "The Settlers Online"

Про живучесть клиента, ложка была дорога к обеду, а именно к этому Рождественскому ивенту, когда основной упор был на разведов, и можно было тех же твинов на виртуалке зарядить по кругу на каждые 3-6-9 часов. Мое предложение было 2.5 месяца назад. Теперь, когда поливента позади, версия 0.22 оказалась непригодной для основных масс, я не знаю, есть ли во всем этом дальнейший смысл. Имел счастье в лс пообщаться с Сиррисом по поводу этих всех нововведений. Если разрабы не придумают что-нибудь очень злое....хитрое, я надеюсь, что и подсветка, и клиент, и гиквесты и другие сервисы он будет оперативно править.

Upd. Даже лучше вот сюда, под этот вот If https://github.com/jemxx/autobot/blob/870991c40fc20785e07b22c7da5b697f1c193695/autobot.au3#L110

т.к. тогда, если Вы все же прикрутите чекбокс на клиента Сирриса, то все будет работать и при старте бота с новой строки, без смены файла в комбо. Я сделал так

                    If GUICtrlRead($Client) == $GUI_CHECKED Then
                        $WinTitle = "Client"
                    Else
                        $WinTitle = read_ini(9)
                    EndIf

На этом прощаюсь! Удачи Вам с этим недотырком в дальнейшей работе.