Author Topic: Скрипт на Animation cancel  (Read 3113 times)

0 Members and 1 Guest are viewing this topic.

slokky

  • Зашел в гости
  • *
  • Posts: 8
    • View Profile
Скрипт на Animation cancel
« 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][/spoiler]
так же не пойму как правильно указать координаты.
Если условие соблюдено(появился значок как на скрине) то скрипт выполняет

KEYPRESS(#F)
waitms(20)
KEYPRESS(#F)
Если нет, повторяет всё сначала.


Заранее спасибо!

ezfalcon

  • Освоившийся
  • **
  • Posts: 30
    • View Profile
Re: Скрипт на Animation cancel
« Reply #1 on: April 01, 2015, 11:16:36 PM »
Сделай скриншот без потери качества. Вырежи середину из картинки Удар Неба примерно 5x5px, сохрани в <удар_неба.bmp>.

Code: (clickermann) [Select]
// координаты окна с игрой, если весь экран, то
$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=найти координаты области поиска][/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=пиксели][/spoiler]

GETSCREEN также можно применять не ко всему экрану, а к небольшой области, в которой находится твоя область поиска.
« Last Edit: April 02, 2015, 05:32:17 PM by ezfalcon »

slokky

  • Зашел в гости
  • *
  • Posts: 8
    • View Profile
Re: Скрипт на Animation cancel
« Reply #2 on: April 02, 2015, 10:59:44 AM »
Спасибо большое, но.
Скрипт как раз таки должен работать очень быстро, он рассчитан на то что я зажимаю Q а он быстро быстро прожимает пкм 2 пкм пока не появится картинка для ф,ф.
Поэтому вариант с пикселем подходит больше так как я заметил что поиск по картинке происходит дольше.
И я всё не могу разобраться с этими координатами, ф ф не прожимаестся но вот сели  поставить так IF_PIXEL_IN (0, 0, $_xmax, $_ymax, 4613013) то всё начинает работать.
В итоге более менее рабочий вариант такой.
Code: [Select]
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
« Last Edit: April 02, 2015, 11:01:56 AM by slokky »

ezfalcon

  • Освоившийся
  • **
  • Posts: 30
    • View Profile
Re: Скрипт на Animation cancel
« Reply #3 on: April 02, 2015, 05:22:00 PM »
И я всё не могу разобраться с этими координатами, ф ф не прожимаестся но вот сели  поставить так IF_PIXEL_IN (0, 0, $_xmax, $_ymax, 4613013) то всё начинает работать.
Поиск картинки у тебя долгий, потому что область поиска весь экран. Поиск картинки 5х5 для малой области будет работать быстрее, чем поиск твоего пикселя на всем экране. А поиск пикселя в области еще быстрее.

Если заклинание появляется всегда в том месте, как у тебя на скриншоте, то на глаз ограничь хотя бы область поиска так:
Code: (clickermann) [Select]
IF_PIXEL_IN (INT($_xmax / 2), INT($_ymax / 2), INT($_xmax * 3 / 4), INT($_ymax * 3 / 4), 4613013)скорость поиска увеличится в 16 раз примерно.

На твоем скриншоте разрешение 1280х1024. Для этого разрешения область поиска:
Code: (clickermann) [Select]
IF_PIXEL_IN (INT($_xmax / 2) + 105, INT($_ymax / 2) + 25, INT($_xmax / 2) + 160, INT($_ymax / 2) + 80, 4613013)
« Last Edit: April 02, 2015, 08:26:54 PM by ezfalcon »