Author Topic: Поиск нескольких картинок  (Read 4797 times)

0 Members and 1 Guest are viewing this topic.

showtime

  • Освоившийся
  • **
  • Posts: 30
    • View Profile
Поиск нескольких картинок
« on: October 27, 2014, 08:19:39 PM »
Почему-то скрипт не видит изображения, когда они точно есть в области.
Работает будто игнорируя IF_PICTURE_IN..
Ингорируемый кусок:
Code: [Select]
GETSCREEN
IF_PICTURE_IN (711,53, 1016,783, "1.bmp", "2.bmp", "3.bmp", "4.bmp","5.bmp", -1, 100)
WAITMS(100)
    LCLICK($_return1, $_return2)
    WAITMS(100)
    LCLICK(773,768) // !!!ЗАБРАТЬ ОКНО 3   
  goto(1) // возвращается в GETSCREEN
END_IF
« Last Edit: October 27, 2014, 08:21:10 PM by showtime »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Поиск нескольких картинок
« Reply #1 on: October 27, 2014, 08:31:09 PM »
Потому что в IF_PICTURE_IN допустимо указывать 1 картинку. То что ты хочешь реализуется так.

Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN (711,53, 1016,783, "1.bmp", -1, 100)
   WAITMS(100)
   LCLICK($_return1, $_return2)
   WAITMS(100)
   LCLICK(773,768) // !!!ЗАБРАТЬ ОКНО 3
ELSE
   IF_PICTURE_IN (711,53, 1016,783, "2.bmp", -1, 100)
      WAITMS(100)
      LCLICK($_return1, $_return2)
      WAITMS(100)
      LCLICK(773,768) // !!!ЗАБРАТЬ ОКНО 3
   ELSE
      IF_PICTURE_IN (711,53, 1016,783, "3.bmp", -1, 100)
         WAITMS(100)
         LCLICK($_return1, $_return2)
         WAITMS(100)
         LCLICK(773,768) // !!!ЗАБРАТЬ ОКНО 3
      ELSE
         IF_PICTURE_IN (711,53, 1016,783, "4.bmp", -1, 100)
            WAITMS(100)
            LCLICK($_return1, $_return2)
            WAITMS(100)
            LCLICK(773,768) // !!!ЗАБРАТЬ ОКНО 3
         ELSE
            IF_PICTURE_IN (711,53, 1016,783, "5.bmp", -1, 100)
               WAITMS(100)
               LCLICK($_return1, $_return2)
               WAITMS(100)
               LCLICK(773,768) // !!!ЗАБРАТЬ ОКНО 3
            ELSE
               WAITMS(50)
            END_IF
         END_IF
      END_IF
   END_IF
END_IF


Quote
goto(1) // возвращается в GETSCREEN
Эта строчка работать не будет, переход возможен только на метки. Если это весь скрипт то гото тут вообще никчему.


showtime

  • Освоившийся
  • **
  • Posts: 30
    • View Profile
Re: Поиск нескольких картинок
« Reply #2 on: October 27, 2014, 08:33:14 PM »
Quote
goto(1) // возвращается в GETSCREEN
Эта строчка работать не будет, переход возможен только на метки. Если это весь скрипт то гото тут вообще никчему.
Не весь, я хочу что бы в случае найденной картинки он забирал вещь и повторил поиск. 
И лишь в случае когда поиск не дает результатов шел дальше

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Поиск нескольких картинок
« Reply #3 on: October 27, 2014, 08:40:00 PM »
Тогда пиши сразу по умному, используя цикл

Code: (clickermann) [Select]
$check = 0
WHILE($check = 0) // цикл крутится пока переменная равна 0
   GETSCREEN
   IF_PICTURE_IN (711,53, 1016,783, "1.bmp", -1, 100)
      WAITMS(100)
      LCLICK($_return1, $_return2)
      WAITMS(100)
      LCLICK(773,768) // !!!ЗАБРАТЬ ОКНО 3
      WAITMS(100)
   ELSE
      IF_PICTURE_IN (711,53, 1016,783, "2.bmp", -1, 100)
         WAITMS(100)
         LCLICK($_return1, $_return2)
         WAITMS(100)
         LCLICK(773,768) // !!!ЗАБРАТЬ ОКНО 3
         WAITMS(100)
      ELSE
         IF_PICTURE_IN (711,53, 1016,783, "3.bmp", -1, 100)
            WAITMS(100)
            LCLICK($_return1, $_return2)
            WAITMS(100)
            LCLICK(773,768) // !!!ЗАБРАТЬ ОКНО 3
            WAITMS(100)
         ELSE
            IF_PICTURE_IN (711,53, 1016,783, "4.bmp", -1, 100)
               WAITMS(100)
               LCLICK($_return1, $_return2)
               WAITMS(100)
               LCLICK(773,768) // !!!ЗАБРАТЬ ОКНО 3
               WAITMS(100)
            ELSE
               IF_PICTURE_IN (711,53, 1016,783, "5.bmp", -1, 100)
                  WAITMS(100)
                  LCLICK($_return1, $_return2)
                  WAITMS(100)
                  LCLICK(773,768) // !!!ЗАБРАТЬ ОКНО 3
                  WAITMS(100)
               ELSE
                  WAITMS(50)
                  $check = 1 // не найдено, изменяем на 1, прерываем цикл
               END_IF
            END_IF
         END_IF
      END_IF
   END_IF
