Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: AnastasiyDallet on August 22, 2015, 04:19:14 PM
-
Недавно поставила эту программку, кое что даже написала сама и как ни странно оно работает, но в связи с нехваткой времени и педагогическим образованием, прошу помочь разобраться в следующем:
Я ни как не могу придумать, как реализовать движение персонажа в игре.
Грубо говоря, нужно реализовать функцию определяющую расстояние между игроком и целью, после чего в зависимости от полученных результатов заставить мышку щелкать в нужные ячейки.
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "объект.bmp", -1, 100)
(здесь нужна функция возвращающая координаты место положения найденного рисунка($_return1, $_return2)
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "я.bmp", -1, 100)
(здесь нужна функция возвращающая координаты место положения найденного рисунка )($_return3, $_return4)
после чего путем не сложных арифметически действий нужно получить значение ($_return1-$_return3)и ($_return2-$_return4) объяснить этой чертовой машине куда щелкать мышкой, в зависимости от полученного результата)
после долгих одиноких, летних ночей все таки удалось написать следующее, но основной проблемы это не решает(:
// New Script
// Author: Anonymous
// Version: 1.0 (06.08.2015)
#name "New Age"
SCREENSHOT
skip = 1: // ДВИЖЕНЬЕ ВПРАВО
skip = 2: // ДВИЖЕНЬЕ ВлеВО
skip = 3: // НАЧАЛО
skip = 4: // нажать победа
skip = 5: // ЖМЕМ фазы боя
skip = 6: // закрыть сообщение
skip = 7: // выход
3:
GETSCREEN
IF_PIXEL_IN(1153,289, 1153,289,255)
GOTO(1)
else
IF_PIXEL_IN(1154,281,1154,281,255)
GOTO(2)
else
IF_PIXEL_IN(753,268,816,342,1793287)
GOTO(4)
else
IF_PIXEL_IN(455,560,455,560,15878)
GOTO(5)
else
IF_PIXEL_IN(932,239,932,239,5395796)
GOTO(6)
else
GOTO(3)
1:
IF_PIXEL_IN(1153,289, 1153,289,255)
MOVE(1154,281)
WAITMS(100)
LCLICK(1154,281)
WAITMS(rnd(100,500)
MOVE(710,595)
WAITMS(rnd(100,500)
LCLICK(710,595)
WAIT(rnd(4,6)
MOVE(638,450)
WAITMS(rnd(100,500)
LCLICK(638,450)
GOTO(3)
End_if
2:
IF_PIXEL_IN(1154,281,1154,281,255)
MOVE(1153,289)
WAITMS(rnd(100,500)
LCLICK(1153,289)
WAITMS(rnd(100,500)
MOVE(710,595)
WAITMS(rnd(100,500)
LCLICK(710,595)
WAIT(rnd(4,6)
MOVE(638,450)
WAITMS(rnd(100,500)
LCLICK(638,450)
GOTO(3)
End_if
4:
IF_PIXEL_IN(753,268,816,342,1793287)
MOVE(705, 476)
WAITMS(rnd(100,500)
LCLICK(705, 476)
WAITMS(rnd(100,500)
MOVE(705, 529)
WAITMS(rnd(100,500)
LCLICK(705, 529)
WAITMS(rnd(100,500)
GOTO(3)
End_if
5:
IF_PIXEL_IN(455,560,455,560,15878)
MOVE(694, 594)
WAITMS(rnd(100,500)
LCLICK(694, 594)
WAITMS(rnd(100,500)
GOTO(3)
End_if
6:
IF_PIXEL_IN(932,239,932,239,5395796)
MOVE(927,252)
WAITMS(rnd(100,500)
LCLICK(927,252)
WAITMS(rnd(100,500)
GOTO(3)
End_if
-
Из справки: "Если параметр currency не задан, по умолчанию он равен 100. Если параметр bgcolor не задан, по умолчанию он равен -1. Если есть необходимость задать точность, не задавая фон, сделайте bgcolor равным -1
Входные файлы для анализа должны находиться в директории проекта, быть формта BMP и иметь стандартную разрядность 24 бита. В случае использования цветокоррекции, входной файл должен быть уже откорректирован."
Что сделать: Использовать для файлов "объект.bmp" и "я.bmp" цветокоррекцию, снизить точность поиска до 70-90%.
P.S. А вообще-то поспешил) Игра браузерная или клиентская? Там могут быть нюансы.
-
Спасибо) Но дело в том, что с идентификацией картинки у меня проблем особых нет. Вопрос в том, как определить расстояние между 2мя объектами и как перевести ($_return1, $_return2) в числовые координаты, с которыми можно производить арифметические действия)
-
Спасибо) Но дело в том, что с идентификацией картинки у меня проблем особых нет. Вопрос в том, как определить расстояние между 2мя объектами и как перевести ($_return1, $_return2) в числовые координаты, с которыми можно производить арифметические действия)
$_return1, $_return2 это и есть две системные переменные содержащие координаты объекта (его верхнего левого угла)
Полученные данные можно записать в переменные
$x1 = $_return1
$y1 = $_return2
На счет твоего скрипта, там есть ошибки, отсутствуют завершения END_IF, коменты нужно помечать косыми чертами.
Вот тот же код но без не нужных гото и лишнего.
#name "New Age"
//SCREENSHOT
//skip = 1: // ДВИЖЕНЬЕ ВПРАВО
//skip = 2: // ДВИЖЕНЬЕ ВлеВО
//skip = 3: // НАЧАЛО
//skip = 4: // нажать победа
//skip = 5: // ЖМЕМ фазы боя
//skip = 6: // закрыть сообщение
//skip = 7: // выход
GETSCREEN
IF_PIXEL_IN(1153,289, 1153,289,255)
MOVE(1154,281)
WAITMS(100)
LCLICK(1154,281)
WAITMS(rnd(100,500)
MOVE(710,595)
WAITMS(rnd(100,500)
LCLICK(710,595)
WAIT(rnd(4,6)
MOVE(638,450)
WAITMS(rnd(100,500)
LCLICK(638,450)
WAITMS(100)
ELSE
IF_PIXEL_IN(1154,281,1154,281,255)
MOVE(1153,289)
WAITMS(rnd(100,500)
LCLICK(1153,289)
WAITMS(rnd(100,500)
MOVE(710,595)
WAITMS(rnd(100,500)
LCLICK(710,595)
WAIT(rnd(4,6)
MOVE(638,450)
WAITMS(rnd(100,500)
LCLICK(638,450)
WAITMS(100)
ELSE
IF_PIXEL_IN(753,268,816,342,1793287)
MOVE(705, 476)
WAITMS(rnd(100,500)
LCLICK(705, 476)
WAITMS(rnd(100,500)
MOVE(705, 529)
WAITMS(rnd(100,500)
LCLICK(705, 529)
WAITMS(rnd(100,500)
ELSE
IF_PIXEL_IN(455,560,455,560,15878)
MOVE(694, 594)
WAITMS(rnd(100,500)
LCLICK(694, 594)
WAITMS(rnd(100,500)
ELSE
IF_PIXEL_IN(932,239,932,239,5395796)
MOVE(927,252)
WAITMS(rnd(100,500)
LCLICK(927,252)
WAITMS(rnd(100,500)
END_IF
END_IF
END_IF
END_IF
END_IF
WAITMS(50)
Вот код позволяющий определять расстояние между двумя точками и угол
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "объект.bmp", -1, 100)
$x1 = $_return1
$y1 = $_return2
END_IF
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "я.bmp", -1, 100)
$x2 = $_return1
$y2 = $_return2
END_IF
$q = ARCcos((-1)*($y2-$y1)/Sqrt(POW(($x2-$x1),2)+POW(($y2-$y1),2)))
IF($x2 < $x1)
$q = 360 - $q
END_IF
$q = int($q)
$r = DIST($x1,$y1,$x2,$y2)
LOGWRITE ("Расстояние: ", $r)
LOGWRITE ("угол = ", $q, " град.")
HALT
Я не знаю как это тебе поможет :o
-
Огромное Вам спасибо, Вы гений!) следующую ночь посвящу себя экспериментам)
-
Привет!
Сорри за оффтоп
Возможно такую тему уже поднимали.
Постоянно стыкаюсь с проблемой подгонов скриптов под разные разширения экранов.
Вопрос в следующем. Возможно cделать GETSCREEN екрана с подгоном в рамки одного розширения? Например 800*600.
С кликами тут пробем не вижу разность разширений можна компенсировать LCLCIK (X+$X, Y+$Y)
Не пинайте меня сильно тольно начинаю
-
Всё реально, нужен просто опыт. Определять и брать за точки отсчёта постоянные элементы и все действия производить относительно их. А не кликать по жёстким координатам.
Есть конечно случаи когда привязаться не к чему, но это очень редко.
Понятно, что создание такого скрипта требует гораздо больше усилий и времени. Для универсальности нужно приложить усилия.
-
не так уж всё и сложно. я для таких случаев сразу переношу окно, в котором требуются кокоето действие, в определенные координаты, например (0, 0) или (10, 10). команда WNDPOS (hwnd, x, y). если окно поддается изменению размеров, то и их ставим статичними , команда WNDSETINFO (hwnd, $var1, $var2, $var3, $var4).
второй вариант посложнее, в основном поможет в браузерных играх. описан в предыдущем сообщении. тут поможет WNDGETINFO (hwnd, $var1, $var2, $var3, $var4). находим положение флеша на экране, и далее работаем относительно этих координат.
добавлю. при переносе окна в статичные координаты, часто бывает косяк со стилем рабочего стола. в разных стилях разная высота шапки и ширина рамки окна. поэтому на всякий случай проверяем WNDGETINFO (hwnd, $var1, $var2, $var3, $var4) ширину и высоту окна. если чтото не так, то корректируем положение окна так, чтобы рабочая зона окна встала на свое место.
-
... второй вариант посложнее, в основном поможет в браузерных играх. описан в предыдущем сообщении. тут поможет WNDGETINFO (hwnd, $var1, $var2, $var3, $var4). находим положение флеша на экране, и далее работаем относительно этих координат.
Тоже не всегда. Вот игра Зомби Ферма. Раньше во всех СС был один размер окна. Потом переделали. В ВКонтакте окно флеша осталось жёстких размеров но стало больше 1000х730. Во всех других СС оно стало "резиновым" по горизонтали подстраивающимся под размер монитора, точнее браузера. И на разных разрешениях/СС/браузерах оно разное. И если Маил, например, вводит рекламные панели справа окно уменьшается доже настроенное на маил.
И если скрипт обычный - ему хана.
А скрипты были рукописные и на 3000 строк. Писались больше месяца... Слава богу что не жестко.
А там ещё есть полноэкранный режим, где размер = разрешению и все элементы раздвигаются по краям. А вертикальное положение всплывающих окон тоже центрируется под новый лад.
-
Еще разок подниу тему
Есть возможность реализовать например GETSCREEN с установкой корекции количество пикселей в сделаном изображениее. В независиомсти от разширения экрана?
Возможно это приведет к универсализации скрипта под любые экраны и т.д.
Википедик говорит что есть прямая зависимость количество пискселей на точку от:
• формата файла
• разшерения экрана,
• пропорции изображения экрана (тоесть 16:9, 4:3)
• размер изображения
• Другие параметры (разрадяность, герцовка и.д.)
Вся эта лабудня играет роль когда картинка уже на экране. Есть возможность перехватить изображение не выводя а просто ифнормацию про изображение которое можна обрабатывать. Понимаю что мы ставим координаты уже на выведеном изображении на экране которые хотим поместить в анализ. Но, может мысли какие то.
-
Чёт ты не в те дебри полез. Какое количество пикселей на точку? Какие форматы файла?... Всё это не имеет никакого отношения не к поиску вообще не к GETSCREEN в частности.
Для другого разрешения (размера экрана в пикселах) ты можешь только пересчитывать координаты на лету опираясь на начальное разрешение для которого делался скрипт.
Но это прокатит далеко не всегда, даже очень в редких случаях и очень простых.