1 (изменено: Kiber, 2023-02-27 03:50:19)

Тема: 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

Обсуждение: Здесь

Post's attachments

kena_V.au3 3.21 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.