Автокликер Clickermann :: Форум
Основной раздел => Предложения => Topic started by: vovan13 on October 17, 2012, 01:43:34 AM
-
добавить к командам LClick или MOVE не обязательный параметр speed , чтобы при кликах курсор не скакал по точкам, а плавно переходил от одной точки к другой, как живой :)
типа вот этого: MOVE($x,$y,$speed)
В играх ставят проверку на движение мыши, если кликер скачет тупо по точкам, вылазит всякая гадость для проверки игрока. Я конеша написал инклудик для плавной работы, но время выполнения сценария увеличилось.
-
Конечно увеличилось, ведь для перемещения нужно время! ;D Или ты хочешь какой-нибудь асинхронный метод для этого? Сложно подобное будет автору реализовать.
Кстати, раз уж написал, то поделись инклудом! Все, думаю, тебе спасибо скажут. ::)
-
Вот скрипт для плавного перемещения мыши
$x2 = 2 // точка перемещения X
$y2 = 2 // точка перемещения Y
$x1 = $_xmouse
$y1 = $_ymouse
$speed = 5
if (($x1 > $x2) & ($y1 > $y2))
while(($x1 > $x2) | ($y1 > $y2))
if ($x1 > $x2)
MOVE($x1-$speed, $y1)
$x1 = $x1-$speed
end_if
if ($y1 > $y2)
MOVE($x1, $y1-$speed)
$y1 = $y1-$speed
end_if
END_CYC
end_if
if (($x1 < $x2) & ($y1 < $y2))
while(($x1 < $x2) | ($y1 < $y2))
if ($x1 < $x2)
MOVE($x1+$speed, $y1)
$x1 = $x1+$speed
end_if
if ($y1 < $y2)
MOVE($x1, $y1+$speed)
$y1 = $y1+$speed
end_if
END_CYC
end_if
if (($x1 < $x2) & ($y1 > $y2))
while(($x1 < $x2) | ($y1 > $y2))
if ($x1 < $x2)
MOVE($x1+$speed, $y1)
$x1 = $x1+$speed
end_if
if ($y1 > $y2)
MOVE($x1, $y1-$speed)
$y1 = $y1-$speed
end_if
END_CYC
end_if
if (($x1 > $x2) & ($y1 < $y2))
while(($x1 > $x2) | ($y1 < $y2))
if ($x1 > $x2)
MOVE($x1-$speed, $y1)
$x1 = $x1-$speed
end_if
if ($y1 < $y2)
MOVE($x1, $y1+$speed)
$y1 = $y1+$speed
end_if
END_CYC
end_if
halt
-
У меня немного по другому
#name "MOVE"
//начальные точки
$startx=$_xmouse
$starty=$_ymouse
// конечные точки
$finishx= 150
$finishy= 150
// скорость перемещения
$MOVEX=10 // X
$MOVEy=8 // Y
//проверка если курсор возле края экрана
IF($startx>$_xmax-100)
$startx=$_xmax-100
END_IF
IF($starty>$_ymax-50)
$starty=$_ymax-50
END_IF
IF($startx<50)
$startx=50
END_IF
IF($starty<20)
$starty=20
END_IF
// проверяем куда двигать курсор + или -
$cheakx=DIST($startx,$starty,$finishx,$starty)
$cheaky=DIST($startx,$starty,$startx,$finishy)
MOVE($startx+$MOVEX,$starty+$MOVEy)
IF ($cheakx<DIST($_xmouse,$_ymouse,$finishx,$_ymouse))
$MOVEX=0-$MOVEX
END_IF
IF ($cheaky<DIST($_xmouse,$_ymouse,$_xmouse,$finishy))
$MOVEY=0-$MOVEY
END_IF
//двигаем курсор
WHILE (($starty!$finishy) &($startx!$finishx))
MOVE($startx,$starty)
IF (DIST($_xmouse,$_ymouse,$finishx,$_ymouse)>10)
$startx=$startx+$MOVEX
ELSE
$startx=$finishx
END_IF
IF (DIST($_xmouse,$_ymouse,$_xmouse,$finishy)>10)
$starty=$starty+$MOVEy
ELSE
$starty=$finishy
END_IF
END_CYC
-
Оформили бы это в подпрограмму.
Кстати, подпрограммы можно сувать в инклуды и оттуда их вызывать?
Это ведь можно было бы целые библиотеки запиливать! Хотя, судя по справке, инклуд просто останавливает родительский скрипт, выполняется, и затем включает родительский скрипт обратно.
Если бы вместо этого препроцессор сначала собирал все в один большой файл, то можно было бы библиотеки делать.
И у вас скрипты передвигают курсор со скоростями по осям. При этом относительная скорость между точками будет больше чем скорость перемещения. Это приводит к тому, что если курсор двигается не ровно под 45 градусов, то до одной оси он дойдет быстрее. Конечно это работает, но выглядит не очень круто. Лучше бы сделать чтобы он двигался с одинаковой скоростью по ровно линии.
Смотрите на рисунок, там немного попытался разъяснить к чему я.
Хотя чтобы узнать угол между точками нужна фун-я atan2, а тут её нет. Только базовые sqrt, sin и cos. Надо ждать от автора расширенной поддержки математических функций.
UPD: Подпрограммы из инклудов нормально вызываются, это я туплю.
-
Написал свой вариант, более быстрый и оптимизированный.
Как использовать:
#include "MOVE2.cms"
$MOVE2_END_X = 2 // Конечная координата X
$MOVE2_END_Y = 2 // Конечная координата Y
$MOVE2_SPEED = 2 // За сколько секунд курсор пройдет путь
GOSUB(MOVE2) // Вызываем подпрограмму
waitms(1000) // Не обязательно
$MOVE2_END_X = 1000
$MOVE2_END_Y = 1000
$MOVE2_SPEED = 0.5 // дробные числа работают
GOSUB(MOVE2)
...
Т.е. подключаем инклуд, задаем координаты и скорость через глобальные переменные и вызываем подпрограмму MOVE2. Быстро и просто, код не засоряется лишним мусором. Все переменные в своем именном пространстве, можно не беспокоится что что-то где-то совпадет.
UPD: исправил скобку и лишнее объявление переменных.
-
Скрипт лучше всех, но вот это лишнее...
#name "MOVE2 include"
$MOVE2_X
$MOVE2_Y
$MOVE2_X_SPEED
$MOVE2_Y_SPEED
$MOVE2_ROUNDED_SPEED
$MOVE2_END_X = $_xmouse // Конечная координата X
$MOVE2_END_Y = $_ymouse// Конечная координата Y
$MOVE2_SPEED = 1 // За сколько секунд курсор пройдет путь
$MOVE2_OPSPERSEC = 850 //Примерно 850 операций в секунду, может различаться на разных компьютерах
$MOVE2_DEBUG = 0 // 1 для вывода сообщений в лог
SUB(MOVE2)
$MOVE2_X = $_xmouse
$MOVE2_Y = $_ymouse
$MOVE2_ROUNDED_SPEED = ROUND($MOVE2_SPEED*$MOVE2_OPSPERSEC,0)
$MOVE2_X_SPEED = ($MOVE2_END_X-$MOVE2_X)/($MOVE2_ROUNDED_SPEED)
$MOVE2_Y_SPEED = ($MOVE2_END_Y-$MOVE2_Y)/($MOVE2_ROUNDED_SPEED)
IF($MOVE2_DEBUG = 1)
PRINT("start")
END_IF
FOR($i, $i < $MOVE2_ROUNDED_SPEED){
$MOVE2_X = $MOVE2_X+$MOVE2_X_SPEED
$MOVE2_Y = $MOVE2_Y+$MOVE2_Y_SPEED
MOVE(ROUND($MOVE2_X,0), ROUND($MOVE2_Y,0))
END_CYC
IF($MOVE2_DEBUG = 1)
PRINT("done")
END_IF
MOVE($MOVE2_END_X, $MOVE2_END_Y)//Передвинуть окончательно в заданную точку
END_SUB
-
Oraven, да, ты прав, это объявление лишнее. Забыл удалить.
Кстати, интерпретатор на эту скобку не ругнулся. Я её не заметил вообще. ???
Обновил.
-
мда по сравнению с вами программерами скриптописцами я полный нуб
я очень редко залезаю в редактор, (обычно если по какой то причине не получается через автозапись записать какоето действие)
-
Идея хорошая о "медленном перемещении мыши".
Передвижение по ровной линии можно зделать через отношение сторон площади перемещения.
На досуге опишу.
-
Нельзя ли в новый версиях добавить команду эдакого форсированного SUPERLCLICK?
Типа мув +wait+ элдаун +wait+ элап.
В целом ряде приложений только этот набор команд и спасает.
-
Это в каких например? Для чего это нужно?
-
Это в каких например? Для чего это нужно?
Применял в разных приложениях (браузер хром).
Вероятно это нужно для чего-то.
Обычный клик часто не приводит к нужным результатам. Даже делал нарочитую мультипликацию простых элкликов (до 5-7 нажатий).
Бесполезно.
А вот всякие примочки ( типа подергивания поля браузера стрелками вверх-вниз на 1 элклик ну и SUPERLCLICK )вот они основательно помогают от зависаний.
-
А вот всякие примочки ( типа подергивания поля браузера стрелками вверх-вниз на 1 элклик ну и SUPERLCLICK )вот они основательно помогают от зависаний.
Можно подробней? Я могу этот эффект у себя пронаблюдать?
-
Нельзя ли в новый версиях добавить команду эдакого форсированного SUPERLCLICK?
Типа мув +wait+ элдаун +wait+ элап.
В целом ряде приложений только этот набор команд и спасает.
Внезапно хорошая идея. Хотя были бы пользовательские функции, это можно было бы запилить инклудами.
Это в каких например? Для чего это нужно?
Почти во всех играх, там нажатие не успевает зафиксироваться. Обычно там используются не слушатели устройств ввода, а проверка нажатия на каждой итерации, изза чего нажатие быстрее 1 кадра не учитывается.
-
господе ты боже мой. ну нет пока пользовательских функций.
можешь сделать просто сабами и переменными. прикинуться что это типа стек.
вводишь в каждую подпрограмму переменные типа $par1, $par2 и перед вызовом gosub просто присваиваешь им значения
-
1. Почти во всех играх, там нажатие не успевает зафиксироваться. Обычно там используются не слушатели устройств ввода,
2. Внезапно хорошая идея. Хотя были бы пользовательские функции, это можно было бы запилить инклудами.
1. По опыту , смею Вас заверить, что эта примочка встречается сегодня не только в играх.
Думаю, с той стороны идет негласное противодействие кликерам. Вероятно такое противодействие некорректно с точки зрения морали стороны держателей сайтов онлайн-игр.
Если они имеют право устраивать игрокам геморрой, то игроки имеют полное моральное право пользоваться таблетками от геморроя.
2. Если её можно реализовать, то в цепочке простой вейт нужно бы заменить на рандомный.
У меня везде как-то так
...
LCLICK(1272,740)
WAITMS(RND(150,250))
...
Опять же , судя по личному опыту, эта мера приводит к более высокой работоспособности скрипта в целом.
-
господе ты боже мой. ну нет пока пользовательских функций.
можешь сделать просто сабами и переменными. прикинуться что это типа стек.
вводишь в каждую подпрограмму переменные типа $par1, $par2 и перед вызовом gosub просто присваиваешь им значения
Это все неудобные костыли, все жаждут полноценных функций :D
-
неудобные костыли, все жаждут полноценных функций :D
Может пока то да сё...
Вот, если Вас не затруднит, напишите саб , допустим с названием не $par1, а как- то по человечески $superklik что-ли.
И!
Обязательно на простом примере сопроводите его 100% рабочим скиптом.
-
Ну элементарно же:
$SLC_X = 0
$SLC_Y = 0
$SLC_W = 60
SUB(SUPERLCLICK)
MOVE($SLC_X, $SLC_Y)
WAITMS($SLC_W)
LDOWN($SLC_X, $SLC_Y)
WAITMS($SLC_W)
LUP($SLC_X, $SLC_Y)
END_SUB
$SLC_X = 639//Координата x
$SLC_Y = 639//Координата y
GOSUB(SUPERLCLICK)//Вызываем подпрограмму
HALT
-
Ну элементарно же:
Извините за настойчивость , но получилось ещё более непонятно.
Где брать этот самый суперклик?
В какое место писать подпрограмму? Как она должна выглядеть?
И вообще.
Что такое подпрограмма на языке чайника?
Тем меньше будет вопросов у нубов, чем больше будет коментов в 100% работающем и цельном скрипте.
-
Где брать этот самый суперклик?
В какое место писать подпрограмму? Как она должна выглядеть?
И вообще.
Что такое подпрограмма на языке чайника?
Тем меньше будет вопросов у нубов, чем больше будет коментов в 100% работающем и цельном скрипте.
Вот 3 клика с разными параметрами.
Для чего после клика нужно убирать курсор? Для того чтобы он не мешался на экране когда делается GETSCREEN
$SLC_X = 100//Координата x
$SLC_Y = 200//Координата y
$SLC_W = 50 // Задержка в 50 мс
GOSUB(SUPERLCLICK)
$SLC_X = 300//Координата x
$SLC_Y = 456//Координата y
$SLC_W = 100 // Задержка в 100 мс
GOSUB(SUPERLCLICK)
$SLC_X = 500//Координата x
$SLC_Y = 600//Координата y
$SLC_W = 300 // Задержка в 300 мс
GOSUB(SUPERLCLICK)
// где то в конце скрипта
SUB(SUPERLCLICK) // Клик
MOVE($SLC_X, $SLC_Y)
WAITMS($SLC_W)
LDOWN($SLC_X, $SLC_Y)
WAITMS($SLC_W)
LUP($SLC_X, $SLC_Y)
MOVE(1, 1) // Убираем курсор
END_SUB
HALT
-
Где брать этот самый суперклик?
В какое место писать подпрограмму? Как она должна выглядеть?
И вообще.
Что такое подпрограмма на языке чайника?
Тем меньше будет вопросов у нубов, чем больше будет коментов в 100% работающем и цельном скрипте.
Вот 3 клика с разными параметрами.
Хмм.. отличное решение.
Но вопрос так и не снят.
Куда эту выдержку ставить в реальном 100% работающем скрипте чтобы уйти от простого клика к супер_клику?
Дайте хотя бы одни простенький ( рабочий ) пример с простым блокнотиком, чтоб нуб мог сделать элементарный копипаст в 4.7 и тихо прибалдеть.
п.с.
И коменты по строкам опять пропущены после
" // где то в конце скрипта
SUB(SUPERLCLICK) "
Пардон , но такие примеры скорее вгоняют в ступор, чем объясняют.
( если речь идет о широкой аудитории, а не о корифеях разумеется )
-
Цитрину, нашему :)
1.// где то в конце скрипта
SUB(SUPERLCLICK) // Клик
MOVE($SLC_X, $SLC_Y)
WAITMS($SLC_W)
LDOWN($SLC_X, $SLC_Y)
WAITMS($SLC_W)
LUP($SLC_X, $SLC_Y)
MOVE(1, 1) // Убираем курсор
END_SUB
вот это поставь в самый конец скрипта. и сохранись )
Это "функция" или "команда", к которой ты будешь обращаться так же как и к обычному LCLICK.
2. Теперь пример.
Тебе нужно кликнуть по координатам. Обычно это так:
LCLICK(138,410)
Предположим ты хочешь сделать суперлклик.
Тогда пишешь:
$SLC_X = 138//Координата x
$SLC_Y = 410//Координата y
$SLC_W = 1000 // Задержка в 1000 мс
GOSUB(SUPERLCLICK)
Да! Эти 4 строки тебе надо писать каждый раз когда ты хочешь сделать супер клик вместо обычного!
3. Запусти пример Oraven и внимательно смотри.
Что нибудь прояснилось, Цитрин?
-
1. Цитрину, нашему :)
2. Да! Эти 4 строки тебе надо писать каждый раз когда ты хочешь сделать супер клик вместо обычного!
1. Я Вас умоляю)
Только без эмоций.
Вопросы такого типа задаю не от себя, а от виртуального и тупого чайника.
Речь шла о том, что корифеи пишут прекрасные скрипты, но скупятся на комментарии, полагая что нечто само собой разумеется.
Вот эти три последних слова обычно и губят отличные решения.
2. Ожидание рандомного типа сделать можно?
Например так?
SUB(SUPERLCLICK) // Клик
MOVE($SLC_X, $SLC_Y)
WAITMS(RND( $SLC_W, $SLC_Z) )
LDOWN($SLC_X, $SLC_Y)
WAITMS(RND( $SLC_W, $SLC_Z) )
LUP($SLC_X, $SLC_Y)
MOVE(1, 1) // Убираем курсор
END_SUB
И вот ещё вопрос возник.
Такой мгновенный мув в далекую точку MOVE(1, 1) не вызовет ли вопросы о админов игры?
Может как то приблизить процесс к реальному?
-
1. Пойми меня правильно )) Как я тебя сейчас ))
2. ... о пора ехать )
-
2. Ожидание рандомного типа сделать можно?
Вот тебе рандом
$SLC_X = 300+RND(-50,50)//Координата x +- 50 пикс
$SLC_Y = 456+RND(-50,50)//Координата y +- 50 пикс
$SLC_W = 100+RND(-50,50) // Задержка от 50 до 150 мс
GOSUB(SUPERLCLICK)
SUB(SUPERLCLICK) // Клик
MOVE($SLC_X, $SLC_Y)
WAITMS($SLC_W)
LDOWN($SLC_X, $SLC_Y)
WAITMS($SLC_W)
LUP($SLC_X, $SLC_Y)
MOVE(1, 1) // Убираем курсор
END_SUB
-
[quote author=Oraven link=topic=8.msg316#msg316 date=1351358695]
Вот тебе рандом
[/quote]
1. Мой вариант рандомного времени для пауз нерабочий , или неизящен?
2. Нужно понимать так , отрывок из рабочего скрипта , в котором будет возможен супер_клик должен выглядеть , как написали Вы. И размещать его ( этот отрывок) нужно в самом конце тех, или иных скриптов юзеров.
А пользователю останется в том месте , где нужен супер_клик , поставить 4 простых строки
так , как советовал СлавьЯнИнъ
$SLC_X = 138 // Координата допустим если x =138
$SLC_Y = 410 // Координата допустим если y = 410
$SLC_W = 1000 // Задержка допустим в 1000 мс
GOSUB(SUPERLCLICK)
-
1. Мой вариант рандомного времени для пауз нерабочий , или неизящен?
В моем случае скрипт имеет гибкие настройки. Рандом нужен не всегда.
-
Рандом нужен не всегда.
Думаю, что на 3 вопроса неопытным пользователям таки нужно дать вразумительный ответ.
1) Когда нужен , или не нужен колормод ( гетскин)? Описать пару характерных случаев.
2) После каких команд в скрипте задержку ставить не имеет смысла , а где она очень желательна?
3) В каком случае задержка рандомного типа имеет смысл?
Лично мой опыт показывает, что рандомная задержка мышковых и клавишных команд ( от 200 до 300 мс) придает скрипту гораздо большую устойчивость в работе.
Поправьте меня , если я ошибаюсь.
-
2. ... о пора ехать )
Это о смещении мгновенном.
move(($_xmouse-90-rnd(0,90),($_ymouse-90-rnd(0,90))
Эта строка будет смещать курсор вверх влево от текущего положения на 90 пикселей, в дополнение к этому смещать ещё вверх влево на случайное значение от 0 до 90.
=========================1) Когда нужен , или не нужен колормод ( гетскин)? Описать пару характерных случаев.
2) После каких команд в скрипте задержку ставить не имеет смысла , а где она очень желательна?
3) В каком случае задержка рандомного типа имеет смысл?
1.1) Надо сказать, что colormode и getscreen разные вещи.
Говоря о getscreen мы имеем ввиду необходимость анализа текущего изображения на экране.
Например, произошёл переход по ссылке после нажатия или нет.
При отладке и тестовых работах следует в паре с getscreen использовать screenshot. Как показано в справке:
getscreen
screenshot
Это позволит оперативно следить за изображением анализируемым сценарием. После отладки, screenshot можно убрать.
1.2) Использование colormode носит специальный характер, и применяется там, где возникают трудности с анализом изображения. Использование его, дополнительно увеличивает нагрузку на процесс сценария. Также во время отладки следует использовать вместе со screenshot.
getscreen
colormode (1) // от 1 до 7
screenshot
2) Замечено, что даже при задержке отображения элемента на экране клик в место где он должен быть запоминается и обрабатывается. Однако это шаткая позиция. Задержка, не что иное как ожидание отклика после действия (нажатия, перемещения, запуска и тому подобное). То есть ожидание смены изображения на экране, по простому. В разных условиях время ожидания меняется. Как правило обратно пропорционально вычислительной мощности и скорости передачи данных, мощность и скорость больше значит ожидание меньше.
3) Объективно она не имеет смысла. Задержка должна соответствовать действительному времени обработки данных.
Субъективно, на практике находит применение совмещённая установленная и случайная задержки:
waitms (5000+rnd(0,5000))
Также в ряде случаев применяется циклическая задержка, которая "сама определяет" необходимое время ожидания.
=========================
Доступные, вразумительные ответы?
Цитрин, мой опыт показывает, что придаёт устойчивость сама задержка между командами ввода, а не её рандомная длительность. Сам пользуюсь диапазонными задержками, потому что нравятся )).
-
Использование colormode носит специальный характер, и применяется там, где возникают трудности с анализом изображения.
Спасибо)
Все доступно. И понятно.
Однако стоит заметить, что в справке колормод указан с параметрами от 0 до 7 .
Вероятно есть резон указать, что если 0 ( нет обработки ) то команду колормод не ставим вообще.
Сейчас там написано, что 0 не имеет смысла.
Это может вводить в заблуждение новичка.
-
Помоему в справке нигде не написано "обязательно ставьте команду colormode".
Новичёк её использовать не будет. Просто нет нужды никакой.
И будет прав :) .
-
colormode".
Новичёк её использовать не будет. Просто нет нужды никакой.
И будет прав :) .
Хмм.. новичок при непонятках лезет в форумы , а там корифеи смачно обсуждают тонкости колормода.
Понятно, что ему тоже захочется.
Психология рядового юзера , - вот первый параметр при создания популярной программы.
-
а там корифеи смачно обсуждают тонкости колормода.
Понятно, что ему тоже захочется.
Я что-то упустил? Где? Дайте почитать!
Я рядовой пользователь :)
-
Я рядовой пользователь :)
Рядовой пользователь это даже не я , а скорее наш уважаемый прапор.
-
Прошу прощения что влезаю... Но я не рядовой пользователь... Я вообще даун в таких тонкостях))) Вынужден признать это. Моя работа(строитель-отделочник) совсем далека от компьютеров...
-
Ладно, здесь наговаривать! Мозги везде нужны, в строительстве тем более.
В купе с активным интересом любая отрасль по плечу.
Удачи нам всем )
-
Не так давно вспомнил, что когда-то видел здесь поднималась тема о плавном перемещении мыши.
Естесственно, зачем писать и придумывать велосипед если всё уже придумано. Нашёл, скачал, проверил... и не устроило.
Речь идёт о MOVE2.cms . Во первых пара увязанных между собой настроек неудобно настраивать, тем более под разные компы (особенно под старый со слабым процем). И главное: скорость перемещения между точками фиксированная, допустим 1 сек. Что через весь экран 1 сек., что подвинуть на 10 пикселов, тоже 1 сек. Настроив под средние/длинные дистанции на "коротких" указатель ползёт как черепаха.
Пришлось написать свой вариант. Для сохранения постоянной скорости привязался к дистанции между стартом и финишем. В качестве параметра скорости выбрал через сколько пикселов "прыгает" мышь при перемещении. Этот вариант более менее приближен к действительности, только нет динамического изменения шага в зависимости от скорости передвижения мыши, но здесь это и не нужно.
Мой вариант (MOVE3):
#name "MOVE3"
// Author: VINT
// Version: 1.2 (01.08.2013)
$MOVE_SPEED = 5 // шаг перемещения
$MOVE_END_X = 150 // Конечная координата X
$MOVE_END_Y = 150 // Конечная координата Y
GOSUB(MOVE3)
HALT
SUB(MOVE3)
$MOVE_Start_X = $_xmouse
$MOVE_Start_Y = $_ymouse
$MOVE_X = $MOVE_Start_X
$MOVE_Y = $MOVE_Start_Y
$MOVE_step=(DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)-1)/$MOVE_SPEED
$MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
$MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step
$MOVE_i=0
FOR($MOVE_i, $MOVE_i<INT($MOVE_step))
$MOVE_X = $MOVE_X+$MOVE_X_step
$MOVE_Y = $MOVE_Y+$MOVE_Y_step
MOVE(ROUND($MOVE_X,0), ROUND($MOVE_Y,0))
WAITMS(1)
END_CYC
MOVE($MOVE_END_X, $MOVE_END_Y) //Передвинуть окончательно в заданную точку
END_SUB
-
Решил попробовать с динамическим шагом.
В принципе перемещение похоже на MOVE2 но сделано на принципе MOVE3 - не привязано по времени и скорость меняется в более удобных соотношениях. Так на экране 1280х1024 шаг перемещения в зависимости от дистанции меняется в пределах 1-13 пикселей.
Остановлюсь на этом варианте MOVE4.
Множитель подобран для медленного рабочего компьютера.
#name "MOVE4"
// Author: VINT
// Version: 1.2 (01.08.2013)
$MOVE_SPEED = 3 // множитель скорости в попугаях меньше-быстрее. Можно дробный
$MOVE_END_X = 150 // Конечная координата X
$MOVE_END_Y = 150 // Конечная координата Y
GOSUB(MOVE4)
HALT
SUB(MOVE4)
$MOVE_Start_X = $_xmouse
$MOVE_Start_Y = $_ymouse
$MOVE_X = $MOVE_Start_X
$MOVE_Y = $MOVE_Start_Y
$dist= DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)
$MOVE_SPEEDVAR= INT((SQRT($dist))/$MOVE_SPEED)
//LOGWRITE ("dist ",$dist)
//LOGWRITE ("MOVE_SPEEDVAR ",$MOVE_SPEEDVAR)
IF($MOVE_SPEEDVAR < 1)
$MOVE_SPEEDVAR=1
END_IF
$MOVE_step=($dist-1)/$MOVE_SPEEDVAR
$MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
$MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step
$MOVE_i=0
FOR($MOVE_i, $MOVE_i<INT($MOVE_step))
$MOVE_X = $MOVE_X+$MOVE_X_step
$MOVE_Y = $MOVE_Y+$MOVE_Y_step
MOVE(ROUND($MOVE_X,0), ROUND($MOVE_Y,0))
WAITMS(1)
END_CYC
MOVE($MOVE_END_X, $MOVE_END_Y) //Передвинуть окончательно в заданную точку
END_SUB
-
Ну и осталось только доработать чтоб записывать 2а числа в одну переменную
-
Интересно.
А слабо сделать передвижение мыши не по отрезку между двумя точками а по кривой, а еще чтобы скорость менялась во время передвижения? Ну и чтобы это настраивалось).
(http://s019.radikal.ru/i629/1309/62/293431024161.jpg)
(http://s003.radikal.ru/i204/1309/c2/faad7eeac758.jpg)
-
А настраивать как будешь? Графики сплайнами рисовать?
И главный вопрос, зачем?
-
В этом и заключается мой пост, как сделать, как настроить, как управлять.
Затем чтобы имитировать действия человека)
-
В версии 4.11 не работает? Не могу запустить скрипты ни из поста Vinta, ни из поста Oravena :'( Чет мозг не работает у меня...
-
В версии 4.11 не работает? Не могу запустить скрипты ни из поста Vinta, ни из поста Oravena :'( Чет мозг не работает у меня...
For в последней версии сам больше не обнуляется, нужно дописать параметр.
// подпрограмма обязательно выше вызова
SUB(mouse_move,$MOVE_END_X,$MOVE_END_Y)
$MOVE_SPEED = 3 // множитель скорости
$MOVE_Start_X = $_xmouse
$MOVE_Start_Y = $_ymouse
$MOVE_X = $MOVE_Start_X
$MOVE_Y = $MOVE_Start_Y
$dist = DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)
$MOVE_SPEEDVAR = INT((SQRT($dist))/$MOVE_SPEED)
IF($MOVE_SPEEDVAR < 1)
$MOVE_SPEEDVAR = 1
END_IF
$MOVE_step=($dist-1)/$MOVE_SPEEDVAR
$MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
$MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step
FOR($MOVE_i=0, $MOVE_i<INT($MOVE_step))
$MOVE_X = $MOVE_X + $MOVE_X_step
$MOVE_Y = $MOVE_Y + $MOVE_Y_step
MOVE(ROUND($MOVE_X,0), ROUND($MOVE_Y,0))
WAITMS(1)
END_CYC
MOVE($MOVE_END_X, $MOVE_END_Y) //Передвинуть окончательно в заданную точку
END_SUB
// образец строки MOVE
mouse_move(215,224) // двигаем мышь сюда
WAITMS(500)
mouse_move(1205,294) // туда
WAITMS(500)
mouse_move(1347,1016) // и еще раз
WAITMS(500)
HALT // стоп
-
Да, так лучше стало))). Все заработало. Спасибо!