Author Topic: Доработка сценария  (Read 2790 times)

0 Members and 1 Guest are viewing this topic.

YoFra

  • Зашел в гости
  • *
  • Posts: 1
    • View Profile
Доработка сценария
« on: September 13, 2014, 03:57:30 AM »
Здравствуйте! Прошу Вашей помощи в доработке сценария.
Скрипт используется в игре Counter-Strike 1.6, в его задачу входит мгновенная остановка персонажа при движении. В реальности это выглядит так: зажимаем кнопки W+A и двигаемся по диагонали влево, что бы мгновенно остановить движения персонажа нужно нажать противоположную комбинацию клавиш S+D, тоже самое условие справедливо и для движения по диагонали вправо, а так же для движения в назад.

Суть проблемы:
Скрипт корректно срабатывает, если мы отжимаем первую клавишу D или A, но если первой отжимается W то скрипт не срабатывает.

Code: (clickermann) [Select]
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)
« Last Edit: September 13, 2014, 04:01:14 AM by YoFra »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Доработка сценария
« Reply #1 on: September 13, 2014, 10:23:01 AM »
Code: (clickermann) [Select]
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)
« Last Edit: September 13, 2014, 10:28:23 AM by Oraven »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Доработка сценария
« Reply #2 on: September 16, 2014, 11:37:29 AM »
Не микросекундах а миллисекундах. Одна, три задержки, че за бред?!  :o Кликеру все едино что Константа что 10-ный код что 16-ный код, а вот для человека удобнее константы.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Доработка сценария
« Reply #3 on: September 16, 2014, 04:43:58 PM »
Ну правильно, погрешности суммируются
20 * 5 = 100 мс суммарная погрешность 20 вызовов

1*5 = 5


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Доработка сценария
« Reply #4 on: September 16, 2014, 05:18:08 PM »
НЕнубы об этом прекрасно знают и используют рандом.

Code: (clickermann) [Select]
LDOWN(10,10)
WAITMS(RND(60,120)) // случайная задержка 60-120 мс
LUP(10,10)
WAITMS(RND(100,150)) // случайная задержка 100-150 мс