Author Topic: Помогите составить код для клика по координатам если цвет пикселя не найден  (Read 7512 times)

0 Members and 4 Guests are viewing this topic.

egnostic

  • Зашел в гости
  • *
  • Posts: 15
    • View Profile
    • vektor38.ru
Всю голову себе нагрел как сделать не получается, прошу помочь вот часть кода

getscreen
if_pixel_in(79,252,1581,728,1048530)
pxlcount(79,252,1581,728,1048530)<1
mouse_move(849,215)
lclick(849,215)
waitms(100)
pxlcount(79,252,1581,728,1048530)<1
mouse_move(849,235)
lclick(849,235)
waitms(100)
pxlcount(79,252,1581,728,1048530)<1
mouse_move(849,220)
lclick(849,220)
waitms(100)
pxlcount(79,252,1581,728,1048530)<1
mouse_move(849,205)
lclick(849,205)
waitms(100)
end_if


нужно чтобы если в области не нашел нужный пиксель то перещелкивал страници в его поиске, а как найдет выполнялась подпрограмма до пока имеются пиксели нужного цвета и так циклично.
оч прошу помогите, все испробовал, просто еще не до конца освоил, и как сделать срабатывание на отрицательное значение не догоню(
...не будьте строги - я только учусь ;)

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Что такое pxlcount(79,252,1581,728,1048530)<1:o

egnostic

  • Зашел в гости
  • *
  • Posts: 15
    • View Profile
    • vektor38.ru
ну я думал так можно указать если типо <1 это нет такого пикселя и действие будет идти дальше XD

А так вот вариант, но надо еще чтобы было условие когда писутствует другой пиксель в области действие пропускалось, на случай окна ошибки, появляется фон и пиксель перекрывается и программа не найдя нужного пикселя начинает выполнять действие(

$cw=0
while($cw=0)
 getscreen
 if_pixel_in(79,252,1581,728,1048530)
 $cw=1
 else
mouse_move(849,215)
lclick(849,215)
waitms(100)
mouse_move(849,235)
lclick(849,235)
waitms(100)
mouse_move(849,220)
lclick(849,220)
waitms(100)
mouse_move(849,205)
lclick(849,205)
waitms(100)
end_if
end_cyc
...не будьте строги - я только учусь ;)

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Вот и пиши условия!

Верный код
Code: (clickermann) [Select]
$cw=0
while($cw=0)
   getscreen
   if_pixel_in(79,252,1581,728,1048530)
      $cw=1
   else
      IF(pxlcount(79,252,1581,728,1048530) = 0)
         mouse_move(849,215)
         lclick(849,215)
         waitms(100)
      END_IF
     
      IF(pxlcount(79,252,1581,728,1048530) = 0)
         mouse_move(849,235)
         lclick(849,235)
         waitms(100)
      END_IF
     
      IF(pxlcount(79,252,1581,728,1048530) = 0)
         mouse_move(849,220)
         lclick(849,220)
         waitms(100)
      END_IF
     
      IF(pxlcount(79,252,1581,728,1048530) = 0)
         mouse_move(849,205)
         lclick(849,205)
         waitms(100)
      END_IF
      waitms(50)
   end_if
end_cyc

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Погоди ка, а какой в этом смысл, надо ж определять что за действие!
За место IF(pxlcount(79,252,1581,728,1048530) = 0) должен быть анализ ошибки.

egnostic

  • Зашел в гости
  • *
  • Posts: 15
    • View Profile
    • vektor38.ru
Спасибо огромное! Все работает =)

Еще такой вопрос, чтобы не создавать новый топик:
Я могу добавить цикл в программу, чтобы по условию если найден новый пиксель, он начинал работать до момента появления нужного пикселя в цикле, а при его появление цикл останавливался и продолжал работать основной скрипт.
Как сделать знаю, но у меня почему-то идет комфликт цикла с основным скриптом.
И еще вопрос в одном скрипте можно реализовать сразу ряд циклов или подпрограмм? или все таки надо  разбивать скрипт на файлы и вызывать при условии необходимую часть кода?
Просто я заметил, чем больше скрипт тем сильнее идет отклонение от поставленной задачи.
...не будьте строги - я только учусь ;)

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Я могу добавить цикл в программу, чтобы по условию если найден новый пиксель, он начинал работать до момента появления нужного пикселя в цикле, а при его появление цикл останавливался и продолжал работать основной скрипт.
Конечно можешь.

