Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - hrytsea

Pages: [1]
1
Общие вопросы / Re: define и setvar
« on: March 25, 2022, 07:57:39 PM »
- а так же, прикольчики типа:
А в чём прикольчик? Вроде бы работает так, как написано.

я джавист, мне такое странно)

2
Самый первый вариант мне нравится больше.



Сейчас очень медленно и сильный разброс параметров от линии к линии, не думаю, что это лучше, особенно концевые разбросы.

P.S. Код почти по PEP8

Немного ускорил, убрал сильный разброс(хотя мне больше нравилось так имитации человеческого движения), менять максимальную скорость параметром $m0, скорость ветра $w0, расстояние замедления перед остановкой $d0, гравитацию - $g0

3
Выходит вот так если карандашом. Красиво, но наверно нужно допилить. Видно что в каких то моментах курсор дергает назад.


Вопросы:

1. как скорость менять
2. что за параметры $wMin, $wMax
3. и еще, почему задержка какая-то после выполнения, курсор уже на месте, а он чето ждет

Да, это простенький алгоритм, мне показался лучше выложенных в этой теме ранее, поэтому решил поделиться) $wMin и $wMax - мин/макс задержка после достижения цели, не хочешь задержку - ставь 0,0).

Сейчас допиливаю нормальный вариант, с выбором скорости и более плавным движением.

4
ШИКАРНЫЙ (и достаточно простой) симулятор человеческого движения мыши WindMouse.
Адаптировано под Clickermann отсюда: https://ben.land/post/2021/04/25/windmouse-human-mouse-movement/

Там по ссылке очень много не понятного текста и столько же ссылок. Ты бы точно сказал что качать, и если какие-то нюансы по запуску, то тоже не хотелось бы самому разбираться.

Прикрепил код Clickermann  ;)

5
Общие вопросы / Re: define и setvar
« on: March 24, 2022, 09:52:38 PM »
Из справки про define: Инструкция сработает только если переменная не была объявлена раньше. В противном случае инструкция игнорируется. Если параметр value опущен, переменная инициализируется нулем.
 Вообще define нужен только в некоторых случаях, когда нужно присвоить значение переменной единожды, а далее она меняется в процессе работы скрипта.

Я для того эту тему создал чтоб понять, насколько в кликермане работает динамическая типизация и объявление переменных. Заметил несколько особенностей:
- аргументы подпрограмм уничтожаются после выполнения подпрограммы (даже глобальные переменные с такими же именами уничтожаются и обнуляются, обойти можно если использовать уникальные имена аргументов для каждой подпрограммы)
- переменные, передаваемые в подпрограммы в качестве аргументов, остаются при этом в порядке (если не имели такого же имени, как и аргумент подпрограммы)
- нет никакой разницы между $x = 5 и define($x), setvar("$x",5)
- а так же, прикольчики типа:
Code: (clickermann) [Select]
sub(one)
    $x = 5
    $y = 1
end_sub

sub(two)
    $x = 10
    $y = "привет"
end_sub

logclear()
logshow(1)
print($x, " ", $y*3) // 0 0
one()
print($x, " ", $y*3) // 5 3
two()
strseparate($y, "и",$res)
print($x, " ", $res[0]) // 10 пр
halt()

Mission accomplished  8)

6
Общие вопросы / Re: define и setvar
« on: March 22, 2022, 12:47:44 AM »
Привет опять!

Является ли данная строка кода:
Code: (clickermann) [Select]
$x = 5эквивалентной этому:
Code: (clickermann) [Select]
define($x)
setvar($x, 5)

Для перестраховки лучше использовать второй вариант или первый ничем не хуже?
Спасибо.
Синтаксис первого перестраховочного оператора:
DEFINE ($var, [value] )
Так что заносите значение сразу в переменную, раз уж хочется пользоваться DEFINE.


в случае существования переменной не сработает.