END_CYC

showtime

  • Освоившийся
  • **
  • Posts: 30
    • View Profile
Re: Поиск нескольких картинок
« Reply #4 on: October 28, 2014, 06:07:35 AM »
Возникла трудность с поиском текстовой картинки..
Вот такую - не видит, либо распознает ошибочно ее в другом месте отсюда $return совсем не те что нужно

Code: (clickermann) [Select]
LCLICK(589,998)  // 16777215  окно 1
WAITMS(500)
$check = 0
//кнопка забрать
$c = 770
$h = 999
//область лута
$e = 713
$t = 305
$k = 1010
$u = 1006
WHILE($check = 0) // цикл крутится пока переменная равна 0
   GETSCREEN
   IF_PICTURE_IN ($e,$t, $k,$u, "1.bmp", -1, 100)
      WAITMS(100)
      LCLICK($_return1, $_return2)
      WAITMS(100)
      SCREENSHOT
      WAITMS(100)
      LCLICK($c,$h) // !!!ЗАБРАТЬ
      WAITMS(100)
   ELSE
      IF_PICTURE_IN ($e,$t, $k,$u, "2.bmp", -1, 100)
         WAITMS(100)
         LCLICK($_return1, $_return2)
         WAITMS(100)
         SCREENSHOT
         WAITMS(100)
         LCLICK($c,$h) // !!!ЗАБРАТЬ
         WAITMS(100)
      ELSE
         IF_PICTURE_IN ($e,$t, $k,$u, "3.bmp", -1, 100)
            WAITMS(100)
            LCLICK($_return1, $_return2)
            WAITMS(100)
            LCLICK($c,$h) // !!!ЗАБРАТЬ
            WAITMS(100)
         ELSE
            IF_PICTURE_IN ($e,$t, $k,$u, "4.bmp", -1, 100)
               WAITMS(100)
               LCLICK($_return1, $_return2)
               WAITMS(100)
               LCLICK($c,$h) // !!!ЗАБРАТЬ
               WAITMS(100)
            ELSE
               IF_PICTURE_IN ($e,$t, $k,$u, "5.bmp", -1, 100)
                  WAITMS(100)
                  LCLICK($_return1, $_return2)
                  WAITMS(100)
                  LCLICK($c,$h) // !!!ЗАБРАТЬ
                  WAITMS(100)
               ELSE
                  IF_PICTURE_IN ($e,$t, $k,$u, "6.bmp", -1, 100)
                     WAITMS(100)
                     LCLICK($_return1, $_return2)
                     WAITMS(100)
                     LCLICK($c,$h) // !!!ЗАБРАТЬ
                     WAITMS(100)
                  ELSE
                     IF_PICTURE_IN ($e,$t, $k,$u, "7.bmp", -1, 100)
                        WAITMS(100)
                        LCLICK($_return1, $_return2)
                        WAITMS(100)
                        LCLICK($c,$h) // !!!ЗАБРАТЬ
                        WAITMS(100)
                     ELSE
                        WAITMS(50)
                        $check = 1 // не найдено, изменяем на 1, прерываем цикл
                     END_IF
                  END_IF
               END_IF
            END_IF
         END_IF
      END_IF
   END_IF
END_CYC
« Last Edit: October 28, 2014, 06:12:52 AM by showtime »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Поиск нескольких картинок
« Reply #5 on: October 28, 2014, 09:43:34 AM »
Скорее всего не находит. Находить не там может только если такое изображение есть ещё.
Используй процент совпадения.
Code: (clickermann) [Select]
IF_PICTURE_IN ($e,$t, $k,$u, "6.bmp", -1, 90)Величину нужно подобрать.

