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

Основной раздел => Общие вопросы => Topic started by: Azaar on October 14, 2018, 01:43:00 PM

Title: действие по цвету
Post by: Azaar on October 14, 2018, 01:43:00 PM
Подскажите пожалуйста как сделать так чтобы
если на пикели (519, 642) есть цвет 100 нужно сделать  действие А
а если на этом пикселе цвет 200 то сделать действие Б

и второе (отдельно)
если в пикселе (111, 111) в течении 30 сек не появился цвет 100
то сделать клик в пикселе (222, 222)
 
Title: Re: действие по цвету
Post by: Oraven on October 14, 2018, 02:16:27 PM
Code: (clickermann) [Select]
GETSCREEN
IF(PXL(519,642) = 100)
   // действие А
ELSE
   IF(PXL(519,642) = 200)
      // действие B
   END_IF
END_IF

Code: (clickermann) [Select]
$time = $_ms + 30000 // 30 сек
GETSCREEN
WHILE((PXL(111,111)!100)&($time > $_ms))
   WAITMS(50)
   GETSCREEN
END_CYC
IF($time < $_ms)
   LCLICK(222,222)
   WAITMS(50)
END_IF
Title: Re: действие по цвету
Post by: Azaar on October 14, 2018, 02:39:18 PM
спасибо большое
Title: Re: действие по цвету
Post by: PasqualeAcosta on October 19, 2018, 11:15:12 AM
День добрый! Не стал создавать отдельную тему. С программированием особо не знаком и пытаюсь первые действия на основе этих скриптов сделать. Подсобите пожалуйста.
Суть такова, нужно в течении 10 секунд проверять цвет (с учетом 6 коррекции), если цвет совпал, то без ожидания 10 секунд делать клик по указанным координатам. Если же за 10 секунд цвет не был найдет, делать клик в другое место.
Я почитал азы, но так и не понял еще в какой последовательности выполняются действия. Подскажите как быть, желательно с пояснением. И прошу прощение если задаю глупые вопросы.
Скрипт который пробовал.
Quote
WAIT(5)
LCLICK(899,560)  // 2331970
WAIT(1)
$time = $_ms + 10000 // 10 сек ищет цвет
GETSCREEN
WHILE((PXL(642,97)=16777215)&($time > $_ms))
   WAITMS(50)
   GETSCREEN
   COLORMODE(6,642,97,642,97)
END_CYC
WAITMS(1000)
LCLICK(647,163)  // делает клик если находит цвет
WAITMS(50)
IF($time < $_ms)
   LCLICK(1330,57)  // делает клик если не находит
   WAITMS(50)
END_IF
halt
Title: Re: действие по цвету
Post by: Oraven on October 19, 2018, 11:25:44 AM
День добрый! Не стал создавать отдельную тему. С программированием особо не знаком и пытаюсь первые действия на основе этих скриптов сделать. Подсобите пожалуйста.
Суть такова, нужно в течении 10 секунд проверять цвет (с учетом 6 коррекции), если цвет совпал, то без ожидания 10 секунд делать клик по указанным координатам. Если же за 10 секунд цвет не был найдет, делать клик в другое место.

Code: (clickermann) [Select]
WAIT(5)
LCLICK(899,560)
WAITMS(100)

$time = $_ms + 10000 // 10 сек ищет цвет
WHILE($time > $_ms)
   GETSCREEN(642,97,642,97)
   COLORMODE(6,642,97,642,97)
   IF(PXL(642,97)=16777215)
      LCLICK(647,163)  // делает клик если находит цвет
      WAITMS(500)
      $time = 0
   ELSE
      WAITMS(50)
   END_IF
END_CYC
IF($time ! 0)
   LCLICK(1330,57)  // делает клик если не находит
   WAITMS(50)
END_IF