А функция SETVAR предназначена для совсем другого, ваша строка setvar($x, 5) скорее всего, выдаст ошибку. Правильно будет setvar("$x", 5). Только вы так не перестрахуетесь, а наоборот, получите, как мне кажется, дополнительные риски поймать какой-нибудь баг.
Точно, у меня было с ошибкой.
Убедили, буду пользоваться проверенным "="  :)

7
ШИКАРНЫЙ (и достаточно простой) симулятор человеческого движения мыши WindMouse.
Адаптировано под Clickermann отсюда: https://ben.land/post/2021/04/25/windmouse-human-mouse-movement/

Менять скорость параметром $m0, скорость ветра $w0, расстояние замедления перед остановкой $d0, гравитацию - $g0

Code: (clickermann) [Select]
// Mouse movement that's affected by gravity and wind physics laws
// https://ben.land/post/2021/04/25/windmouse-human-mouse-movement/
sub(hyp, $A, $B)
    $R1 = round(sqrt($A*$A + $B*$B), 0)
end_sub

sub(min, $A, $B)
    if($A > $B)
        $R1 = $B
    else
        $R1 = $A
    end_if
end_sub

sub(rand, $A, $B, $round)   // если round=1, округляет результат
    $rand = rnd(0, 1000000)
    $rnd = $A + ($B - $A)*$rand/1000000
   
    if($round = 1)
        $rnd = round($rnd, 0)
    end_if
end_sub

sub(mouse_init)
    $SQRT3 = sqrt(3)
    $SQRT5 = sqrt(5)
   
    $cX = $_xmouse
    $cY = $_ymouse
    $mDist = round(dist($cX, $cY, $eX, $eY), 0) + 1
   
    // скорости по осям X и Y
    $vX = 0
    $vY = 0
    $vMag = 0
    $wX = 0
    $wY = 0
    $wMag = 0
    $tMMax = $_time_t + rnd(4,6)
   
    rand(8,9,0)
    $g0 = $rnd     // magnitude of the gravitational force                        (влияет на амплитуду волны)
   
    rand(0,100,0)
    if($rnd < 10)  // в 10% сильный ветер
        rand(2,4,0)
        $w0 = $rnd     // magnitude of the wind force fluctuations                    (влияет на длину волны)
    else
        rand(0.8,2,0)
        $w0 = $rnd
    end_if
   
    rand(15,25,0)
    $m0 = $rnd     // maximum mouse_step size (velocity clip threshold)           (влияет на скорость волны)
   
    rand(2,8,0)
    $d0 = $rnd     // distance where wind behavior changes from random to damped  (влияет на затухание волны)
end_sub

sub(mouse_step)      // считает скорость по осям X и Y, вычисляет координаты следующего шаг
    min($m0, $mDist)
    $m0 = $R1
   
    min($w0, $mDist)    // чтобы не перепрыгнуть цель
    $wMag = $R1
   
    if($mDist > $d0)
        rand(-$wMag, $wMag, 0)
        $wX = $wX / $SQRT3 + $rnd / $SQRT5
       
        rand(-$wMag, $wMag, 0)
        $wY = $wY / $SQRT3 + $rnd / $SQRT5
    else
        $wX = $wX / $SQRT3
        $wY = $wY / $SQRT3
       
        if($m0 < 1)
            $m0 = 1
        else
            if($m0 > 2)    // чтобы замедлиться перед остановкой
                $m0 = $m0 / $SQRT3
            end_if
        end_if
    end_if
   
    // "ветер" и "гравитация" влияют на скорость мыши по осям
    $vX = $vX + $wX + $g0 * ($eX - $cX)/$mDist
    $vY = $vY + $wY + $g0 * ($eY - $cY)/$mDist
    hyp($vX, $vY)
    $vMag = $R1
   
    if($vMag > $m0)    // чтобы не перепрыгнуть цель
        rand(0,$m0,0)
        $vClip = $m0/2 + $rnd/2
        $vX = ($vX/$vMag) * $vClip
       
        rand(0,$m0,0)
        $vClip = $m0/2 + $rnd/2
        $vY = ($vY/$vMag) * $vClip
    end_if
   
    $mX = round($cX + $vX, 0)           // where to move
    min($mX, $_xmax)
    max($R1, 0)
    $mX = $R1
    $mY = round($cY + $vY, 0)
    min($mY, $_ymax)
    max($R1, 0)
    $mY = $R1
   
    if(($cX != $mX) or ($cY != $mY))
        move($mX, $mY)
        $cX = $_xmouse
        $cY = $_ymouse
    end_if
