Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Тема начата: WHOIM от Сентябрь 07, 2015, 12:27:57 am

Название: Реалистичное передвижение курсора
Отправлено: WHOIM от Сентябрь 07, 2015, 12:27:57 am
Делаю сборщик коробок для игры DarkOrbit. Столкнулся с такой задачей. Есть инфа, что в игре идет анализ движения мыши. И дабы не попасть в долгий бан хочу сделать более реалистичное, то есть не идеально ровное, передвижение курсора мыши. Скорость передвижения уже отрегулировал, а вот как быть с реалистичностью не пойму. Кликером пользуюсь третий день. Прошу помочь с данной задачей.

Вот часть кода:


SUB(MOVE_SLOW,$MOVE_END_X,$MOVE_END_Y)
   $MOVE_SPEED = 10
   
   $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

IF_PIXEL_IN(*,*,*,*, *)         //НАШЛИ ЦЕЛЬ
   Move_SLOW ($_return1, $_return2)       //двигаем мышь и кликаем на цель
   WAITMS(RND(80,125))
   LDOWN ($_return1, $_return2)           //Нажать ЛКМ
   WAITMS(RND(80,125))                     //Выдержка
   LUP($_return1, $_return2)               //Отпустить ЛКМ
   WAITMS(RND(1098,1989))                   //Ждем остановки
END_IF
Название: Re: Реалистичное передвижение курсора
Отправлено: WHOIM от Сентябрь 07, 2015, 12:24:39 pm
Благодарю за новый кусочек кода. Проверил, все работает. Но все таки надо добавить и реалистичное передвижение.

Нашел похожий скрип. Только разобраться не могу как заставить его работать в моем примере.

#name "Цветок"
 
// Скрипт, рисующий(в паинте) цветок
 
$r = 100 // Радиус
$f = 24  // Форм фактор
$i = 0.3 // Смещение начала
 
while(($i*100) < 1640) // Начало цикла.
                       // Заглушка для проверки дробей
 
$x = cos($i*$f) // переход от полярных координат
$y = sin($i*$f) // к декартовым
 
$x = $x *($r-$i*$f/2) // Придание формы  спирали
$y = $y *($r-$i*$f/2) // и задание размера
 
  $x = $x + 100 + $r // Центрование
  $y = $y + 100 + $r // на холсте
 
  $x = round($x, 0) //  Округление координат
  $y = round($y, 0) //  Иначе клика не получим
 
  lclick($x, $y) // Сам клик
  waitms(50)  // Пауза: разгружает процессор
  $i = $i + 0.02  // следующая полярная координата
 
end_cyc  // Окончание цикла
 
halt // Точка выхода из скрипта

Еще вопрос. Как заставить подпрограмму повторяться определенное или рандомное кол-во раз.

SUB(LEFT FIND UP)
PIXELFINDx2()
LEFT UP()
PIXELFINDx2()
LEFT UP()
WAIT(RND(2,3))
END_SUB

LEFT FIND UP()
Название: Re: Реалистичное передвижение курсора
Отправлено: dramster от Сентябрь 07, 2015, 03:52:44 pm
Цитировать
Но все таки надо добавить и реалистичное передвижение.
не знаю насколько реалистичное, но вот, добавил движение по синусу.
Код: Clickermann
  1. SUB(MOVE_SLOW,$MOVE_END_X,$MOVE_END_Y)
  2.   $MOVE_SPEED = 20
  3.   $MOVE_WAVE = 1 //длина волны
  4.   $MOVE_AMPL = 30  //амплитуда
  5.  
  6.   $MOVE_Start_X = $_xmouse
  7.   $MOVE_Start_Y = $_ymouse
  8.   $MOVE_X = $MOVE_Start_X
  9.   $MOVE_Y = $MOVE_Start_Y
  10.  
  11.   $dist = DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)
  12.  
  13.   $MOVE_SPEEDVAR = INT((SQRT($dist))/$MOVE_SPEED)
  14.  
  15.   IF($MOVE_SPEEDVAR < 1)
  16.      $MOVE_SPEEDVAR = 1
  17.   END_IF
  18.  
  19.   $MOVE_step=($dist-1)/$MOVE_SPEEDVAR
  20.   $MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
  21.   $MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step
  22.  
  23.   IF($MOVE_END_X-$MOVE_Start_X > 0)
  24.      $MOVE_X_X0 = $MOVE_END_X-$MOVE_Start_X
  25.   else
  26.      $MOVE_X_X0 = $MOVE_Start_X - $MOVE_END_X
  27.   END_IF
  28.   IF($MOVE_END_Y-$MOVE_Start_Y > 0)
  29.      $MOVE_Y_Y0 = $MOVE_END_Y-$MOVE_Start_Y
  30.   else
  31.      $MOVE_Y_Y0 = $MOVE_Start_Y - $MOVE_END_Y
  32.   END_IF
  33.  
  34.   IF($MOVE_X_X0 > $MOVE_Y_Y0)
  35.      FOR($MOVE_i=0, $MOVE_i<INT($MOVE_step))
  36.         $MOVE_X = $MOVE_X + $MOVE_X_step
  37.         $MOVE_Y = $MOVE_Y + $MOVE_Y_step                  
  38.         MOVE(ROUND($MOVE_X,0), ROUND($MOVE_Y+(sin($MOVE_i*$MOVE_WAVE)*$MOVE_AMPL),0))
  39.         WAITMS(1)
  40.      END_CYC
  41.   ELSE
  42.      FOR($MOVE_i=0, $MOVE_i<INT($MOVE_step))
  43.         $MOVE_X = $MOVE_X + $MOVE_X_step
  44.         $MOVE_Y = $MOVE_Y + $MOVE_Y_step
  45.         MOVE(ROUND($MOVE_X+(sin($MOVE_i*$MOVE_WAVE)*$MOVE_AMPL),0), ROUND($MOVE_Y,0))
  46.         WAITMS(1)
  47.      END_CYC
  48.   END_IF
  49.  
  50.   //   MOVE($MOVE_END_X, $MOVE_END_Y)  
  51. END_SUB
изза такого движения, финишные координаты курсора немного не будут соответствовать заявленным в вызове подпрограммы. чем меньше амплитуда, тем точнее конечные координаты.

Цитировать
Еще вопрос. Как заставить подпрограмму повторяться определенное или рандомное кол-во раз.
Код: Clickermann
  1. SUB(LEFT FIND UP)
  2.   PIXELFINDx2()
  3.   LEFT UP()
  4.   PIXELFINDx2()
  5.   LEFT UP()
  6.   WAIT(RND(2,3))
  7. END_SUB
  8.  
  9.  
  10. FOR($a=0,$a<3) // повторяем 3 раза
  11.   LEFT FIND UP()
  12. END_CYC
  13.  
  14. //или
  15.  
  16. FOR($a=0,$a<RND(1,4)) // повторяем 1, 2, 3 или 4 раза
  17.   LEFT FIND UP()
  18. END_CYC
Название: Re: Реалистичное передвижение курсора
Отправлено: dramster от Сентябрь 08, 2015, 03:49:59 pm
вот более реалистичное передвижение с рандомным отклонением от прямой
Код: Clickermann
  1. SUB(MOVE_SLOW,$MOVE_END_X,$MOVE_END_Y)
  2.   $MOVE_SPEED = 20
  3.   $MOVE_WAVE = 10//длина волны
  4.   $MOVE_AMPL = 30  //максимальная амплитуда
  5.  
  6.   $MOVE_Start_X = $_xmouse
  7.   $MOVE_Start_Y = $_ymouse
  8.   $MOVE_X = $MOVE_Start_X
  9.   $MOVE_Y = $MOVE_Start_Y
  10.  
  11.   $dist = DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)
  12.  
  13.   $MOVE_SPEEDVAR = INT((SQRT($dist))/$MOVE_SPEED)
  14.  
  15.   IF($MOVE_SPEEDVAR < 1)
  16.      $MOVE_SPEEDVAR = 1
  17.   END_IF
  18.  
  19.   $MOVE_step=($dist-1)/$MOVE_SPEEDVAR
  20.   $MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
  21.   $MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step
  22.  
  23.   IF($MOVE_END_X-$MOVE_Start_X > 0)
  24.      $MOVE_X_X0 = $MOVE_END_X-$MOVE_Start_X
  25.   else
  26.      $MOVE_X_X0 = $MOVE_Start_X - $MOVE_END_X
  27.   END_IF
  28.   IF($MOVE_END_Y-$MOVE_Start_Y > 0)
  29.      $MOVE_Y_Y0 = $MOVE_END_Y-$MOVE_Start_Y
  30.   else
  31.      $MOVE_Y_Y0 = $MOVE_Start_Y - $MOVE_END_Y
  32.   END_IF
  33.  
  34.  
  35.   $RAND=0
  36.  
  37.   IF($MOVE_X_X0 > $MOVE_Y_Y0)
  38.      FOR($MOVE_i=0, $MOVE_i<INT($MOVE_step))
  39.  
  40.         IF($RAND < 0)
  41.            $RAND_mod=(-1)*$RAND
  42.         else
  43.            $RAND_mod=$RAND
  44.         END_IF
  45.  
  46.         IF(INT($MOVE_step)-$MOVE_i > $RAND_mod)
  47.            IF($WAVE>$MOVE_WAVE)
  48.               IF(($RAND < $MOVE_AMPL)&($RAND > $MOVE_AMPL*(-1)))
  49.                  $STEP=rnd(-1,1)
  50.                  $RAND=$RAND+$STEP
  51.               ELSE
  52.                  IF($RAND = $MOVE_AMPL)
  53.                     $STEP=rnd(-1,0)
  54.                     $RAND=$RAND+$STEP
  55.                  else
  56.                     $STEP=rnd(0,1)
  57.                     $RAND=$RAND+$STEP
  58.                  END_IF
  59.               END_IF
  60.               $WAVE=0
  61.            else
  62.               inc($WAVE)
  63.            END_IF
  64.         ELSE
  65.            IF($RAND < INT($MOVE_step)-$MOVE_i)
  66.               $STEP=1
  67.               $RAND=$RAND+$STEP
  68.            ELSE
  69.               $STEP=-1
  70.               $RAND=$RAND+$STEP
  71.            END_IF
  72.         END_IF
  73.  
  74.         $MOVE_X = $MOVE_X + $MOVE_X_step
  75.         $MOVE_Y = $MOVE_Y + $MOVE_Y_step
  76.         MOVE(ROUND($MOVE_X,0), ROUND($MOVE_Y,0)+$RAND)
  77.         WAITMS(1)
  78.      END_CYC
  79.   ELSE
  80.      FOR($MOVE_i=0, $MOVE_i<INT($MOVE_step))
  81.  
  82.         IF($RAND < 0)
  83.            $RAND_mod=-$RAND
  84.         else
  85.            $RAND_mod=$RAND
  86.         END_IF
  87.  
  88.         IF(INT($MOVE_step)-$MOVE_i > $RAND_mod)
  89.            IF($WAVE>$MOVE_WAVE)
  90.               IF(($RAND < $MOVE_AMPL)&($RAND > $MOVE_AMPL*(-1)))
  91.                  $STEP=rnd(-1,1)
  92.                  $RAND=$RAND+$STEP
  93.               ELSE
  94.                  IF($RAND = $MOVE_AMPL)
  95.                     $STEP=rnd(-1,0)
  96.                     $RAND=$RAND+$STEP
  97.                  else
  98.                     $STEP=rnd(0,1)
  99.                     $RAND=$RAND+$STEP
  100.                  END_IF
  101.               END_IF
  102.               $WAVE=0
  103.            else
  104.               inc($WAVE)
  105.            END_IF
  106.         ELSE
  107.            IF($RAND < INT($MOVE_step)-$MOVE_i)
  108.               $STEP=1
  109.               $RAND=$RAND+$STEP
  110.            ELSE
  111.               $STEP=-1
  112.               $RAND=$RAND+$STEP
  113.            END_IF
  114.         END_IF
  115.  
  116.         $MOVE_X = $MOVE_X + $MOVE_X_step
  117.         $MOVE_Y = $MOVE_Y + $MOVE_Y_step
  118.         MOVE(ROUND($MOVE_X,0)+$RAND, ROUND($MOVE_Y,0))
  119.         WAITMS(1)
  120.      END_CYC
  121.   END_IF
  122.   MOVE($MOVE_END_X,$MOVE_END_Y)
  123. END_SUB

