Что нового

[Мышь, клавиатура] Отследить нажатие клавиш при работе скрипта автоподнятия лута

borodavka

Новичок
Сообщения
7
Репутация
0
Всем привет. Прошу помощи.
Написал скрипт автоподнятия лута для Stalker-Online.
Он не сложный, так как надо всего лишь быстро жать клавишу Z.
Для запуска скрипта, паузы и выхода были выбраны F6, F7 и F8.

Код:
HotKeySet('{F6}', '_start')
HotKeySet('{F7}', '_pause')
HotKeySet('{F8}', '_exit')

While 1
    sleep(1000*60*60)
WEnd

Func _start ()
    while 1
	Send("{z}")
	Sleep(5);пауза между нажатиями
    WEnd
EndFunc

Func _pause ()
    while 1
        sleep(1000*60*60)
    WEnd
EndFunc

Func _exit ()
    Exit
EndFunc


Собственно вопрос: как сюда добавить условие, чтобы при первом нажатии ENTER скрипт вставал на паузу, а при повторном нажатии продолжал работать. Это нужно для того, чтобы в чате что-то свое написать, а не zzzzzzzzzzzzzzzzz :rofl:.
Еще одно условие - отслеживать нажатие и удержание клавиши SHIFT, если она нажата, то скрипт ставить на паузу. Я подумал и решил вставить такой костыль для того, чтобы при нажатии шифта не падала быстро выносливость, да и все равно игрок ничего не успеет подобрать, когда быстро бежит.

З.Ы. Была еще мысль изменить скрипт так: при нажатии и удержании клавиши w(бег вперед), чтобы быстро нажималась клавиша z.
Собственно сам код, но он не работает. Компилируется, но не работает.
Код:
#include <Misc.au3>

If _IsPressed('{w}') Then
	Send("{z}")
	Sleep(5);пауза между нажатиями
EndIf
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Код:
HotKeySet('{F7}', '_borodavka')
HotKeySet('{F8}', '_exit')

Global $pause = False

While 1
    sleep(1000)
WEnd

Func _borodavka()
	$pause = Not $pause
    while $pause
		Send('{w}')
		Send("{z}")
		Sleep(5)
    WEnd
EndFunc

Func _exit ()
    Exit
EndFunc
 
Автор
B

borodavka

Новичок
Сообщения
7
Репутация
0
C2H5OH, приведенный Вами код скрипта работает так:
в блокноте при нажатии F7 пишет - wzwzwzwzwzwzwzwzwzwzwzwzwzwz..... При нажатии F8 происходит выход.
в игре - при нажатии F7 он дергается вперед и подымает лут(ну тут и так понятно.), потом снова дергается и подымает и т.д.
Мне кажется тут надо отслеживать нажатие при помощи _IsPressed.
Хотя точно не знаю, я тут новичок, до этого писал только на PHP.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Вы так просили, он так и работает
Была еще мысль изменить скрипт так: при нажатии клавиши w(бег вперед), чтобы быстро нажималась клавиша z

Уберите
Код:
Send('{w}')

если он мешает.

Мне кажется тут надо отслеживать нажатие при помощи _IsPressed.
А у Вас руками получится так сделать - зажать w и при этом нажимать z ?
 
Автор
B

borodavka

Новичок
Сообщения
7
Репутация
0
Да, конечно получится удерживая w нажимать многократно(именно многократно, так как простое удержание клавиши z лут не подбирает).

Пардон, нашел цитирование.
C2H5OH УберитеКод: AutoIt [Выделить]Send('{w}')если он мешает.
Убрал, тоже самое, что и первый вариант моего скрипта, только на паузу становится и снимается с паузы при нажатии на F6.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Версия 0.02
Код:
HotKeySet('{F7}', '_borodavka')
HotKeySet('{F8}', '_exit')

Global $pause = False

While 1
    If _IsPressed('{w}') Then Send("{z}")
    Sleep(5);пауза между нажатиями
WEnd

Func _borodavka()
    $pause = Not $pause
    while $pause
        Send("{z}")
        Sleep(5)
    WEnd
EndFunc

Func _exit ()
    Exit
EndFunc



Добавлено:
Сообщение автоматически объединено:

Ну да, это и есть твой скрип, только подправленный, потому что твой с паузы не снимался.
Хочешь початиться - нажми паузу F7, и пиши что хочешь. Отписался - отожми паузу F7.
 
Автор
B

borodavka

Новичок
Сообщения
7
Репутация
0
Я правильно понял, что в начале скрипта, до вызова _IsPressed надо было проинклюдить
#include <Misc.au3> ?
А то без него не хотело компилироваться.
Теперь скрипт работает так: при нажатии F7 в блокноте пишется zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz, а при удержании w - пишет wzzwzwzzwzwzzwzzwzwzzwzwzzwzzwz


Добавлено:
Сообщение автоматически объединено:

Хочешь початиться - нажми паузу F7, и пиши что хочешь. Отписался - отожми паузу F7.
Так в том-то и дело, что можно забыть поставит на паузу, а потом долго тереть zzzzzzzzzzzzzzzzzzzzzzzzzz ;D

Вобщем вот что есть на данный момент:
Код:
HotKeySet('{F7}', '_borodavka')
HotKeySet('{ENTER}', '_borodavka')
HotKeySet('{F8}', '_exit')