end_sub

sub(wind_mouse, $eX, $eY, $wMin, $wMax)
    mouse_init()
   
    while(($mDist > 2) and ($_time_t < $tMMax))    // разброс вокруг цели <= 3
        mouse_step()
       
        $mDist = round(dist($cX, $cY, $eX, $eY), 0)
    end_cyc
   
    waitms(rnd($wMin,$wMax))
end_sub

Чтобы протестировать, откройте на весь экран Paint, выберите кисть и запустите данный скрипт:
Code: (clickermann) [Select]
sub(move_rand)
    $m_x = rnd(200, $_xmax-200)
    $m_y = rnd(200, $_ymax-200)
    wind_mouse($m_x, $m_y, 500, 1500)
end_sub

move_rand()
lclick($_xmouse, $_ymouse)
waitms(100)
ldown($_xmouse, $_ymouse)

for($rmove = 0, $rmove < 10)
    move_rand()
end_cyc

lup($_xmouse, $_ymouse)

halt()

Если попытаться сдвинуть курсор во время исполнения скрипта, получится интересный узор :)

8
Общие вопросы / Re: define и setvar
« on: March 07, 2022, 03:13:28 AM »
даже инт ересно ст ало от чего, Вы желает е
 перест раховат ься т аким извращённым способом?


от каких-либо неявных багов, очевидно же

9
Общие вопросы / define и setvar
« on: March 05, 2022, 06:06:58 PM »
Привет опять!

Является ли данная строка кода:
Code: (clickermann) [Select]
$x = 5эквивалентной этому:
Code: (clickermann) [Select]
define($x)
setvar($x, 5)

Для перестраховки лучше использовать второй вариант или первый ничем не хуже?
Спасибо.

10
В версии 4.14 массивы копируются очень просто - ARRCONCAT ($arr_in, $arr1, $arr2, ... )

Code: (clickermann) [Select]

sub(locator, $param)
   print(arrsize($name)) // возвращает 1
   print(arrsize($color)) // возвращает 1
   for($i = 0, $i < arrsize($color), $param) // $param = кол-во цветов для одного элемента (1 или 2)
      getscreen()
      contrast(4)
      print("Checking: " , $_xmouse-20, "," , $_ymouse-20 , "," , $_xmouse+20 , "," , $_ymouse+20 , "," , $color[$i])
      if_pixel_in($_xmouse - 20, $_ymouse - 20, $_xmouse + 20, $_ymouse + 20, $color[$i])
         print("Checking: " , $_xmouse-20, "," , $_ymouse-20 , "," , $_xmouse+20 , "," , $_ymouse+20 , "," , $color[$i+$param-1] )
         if_pixel_in($_xmouse - 20, $_ymouse - 20, $_xmouse + 20, $_ymouse + 20, $color[$i+$param-1])
            print("Вижу: ", $name[int($i/$param)])
         end_if
      end_if
      waitms(rnd(200,500))
      print()
      print("----------------------")
      print()
   end_cyc
   
end_sub

print(arrsize($menuN)) // возвращает 5
print(arrsize($menuC)) // возвращает 10

ARRCONCAT ($name, $menuN)   //копируем массивы
ARRCONCAT ($color, $menuC)
locator(2)
undefine($name) //удаляем массивы
undefine($color)
//либо, если в подпрограмме эти массивы будут изменены, то обновляем имеющиеся ранее


Благодарю! 8)

11
Массивы в функцию не передаются, у меня большие подозрения, что они и хранятся не как массивы, а каждый элемент хранится как отдельная переменная.