и финишные координаты по любому ие что надо.
Название: Re: Реалистичное передвижение курсора
Отправлено: Vint от Сентябрь 08, 2015, 06:58:15 pm
Можно конечно ещё заморочиться.
Код: Clickermann
  1. SUB (m-move_s, $MOVE_END_X, $MOVE_END_Y, $MOVE_SPEED)
  2.   $MOVE_WAVE = 10//длина волны
  3.   $MOVE_AMPL = 30  //максимальная амплитуда
  4.  
  5.   $MOVE_Start_X = $_xmouse
  6.   $MOVE_Start_Y = $_ymouse
  7.   $MOVE_X = $MOVE_Start_X
  8.   $MOVE_Y = $MOVE_Start_Y
  9.  
  10.   $dist = DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)
  11.  
  12.   $MOVE_SPEEDVAR = INT((SQRT($dist))/$MOVE_SPEED)
  13.  
  14.   IF($MOVE_SPEEDVAR < 1)
  15.      $MOVE_SPEEDVAR = 1
  16.   END_IF
  17.  
  18.   $MOVE_step=($dist-1)/$MOVE_SPEEDVAR
  19.   $MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
  20.   $MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step
  21.  
  22.   IF($MOVE_END_X-$MOVE_Start_X > 0)
  23.      $MOVE_X_X0 = $MOVE_END_X-$MOVE_Start_X
  24.   else
  25.      $MOVE_X_X0 = $MOVE_Start_X - $MOVE_END_X
  26.   END_IF
  27.   IF($MOVE_END_Y-$MOVE_Start_Y > 0)
  28.      $MOVE_Y_Y0 = $MOVE_END_Y-$MOVE_Start_Y
  29.   else
  30.      $MOVE_Y_Y0 = $MOVE_Start_Y - $MOVE_END_Y
  31.   END_IF
  32.  
  33.  
  34.   $RAND=0
  35.  
  36.   IF($MOVE_X_X0 > $MOVE_Y_Y0)
  37.      FOR($MOVE_i=0, $MOVE_i<INT($MOVE_step))
  38.  
  39.         IF($RAND < 0)
  40.            $RAND_mod=(-1)*$RAND
  41.         else
  42.            $RAND_mod=$RAND
  43.         END_IF
  44.  
  45.         IF(INT($MOVE_step)-$MOVE_i > $RAND_mod)
  46.            IF($WAVE>$MOVE_WAVE)
  47.               IF(($RAND < $MOVE_AMPL)&($RAND > $MOVE_AMPL*(-1)))
  48.                  $STEP=rnd(-1,1)
  49.                  $RAND=$RAND+$STEP
  50.               ELSE
  51.                  IF($RAND = $MOVE_AMPL)
  52.                     $STEP=rnd(-1,0)
  53.                     $RAND=$RAND+$STEP
  54.                  else
  55.                     $STEP=rnd(0,1)
  56.                     $RAND=$RAND+$STEP
  57.                  END_IF
  58.               END_IF
  59.               $WAVE=0
  60.            else
  61.               inc($WAVE)
  62.            END_IF
  63.         ELSE
  64.            IF($RAND < INT($MOVE_step)-$MOVE_i)
  65.               $STEP=1
  66.               $RAND=$RAND+$STEP
  67.            ELSE
  68.               $STEP=-1
  69.               $RAND=$RAND+$STEP
  70.            END_IF
  71.         END_IF
  72.  
  73.         $MOVE_X = $MOVE_X + $MOVE_X_step
  74.         $MOVE_Y = $MOVE_Y + $MOVE_Y_step
  75.         MOVE(ROUND($MOVE_X,0), ROUND($MOVE_Y,0)+$RAND)
  76.         WAITMS(1)
  77.      END_CYC
  78.   ELSE
  79.      FOR($MOVE_i=0, $MOVE_i<INT($MOVE_step))
  80.  
  81.         IF($RAND < 0)
  82.            $RAND_mod=-$RAND
  83.         else
  84.            $RAND_mod=$RAND
  85.         END_IF
  86.  
  87.         IF(INT($MOVE_step)-$MOVE_i > $RAND_mod)
  88.            IF($WAVE>$MOVE_WAVE)
  89.               IF(($RAND < $MOVE_AMPL)&($RAND > $MOVE_AMPL*(-1)))
  90.                  $STEP=rnd(-1,1)
  91.                  $RAND=$RAND+$STEP
  92.               ELSE
  93.                  IF($RAND = $MOVE_AMPL)
  94.                     $STEP=rnd(-1,0)
  95.                     $RAND=$RAND+$STEP
  96.                  else
  97.                     $STEP=rnd(0,1)
  98.                     $RAND=$RAND+$STEP
  99.                  END_IF
  100.               END_IF
  101.               $WAVE=0
  102.            else
  103.               inc($WAVE)
  104.            END_IF
  105.         ELSE
  106.            IF($RAND < INT($MOVE_step)-$MOVE_i)
  107.               $STEP=1
  108.               $RAND=$RAND+$STEP
  109.            ELSE
  110.               $STEP=-1
  111.               $RAND=$RAND+$STEP
  112.            END_IF
  113.         END_IF
  114.  
  115.         $MOVE_X = $MOVE_X + $MOVE_X_step
  116.         $MOVE_Y = $MOVE_Y + $MOVE_Y_step
  117.         MOVE(ROUND($MOVE_X,0)+$RAND, ROUND($MOVE_Y,0))
  118.         WAITMS(1)
  119.      END_CYC
  120.   END_IF
  121.   MOVE($MOVE_END_X,$MOVE_END_Y)
  122. END_SUB
  123.  
  124. SUB (m-move2, $MOVE_E_X, $MOVE_E_Y)
  125.   $raznx = ABS($_xmouse - $MOVE_E_X)
  126.   $razny = ABS($_ymouse - $MOVE_E_Y)
  127.   FOR($iter_move=20, $iter_move > 0, RND(-19,-6))
  128.      $procx = INT($raznx/$iter_move)
  129.      $procy = INT($razny/$iter_move)
  130.      $ttx = $MOVE_E_X + RND(0,$procx)*RNDFROM(-1,1)
  131.      $tty = $MOVE_E_Y + RND(0,$procy)*RNDFROM(-1,1)
  132.      IF($ttx < 1)
  133.         $ttx = RND(5,$procx)
  134.      ELSE
  135.         IF($ttx > ($_xmax-3))
  136.            $ttx = $_xmax - RND(5,$procx)
  137.         END_IF
  138.      END_IF
  139.      IF($tty < 1)
  140.         $tty = RND(5,$procy)
  141.      ELSE
  142.         IF($tty > ($_ymax-3))
  143.            $tty = $_ymax - RND(5,$procy)
  144.         END_IF
  145.      END_IF
  146.      IF($iter_move=20)
  147.         $SPEED = RND(16,20)
  148.      ELSE
  149.         $SPEED = 50
  150.      END_IF
  151.  
  152.      m-move_s($ttx,$tty,$SPEED)
  153.   END_CYC
  154.   WAITMS(RND(50,300))
  155.   m-move_s($MOVE_E_X, $MOVE_E_Y,0)
  156. END_SUB
  157.  
  158. m-move2(150, 150)
  159. WAITMS(500)
  160. m-move2(1020, 370)
  161. HALT