Как сделать знаю, но у меня почему-то идет комфликт цикла с основным скриптом.
Исправь ошибки и проблем не будет.

И еще вопрос в одном скрипте можно реализовать сразу ряд циклов или подпрограмм? или все таки надо  разбивать скрипт на файлы и вызывать при условии необходимую часть кода?
Просто я заметил, чем больше скрипт тем сильнее идет отклонение от поставленной задачи.
Можно.
Ничего не откуда не вызывается. При запуске, до выполнения, в памяти кликера из всех инклудов собирается один единый скрипт.

Просто я заметил, чем больше скрипт тем сильнее идет отклонение от поставленной задачи.
Исправляй ошибки.

egnostic

  • Зашел в гости
  • *
  • Posts: 15
    • View Profile
    • vektor38.ru
Спасибо большое за предоставленную информацию.
То есть, скрипт может быть любой длинны, и если нет конфликтов  в коде он будет исправно работать в не зависимости от его длинны?
...не будьте строги - я только учусь ;)

egnostic

  • Зашел в гости
  • *
  • Posts: 15
    • View Profile
    • vektor38.ru
Можете посмотреть данный код на наличие конфликтов, части в отдельности работают исключительно, при сборке вместе идет конфлик и скрипт не работает вообще(

Code: (clickermann) [Select]
SUB(mouse_move,$MOVE_END_X,$MOVE_END_Y)
   $MOVE_SPEED = 4
   $MOVE_Start_X = $_xmouse
   $MOVE_Start_Y = $_ymouse
   $MOVE_X = $MOVE_Start_X
   $MOVE_Y = $MOVE_Start_Y
   $dist = DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)
   $MOVE_SPEEDVAR = INT((SQRT($dist))/$MOVE_SPEED)
   IF($MOVE_SPEEDVAR < 1)
      $MOVE_SPEEDVAR = 1
   END_IF
   $MOVE_step=($dist-1)/$MOVE_SPEEDVAR
   $MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
   $MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step
   FOR($MOVE_i=0, $MOVE_i<INT($MOVE_step))
      $MOVE_X = $MOVE_X + $MOVE_X_step
      $MOVE_Y = $MOVE_Y + $MOVE_Y_step
      MOVE(ROUND($MOVE_X,0), ROUND($MOVE_Y,0))
      WAITMS(1)
   END_CYC
   MOVE($MOVE_END_X, $MOVE_END_Y)
END_SUB

