Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: YoFra on September 13, 2014, 03:57:30 AM
-
Здравствуйте! Прошу Вашей помощи в доработке сценария.
Скрипт используется в игре Counter-Strike 1.6, в его задачу входит мгновенная остановка персонажа при движении. В реальности это выглядит так: зажимаем кнопки W+A и двигаемся по диагонали влево, что бы мгновенно остановить движения персонажа нужно нажать противоположную комбинацию клавиш S+D, тоже самое условие справедливо и для движения по диагонали вправо, а так же для движения в назад.
Суть проблемы:
Скрипт корректно срабатывает, если мы отжимаем первую клавишу D или A, но если первой отжимается W то скрипт не срабатывает.
if ((iskeydown(#w)=0))
$x = 0
$key_pressed = 0
END_IF
if ((iskeydown(#w)=1))
if ((iskeydown(#a)=1))
$x = a
END_IF
if ((iskeydown(#a)=0))
if($x = a)
$key_pressed = 1
END_IF
END_IF
if ((iskeydown(#d)=1))
$x = d
END_IF
if ((iskeydown(#d)=0))
if($x = d)
$key_pressed = 1
END_IF
END_IF
END_IF
if($key_pressed = 1)
if(($x = a))
KEYDOWN(#s)
KEYDOWN(#d)
wait(0.13)
KEYUP(#s)
KEYUP(#d)
$key_pressed = 0
$x = 0
END_IF
if(($x = d))
print("w and a presed")
//KEYUP(#w)
KEYDOWN(0x53)
KEYDOWN(0x41)
wait(0.13)
KEYUP(0x53)
KEYUP(0x41)
$key_pressed = 0
$x = 0
END_IF
END_IF
END_IF
wait(0.005)
-
start:
IF(($wa = 0) & ($wd = 0) & ($sa = 0) & ($sd = 0))
WHILE((iskeydown(#W)=1) & (iskeydown(#A)=1))
WAITMS(20)
$wa = 1
END_CYC
END_IF
IF(($wa = 0) & ($wd = 0) & ($sa = 0) & ($sd = 0))
WHILE((iskeydown(#W)=1) & (iskeydown(#D)=1))
WAITMS(20)
$wd = 1
END_CYC
END_IF
IF(($wa = 0) & ($wd = 0) & ($sa = 0) & ($sd = 0))
WHILE((iskeydown(#S)=1) & (iskeydown(#A)=1))
WAITMS(20)
$sa = 1
END_CYC
END_IF
IF(($wa = 0) & ($wd = 0) & ($sa = 0) & ($sd = 0))
WHILE((iskeydown(#S)=1) & (iskeydown(#D)=1))
WAITMS(20)
$sd = 1
END_CYC
END_IF
if($wa = 1)
KEYDOWN(#S)
KEYDOWN(#D)
WAITMS(130)
KEYUP(#D)
KEYUP(#S)
$wa = 0
END_IF
if($wd = 1)
KEYDOWN(#S)
KEYDOWN(#A)
WAITMS(130)
KEYUP(#A)
KEYUP(#S)
$wd = 0
END_IF
if($sa = 1)
KEYDOWN(#W)
KEYDOWN(#D)
WAITMS(130)
KEYUP(#D)
KEYUP(#W)
$sa = 0
END_IF
if($sd = 1)
KEYDOWN(#W)
KEYDOWN(#A)
WAITMS(130)
KEYUP(#A)
KEYUP(#W)
$sd = 0
END_IF
WAITMS(5)
GOTO(start)
-
Не микросекундах а миллисекундах. Одна, три задержки, че за бред?! :o Кликеру все едино что Константа что 10-ный код что 16-ный код, а вот для человека удобнее константы.
-
Ну правильно, погрешности суммируются
20 * 5 = 100 мс суммарная погрешность 20 вызовов
1*5 = 5
-
НЕнубы об этом прекрасно знают и используют рандом.
LDOWN(10,10)
WAITMS(RND(60,120)) // случайная задержка 60-120 мс
LUP(10,10)
WAITMS(RND(100,150)) // случайная задержка 100-150 мс