Название: Re: Реалистичное передвижение курсора
Отправлено: dramster от Сентябрь 08, 2015, 07:58:28 pm
ABS()  :o :-\? такого в справке нету. всегда приходилось проверять условиями и присваивать значение другим переменным. может я еще чегото не знаю??
Название: Re: Реалистичное передвижение курсора
Отправлено: WHOIM от Сентябрь 09, 2015, 12:51:58 am
dramster, Vint, благодарю за помощь. Взял скрипт dramster. Vint, скрипт который ты отправил хорош, но чересчур нереалистичный. Прикреплю скрин из пеинта, дабы показать разницу.

LDOWN(185,197)
MOVE(165,391)
WAITMS(500)
MOVE(506,770)
LUP($_xmouse,$_ymouse)
WAIT(1)

LDOWN(385,197)
MOVE_SLOW(365,391)
WAITMS(500)
MOVE_SLOW(706,770)
LUP($_xmouse,$_ymouse)
WAIT(1)

LDOWN(585,197)
m-move2(565,391)
WAITMS(500)
m-move2(906,770)
LUP($_xmouse,$_ymouse)
HALT

Повторил код около 5 раз в разных цветах. Кружками обвел начало и конец линий. 1 линия скрипт MOVE. 2 линия скрипт dramster. 3 линия скрипт Vint. А в идеале должно быть как на 4 линии. Ее я нарисовал сам  :)

(http://s018.radikal.ru/i507/1509/a5/95d5b3c30d3ct.jpg) (http://radikal.ru/fp/ae565536970140aba248d3045473916d)
Название: Re: Реалистичное передвижение курсора
Отправлено: Oraven от Сентябрь 09, 2015, 07:02:04 am
Все оказалось куда проще  ;D Нужно просто добавить рандом в момент перемещения курсора.

Вот что вышло, надеюсь это реалистично?!
Код: Clickermann
  1. // подпрограмма обязательно выше вызова
  2. SUB(mouse_move,$MOVE_END_X,$MOVE_END_Y)
  3.   $MOVE_SPEED = 1  // множитель скорости
  4.  
  5.   $MOVE_Start_X = $_xmouse
  6.   $MOVE_Start_Y = $_ymouse
  7.   $MOVE_X = $MOVE_Start_X
  8.   $MOVE_Y = $MOVE_Start_Y
  9.  
  10.   $dist = DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)
  11.  
  12.   $MOVE_SPEEDVAR = INT((SQRT($dist))/$MOVE_SPEED)
  13.  
  14.   IF($MOVE_SPEEDVAR < 1)
  15.      $MOVE_SPEEDVAR = 1
  16.   END_IF
  17.  
  18.   $MOVE_step=($dist-1)/$MOVE_SPEEDVAR
  19.   $MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
  20.   $MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step
  21.  
  22.   FOR($MOVE_i=0, $MOVE_i<INT($MOVE_step))
  23.      $MOVE_X = $MOVE_X + $MOVE_X_step
  24.      $MOVE_Y = $MOVE_Y + $MOVE_Y_step
  25.      MOVE(ROUND($MOVE_X,0)+RND(-5,5), ROUND($MOVE_Y,0)+RND(-5,5)) // добавляем рандом
  26.      WAITMS(1)
  27.   END_CYC
  28.  
  29.   MOVE($MOVE_END_X, $MOVE_END_Y) //Передвинуть окончательно в заданную точку
  30. END_SUB
  31.  
  32.  
  33.  
  34. // образец строки MOVE
  35. MOVE(520,380)  // точка 1
  36.  
  37. LDOWN(520,380) // рисуем
  38.  
  39. mouse_move(523,602)  // точка 2
  40.  
  41. mouse_move(637,834) // точка 3
  42.  
  43. LUP(637,834) // отпускаем
  44.  
  45. HALT // стоп

(http://savepic.net/7275518.png)

Вот еще вариант с промежуточной случайно отклоняющейся точкой
Код: Clickermann
  1. // подпрограмма обязательно выше вызова
  2. SUB(mouse_move,$MOVE_END_X,$MOVE_END_Y)
  3.   $MOVE_SPEED = 1  // множитель скорости
  4.  
  5.   $MOVE_Start_X = $_xmouse
  6.   $MOVE_Start_Y = $_ymouse
  7.   $MOVE_X = $MOVE_Start_X
  8.   $MOVE_Y = $MOVE_Start_Y
  9.  
  10.   $dist = DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)
  11.  
  12.   $MOVE_SPEEDVAR = INT((SQRT($dist))/$MOVE_SPEED)
  13.  
  14.   IF($MOVE_SPEEDVAR < 1)
  15.      $MOVE_SPEEDVAR = 1
  16.   END_IF
  17.  
  18.   $MOVE_step=($dist-1)/$MOVE_SPEEDVAR
  19.   $MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
  20.   $MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step
  21.  
  22.   FOR($MOVE_i=0, $MOVE_i<INT($MOVE_step))
  23.      $MOVE_X = $MOVE_X + $MOVE_X_step
  24.      $MOVE_Y = $MOVE_Y + $MOVE_Y_step
  25.      MOVE(ROUND($MOVE_X,0)+RND(-2,2), ROUND($MOVE_Y,0)+RND(-2,2)) // добавляем рандом
  26.      WAITMS(1)
  27.   END_CYC
  28.  
  29. END_SUB
  30.  
  31. SUB(m_move,$M_X,$M_Y)
  32.   $MOVE_MID_X = ($_xmouse+$M_X)/2
  33.   $MOVE_MID_Y = ($_ymouse+$M_Y)/2
  34.   mouse_move($MOVE_MID_X+RND(-30,30),$MOVE_MID_Y+RND(-30,30))
  35.   mouse_move($M_X,$M_Y)
  36.   MOVE($M_X,$M_Y) //Передвинуть окончательно в заданную точку
  37. END_SUB
  38.  
  39.  
  40.  
  41. // образец строки MOVE
  42. MOVE(520,380)  // точка 1
  43.  
  44. LDOWN(520,380) // рисуем
  45.  
  46. m_move(637,834) // передвигаем
  47.  
  48. LUP(637,834) // отпускаем
  49.  
  50. HALT // стоп
(http://savepic.net/7280625.png)
Название: Re: Реалистичное передвижение курсора
Отправлено: dramster от Сентябрь 09, 2015, 10:39:32 am
да, такие рандомные отклонения будут хорошо себя вести на максимальной скорости, где шаг перемещения 40-60пикс. но если поставить скорость на минимум, то курсор будет отклоняться не только со стороны в сторону, но и в зад в перед.
я себе еще ломал немного голову чтобы при перемещении по диагонали, смещятся также и по диагонали перпендикулярно нашему движению, чтобы не было перескоков через пиксели :D, но подумал, что это будет слишком.

хотя, пока писал этот пост, подумал что не так уж это и сложно. мы знаем катеты - корень из суммы квадратов $MOVE_X_step и Y_step это один катет(он у нас будет постоянным на все передвижение), второй это =1, узнаем гипотенузу, и както находим координаты точки в плоскости. и тогда при минимальной скорости передвижения, перескоков через пиксели не должно быть. но наверно это будет лишним.
Название: Re: Реалистичное передвижение курсора
Отправлено: Oraven от Сентябрь 09, 2015, 01:17:13 pm
да, такие рандомные отклонения будут хорошо себя вести на максимальной скорости, где шаг перемещения 40-60пикс. но если поставить скорость на минимум, то курсор будет отклоняться не только со стороны в сторону, но и в зад в перед.

В том и смысл рандома! Все что нужно это добиться чтоб курсор ездил не как по линейке а немного коряво. Кроме того нужна именно высокая скорость, потому что ты там все коробки (в дарк орбит) пропустишь пока доведешь курсор куда нужно.
Название: Re: Реалистичное передвижение курсора
Отправлено: WHOIM от Сентябрь 09, 2015, 03:19:45 pm
да, такие рандомные отклонения будут хорошо себя вести на максимальной скорости, где шаг перемещения 40-60пикс. но если поставить скорость на минимум, то курсор будет отклоняться не только со стороны в сторону, но и в зад в перед.

В том и смысл рандома! Все что нужно это добиться чтоб курсор ездил не как по линейке а немного коряво. Кроме того нужна именно высокая скорость, потому что ты там все коробки (в дарк орбит) пропустишь пока доведешь курсор куда нужно.

Очень хороший скрипт получился, за исключением скорости. Вы правы насчет того, что кликер пропустит много коробок. В моем скрипте он не попадает в коробку с первого раза, а кликает рядом, без всякого дополнения скрипта. Это происходит из-за небольшой скорости передвижения курсора.

Такой подход добавляет больше человечности в скрипт. Ведь люди тоже не попадают с первого раза, а иногда и со второго. Плюс скорость движения ни в коем случае не должна превышать "человеческую". Если в игре стоит тех анализ поведения игроков (а он скорее всего стоит), то скорость перемещения и клика будут самые основные показатели, выявляющие "читеров".  ;)