И ещё.... Зачем такая простыня? Можно же сократить:
Code: (clickermann) [Select]
LCLICK(589,998)  // 16777215  окно 1
WAITMS(500)
$check = 0
//область лута
$e = 713
$t = 305
$k = 1010
$u = 1006
WHILE($check = 0) // цикл крутится пока переменная равна 0
   GETSCREEN
   IF_PICTURE_IN ($e,$t, $k,$u, "1.bmp", -1, 100)
   ELSE
      IF_PICTURE_IN ($e,$t, $k,$u, "2.bmp", -1, 100)
      ELSE
         IF_PICTURE_IN ($e,$t, $k,$u, "3.bmp", -1, 100)
         ELSE
            IF_PICTURE_IN ($e,$t, $k,$u, "4.bmp", -1, 100)
            ELSE
               IF_PICTURE_IN ($e,$t, $k,$u, "5.bmp", -1, 100)
               ELSE
                  IF_PICTURE_IN ($e,$t, $k,$u, "6.bmp", -1, 90)
                  ELSE
                     IF_PICTURE_IN ($e,$t, $k,$u, "7.bmp", -1, 100)
                     ELSE
                        WAITMS(50)
                        $check = 1 // не найдено, изменяем на 1, прерываем цикл
                     END_IF
                  END_IF
               END_IF
            END_IF
         END_IF
      END_IF
   END_IF
   IF($check = 0)
      WAITMS(100)
      LCLICK($_return1, $_return2)
      WAITMS(100)
      LCLICK(770,999) // !!!ЗАБРАТЬ
      WAITMS(100)
   END_IF
END_CYC
« Last Edit: October 28, 2014, 09:45:20 AM by Vint »


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Поиск нескольких картинок
« Reply #6 on: October 28, 2014, 09:53:00 AM »
А ещё лучше и короче вот так:
Code: (clickermann) [Select]
LCLICK(589,998)  // 16777215  окно 1
WAITMS(500)
$check = 1
WHILE($check < 8) // цикл крутится пока переменная меньше 8
   GETSCREEN
   IF_PICTURE_IN (713,305, 1010,1006, STRCONCAT($check, ".bmp"), -1, 90)
      WAITMS(100)
      LCLICK($_return1, $_return2)
      WAITMS(100)
      LCLICK(770,999) // !!!ЗАБРАТЬ
      WAITMS(100)
      $check = 0
   END_IF
   WAITMS(50)   
   INC($check)
END_CYC


showtime

  • Освоившийся
  • **
  • Posts: 30
    • View Profile
Re: Поиск нескольких картинок
« Reply #7 on: October 28, 2014, 11:04:08 AM »
Спасибо за очередную подсказку, а что до простыни.. я ж не спец, делал по примеру)
Кстати, вы убрали мои переменные отсюда

Code: (Clickermann) [Select]
IF_PICTURE_IN (713,305, 1010,1006, STRCONCAT($check, ".bmp"), -1, 90)
Code: (Clickermann) [Select]
LCLICK(770,999) // !!!ЗАБРАТЬ
Ввиду того что код в вашей цитате повторяется в моем скрипте 5 раз - это не желательно. Можно их вернуть?
А так же потерян SCREENSHOT при поиске 1.bmp и 2.bmp
« Last Edit: October 28, 2014, 11:25:21 AM by showtime »

showtime

  • Освоившийся
  • **
  • Posts: 30
    • View Profile
Re: Поиск нескольких картинок
« Reply #8 on: October 28, 2014, 11:21:58 AM »
Code: (Clickermann) [Select]
LCLICK(589,998)  // 16777215  окно 1
WAITMS(500)
$check = 0
//кнопка забрать
$c = 770
$h = 999
//область лута
$e = 713
$t = 305
$k = 1010
$u = 1006
WHILE($check = 0) // цикл крутится пока переменная равна 0
   GETSCREEN
   IF_PICTURE_IN ($e,$t, $k,$u, "1.bmp", -1, 100)
   SCREENSHOT("1memory")
   ELSE
      IF_PICTURE_IN ($e,$t, $k,$u, "2.bmp", -1, 100)
      SCREENSHOT("1rohan")
      ELSE
         IF_PICTURE_IN ($e,$t, $k,$u, "3.bmp", -1, 100)
         ELSE
            IF_PICTURE_IN ($e,$t, $k,$u, "4.bmp", -1, 100)
            ELSE
               IF_PICTURE_IN ($e,$t, $k,$u, "5.bmp", -1, 100)
               ELSE
                  IF_PICTURE_IN ($e,$t, $k,$u, "6.bmp", -1, 90)
                  ELSE
                     IF_PICTURE_IN ($e,$t, $k,$u, "7.bmp", -1, 100)
                     ELSE
                        WAITMS(50)
                        $check = 1 // не найдено, изменяем на 1, прерываем цикл
                     END_IF
                  END_IF
               END_IF
            END_IF
         END_IF
      END_IF
   END_IF
   IF($check = 0)
      WAITMS(100)
      LCLICK($_return1, $_return2)
      WAITMS(200)
      LCLICK($c,$h) // !!!ЗАБРАТЬ
      WAITMS(100)
   END_IF
