Author Topic: Не работает IF_PIXEL_IN помогите пож.  (Read 3232 times)

0 Members and 4 Guests are viewing this topic.

Vadim8

  • Зашел в гости
  • *
  • Posts: 3
    • View Profile
Не работает IF_PIXEL_IN помогите пож.
« on: November 03, 2017, 07:57:08 PM »
Ребят помогите с таким вопросом. Есть одна браузерная онлайн игра в которой мне надо быстро входить и выходить на низкоуровневых персонажах и проверять наличие одного квеста. На своем нубском уровне я написал такой скрипт:
 

Code: [Select]
WAITMS(400)           // выбор мурзилы на панели задач
LCLICK(533,749)     //
WAITMS(200)         //
GETSCREEN           //


$check = 0                                            // проверка загружено ли окно
WHILE($check = 0)                               //  входа в игру и ввод ника и пароля
   IF_PICTURE_IN (672,412, 770,519, "murzila1.bmp")   //
      GETSCREEN                                                           //
      WAITMS(500)               //пароль       
      LCLICK(784,500)
      LCLICK(784,500)
      WAITMS(500)
      KEYPRESS (#4)
      WAITMS(20)
      KEYPRESS (#1)
      WAITMS(20)
      KEYPRESS (#1)
      WAITMS(20)
      KEYPRESS (#3)
      WAITMS(20)
      KEYPRESS (#1)
      WAITMS(20)
      KEYPRESS (#2)
      WAITMS(20)
     
      LCLICK(786,481)                 // ник
      LCLICK(786,481)
      WAITMS(500)
      KEYPRESS (219)
      WAITMS(20)
      KEYPRESS (74)
      WAITMS(20)
      KEYPRESS (86)
      WAITMS(20)
      KEYPRESS (90)
      WAITMS(20)
      KEYPRESS (82)
      WAITMS(20)
      KEYPRESS (52)
      WAITMS(20)
      KEYPRESS (49)
      WAITMS(20)     
     
      $check = 1
   else
      WAITMS(200)
   end_if
end_cyc
WAITMS(50)
KEYDOWN (#ENTER)                   // вход в игру
KEYUP (#ENTER)                        //

getscreen                          // цыкл на проверку загрузилась игра или нет
$check = 0
WHILE($check = 0)
   getscreen
   IF_PICTURE_IN (723,500, 1024,721, "murzila2.bmp")
      getscreen
      IF_PICTURE_IN (723,500, 1024,721, "murzila3.bmp")
         getscreen
         $check = 1
      end_if
   else
      WAITMS(200)
   end_if
end_cyc

Getscreen                               // и вот главное проверка наличия квеста
WAIT(1)
IF_PIXEL_IN (272,78, 796,526, 333557)
Getscreen
   HINTPOPUP ("Замок нашелся ХОМЯК41", ["ЗАМОК"])
   LOGWRITE ("Замок нашелся ХОМЯК41")
WAIT(1)
end_if

WAITMS(500)                             // клик на кнопку выход
LCLICK(995,711)

Кликер сначала кликает на панель задач где находится первый браузер (1 из четырех), потом вводит пароль ник входит в игру проверяет загрузилось ли окно игры. После должна выполнится проверка на наличие квеста, но к сожелению она то срабатывает то нет. Далее кликер делает такой же самый скрипт только там я изменяю  браузер на панели задач ник и пароль к персонажу. тоесть этот скрипт я копирую больше 100 раз (зависит от количества персонажей которых надо провверить).

Главная проблема в том что  вот этот цыкл:

Code: [Select]
Getscreen                                 // и вот главное проверка наличия квеста
WAIT(1)
IF_PIXEL_IN (272,78, 796,526, 333557)
Getscreen
   HINTPOPUP ("Замок нашелся ХОМЯК41", ["ЗАМОК"])
   LOGWRITE ("Замок нашелся ХОМЯК41")
WAIT(1)
end_if

то срабатывает то нет. Помогите пож. решить проблему. Понимаю что умельцам это покажется смешно но я все же прошу совета.
« Last Edit: November 03, 2017, 09:34:05 PM by Vadim8 »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Не работает IF_PIXEL_IN помогите пож.
« Reply #1 on: November 03, 2017, 09:45:37 PM »
Главная проблема в том что  вот этот цыкл:
Это не цикл.

Странно у тебя гетскрины расставлены. Зачем они внутри условий поиска?

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


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Не работает IF_PIXEL_IN помогите пож.
« Reply #2 on: November 03, 2017, 10:01:49 PM »
Квадратные скобки в скрипте не пишут, ими обозначены необязательные параметры.

Vadim8

  • Зашел в гости
  • *
  • Posts: 3
    • View Profile
Re: Не работает IF_PIXEL_IN помогите пож.
« Reply #3 on: November 03, 2017, 10:32:10 PM »
Ребят помогите поправить понимаю что это для вас мягко говоря бред. Насчет Getscreen натыкал их везде где только можно с моей точки зрения это не помешает выполнению сценария, опять же понимаю что знаний ноль.

Суть такова, что если я захожу на персонажа и там есть квест то такой цвет там точно присутствует, насчет времени вполне возможно что его нехватает так как если повторить цыкл при загруженной страничке запись в лог происходит нормально.

Визуально когда кликер заходит на страничку и там присутствует картинка квеста с нужным для меня цветом кликер может проигнорировать ее, а может вывести сообщение и записать в лог. скрин обьекта приложу может это както поможет. Буду очень благодарен если поможете разобраться.
« Last Edit: November 03, 2017, 11:21:44 PM by Vadim8 »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Не работает IF_PIXEL_IN помогите пож.
« Reply #4 on: November 04, 2017, 09:13:18 AM »
Исправил что можно.
Чтобы функция KEYSTRING правильно печатала текст, раскладки в кликере и целевом окне должны совпадать En.
Кроме того тебе нужно скачать последнюю бетта версию кликера. только там KEYSTRING сможет напечатать квадратные скобки.
http://crapware.aidf.org/forum/index.php?topic=356.msg23510#msg23510

Добавил сохранение снимка в файл. Если не сработало сам сможешь проверить что там в данный момент видел кликер.
Code: (clickermann) [Select]
// выбор мурзилы на панели задач
LCLICK(533,749)
WAITMS(200)

$check = 0                                            // проверка загружено ли окно
WHILE($check = 0)                               //  входа в игру и ввод ника и пароля
   GETSCREEN
   IF_PICTURE_IN (672,412, 770,519, "murzila1.bmp")
      WAITMS(500)               //пароль
      LCLICK(784,500)
      LCLICK(784,500)
      WAITMS(50)
      KEYSTRING("411312")
      WAITMS(20)
     
      LCLICK(786,481)                 // ник
      LCLICK(786,481)
      WAITMS(50)
      KEYSTRING("[jvzr41")
      WAITMS(200)
     
      $check = 1
   else
      WAITMS(100)
   end_if
end_cyc

KEYPRESS(#ENTER) // вход в игру
WAITMS(100)

// цыкл на проверку загрузилась игра или нет
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PICTURE_IN (723,500, 1024,721, "murzila2.bmp")
      IF_PICTURE_IN (723,500, 1024,721, "murzila3.bmp")
         $check = 1 //
      end_if
   else
      WAITMS(100)
   end_if
end_cyc

// и вот главное проверка наличия квеста
WAIT(1)
GETSCREEN
SCREENSHOTEX(272,78, 796,526, "Image_", 0) // Для теста сохраняем снимок в файл
IF_PIXEL_IN (272,78, 796,526, 333557)
   HINTPOPUP ("Замок нашелся ХОМЯК41", "ЗАМОК")
   LOGWRITE ("Замок нашелся ХОМЯК41")
   WAIT(1)
end_if

WAITMS(500)                             // клик на кнопку выход
LCLICK(995,711)
WAITMS(400)

HALT // Стоп

Vadim8

  • Зашел в гости
  • *
  • Posts: 3
    • View Profile
Re: Не работает IF_PIXEL_IN помогите пож.
« Reply #5 on: November 04, 2017, 04:13:48 PM »
Oraven, kiril большое спасибо.

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

kiril да вы правы пароли и ники персонажей изменяются. Игровых действий в игре производить ненадо, проверка двух картинок нужна так как бывает что одна часть игры загрузилась а вторая еще нет. Заковыка у меня только в том что я поочередно переключаюсь между разными браузерами ввожу ники и пароли на разных языках, проверяю есть ли на картинке квест и выхожу с игры. Поэтому я решил тупо копировать один и тот же скрипт сто раз и изменять его под браузер язык введения ника пароля. по другому ввиду своих ограниченных знаний недодумался.  Было бы круто сделать все одним небольшим скриптом но я просто еще незнаю как.
« Last Edit: November 04, 2017, 04:16:27 PM by Vadim8 »

All-Seeing

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Re: Не работает IF_PIXEL_IN помогите пож.
« Reply #6 on: November 10, 2017, 10:20:36 PM »
Доброго времени суток.
Не хочу плодить новые темы, напишу в этой, так как мой вопрос по команде IF_PIXEL_IN.
Есть поиск пикселя:
Code: [Select]
WAITMS(200)
GETSCREEN
$flag=0
WHILE ($flag=0)
   IF_PIXEL_IN(1356,173, 1442,228, 500129, 557184)
      $flag=1
   END_IF
   WAITMS(200)
   
END_CYC
Т.е. при совпадении искомого пикселя цикл заканчивается.
Замечательно все работает.

Подскажите, как организовать цикл, что-бы при нахождении искомого пикселя цикл продолжался, а заканчивался только в том случае, когда пиксель не будет найден.
Спасибо.

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Не работает IF_PIXEL_IN помогите пож.
« Reply #7 on: November 10, 2017, 10:39:45 PM »
да ладно kiril, не нервничай :). ответ то простой, нужно добавить "иначе" в условие.
Code: (clickermann) [Select]
WAITMS(200)
GETSCREEN
$flag=0
WHILE ($flag=0)
   GETSCREEN
   IF_PIXEL_IN(1356,173, 1442,228, 500129, 557184)
   else
      $flag=1
   END_IF
   WAITMS(200)
   
END_CYC

не забывай обновлять графический буфер перед поиском пикселя, GETSCREEN.

All-Seeing

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Re: Не работает IF_PIXEL_IN помогите пож.
« Reply #8 on: November 10, 2017, 10:48:24 PM »
да ладно kiril, не нервничай :). ответ то простой, нужно добавить "иначе" в условие.
Code: (clickermann) [Select]
WAITMS(200)
GETSCREEN
$flag=0
WHILE ($flag=0)
   GETSCREEN
   IF_PIXEL_IN(1356,173, 1442,228, 500129, 557184)
   else
      $flag=1
   END_IF
   WAITMS(200)
   
END_CYC

не забывай обновлять графический буфер перед поиском пикселя, GETSCREEN.
Спасибо, разобрался.