Author Topic: Реалистичное передвижение курсора  (Read 62976 times)

0 Members and 1 Guest are viewing this topic.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Реалистичное передвижение курсора
« Reply #15 on: September 10, 2015, 07:38:56 AM »
В последней версии всё хорошо, кроме...
($MOVE_MID_X+RND(-30,30),$MOVE_MID_Y+RND(-30,30))

При расстояниях близких или меньше 30 указатель пляшет чечётку.
В примере дистанция 948.654310062417, отклонение 30 это чуть больше 3%
Вот осталось заменить на 3% от дистанции, ну или 6% на половине дистанции. Ну или где то так.
« Last Edit: September 10, 2015, 09:11:02 AM by Vint »


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Реалистичное передвижение курсора
« Reply #16 on: September 10, 2015, 09:10:32 AM »
Ну вот так попробовал
Code: (clickermann) [Select]
// подпрограмма обязательно выше вызова
SUB(mouse_move,$MOVE_END_X,$MOVE_END_Y)   
   $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_step = ($dist-1)/INT(SQRT($dist))
   $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(INT($MOVE_X) + RND(-2,2), INT($MOVE_Y) + RND(-2,2))
      WAITMS($rnwait) // задержка при движении по точкам
   END_CYC   
END_SUB

SUB(m_move,$M_X,$M_Y)
   $rnwait = RND(6,15) // случайная скорость
   $MOVE_MID_X = INT(($_xmouse+$M_X)/2)
   $MOVE_MID_Y = INT(($_ymouse+$M_Y)/2)
   $otx = INT(ABS($_xmouse - $M_X) * 0.12)
   $oty = INT(ABS($_ymouse - $M_Y) * 0.12)
   mouse_move($MOVE_MID_X+RND(-$otx,$otx), $MOVE_MID_Y+RND(-$oty,$oty))
   mouse_move($M_X,$M_Y)
   MOVE($M_X,$M_Y) //Передвинуть окончательно в заданную точку
END_SUB


LOGCLEAR

$MS = $_ms // засекаем время
LDOWN($_xmouse,$_ymouse) // рисуем
m_move(500,500) // передвигаем
LUP(500,500) // отпускаем
LOGWRITE ($_ms-$MS, " - ", $rnwait)

HALT
« Last Edit: November 28, 2019, 10:04:58 AM by Vint »


Flayka

  • Зашел в гости
  • *
  • Posts: 17
  • нуп
    • View Profile
Re: Реалистичное передвижение курсора
« Reply #17 on: October 21, 2015, 04:19:52 PM »
Подстава.
Я чет и не думал, что можно движение мышки игрока снимать.) добавил рандома в клик по пикселям и радовался) надо теперь снова бота подпиливать) спасибо за кучу инфы!

Kedrick

  • Освоившийся
  • **
  • Posts: 70
    • View Profile
Re: Реалистичное передвижение курсора
« Reply #18 on: October 22, 2015, 03:20:34 PM »
А насколько реалистично такое предположение?
В браузерках это же невозможно (или тоже возможно уже?) и данный вопрос касается только клиентских приложений?

xDigital

  • Зашел в гости
  • *
  • Posts: 2
    • View Profile
Re: Реалистичное передвижение курсора
« Reply #19 on: December 14, 2015, 12:02:30 AM »
кто поможет прикрутить к соединениям цифр?

xDigital

  • Зашел в гости
  • *
  • Posts: 2
    • View Profile
Re: Реалистичное передвижение курсора
« Reply #20 on: December 14, 2015, 11:49:18 PM »
Всем спасиб разобрался, взял рандом от Vint

NewUserCM

  • Зашел в гости
  • *
  • Posts: 1
    • View Profile
Re: Реалистичное передвижение курсора
« Reply #21 on: April 01, 2016, 01:06:21 AM »
Очень нужный код,только совершенно не понимаю как его вставлять в нужном месте

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Реалистичное передвижение курсора
« Reply #22 on: August 14, 2016, 04:41:13 PM »
Code: (clickermann) [Select]
// подпрограммы обязательно выше вызова
SUB(mouse_move,$MOVE_END_X,$MOVE_END_Y)   
   $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_step = ($dist-1)/INT(SQRT($dist))
   $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(INT($MOVE_X) + RND(-2,2), INT($MOVE_Y) + RND(-2,2))
      WAITMS(RND(3,9)) // задержка при движении по точкам случайная скорость
   END_CYC   
END_SUB
 
SUB(m_move,$M_X,$M_Y)
   $MOVE_MID_X = INT(($_xmouse+$M_X)/2)
   $MOVE_MID_Y = INT(($_ymouse+$M_Y)/2)
   $otx = INT(ABS($_xmouse - $M_X) * 0.12)
   $oty = INT(ABS($_ymouse - $M_Y) * 0.12)
   mouse_move($MOVE_MID_X+RND(-$otx,$otx), $MOVE_MID_Y+RND(-$oty,$oty))
   mouse_move($M_X,$M_Y)
   MOVE($M_X,$M_Y)