Global $pause = False

While 1
    sleep(1000)
WEnd

Func _borodavka()
    $pause = Not $pause
    while $pause
        Send("{z}")
        Sleep(5)
    WEnd
EndFunc

Func _exit ()
    Exit
EndFunc

Включаем игру, нажимаем F7, непрерывно жмется клавиша z, далее жмем ENTER, скрипт перестает жать на z, открывается чат, пишу в чате что-нибудь, нажимаю ENTER, сообщение отправляется, скрипт дальше продолжжает нажимать на z.
Почти идеально, теперь как бы прилепить отслеживание нажатия шифта? Чтобы при нажатии и удержании шифта - скрипт становился на паузу. А при отпускании - снова запускался.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Вот так попробуй
Код:
HotKeySet("{Enter}", "_chat")
Func _chat()
    ; ... временная отмена горячей клавиши
    HotKeySet("{Enter}")
    Send("{Enter}")
    HotKeySet("{Enter}", "_chat")
    $pause = Not $pause  ; откл/вкл лут
EndFunc


С шифтом ничего не понял. А шифт зачем?
 
Автор
B

borodavka

Новичок
Сообщения
7
Репутация
0
Не буду парить мозг лишним, Вы, C2H5OH, мне и так уже помогли.
Вобщем, вариант рабочий и меня устраивающий такой:
Код:
HotKeySet('{F7}', '_borodavka')
HotKeySet('{ENTER}', '_borodavka')
HotKeySet('{F8}', '_exit')

Global $pause = False

While 1
    sleep(1000)
WEnd

Func _borodavka()
    $pause = Not $pause
    while $pause
        Send("{z}")
        Sleep(5)
    WEnd
EndFunc

Func _exit ()
    Exit
EndFunc

Конечно он не идеален, ибо он запускается как по ENTER, так и по F7(можно случайно его запустить нажав ENTER до нажатия F7), но это терпимо. Главное, что после запуска скрипта по F7 - скрипт можно остановить и продолжить ENTERом.
Теперь если подскажете, как сделать, чтобы скрипт вставал на паузу при удержании шифта, а при его отпускании, вновь продолжал работать - то будет вообще идеально.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
вариант рабочий и меня устраивающий такой:
Как "рабочий" ?! :shok:
То есть этот скрипт по нажатию Enter и останавливает лут, и запускает чат ? ? ?
Не может быть!!!!
http://autoit-script.ru/autoit3_docs/functions/HotKeySet.htm
[box]Когда вы устанавливаете горячую клавишу, AutoIt улавливает нажатия клавиш и не передаёт их в активное приложение, за исключением: запирающие клавиши (NumLock, CapsLock и ScrollLock) по прежнему будут переключать своё состояние!
[/box]
 
Автор
B

borodavka

Новичок
Сообщения
7
Репутация
0
и останавливает лут, и запускает чат ? ? ?
Каюсь, грешен, не проверил сразу *не нашел значка стыдно*.
Действительно не запускает чат, просто и та и та клавиша останавливают и запускают скрипт.
Сейчас ковыряю предложенный Вами вариант:
Код:
HotKeySet('{F7}', '_borodavka')
HotKeySet("{Enter}", "_chat")
HotKeySet('{F8}', '_exit')

Global $pause = False

While 1
    sleep(1000)
WEnd

Func _chat()
    ; ... временная отмена горячей клавиши
    HotKeySet("{Enter}")
    Send("{Enter}")
    HotKeySet("{Enter}", "_chat")
    $pause = Not $pause  ; откл/вкл лут
EndFunc

Func _borodavka()
    $pause = Not $pause
    while $pause
        Send("{e}")
        Sleep(50)
    WEnd
EndFunc

Func _exit ()
    Exit
EndFunc


F7 нажимаем - запускается скрипт, нажимаем ENTER запускается чат, пишем туда, снова нажимаем ENTER - сообщение отправляется.
Но скрипт, после написания в чат, придется снова запустить нажатием F7(причем два раза), как это исправить? Чтобы сам запускался после отправления сообщения в чат?
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
А-а-а-а, точно! :laugh:
Переписываем так
Код:
HotKeySet("{Enter}", "_chat")

Global $chat = False

Func _chat()
    HotKeySet("{Enter}")
    Send("{Enter}")
    HotKeySet("{Enter}", "_chat")
    $chat = Not $chat
	While $chat
		Sleep(1000)
	WEnd	
EndFunc

а то, что касается самого лута, не трогаем.
 
Автор
B

borodavka

Новичок
Сообщения
7
Репутация
0
Получается вот что:
Код:
HotKeySet('{F7}', '_borodavka')
HotKeySet("{Enter}", "_chat")
HotKeySet('{F8}', '_exit')

Global $chat = False
Global $pause = False

While 1
    sleep(1000)
WEnd

Func _borodavka()
    $pause = Not $pause
    while $pause
        Send("{z}")
        Sleep(20)
    WEnd
EndFunc

Func _chat()
    HotKeySet("{Enter}")
    Send("{Enter}")
    HotKeySet("{Enter}", "_chat")
    $chat = Not $chat
    While $chat
        Sleep(1000)
    WEnd
EndFunc

Func _exit ()
    Exit
EndFunc



Спасибо, остальное прописал, кроме установки скрипта на паузу при удержании нажатым шифта.
 
Верх