Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: hrytsea on February 21, 2022, 09:10:06 PM
-
Windows 10, 21H2, Clickermann 4.14.002b
При передаче массивов как аргументов для подпрограммы, последняя видит только первый элемент массива.
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)
У меня где-то ошибка или это функционал кликера?
Как вариант в обход реализовать считку/запись из/в т.н. буфер обмена в виде текстового файла.
Помощь приветствуется)
-
Windows 10, 21H2, Clickermann 4.14.002b
При передаче массивов как аргументов для подпрограммы, последняя видит только первый элемент массива.
У меня где-то ошибка или это функционал кликера?
Как вариант в обход реализовать считку/запись из/в т.н. буфер обмена в виде текстового файла.
Помощь приветствуется)
Массивы в функцию не передаются, у меня большие подозрения, что они и хранятся не как массивы, а каждый элемент хранится как отдельная переменная.
С буфером обмена кликерман работает, см. TOCLIP и FROMCLIP. Есть некоторые траблы, но в целом работает.
В твоём случае я бы посмотрел на STRSEPARATE, обратной к ней функции почему-то нет, но она легко реализуется. Если, конечно, массивы не очень большие.
Ну и все переменные в кликермане глобальные, может, оно и вообще не надо массивы через параметры передавать? Подпрограмма их и так видит.
-
Windows 10, 21H2, Clickermann 4.14.002b
При передаче массивов как аргументов для подпрограммы, последняя видит только первый элемент массива.
У меня где-то ошибка или это функционал кликера?
Как вариант в обход реализовать считку/запись из/в т.н. буфер обмена в виде текстового файла.
Помощь приветствуется)
Массивы в функцию не передаются, у меня большие подозрения, что они и хранятся не как массивы, а каждый элемент хранится как отдельная переменная.
Реализовал задумку так: Записываю массивы в файлы, передаю в подпрограмму названия файлов, считываю массивы из файлов внутри подпрограммы.
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 одни из десятка подобных массивов, по которым нужно пробегаться, нужен фунционал работы с разными массивами на выбор, для каждого прописывать свой метод запарюсь)
-
Массивы в функцию не передаются, у меня большие подозрения, что они и хранятся не как массивы, а каждый элемент хранится как отдельная переменная.
Массивы не передаются. И нет, они хранятся именно как массивы, не как отдельные переменные. Просто в кликере никто не реализовывал передачу ссылкой, там нигде ссылки не применяются. Обычные аргументы передаются копией. Подозреваю, решение было принято просто на это забить до поры. Массивы копировать - очень долго, при больших массивах и/или частых вызовах подпрограммы, такой подход будет до неприличия медленным и тормозным.
-
Массивы в функцию не передаются, у меня большие подозрения, что они и хранятся не как массивы, а каждый элемент хранится как отдельная переменная.
Массивы не передаются. И нет, они хранятся именно как массивы, не как отдельные переменные. Просто в кликере никто не реализовывал передачу ссылкой, там нигде ссылки не применяются. Обычные аргументы передаются копией. Подозреваю, решение было принято просто на это забить до поры. Массивы копировать - очень долго, при больших массивах и/или частых вызовах подпрограммы, такой подход будет до неприличия медленным и тормозным.
Массивы небольшие, не более 20 элементов, но вызывается достаточно часто. Как оптимально можно обойти копирование?
-
В версии 4.14 массивы копируются очень просто - ARRCONCAT ($arr_in, $arr1, $arr2, ... )
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)
//либо, если в подпрограмме эти массивы будут изменены, то обновляем имеющиеся ранее
-
В версии 4.14 массивы копируются очень просто - ARRCONCAT ($arr_in, $arr1, $arr2, ... )
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)