SUB(poisk)
   $SHIFT_X = 5
   $SHIFT_Y = 5
   $ARR_NUM = 0
   $X2 = 0
   $Y2 = 0
   WHILE ($ARR_NUM < ARRSIZE($ARR_SCAN)
      $X = $ARR_SCAN [$ARR_NUM]
      INC($ARR_NUM,1)
      $Y = $ARR_SCAN [$ARR_NUM]
      INC($ARR_NUM,1)
      IF(($X > $X2)|($Y > $Y2))
         $X2 = $X + $SHIFT_X
         $Y2 = $Y + $SHIFT_Y
         IF_PIXEL_IN($x-50,$y-50, $x+5,$y+5, 144)
            WAITMS(1)
         ELSE
            $ARR_NUM = ARRSIZE($ARR_SCAN)
            mouse_move($x, $y)
            WAITMS(700)
            DBLCLICK($x, $y)
         END_IF
      END_IF
   END_CYC
   UNDEFINE($ARR_SCAN)
END_SUB
GETSCREEN
SCANPXL($ARR_SCAN, 79,252,1581,728,3211262)
getscreen
poisk()
wait(1)

getscreen
IF(pxlcount(955,520,1008,556,11860735) > 0)
   goto(oti)
   lclick(849,215)
   waitms(2000)
END_IF

getscreen
IF(pxlcount(79,252,1581,728,3211262) = 0)
   lclick(849,215)
   waitms(2000)
END_IF

getscreen
IF(pxlcount(79,252,1581,728,3211262) = 0)
   lclick(849,235)
   waitms(2000)
END_IF

getscreen
IF(pxlcount(79,252,1581,728,3211262) = 0)
   mouse_move(849,220)
   lclick(849,220)
   waitms(2000)
END_IF

getscreen
IF(pxlcount(79,252,1581,728,3211262) = 0)
   mouse_move(849,205)
   lclick(849,205)
   waitms(2000)
END_IF
oti:
waitms(50)
end_if
getscreen
if_pixel_in(553,461,697,479,255)
if_pixel_in(579,491,676,507,4873365)
   mouse_move($_return1, $_return2)
   lclick($_return1, $_return2)
end_if
end_if
wait(1+rnd(1,3))

getscreen
if_pixel_in(513,250,635,260,9842944)
wait(1+rnd(1,4))
GETSCREEN
IF_PIXEL_IN(426,520,442,536,9035255)
   IF_PIXEL_IN(463,362,509,389,1908335)
      mouse_move($_return1, $_return2)
      LCLICK($_return1+rnd(1,4), $_return2+rnd(1,5))
      WAIT(1+rnd(1,5))
   END_IF
END_IF

if($time1 < $_time_t)
   $time1 = $_time_t + 22
   getscreen
   if_pixel_in(271,234,377,244,92)
      if_pixel_in(12,201,62,246,12515010)
         mouse_move($_return1, $_return2)
         lclick($_return1, $_return2)
         waitms(50)
      end_if
   end_if
   getscreen
   if_pixel_in(271,234,377,244,92)
      if_pixel_in(6,250,64,289,12515010)
         mouse_move($_return1, $_return2)
         lclick($_return1, $_return2)
         waitms(50)
      end_if
   end_if
   getscreen
   if_pixel_in(271,234,377,244,92)
      if_pixel_in(8,291,57,333,12515010)
         mouse_move($_return1, $_return2)
         lclick($_return1, $_return2)
         waitms(50)
      end_if
   end_if
   getscreen
   if_pixel_in(271,234,377,244,92)
      if_pixel_in(9,340,66,377,12515010)
         mouse_move($_return1, $_return2)
         lclick($_return1, $_return2)
         waitms(50)
      end_if
   end_if
end_if
wait(1)

GETSCREEN
IF_PIXEL_IN(426,520,442,536,4044373)
   IF_PIXEL_IN(447,520,462,536,9035255)
      IF_PIXEL_IN(456,451,511,487,1251944)
         mouse_move($_return1, $_return2)
         LCLICK($_return1+rnd(4,8), $_return2+rnd(5,9))
         WAIT(1+rnd(1,5))
      END_IF
   END_IF
END_IF

GETSCREEN
IF_PIXEL_IN(447,520,462,536,4044373)
   IF_PIXEL_IN(468,519,483,536,9035255)
      IF_PIXEL_IN(456,451,511,487,1251944)
         mouse_move($_return1, $_return2)
         LCLICK($_return1+rnd(4,8), $_return2+rnd(5,9))
         WAIT(1+rnd(1,5))
      END_IF
   END_IF
END_IF

GETSCREEN
IF_PIXEL_IN(468,519,483,536,4044373)
   IF_PIXEL_IN(489,520,505,536,9035255)
      IF_PIXEL_IN(463,362,509,389,1908335)
         mouse_move($_return1, $_return2)
         LCLICK($_return1+rnd(4,8), $_return2+rnd(5,9))
         WAIT(1+rnd(1,5))
      END_IF
   END_IF
END_IF
wait(1+rnd(1,5)
getscreen
if_pixel_in(482,419,553,432,193)
   mouse_move($_return1, $_return2)
   lclick($_return1+rnd(1,3), $_return2+rnd(1,3))
   mouse_move(812,136)
   lclick(812+rnd(1,10),136+rnd(1,10))
END_IF
end_if
« Last Edit: January 05, 2017, 12:40:27 PM by Oraven »
...не будьте строги - я только учусь ;)

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Конечно ошибки нашлись. Это лишние END_IF

Верный код
Code: (clickermann) [Select]
SUB(mouse_move,$MOVE_END_X,$MOVE_END_Y)
   $MOVE_SPEED = 4
   $MOVE_Start_X = $_xmouse
   $MOVE_Start_Y = $_ymouse
   $MOVE_X = $MOVE_Start_X
   $MOVE_Y = $MOVE_Start_Y
   $dist = DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)
   $MOVE_SPEEDVAR = INT((SQRT($dist))/$MOVE_SPEED)
   IF($MOVE_SPEEDVAR < 1)
      $MOVE_SPEEDVAR = 1
   END_IF
   $MOVE_step=($dist-1)/$MOVE_SPEEDVAR
   $MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
   $MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step
   FOR($MOVE_i=0, $MOVE_i<INT($MOVE_step))
      $MOVE_X = $MOVE_X + $MOVE_X_step
      $MOVE_Y = $MOVE_Y + $MOVE_Y_step
      MOVE(ROUND($MOVE_X,0), ROUND($MOVE_Y,0))
      WAITMS(1)
   END_CYC
   MOVE($MOVE_END_X, $MOVE_END_Y)
