Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Eney on January 10, 2018, 11:25:31 PM
-
Нужно чтобы в подпрограмме SUB(bast) все действия выполнялись последовательно и другое не начиналось пока не закончится выполнение предыдущего. По факту доходит до выполнения подпрограммы atk() и там после выполнения 1 условия все останавливается.
Сама по себе подпрограмма atk() работает корректно.
SUB(bast)
GETSCREEN
IF_PIXEL_IN(1294,467, 1302,473, 1711650) // áàøíÿ 1
LCLICK(1307,457)
WAITMS(500)
atk()
END_IF
IF_PIXEL_IN(1290,504, 1302,511, 855307) //áàøíÿ 2
LCLICK(1280,494)
WAITMS(500)
atk()
END_IF
IF_PIXEL_IN(1227,528, 1238,533, 1579808) //áàøíÿ 3
LCLICK(1249,517)
WAITMS(500)
atk()
END_IF
IF_PIXEL_IN(1255,559, 1268,566, 1448222) //áàøíÿ 4
LCLICK(1280,550)
WAITMS(500)
atk()
END_IF
IF_PIXEL_IN(1288,593, 1299,602, 1843493) //áàøíÿ 5
LCLICK(1309,584)
WAITMS(500)
atk()
END_IF
IF_PIXEL_IN(1350,593, 1362,601, 1711908) //áàøíÿ 6
LCLICK(1370,587)
WAITMS(500)
atk()
END_IF
IF_PIXEL_IN(1445,594, 1460,603, 2566701) //áàøíÿ 7
LCLICK(1437,584)
WAITMS(500)
atk()
END_IF
IF_PIXEL_IN(1476,559, 1489,569, 2171943) //áàøíÿ 8
LCLICK(1464,551)
WAITMS(500)
atk()
END_IF
IF_PIXEL_IN(1507,528, 1519,535, 2040358) //áàøíÿ 9
LCLICK(1497,519)
WAITMS(500)
atk()
END_IF
IF_PIXEL_IN(1444,504, 1455,512, 1975080) //áàøíÿ 10
LCLICK(1464,498)
WAITMS(500)
atk()
END_IF
IF_PIXEL_IN(1414,467, 1424,475, 2235671) //áàøíÿ 11
LCLICK(1433,458)
WAITMS(500)
atk()
END_IF
END_SUB
SUB(atk)
GETSCREEN
IF_PIXEL_IN(1296,571, 1330,590, 14385747) //îêíî àòàêà "íàïàñòü"
LCLICK($_return1, $_return2)
WAITMS(500)
END_IF
IF_PIXEL_IN(1400,796, 1437,812, 2071390) // îêíî âûáîðà àðìèè "íà÷àòü áîé"
LCLICK($_return1, $_return2)
WAITMS(500)
END_IF
IF_PIXEL_IN(1294,832,1322,846, 13729617) //íà÷àëî áîÿ "íà÷àòü áîé"
LCLICK($_return1, $_return2)
WAITMS(500)
LCLICK(1352,774) // êëèê íà óñêîðåíèå àíèìàöèè
END_IF
IF_PIXEL_IN(1354,639,1374,654, 13794897) //çàâåðøåíèå "ïðîäîëæèòü"
LCLICK($_return1, $_return2)
WAITMS(1000)
END_IF
IF_PIXEL_IN(1221,608, 1233,618, 10313019) //ïîðàæåíèå "ïðîäîëæèòü"
LCLICK($_return1, $_return2)
WAITMS(1000)
END_IF
END_SUB
WHILE($var < 5)
bast()
WAITMS(500)
END_CYC
-
Чудеса прям. Все подпрограммы вызываются до тела и что не вылазит ошибка pop() ?
Не верю!
-
Чудеса прям. Все подпрограммы вызываются до тела и что не вылазит ошибка pop() ?
Не верю!
Ошибки нет. Извиняюсь тело у меня в конце подпрограм, это я в примере почему то вверх прилепил.
Я немного разобрался почему подпрограмма atk() прерывалась , так как содержимое экрана менялось то надо опять прописывать функцию GETSCREEN.
Но тогда возникает другая проблема в определенном месте действие происходит дольше чем появляется новое окно для сканирования через GETSCREEN и в итоге на этом месте зависает.
Видимо надо добавить условие что если не находит нужный пиксель то возвращает опять на GETSCREEN. Только как это сделать еще не разобрался.
И вообще все у меня очень громоздко и наляписто я уверен что это можно сделать все намного проще.
-
Слева в редакторе есть раздел "шаблоны". Самые важные паттерны уже прописаны там. Всякие ожидания и пр.
-
Подскажите где тут ошибка, при выполнении цикла нажимает 2 раза "поражение" либо "победа" в зависимости от условия но должно же кликнуть только 1 раз.
SUB(atk)
$check = 0
WHILE($check = 0)
GETSCREEN
IF_PIXEL_IN(179,571, 200,592, 12415305) //окно атака "напасть"
$check = 1
LOGWRITE ("окно атака")
WAIT(1)
LCLICK($_return1, $_return2)
WAIT(1)
LCLICK(316,810) // выбор армии
WAIT(1)
LCLICK(250,846) // начать бой
WAIT(1)
LCLICK(263,783) // ускорение
ELSE
WAITMS(50)
END_IF
END_CYC
$check1 = 0
WHILE($check1 = 0)
GETSCREEN
IF_PIXEL_IN(251,645, 267,660, 12809804) //победа "продолжить"
$check1 = 1
LCLICK($_return1, $_return2)
LOGWRITE ("победа")
ELSE
IF_PIXEL_IN(220,612, 238,623, 10181433)
$check1 = 1
LCLICK($_return1, $_return2)
LOGWRITE ("поражение")
END_IF
END_CYC
END_SUB
-
Во втором цикле не хватает окончания END_IF
-
Спасибо, не заметил.
Возникла такая проблема. При выполнении программы bast() почему то не всегда срабатывает клик мышкой, тоесть в скрипте по логам все нормально а в игре нет и поэтому на этом моменте скрипт останавливается.
Логика скрипта такая что он проверяет захвачены ли башни (определяет по черным полоскам под ними) если да то делается клик по нему мышкой после чего открывается окно для атаки и запускается программа atk(), по ее завершении скрипт продолжает дальше проверять.
Как тут можно реализовать чтобы делал попытки сделать клик мышкой по башне если с 1 раза не получилось?
Для наглядности вот скриншот башни
(https://ibb.co/dUDpsR)
SUB(atk)
$check = 0
WHILE($check = 0)
GETSCREEN
IF_PIXEL_IN(179,571, 200,592, 12415305) //окно атака "напасть"
$check = 1
LOGWRITE ("окно атака")
WAIT(1)
LCLICK($_return1, $_return2)
WAIT(1)
LCLICK(316,810) // выбор армии
WAIT(1)
LCLICK(250,846) // начать бой
WAIT(1)
LCLICK(263,783) // ускорение
ELSE
WAITMS(50)
END_IF
END_CYC
$check1 = 0
WHILE($check1 = 0)
GETSCREEN
IF_PIXEL_IN(251,645, 267,660, 12809804) //победа "продолжить"
$check1 = 1
WAIT(1)
LCLICK($_return1, $_return2)
LOGWRITE ("победа")
ELSE
IF_PIXEL_IN(220,612, 238,623, 10181433)
$check1 = 1
WAIT(1)
LCLICK($_return1, $_return2)
LOGWRITE ("поражение")
END_IF
END_IF
END_CYC
WAIT(1)
END_SUB
SUB(svoboda)
GETSCREEN
IF_PIXEL_IN(237,363, 253,377, 5262149) //если баст захвачен на карте
LOGWRITE ("баст под щитом")
WAIT(1)
LCLICK(346,956) // альянс
WAIT(1)
LCLICK(446,624) // бастион
WAIT(1)
ELSE
LOGWRITE ("баст без щита")
WAIT(1)
LCLICK(257,500) // клик на баст
WAIT(1)
LCLICK(246,571) // обьявить войну
WAIT(1)
LCLICK(264,64) // пустое
END_IF
GETSCREEN
IF_PIXEL_IN(306,339, 321,362, 11495748) //если баст захвачен
LCLICK($_return1, $_return2) //клик на освободить
WAIT(1)
END_IF
GETSCREEN
IF_PIXEL_IN(102,547, 117,566, 10116150) //Да
LCLICK($_return1, $_return2) //клик на освободить
WAIT(1)
LCLICK(49,945) // на карту
WAIT(1)
LCLICK(257,500) // клик на баст
WAIT(1)
LCLICK(246,571) // обьявить войну
WAIT(1)
DBLCLICK(264,64) // пустое
END_IF
END_SUB
SUB(bast)
svoboda()
WAIT(1)
GETSCREEN
IF_PIXEL_IN(191,467, 198,475, 1053206) // башня 1
WAIT(1)
LCLICK(206,453)
LOGWRITE ("башня 1")
WAIT(1)
atk()
LOGWRITE ("атака завершена")
END_IF
GETSCREEN
IF_PIXEL_IN(161,506, 167,510, 328984) //башня 2
WAIT(1)
LCLICK(177,495)
LOGWRITE ("башня 2")
WAIT(1)
atk()
LOGWRITE ("атака завершена")
END_IF
GETSCREEN
IF_PIXEL_IN(126,528, 136,535, 1250585) //башня 3
WAIT(1)
LCLICK(146,520)
LOGWRITE ("башня 3")
atk()
LOGWRITE ("атака завершена")
END_IF
GETSCREEN
IF_PIXEL_IN(155,559, 165,567, 1710876) //башня 4
WAIT(1)
LCLICK(176,549)
LOGWRITE ("башня 4")
atk()
LOGWRITE ("атака завершена")
END_IF
GETSCREEN
IF_PIXEL_IN(182,594, 196,604, 1119256) //башня 5
WAIT(1)
LCLICK(205,585)
LOGWRITE ("башня 5")
atk()
LOGWRITE ("атака завершена")
END_IF
GETSCREEN
IF_PIXEL_IN(249,595, 258,600, 1119514) //башня 6
WAIT(1)
LCLICK(268,586)
LOGWRITE ("башня 6")
atk()
LOGWRITE ("атака завершена")
END_IF
GETSCREEN
IF_PIXEL_IN(344,594, 355,602, 1447962) //башня 7
WAIT(1)
LCLICK(334,584)
LOGWRITE ("башня 7")
atk()
LOGWRITE ("атака завершена")
END_IF
GETSCREEN
IF_PIXEL_IN(374,561, 386,569, 1316376) //башня 8
WAIT(1)
LCLICK(363,552)
LOGWRITE ("башня 8")
atk()
LOGWRITE ("атака завершена")
END_IF
GETSCREEN
IF_PIXEL_IN(374,527, 384,536, 987671) //башня 9
WAIT(1)
LCLICK(391,519)
LOGWRITE ("башня 9")
atk()
LOGWRITE ("атака завершена")
END_IF
GETSCREEN
IF_PIXEL_IN(341,503, 353,515, 856084) //башня 10
WAIT(1)
LCLICK(360,498)
LOGWRITE ("башня 10")
atk()
LOGWRITE ("атака завершена")
END_IF
GETSCREEN
IF_PIXEL_IN(309,466, 320,475, 1775636) //башня 11
WAIT(1)
LCLICK(331,457)
LOGWRITE ("башня 11")
atk()
LOGWRITE ("атака завершена")
END_IF
END_SUB
WHILE($var < 5)
bast()
WAIT(1)
END_CYC
-
После 17 строки добавить повторную проверку bast() ?
-
После 17 строки добавить повторную проверку bast() ?
Не выйдет так ошибку pop() выдает
-
Огромное спасибо. Я еще изучаю скипты)
Только я не понимаю как тут реализован цикл. Действия все проходят отлично до атаки 1 башни потом останавливается весь скипт.
Еще не понятно для чего нужен $par6
-
тогда у меня что то с кликером так как скрипты не повторяются. В настройках стоит выполнять неограниченное количество раз. Если записывать действия мыши то повторяется а так скрипт доходит до 1 башни и все
-
Большое спасибо скрипт теперь проверяет все башни. Но проблема с неудачным кликом по башне осталась. Когда он делает клик по башне и он не срабатывает то он начинает ждать появления окна атаки и ничего дальше не предпринимает пока ее не увидит.
-
Сразу говорю что очень благодарен Вам за помощь и за уделенное мне время.
Так как стояло жесткое условие ничего не делать пока не увидит окно Атаки я поставил таймер и туда.
Работает как и положено но очень часто не срабатывают клики и он заново пробует спустя 15+ сек (так как максимальное время по моим подсчетам до 15 сек) Но тут есть дна проблемка. С момента первой атаки на башню (тоесть с момента обьявления войны на бастион) появляется отсчет времени, дается 5 минут на атаку всех 11 башен и нужно успеть вложиться в это время. Но из за этих не понятных не страбативаний кликов это часто не получается((
Вот так поставил таймер
SUB(bashnya, $par1,$par2,$par3,$par4,$par5,$par6,$par7,$par8)
GETSCREEN
IF_PIXEL_IN($par1,$par2,$par3,$par4,$par5) // башня
Yes( $par6,$par7,$par8)
$time = $_time_t + 2
$check = 0 // (atk)
WHILE(($check = 0)&($time > $_time_t))
GETSCREEN
IF_PIXEL_IN(179,571, 200,592, 12415305) //окно атака "напасть"
Yes("окно атака",$_return1, $_return2)
WAIT(1)
LCLICK(283,517) // 8210987
WAIT(1)
LCLICK(200,581) // 9656633
WAIT(1)
LCLICK(316,810) // выбор армии
WAIT(1)
LCLICK(250,846) // начать бой
WAITMS(300)
LCLICK(263,783) // ускорение
ELSE
WAITMS(50)
END_IF
END_CYC
$time = $_time_t + 15 // таймер на 10 секунд
$check = 0
WHILE(($check = 0)&($time > $_time_t))
GETSCREEN
IF_PIXEL_IN(251,645, 267,660, 12809804) //победа "продолжить"
Yes("победа",$_return1, $_return2)
ELSE
IF_PIXEL_IN(220,612, 238,623, 10181433)
Yes("поражение",$_return1, $_return2)
END_IF
END_IF
END_CYC
WAITMS(100)
LOGWRITE ("атака завершена")
END_IF
END_SUB
-
Игра мобильная, запускаю с эмулятора NOX
-
Нее)) Это я к тому что возможно эта информация как-то поможет в этом деле))
-
В логах выводит цифру 3 в кликах, я поставил $curs=3 . Клики по прежнему не всегда срабатывают но за счёт того что вложили время второго цикла в первый общая скорость работы скрипта намного возросла. Поэтому работает намного стабильнее, если не сработал клик по башне в первый раз то на 3 уж точно срабатывает)
-
Можно попробовать везде расставить Move, перед Wait(1-3 сек), Lclick, что бы прокликиловалось. Лично у меня в игрушке в начали подсветка кнопки прорисовывается при наведении, только потом можно нажать.