END_CYC

С учетом вышеизложенного переделал
« Last Edit: October 28, 2014, 11:24:46 AM by showtime »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Поиск нескольких картинок
« Reply #9 on: October 28, 2014, 12:14:46 PM »
Кстати, вы убрали мои переменные отсюда...
А так же потерян SCREENSHOT при поиске 1.bmp и 2.bmp...
Та ради бога. Я думал и думаю что скриншот был отладочный.

Ввиду того что код в вашей цитате повторяется в моем скрипте 5 раз - это не желательно. Можно их вернуть?
Если код повторяется несколько раз, целесообразней вынести его в подпрограмму.


showtime

  • Освоившийся
  • **
  • Posts: 30
    • View Profile
Re: Поиск нескольких картинок
« Reply #10 on: October 28, 2014, 01:04:09 PM »
Кстати, вы убрали мои переменные отсюда...
А так же потерян SCREENSHOT при поиске 1.bmp и 2.bmp...
Та ради бога. Я думал и думаю что скриншот был отладочный.
Скриншот только в первых двух случаях, т.к они самые важные
Папка с кликером находится на google drive и запускается оттуда же. Соответственно как только скрипт соберется взять 1.bmp или 2.bmp я смогу это увидеть даже с мобильного устройства

showtime

  • Освоившийся
  • **
  • Posts: 30
    • View Profile
Re: Поиск нескольких картинок
« Reply #11 on: October 28, 2014, 01:52:21 PM »
Code: (Clickermann) [Select]
// ПРОГРАММА СБОРА ЛУТА
SUB(search, $check, $e, $t, $k, $u, $c, $h)
   WHILE($check = 0) // цикл крутится пока переменная равна 0
      GETSCREEN
      IF_PICTURE_IN ($e,$t, $k,$u, "1.bmp", -1, 100)
         WAITMS(100)
         LCLICK($_return1, $_return2)
         WAITMS(100)
         SCREENSHOT("1memory")
         WAITMS(200)
         LCLICK($c,$h) // !!!ЗАБРАТЬ
         WAITMS(100)
      ELSE
         IF_PICTURE_IN ($e,$t, $k,$u, "2.bmp", -1, 100)
            WAITMS(100)
            LCLICK($_return1, $_return2)
            WAITMS(100)
            SCREENSHOT("1rohan")
            WAITMS(200)
            LCLICK($c,$h) // !!!ЗАБРАТЬ
            WAITMS(100)
         ELSE
            IF_PICTURE_IN ($e,$t, $k,$u, "3.bmp", -1, 100)
               WAITMS(100)
               LCLICK($_return1, $_return2)
               WAITMS(200)
               LCLICK($c,$h) // !!!ЗАБРАТЬ
               WAITMS(100)
            ELSE
               IF_PICTURE_IN ($e,$t, $k,$u, "4.bmp", -1, 100)
                  WAITMS(100)
                  LCLICK($_return1, $_return2)
                  WAITMS(200)
                  LCLICK($c,$h) // !!!ЗАБРАТЬ
                  WAITMS(100)
               ELSE
                  IF_PICTURE_IN ($e,$t, $k,$u, "5.bmp", -1, 100)
                     WAITMS(100)
                     LCLICK($_return1, $_return2)
                     WAITMS(200)
                     LCLICK($c,$h) // !!!ЗАБРАТЬ
                     WAITMS(100)
                  ELSE
                     IF_PICTURE_IN ($e,$t, $k,$u, "6.bmp", -1, 100)
                        WAITMS(100)
                        LCLICK($_return1, $_return2)
                        WAITMS(200)
                        LCLICK($c,$h) // !!!ЗАБРАТЬ
                        WAITMS(100)
                     ELSE
                        IF_PICTURE_IN ($e,$t, $k,$u, "7.bmp", -1, 100)
                           WAITMS(100)
                           LCLICK($_return1, $_return2)
                           WAITMS(200)
                           LCLICK($c,$h) // !!!ЗАБРАТЬ
                           WAITMS(100)
                        ELSE
                           WAITMS(50)
                           $check = 1 // не найдено, изменяем на 1, прерываем цикл
                        END_IF
                     END_IF
                  END_IF
               END_IF
            END_IF
         END_IF
      END_IF
   END_CYC