END_SUB

SUB(poisk)
   $SHIFT_X = 5
   $SHIFT_Y = 5
   $ARR_NUM = 0
   $X2 = 0
   $Y2 = 0
   WHILE ($ARR_NUM < ARRSIZE($ARR_SCAN)
      $X = $ARR_SCAN [$ARR_NUM]
      INC($ARR_NUM,1)
      $Y = $ARR_SCAN [$ARR_NUM]
      INC($ARR_NUM,1)
      IF(($X > $X2)|($Y > $Y2))
         $X2 = $X + $SHIFT_X
         $Y2 = $Y + $SHIFT_Y
         IF_PIXEL_IN($x-50,$y-50, $x+5,$y+5, 144)
            WAITMS(1)
         ELSE
            $ARR_NUM = ARRSIZE($ARR_SCAN)
            mouse_move($x, $y)
            WAITMS(700)
            DBLCLICK($x, $y)
         END_IF
      END_IF
   END_CYC
   UNDEFINE($ARR_SCAN)
END_SUB

GETSCREEN
SCANPXL($ARR_SCAN, 79,252,1581,728,3211262)
poisk()
wait(1)

getscreen
IF(pxlcount(955,520,1008,556,11860735) > 0)
   goto(oti)
   lclick(849,215)
   waitms(2000)
END_IF

getscreen
IF(pxlcount(79,252,1581,728,3211262) = 0) // одно и тоже условие
   lclick(849,215) // почему клик сюда?
   waitms(2000)
END_IF

getscreen
IF(pxlcount(79,252,1581,728,3211262) = 0) // одно и тоже условие
   lclick(849,235) // А этот сюда?
   waitms(2000)
END_IF

getscreen
IF(pxlcount(79,252,1581,728,3211262) = 0) // одно и тоже условие
   mouse_move(849,220) // или просто делаем это все пока не будет результат?
   lclick(849,220)
   waitms(2000)
END_IF

getscreen
IF(pxlcount(79,252,1581,728,3211262) = 0) // одно и тоже условие
   mouse_move(849,205)
   lclick(849,205)
   waitms(2000)
END_IF

oti:
waitms(50)

getscreen
if_pixel_in(553,461,697,479,255)
   if_pixel_in(579,491,676,507,4873365)
      mouse_move($_return1, $_return2)
      lclick($_return1, $_return2)
   end_if
end_if
WAIT(RND(2,4))

GETSCREEN
if_pixel_in(513,250,635,260,9842944)
   wait(1+rnd(1,4))
   GETSCREEN
   IF_PIXEL_IN(426,520,442,536,9035255)
      IF_PIXEL_IN(463,362,509,389,1908335)
         mouse_move($_return1, $_return2)
         LCLICK($_return1+rnd(1,4), $_return2+rnd(1,5))
         WAIT(1+rnd(1,5))
      END_IF
   END_IF
   
   if($time1 < $_time_t)
      $time1 = $_time_t + 22
      getscreen
      if_pixel_in(271,234,377,244,92)
         if_pixel_in(12,201,62,246,12515010)
            mouse_move($_return1, $_return2)
            lclick($_return1, $_return2)
            waitms(50)
         end_if
      end_if
      getscreen
      if_pixel_in(271,234,377,244,92)
         if_pixel_in(6,250,64,289,12515010)
            mouse_move($_return1, $_return2)
            lclick($_return1, $_return2)
            waitms(50)
         end_if
      end_if
      getscreen
      if_pixel_in(271,234,377,244,92)
         if_pixel_in(8,291,57,333,12515010)
            mouse_move($_return1, $_return2)
            lclick($_return1, $_return2)
            waitms(50)
         end_if
      end_if
      getscreen
      if_pixel_in(271,234,377,244,92)
         if_pixel_in(9,340,66,377,12515010)
            mouse_move($_return1, $_return2)
            lclick($_return1, $_return2)
            waitms(50)
         end_if
      end_if
   end_if
   wait(1)
   
   GETSCREEN
   IF_PIXEL_IN(426,520,442,536,4044373)
      IF_PIXEL_IN(447,520,462,536,9035255)
         IF_PIXEL_IN(456,451,511,487,1251944)
            mouse_move($_return1, $_return2)
            LCLICK($_return1+rnd(4,8), $_return2+rnd(5,9))
            WAIT(1+rnd(1,5))
         END_IF
      END_IF
   END_IF
   
   GETSCREEN
   IF_PIXEL_IN(447,520,462,536,4044373)
      IF_PIXEL_IN(468,519,483,536,9035255)
         IF_PIXEL_IN(456,451,511,487,1251944)
            mouse_move($_return1, $_return2)
            LCLICK($_return1+rnd(4,8), $_return2+rnd(5,9))
            WAIT(1+rnd(1,5))
         END_IF
      END_IF
   END_IF
   
   GETSCREEN
   IF_PIXEL_IN(468,519,483,536,4044373)
      IF_PIXEL_IN(489,520,505,536,9035255)
         IF_PIXEL_IN(463,362,509,389,1908335)
            mouse_move($_return1, $_return2)
            LCLICK($_return1+rnd(4,8), $_return2+rnd(5,9))
            WAIT(1+rnd(1,5))
         END_IF
      END_IF
   END_IF
   wait(1+rnd(1,5)
   
   getscreen
   if_pixel_in(482,419,553,432,193)
      mouse_move($_return1, $_return2)
      lclick($_return1+rnd(1,3), $_return2+rnd(1,3))
      mouse_move(812,136)
      lclick(812+rnd(1,10),136+rnd(1,10))
   END_IF
end_if

egnostic

  • Зашел в гости
  • *
  • Posts: 15
    • View Profile
    • vektor38.ru
Спасибо большое! Не заметил =)
Да где мы поставили о пометках, там одно условие, пока не будет найден пиксель в 4 разных областях.
...не будьте строги - я только учусь ;)

i0

  • Оплот сообщества
  • ****
  • Posts: 353
  • CMann 4.13.014 final, ie, presto, win7 x86, x64
    • View Profile
не хватает скобки
182. wait(1+rnd(1,5))
(сорь что влез, в глаза бросилось)

egnostic

  • Зашел в гости
  • *
  • Posts: 15
    • View Profile
    • vektor38.ru
Спасибо! А есть редактор для проверки синтаксиса для этих скриптов?
...не будьте строги - я только учусь ;)

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Спасибо! А есть редактор для проверки синтаксиса для этих скриптов?

Нет, все исключительно глазами  ;)
Используй "расставить отступы" в редакторе чтобы увидеть нарушение конструкций. Как раз отсутствующие или лишние окончания сразу перекосят весь скрипт.
Ну и надо стараться как то сразу смотреть сколько скобок с обеих сторон.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
На счет рандома, проще сразу писать
Code: (clickermann) [Select]
WAIT(RND(2,4)) // задержка на 2 3 4 секундыНо лучше
Code: (clickermann) [Select]
WAITMS(RND(2000,4000)) //задержка от 2х до 4х секундТак еще более "рандомно"