Author Topic: действие по цвету  (Read 4087 times)

0 Members and 1 Guest are viewing this topic.

Azaar

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
действие по цвету
« on: October 14, 2018, 01:43:00 PM »
Подскажите пожалуйста как сделать так чтобы
если на пикели (519, 642) есть цвет 100 нужно сделать  действие А
а если на этом пикселе цвет 200 то сделать действие Б

и второе (отдельно)
если в пикселе (111, 111) в течении 30 сек не появился цвет 100
то сделать клик в пикселе (222, 222)
 
« Last Edit: October 14, 2018, 01:51:39 PM by Azaar »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: действие по цвету
« Reply #1 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
« Last Edit: October 14, 2018, 02:18:06 PM by Oraven »

Azaar

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
Re: действие по цвету
« Reply #2 on: October 14, 2018, 02:39:18 PM »
спасибо большое

PasqualeAcosta

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Re: действие по цвету
« Reply #3 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

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: действие по цвету
« Reply #4 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

PasqualeAcosta

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Re: действие по цвету
« Reply #5 on: October 19, 2018, 11:33:50 AM »
Огромное спасибо за оперативность, все работает. Разобрал пример, теперь есть понимание.

PasqualeAcosta

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Re: действие по цвету
« Reply #6 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)
« Last Edit: October 19, 2018, 07:39:58 PM by PasqualeAcosta »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: действие по цвету
« Reply #7 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

PasqualeAcosta

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Re: действие по цвету
« Reply #8 on: October 19, 2018, 08:12:27 PM »
Первый день в этом варюсь. Прошу прощения и спасибо!

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: действие по цвету
« Reply #9 on: October 19, 2018, 08:21:56 PM »
Вот это вот условие IF(PXL(886,501)=6118493) никогда не выполнится. Так как перед ним стоит COLORMODE(6), а в шестом колормоде такой цвет отсутствует.

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


PasqualeAcosta

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Re: действие по цвету
« Reply #10 on: October 19, 2018, 10:02:17 PM »
Вот это вот условие IF(PXL(886,501)=6118493) никогда не выполнится. Так как перед ним стоит COLORMODE(6), а в шестом колормоде такой цвет отсутствует.

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


А как так получилось? Я вроде все через лупу и алт+Q делал? Как мне тогда цвет в 6 колор перевести?
И можно ли в некоторых случаях использовать GOTO не в циклах, а по итогам IF вне цикла ?
P.S. проверил везде, как то странно вышло, в части скрипта указан цвет как вы и написали, а где то тот что я в части указал.
« Last Edit: October 19, 2018, 10:09:45 PM by PasqualeAcosta »

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: действие по цвету
« Reply #11 on: October 19, 2018, 10:49:03 PM »
А как так получилось? Я вроде все через лупу и алт+Q делал? Как мне тогда цвет в 6 колор перевести?



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



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

Из всего скрипта что я видел выше, там только два вызова ф-ции pxl(), больше связанного с графикой ничего нет... Так что мне нечего сказать по этому поводу  :(.

Azaar

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
Re: действие по цвету
« Reply #12 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

PasqualeAcosta

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Re: действие по цвету
« Reply #13 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
« Last Edit: October 20, 2018, 01:14:37 PM by PasqualeAcosta »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: действие по цвету
« Reply #14 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