Author Topic: Поиск цвета в заданной области  (Read 9756 times)

0 Members and 1 Guest are viewing this topic.

IgorExa

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Поиск цвета в заданной области
« on: September 21, 2016, 12:09:09 PM »
Здравствуйте. На форуме лежит отличный скрипт
GETSCREEN
IF(PXL(910,207) = 200070)   ????
LCLICK(RND(910,1024),RND(201,213))
WAIT(RND(27,40))
ELSE
HALT
END_IF
GETSCREEN
IF(PXL(948,206) = 200070)
LCLICK(RND(947,1002),RND(201,212))
WAIT(RND(2,6))
ELSE
IF(PXL(1041,206) = 200070)
LCLICK(RND(1041,1089),RND(204,211))
END_IF
WAIT(RND(2,6))
END_IF
WAIT(RND(2,7))

Помогите плиз! Голову сломал - как задать поиск пикселей по области? Просканировал область на цвет - нашел - тыкнул в указанное место - не нашел- сканирует область на след цвет - нашел - тыкнул в указанное место. не нашел - ждет 5 сек и заново.
« Last Edit: September 21, 2016, 12:27:02 PM by IgorExa »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile


IgorExa

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Re: Поиск цвета в заданной области
« Reply #2 on: September 21, 2016, 01:18:06 PM »
Спасибо!
GETSCREEN
IF_PIXEL_IN(496, 119, 512, 661, 255)
LCLICK(1208,546)
IF_PIXEL_IN(496, 119, 512, 661, 65280)
LCLICK(1214,420)
WAIT(2)

Если сценарий сработал по одному из параметров, как добавить доп задержку, напр на 60 секунд, во избежания повторных кликов через 2 сек? Заранее спасибо за ответ.
Ерунда какая то получилась( просто кликает одновременно и все
« Last Edit: September 21, 2016, 01:28:26 PM by IgorExa »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Поиск цвета в заданной области
« Reply #3 on: September 21, 2016, 02:30:07 PM »
Куда остальное то делось?

Code: (clickermann) [Select]
GETSCREEN(496, 119, 512, 661)
IF_PIXEL_IN(496, 119, 512, 661, Цвет1, Цвет2)
    LCLICK($_return1,$_return2)
    WAIT(60)
ELSE
    WAIT(5)
END_IF


IgorExa

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Re: Поиск цвета в заданной области
« Reply #4 on: September 22, 2016, 11:26:16 AM »
Code: (clickermann) [Select]
$check = 0
WHILE($check = 0)
   GETSCREEN(496, 119, 512, 661) // сохранить в графический буфер сектор
   IF_PIXEL_IN(496, 119, 512, 661, 255)//Просканировал область на цвет
      $check = 1 //выход из цикла сканирования цветов
      LCLICK(1208,546) //тыкнул в указанное место
      WAIT(60) // добавить доп задержку на 60 секунд
   ELSE //  если не нашел  255
      IF_PIXEL_IN(496, 119, 512, 661, 65280)
         $check = 1
         LCLICK(1214,420)
         WAIT(60) // добавить доп задержку на 60 секунд
      ELSE //  если не нашел   65280
         WAIT(5) // ждет 5 сек
      END_IF // обязательный конец кажного условия
   END_IF
END_CYC  // обязательный конец кажного цикла
HALT // стоп
Кирил, спасибо огромное! Изучение с нуля надо с чего то начать) Но одного интереса маловато. На основании своих мыслей и вашего кода с объяснениями перечитываю мануал. Не могу найти указание на приоритет выполнения команд(. К примеру
 IF_PIXEL_IN(496, 119, 512, 661, 65280)
         $check = 1
         LCLICK(1214,420)
         WAIT(60) // добавить доп задержку на 60 секунд
вот это место. Если дописываю м\у клик и wait команду на еще один клик в другом месте, то кликает только один раз, в первом месте. Дописываю еще wait м\у строками клик - тот же результат. В двух словах, если не трудно,- что делаю не правильно? или где об этом можно прочитать? Спасибо)

Вот
$check = 0
WHILE($check = 0)
   GETSCREEN(496, 119, 512, 661)
   IF_PIXEL_IN(496, 119, 512, 661, 255)
      $check = 1
      LCLICK(1214,420)
         WAIT(1)
      LCLICK(1208,546)
      WAIT(20)
   ELSE
      IF_PIXEL_IN(496, 119, 512, 661, 65280)
         $check = 1
         LCLICK(1214,420)
            WAIT(1)
         LCLICK(1214,420)
         WAIT(20)
      ELSE
         WAIT(1)
      END_IF
   END_IF
END_CYC
« Last Edit: September 22, 2016, 11:34:15 AM by IgorExa »