END_SUB


// ПРОГРАММА СКИЛЫ ПО БОСУ
SUB(damage, $dm)
   WHILE($dm < 5) // цикл крутится пока переменная меньше 5
      LCLICK(518,994)  // 8345622 топор
      WAITMS(500)
      INC($dm)
   END_CYC
   $dm = 1
   WHILE($dm < 27) // цикл крутится пока переменная меньше 27
      LCLICK(381,997)  // 9921055 скилы
      LCLICK(345,994)  // 8812384 глвл
      WAITMS(100)
      INC($dm)
   END_CYC
END_SUB

// ФАРМ С ЛУТОМ

// поиска лута
// $check

// область лута
// $e
// $t
// $k
// $u

// кнопка забрать
// $c
// $h

LCLICK(589,998)  // 16777215  окно 1
WAITMS(500)
search (0, 713, 305, 1010, 1006, 770, 999) // сбор лута
WAITMS(100)
damage (1) // по босу
WAITMS(100)
LCLICK(1259,765)  // 5321236 окно 2
WAITMS(100)
search(0, 1593, 48, 1894, 772, 1646, 766) // сбор лута
WAITMS(100)
MOVE(1398,339)
WAITMS(100)
LCLICK(1398,339)  // 8355711 сундук
WAITMS(500)
RCLICK(1398,339)  // 8355711 сундук
WAITMS(1500)
LCLICK(18,130)  // 8355711 окно 3
WAITMS(500)
search(0, 712, 65, 1009, 750, 769, 767) // сбор лута
WAITMS(100)

Добавил подпрограммы.
Буду рад советам по упразднению (наверняка гуру напишут тоже самое в 10 строчек :D), кодер я еще тот
ps. move в строке 112 не ошибка, там без него белиберда получается. пришел опытным путем к такому решению
« Last Edit: October 28, 2014, 01:58:42 PM by showtime »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Поиск нескольких картинок
« Reply #12 on: October 28, 2014, 03:18:30 PM »
Ну как сократить я писал.

Переменные $check и $dm зачем передавать как параметры? Ведь это внутренние счётчики. Зачем захламлять.

Code: (clickermann) [Select]
// ПРОГРАММА СБОРА ЛУТА
SUB(search, $e, $t, $k, $u, $c, $h)
   $check = 1
   WHILE($check < 8) // цикл крутится пока переменная меньше 8
      GETSCREEN
      IF_PICTURE_IN ($e,$t, $k,$u, STRCONCAT($check, ".bmp"), -1, 90)
         WAITMS(100)
         LCLICK($_return1, $_return2)
         IF($check = 1)
            WAITMS(100)
            SCREENSHOT("1memory")
         END_IF
         IF($check = 2)
            WAITMS(100)
            SCREENSHOT("1rohan")
         END_IF
         WAITMS(100)
         LCLICK($c,$h) // !!!ЗАБРАТЬ
         WAITMS(100)
         $check = 0
      END_IF
      WAITMS(50)
      INC($check)
   END_CYC
END_SUB

// ПРОГРАММА СКИЛЫ ПО БОСУ
SUB(damage)
   FOR($dm=0, $dm < 4)
      LCLICK(518,994)  // 8345622 топор
      WAITMS(500)
   END_CYC
   FOR($dm=0, $dm < 26)
      LCLICK(381,997)  // 9921055 скилы
      LCLICK(345,994)  // 8812384 глвл
      WAITMS(100)
   END_CYC
END_SUB

LCLICK(589,998)   // 16777215  окно 1
WAITMS(500)
search (713, 305, 1010, 1006, 770, 999) // сбор лута
WAITMS(100)
damage ()         // по босу
WAITMS(100)
LCLICK(1259,765)  // 5321236 окно 2
WAITMS(100)
search(1593, 48, 1894, 772, 1646, 766) // сбор лута
WAITMS(100)
MOVE(1398,339)
WAITMS(100)
LCLICK(1398,339)  // 8355711 сундук
WAITMS(500)
RCLICK(1398,339)  // 8355711 сундук
WAITMS(1500)
LCLICK(18,130)    // 8355711 окно 3
WAITMS(500)
search(712, 65, 1009, 750, 769, 767) // сбор лута
WAITMS(100)


showtime

  • Освоившийся
  • **
  • Posts: 30
    • View Profile
Re: Поиск нескольких картинок
« Reply #13 on: October 28, 2014, 03:40:36 PM »
спасибо! так обыграть со скриншотами не догадался