Массивы не передаются. И нет, они хранятся именно как массивы, не как отдельные переменные. Просто в кликере никто не реализовывал передачу ссылкой, там нигде ссылки не применяются. Обычные аргументы передаются копией. Подозреваю, решение было принято просто на это забить до поры. Массивы копировать - очень долго, при больших массивах и/или частых вызовах подпрограммы, такой подход будет до неприличия медленным и тормозным.

Массивы небольшие, не более 20 элементов, но вызывается достаточно часто. Как оптимально можно обойти копирование?

12
Windows 10, 21H2, Clickermann 4.14.002b

При передаче массивов как аргументов для подпрограммы, последняя видит только первый элемент массива.

У меня где-то ошибка или это функционал кликера?
Как вариант в обход реализовать считку/запись из/в т.н. буфер обмена в виде текстового файла.
Помощь приветствуется)
Массивы в функцию не передаются, у меня большие подозрения, что они и хранятся не как массивы, а каждый элемент хранится как отдельная переменная.

Реализовал задумку так: Записываю массивы в файлы, передаю в подпрограмму названия файлов, считываю массивы из файлов внутри подпрограммы.

Code: (Clickermann) [Select]
   
sub(locator, $n, $c, $param)
    tfreadarr($n, $nam)
    tfreadarr($c, $col)
   
    for($i = 0, $i < arrsize($col), $param)
        getscreen()
        contrast(4)
        if_pixel_in($_xmouse - 20, $_ymouse - 20, $_xmouse + 20, $_ymouse + 20, $col[$i])
            if_pixel_in($_xmouse - 20, $_ymouse - 20, $_xmouse + 20, $_ymouse + 20, $col[$i+$param-1])
                print("Вижу: ", $nam[int($i/$param)])
            end_if
        end_if
        waitms(10)
    end_cyc
end_sub

tfclear("name.txt")
tfclear("color.txt")
tfwritearr("name.txt", $menuN)
tfwritearr("color.txt", $menuC)
locator("name.txt", "color.txt", 2)


Ну и все переменные в кликермане глобальные, может, оно и вообще не надо массивы через параметры передавать? Подпрограмма их и так видит.

menuN и menuC одни из десятка подобных массивов, по которым нужно пробегаться, нужен фунционал работы с разными массивами на выбор, для каждого прописывать свой метод запарюсь)

13
Общие вопросы / Массивы как аргументы в SUB
« on: February 21, 2022, 09:10:06 PM »
Windows 10, 21H2, Clickermann 4.14.002b

При передаче массивов как аргументов для подпрограммы, последняя видит только первый элемент массива.

Code: (clickermann) [Select]
sub(locator, $name, $color, $param)
    print(arrsize($name)) // возвращает 1
    print(arrsize($color)) // возвращает 1
    for($i = 0, $i < arrsize($color), $param) // $param = кол-во цветов для одного элемента (1 или 2)
        getscreen()
        contrast(4)
        print("Checking: " , $_xmouse-20, "," , $_ymouse-20 , "," , $_xmouse+20 , "," , $_ymouse+20 , "," , $color[$i])
        if_pixel_in($_xmouse - 20, $_ymouse - 20, $_xmouse + 20, $_ymouse + 20, $color[$i])
            print("Checking: " , $_xmouse-20, "," , $_ymouse-20 , "," , $_xmouse+20 , "," , $_ymouse+20 , "," , $color[$i+$param-1] )
            if_pixel_in($_xmouse - 20, $_ymouse - 20, $_xmouse + 20, $_ymouse + 20, $color[$i+$param-1])
                print("Вижу: ", $name[int($i/$param)])
            end_if
        end_if
        waitms(rnd(200,500))
        print()
        print("----------------------")
        print()
    end_cyc
end_sub

print(arrsize($menuN)) // возвращает 5
print(arrsize($menuC)) // возвращает 10

locator($menuN, $menuC, 2)

У меня где-то ошибка или это функционал кликера?
Как вариант в обход реализовать считку/запись из/в т.н. буфер обмена в виде текстового файла.
Помощь приветствуется)

Pages: [1]