Тема: AutoIT: (Игра) Kena: Bridge of Spirits: Прыжок + "Лук" (Jump + "Bow")
1. Вешает на клавишу "v" двойной прыжок с замедлением и натягиванием тетивы "лука" (т.е. посоха).
2. Отключается при переключении из окна игры.
Лично для меня решил проблему с тем, что в боях с боссами любой сбой тетивы мог привести к непопаданию в тайминг или лишней тычке.
- Почти перестал психовать когда играл от "лука".
- Перестал беспокоиться что раскрошу любимую клавиатуру.
; Тема на форуме https://forum.script-coding.com/viewtopic.php?id=17616
; Обсуждение https://forum.script-coding.com/viewtopic.php?id=17621
#include <Constants.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
#NoTrayIcon
Opt("TrayOnEventMode", 1)
Opt("TrayMenuMode", 1) ; Default tray menu items (Script Paused/Exit) will not be shown.
TrayCreateItem("")
Local $ExitMenuItem = TrayCreateItem("Exit")
TrayItemSetOnEvent($ExitMenuItem, "ExitHandler")
TraySetState(1) ; Shows the tray icon
TraySetClick(16) ; Only secondary mouse button will show the tray menu.
Local $hDLL = DllOpen("user32.dll")
Local $v_is_pressed = 0
Local $hotkeys_mode_saved = 0
Local $hotkeys_mode_needed = 0
;======== Тело скрипта (выполняется постоянно) ========
While 1
; Каждые 0.4 секунды определяет активно-ли окно "Kena: Bridge of Spirits".
Sleep(400)
If WinActive("Kena: Bridge of Spirits") Then
$hotkeys_mode_needed = 1
Else
$hotkeys_mode_needed = 2
EndIf
If $hotkeys_mode_needed <> $hotkeys_mode_saved Then
$hotkeys_mode_saved = $hotkeys_mode_needed
; Если фокус переключился на окно Ken'ы - переназначает клавишу "v" на двойной прыжок.
If $hotkeys_mode_needed = 1 Then
HotKeySet("{v}", "Jump")
HotKeySet("+{V}", "Nothing")
; Если фокус переключился на другое окно - возвращает стандартную работу клавиши "v" и отжимает Shift.
Else
HotKeySet("{v}")
HotKeySet("+{V}")
; A0 - left SHIFT, A1 - right SHIFT.
If $v_is_pressed or _IsPressed("A0", $hDLL) or _IsPressed("A1", $hDLL) Then
Send("{SHIFTUP}")
EndIf
$v_is_pressed = 0
EndIf
EndIf
WEnd
;======== Обработчик нажатия клавиши "v" в игре ========
Func Jump()
; Если клавиша "v" уже нажата - выход для предтворащения двойного срабатывания скрипта.
if $v_is_pressed Then
Return
EndIf
$v_is_pressed = 1
; Двойное нажатие на пробел, затем зажатие Shift и левой кнопки мыши (прицеливание).
Send("{SPACE down}")
Sleep(10)
Send("{SPACE up}")
Sleep(200)
Send("{SPACE down}")
Sleep(300)
Send("{SHIFTDOWN}")
Sleep(100)
MouseDown($MOUSE_CLICK_LEFT)
; Ожидание отжатия клавиши "v".
While 1
; Код 56 соответствует нажатой клавише "v".
If _IsPressed("56", $hDLL) Then
Sleep(30)
Else
ExitLoop
EndIf
Wend
; Отпускание левой клавиши мыши.
; Код 01 соответствует нажатой левой клавиши мыши.
If _IsPressed("01", $hDLL) Then
MouseUp($MOUSE_CLICK_LEFT)
Sleep(20)
EndIf
; Отпускание Shift и пробела.
Send("{SHIFTUP}")
Send("{SPACE up}")
$v_is_pressed = 0
EndFunc
;======== Обработчик нажатия клавиши "shift+v" в игре ========
Func Nothing()
EndFunc
Func ExitHandler()
Exit(0)
EndFunc
Обсуждение: Здесь