Если возможно заставить адекватно работать последний скрип на скорости от 6 до 8, дабы добавить рандом, буду премного благодарен.
Название: Re: Реалистичное передвижение курсора
Отправлено: Oraven от Сентябрь 09, 2015, 04:46:18 pm
Вот последняя редакция с рандомом
Код: Clickermann
  1. // подпрограмма обязательно выше вызова
  2. SUB(mouse_move,$MOVE_END_X,$MOVE_END_Y)
  3.   $MOVE_SPEED = 1  // множитель скорости (отвечает за количество точек)
  4.  
  5.   $MOVE_Start_X = $_xmouse
  6.   $MOVE_Start_Y = $_ymouse
  7.   $MOVE_X = $MOVE_Start_X
  8.   $MOVE_Y = $MOVE_Start_Y
  9.  
  10.   $dist = DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)
  11.  
  12.   $MOVE_SPEEDVAR = INT((SQRT($dist))/$MOVE_SPEED)
  13.  
  14.   IF($MOVE_SPEEDVAR < 1)
  15.      $MOVE_SPEEDVAR = 1
  16.   END_IF
  17.  
  18.   $MOVE_step=($dist-1)/$MOVE_SPEEDVAR
  19.   $MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
  20.   $MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step
  21.  
  22.   FOR($MOVE_i=0, $MOVE_i<INT($MOVE_step))
  23.      $MOVE_X = $MOVE_X + $MOVE_X_step
  24.      $MOVE_Y = $MOVE_Y + $MOVE_Y_step
  25.      MOVE(ROUND($MOVE_X,0)+RND(-2,2), ROUND($MOVE_Y,0)+RND(-2,2)) // добавляем рандом
  26.      WAITMS($rnwait) // задержка при движении по точкам
  27.   END_CYC
  28.  
  29. END_SUB
  30.  
  31. SUB(m_move,$M_X,$M_Y)
  32.   $rnwait = RND(6,15) // случайная скорость
  33.   $MOVE_MID_X = ($_xmouse+$M_X)/2
  34.   $MOVE_MID_Y = ($_ymouse+$M_Y)/2
  35.   mouse_move($MOVE_MID_X+RND(-30,30),$MOVE_MID_Y+RND(-30,30))
  36.   mouse_move($M_X,$M_Y)
  37.   MOVE($M_X,$M_Y) //Передвинуть окончательно в заданную точку
  38. END_SUB
  39.  
  40. LDOWN(226,265) // рисуем
  41. $MS = $_ms // засекаем время
  42.  
  43. m_move(839,989) // передвигаем
  44.  
  45. LUP(839,989) // отпускаем
  46. LOGWRITE ($_ms-$MS, " - ", $rnwait)
  47.  
  48. HALT // стоп

Время передвижения на картинке занимает от 330 до 730 мс что вполне реалистично.
17:35:40 509 - 9
17:35:43 606 - 12
17:35:47 525 - 10
17:35:49 589 - 11
17:36:03 425 - 8
17:36:04 378 - 7
17:36:05 520 - 10
17:36:07 686 - 14
17:36:10 430 - 8
17:36:11 351 - 6
17:36:13 467 - 9
17:36:14 606 - 12
17:36:15 640 - 13
17:36:17 523 - 10
17:36:18 549 - 11
17:36:19 344 - 6
17:36:20 348 - 6
17:36:21 730 - 15

Название: Re: Реалистичное передвижение курсора
Отправлено: dramster от Сентябрь 09, 2015, 06:05:20 pm
что то я загнался этим передвижением  :D . и чето подумал, а от чего же зависит скорость передвижения курсора в системе? как оказалось, она зависит только лиш (ну или почти) от шага $MOVE_step. а обновляться местоположение должно в пределах 4-7мс. в изначальном варианте стоит задержка 1мс ($rnwait), и это, как оказывается, маловато. и скорее всего менять эту задержку не желательно, а менять скорость передвижение только шагом $MOVE_step.
проверял так
Код: Clickermann
  1. wait(1)
  2. print("бот")
  3. m_move(910,540)
  4. print("не бот")// начинаем дергать мышкай
  5. wait(5)
  6. halt
  7.  
  8.  
  9. THREAD(thr_name)
  10.   WHILE(1)
  11.      $t=$_ms
  12.      $x=$_xmouse
  13.      $y=$_ymouse
  14.      WHILE(($x=$_xmouse)&($y=$_ymouse))
  15.         waitms(1)
  16.      END_CYC
  17.      print($_ms-$t)
  18.   END_CYC
  19. END_THREAD
у меня показало : там где бот - ($rnwait+-1);  там где не бот - в пределах 3-7 мс (в основном 4-6 мс), не зависимо от скорости дергания(конечно если не слишком медленно). возможно это только у меня так, а возможно что эта задержка и не играет никакой роли    :D
Название: Re: Реалистичное передвижение курсора
Отправлено: Oraven от Сентябрь 09, 2015, 06:16:47 pm
Вряд ли игра снимает положение курсора каждую миллисекунду, это большая нагрузка. Достаточно это делать раз в несколько десятков мс. чтобы понять что курсором водят по экрану а не прыгают мгновенно из точки в точку.
Название: Re: Реалистичное передвижение курсора
Отправлено: Vint от Сентябрь 10, 2015, 07:26:09 am
что то я загнался этим передвижением  :D . и чето подумал, а от чего же зависит скорость передвижения курсора в системе? как оказалось, она зависит только лиш (ну или почти) от шага $MOVE_step.

Так я на основе этого и писал mouse_move. Скорость только шагом.
Название: Re: Реалистичное передвижение курсора
Отправлено: Vint от Сентябрь 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% на половине дистанции. Ну или где то так.
Название: Re: Реалистичное передвижение курсора
Отправлено: Vint от Сентябрь 10, 2015, 09:10:32 am
Ну вот так попробовал
Код: Clickermann
  1. // подпрограмма обязательно выше вызова
  2. SUB(mouse_move,$MOVE_END_X,$MOVE_END_Y)  
  3.   $MOVE_Start_X = $_xmouse
  4.   $MOVE_Start_Y = $_ymouse
  5.   $MOVE_X = $MOVE_Start_X
  6.   $MOVE_Y = $MOVE_Start_Y
  7.  
  8.   $dist = DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)
  9.   $MOVE_step = ($dist-1)/INT(SQRT($dist))
  10.   $MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
  11.   $MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step
  12.  
  13.   FOR($MOVE_i=0, $MOVE_i < INT($MOVE_step))
  14.      $MOVE_X = $MOVE_X + $MOVE_X_step
  15.      $MOVE_Y = $MOVE_Y + $MOVE_Y_step
  16.      MOVE(INT($MOVE_X) + RND(-2,2), INT($MOVE_Y) + RND(-2,2))
  17.      WAITMS($rnwait) // задержка при движении по точкам
  18.   END_CYC  
  19. END_SUB
  20.  
  21. SUB(m_move,$M_X,$M_Y)
  22.   $rnwait = RND(6,15) // случайная скорость
  23.   $MOVE_MID_X = INT(($_xmouse+$M_X)/2)
  24.   $MOVE_MID_Y = INT(($_ymouse+$M_Y)/2)
  25.   $otx = INT(ABS($_xmouse - $M_X) * 0.12)
  26.   $oty = INT(ABS($_ymouse - $M_Y) * 0.12)
  27.   mouse_move($MOVE_MID_X+RND(-$otx,$otx), $MOVE_MID_Y+RND(-$oty,$oty))
  28.   mouse_move($M_X,$M_Y)
  29.   MOVE($M_X,$M_Y) //Передвинуть окончательно в заданную точку
  30. END_SUB
  31.  
  32.  
  33. LOGCLEAR
  34.  
  35. $MS = $_ms // засекаем время
  36. LDOWN($_xmouse,$_ymouse) // рисуем
  37. m_move(500,500) // передвигаем
  38. LUP(500,500) // отпускаем
  39. LOGWRITE ($_ms-$MS, " - ", $rnwait)
  40.  
  41. HALT
  42.  
(https://i.ibb.co/XJH6ypj/2019-11-28-09-41-59.png) (https://ibb.co/XJH6ypj)
Название: Re: Реалистичное передвижение курсора
Отправлено: Flayka от Октябрь 21, 2015, 04:19:52 pm
Подстава.
Я чет и не думал, что можно движение мышки игрока снимать.) добавил рандома в клик по пикселям и радовался) надо теперь снова бота подпиливать) спасибо за кучу инфы!
Название: Re: Реалистичное передвижение курсора
Отправлено: Kedrick от Октябрь 22, 2015, 03:20:34 pm
А насколько реалистично такое предположение?
В браузерках это же невозможно (или тоже возможно уже?) и данный вопрос касается только клиентских приложений?
Название: Re: Реалистичное передвижение курсора
Отправлено: xDigital от Декабрь 14, 2015, 12:02:30 am
кто поможет прикрутить к соединениям цифр?
Название: Re: Реалистичное передвижение курсора
Отправлено: xDigital от Декабрь 14, 2015, 11:49:18 pm
Всем спасиб разобрался, взял рандом от Vint
Название: Re: Реалистичное передвижение курсора
Отправлено: NewUserCM от Апрель 01, 2016, 01:06:21 am
Очень нужный код,только совершенно не понимаю как его вставлять в нужном месте
Название: Re: Реалистичное передвижение курсора
Отправлено: Oraven от Август 14, 2016, 04:41:13 pm
Код: Clickermann
  1. // подпрограммы обязательно выше вызова
  2. SUB(mouse_move,$MOVE_END_X,$MOVE_END_Y)  
  3.   $MOVE_Start_X = $_xmouse
  4.   $MOVE_Start_Y = $_ymouse
  5.   $MOVE_X = $MOVE_Start_X
  6.   $MOVE_Y = $MOVE_Start_Y
  7.  
  8.   $dist = DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)
  9.   $MOVE_step = ($dist-1)/INT(SQRT($dist))
  10.   $MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
  11.   $MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step
  12.  
  13.   FOR($MOVE_i=0, $MOVE_i < INT($MOVE_step))
  14.      $MOVE_X = $MOVE_X + $MOVE_X_step
  15.      $MOVE_Y = $MOVE_Y + $MOVE_Y_step
  16.      MOVE(INT($MOVE_X) + RND(-2,2), INT($MOVE_Y) + RND(-2,2))
  17.      WAITMS(RND(3,9)) // задержка при движении по точкам случайная скорость
  18.   END_CYC  
  19. END_SUB
  20.  
  21. SUB(m_move,$M_X,$M_Y)
  22.   $MOVE_MID_X = INT(($_xmouse+$M_X)/2)
  23.   $MOVE_MID_Y = INT(($_ymouse+$M_Y)/2)
  24.   $otx = INT(ABS($_xmouse - $M_X) * 0.12)
  25.   $oty = INT(ABS($_ymouse - $M_Y) * 0.12)
  26.   mouse_move($MOVE_MID_X+RND(-$otx,$otx), $MOVE_MID_Y+RND(-$oty,$oty))
  27.   mouse_move($M_X,$M_Y)
  28.   MOVE($M_X,$M_Y)
  29. END_SUB
  30.  
  31. // вызов пишем вместо MOVE
  32. m_move(500,500) // плавное перемещение мыши в заданную точку
  33.  
  34. HALT // стоп
