Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: UniBlack on March 07, 2015, 04:07:27 PM

Title: Определение буквы и нажатие её
Post by: UniBlack on March 07, 2015, 04:07:27 PM
Здравствуйте. Пишу скрипт для онлайн игры, который будет определять какая буква написана на экране и нажимать её. Так вот для теста я написал код и заскринил картинку буквы которая мне нужна: (http://i.imgur.com/novBscy.png), в данном случае это "Y". И написал вот такой код по примеру, но я так понял что код который я написал бредовый:
Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN (0,0, 1920,1080, "1.bmp", -1, 10)
   KEYPRESS(89)
   WAITMS(100)
END_IF

Так вот, как мне реализовать мою задачу?
Title: Re: Определение буквы и нажатие её
Post by: UniBlack on March 07, 2015, 05:01:10 PM
ну зачем так самокритично, вы на практике работоспособность проверяли, почему всего 10% совпадение картинки? при таком проценте скрипт будет принимать за нужную букву практически весь алфавит.
Дело в том, что я даже пробовал и 100% и 90%, и 80% всё равно не работает. Специально в игре находил момент, когда нужно нажать "Y", но он не нажимает её.
Title: Re: Определение буквы и нажатие её
Post by: Oraven on March 07, 2015, 05:55:12 PM
Если используешь процент совпадения то в месте с этим нужно применять цветокоррекцию! На экране миллион цветов а после COLORMODE(6) их станет всего 64 и соответственно процент совпадения можно поставить куда выше. Вообще рабочие значения там 70-100. Чем больше процент совпадения тем дольше поиск.

Вот таким отдельным скриптом получаешь скорректированный скриншот, с него вырезаешь картинку для поиска.
Code: (clickermann) [Select]
// Получение скриншота с цветокоррекцией (фильтр 6)
GETSCREEN
COLORMODE(6)
SCREENSHOT
HALT

В своем скрипте используешь тот же уровень.
Code: (clickermann) [Select]
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (0,0, 1920,1080, "Y.bmp", -1, 80) // ограничь область поиска тем местом где должны появляться эти буквы!
   KEYPRESS(#Y)
   WAITMS(100)
END_IF
Title: Re: Определение буквы и нажатие её
Post by: UniBlack on March 07, 2015, 06:44:53 PM
А если я уберу фон у букв и сделаю его прозрачным, то он найдёт её?
Title: Re: Определение буквы и нажатие её
Post by: Vint on March 07, 2015, 07:03:40 PM
Найдет, если и пограничные пикселы сделаешь прозрачными.
Заодно любой участок этого цвета достаточного размера.
Title: Re: Определение буквы и нажатие её
Post by: UniBlack on March 07, 2015, 07:08:29 PM
Найдет, если и пограничные пикселы сделаешь прозрачными.
Заодно любой участок этого цвета достаточного размера.
И если я уберу эти самые пиксели в фотошопе, то мне эту картинку в 24 битах нужно сохранять?
Title: Re: Определение буквы и нажатие её
Post by: Oraven on March 07, 2015, 07:13:42 PM
В фотошопе не забудь отключить коррекцию цвета, а то он исказит цвета. Картинка должна быть 24 bit
Title: Re: Определение буквы и нажатие её
Post by: UniBlack on March 07, 2015, 07:14:22 PM
В фотошопе не забудь отключить коррекцию цвета, а то он исказит цвета. Картинка должна быть 24 bit
Спасибо, сейчас попробую
Title: Re: Определение буквы и нажатие её
Post by: UniBlack on March 07, 2015, 07:25:15 PM
Убрал фон, а он стал белым. Что делать? Ещё я не нашёл где отключать коррекцию цвета.
Было: (http://i.imgur.com/eogSV0W.png)
Стало: (http://i.imgur.com/TV7QJbN.png)
Title: Re: Определение буквы и нажатие её
Post by: Oraven on March 07, 2015, 07:37:12 PM
У тебя есть фотошоп но ты не умеешь им тользоваться?!
(http://cs416818.vk.me/v416818596/5f84/z0TOVi2St6g.jpg)

Настройка цветов
(http://savepic.net/6448390.png)

Используй слои!
(http://savepic.net/6454534.png)

Цвет прозрачности 65280
Title: Re: Определение буквы и нажатие её
Post by: Oraven on March 07, 2015, 07:38:33 PM
Вот образец скрипта
Code: (clickermann) [Select]
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (0,0, 1920,1080, "Y.bmp", 65280, 80) // ограничь область поиска тем местом где должны появляться эти буквы!
   KEYPRESS(#Y)
   WAITMS(100)
END_IF
Title: Re: Определение буквы и нажатие её
Post by: UniBlack on March 07, 2015, 08:17:39 PM
Окей, тогда получается "n":
Было: (http://i.imgur.com/LhsO1Ge.png)
Стало: (http://i.imgur.com/80KX9Bb.png)

Код получается такой:
Code: (clickermann) [Select]
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (0,0, 1920, 1080, "Y.bmp", 65280, 80) // где искать
   KEYPRESS(#Y)
   WAITMS(100)
   ELSE
   GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (0,0, 1920, 1080, "N.bmp", 65280, 80) // где искать
   KEYPRESS(#N)
   WAITMS(100)
   ELSE
END_IF

И если это правильно, то как зациклить?
Title: Re: Определение буквы и нажатие её
Post by: Oraven on March 07, 2015, 09:56:42 PM
Чуть чуть не так

Code: (clickermann) [Select]
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (0,0, 1920, 1080, "Y.bmp", 65280, 80) // где искать
   KEYPRESS(#Y)
   WAITMS(100)
ELSE
   IF_PICTURE_IN (0,0, 1920, 1080, "N.bmp", 65280, 80) // где искать
      KEYPRESS(#N)
      WAITMS(100)
   ELSE
      WAITMS(50)
   END_IF
END_IF

Если это весь код то он и так будет крутить бесконечно.
Title: Re: Определение буквы и нажатие её
Post by: UniBlack on March 07, 2015, 10:04:13 PM
Даже если я ещё два условия добавлю всё равно два END_IF в конце?
Title: Re: Определение буквы и нажатие её
Post by: Oraven on March 07, 2015, 10:47:14 PM
Даже если я ещё два условия добавлю всё равно два END_IF в конце?

Запомни правило, сколько в скрипте IF столько должно быть и END_IF!
IF - это начало условия
END_IF - обозначение его конца.
Некоторые функции типо IF_PICTURE_IN IF_PIXEL_IN тоже своего рода условия и для них тоже нужно писать END_IF
Title: Re: Определение буквы и нажатие её
Post by: UniBlack on March 08, 2015, 02:35:56 PM
Получился такой код:
Code: (clickermann) [Select]
GETSCREEN
COLORMODE(6)
  IF_PICTURE_IN (0,0, 1920, 1080, "Y.bmp", 65280, 80)
      KEYPRESS(#Y)
      WAITMS(100)
ELSE
      IF_PICTURE_IN (0,0, 1920, 1080, "Y1.bmp", 65280, 80)
      KEYPRESS(#Y)
      WAITMS(100)
ELSE
      IF_PICTURE_IN (0,0, 1920, 1080, "Y2.bmp", 65280, 80)
      KEYPRESS(#Y)
      WAITMS(100)
ELSE
      IF_PICTURE_IN (0,0, 1920, 1080, "yy.bmp", 65280, 80)
      KEYPRESS(#Y)
      WAITMS(100)
ELSE
      IF_PICTURE_IN (0,0, 1920, 1080, "yy1.bmp", 65280, 80)
      KEYPRESS(#Y)
      WAITMS(100)
ELSE
      IF_PICTURE_IN (0,0, 1920, 1080, "yy2.bmp", 65280, 80)
      KEYPRESS(#Y)
      WAITMS(100)
ELSE
      IF_PICTURE_IN (0,0, 1920, 1080, "yyy.bmp", 65280, 80)
      KEYPRESS(#Y)
      WAITMS(100)
ELSE
      IF_PICTURE_IN (0,0, 1920, 1080, "yyy1.bmp", 65280, 80)
      KEYPRESS(#Y)
      WAITMS(100)
ELSE
      IF_PICTURE_IN (0,0, 1920, 1080, "yyy2.bmp", 65280, 80)
      KEYPRESS(#Y)
      WAITMS(100)
ELSE
      IF_PICTURE_IN (0,0, 1920, 1080, "n.bmp", 65280, 80)
      KEYPRESS(#N)
      WAITMS(100)
ELSE
      IF_PICTURE_IN (0,0, 1920, 1080, "n1.bmp", 65280, 80)
      KEYPRESS(#N)
      WAITMS(100)
ELSE
      IF_PICTURE_IN (0,0, 1920, 1080, "n2.bmp", 65280, 80)
      KEYPRESS(#N)
      WAITMS(100)
ELSE
      IF_PICTURE_IN (0,0, 1920, 1080, "nn.bmp", 65280, 80)
      KEYPRESS(#N)
      WAITMS(100)
ELSE
      IF_PICTURE_IN (0,0, 1920, 1080, "nn1.bmp", 65280, 80)
      KEYPRESS(#N)
      WAITMS(100)
ELSE
      IF_PICTURE_IN (0,0, 1920, 1080, "nn2.bmp", 65280, 80)
      KEYPRESS(#N)
      WAITMS(100)
ELSE
      IF_PICTURE_IN (0,0, 1920, 1080, "h.bmp", 65280, 80)
      KEYPRESS(#H)
      WAITMS(100)
ELSE
      IF_PICTURE_IN (0,0, 1920, 1080, "h1.bmp", 65280, 80)
      KEYPRESS(#H)
      WAITMS(100)
ELSE
      IF_PICTURE_IN (0,0, 1920, 1080, "h2.bmp", 65280, 80)
      KEYPRESS(#H)
      WAITMS(100)
ELSE
      IF_PICTURE_IN (0,0, 1920, 1080, "HH.bmp", 65280, 80)
      KEYPRESS(#H)
      WAITMS(100)
ELSE
      IF_PICTURE_IN (0,0, 1920, 1080, "HH1.bmp", 65280, 80)
      KEYPRESS(#H)
      WAITMS(100)
ELSE
      IF_PICTURE_IN (0,0, 1920, 1080, "HH2.bmp", 65280, 80)
      KEYPRESS(#H)
      WAITMS(100)
ELSE
      IF_PICTURE_IN (0,0, 1920, 1080, "hhh.bmp", 65280, 80)
      KEYPRESS(#H)
      WAITMS(100)
ELSE
      IF_PICTURE_IN (0,0, 1920, 1080, "hhh1.bmp", 65280, 80)
      KEYPRESS(#H)
      WAITMS(100)
ELSE
      IF_PICTURE_IN (0,0, 1920, 1080, "hhh2.bmp", 65280, 80)
      KEYPRESS(#H)
      WAITMS(100)
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF

Но он, не работает
Title: Re: Определение буквы и нажатие её
Post by: Oraven on March 08, 2015, 02:51:21 PM
В коде ошибок нет, единственное в конце стоит добавить небольшую задержку для уменьшения нагрузки на проц. Думай что не так с твоими картинками.