[중급] [v1.1] Hotkey 1개로 자동기원 on/off

오호 09.22 02:27 조회 481 댓글 3

 

익숙한 버튼이죠?


꺼져 있을 때 누르면 켜지고

켜져 있을 때 누르면 꺼지고


이런 버튼을 Toggle Button 이라고 합니다.


'켜는 버튼' / '끄튼 버튼' 따로가 아니고

하나로 똑딱똑딱 스위치처럼 on/off 둘 다 할 수 있는 아주 좋은 버튼입니다.


----------------------------------------------------------------

앞 예시에서는 PgUp/PgDn 키 2개로 '자동기원'을 on/off 했습니다.


 

마치 이런 느낌입니다.




이번에는 '자동기원'을 Hotkey 1개만 사용해서 저 위의 토글 버튼처럼 만들어 보려고 합니다.

이를 구현하기 위해서 필요한 것들을 생각해 보겠습니다.


1. 상태 저장

지금 '자동기원'이 'on' 상태인지, 'off' 상태인지를 알고 있어야 합니다.

변수(variable)라는 것에 상태(값)를 저장할 수 있습니다.


'on' 상태를 True

'off' 상태를 False

라고 하겠습니다.


그리고 이 상태는 잠깐 잠깐 필요한 것이 아니고 게임 내내 필요한 상태입니다.

그러므로 값이 없어지지 않는 global variable이라는 것에 저장할 필요가 있습니다.



2. 현재 상태에 따른 동작 구분 

위에서 이야기한 상태라는 것.

그 상태가 무엇인지에 따라 해야 할 동작이 달라집니다.


상태 조건에 따라 다른 동작을 하게 하려면 If / else 구문을 활용할 수 있습니다.



if 조건 {
    < 조건이 참일 때 수행할 동작>
} else {
    < 조건이 참이 아닐 (거짓일 때) 수행할 동작 >
}
 


이 2가지를 활용해 자동기원을 토글하도록 해보겠습니다.






[v1.1]

#Requires AutoHotkey v1.1

#NoEnv
#SingleInstance, Force

; ------- Global variables ( 맨 위에 선언해주세요 )
isHealing := False ; 자동기원 중인지 여부 저장,
                   ; 처음엔 자동기원 off 상태이므로 False 할당
                   ; 자동기원 on 되면 True값 할당 해야 함
; ------------------------------------------------

자동기원() {
    SendInput {5}
    return
}
ToggleHeal() {
    global isHealing            ; global 변수인 isHealing을 사용하겠다는 의미
    if isHealing {              ; 지금이 자동기원 중이면
        SetTimer, 자동기원, Off  ; 자동기원 중지
    } else {                    ; 자동기원 하고 있지 않으면
        SetTimer, 자동기원, 140  ; 자동기원 반복
    }
    isHealing := !isHealing     ; 자동기원 상태 반전
    return
}
#IfWinActive ahk_class Nexon.NWind ; 바람의나라 창이 활성화 상태일 때만
NumPad5::ToggleHeal() ; NumPad5 Key 누르면 on/off 반전됨
#IfWinActive
 





서로 다른 2개의 hotkey로 on/off 하지 않고

위와 같이 변수를 활용하여 1개의 hotkey로 토글하면 편리하기도 하고

다른 마법 hotkey를 지정할 여유가 늘어납니다.


그리고 isHealing 변수가 가지고 있는 상태를 다른 곳에서 활용할 수도 있습니다.




([v1.1] 만 설명하는 이유는 [v2.0]에서는 다른 방법을 사용하려고 합니다.)


댓글 3
뽀리 09.25 00:23
최고!!
인페르노 09.28 12:58
항상 잘보고있습니다 감사합니다
gjk11004 11.20 10:54
안녕하세요 혹시 v2.0 방법은 따로 업로드 해주실 계획이신가요??