IgorExa

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Re: Поиск цвета в заданной области
« Reply #5 on: September 22, 2016, 12:20:10 PM »
после внесения изменений в код, нужно нажимать кнопку применить, потом кнопку сохранить, потом кнопку закрыть редактор
и только после этих манипуляций изменения должну заработать.
Это понятно. Спасибо
Для опытного глаза
$check = 0
WHILE($check = 0)
   GETSCREEN(496, 119, 512, 661)
   IF_PIXEL_IN(1228, 407, 1260, 421, 16777215)
      $check = 1
      LCLICK(1211,401)
   ELSE
      IF_PIXEL_IN(496, 119, 512, 661, 255)
         $check = 1
         LCLICK(1208,546)
         WAIT(30)
      ELSE
         IF_PIXEL_IN(496, 119, 512, 661, 65280)
            $check = 1
            LCLICK(1214,420)
            WAIT(30)
         ELSE
            WAIT(1)
         END_IF
      END_IF
   END_IF
END_CYC

Что не верно и мешает выполнению с точки зрения кода? Не выполняет первый поиск и клик.
« Last Edit: September 22, 2016, 12:25:08 PM by IgorExa »

IgorExa

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Re: Поиск цвета в заданной области
« Reply #6 on: September 22, 2016, 07:47:21 PM »
Вот такой вот кусок кода:
IF_PIXEL_IN(973, 126, 1100, 650, 6121925)
            $check = 1
            LCLICK(1240,235)
            KEYPRESS(#BACKSPACE)
            KEYPRESS(#BACKSPACE)
            KEYSTRING($1) подскажите как заставить вписывать циклически увеличивающееся в двое значение? Опять же перерыл мануал, но логику вставки переменной да еще и с циклом не понимаю( Или нужен весь код для полноты картины? Заранее спасибо
           

Engineer

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Поиск цвета в заданной области
« Reply #7 on: September 23, 2016, 05:33:02 AM »
Подскажите пожалуйста, что даёт объявление переменной? Вернее одинаково ли кликер видит
    DEFINE($a1,1)
           и
       $a1=1 
« Last Edit: September 23, 2016, 08:04:48 AM by Engineer »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Поиск цвета в заданной области
« Reply #8 on: September 23, 2016, 08:57:24 AM »
Подскажите пожалуйста, что даёт объявление переменной? Вернее одинаково ли кликер видит
    DEFINE($a1,1)
           и
       $a1=1

 $a1=1
всегда будет приравнивать $a к 1,
DEFINE будет действовать только если переменной не существует. Если переменная уже есть с любым значением, DEFINE игнорируется.

И сразу возникает резонный вопрос: справку не читал?
Только не нужно говорить, как это делают в этих случаях, что справка не открывается.


IgorExa

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Re: Поиск цвета в заданной области
« Reply #9 on: September 23, 2016, 09:56:37 AM »
Оцените плод трудов на жизнеспособность, пожалуйста) Ибо сам, ввиду временной ограниченности знаний и опыта, пока не могу) Заранее спасибо за указанные ошибки и идеотизмы)
Code: (clickermann) [Select]
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN(1228, 407, 1260, 421, 30719)
      $check = 1
      LCLICK(1211,401)
   ELSE
      IF_PIXEL_IN(496, 119, 512, 661, 255)
         $check = 1
         IF_PIXEL_IN(496, 119, 512, 661, 255)
            $check = 1
            WAIT(2)
         ELSE
            LCLICK(1208,546)
            MOVE(1137,511)
            WAIT(30)
            1:
            IF_PIXEL_IN(973, 126, 1100, 650, 400393)
               $check = 1
            END_CYC
         ELSE
            IF_PIXEL_IN(973, 126, 1100, 650, 6121925)
               LCLICK(1240,235)
               DEFINE($a1,1)
               FOR($a=0,$a<8 )
                  KEYPRESS(#BACKSPACE)
                  KEYPRESS(#BACKSPACE)
                  $a1=$a1*2
                  KEYSTRING($a1)
                  LCLICK(1280,150)
                  LCLICK(967,384) 
                  LCLICK(1214,420)
                  WAIT(250)
               END_IF
            ELSE
               GOTO(1)
            END_IF
         END_IF
   ELSE

Код не дописан до конца.
« Last Edit: September 23, 2016, 10:24:15 AM by IgorExa »

Engineer

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Поиск цвета в заданной области
« Reply #10 on: September 23, 2016, 10:07:51 AM »
Тема оформления "Clickermann" для кода с подсветкой синтаксиса. Выбирается из выпадающего списка "Код" (рядом с "цвет", "размер" и "шрифт") в режиме редактирования поста. Либо просто BB-тегом "code=clickermann"

IgorExa

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Re: Поиск цвета в заданной области
« Reply #11 on: September 23, 2016, 10:21:01 AM »
Тема оформления "Clickermann" для кода с подсветкой синтаксиса. Выбирается из выпадающего списка "Код" (рядом с "цвет", "размер" и "шрифт") в режиме редактирования поста. Либо просто BB-тегом "code=clickermann"
Спасибо)

i0

  • Оплот сообщества
  • ****
  • Posts: 353
  • CMann 4.13.014 final, ie, presto, win7 x86, x64
    • View Profile
Re: Поиск цвета в заданной области
« Reply #12 on: September 23, 2016, 10:28:55 AM »
да у вас, уважаемый, код нерабочий
хорошо что отступы расставили, но сделайте и ещё один шаг - проанализируйте свой код
любой блок IF IF_PIXEL_IN и IF_PICTURE_IN тоже) должен быть закрыт END_IF
любой блок цикла (FOR или WHILE) должен быть закрыт END_CYC
а что у вас?
Code: (clickermann) [Select]
            1:
            IF_PIXEL_IN(973, 126, 1100, 650, 400393)
               $check = 1
            END_CYC
