Closed ghost closed 4 years ago
Пока писал, возникло такое предложение - раз у нас есть конфиг для разведов, может введем туда признак для любого разведа, специализируется ли он на поисках приклов, и если да - то пусть тоже идет за приклами
Вобщем то можно, думаю хуже не будет. Надо еще отскиринть на тесте новых спецов и добавить их в бот.
хорошо, в ближайшие пару дней отскриню и скину архивом. Как-то сам про тестовый не сообразил
Upd. Тестовый лежит, как очухается - заскриню
Upd2. Архив с иконками новых спецов specs.zip
А как Вы относитесь к тому, чтобы обернуть все if-ы в поиске разведов в один for и сократить код?
И второе предложение - возникло в ивент, дополнить функцию отправки разведов новым функционалом, а именно расширить параметр КакойРазведчик списком
Разведчики=Флаг, Поведение_Бесстрашный_Исследователь, Артефакты, Вид_поиска, Тип_поиска, [Опционально: Какой_Разведчик]
Например, так
Разведчики=0,0,0,Сокровища,Долгий,Простой,Искренний,Скромный
И тогда все три типа медленных уйдут в Долгий поиск.
На счет первого предложения сложно сказать, там же космическая логика и разобраться сложно в ней. Можно что то поломать. К слову, ваш вариант функции отправки, у меня сегодня не захотел листать звезду. Завтра еще потестю
По второму варианту, это можно было бы сделать.
Там нет ничего сложного, я уже вкурил) Сложность сейчас только в параметре "если тетка, слать за приклом", а если будет единообразный флаг для всех - слать или нет за приклами - то совсем просто. Ну и из 1го вытекает второе. Я начал делать, пока техи были, но где-то сбился. Дома продолжу, ибо не полностью забекапился)
Вот эти ифы оборачиваются в for и один if
If _imagesearcharea($vidrazvedov[0], 1, $zvezda_area[0], $zvezda_area[1], $zvezda_area[2], $zvezda_area[3], $tx, $ty, 30) = 1 Then ExitLoop
If _imagesearcharea($vidrazvedov[1], 1, $zvezda_area[0], $zvezda_area[1], $zvezda_area[2], $zvezda_area[3], $tx, $ty, 30) = 1 Then ExitLoop
If _imagesearcharea($vidrazvedov[2], 1, $zvezda_area[0], $zvezda_area[1], $zvezda_area[2], $zvezda_area[3], $tx, $ty, 30) = 1 Then ExitLoop
If _imagesearcharea($vidrazvedov[3], 1, $zvezda_area[0], $zvezda_area[1], $zvezda_area[2], $zvezda_area[3], $tx, $ty, 30) = 1 Then ExitLoop
If _imagesearcharea($vidrazvedov[4], 1, $zvezda_area[0], $zvezda_area[1], $zvezda_area[2], $zvezda_area[3], $tx, $ty, 30) = 1 Then ExitLoop
If _imagesearcharea($vidrazvedov[5], 1, $zvezda_area[0], $zvezda_area[1], $zvezda_area[2], $zvezda_area[3], $tx, $ty, 30) = 1 Then
If $tetki = 1 Then $seychactetka = 1
ExitLoop
EndIf
If _imagesearcharea($vidrazvedov[6], 1, $zvezda_area[0], $zvezda_area[1], $zvezda_area[2], $zvezda_area[3], $tx, $ty, 30) = 1 Then ExitLoop
If _imagesearcharea($vidrazvedov[7], 1, $zvezda_area[0], $zvezda_area[1], $zvezda_area[2], $zvezda_area[3], $tx, $ty, 30) = 1 Then ExitLoop
If _imagesearcharea($vidrazvedov[8], 1, $zvezda_area[0], $zvezda_area[1], $zvezda_area[2], $zvezda_area[3], $tx, $ty, 30) = 1 Then ExitLoop
If _imagesearcharea($vidrazvedov[9], 1, $zvezda_area[0], $zvezda_area[1], $zvezda_area[2], $zvezda_area[3], $tx, $ty, 30) = 1 Then ExitLoop
If _imagesearcharea($vidrazvedov[10], 1, $zvezda_area[0], $zvezda_area[1], $zvezda_area[2], $zvezda_area[3], $tx, $ty, 30) = 1 Then ExitLoop
If _imagesearcharea($vidrazvedov[11], 1, $zvezda_area[0], $zvezda_area[1], $zvezda_area[2], $zvezda_area[3], $tx, $ty, 30) = 1 Then ExitLoop
If _imagesearcharea($vidrazvedov[12], 1, $zvezda_area[0], $zvezda_area[1], $zvezda_area[2], $zvezda_area[3], $tx, $ty, 30) = 1 Then ExitLoop
If _imagesearcharea($vidrazvedov[13], 1, $zvezda_area[0], $zvezda_area[1], $zvezda_area[2], $zvezda_area[3], $tx, $ty, 30) = 1 Then
If $tetki = 1 Then $seychactetka = 1
ExitLoop
EndIf
Отправки чего? разведов/геологов? У меня все как часики бегает который день.
Разумеется разведчики. Геологи то не правились. На каком расширении экрана у вас сейчас листает без проблем?
Вот эти ифы оборачиваются в for и один if
Ну не знаю что получится. Тут ифы и не зря. Какой тип разведа первый нашелся в видимой части тот отправляется. Порядок ифов тут роли не играет.
А вы хотите в форе по порядку их перебирать. Не самоелучшее решение
да хочу в for-е перебирать. Почему нет? А 14 if-ов чем лучше? Если получится обернуть в for, то 2ю часть моей задумки будет проще сделать
Вот эти ифы оборачиваются в for и один if
Ну не знаю что получится. Тут ифы и не зря. Какой тип разведа первый нашелся в видимой части тот отправляется. Порядок ифов тут роли не играет.
не совсем) Там перебор - сначала ищутся все развед[0], когда они кончились, ищутся все развед1 и .т.д. до 13го
на работе 1920х1080, дома скажу позже. А почему не листает-то? Я не вижу причин чтобы не листало, если условия правильно расставлены?
Там в видимой части ищутся все разведы от 0 до 13, если в видимой части не нашли никого - т.е. ни один из if не отработал и не вышли из while по exitloop, то проверяется условие
можно ли листнуть звезду
If haveimagearea("media\zvezda_polzunok_ewe_mojno_vniz.bmp", 70, $zvezda_area[0] + 385, $zvezda_area[1] + 200, $zvezda_area[2] + 25, $zvezda_area[3] + 25) = 1 Then
zvezdamovepolzunokdown(1)
Sleep(Random(500, 1000, 1) * $tormoza)
Else
zmemsmennuyukartinku("media\close-zv.bmp", 90, "media\close-zv_.bmp", 90)
Return 1
EndIf
если можно, - if () = 1 - то листается быстро (, т.е. на весь экран zvezdamovepolzunokdown(1)), и засыпает если нельзя - else - то звезда закрывается и ретурн 1
не совсем) Там перебор - сначала ищутся все развед[0], когда они кончились, ищутся все развед1 и .т.д. до 13го
А вы никогда не обращали внимания как они оправляются? Я не однократно видел, то о чем пишу. Сначала отправляются все типы разведов из видимой области, затем листает вниз. И это логично вверх то он не умеет листать. А вы хотите фором это все сломать.
Я когда что-то правлю, смотрю естественно)) И не один раз) Ничего не сломаетсЯ, т.к. каждый раз будет фор заново запускаться. Если у вас 10 зеленых стоят первым, то каждый фор пойдет сначала. Там будет exitloop 2, т.е. выход на не некстфор, а на ендвайл
я же внешний вайл-то оставлю, а вместо if-ов сделаю for. Я так уже сделал в отправке разведов через окно прикла, все отлично отправляется.
Еще есть такой момент что они могут идти не попорядку. Например сортировка не стандартная или названы по хитрому. Код автора с этим работает нормально. Да и вообще работает так зачем его трогать?))
Еще есть такой момент что они могут идти не попорядку. Например сортировка не стандартная или названы по хитрому. Код автора с этим работает нормально. Да и вообще работает так зачем его трогать?))
Он итак будет работать нормально, т.к. каждый раз будет искать сначала. Потому что мильен if-ов ломает мой программистский разум, и затем чтобы потом прикрутить выборочный список для отправки разведов. Там по сути будет то же самое. Ок, я на тесте потусую разведов и проверю код, но не вижу причин чтобы он не работал.
А вообще попробуйте) Может будет лучше и проще)
Дома на ноутбуке тоже 1920х1080 разрешение. Я не вижу проблем по коду нелистания звезды, только если ее бегунок не виден на экране. Последите и опишите проблему поподробнее?
Каэшн будет проще потом - не надо каждый раз менять число спецов! В каунте развездов уже вся инфа же будет, всем будет рулить секция конфига.
совсем другое дело!!
Первый while меняется на этот while
While 1
For $j = 0 To $count Step + 1
If _imagesearcharea($vidrazvedov[$j], 1, $zvezda_area[0], $zvezda_area[1], $zvezda_area[2], $zvezda_area[3], $tx, $ty, 30) = 1 Then
If (($j = 5) or ($j = 13)) and ($tetki = 1) Then $seychactetka = 1
ExitLoop 2
EndIf
Next
; $ii = $ii + 1
; zvezdamovepolzunokdown(0)
; zvezdamovepolzunokdown(0)
; Sleep(Random(500, 1000, 1) * $tormoza)
; If $ii > 8 Then
If haveimagearea("media\zvezda_polzunok_ewe_mojno_vniz.bmp", 70, $zvezda_area[0] + 385, $zvezda_area[1] + 200, $zvezda_area[2] + 25, $zvezda_area[3] + 25) = 1 Then
zvezdamovepolzunokdown(1)
; zvezdamovepolzunokdown(0)
Sleep(Random(500, 1000, 1) * $tormoza)
Else
zmemsmennuyukartinku("media\close-zv.bmp", 90, "media\close-zv_.bmp", 90)
Return 1
EndIf
; EndIf
WEnd
PS! Вдруг Вы знаете как убрать/добавить одним сочетанием структурные отступы в коде? Был бы благодарен, а то сам не нашел(
Неа, не знаю. Завтра затестю на отправке разведчиков.
я на тестовом угнал часть зеленых и золотых на 2й экран, и все отослало, как и должно. Последите, если не будет листать звезду то в какой момент? По идее логика такая - на открытом экране звезды ищутся все разведы в порядке, указанном в Справке
Следопыт, Опытный, Везучий, Простой, Храбрый, Бесстрашный, Авантюрист, Зои, Искренний, Скромный, Зачарованный, Милый, Настойчивый, Безудержный
Если на экране нет активных разведов, то звезда листается на полный эран и снова ищутся скауты. Если листать некуда - звезда закрывается и команда считается выполненной.
Дальше буду крутить выборочную отправку. По логике теперь должно быть проще, но надо переделывать и в основном юните вызов. Я именно там сегодня запутался(
и вдогонку, если добавили новых спецов, может добавите флаг в конфиг для разведов - искать или нет прикл? у Вас это быстрее получится, и мне проще будет уже финальный код допиливать с учетом отправки за приклами если надо. Спасибо!
я вот еще что подумал - а Вы файл media\zvezda_polzunok_ewe_mojno_vniz.bmp не трогали? а то я писал как-то, что не листало у меня звезду, и я его перескринивал, но потом обратно вернул на оригинальный, т.к. в другом месте не листало. И сейчас мой отправка разведов работает с оригинальным скрином
а как передать в функцию массив значений? или просто по имени и уже в функции перебирать значения?
Просто передаете, а в функции перебираете
и вдогонку, если добавили новых спецов, может добавите флаг в конфиг для разведов - искать или нет прикл?
Да, добавлю
я вот еще что подумал - а Вы файл media\zvezda_polzunok_ewe_mojno_vniz.bmp не трогали?
Нет, не трогал. Отправил около 200 разведчиков с новым кодом . Все листается, но пару строк перелистнул и не отправил. Возможно это связано с скоростью, она у меня 0,2 на отправку. Пришлось еще раз запускать отправку.
спасибо, я уже погуглил про массив и даже понял, где у меня затык вчера был.
У меня на 0.3 нормально шлет, 0.2 даже не пробовал, т.к. 0.3 вполне себе хватает.
Надо еще проверить отправку на зафиксированой звезде, когда она каждый раз не открывается, а открыта постоянно.
С открытой звездой будет глючить, т.к. при открытой звезде иконка отправленного разведа не сразу сереет и бот будет тычить на уже ушедшего разведа. Чтобы это победить, надо переделывать отправку ища первого активного разведа.
не сразу сереет
Не сразу сереет если вы до этого посетили остров друга или приключение. Если никуда не заходили сереет моментально)
не сразу сереет
Не сразу сереет если вы до этого посетили остров друга или приключение. Если никуда не заходили сереет моментально)
да??? фигасе! И как, потестили? работает?
Нет, с утра потестю. Но эта фишка давно известна, что если только зайти в игру и ни ходить к другу иили в приключение, то сереет нормально. Как только куда то сходил, все ломается.
спасибо, не знал. Щас я добавлю код, по проблеме с 1 бойцом, поправил и проверил.
Вобщем. При постоянно открытой звезде работает очень плохо. Много пропускает. Так же есть пропуски и в нормальном режиме. Скорее всего нужно вернуть листание построчно, а не экраном целиком. Перелистывает строку хотя в ней остается некоторое количество не отправленных разведов. Но не всегда так. Не понятно с чем связано.
В исходном коде логика листания для меня вообще так и не поддалась никакому объяснению, какой-то счетчик до 6ти, какой-то иф если счетчик больше 5, какая-то левая проверка на 0, есть ли картинка ползунка.
Мне странно почему у Вас пропускает, тем более много, плохой коннект или высокая скорость бота? У меня и у со-ги - тестера все норм всю дорогу.
попробуйте скорость понизить до 0.4 или до 0.5 и проверить.
Замените
zvezdamovepolzunokdown(1)
на
zvezdamovepolzunokdown(0)
Всю голову сломал, что я делаю не так?((( Не хочет работать с массивом , $Arr_kakih я уже что только не перепробовал и _AddArray-ем добавлял и вот через тупо присвоение делаю передает только один параметр и все! и как только не объявлял $Arr_kakih и $Arr_kakih[0] и $Arr_kakih[] и $Arr_kakih[100]
Вот команда в текстовике
Разведчики=0,0,0,Сокровища,Длительный,Простой,Скромный,Настойчивый
Case "Разведчики"
Global $count_kakih = 0, $Arr_kakih[0]
local $for_i
$parametr = StringSplit($komanda[2], ",")
$count_kakih = UBound($parametr) - 6
For $for_i = 0 to $count_kakih - 1 Step + 1
$Arr_kakih[$for_i] = $parametr[6 + $for_i]
TrayTip("", "Какой по счету " & $for_i & " и кто " & $Arr_kakih[$for_i], 0)
Sleep(2000)
Next
Используйте для заполнения массива _ArrayAdd,. Если его не используете то сразу нужно объявлять массив с нужным количеством элементов.
$parametr = StringSplit("0,0,0,Сокровища,Длительный,Простой,Скромный,Настойчивый", ",")
local $count_kakih = UBound($parametr) - 6
local $Arr_kakih[$count_kakih]
For $for_i = 0 to $count_kakih - 1 Step + 1
$Arr_kakih[$for_i] = $parametr[6 + $for_i]
ConsoleWrite("Какой по счету " & $for_i & " и кто " & $Arr_kakih[$for_i] & @LF)
Next
_ArrayDisplay($Arr_kakih)
Так массив заполняется
я че только не пробовал - оно тоже не добавляет, увы(
оба-на, а Ваш текст сработал, щас дальше тогда буду тестить, спасибо
Спасибо за подсказки!!! В первом приближении сделал что-то, но пока кривое. Надо переделывать считывание параметров скаутов из конфига, т.к. у меня получилось долго(
Вот функция runrazved из globalfuncWAR
Func runrazved($adv_srch, $arti, $vidpoiska, $tippoiska, $count_kakih, $Arr_kakih)
Local $adv_search_yes = 0
Local $curr_i, $j = 0, $i = 0, $ii = 0, $tx, $ty
Local $name_razvedov[0], $vidrazvedov[0], $flag_adv_search[0], $slat_yes[0]
Local $allScoutsJson = getDataGroupSpecialists("scouts")
Local $count = UBound($allScoutsJson) - 1
For $j = 0 To $count Step + 1
_ArrayAdd($name_razvedov, Json_Get($allScoutsJson, '[' & $j & '].name'))
_ArrayAdd($vidrazvedov, "media\" & Json_Get($allScoutsJson, '[' & $j & '].img_active'))
_ArrayAdd($flag_adv_search, Json_Get($allScoutsJson, '[' & $j & '].adv_search'))
_ArrayAdd($slat_yes, 0)
Next
WinActivate("The Settlers Онлайн")
Switch $tippoiska
Case "Быстрый"
$kartinkatippoiska = "media\search_treasure_fast.bmp"
$kartinkatippoiska2 = "media\search_treasure_fast_.bmp"
Case "Средний"
$kartinkatippoiska = "media\search_treasure_sredny.bmp"
$kartinkatippoiska2 = "media\search_treasure_sredny_.bmp"
Case "Долгий"
$kartinkatippoiska = "media\search_treasure_long.bmp"
$kartinkatippoiska2 = "media\search_treasure_long_.bmp"
Case "ОченьДолгий"
$kartinkatippoiska = "media\search_treasure_very_long.bmp"
$kartinkatippoiska2 = "media\search_treasure_very_long_.bmp"
Case "Длительный"
$kartinkatippoiska = "media\search_treasure_super_long.bmp"
$kartinkatippoiska2 = "media\search_treasure_super_long_.bmp"
EndSwitch
Switch $vidpoiska
Case "Сокровища"
$kartinkavidpoiska = "media\search_treasure_button.bmp"
$kartinkavidpoiska2 = "media\search_treasure_button_.bmp"
Case "Приключения"
$kartinkavidpoiska = "media\poisk_prikla.bmp"
$kartinkavidpoiska2 = "media\poisk_prikla_.bmp"
EndSwitch
chatoff()
drugioff()
If openzvezda() = 0 Then Return 0
If selecttabatzvezda("specialisti", 0) = 0 Then Return 0
If $count_kakih = 0 Then
; шлем всех
For $j = 0 To $count Step + 1
$slat_yes[$j] = 1
Next
Else
; выбираем кого слать
For $i = 0 To $count ; цикл по всем разведам
For $j = 0 to $count_kakih - 1 ; цикл по разведам, кого нужно отправить
If $Arr_kakih[$j] = $name_razvedov[$i] Then
$slat_yes[$i] = 1
Exitloop
EndIf
Next
Next
EndIf
; Отправка
While 1
If openzvezda() = 1 Then
While 1
For $j = 0 To $count Step + 1
If $slat_yes[$j] = 1 Then
If _imagesearcharea($vidrazvedov[$j], 1, $zvezda_area[0], $zvezda_area[1], $zvezda_area[2], $zvezda_area[3], $tx, $ty, 30) = 1 Then
If ($adv_srch = 1) and ($flag_adv_search[$j] = 1) Then $adv_search_yes = 1
ExitLoop 2
EndIf
EndIf
Next
If haveimagearea("media\zvezda_polzunok_ewe_mojno_vniz.bmp", 70, $zvezda_area[0] + 385, $zvezda_area[1] + 200, $zvezda_area[2] + 25, $zvezda_area[3] + 25) = 1 Then
zvezdamovepolzunokdown(1)
Sleep(Random(500, 1000, 1) * $tormoza)
Else
zmemsmennuyukartinku("media\close-zv.bmp", 90, "media\close-zv_.bmp", 90)
Return 1
EndIf
WEnd
$ii = 0
While $ii < 6
MouseMove($tx, $ty, 10 * $tormoza)
Sleep(300 * $tormoza)
MouseClick("left", $tx + Random(-2, 2, 1), $ty + Random(-2, 2, 1), 1)
removemouse(543, 0, 100)
sleepwhile("media\search_treasure_menu.bmp", 20, 10)
If haveimage("media\search_treasure_menu.bmp", 20) = 1 Then ExitLoop
$ii = $ii + 1
If $ii = 6 Then Return 0
WEnd
If $adv_search_yes = 1 Then
zmemsmennuyukartinku("media\poisk_prikla.bmp", 30, "media\poisk_prikla_.bmp", 30)
go5()
$adv_search_yes = 0
If $kartinkatippoiska = "media\search_treasure_super_long.bmp" Then
zmemsmennuyukartinkuizdem("media\search_treasure_very_long.bmp", 30, "media\search_treasure_very_long_.bmp", 30, "media\search_button_OK_enabled.bmp", 20)
zmemsmennuyukartinku("media\search_button_OK_enabled.bmp", 20, "media\search_button_OK_enabled_.bmp", 20)
EndIf
Else
zmemsmennuyukartinku($kartinkavidpoiska, 30, $kartinkavidpoiska2, 30)
go5()
removemouse(500, 0, 500)
If ($arti = 1) and (haveimage("media\search_artifact.bmp", 20) = 1) Then
zmemsmennuyukartinkuizdem("media\search_artifact.bmp", 30, "media\search_artifact_.bmp", 30, "media\search_button_OK_enabled.bmp", 20)
Else
zmemsmennuyukartinkuizdem($kartinkatippoiska, 30, $kartinkatippoiska2, 30, "media\search_button_OK_enabled.bmp", 20)
EndIf
zmemsmennuyukartinku("media\search_button_OK_enabled.bmp", 20, "media\search_button_OK_enabled_.bmp", 20)
EndIf
EndIf
WEnd
EndFunc
а это фрагмент autobot.au3 по обработке команды Разведчики
Case "Разведчики"
$parametr = StringSplit($komanda[2], ",")
local $count_kakih = UBound($parametr) - 6
local $Arr_kakih[$count_kakih]
For $for_i = 0 to $count_kakih - 1 Step + 1
$Arr_kakih[$for_i] = $parametr[6 + $for_i]
; ConsoleWrite("Какой по счету " & $for_i & " и кто " & $Arr_kakih[$for_i] & @LF)
Next
Local $status = runrazved($parametr[2], $parametr[3], $parametr[4], $parametr[5], $count_kakih, $Arr_kakih)
If $parametr[1] = 0 Then
Return $status
ElseIf $parametr[1] = 1 Then
Return 1
Else
MsgBox(0, "!!!", "Неправильный параметр флага")
Return 0
EndIf
на тесте потестил, отправляет и всех скопом и по списку, и флаги поиск приклов и артов отрабатывает корректно. из проблем - долго открывает (или совсем не открывает) звезду, я руками открывал. Возможно нужно переделать чтение конфига со скаутами, но в этом я совсем не силен(
из проблем - долго открывает (или совсем не открывает) звезду, я руками открывал.
Не подтверждаю. На тесте тоже отправил десяток разных разведов. Все отработало по скорости так же как и всегда. С утра на своих по тестирую. Если все хорошо будет, геологов тоже надо будет переделать так же.
Странно, возможно тормоза были из-за того, что два окна было открыто - основный сервер и тестовый. Отправил медленных на основном сервере без тормозов.
В смысле геологов также? Выборочным списком?
А чтение из конфига оставляем мое?
А чтение из конфига оставляем мое?
Врядли там что то лучше можно придумать. Да и не нужно оно.
В смысле геологов также? Выборочным списком?
Да. С ними проще.
по Геологам не соглашусь, для разведов и геологов разная отправка: разведы скопом и по типу, а геологи количеством.
Разведы
Написание: Разведчики=Флаг, Поведение_Бесстрашный_Исследователь, Артефакты, Вид_поиска, Тип_поиска, [Опционально: Какой_Разведчик]
Геологи
Написание: Геологи=Флаг, Тип_залежи, Сколько_отправить, [Опционально: Какой_геолог]
Почему я занялся разведами - у них разное время прихода из одного и того же типа поиска, есть Зеленые и Авантюристы - самые быстрые, есть Следопыты и разные тетки, а есть Простые, Скромные и Настойчивые - в ивент мне удобнее каждого слать так, чтобы приходили все в одно время - Зеленых и Авантюристок в Длительный, Медленных в Долгий, остальных в Самый долгий. Поэтому и попробовал сократить число строк в текстовике. А для геологов это не так актуально, поэтому я бы не трогал геологов. Если оставить количество для совместимости со старыми текстами, то как считать? 6 - это два каменных и 4 археолога?
Все верно. Не надо.
на быстрых скоростях, у меня вот сегодня даже на 0.3 бывает лаг, что описание разведа перекрывает область снизу справа Примерно так, только больше - и тогда эта область перестает быть видимой для бота, и разведы, которые туда попали, пропускаются
Надо мышь сдвигать куда-то в другое место - выше/левее
я понял, зачем были нужны эти лишние счетчики и иф перед листанием.
В функции отправки разведов runrazved нужно заменить с ; отправка до EndFunc следующим кодом Я комменты расставил, почему я так думаю - их можно прибить
; Отправка
$ii = 0
While 1
If openzvezda() = 1 Then
While 1
For $j = 0 To $count Step + 1
If $slat_yes[$j] = 1 Then
If _imagesearcharea($vidrazvedov[$j], 1, $zvezda_area[0], $zvezda_area[1], $zvezda_area[2], $zvezda_area[3], $tx, $ty, 30) = 1 Then
If ($adv_srch = 1) and ($flag_adv_search[$j] = 1) Then $adv_search_yes = 1
ExitLoop 2
EndIf
EndIf
Next
; прошли цикл по всем разведам, и не нашли кого можно отправить - не вышли по ExitLoop 2
$ii = $ii + 1
; перемещаем мышь в нижний левый угол звезды можно вместо этого написать go5() - это переход в точку (5,5), но это дольше, мне кажется, хотя возможно стабильнее
MouseMove($zvezda_area[0], $zvezda_area[3], 10* $tormoza)
; если 5 раз подергали мышь и не нашли, кого отправить - то листаем звезду
If $ii > 5 Then
If haveimagearea("media\zvezda_polzunok_ewe_mojno_vniz.bmp", 70, $zvezda_area[0] + 385, $zvezda_area[1] + 200, $zvezda_area[2] + 25, $zvezda_area[3] + 25) = 1 Then
zvezdamovepolzunokdown(1)
Sleep(Random(500, 1000, 1) * $tormoza)
Else
zmemsmennuyukartinku("media\close-zv.bmp", 90, "media\close-zv_.bmp", 90)
Return 1
EndIf
EndIf
WEnd
$ii = 0
While $ii < 6
MouseMove($tx, $ty, 10 * $tormoza)
Sleep(300 * $tormoza)
MouseClick("left", $tx + Random(-2, 2, 1), $ty + Random(-2, 2, 1), 1)
removemouse(543, 0, 100)
sleepwhile("media\search_treasure_menu.bmp", 20, 10)
If haveimage("media\search_treasure_menu.bmp", 20) = 1 Then ExitLoop
$ii = $ii + 1
If $ii = 6 Then Return 0
WEnd
If $adv_search_yes = 1 Then
zmemsmennuyukartinku("media\poisk_prikla.bmp", 30, "media\poisk_prikla_.bmp", 30)
go5()
$adv_search_yes = 0
If $kartinkatippoiska = "media\search_treasure_super_long.bmp" Then
zmemsmennuyukartinkuizdem("media\search_treasure_very_long.bmp", 30, "media\search_treasure_very_long_.bmp", 30, "media\search_button_OK_enabled.bmp", 20)
zmemsmennuyukartinku("media\search_button_OK_enabled.bmp", 20, "media\search_button_OK_enabled_.bmp", 20)
EndIf
Else
zmemsmennuyukartinku($kartinkavidpoiska, 30, $kartinkavidpoiska2, 30)
go5()
removemouse(500, 0, 500)
If ($arti = 1) and (haveimage("media\search_artifact.bmp", 20) = 1) Then
zmemsmennuyukartinkuizdem("media\search_artifact.bmp", 30, "media\search_artifact_.bmp", 30, "media\search_button_OK_enabled.bmp", 20)
Else
zmemsmennuyukartinkuizdem($kartinkatippoiska, 30, $kartinkatippoiska2, 30, "media\search_button_OK_enabled.bmp", 20)
EndIf
zmemsmennuyukartinku("media\search_button_OK_enabled.bmp", 20, "media\search_button_OK_enabled_.bmp", 20)
EndIf
EndIf
WEnd
Сразу не разберешься что для чего. Заменю.
Гораздо стабильнее стало работать при постоянно открытой звезде. Никого сегодня не пропустил. Осталось, наверное, геологов еще так же подшаманить)
Ну в геологах эти счетчики остались, из оптимизации там можно if-ы обернуть в один фор и тогда не надо будет количество геологов руками менять . Чуть позже сделаю
Подправил отправку спецов.
Разведы - у меня их много, даже не так, очень много, поэтому у меня не докручивало звезду до конца и подвисало из-за этого, приходилось докручивать ползунок до низа руками. Какая логика лежала в основе этой функции у автора, я хз. В частности зачем нужен счетчик ii в первом цикле и зачем нужно условие ii > 5 для проверки ползунка в звезде - выше моего понимания. Плюс еще бесило, зачем при поиске артов бот сначала прыгает на поиск сокровища, а потом перепрыгивает на арты. Заменил так. У меня за вчера-сегодня при цикла поиска отбегало, еще тестил случай, когда слать было некого, все тоже отработало. Пока писал, возникло такое предложение - раз у нас есть конфиг для разведов, может введем туда признак для любого разведа, специализируется ли он на поисках приклов, и если да - то пусть тоже идет за приклами (а не только Бесстрашная и Безудержная тетки). К примеру у меня за приклами ходят авантюристки, знаю тех, у кого ходят туда зеленые леприконы. И тогда при настройке флагов ВСЕ разведы вне ивента будут отправяться одной командой, например,
Разведчики=1,1,1,Сокровища,Длительный