1 (изменено: Aleksey7557, 2017-09-11 14:36:01)

Тема: AHK: При каждом бинде всё заново

Добрый день, нужна помощь в таком деле:

!7::
SendMessage, 0x50,, 0x4190419,, A
Sendinput, {F6}/я закрыл решетку{enter}
SoundPlay, %A_ScriptDir%\Sounds\SoundPlay.wav
KeyWait, RShift, D
sleep 2300
SendMessage, 0x50,, 0x4190419,, A
Sendinput, {F6}/я вышел из участка{enter}
sleep 2300
return

После закрытия решетки скрипт ждёт нажатия правого шифта и только после этого продолжится отыгровка. Но бывает такое, что игрок забывает продолжить или его отвлекли и при новом нажатии Alt+7 ничего не произойдет, скрип как бы ждёт пока игрок продолжит отыгровку, помогает только его перезагрузка. Как сделать так, чтобы при каждом нажатии Alt+7 отыгровка начиналась заново с закрытия решетки, не смотря на то, что скрипт ждал нажатия правого шифта? Заранее благодарен за помощь.

2

Re: AHK: При каждом бинде всё заново

Установить время ожидания для KeyWait, если оно пройдет в Errolevel будет специальная ошибка записана - в справке посмотрите.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

3

Re: AHK: При каждом бинде всё заново

belyankin12, "KeyWait, RShift, D T10" не подходит т.к. спустя 10 секунд автоматом продолжает отыгровку.
Надо некое подобие следующего по смыслу)):

!7::
Reload
SendMessage, 0x50,, 0x4190419,, A

4 (изменено: svoboden, 2017-09-11 17:38:05)

Re: AHK: При каждом бинде всё заново

А что, определить хоткей на "RShift", совесть не позволяет.

5

Re: AHK: При каждом бинде всё заново

KeyWait, RShift, D T10
if ErrorLevel
    ...
else
    ...

6

Re: AHK: При каждом бинде всё заново

если оно пройдет в Errolevel будет специальная ошибка записана - в справке посмотрите.

Делаем проверку по состоянию переменной ErrorLevel.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

7

Re: AHK: При каждом бинде всё заново

!7::
	MsgBox 1
	WaitShift := true
Return

#If WaitShift
RShift::
	WaitShift := false
	MsgBox 2
Return
#If

8 (изменено: Aleksey7557, 2017-09-12 17:04:25)

Re: AHK: При каждом бинде всё заново

stealzy, я не особо шарю прям, вставьте пожалуйста в следующую отыгровку, а я уже не её примере остальные сделаю.
Был бы очень признателен.

!7::
setkeydelay, 0
SendMessage, 0x50,, 0x4190419,, A
Sendinput, {F6}/фд За мной и без глупых фокусов{*}зайдя в участок вместе с преступником{enter}
sleep 2300
Sendinput, {F6}/фд Лицом к стене{*}подведя преступника к КПЗ и открывая решетку{enter}
sleep 2300
Sendinput, {F6}/я завёл преступника в камеру{enter}
SoundPlay, %A_ScriptDir%\Sounds\SoundPlay.wav
KeyWait, RShift, D
sleep 2300
SendMessage, 0x50,, 0x4190419,, A
Sendinput, {F6}/я закрыл решетку{enter}
SoundPlay, %A_ScriptDir%\Sounds\SoundPlay.wav
KeyWait, RShift, D
sleep 2300
SendMessage, 0x50,, 0x4190419,, A
Sendinput, {F6}/я вышел из участка{enter}
sleep 500
Sendinput, {F6}/время{enter}
sleep 2300
return

9 (изменено: stealzy, 2017-09-13 02:58:32)

Re: AHK: При каждом бинде всё заново

KeyWait, RShift, D заменяете на RShift:: и переносите остальное как у меня (вместо MsgBox ставите ваш код).

10 (изменено: svoboden, 2017-09-13 16:57:29)

Re: AHK: При каждом бинде всё заново

Может, имеется в виду на нажатие и удержания скрипт должен реагировать:

1::
Gosub, Up
Loop {
    Sleep, 10
    GetKeyState, state, 1, P
    if state = U
Gosub, Down
}
return

Up:
действие
return

Down:
действие
Exit
return

11 (изменено: Aleksey7557, 2017-09-17 11:28:40)

Re: AHK: При каждом бинде всё заново

stealzy, это то, что надо, но проблема в том, что помимо Alt+7 будут ещё и другие бинды, в отыгровках которых нужно жать RShift для продолжения. Как-то можно вот отдельно в каждый бинд вставить, чтобы Alt+7 ждал RShift, а при повторном нажатии начинал отыгровку заново и Alt+8 ждал RShift соответственно.

12

Re: AHK: При каждом бинде всё заново

Aleksey7557, а в чем проблема? Была одна переменная, станет несколько.
Названия придумать не можете? WaitShift_Alt7, WaitShift_Alt8 — вот, пожалуйста.