Code: (clickermann) [Select]
               FOR($a=0,$a<8 )
                  KEYPRESS(#BACKSPACE)
                  KEYPRESS(#BACKSPACE)
                  $a1=$a1*2
                  KEYSTRING($a1)
                  LCLICK(1280,150)
                  LCLICK(967,384) 
                  LCLICK(1214,420)
                  WAIT(250)
               END_IF

что эта хрень лесная должна означать – я не понимаю.

IgorExa

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Re: Поиск цвета в заданной области
« Reply #13 on: September 23, 2016, 10:43:39 AM »
да у вас, уважаемый, код нерабочий
хорошо что отступы расставили, но сделайте и ещё один шаг - проанализируйте свой код
любой блок IF IF_PIXEL_IN и IF_PICTURE_IN тоже) должен быть закрыт END_IF
любой блок цикла (FOR или WHILE) должен быть закрыт END_CYC
а что у вас?
Code: (clickermann) [Select]
            1:
            IF_PIXEL_IN(973, 126, 1100, 650, 400393)
               $check = 1
            END_CYC
Code: (clickermann) [Select]
               FOR($a=0,$a<8 )
                  KEYPRESS(#BACKSPACE)
                  KEYPRESS(#BACKSPACE)
                  $a1=$a1*2
                  KEYSTRING($a1)
                  LCLICK(1280,150)
                  LCLICK(967,384) 
                  LCLICK(1214,420)
                  WAIT(250)
               END_IF

что эта хрень лесная должна означать – я не понимаю.

Уважаемый! Премного благодарен за конструктивный комментарий. Проанализирую.


IgorExa

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Re: Поиск цвета в заданной области
« Reply #14 on: September 23, 2016, 10:52:00 AM »
Code: (clickermann) [Select]

WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN(1228, 407, 1260, 421, 30719)
      $check = 1
      LCLICK(1211,401)
   ELSE
      IF_PIXEL_IN(496, 119, 512, 661, 255)
         $check = 1
         IF_PIXEL_IN(496, 119, 512, 661, 255)
            $check = 1
            WAIT(2)
         ELSE
            LCLICK(1208,546)
            MOVE(1137,511)
            WAIT(30)             
            IF_PIXEL_IN(973, 126, 1100, 650, 400393)
               $check = 1
            END_IF
         END_IF
      END_IF
   END_IF
END_CYC
// из циклов и подпрограмм выходить-входить по метке НЕЛЬЗЯ, это приводит к ошибкам, даже если при отладке и работало.
метка_1: // а что вам даёт переход на эту метку? действий ни каких не производится. это способ ожидания пикселя? тогда проверка экрана нужна постоянная
GETSCREEN
IF_PIXEL_IN(973, 126, 1100, 650, 6121925)
   LCLICK(1240,235)
   DEFINE($a1,1)
   FOR($a=0,$a<8 )  // вам действительно нужно повторить это 8 раз?
      KEYPRESS(#BACKSPACE)
      KEYPRESS(#BACKSPACE)
      $a1=$a1*2
      KEYSTRING($a1)
      LCLICK(1280,150)
      LCLICK(967,384)
      LCLICK(1214,420)
      WAIT(250) // вы серьёзно 250 сек. ожидания?
   END_CYC //конец цикла пишется иначе чем конец условия
ELSE
   GOTO(метка_1)// не надо насиловать интерпритатор, все названия должны начинаться с букв а не цифр.
END_IF
// зачем вообще вам метка, если вас научиль пользоваться двумя видами цмклов?
// учитесь все строки дополнять комментариями, это не трудно - это культура программирования.

Спасибо огромное. Ушел переваривать