END_SUB

// вызов пишем вместо MOVE
m_move(500,500) // плавное перемещение мыши в заданную точку
 
HALT // стоп

squid

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Re: Реалистичное передвижение курсора
« Reply #23 on: August 14, 2016, 06:25:07 PM »
Кcтати я не знаю, насколько реалистично он выглядит при движении с одного угла в другой угол, но при горизонтальном движении (Y_START и Y_END равны) это выглядит вот так:

Code: [Select]
18:15:23 343, 783
18:15:23 350, 783
18:15:23 357, 783
18:15:23 367, 782
18:15:23 371, 782
18:15:23 379, 779
18:15:23 384, 783
18:15:23 396, 783
18:15:23 407, 780
18:15:23 416, 783
18:15:23 425, 781
18:15:23 433, 783
18:15:23 439, 783
18:15:23 452, 781
18:15:23 460, 782
18:15:23 467, 779
18:15:23 475, 780

Т.е. из всего этого навороченного алгоритма на выходе получаем простое:
Code: (clickermann) [Select]
FOR($X_START, $X_START<$X_END, RND(4,10))
    MOVE($X_START, $_ymouse+RND(-2,2)
    WAITMS(RND(3,9))

Хоть бы назад по X пару раз сдвинул...
« Last Edit: August 15, 2016, 07:04:52 AM by squid »

Золотой

  • Оплот сообщества
  • ****
  • Posts: 312
    • View Profile
Re: Реалистичное передвижение курсора
« Reply #24 on: August 14, 2016, 07:29:10 PM »
алгоритм проверен сотни раз и используется очень давно, не считай себя умнее всех, более вероятно обратное.

squid

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Re: Реалистичное передвижение курсора
« Reply #25 on: August 15, 2016, 12:08:56 AM »
алгоритм проверен сотни раз и используется очень давно, не считай себя умнее всех, более вероятно обратное.
Я вижу по координатам, а вы, видимо, не обратили как следует внимание на лог.

Золотой

  • Оплот сообщества
  • ****
  • Posts: 312
    • View Profile
Re: Реалистичное передвижение курсора
« Reply #26 on: August 15, 2016, 01:24:12 AM »
а зачем лог, когда всё нагляднее графически.

squid

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Re: Реалистичное передвижение курсора
« Reply #27 on: August 15, 2016, 03:21:48 AM »
а зачем лог, когда всё нагляднее графически.
А... Поколение предпочитающее смотреть, а не читать. Ну вот смотрите видео (10 mb) с работы сего алгоритма на сайте реально следящим за автокликерами. Pac-man в результате означает о не понравившемуся движению мыши.  Последние две "проводки" уже в ручную (первый раз промахнулся) и результат "Ок"

Золотой

  • Оплот сообщества
  • ****
  • Posts: 312
    • View Profile
Re: Реалистичное передвижение курсора
« Reply #28 on: August 15, 2016, 09:48:22 AM »
я ваше молодоепоколение удивлю, но технически грамотный человек должен уметь читать графическую информацию, а не знакомые буквы смотреть.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Реалистичное передвижение курсора
« Reply #29 on: August 15, 2016, 11:44:37 AM »
Т.е. из всего этого навороченного алгоритма на выходе получаем простое:
Code: (clickermann) [Select]
FOR($X_START, $X_START<$X_END, RND(4,10))
    MOVE($X_START, $_ymouse+RND(-2,2)
    WAITMS(RND(3,9))

Хоть бы назад по X пару раз сдвинул...

Никто и не говорил, что он супер реалистичный. Скрипт создавался не для Pak-man-ов... А для более-менее похожих на человека передвижений (без учёта кривой ускорения). Он нормально выглядит при любых передвижениях по экрану, при любых расстояниях и направлениях. Для игр, браузеров и пр.

А вот ты запусти свой FOR не на 130 пикселов и не по горизонтали и сразу поймёшь о чём речь. Цикл, кстати, не закрыт и скобок не хватает.
При просмотре первое что бросилось в глаза: почему даже скорость не настроена? При таких скоростях он и не пропустит.
Скорость подобрать под свой комп, чтобы курсор не летал как ужаленный.

Для решения этой капчи нужен индивидуальный подход, там условия свои.
А сделать выбор конечной точки с медленным прицеливанием туда-сюда разве сложно сделать? Нет.
Только это будет выглядеть мерзко при других условиях. Пробовали и такое, но получалась лажа, если честно.
« Last Edit: August 15, 2016, 11:59:19 AM by Vint »