halt
Title: Re: действие по цвету
Post by: PasqualeAcosta on October 19, 2018, 11:33:50 AM
Огромное спасибо за оперативность, все работает. Разобрал пример, теперь есть понимание.
Title: Re: действие по цвету
Post by: PasqualeAcosta on October 19, 2018, 07:29:04 PM
Не могу разобраться в данной части скрипта, что я использую не правильно. Глючит жутко и совсем не логично работает. Может какие то команды не соответствуют чему то.
То работает нормально, то судя по логам (сделал маяки) цыклирует по глукам 1, 2, 3, 1, 2, 3, а иногда улетает в 1,2,4 что тоже не логично, хотя ситуация одинаковая.
Quote
perviy:
$time = $_ms + 10000 // 10 сек ищет цвет
WHILE($time > $_ms)
   GETSCREEN(642,97,642,97)
   LOGWRITE ("глюк1")
   COLORMODE(6,642,97,642,97)
   IF(PXL(642,97)=16777215)
      WAITMS(500)
      LCLICK(647,163)
      LOGWRITE ("глюк2")
      GETSCREEN(886,501,886,501)     
      COLORMODE(6,886,501,886,501)
      IF(PXL(886,501)=6118493)     
         WAITMS(1000)
         LCLICK(574,617)
         LOGWRITE ("глюк3")
         WAITMS(2000)
         GOTO(perviy)
      ELSE
         WAITMS(500)
         LCLICK(958,500)
         LOGWRITE ("глюк4")
         WAITMS(3000)
         $time = 0
      END_IF
      $time = 0
   ELSE
      WAITMS(50)
   END_IF
END_CYC
IF($time ! 0)
   LCLICK(574,617)
   LOGWRITE ("глюк5")
   GOTO(perviy)
Title: Re: действие по цвету
Post by: Oraven on October 19, 2018, 08:05:29 PM
Не могу разобраться в данной части скрипта, что я использую не правильно. Глючит жутко и совсем не логично работает. Может какие то команды не соответствуют чему то.
То работает нормально, то судя по логам (сделал маяки) цыклирует по глукам 1, 2, 3, 1, 2, 3, а иногда улетает в 1,2,4 что тоже не логично, хотя ситуация одинаковая.

Из циклов выпрыгивать через гото нельзя! Не говоря уже что гото тут вообще не нужно.
Code: (clickermann) [Select]
$time = $_ms + 10000 // 10 сек ищет цвет
WHILE($time > $_ms)
   GETSCREEN(642,97,642,97)
   LOGWRITE ("глюк1")
   COLORMODE(6,642,97,642,97)
   IF(PXL(642,97)=16777215)
      WAITMS(500)
      LCLICK(647,163)
      LOGWRITE ("глюк2")
      GETSCREEN(886,501,886,501)
      COLORMODE(6,886,501,886,501)
      IF(PXL(886,501)=6118493)
         WAITMS(1000)
         LCLICK(574,617)
         LOGWRITE ("глюк3")
         WAITMS(2000)
         $time = 0 // присваивая переменной 0 мы выйдем из цикла WHILE($time > $_ms)
      ELSE
         WAITMS(500)
         LCLICK(958,500)
         LOGWRITE ("глюк4")
         WAITMS(3000)
         $time = 0
      END_IF 
   ELSE
      WAITMS(50)
   END_IF
END_CYC
IF($time ! 0) // это условие выполнится только если $time не равна 0
   LCLICK(574,617)
   WAITMS(50)
   LOGWRITE ("глюк5")
END_IF
Title: Re: действие по цвету
Post by: PasqualeAcosta on October 19, 2018, 08:12:27 PM
Первый день в этом варюсь. Прошу прощения и спасибо!
Title: Re: действие по цвету
Post by: dramster on October 19, 2018, 08:21:56 PM
Вот это вот условие IF(PXL(886,501)=6118493) никогда не выполнится. Так как перед ним стоит COLORMODE(6), а в шестом колормоде такой цвет отсутствует.

Варианта два, либо убирать колормод, либо ставить верный цвет. Твой цвет 6118493 -  в колормоде №6 он равен 8355711

Title: Re: действие по цвету
Post by: PasqualeAcosta on October 19, 2018, 10:02:17 PM
Вот это вот условие IF(PXL(886,501)=6118493) никогда не выполнится. Так как перед ним стоит COLORMODE(6), а в шестом колормоде такой цвет отсутствует.

