Автокликер Clickermann :: Форум
Основной раздел => Предложения => Topic started by: EGGGOOSE on July 12, 2019, 12:46:06 PM
-
Когда я только начал, я вообще не понял - почему этого метода не имеется в наличии?
Как мне кажется его присутствие вполне закономерно, логично и интуитивно понятно. Почему я, чтобы написать обычный переключатель (включение/выключение чего-либо(скрипта)), должен лезть в дебри этого кликерманна, думать над многопоточностью и другой ерундистикой.
К слову о ерундистике, так как если и введут эту фичу, то довольно-таки нескоро, то уж извольте, пожалуйста, форумчане, помочь мне с возникшей трудностью.
Пишу я скрипт для пвп в игре майнкрафт))) В новой версии игры, максимальный урон оружие наносит, только после небольшого кулдауна - приблизительно 550мс. В идеале скрипт должен работать так: нажал я кнопку "V" на клавиатуре, скрипт включился, и если я зажимаю ЛКМ, то скрипт жмет на ЛКМ раз в 550мс, если отпускаю, то ничего не делает. Повторное нажатие "V" останавливает скрипт. Не знаю реализуема ли вообще фишка с тем, чтобы просто зажать кнопку мыши, но если нет,
то мне достаточно будет того, что если я нажму "V" скрипт прожимал ЛКМ раз в 550мс. Собственно, что я и пытался реализовать.
THREAD(t)
IF(iskeydown(#V) = 1)
WHILE(iskeydown(#V) = 1)
END_CYC
IF(iskeydown(#V) = 0)
$a = 1
END_IF
// включение
If(iskeydown(#V) = 1)
$a = 0
// выключение
END_IF
ELSE
END_IF
END_THREAD
If($a = 1)
lclick($_xmouse, $_ymouse)
WAITMS(500)
End_If
Когда запускаешь мою писанину, то кликерманн просто зависает. Скорее всего из-за While в начале, хотя фиг его знает. Этот While нужен был для того, чтобы тред не закончился сразу же как начался, ведь, когда выполняется проверка на нажатость кнопки, сразу за ней идет еще одна проверка зажатости этой кнопки. Сейчас я проверил, и поставил вместо While KeyUp(#V), и все равно кликерманн завис намертво. Так что проблема, думаю, не в While.
-
Если кто-нибудь мне пояснит, как можно реализовать этот переключатель, то думаю, что надобность в KeyPressed() отпадает.
-
после нажатия клавиши V, ваш скрипт каждые полсекунды начинает кликать в место нахождения курсора и повторными нажатиями он не останавливается, только выключением программы.
Ничего он не кликает. Просто зависает программа. Закрывается только через диспетчер.
-
Если кто-нибудь мне пояснит, как можно реализовать этот переключатель, то думаю, что надобность в KeyPressed() отпадает.
Извините-конечно но в вашем сообщении сплошной сумбур.
Может, Вы как-то коротко перефразируете свою задачу, без эмоций и вас можно будет понять?
Если вы про IsKeyPressed, то я хочу чтобы был такой метод, который выводил 1, в момент, когда клавиша была нажата(предварительно опущена, а после поднята), и выводил 0, во всех остальных случаях.
Если вы про мой скрипт, то я хочу, чтобы при нажатии кнопки запускался скрипт:
lclick($_xmouse, $_ymouse)
WAITMS(550)
При повтороном, скрипт выключался, и ждал, пока его снова вызовут.
-
Метод над чем? у нас даже пользовательских функций нет)
-
подпрограмма, процедура, но точно не функция
-
Функции можно использовать в условных операторах, в операторе присвоения и т.д. и т.п Если функция не может вернуть своё значение, то уже по определению не функция
-
Там примеры сильно и слабо типизированных языков, функции которых могут быть типа Void. Еще я заметил пример на Visual Basic с оператором SUB, который является процедурой. Да и вообще, какой смысл в ссылках как контр аргументах? Нужно было читать до того как вступал в диспут.
-
Обычно ссылки дают в качестве сопровождения или подтверждения к высказанному мнению в одном сообщении.
Хоть я и не уповаю на авторитетные источники, вот тебе цитата с твоей ссылки.
Функции, которые возвращают пустое значение, часто называют процедурами.
Но как я сказал выше, там примеры типизированных языков, которые могут принимать разные типы возвращаемых значений. SUB в кликере подобен Visual basic"y, но Visual basic имеет оператор Function, который возвращает значение через оператор Return. В принципе всё, Я тоже закончил. :)
-
Я и не подумал, что количество аргументов важнее содержания. :D
Прежде всего я хотел сказать, что использование глобальной переменной внутри SUB не сопоставимо оператору Return.
-
Как раз таки важно, в этом и есть различие функций и процедур, но как когда то сказал мой брат, чего не дано, значит того и не надо)
-
// 12.07.2019
#name "управление"
THREAD(t,1)
IF(iskeydown(#V) = 1)
LOGWRITE ("нажато")
WHILE(iskeydown(#V) = 1)
WAITMS(10)
END_CYC
If($a = 0)
LOGWRITE ("запущено")
$a = 1 // включение
ELSE
LOGWRITE ("отключено")
$a = 0 // выключение
END_IF
END_IF
WAITMS(10)
END_THREAD
If($a = 1)
lclick($_xmouse, $_ymouse)
WAITMS(500)
End_If
удачи в minecraft
Поправьте если не прав. Клавиша нажата и отпущена, идет проверка: если $а = 0, то $а = 1, но так как $а еще не было присвоено, то выполняется else - $a = 0. waitms(10)(кстати для чего он нужен здесь?), и первый цикл потока окончен, начинается новый: проверка на нажатие клавиши не проходит, ведь клавиша уже отпущена,(ведь в предыдущем ходе цикла while(iskeydown(#V) = 1), дожидался пока её отпустят) так как должен запуститься основной скрипт,
If($a = 1)
lclick($_xmouse, $_ymouse)
WAITMS(500)
End_If
если уже после первого нажатия он должен начаться, а $a все еще = 0. Наверное я что-то не так понимаю, распишите подробнее, потому что ваш код правда работает, но я не понимаю - как?
-
// 12.07.2019
#name "управление"
THREAD(t,1)
IF(iskeydown(#V) = 1)
LOGWRITE ("нажато")
WHILE(iskeydown(#V) = 1)
WAITMS(10)
END_CYC
If($a = 0)
LOGWRITE ("запущено")
$a = 1 // включение
ELSE
LOGWRITE ("отключено")
$a = 0 // выключение
END_IF
END_IF
WAITMS(10)
END_THREAD
If($a = 1)
lclick($_xmouse, $_ymouse)
WAITMS(500)
End_If
удачи в minecraft
Кстати, этот код, при выполнении нагружает процессор аж до 30%, тогда как этот:
THREAD(t,0)
LCLICK($_xmouse, $_ymouse)
WAITMS(500)
END_THREAD
IF(iskeydown(#V) = 1)
WHILE(iskeydown(#V) = 1)
END_CYC
IF($t = 0)
BEEP(2000,200) // звуковой сигнал
$t = $t^1 // включение
SETTHREAD (t, 1)
ELSE
BEEP(1000,200)
$t = $t^1 // выключение
SETTHREAD (t, 2)
END_IF
END_IF
WAITMS(20)
всего на полтора процента! С чем это связано?
-
Кстати, этот код, при выполнении нагружает процессор аж до 30%, тогда как этот:..
всего на полтора процента! С чем это связано?
В коде не должно быть пустых циклов или пустых потоков. На пустом нагрузка поднимается до 25-30%.
Самый первый твой код содержит пустой while с ожиданием отпускания кнопки. Там нужно вставить минимальную задержку.
В этом коде из вопроса, внешний поток (main) содержит условие и задержки только внутри. При a=0 внутрь условия не заходим и получается пустой цикл. Нужно добавить задержку или вне условия или блоком ELSE.
-
Как много текста ... ??? (я все прочитать не осилил, может что и пропустил) А в справку кликермана кто-нибудь глянул?
"Что такое процедуры вы уже знаете (см. Пример #1). Типичная процедура это lclick(x, y). Где lclick - это имя процедуры, а в скобках указаны ее параметры: x и y.
Функции, как и процедуры, так же имеют свои собственные имена и набор параметров. При этом, функция, по аналогии с переменной, возвращает свое значение в то место, где она была вызвана." И, как по мне, это самое главное отличие нашей продпрограммы SAB от функции.
-
Дискуссия явно зашла не в ту степь. Автор топика не смог внятно объяснить, что он хочет. А ведь рациональное зерно в его идее есть. Нужен аналог "Press any key". Я предлагаю Джонни в следующем релизе в функцию ISKEYDOWN внести маленькое изменение: ISKEYDOWN(0) возвращает 1 если в момент вызова функции зажата любая клавиша или кнопка мыши и 0 - если все отпущены.
Конечно, "Press any key" легко осуществить через GETKEYSDOWN. Но скорость реагирования на порядок меньше. Массивы уступают по скорости прямым функциям. Пример:
GETKEYSDOWN($presskey)
WHILE($presskey=0)
GETKEYSDOWN($presskey)
..... // исполняемый скрипт
WAIT(.05)
END_CYC