[AutoHotkey] 디아블로 이X탈 매크로 만들기
사실 조용히 쓰고 있었고, 다른 사람보다 열심히 쓰진 않았다고 생각하는데 영구정지를 당한김에, 개발 블로그에 AutoHotkey로 매크로를 만드는 법에 대해 안내해보려고 한다. (어찌됐든 AutoHotkey도 개발의 일종이다! 사실 더 많이 쓴 사람은 영정 안시키고, 내가 당해서 열받은 것도 쪼끔있음)
일반 AutoHotkey란, Windows에서 사용되는 Click이라던지 Mouse 이동이라던지 사용자가 GUI 환경에서 손으로 할 수 있는 모든 동작들을 예약된 간단한 명령어를 이용하여 컴퓨터가 동작시킬 수 있도록 하는 것을 의미한다.
그렇기 때문에, 프로그래밍 경험이 없는 사람들도 눈치만 있으면, 간단한 자동 클릭 매크로 정도는 만들 수 있고, 프로그래밍 업계에서 일했던 사람이라면, 창이 완전히 내려가 있는 상태에서도 사람이 누르는 것처럼 만들 수 있다.
기능이 워낙 많기 때문에, 내가 만들었던 로직에 대해 간단히 설명과 주석을 달아둘거고, 그 외 응용은 아래 홈페이지를 참고하면 간단히 업그레이드 할 수 있음
https://www.autohotkey.com/docs/AutoHotkey.htm
본인이 메테오 법사를 했어서, 그거에 특화되게 만들어봤으니 응용해서 쓰길 바라고, 소스 짠 다음에 컴파일은 구글링 조금만 해봐도 아주 쉬워서 따로 안내 안함
Gui, Add, Button, x10 y20 w100 h30 gStart, 시작 ; 창에 시작 버튼 표시하고, 클릭 시 Start: 이후에 명령어를 실행한다.
Gui, Add, Button, x120 y20 w100 h30 gStop, 중지 ; 창에 중지 버튼 표시하고, 클릭 시 Stop: 이후에 명령어를 실행한다.
Gui, Show, w240 h80, Dia ; Gui를 통해 그린 버튼들을 화면에 보여준다. 240*80 크기로
return ; 구문 한 묶음 당 필수 구문이니 넣어주도록 하자.
GuiClose: ; 창 닫았을 때 동작하는 Event
ExitApp ; 난 창 닫았을 때 매크로가 종료되도록 하고 싶어서, 이 구문을 넣었다.
Start: ; 시작 버튼 눌렀을 때 이리로 온다.
Settimer, potion, 60000, On, 1 ; 포션 빠는거 60000ms (60초) 마다 1순위로 실행하게 할거임
Settimer, skill_meteor, 10000, On, 2 ; 메테오는 10초마다 2순위로 실행하게 할거임
Settimer, skill_3, 7000, On, 3 ; 스킬 3번 버튼은 7초마다 3순위로 쓰고 싶어
Loop ; 반복문 : 스킬만 쓰면 캐릭터가 멍하니 서서 스킬만 쓰니까, 0.3초마다 평타 치고 싶어 (난 평타를 z로 설정했는데, 다른 키면 바꿔도 돼)
{
ControlSend,, {shift down}z{shift up}, Diablo Immortal ; 시프트 누르고 z 누르고 시프트 풀어, Diablo Immortal 창 이름을 가진 곳에서
sleep, 300 ; 이 구문이 없으면 컴퓨터가 뻗을 수 있으니, 0.3초 쉬면서 반복하자
}
return ; 이벤트 구문 하위에 넣어주자
Stop: ; 중지 버튼 눌렀을 때 이리로 온다.
Pause ; 모든 동작 중지해
return ; 이벤트 구문 하위에 넣어주기
potion: ; 포션 동작 이벤트 구문
ControlSend,, q, Diablo Immortal ; q를 누를건데, Diablo Immortal 이라는 창에서 누를거야
return ; 이벤트 구문 하위에 넣어주기
skill_meteor: ; 메테오 이벤트 구문
Critical ; 메테오는 동작이 길어서, 이 구문을 넣어주어야 다른 동작에 영향을 받질 않아
ControlSend,, 4, Diablo Immortal ; 4번 버튼에 있는 갑옷 시전해
sleep, 1000 ; 다음에 2번에 넣어둔 메테오 시전할거고, 너무 빨리 누르면 키가 씹히니까 1초 쉬어
ControlSend,, 2, Diablo Immortal ; 2번 버튼에 넣어둔 메테오 시전해
sleep, 1000 ; 마찬가지로 1초 쉬었다가 비전바람 쓸거야
ControlSend,, 1, Diablo Immortal ; 1번에 넣어둔 비전바람으로 메테오 쓴 곳에 불 질러
sleep, 1000 ; 마찬가지로 1초 쉬었다가 비전바람 한 번 더 쓸거야
ControlSend,, 1, Diablo Immortal ; 1번에 넣어둔 비전바람으로 메테오 쓴 곳에 불 질러
return ; 이벤트 구문 하위에 넣어주기
skill_3: ; 이거 번개 파장? 이었나 영정돼서 기억이 안나는데 그 퍼졌다가 돌아오는 스킬이야
ControlSend,, 3, Diablo Immortal ; 3번 버튼 눌러
return ; 이벤트 구문 하위 기억하지?
F8:: ; 매크로 창에 시작 버튼이 있지만, 직접 누르기 귀찮아, F8로 실행 가능하도록 넣은 구문
Goto, Start ; Start: 이후 구문 실행할거야
return ; 이것도 이벤트 구문 하위니까 return 넣자
F9:: ; 중지도 직접 누르기 귀찮아, F9로 실행되도록 넣자
Pause ; 모든 동작 중지, 다시 한 번 누르면 재개
return ; 이벤트 구문 하위
F10:: ; 이거 우리 불멸단이라 금고 가려면 광클 필요해, 그래서 F10누르면 광클되게 해봤어
while GetKeyState("F10", "T") ; F10 누르면 왼쪽 마우스 버튼을 커서 위치에서 0.01초마다 눌러!, 다시 누르면 중지해
{
MouseClick, left
sleep, 10
}
return ; 이벤트 구문 하위야
F12:: ; F12로도 종료할 수 있어
ExitApp
일단 이거 앱 플레이어가 아니고, 배틀넷 런처의 PC 버전에서 비활성화 형태로 동작하지만, 구조상 마우스까지 후킹할 순 없어서, 마우스는 위치해둬야 함
(매크로는 마우스 커서 위치 기준으로 동작한다고 보면 되고, 듀얼 모니터 쓰는 사람은 슬쩍 옆 모니터로 커서 넘기면, 돌리면서 다른 거 할 수 있음, 비활성 윈도우 이벤트의 묘미)
퍼갈땐 꼭 댓글로 출처 명시해주길 바라고, 궁금한 점은 댓글 달아주면 확인 가능한 시간에 답변 드림