Варианта два, либо убирать колормод, либо ставить верный цвет. Твой цвет 6118493 -  в колормоде №6 он равен 8355711


А как так получилось? Я вроде все через лупу и алт+Q делал? Как мне тогда цвет в 6 колор перевести?
И можно ли в некоторых случаях использовать GOTO не в циклах, а по итогам IF вне цикла ?
P.S. проверил везде, как то странно вышло, в части скрипта указан цвет как вы и написали, а где то тот что я в части указал.
Title: Re: действие по цвету
Post by: dramster on October 19, 2018, 10:49:03 PM
А как так получилось? Я вроде все через лупу и алт+Q делал? Как мне тогда цвет в 6 колор перевести?
(https://i.imgur.com/ipb05OC.png)


И можно ли в некоторых случаях использовать GOTO не в циклах, а по итогам IF вне цикла ?
Вроде можно.. Из справки "Переход на метку допускается в рамках блоков одного уровня вложенности "
Насколько мне извесно, то из блока IF END_IF прыгают, но не в цикл или подпрограмму, и вроде это не приводит к глобальным ошибкам, но я не уверен.
Желательно избегай использование GOTO . Подробнее тут http://crapware.aidf.org/forum/index.php?topic=49.0



P.S. проверил везде, как то странно вышло, в части скрипта указан цвет как вы и написали, а где то тот что я в части указал.

Из всего скрипта что я видел выше, там только два вызова ф-ции pxl(), больше связанного с графикой ничего нет... Так что мне нечего сказать по этому поводу  :(.
Title: Re: действие по цвету
Post by: Azaar on October 20, 2018, 12:04:16 PM
подскажите как зациклить проверку по цвету?
у меня работает только один раз.
если красный то набирает единицу один раз, далее если опять красный то проверка по цвету не происходит и скрипт идет дальше, а нужно чтобы если опять красный , то опять нажать единицу
Code: (clickermann) [Select]
   GETSCREEN
   IF(PXL(781,294) = 5074924)   // если красный то добавить цыфру 1
   LCLICK(804,252)
   WAITMS(50)
   KEYPRESS(#1)
   ELSE
   IF(PXL(632,291) = 4895818)    //  если зеленый идти дальше
   LCLICK(790,573)               
   END_IF
   END_IF
Title: Re: действие по цвету
Post by: PasqualeAcosta on October 20, 2018, 01:00:57 PM
Из всего скрипта что я видел выше, там только два вызова ф-ции pxl(), больше связанного с графикой ничего нет... Так что мне нечего сказать по этому поводу  :(.

Вот весь скрипт. Одно понял, что я нифига не понимаю в грамматике скриптописания и чувствую что все можно сделать гораздо проще и читабельнее. Ума не приложу чем менять Гото, а подпрограммы SUB не такие глюченые как Гото? И при переходе в подпрограмму все переменные из скрипта сохраняются и как я понял обнуляются только по завершению подпрограммы?

Code: (clickermann) [Select]
start:
WAITMS(1000)
LCLICK(952,327) // старт
WAITMS(500)


$time = $_ms + 5000 // проверка готовности к атаке
WHILE($time > $_ms)
   GETSCREEN(1206,132,1206,132)
   COLORMODE(6,1206,132,1206,132)
   IF(PXL(1206,132)=16777215)
      WAITMS(200)
      LCLICK(1038,286)  // экспедиция
      WAITMS(100)
      $time = 0
   ELSE
      WAITMS(100)
      LCLICK(952,327)
      WAITMS(200)
   END_IF
END_CYC

// к бою
atk:
WAITMS(500)
LOGWRITE ("В атаку!!!")
WAITMS(100)
LCLICK(899,560)
WAITMS(100)

// проверяем загрузились ли

perviy:
$var1 = 0
$time = $_ms + 10000 // 10 сек ищет цвет
WHILE($time > $_ms)
   GETSCREEN(642,97,642,97)
   LOGWRITE ("глюк1")
   COLORMODE(6,642,97,642,97)
   IF(PXL(642,97)=16777215)
      WAITMS(2000)
      LCLICK(647,163)
      LOGWRITE ("глюк2")
      WAITMS(500)
      GETSCREEN(886,501,886,501)
      COLORMODE(6,886,501,886,501)
      IF(PXL(886,501)=8355711)
         WAITMS(200)
         LCLICK(574,617)
         LOGWRITE ("глюк3")
         WAITMS(2000)
         $var1 = 1
         $time = 0
      ELSE
         WAITMS(200)
         LCLICK(958,500)
         LOGWRITE ("глюк4")
         WAITMS(3000)
         $var1 = 0
         $time = 0
      END_IF
   ELSE
      WAITMS(50)
   END_IF
END_CYC
IF($time ! 0)
   LCLICK(574,617)
   WAITMS(50)
   LOGWRITE ("глюк5")
   GOTO(perviy)
END_IF

IF($var1 = 1)
   GOTO(perviy)
END_IF


vtoroy:
$var2 = 0
$time = $_ms + 10000 // делает второй ход
WHILE($time > $_ms)
   GETSCREEN(642,97,642,97)
   COLORMODE(6,642,97,642,97)
   IF(PXL(642,97)=16777215)
      WAITMS(500)
      LCLICK(647,277)  // кастует
      WAITMS(500)
      GETSCREEN(883,502,883,502)
      COLORMODE(6,883,502,883,502)
      IF(PXL(883,502)=8355711)
         WAITMS(200)
         LCLICK(574,617)
         WAITMS(2000)
         $var2 = 1
         $time = 0
      ELSE
         WAITMS(200)
         LCLICK(958,500)
         WAITMS(3000)
         $var2 = 0
         $time = 0
      END_IF
   ELSE
      WAITMS(50)
   END_IF
END_CYC
IF($time ! 0)
   GOTO(end)
   
END_IF

IF($var2 = 1)
   GOTO(vtoroy)
END_IF


tretiy:
$var3 = 0
$time = $_ms + 10000 // делает третий ход
WHILE($time > $_ms)
   GETSCREEN(642,97,642,97)
   COLORMODE(6,642,97,642,97)
   IF(PXL(642,97)=16777215)
      $var3 = 1
      $time = 0
   ELSE
      WAITMS(50)
   END_IF
END_CYC
IF($time ! 0)
   GOTO(end)
   
END_IF

IF($var3 = 1)
   GOTO(boll)
   
END_IF


boll:  // 3 ход!
$var4 = 0
$time = $_ms + 2000 // проверка заряда феникса
WHILE($time > $_ms)
   GETSCREEN(643,524,643,524)
   COLORMODE(6,643,524,643,524)
   IF(PXL(643,524)=8388607)
      WAITMS(100)
      LOGWRITE ("Заряжен")
      WAITMS(500)
      LCLICK(645,540)  // кастует феникс
      WAITMS(500)
      GETSCREEN(883,502,883,502)
      COLORMODE(6,883,502,883,502)
      IF(PXL(883,502)=8355711)
         WAITMS(200)
         LCLICK(574,617)
         LOGWRITE ("хз 1")
         WAITMS(2000)
         $var4 = 1
         $time = 0         
      ELSE
         WAITMS(200)
         LCLICK(958,500)
         LOGWRITE ("хз 2")
         WAITMS(200)
         $var4 = 2
         $time = 0
      END_IF
   ELSE
      WAITMS(50)
   END_IF
END_CYC
IF($time ! 0)
   LOGWRITE ("Не видит заряд1")
   WAITMS(200)
   LCLICK(654,418)  // кастует шар
   WAITMS(500)
   GETSCREEN(883,502,883,502)
   COLORMODE(6,883,502,883,502)
   IF(PXL(883,502)=8355711)
      WAITMS(200)
      LCLICK(574,617)
      LOGWRITE ("хз 3")
      WAITMS(2000)
      GOTO(boll)
   ELSE
      WAITMS(200)
      LCLICK(958,500)
      LOGWRITE ("хз 4")
      WAITMS(3000)
      GOTO(phenix)
   END_IF
   
END_IF

IF($var4 = 1)
   LOGWRITE ("вар4 1")
GOTO(boll)
   
END_IF

IF($var4 = 2)
   LOGWRITE ("вар4 2")
GOTO(end)
   
END_IF


phenix:     // ход феникса
LOGWRITE ("феникс")
$time = $_ms + 10000 // проверяет ход феникса
WHILE($time > $_ms)
   GETSCREEN(642,97,642,97)
   COLORMODE(6,642,97,642,97)
   IF(PXL(642,97)=16777215)
      LOGWRITE ("ход феня")
$time = 0
   ELSE
      WAITMS(50)
   END_IF
END_CYC
IF($time ! 0)
   GOTO(end)
   
END_IF

$var5 = 0
$time = $_ms + 2000 // проверка заряда феникса
WHILE($time > $_ms)
   GETSCREEN(643,524,643,524)
   COLORMODE(6,643,524,643,524)
   IF(PXL(643,524)=8388607)
      WAITMS(100)
      LOGWRITE ("Заряжен")
      WAITMS(500)
      LCLICK(645,540)  // кастует феникс
      WAITMS(500)
      GETSCREEN(883,502,883,502)
      COLORMODE(6,883,502,883,502)
      IF(PXL(883,502)=8355711)
         WAITMS(200)
         LCLICK(574,617)
         LOGWRITE ("ххз5")
         WAITMS(2000)
         $var5 = 1
         $time = 0
      ELSE
         WAITMS(200)
         LCLICK(958,500)
         LOGWRITE ("ххз6")
         WAITMS(1000)
         $var5 = 2
         $time = 0
      END_IF
   ELSE
      WAITMS(50)
   END_IF
END_CYC
IF($time ! 0)
   WAITMS(100)
   LOGWRITE ("Не видит заряд2")
   WAITMS(100)
   LCLICK(1330,57)  // выходим
   WAITMS(1000)
   LCLICK(956,457)
   WAITMS(1000)
   LCLICK(1041,397)
   WAITMS(1000)
   GOTO(start)
     
END_IF

IF($var5 = 1)
   LOGWRITE ("вар5-1")
GOTO(phenix)
   
END_IF

IF($var5 = 2)
   LOGWRITE ("вар5-2")
GOTO(end)
   
END_IF

end:
$var6 = 0
$time = $_ms + 5000 // выходим
LOGWRITE ("енд")
WHILE($time > $_ms)
   GETSCREEN(1038,546,1038,546)
   COLORMODE(6,1038,546,1038,546)
   IF(PXL(1038,546)=4177791)
      WAITMS(100)
      LOGWRITE ("Зашел в энд")
      WAITMS(200)
      LCLICK(1038,546)
      WAITMS(1000)
      GETSCREEN(974,398,974,398)  // нет ли петомца
      COLORMODE(6,974,398,974,398)
      IF(PXL(974,398)=4177791)
         WAITMS(500)
         LOGWRITE ("ПЕТ")
         LCLICK(974,398)
         WAITMS(1000)
         $var6 = 1
         $time = 0
      ELSE
         WAITMS(100)
         LOGWRITE ("не пет")
         $var6 = 1
         $time = 0
      END_IF
      WAITMS(100)
      LCLICK(1038,546)
      WAITMS(500)
      GETSCREEN(1013,436,1013,436)
      COLORMODE(6,1013,436,1013,436)
      IF(PXL(1013,436)=16777215) // или 1009,279
         WAITMS(1000)
         LCLICK(1062,544)
         WAITMS(1000)
         LCLICK(888,443)  // прав 888,443, лев 1024,453
         WAITMS(2000)
         LOGWRITE ("лвл")
         $var6 = 1
         $time = 0
      ELSE
         LOGWRITE ("не лвл")
$var6 = 1
         $time = 0
      END_IF
   ELSE
      WAITMS(100)
      LCLICK(1053,503)
      WAITMS(100)
   END_IF
END_CYC
IF($time ! 0)
   LCLICK(1330,57)  // не нашел ход выходит
   WAITMS(1000)
   LCLICK(956,457)
   WAITMS(1000)
   LOGWRITE ("не вышел")
   LCLICK(1041,397)
   WAITMS(1000)
   GOTO(start)
   
END_IF

IF($var6 = 1)
LOGWRITE ("вар6")
GOTO(atk)
   
END_IF

halt
Title: Re: действие по цвету
Post by: Oraven on October 20, 2018, 03:11:41 PM
подскажите как зациклить проверку по цвету?
у меня работает только один раз.
если красный то набирает единицу один раз, далее если опять красный то проверка по цвету не происходит и скрипт идет дальше, а нужно чтобы если опять красный , то опять нажать единицу

Циклы для того и придуманы чтобы зацикливать выполнение.
Code: (clickermann) [Select]
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF(PXL(781,294) = 5074924)   // если красный то добавить цыфру 1
      LCLICK(804,252)
      WAITMS(50)
      KEYPRESS(#1)
      WAITMS(50)
   ELSE
      IF(PXL(632,291) = 4895818)    //  если зеленый идти дальше
         LCLICK(790,573)
         WAITMS(50)
         $check = 1 // разрешаем выход из цикла
      END_IF
   END_IF
END_CYC
Title: Re: действие по цвету
Post by: Oraven on October 20, 2018, 03:24:41 PM
Вот весь скрипт. Одно понял, что я нифига не понимаю в грамматике скриптописания и чувствую что все можно сделать гораздо проще и читабельнее. Ума не приложу чем менять Гото, а подпрограммы SUB не такие глюченые как Гото? И при переходе в подпрограмму все переменные из скрипта сохраняются и как я понял обнуляются только по завершению подпрограммы?

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

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

Переменные $par1 и $par2 по окончанию подпрограммы будут обнулены.
Code: (clickermann) [Select]
SUB(имя, $par1, $par2) // подпрограмма с параметрами
   // тело выполняется только после вызова
END_SUB

имя(1,2) // вызов подпрограммы (обязательно ниже подпрограммы)
Title: Re: действие по цвету
Post by: Vint on October 21, 2018, 12:39:09 AM
Они не обнулены, они уничтожены.
Title: Re: действие по цвету
Post by: Azaar on November 02, 2018, 10:06:36 PM
Подскажите пожалуйста как осуществить

Если в течении 30 секунд в пикселе не появился цвет
WHILE((PXL(1251,87)!5350225)&($time > $_ms))
то выполнить действие
LCLICK(121,48)  //обновить страницу
и снова проверять наличие цвета в этих координатах
а если цвет появился за это время то выполнить действие
LCLICK(154,120)  //идти дальше
Title: Re: действие по цвету
Post by: dramster on November 02, 2018, 10:26:48 PM
Подскажите пожалуйста как осуществить

Можно вот так:
Code: (clickermann) [Select]
$time = $_time_t + 30 //засекаем 30сек

GETSCREEN
WHILE(PXL(1251,87)!5350225)
   waitms(100)
   GETSCREEN
   
   IF($time < $_time_t)  //если время закончилось
      LCLICK(121,48)  //обновить страницу
      $time = $_time_t + 30 //обновляем таймер
   END_IF
   
END_CYC

//как только появился пиксель, идем дальше
LCLICK(154,120)  //идти дальше
Title: Re: действие по цвету
Post by: Azaar on November 02, 2018, 11:05:05 PM
не помогло, постоянно обновляет страницу, дальше не идет
Title: Re: действие по цвету
Post by: dramster on November 02, 2018, 11:16:08 PM
Значит пиксель твой не равен цвету 5350225.

Попробуй проверять в логе что там у тебя:
Code: (clickermann) [Select]
$time = $_time_t + 30 //засекаем 30сек

GETSCREEN
WHILE(PXL(1251,87)!5350225)
   waitms(100)
   GETSCREEN
   
   IF($time < $_time_t)  //если время закончилось
      print("30 сек прошло, обновляем страницу")
      print("цвет искомого пикселя равен ", PXL(1251,87))
      LCLICK(121,48)  //обновить страницу
      $time = $_time_t + 30 //обновляем таймер
   END_IF
   
END_CYC

//как только появился пиксель, идем дальше
LCLICK(154,120)  //идти дальше
Title: Re: действие по цвету
Post by: Azaar on November 03, 2018, 09:02:41 AM
принт выводит не искомый цвет на пикселе, а белый, тоесть который был до того который нужно искать