Автокликер Clickermann :: Форум
Основной раздел => Использование => Topic started by: ZMAN on September 20, 2017, 03:56:42 PM
-
Всем привет. Не могу сообразить как интегрировать схему вкл./выкл. Первое нажатие кнопки для запуска цикла, а второе для его остановки. Первая часть худо-бедно работает :D
IF (ISKEYDOWN(#p)=1)
start:
waitms(rnd(1711,2102))
keyDown(#v)
waitms(rnd(73,121))
keyUp(#v)
END_IF
GOTO (start)
-
Как то так
// поток с кликами
THREAD(cl, 0)
keyDown(#v)
waitms(rnd(73, 121))
keyUp(#v)
waitms(rnd(1711, 2102))
END_THREAD
// переключатель
IF(ISKEYDOWN(#p) = 1)
$run = $run ^ 1
IF($run = 0)
SETTHREAD(cl, 2)
waitms(20)
IF(ISKEYDOWN(#v) = 1)
keyUp(#v)
END_IF
ELSE
SETTHREAD(cl, 1)
END_IF
WHILE(ISKEYDOWN(#p) = 1)
waitms(20)
END_CYC
END_IF
waitms(30)
-
полет нормальный. следующий этап для меня, это добавить схожий сценарий на другую кнопку, в принципе могу использовать как шаблон? или нужны будут иные переменные?
-
Переменные другие $run и другое имя потока. Всё.
-
спасибо! :)
-
Можете смеяться, а можете поплакать, я тут сел немножечко покакать :D
Переменные и имя потока видимо иначе пишутся)
// поток 1
THREAD(cl, 0)
keyDown(#v)
waitms(rnd(73, 121))
keyUp(#v)
waitms(rnd(1711, 2102))
END_THREAD
// переключптель 1
IF(ISKEYDOWN(#p) = 1)
$run = $run ^ 1
IF($run = 0)
SETTHREAD(cl, 2)
waitms(20)
IF(ISKEYDOWN(#v) = 1)
keyUp(#v)
END_IF
ELSE
SETTHREAD(cl, 1)
END_IF
WHILE(ISKEYDOWN(#p) = 1)
waitms(20)
END_CYC
END_IF
waitms(30)
////////////////////////////////////////////////////////////////////////
// поток 2
THREAD(cl, 3)
waitms(rnd(262,373))
keyDown(#d)
waitms(rnd(262,373))
move(1027,73)
waitms(rnd(262,373))
DBLCLICK(1027,73)
waitms(rnd(262,373))
keyUp(#d)
waitms(rnd(4325,5046))
END_THREAD
// переключатель 2
IF(ISKEYDOWN(#o) = 1)
$run = $run ^ 4
IF($run = 3)
SETTHREAD(cl, 5)
waitms(20)
IF(ISKEYDOWN(#o) = 1)
keyUp(#o)
END_IF
ELSE
SETTHREAD(cl, 4)
END_IF
WHILE(ISKEYDOWN(#o) = 1)
waitms(20)
END_CYC
END_IF
waitms(30)
-
Переменные и имя потока видимо иначе пишутся)
да, ты прав, там у тебя полная ерунда.
давай я тебе прокоментирую скрипт vinta, и далее ты сам попробуешь написать заново.
// поток с кликами
THREAD(cl, 0) //имя потока "cl". 0 - это начальное состояние, где 1 - означает рабочее, 0 - приостановленное; необязательный параметр, значение по умолчанию - 1
//твои действия во время работы потока
keyDown(#v)
waitms(rnd(73, 121))
keyUp(#v)
waitms(rnd(1711, 2102))
END_THREAD
// переключатель
IF(ISKEYDOWN(#p) = 1) //условие, проверяет нажата ли кнопка. в этом случае P . если зажато, то начинаем делать то , что внутри условия. иначе пропускаем его.
$run = $run ^ 1 //переключатель. при каждом последующем проходе, переменная $run будет менять значение. чередовать то 0, то 1, опять 0, и так далее. как работает этот значек ^, тебе знать пока не обязательно.
IF($run = 0) //если при нажатии на P переменная $run переключиться на значение 0, то сработает условие.
SETTHREAD(cl, 2) // ставим поток на паузу, вернее стоп. 2 - поток ставится на паузу, при этом при повторной его активации он начинает выполняться с начала, независимо от того, на каком этапе он был остановлен
waitms(20)
IF(ISKEYDOWN(#v) = 1) //если в работающем потоке вдруг в этот момент зажата кнопка V, то отпускаем ее.
keyUp(#v)
END_IF
ELSE //если $run = 1
SETTHREAD(cl, 1) //1 - поток продолжает выполнение с места, где был остановлен
END_IF
WHILE(ISKEYDOWN(#p) = 1) //цикл ожидания, пока кнопка P зажата. ожидание пока ты ее не отпустишь. твое кратковременное нажатие на кнопку для кликера довольно долгое.
waitms(20)
END_CYC
END_IF
waitms(30)
но проще было посмотреть в справке. там все подробно и понятно расписано.
еще немножко интересного из справки:
THREAD (thread_name, [init_state]) ... END_THREAD - описывает дочерний поток
Параметры:
thread_name - имя потока, может быть любым.
init_state - начальное состояние, где 1 - означает рабочее, 0 - приостановленное; необязательный параметр, значение по умолчанию - 1
SetThread (thread_name, state) - меняет состояние дочернего потока
Параметры:
thread_name - имя потока
state - задаваемое состояние
Значения state:
0 - поток ставится на паузу
1 - поток продолжает выполнение с места, где был остановлен
2 - поток ставится на паузу, при этом при повторной его активации он начинает выполняться с начала, независимо от того, на каком этапе он был остановлен
ну и немного о переменных:[spoiler]Как вы знаете со школы, переменные это такие ячейки памяти, которые содержат какое либо значение, при этом оно может туда помещаться и оттуда извлекаться.
Данная программа так же поддерживает переменные. Они могут содержать в себе числа (целые и с точкой) и строки. Переменные могут участвовать в вычислениях, передаваться в качестве параметров для функций и процедур. Даже если у вас не было в школе информатики, из математики вы прекрасно научились обращаться с переменными.
Имена для переменных могут содержать буквы латинского алфавита, цифры и знак "_" (нижнее подчеркивание). При этом перед именем обязательно должен идти префикс "$", а само имя не должно начинаться с цифры. К примеру, "$my_var1" - вполне допустимое имя для переменной.
Использование переменных предельно простое. Вы просто вместо числовой константы (числа) подставляете переменную. То есть если было "lclick(10, 10)", то станет "lclick(10, $var)". [/spoiler]
-
за комментарии отдельное спасибо! я как падаван пытаюсь обуздать этот язык, даже мультиязык :D
-
сменил имена и этого как оказалось достаточно. конфликтов не обнаружено.
// поток 1
THREAD(cl, 0)
keyDown(#v)
waitms(rnd(73, 121))
keyUp(#v)
waitms(rnd(1711, 2102))
END_THREAD
// переключптель 1
IF(ISKEYDOWN(#p) = 1)
$run = $run ^ 1
IF($run = 0)
SETTHREAD(cl, 2)
waitms(20)
IF(ISKEYDOWN(#v) = 1)
keyUp(#v)
END_IF
ELSE
SETTHREAD(cl, 1)
END_IF
WHILE(ISKEYDOWN(#p) = 1)
waitms(20)
END_CYC
END_IF
waitms(30)
////////////////////////////////////////////////////////////////////////
// поток 2
THREAD(cll, 0)
waitms(rnd(262,373))
keyDown(#d)
waitms(rnd(262,373))
move(1027,73)
waitms(rnd(262,373))
DBLCLICK(1027,73)
waitms(rnd(262,373))
keyUp(#d)
waitms(rnd(4325,5046))
END_THREAD
// переключатель 2
IF(ISKEYDOWN(#o) = 1)
$run = $run ^ 1
IF($run = 0)
SETTHREAD(cll,2)
waitms(20)
IF(ISKEYDOWN(#o) = 1)
keyUp(#o)
END_IF
ELSE
SETTHREAD(cll, 1)
END_IF
WHILE(ISKEYDOWN(#o) = 1)
waitms(20)
END_CYC
END_IF
waitms(30)
-
есть недочеты.
1. ты несовсем понял смысл отпускания кнопки, которая может остаться зажатой в потоке.
IF(ISKEYDOWN(#o) = 1)
$run = $run ^ 1
IF($run = 0)
SETTHREAD(cll,2)
waitms(20)
IF(ISKEYDOWN(#D) = 1) // отпускаем ту кнопку, которая может остаться зажатой в потоке после его остоновки.
keyUp(#D)
END_IF
ELSE
SETTHREAD(cll, 1)
END_IF
WHILE(ISKEYDOWN(#o) = 1)
waitms(20)
END_CYC
END_IF
2. в твоем варианте неразбериха с переключением потоков изза одинаковой переменной в переключателях $run. у тебя работает как то так - к примеру включаешь первый поток, если его не выключить, и попытаться включить второй, то он с первого раза не сработает, только со второго. примерно тоже будет в обратном порядке .... кароче фигня будет непонятная.
независимое переключение потоков:
// переключатель 1
IF(ISKEYDOWN(#p) = 1)
$run_1 = $run_1 ^ 1
IF($run_1 = 0)
SETTHREAD(cl, 2)
waitms(20)
IF(ISKEYDOWN(#v) = 1)
keyUp(#v)
END_IF
ELSE
SETTHREAD(cl, 1)
END_IF
WHILE(ISKEYDOWN(#p) = 1)
waitms(20)
END_CYC
END_IF
// переключатель 2
IF(ISKEYDOWN(#o) = 1)
$run_2 = $run_2 ^ 1
IF($run_2 = 0)
SETTHREAD(cll,2)
waitms(20)
IF(ISKEYDOWN(#d) = 1)
keyUp(#d)
END_IF
ELSE
SETTHREAD(cll, 1)
END_IF
WHILE(ISKEYDOWN(#o) = 1)
waitms(20)
END_CYC
END_IF
waitms(30)
-
признаю, не понимаю пока смысла отпускания кнопки. а включение двух потоков одновременно в планах не было, но в очередной раз благодарю. в принципе интуитивно думал об этом, когда Vint давал вектор.