Название: Re: Реалистичное передвижение курсора
Отправлено: squid от Август 14, 2016, 06:25:07 pm
Кcтати я не знаю, насколько реалистично он выглядит при движении с одного угла в другой угол, но при горизонтальном движении (Y_START и Y_END равны) это выглядит вот так:

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

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

Хоть бы назад по X пару раз сдвинул...
Название: Re: Реалистичное передвижение курсора
Отправлено: Золотой от Август 14, 2016, 07:29:10 pm
алгоритм проверен сотни раз и используется очень давно, не считай себя умнее всех, более вероятно обратное.
Название: Re: Реалистичное передвижение курсора
Отправлено: squid от Август 15, 2016, 12:08:56 am
алгоритм проверен сотни раз и используется очень давно, не считай себя умнее всех, более вероятно обратное.
Я вижу по координатам, а вы, видимо, не обратили как следует внимание на лог.
Название: Re: Реалистичное передвижение курсора
Отправлено: Золотой от Август 15, 2016, 01:24:12 am
а зачем лог, когда всё нагляднее графически.
Название: Re: Реалистичное передвижение курсора
Отправлено: squid от Август 15, 2016, 03:21:48 am
а зачем лог, когда всё нагляднее графически.
А... Поколение предпочитающее смотреть, а не читать. Ну вот смотрите видео (http://sendfile.su/1257499) (10 mb) с работы сего алгоритма на сайте реально следящим за автокликерами. Pac-man в результате означает о не понравившемуся движению мыши.  Последние две "проводки" уже в ручную (первый раз промахнулся) и результат "Ок"
Название: Re: Реалистичное передвижение курсора
Отправлено: Золотой от Август 15, 2016, 09:48:22 am
я ваше молодоепоколение удивлю, но технически грамотный человек должен уметь читать графическую информацию, а не знакомые буквы смотреть.
Название: Re: Реалистичное передвижение курсора
Отправлено: Vint от Август 15, 2016, 11:44:37 am
Т.е. из всего этого навороченного алгоритма на выходе получаем простое:
Код: Clickermann
  1. FOR($X_START, $X_START<$X_END, RND(4,10))
  2.    MOVE($X_START, $_ymouse+RND(-2,2)
  3.    WAITMS(RND(3,9))

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

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

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

Для решения этой капчи нужен индивидуальный подход, там условия свои.
А сделать выбор конечной точки с медленным прицеливанием туда-сюда разве сложно сделать? Нет.
Только это будет выглядеть мерзко при других условиях. Пробовали и такое, но получалась лажа, если честно.
Название: Re: Реалистичное передвижение курсора
Отправлено: squid от Август 15, 2016, 02:14:17 pm
При просмотре первое что бросилось в глаза: почему даже скорость не настроена? При таких скоростях он и не пропустит.
Скорость подобрать под свой комп, чтобы курсор не летал как ужаленный.
Да менял я скорость и значения rnd. Один фиг.
Название: Re: Реалистичное передвижение курсора
Отправлено: Vint от Август 15, 2016, 02:51:39 pm
Здесь вопрос больше не к реалистичности передвижения, а к решению конкретной капчи.
Алгоритм они меняли, реакция изменилась, нужно под них всё время подстраиваться.

У меня она и руками не всегда проходится. Не то, что с ответом "fail" когда мимо, а с ответом "forbidden", когда не понравилось. Китайцы...
Ещё замечания, которые увидел:
после нажатия сдвиг происходит почти мгновенно. Там ощутимая пауза нужна.
слишком точный конечный ответ.

Ты выложи код что уже есть, чтоб с нуля не делать, может покрутим .
Название: Re: Реалистичное передвижение курсора
Отправлено: squid от Август 15, 2016, 03:06:43 pm
Здесь вопрос больше не к реалистичности передвижения, а к решению конкретной капчи.
Алгоритм они меняли, реакция изменилась, нужно под них всё время подстраиваться.
Изменил
Код: Clickermann
  1. MOVE(INT($MOVE_X) + RND(-2,2)
на
Код: Clickermann
  1. MOVE(INT($MOVE_X) + RND(-15,2)
Иногда дёргает по Х назад и вроде пока как работает уже 2 часа. Посмотрим...

после нажатия сдвиг происходит почти мгновенно. Там ощутимая пауза нужна.
Я писал свой (http://crapware.aidf.org/forum/index.php?topic=2510.msg15756#msg15756), но тот давно не работает.

P.S. Всё. Прекратил работать. У меня всё более стойкое ощущение, что они собирают базу движения мыши и анализируют. Поневоле о ИИ задумаешься.
Название: Re: Реалистичное передвижение курсора
Отправлено: Vint от Август 15, 2016, 05:39:28 pm
Мучал часа два. Тоже пришёл к такому выводу. Делаешь один алгоритм, пока по нему отлаживаешь, они гады стату на тебя копят. Потом на этой же капче двигая руками но копируя алгоритм, результат  "fail". И после если капчу не сбросить, уже и не по алгоритму руками ничего не выходит. Раз 20 пробовал по разному.

Что интересно, на родном сайте капчи, где проверяется решение есть тоже образец
http://www.geetest.com/exp_embed
Так он решается автоматом даже при применении mouse_move. Но там как понятно нет привязки к юзеру и стата видать не собирается в демке.

А скрипт ты нигде не выкладывал. Нет его. Шифровка?
Название: Re: Реалистичное передвижение курсора
Отправлено: squid от Август 15, 2016, 08:24:24 pm
А скрипт ты нигде не выкладывал. Нет его. Шифровка?
Деление на 5 отрезков. Первый и пятый медленные, а 2,3,4 побыстрее. Возможны ошибки в коде, но попался один из первых. Где-то так:

Код: Clickermann
  1. SUB(mouse_move, $X_END, $Y_END)
  2.   $X_START = $_xmouse
  3.   $X_TEMP = ($X_END - $X_START) / 5
  4.   $VAR[0] = INT($X_TEMP)
  5.   $VAR[1] = INT($X_TEMP * 3) + $X_TEMP/2
  6.   $VAR[2] = INT($X_TEMP) - $X_TEMP/2
  7.   FOR ($I = $X_START, $I < $X_START + $VAR[0], RND(0, 1))
  8.      MOVE($I, $Y_END)
  9.      WAITMS(RND(20, 35))
  10.   END_CYC
  11.   FOR ($I = $X_START + $VAR[0], $I < $X_START + $VAR[1] + $VAR[2], RND(1, 2))
  12.      MOVE($I, $Y_END)
  13.      WAITMS(RND(8, 15))
  14.   END_CYC
  15.   FOR ($I = $X_START + $VAR[1] + $VAR[2], $I < $X_END, RND(0, 1))
  16.      MOVE($I, $Y_END)
  17.      WAITMS(RND(20, 35))
  18.   END_CYC
  19. END_SUB
Название: Re: Реалистичное передвижение курсора
Отправлено: VGK от Январь 08, 2017, 11:24:08 pm
Плавное перемещение
Хоть и недавно зарегистрировался я на сайте, читал все и не один раз
видел, но не могу найти, пример движения мыши по траектории
Задача
Зажимаем лкм в координате 0, 10
двигаемся в $_xmax, 10
смещаемся в (например) в $_xmax, 50
двигаемся в 0, 50

смещаемся в в 0, 100
двигаемся в $_xmax, 100
отпускаем лкм
Название: Re: Реалистичное передвижение курсора
Отправлено: Oraven от Январь 09, 2017, 07:33:59 am
Код: Clickermann
  1. // подпрограмма обязательно выше вызова
  2. SUB(mouse_move, $MOVE_END_X,$MOVE_END_Y)
  3.   $MOVE_SPEED = 3  // множитель скорости
  4.  
  5.   $MOVE_Start_X = $_xmouse
  6.   $MOVE_Start_Y = $_ymouse
  7.   $MOVE_X = $MOVE_Start_X
  8.   $MOVE_Y = $MOVE_Start_Y
  9.  
  10.   $dist = DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)
  11.  
  12.   $MOVE_SPEEDVAR = INT((SQRT($dist))/$MOVE_SPEED)
  13.  
  14.   IF($MOVE_SPEEDVAR < 1)
  15.      $MOVE_SPEEDVAR = 1
  16.   END_IF
  17.  
  18.   $MOVE_step=($dist-1)/$MOVE_SPEEDVAR
  19.   $MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
  20.   $MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step
  21.  
  22.   FOR($MOVE_i=0, $MOVE_i<INT($MOVE_step))
  23.      $MOVE_X = $MOVE_X + $MOVE_X_step
  24.      $MOVE_Y = $MOVE_Y + $MOVE_Y_step
  25.      MOVE(ROUND($MOVE_X,0), ROUND($MOVE_Y,0))
  26.      WAITMS(1)
  27.   END_CYC
  28.  
  29.   MOVE($MOVE_END_X, $MOVE_END_Y)
  30. END_SUB
  31.  
  32. LDOWN(0,10) // Зажимаем лкм в координате 0, 10
  33. mouse_move($_xmax, 10) // двигаемся в $_xmax, 10
  34. mouse_move($_xmax, 50) // смещаемся в (например) в $_xmax, 50
  35. mouse_move(0, 50) // двигаемся в 0, 50
  36. mouse_move(0, 100) // смещаемся в 0, 100
  37. mouse_move($_xmax, 100) // двигаемся в $_xmax, 100
  38. LUP(-1,-1) // отпускаем лкм
  39.  
  40. HALT // стоп
Название: Re: Реалистичное передвижение курсора
Отправлено: VGK от Январь 10, 2017, 08:18:21 pm
Спасибо
90 процентов проблемы закрыто
и вопрос
как сделать чтобы движение по отрезкам было медленнее типа один проход 3 секунды
Название: Re: Реалистичное передвижение курсора
Отправлено: VGK от Январь 10, 2017, 08:56:42 pm
менял
пока оптимального варианта не нашел
это сбор урожая и все время часть пропускает
Название: Re: Реалистичное передвижение курсора
Отправлено: ЦИТРИН от Январь 13, 2017, 12:05:17 am
Вряд ли игра снимает положение курсора каждую миллисекунду, это большая нагрузка. Достаточно это делать раз в несколько десятков мс. чтобы понять что курсором водят по экрану а не прыгают мгновенно из точки в точку.
Вы правы.
Анализ поведения курсора , -  это уже  ближе к паранойе.
Никто из разработчиков не  будет тратить уйму  денег,  чтобы контролировать курсоры игроков.
Смысл?  Денег потратят кучу и допустим  отсеют  двух-трех вундеркиндов  из миллиона  пользователей.
Где  навар ?
Пока ни в одной игре (даже не приличные деньги с парой тыщ рублей на кону)  я не видел , чтоб мой курсор спалили.
Ясно, что везде рандомы кликам и паузам ставлю, но  это несложный прием в скрипте .
Например вот:
         WAITMS (rnd(50,150))
         LCLICK($X+ (rnd(0,39)) , $Y+ (rnd(0,5))
         WAITMS (rnd(50,150))
Название: Re: Реалистичное передвижение курсора
Отправлено: ЦИТРИН от Январь 13, 2017, 11:15:32 am
Вот тут не согласен, есть такая штука Вебвизор. И пользуются ей действительно параноики, а ещё хуже сожают своих сотрудников на проверку, так вот индивидуальный бот им просто не с чем сравнивать и он пропускается, а даже минимально распостранённый, проверяется как совпадение картинок хоть скриптом нашего кликера. Были случаи, что люди проверяли 30 копеешные задания, лишь-бы только не оплачивать. Если есть техническая возможность проверить, и материальная заинтересованность проверяющего, то проверять будут.
Как Вы себе представляете  проверку движений курсоров миллиона пользователей  некой популярной игры типа Дак Орбит?
Тут ведь  речь изначально  шла о играх.
Но даже в денежных играх владелец ресурса  выгонит  админов, которые будут маяться  дурью и тратить приличное бабло ради экономии в "30 копеек" , как Вы предположили.
Допускаю  единичное  состязание, когда админам нечего делать и они от скуки просто ловят блох  , расходуя  приличные деньги хозяина игры. 
 
Название: Re: Реалистичное передвижение курсора
Отправлено: ЦИТРИН от Январь 13, 2017, 03:05:33 pm
... не стоит недооценивать жадность и возможности автоматизации различных проверок хозяевами сайтов.
Обычный рандом  на кликах и паузах  решает  все проблемы .
Меня ни разу не спалили, хотя пользуюсь кликерманом почти во всех играх и даже  денежных  приложениях типа ёбита. https://yobit.net/ru/freecoins/
Там раздают реальные деньги нахаляву . И все скрипты кликермана спокойно работают , вопреки запрету админов  использовать ботов.
Название: Re: Реалистичное передвижение курсора
Отправлено: squid от Февраль 09, 2017, 02:53:14 pm
... не стоит недооценивать жадность и возможности автоматизации различных проверок хозяевами сайтов.
Обычный рандом  на кликах и паузах  решает  все проблемы .
Увы не все. (http://crapware.aidf.org/forum/index.php?topic=2112.msg16714#msg16714)
Название: Ну что, попробуем утереть гуглу нос?
Отправлено: ЦИТРИН от Март 15, 2017, 12:41:04 am
CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart) — это технология, которая позволяет отличить бота от настоящего пользователя. Их использование позволяет уменьшить поток спама и защитить страницы. Наиболее популярны графические капчи — т. е. в которых пользователю предлагается разобрать текст, который якобы не может прочитать машина, или определить, что изображено на картинке.

Однако в последние годы технологии распознавания изображений продвинулись так далеко, что иногда компьютер улавливает зашифрованные смыслы лучше человеческого глаза: пользуясь этим, компьютерам доверяют, например, чтение едва заметных писмён на археологических находках или старых картинах. И с распознаванием изображений у машин всё обстоит довольно неплохо: учёные, правда, до сих пор просят граждан помочь в анализе больших массивов изображений, как в проекте Backyard Science, но с более простыми задачами программы справляются самостоятельно — Google и другие поисковики давно умеют искать по картинкам, недавно был запущен Shazam для картин, ИИ неплохо разгадывает даже очень плохие рисунки пользователей.

В условиях возрастающей мощи компьютера традиционная графическая капча перестаёт быть помехой для серьёзных злоумышленников и целеустремлённых спамеров. Поэтому Google отказался от традиционной интерактивной капчи и вместо этого будет анализировать поведение пользователя самостоятельно. В частности, программа будет фиксировать движения мышки и IP-адрес пользователя. Боты, как правило, передвигают курсор кратчайшим путём; человек так сделать, естественно, не может и не хочет.

Добавить новую reCAPTCHA на свой сайт можно здесь.

Новая капча отображается только в виде окошка, в котором программа сама ставит галочку и сообщает вам о том, что вы не робот. Спасибо, Google.
http://www.popmech.ru/technologies/339882-google-pridumal-nevidimuyu-kapchu-kotoraya-ne-razdrazhaet/
 

Кто-то уже попробовал кликерманом входить? ?
Название: Re: Реалистичное передвижение курсора
Отправлено: Vipz от Март 15, 2017, 11:52:13 pm
А какой из этих скриптов самый правдивый по реалистичности ?

Есть что то , что двигалось плавными волнами , без дерганий каждые 5 px
и по мере проходимости набирало бы скорость... т.е. - медленное начало движения перед кликом ~500ms , а далее разгон до точки
все как в вебвизоре люди носятся , есть что то подобное ?
Название: Re: Реалистичное передвижение курсора
Отправлено: Vint от Март 16, 2017, 09:33:47 am
А какой из этих скриптов самый правдивый по реалистичности ?

Никакой. Такой задачи не было. Делали просто не механическое и не прямолинейное движение слегка имитирующее обычные движения человека.
Нужен был достаточно простой скрипт, чтоб не сильно нагружал.
Ещё расчёт был на то, что даже при системах слежения за курсором, такие системы тоже не будут снимать данные с частотой достаточной чтоб ловить попиксельное перемещение.

Не вопрос, можно написать и более реальный. С изменением скорости по кривым и более разнообразной траекторией с хитрым алгоритмом или выбором из большого количества шаблонов.
Так и хотелось сделать в дальнейшем, но... применения не видно. Вот не поверишь нигде это не потребовалось. А без реального применения нет стимула всё выдумывать и отлаживать.
Тем более, как удалось выяснить, многие по разному понимают "реалистичность". Согласись, движения при рисовании на экране - одни, а прибежавшего с кухни по вызову скайпа, будут другие. Видимо ещё зависит от конкретной задачи. А делать прям совсем универсальный скрипт, со множеством настроек точности/скорости/хаотичности и пр. никто не хочет. И настраивать его потом будет сложно.

Можешь взяться за это дело и внести вклад. Все будут благодарны, заработаешь уважение и дружеское похлопывание по плечу  :D ;D
Название: Re: Реалистичное передвижение курсора
Отправлено: RasDimday от Декабрь 17, 2017, 01:34:13 pm
Взял скипт от Oravenа. Первое перемещение срабатывает как нужно ведя курсор, а все последующие просто прыгает.
В чём может быть проблема?
Название: Re: Реалистичное передвижение курсора
Отправлено: RasDimday от Декабрь 17, 2017, 02:38:26 pm
автор скрипта всё таки Vint, попробуйте какую нибудь из авторских версий.
Спасибо, скрипты от Vinta работают как надо.
Название: Re: Реалистичное передвижение курсора
Отправлено: Тимофей от Октябрь 17, 2018, 01:13:23 am
Тема передвижения курсора совершенно заглохла. Хотя со временем она становится все более актуальной и важной.
Любой ресурс, с которого можно поиметь хотя бы "шерсти клок", пытается выявить ботоводов. Казалось бы- соблюдай осторожность при работе с мультиаккаунтами и не жадничай, но не все так просто. Банан прилетает еще на стадии отладки скрипта. У меня возникали подозрения по поводу сканирования курсора, но без уверенности. И вот в качестве доказательства, попадает мне информация от админов проекта. Оказалось, что для обеспечения "правильного" ГСЧ- берется передвижение мыши, данные тысяч пользователей хешируются. Как следствие, генератор приобретает статус аппаратного (не вдавался в подробности, но видимо это важно).
Нет сомнений, что паралельно выявляются подозрительные скачки курсора.
Подскажите, кто знает, как зарандомить мышу? Идеальным вариантом конечно будет вшитая в программу инструкция.
Но это могут сделать только разработчики Clickermann.
Название: Re: Реалистичное передвижение курсора
Отправлено: Vint от Октябрь 17, 2018, 09:04:38 am
Банан прилетает еще на стадии отладки скрипта.
В том то и дело. Отлаживать всё равно придётся на конкретном проекте.

И ничего не заглохло, говорю же нет надобности. У кого есть надобность пусть двигает тему или хотя бы расшевелит  ;D
И делать под конкретную игру хоть и полезно (для неё) но не очень интересно.

По поводу хэшируемости, не думаю что хранят данные тысяч пользователей. Зачем? Если только выявлять ботоводов пользующихся одним [известным] ботом.

Вот про гуглокапчу "Я не робот" понял, что она пишет передвижение мыши и отсылает хэш вместе с другими параметрами. Заметил что гугл или на сервере или в куках помнит несколько таких хэшей, сколько ХЗ. Позже прочитал, что отправляется инфа о передвижении за последнюю секунду перед кликом, но это не точно. Ну в любом случае нет смысла писать продолжительное время, это ведь уменьшает уникальность и смысл теряется. Понятно что пишет последний период в цикле. И при клике отправляет.
Там даже допуск пришит (а  это на другой капче подобной, но не суть). Старался в ручном режиме делать минимальные передвижения или вообще без них (нацеливался заранее) так меня без всяких ботов через раз стали не пропускать. Но то гуглокапча, в принципе знающий JavaScript  распотрошив скрипты может хотя бы определить главные параметры слежения, ведь иначе за мышью в браузере нечем следить. А вот что делать с клиентом игры где не доберёшся. Только косвенно выявлять на что агрится защита и пытаться подстроится.
Название: Re: Реалистичное передвижение курсора
Отправлено: Bitya от Февраль 04, 2020, 05:55:14 pm
Тоже задался этим вопросом (да знаю, опять археология, но вопрос на сколько понимаю всё еще открытый). Задача поистине нетривиальная и комплексная, по этому решил решать её по частям, начиная с более простого.

Может я конечно что-то пропустил, но не видел отсылок в данной теме, а тем не менее аспект не менее важный - любое реалистичное перемещение из точки А в точку Б по определению зависит от самих этих точек А и Б. т.к. начальная точка почти всегда известна, то остаётся конечная - другими словами: в основе реалистичного передвижения курсора лежит реалистичный выбор "конечного пункта назначения".

Мне кажется, что авторы зачастую если и задаются данным вопросом, то решают его через рандом - задаётся конечная точка+-какоето расстояние по бокам. И в целом это не плохой подход, т.к. размазывает места кликов, но есть одно но - rand() генерирует равномерно распределённую случайную величину (https://ru.wikipedia.org/wiki/%D0%9D%D0%B5%D0%BF%D1%80%D0%B5%D1%80%D1%8B%D0%B2%D0%BD%D0%BE%D0%B5_%D1%80%D0%B0%D0%B2%D0%BD%D0%BE%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D1%80%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5). Простыми словами для людей не особо знакомых с теорвером - в примере rand(1,10) шанс того что выпадет любой из возможных результатов одинаков(в данном случае 10%), т.е. получаем "1" с шансом в 10%, "2" с шансом в 10%, и т.д.

Когда же мы, люди, передвигаем кудато курсор, мы целимся априори в "центр" мишени. Но изза того что мы люди (а человеку свойственно ошибатся ;D), почти всегда промазываем попадая всё таки в некоторую окрестность центра. И при множественном повторении, случаев когда курсор в итоге оказался "ближе" к центру намного больше, чем тех где он в итоге оказался "дальше". И такое поведение очень хорошо, и в то же время довольно просто, моделируется нормальным распределением (https://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D1%80%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5). Для человека не знакомому с теорвером обьяснить его суть в двух словах наверное будет проблематично, но если просто и вкратце(на примере первого рисунка в вики, красный график) - по оси Х то куда по факту будет попадать курсор, центр мишени в данном случае - 0, по оси Y - вероятность того что мы получим соответствующее значение Х(конечную точку для курсора). Как видим - чем ближе к центру(в примере красного графика - 0), тем выше вероятность получить такое значение. Собственно то что нам и требуется - целимся в центр мишени, но в итоге получаем значение с некоторым отклонением, в то же время чем ближе к центру, тем выше вероятность получить данное значение.

На практике данный способ я реализовал через численный метод, описанный здесь (http://stratum.ac.ru/education/textbooks/modelir/lection25.html), "Метод генерации нормально распределенных чисел, использующий центральную предельную теорему"...вдруг ктото захочет ознакомится с первоисточником. Собственно, сам код:
Код: Clickermann
  1. SUB(NormalDistribution, $y_nd, $a_nd, $sigma_max)//немного слов о параметрах
  2.                                                 //$y_nd - "ссылка" на переменную куда запишем результат
  3.                                                 //$a_nd - "математическое ожидание", или простыми словами - центр мишени
  4.                                                 //$sigma_max - три "средних отклонения", или простыми словами -
  5.                                                 //радиус в который смоделированное итоговое значение попадет с шансом в 99+%.
  6.                                                 //другими словами - $sigma_max задает интервал, относитительно центра,
  7.                                                 //вокруг которого будем получать значения
  8.  
  9.  
  10.   $result = 0
  11.   $n = 6                                       //на сколько понял, n задаёт точность приближения к нормальному распределению
  12.                                                 //чем больше тем лучше, но на практике вероятно хватит и меньших значений
  13.                                                 //не уверен что можно брать любое число, я бы брал кратное 6
  14.  
  15.   $sigma_nd = $sigma_max/3                      //переводим человеко-понятное значение интервала +-значений в "среднее отклонение"
  16.                                                 //далее просто реализация алгоритма
  17.   label_nd:
  18.   $V = 0
  19.   FOR($i=0, $i < $n)
  20.      $r_i = RND(0,10000)
  21.      $V = $V + $r_i
  22.   END_CYC
  23.   $V = $V/10000
  24.   $Z = ($V - $n/2)/SQRT($n/12)
  25.   $result = ROUND($Z*$sigma_nd + $a_nd,0)
  26.   IF(ABS($result - $a_nd)>$sigma_max)           //проверка на то, что в итоге мы попали в заданный $sigma_max интервал
  27.                                                 //т.к. есть шанс около ~0.3% что полученное значение будет лежать
  28.                                                 //за его пределами, то в таком случае просто пересчитываем по новой
  29.      LOGWRITE("")
  30.      LOGWRITE("Выход случайного числа за заданный предел!")
  31.      LOGWRITE("Ожидали ",$a_nd,"+-",$sigma_max,"; Получили ", $result)
  32.      LOGWRITE("")
  33.      GOTO(label_nd)
  34.   END_IF
  35.   SETVAR($y_nd, $result)
  36. END_SUB
  37.  
  38.  
  39. $target = 0//результирующее значение
  40. NormalDistribution("$target",950,800)//передаём его в процедуру по "ссылке", что позволит
  41.                                     //нам его  использовать дальше в том же блоке кода.
  42.                                     //на выходе получаем уже число с нормальным распределением
  43.  
  44. $target = ROUND($target,0)           //округляем до целых
  45. MOVE($target,500)                    //перемещаем курсор и кликаем
  46. LDOWN($target, 500)
  47. WAITMS(50)
  48. LUP($target, 500)
  49. WAITMS(50)
  50.  
  51. HALT
  52.  

Наглядно увидеть и убедится воочию эффективность данного подхода довольно просто. Убираем в конце HALT, открываем paint или его веб-аналог (https://jspaint.app/), разворачиваем лист на весь экран, выбираем балончик спрея и запускаем скрипт. Мы будем чаще получать значения ближе к центру, что будет отображатся в свою очередь в более черном закрашивание этой области.

!!Важно - заданные в примере параметры "мат. ожидания" и "3*отклонения"(950 и 800 соответственно) выбраны для Full HD разрешения(1920 пикселов по иксу) - будем получать значения в интервале от 150 до 1750, с центром в 950. Для других разрешений выбирайте соответствующие параметры(для HD например 640 и 500)!!

Еще важно: данный подход хорошо подходит для кликанья по статичным элементам, для которых заранее известны их размеры(чтобы знать какое отклонение брать). В случае же динамичных и\или движущихся целей эффективность его под вопросом:
1). Некоторый элемент случайности места нажатия задаётся самой случайностью местонахождения цели, т.е. мы уже по определению не кликаем в "одну и ту же точку на кнопке"
2). т.к. итоговую координату мы всё же получаем в некоторой окрестности, то в случае динамической цели невозможно точно расчитать отклонение чтобы оно со 100% попадало в пределы цели, и есть шанс кликнуть мимо (например если за "центр" a.k.a. мат. ожидание будет взята точка на краю мишени)
По этому в случаях динамичных целей применять данный метод нужно с осторожностью и полным пониманием того, что при неправильном выборе центра и отклонения, мы можем промазать.
В то же время, дабы не плодить лишний код, динамические случаи можно спокойно обрабатывать просто задавая "отклонение"(последний параметр, три "сигмы") равным нулю. При таком варианте получаем вырожденный случай, когда клик будет ровно в том месте, которое задано в качестве "центра мишени"(второй параметр, мат. ожидание "а")
Название: Re: Реалистичное передвижение курсора
Отправлено: Bitya от Февраль 04, 2020, 07:05:52 pm
Графомания не имеющая отношения к теме и ценности при практическом применении.
любое реалистичное перемещение из точки А в точку Б по определению зависит от самих этих точек А и Б. т.к. начальная точка почти всегда известна, то остаётся конечная - другими словами: в основе реалистичного передвижения курсора лежит реалистичный выбор "конечного пункта назначения".
Название: Re: Реалистичное передвижение курсора
Отправлено: dramster от Февраль 05, 2020, 12:53:50 pm
Да, просто тыкание в точку с рандомным отклонением не очень реалистично выглядит. И это уже обсуждали в какой-то теме, не стал искать, давно было.

Но както все сложно у тебя в расчетах, хотя вероятнее всего так и нужно. Я же всегда использовал рандомное отклонение от точки с рандомным интервалом этого самого отклонения (незнаю как правильно описать  :)) - выглядит это так $rnd_x= $x + rnd(rnd(-100, 0),rnd(0, 100)) - рандомное число от ($x-100) до ($x+100) где rnd_число стремится к числу $x.

График этих чисел по отношению к повторениям этих чисел выглядит немного не так как в твоих расчетах, но вполне себе реалистичен на деле.



Вот твой график, от 0 до 200 с центром в точке 100. Расчет по 5000 чисел (считает уж очень долго, нужно потерпеть).
Код: Clickermann
  1. SUB(NormalDistribution, $y_nd, $a_nd, $sigma_max)//немного слов о параметрах
  2.   //$y_nd - "ссылка" на переменную куда запишем результат
  3.   //$a_nd - "математическое ожидание", или простыми словами - центр мишени
  4.   //$sigma_max - три "средних отклонения", или простыми словами -
  5.   //радиус в который смоделированное итоговое значение попадет с шансом в 99+%.
  6.   //другими словами - $sigma_max задает интервал, относитительно центра,
  7.   //вокруг которого будем получать значения
  8.  
  9.  
  10.   $result = 0
  11.   $n = 192                                      //на сколько понял, n задаёт точность приближения к нормальному распределению
  12.   //чем больше тем лучше, но на практике вероятно хватит и меньших значений
  13.   //не уверен что можно брать любое число, я бы брал кратное 6
  14.  
  15.   $sigma_nd = $sigma_max/3                      //переводим человеко-понятное значение интервала +-значений в "среднее отклонение"
  16.   //далее просто реализация алгоритма
  17.   label_nd:
  18.   $V = 0
  19.   FOR($i=0, $i < $n)
  20.      $r_i = RND(0,10000)
  21.      $V = $V + $r_i
  22.   END_CYC
  23.   $V = $V/10000
  24.   $Z = ($V - $n/2)/SQRT($n/12)
  25.   $result = ROUND($Z*$sigma_nd + $a_nd,0)
  26.   IF(ABS($result - $a_nd)>$sigma_max)           //проверка на то, что в итоге мы попали в заданный $sigma_max интервал
  27.      //т.к. есть шанс около ~0.3% что полученное значение будет лежать
  28.      //за его пределами, то в таком случае просто пересчитываем по новой
  29.      //      LOGWRITE("")
  30.      //      LOGWRITE("Выход случайного числа за заданный предел!")
  31.      //      LOGWRITE("Ожидали ",$a_nd,"+-",$sigma_max,"; Получили ", $result)
  32.      //      LOGWRITE("")
  33.      GOTO(label_nd)
  34.   END_IF
  35.   SETVAR($y_nd, $result)
  36. END_SUB
  37.  
  38.  
  39.  
  40. FOR($a=0,$a<5000) //записываем 5000 вероятных чисел  
  41.   $target = 0
  42.   NormalDistribution("$target",100,100)
  43.   arrpush($arr_target, $target)          //помещаем в массив
  44. END_CYC
  45.  
  46. arrsort($arr_target)  // сортируем
  47.  
  48. FOR($a=0,$a<arrsize($arr_target)-1)   //подсчет  вероятности попадания в одно число
  49.  
  50.   IF($arr_target[$a] = $arr_target[$a+1])
  51.      $b = $b+1
  52.   else
  53.      IF($b > 0)
  54.         arrpush($graf, $b)
  55.      else
  56.         arrpush($graf, 0)
  57.      END_IF
  58.      $b = 0
  59.   END_IF
  60.  
  61. END_CYC
  62.  
  63.  
  64. //рисуем график. где x - это выпавшее рандомное число, а y - это количество повторений этого числа
  65. PXLREPLACE (0, 0, 199, 199, -1, 16777215)
  66. FOR($a=0,$a<arrsize($graf))
  67.   PXLREPLACE ($a, 200-$graf[$a], $a, 200-$graf[$a], -1, 0)
  68. END_CYC
  69. SCREENSHOTEX (0, 0, 199, 199)
  70. HALT
  71.  

График красивый, прям как на рисунках по твоим ссылкам. Только почему-то наблюдается небольшой сдвиг влево.
(https://i.imgur.com/ZpCTDkR.png)


А вот что делает обычный рандом. Расчет по 5000 чисел, выполняется мгновенно.
Код: Clickermann
  1. FOR($a=0,$a<5000) //записываем 5000 вероятных чисел  
  2.  
  3.   $target = 100 + rnd(rnd(-100,0),rnd(0,100))
  4.  
  5.   arrpush($arr_target, $target)          //помещаем в массив
  6.  
  7. END_CYC
  8.  
  9.  
  10.  
  11. arrsort($arr_target)  // сортируем
  12.  
  13. FOR($a=0,$a<arrsize($arr_target)-1)   //подсчет  вероятности попадания в одно число
  14.  
  15.   IF($arr_target[$a] = $arr_target[$a+1])
  16.      $b = $b+1
  17.   else
  18.      IF($b > 0)
  19.         arrpush($graf, $b)
  20.      else
  21.         arrpush($graf, 0)
  22.      END_IF
  23.      $b = 0
  24.   END_IF
  25.  
  26. END_CYC
  27.  
  28.  
  29. //рисуем график. где x - это выпавшее рандомное число, а y - это количество повторений этого числа
  30. PXLREPLACE (0, 0, 199, 199, -1, 16777215)
  31. FOR($a=0,$a<arrsize($graf))
  32.   PXLREPLACE ($a, 200-$graf[$a], $a, 200-$graf[$a], -1, 0)
  33. END_CYC
  34. SCREENSHOTEX (0, 0, 199, 199)
  35. HALT

График более остроугольный, без плавного перехода.
(https://i.imgur.com/jk85Vpk.png)

Но на деле большой разницы то и нет.


Так зачем заморачиваться с такими сложными расчетами, если можно это все заменить вот на такой простейший рандом, который стремится к центру:

Код: Clickermann
  1. //будет стремиться попасть в точку ($x, $y)
  2. LCLICK($x + rnd(rnd(-100, 0),rnd(0, 100)),$y + rnd(rnd(-100, 0),rnd(0, 100)))

Вот так выглядят эти клики:
(https://i.imgur.com/OGMzD7w.png)

Название: Re: Реалистичное передвижение курсора
Отправлено: Bitya от Февраль 06, 2020, 02:50:34 pm
2 dramster
Да, описанный тобой метод $rnd_x= $x + rnd(rnd(-100, 0),rnd(0, 100)) действительно даёт хорошие результаты, как-то даже и не приходил в голову подобный подход. Конечно, имитирует реальные клики он несколько хуже (вероятность попасть в конкретную точку, от края к центру, наростает линейно), но это с лихвой компенсируется и лучшей производительностью(выборка 5к чисел, 4 секунды против 12) и даже в большей степени - простотой реализации.
В общем, по сравнению с обычным рандомом $rnd_x= $x + rnd(-100,100) очень даже отличное решение.

Немного сравнительный тестов, для трёх вариантов рандомизации чисел. Первый рисунок - график вероятности получения конкретного числа(выборка 10к чисел, для наглядности отличий), из описанного выше тобой кода. У меня оно работает несколько кривовато, но общую суть показывает. Второй рисунок - как бы эти клики выглядели на плоскости(выборка 5к чисел).
Код: Clickermann
  1. //будет стремиться попасть в точку ($x, $y)
  2. FOR($a=0,$a<5000)
  3.   //1 вариант
  4.   LCLICK($x + rnd(-100,100),$y + rnd(-100,100))
  5.   //2 вариант
  6.   LCLICK($x + rnd(rnd(-100, 0),rnd(0, 100)),$y + rnd(rnd(-100, 0),rnd(0, 100)))
  7.   //3 вариант
  8.   NormalDistribution("$x",$x,100)
  9.   NormalDistribution("$y",$y,100)
  10.   LCLICK($x,$y)
  11. END_CYC
  12.  
1) $rnd_x= $x + rnd(-100,100)
(https://i.imgur.com/agfZvO7.png)      (https://i.imgur.com/bfcTfiS.png)
2) $rnd_x= $x + rnd(rnd(-100, 0),rnd(0, 100))
(https://i.imgur.com/vr7Fo01.png)      (https://i.imgur.com/nsic94r.png)
3) NormalDistribution("$rnd_x",$x,100)
(https://i.imgur.com/OW04qac.png)      (https://i.imgur.com/oWf6Nai.png)

Как видно, по сравнению с явным "палевом" варианта 1, остальные два дают на порядок более реальные результаты. И хотя и между ними есть разница, но ввиду вышеописанных преймуществ - твой вариант(второй) однозначно лучше.

p.s.:
Расчет по 5000 чисел (считает уж очень долго, нужно потерпеть).
В моём изначальном коде подправил параметр $n со 192 до 6(11-ая строка кода). На качество результата влият не особо, а с его увеличением производительность падает значительно.
График красивый, прям как на рисунках по твоим ссылкам. Только почему-то наблюдается небольшой сдвиг влево.
Проблема смещения в другом - ты в своём коде в блоке "//подсчет  вероятности попадания в одно число" используешь arrpush($graf, $b). В общем случае это вызывает неточность, т.к. оно просто накидывает сверху в массив количество уникальных результатов. Дело в том, что при 5000 выборке, мы не гарантированно получаем все возможные 200 уникальных чисел(из диапазона [-100;100]), и в таком случае итоговый массив $graf имеет меньшую длину чем 200, что в конечном итоге выражается в том что график сьезжает "влево".
А так как в моём варианте генерации случайных чисел, граничные значения имеют очень низкий шанс попастся(на порядки ниже, чем у тебя), то в выборке из 5000 их на много больше, и график сьезжает влево значительно ощутимей, что видно даже невооруженным глазом. Если же использовать $graf[$arr_target[$a]] = $b (т.е. на индекс сгенерированного числа будем записывать количество его появлений), то всё будет отображатся на графике правильно.
Я то понимаю что это всё писалось на коленке (и это не в коем случае не "предьява" :) ), но "сдвиг графика влево" это исключительно неточность визуализации полученного результата, а не его самого.


2 kiril
Прямоугольные сектора при обычном рандоме, дают гораздо более реалистичный разброс конечных координат передвижения.
Прямоугольные сектора при обычном рандоме, дают результаты описанные в варианте 1, а именно -
(https://i.imgur.com/bfcTfiS.png)
Где тут реалистичность - я не знаю.
Название: hi!
Отправлено: Tatiana_ol от Июль 01, 2022, 08:49:55 am
Цитировать
Можно конечно ещё заморочиться.Код: Clickermann

You it is serious?