Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: Eney on January 10, 2018, 11:25:31 PM

Title: Помогите упорядочить действия выполнения подпрограм
Post by: Eney on January 10, 2018, 11:25:31 PM
Нужно чтобы в подпрограмме SUB(bast) все действия выполнялись последовательно и другое не начиналось пока не закончится выполнение предыдущего. По факту доходит до выполнения подпрограммы atk() и там после выполнения 1 условия все останавливается.
Сама по себе подпрограмма atk() работает корректно.


Code: [Select]
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
Title: Re: Помогите упорядочить действия выполнения подпрограм
Post by: Vint on January 11, 2018, 12:05:14 AM
Чудеса прям. Все подпрограммы вызываются до тела и что не вылазит ошибка pop() ?
Не верю!
Title: Re: Помогите упорядочить действия выполнения подпрограм
Post by: Eney on January 11, 2018, 12:13:38 AM
Чудеса прям. Все подпрограммы вызываются до тела и что не вылазит ошибка pop() ?
Не верю!
Ошибки нет. Извиняюсь тело у меня в конце подпрограм, это я в примере почему то вверх прилепил.
Я немного разобрался почему подпрограмма atk() прерывалась , так как содержимое экрана менялось то надо опять прописывать функцию GETSCREEN.
Но тогда возникает другая проблема в определенном месте действие происходит дольше чем появляется новое окно для сканирования через GETSCREEN и в итоге на этом месте зависает.
Видимо надо добавить условие что если не находит нужный пиксель то возвращает опять на GETSCREEN. Только как это сделать еще не разобрался.
И вообще все у меня очень громоздко и наляписто я уверен что это можно сделать все намного проще.
Title: Re: Помогите упорядочить действия выполнения подпрограм
Post by: Vint on January 11, 2018, 08:12:26 AM
Слева в редакторе есть раздел "шаблоны". Самые важные паттерны уже прописаны там. Всякие ожидания и пр.
Title: Re: Помогите упорядочить действия выполнения подпрограм
Post by: Eney on January 13, 2018, 01:17:00 AM
Подскажите где тут ошибка, при выполнении цикла нажимает 2 раза "поражение" либо "победа" в зависимости от условия но должно же кликнуть только 1 раз.


Code: [Select]
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
Title: Re: Помогите упорядочить действия выполнения подпрограм
Post by: Oraven on January 13, 2018, 06:20:26 AM
Во втором цикле не хватает окончания END_IF
Title: Re: Помогите упорядочить действия выполнения подпрограм
Post by: Eney on January 13, 2018, 03:27:02 PM
Спасибо, не заметил.

Возникла такая проблема. При выполнении программы bast() почему то не всегда срабатывает клик мышкой, тоесть в скрипте по логам все нормально а в игре нет и поэтому на этом моменте скрипт останавливается.
Логика скрипта такая что он проверяет захвачены ли башни (определяет по черным полоскам под ними) если да то делается клик по нему мышкой после чего открывается окно для атаки и запускается программа atk(), по ее завершении скрипт продолжает дальше проверять.
Как тут можно реализовать чтобы делал попытки сделать клик мышкой по башне если с 1 раза не получилось?
Для наглядности вот скриншот башни
(https://ibb.co/dUDpsR)

Code: [Select]
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
Title: Re: Помогите упорядочить действия выполнения подпрограм
Post by: Spw on January 13, 2018, 05:12:54 PM
После 17 строки добавить повторную проверку bast() ?
Title: Re: Помогите упорядочить действия выполнения подпрограм
Post by: Eney on January 13, 2018, 08:10:31 PM
После 17 строки добавить повторную проверку bast() ?
Не выйдет так ошибку pop() выдает
Title: Re: Помогите упорядочить действия выполнения подпрограм
Post by: Eney on January 13, 2018, 11:11:36 PM
Огромное спасибо. Я еще изучаю скипты)
Только я не понимаю как тут реализован цикл. Действия все проходят отлично до атаки 1 башни потом останавливается весь скипт.
Еще не понятно для чего нужен $par6
Title: Re: Помогите упорядочить действия выполнения подпрограм
Post by: Eney on January 14, 2018, 01:31:11 AM
тогда у меня что то с кликером так как скрипты не повторяются. В настройках стоит выполнять неограниченное количество раз. Если записывать действия мыши то повторяется а так скрипт доходит до 1 башни и все
Title: Re: Помогите упорядочить действия выполнения подпрограм
Post by: Eney on January 14, 2018, 03:40:32 AM
Большое спасибо скрипт теперь проверяет все башни. Но проблема с неудачным кликом по башне осталась. Когда он делает клик по башне и он не срабатывает то он начинает ждать появления окна атаки и ничего дальше не предпринимает пока ее не увидит.
Title: Re: Помогите упорядочить действия выполнения подпрограм
Post by: Eney on January 14, 2018, 07:59:43 PM
Сразу говорю что очень благодарен Вам за помощь и за уделенное мне время.
Так как стояло жесткое условие ничего не делать пока не увидит окно Атаки я поставил таймер и туда.
Работает как и положено но очень часто не срабатывают клики и он заново пробует спустя 15+ сек (так как максимальное время по моим подсчетам до 15 сек) Но тут есть дна проблемка. С момента первой атаки на башню (тоесть с момента обьявления войны на бастион) появляется отсчет времени, дается 5 минут на атаку всех 11 башен и нужно успеть вложиться в это время. Но из за этих не понятных не страбативаний кликов это часто не получается((

Вот так поставил таймер
Code: (clickermann) [Select]
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
Title: Re: Помогите упорядочить действия выполнения подпрограм
Post by: Eney on January 14, 2018, 09:26:49 PM
Игра мобильная, запускаю с эмулятора NOX
Title: Re: Помогите упорядочить действия выполнения подпрограм
Post by: Eney on January 14, 2018, 11:17:21 PM
Нее)) Это я к тому что возможно эта информация как-то поможет в этом деле))
Title: Re: Помогите упорядочить действия выполнения подпрограм
Post by: Eney on January 15, 2018, 12:35:20 AM
В логах выводит цифру 3 в кликах, я поставил $curs=3 . Клики по прежнему не всегда срабатывают но за счёт того что вложили время второго цикла в первый общая скорость работы скрипта намного возросла.  Поэтому работает намного стабильнее, если не сработал клик по башне в первый раз то на 3 уж точно срабатывает)
Title: Re: Помогите упорядочить действия выполнения подпрограм
Post by: vizaritm on January 19, 2018, 06:32:03 PM
Можно попробовать везде расставить Move, перед Wait(1-3 сек), Lclick, что бы прокликиловалось. Лично у меня в игрушке в начали подсветка кнопки прорисовывается при наведении, только потом можно нажать.