Автокликер Clickermann :: Форум
Основной раздел => Использование => Topic started by: slokky on April 01, 2015, 10:15:38 PM
-
Форумчане не хватает мозгов дописать скрипт. Суть такова:
IF(iskeydown(#Q)=1)
LCLICK(-1,-1)
KEYPRESS(#2)
LCLICK(-1,-1)
waitms(10)
GETSCREEN
Вот тут программа должна сканировать маленькую область экрана но я не знаю какую лучше команду использовать if_picture или if_pixel
[spoiler](http://s018.radikal.ru/i520/1504/99/5c0256399e34.jpg)[/spoiler]
так же не пойму как правильно указать координаты.
Если условие соблюдено(появился значок как на скрине) то скрипт выполняет
KEYPRESS(#F)
waitms(20)
KEYPRESS(#F)
Если нет, повторяет всё сначала.
Заранее спасибо!
-
Сделай скриншот без потери качества. Вырежи середину из картинки Удар Неба примерно 5x5px, сохрани в <удар_неба.bmp>.
// координаты окна с игрой, если весь экран, то
$gamex1 = 0
$gamey1 = 0
$gamex2 = $_xmax
$gamey2 = $_ymax
// координаты центра экрана
$midx = INT(($gamex2 - $gamex1) / 2)
$midy = INT(($gameу2 - $gamey1) / 2)
// координаты области поиска картинки, нужно замерить на скриншоте от центра скриншота смещения
// ниже, на глаз значения:
$dx1 = $midx + 103
$dy1 = $midy + 31
$dx2 = $midx + 157
$dy2 = $midy + 88
// значения задержек между кликами и нажатиями подбирай на практике, 100мс может быть слишком много
WHILE (1 = 1) // зацикливаем код
IF(iskeydown(#Q) = 1)
LCLICK(-1,-1)
waitms(100)
KEYPRESS(#2)
waitms(100)
LCLICK(-1,-1)
waitms(100)
GETSCREEN
IF_PICTURE_IN ($dx1, $dy1, $dx2, $dy2, "удар_неба.bmp", -1, 100)
KEYPRESS(#F)
waitms(100)
KEYPRESS(#F)
waitms(100)
END_IF
// подобрать задержку такую, чтобы не срабатывало несколько раз на одно нажатие кнопки <Q>
waitms(1000)
END_IF
waitms(50) // разгрузка
END_CYC
HALT // для красоты
Под спойлером разметка области поиска. В редакторе найди середину картинки. Замерь расстояния до области поиска.
Если все будет работать, то область поиска можно уменьшить, чтобы улучшить скорость нахождения.
[spoiler=найти координаты области поиска](http://www.picshare.ru/uploads/150402/5CBoJIm44B.jpg) (http://www.picshare.ru/view/6153464/)[/spoiler]
Можно заменить IF_PICTURE_IN ($dx1, $dy1, $dx2, $dy2, "удар_неба.bmp", -1, 100) на IF_PIXEL_IN($dx1, $dy1, $dx2, $dy2, COLORGEN(red, green, blue)). Вместо red, green, blue - подставь значения цветов для искомого пикселя. Область поиска можно еще уменьшить. Выбери один из этих, например:
[spoiler=пиксели](http://www.picshare.ru/uploads/150402/1qy8cWRNv9.jpg) (http://www.picshare.ru/view/6153582/)[/spoiler]
GETSCREEN также можно применять не ко всему экрану, а к небольшой области, в которой находится твоя область поиска.
-
Спасибо большое, но.
Скрипт как раз таки должен работать очень быстро, он рассчитан на то что я зажимаю Q а он быстро быстро прожимает пкм 2 пкм пока не появится картинка для ф,ф.
Поэтому вариант с пикселем подходит больше так как я заметил что поиск по картинке происходит дольше.
И я всё не могу разобраться с этими координатами, ф ф не прожимаестся но вот сели поставить так IF_PIXEL_IN (0, 0, $_xmax, $_ymax, 4613013) то всё начинает работать.
В итоге более менее рабочий вариант такой.
WHILE (1 = 1)
IF(iskeydown(6) = 1)
LCLICK(-1,-1)
waitms(10)
KEYPRESS(#2)
waitms(10)
LCLICK(-1,-1)
waitms(100)
GETSCREEN
IF_PIXEL_IN (0, 0, $_xmax, $_ymax, 4613013)
KEYPRESS(#F)
waitms(400)
KEYPRESS(#F)
END_IF
END_IF
waitms(10)
END_CYC
-
И я всё не могу разобраться с этими координатами, ф ф не прожимаестся но вот сели поставить так IF_PIXEL_IN (0, 0, $_xmax, $_ymax, 4613013) то всё начинает работать.
Поиск картинки у тебя долгий, потому что область поиска весь экран. Поиск картинки 5х5 для малой области будет работать быстрее, чем поиск твоего пикселя на всем экране. А поиск пикселя в области еще быстрее.
Если заклинание появляется всегда в том месте, как у тебя на скриншоте, то на глаз ограничь хотя бы область поиска так:
IF_PIXEL_IN (INT($_xmax / 2), INT($_ymax / 2), INT($_xmax * 3 / 4), INT($_ymax * 3 / 4), 4613013)
скорость поиска увеличится в 16 раз примерно.
На твоем скриншоте разрешение 1280х1024. Для этого разрешения область поиска:
IF_PIXEL_IN (INT($_xmax / 2) + 105, INT($_ymax / 2) + 25, INT($_xmax / 2) + 160, INT($_ymax / 2) + 80, 4613013)