확장팩 팁과 노하우 게시판

전체보기

모바일 상단 메뉴

본문 페이지

[매크로] 여러 캐릭을 한 pc에서 동시 조종하기

니르워프
댓글: 85 개
조회: 33539
추천: 87
2011-11-09 20:50:15

 

Multiboxing for WOW

 

1.개요
mmorpg에서 혼자서 여러 캐릭터을 동시에 조종할 수는 없다. 포커스를 바꿔가며 시간 분배를 적절히하여 환상적인 컨트롤을 할 수 있다손 치더라도 그래봐야 겨우 2캐릭터 조종할 수 있을 것아닌가. 게다가 이렇게 하는 것은 “동시에 컨트롤하는 것”도 아닌 그저 “빨리 번갈아 가면서 컨트롤하기”에 불과하다.
만약 어떤 특별한 상황에서 동일한 목적의 컨트롤이 필요한 캐릭터들이라면, 한 곳의 컨트롤을 다른 곳에 복제하므로서 다수 캐릭터를 동시에 운전할 수가 있다.
하나의 pc(개인컴퓨터)에 동일 게임 프로그램(wow.exe)을 여러 개 띄우고 그 중의 한곳에서만 컨트롤하고, 나머지는 복제된 컨트롤에 의해 자동으로 진행되는 과정을 multiboxing이라 부른다.

 

2.동시 조종의 필요성
 혼자서 여러 캐릭터 조종이 필요한 경우는 퀘스트를 통한 레벨업이다. 특히 자기 계정의 부계정 2개를 만들어, 친구 초대를 하여, 경험치를 3배 얻어 가면서 레벨업(버스 아닌 퀘스트)할 때 동시 조종은 필수다.
동시 조종 없이 똑같은 과정(컨트롤)을 3번 포커스 바꿔가면서 한다면?! 상상만 해도 정신이 아찔하다. 이 이유로 인해 대개의 와우저들은, 버스는 타지만 혼자서 번갈 조종하지는 않을 것이다.
버스는 원할 때 항상 있는 것도 아니고, 요금과 같은 댓가도 지불해야 하기에, 버스 타는 와우저에게도 혼자서 3캐릭터 조종의 필요성은 더 커진다.

 

3.컨트롤 복제의 구체적 의미
 와우저의 생각대로 게임속의 캐릭터를 행동하게 하려면, 와우저는 손을 이용해서 키보드를 누르거나 마우스를 움직여야 한다. 게임 프로그램은 이런 입력을 받아서 캐릭터를 행동한다.
먼저 손을 이용해서 키보드나 마우스를 누르는 행위가 어떻게 게임 프로그램까지 전달되는가를 이해해야 한다. 길면 읽기 부담스러우므로 간단하게 설명해본다.
윈도우 운영체제는 모든 입력을 소프트웨어적인 메시지(message)화한다. 키보드의 특정 키를 누르면 그것은 메시지로 정보화되고, 포커스가 있는 윈도우로 보내어진다. 해당 윈도우는 이 메시지를 디스패칭하여, 어떤 입력이 왔는지 알게 되고, 그것에 맞는 행동을 수행한다. 마우스의 입력도 메시지화되어 전달된다.
 하나의 키보드 메시지는 단 한 곳 즉 포커스가 있는 윈도우로만 보내어진다. 당연하다. 컨트롤을 복제한다라는 것은 한곳으로만 가야 할 키보드 메시지를 여러 군데 보냄을 의미한다.
 방법은 이렇다. 먼저 키보드 메시지를 후킹(Hooking)한다. 후킹을 수행하는 프로그램을 실행하면, 윈도우 운영체제는가 포커스가 있는 윈도우로 키보드 메시지를 보내는 것이 아니라 후킹한 프로그램으로 보낸다. 후킹한 프로그램은 통과/정지등의 기능을 수행할 수 있다. 통과를 하면, 포커스가 있는 윈도우로 메시지를 전달되고, 정지면 전달 안 된다.
 후킹은 키보드 메시지를 먼저 받아 감지를 하지만, Hook chain의 다음 단계로 메시지를 전달한건가 말건가를 결정하지 복제해서 다른 곳에 보내는 것은 아니다. 그래서 두번째 단계가 필요하다.
 키보드 메시지는 반드시 키보드(하드웨어)를 누를 때만 발생하는가? 그렇지 않다. 소프트웨어적으로 임의로 발생시킬 수가 있다. Hooking한 프로그램에서 키보드 메시지를 만들어 내어 다른 윈도우(프로그램)으로 보낸다.
 AutoHotKey는 특정 윈도우로 가는 키보드 메시지를 후킹하고 이 키보드 메시지를 다른 윈도우에 브로드캐스트 하는 기능을 가지고 있다.
[주의] AutoHotKey는 많은 기능을 가지고 있으며, 이 기능은 단지 일부분일 뿐이다. 그러니까 multiboxing만을 위한 프로그램이 아니다. multiboxing을 하기 위해 AutoHotKey의 일부 기능을 이용하는 것이다.

 

4.AutoHotKey다운로드
http://www.autohotkey.com/download/ 에서 AutoHotKey_L 인스톨러를 받아서 설치한다.
 

5.스크립트 생성/편집/실행/종료하는 방법
생성: 파일 익스플로러의 빈공간에서 오른쪽 마우스 버튼 클릭 팝업 메뉴 새로만들기?AutoHotKey Script 선택
편집: 해당 파일에서 오른쪽 마우스 버튼 클릭 팝업 메뉴 Edit Script 선택
실행: 편집하고 저장한 후, 해당 파일을 더블 클릭하면, 스크립트 실행됨, 그리고 taskbar notification area에 이 뫄 script가 보여짐
종료: 종료할 때는 작업 알아 차림지역에서 H아이콘 위에서 마우스 오른쪽 클릭, Exit menu 선택


6.WOW를 위한 스크립트

Wow1.ahk 파일의 내용

==============================================================================
; 1과 2를 브로드캐스트하는 스크립트
;3에서 9까지에 대해서도 설정할려면, 비슷하게 코드를 추가하면 된다. 비슷한 코드가 반복되어 길어지므로 생략

WinGet, wowid, List, 월드 오브 워크래프트

~1::
KeyWait 1, D
WinGet, Active_Window, ID, A
IfWinActive, 월드 오브 워크래프트
{
 Loop, %wowid%
 {
  target_window := wowid%A_index%
  If (Active_Window <> target_window)
  {
   ControlSend,, 1, ahk_id %target_window%
  }
 }
}
Return

~2::
KeyWait 2, D
WinGet, Active_Window, ID, A
IfWinActive, 월드 오브 워크래프트
{
 Loop, %wowid%
 {
  target_window := wowid%A_index%
  If (Active_Window <> target_window)
  {
   ControlSend,, 2, ahk_id %target_window%
  }
 }
}
Return
==============================================================================


[주의] 반드시 wow.exe(와우 클라이언트)를 플레이할 캐릭터 수만큼 먼저 실행한 후, Wow1.ahk를 실행해야 한다. Wow1.ahk 실행 이후에 실행된 wow.exe에 대해서는 후킹이 적용이 되지 않는다.

 

7.매크로
Wow.exe를 3개 띄운 후 각각 W1, W2, W3 부르고, W1을 통해 Multiboxing을 한다고 하자. 이때 W1에서 입력되는 키보드 메시지를 W2와 W3에 동시에 보낸다고 해도, W1과 W2, W3이 같은 행동을 하지는 않는다.
 AutoHotKey는 키스트로크만 브로드캐스팅할 뿐 마우스 메시지를 브로드캐스트 하지 않는다. 설사 마우스 메시지를 브로드캐스트 한다고 해도, W1, W2, W3에서 해당 마우스 포인트에 있는 장면이나 정보는 같지도 않고 일정하지도 않다.
W1에서 몹을 공격할 때는 반드시 마우스 왼쪽이나 오른쪽 버튼을 눌러서 대상을 지정해야 하나 이 컨트롤을 W2와 W3에 전달할 수 없다. 하지만 W1이 공격하는 특정 몹을 선택하고 공격하는 매크로를 W2와 W3에 만들어서 특정키에 할당해두면, 간접적으로 동시 컨트롤이 가능하다.

 

8.구체적인 방법.
W1, W2, W3에 있는 캐릭터를 각각 C1, C2, C3이라 하자.
1번 키를 통해 공격이라는 명령을 하고자 한다면, C1의 1번 키에는 “/시전 화염구” 매크로를 지정하고, C2와 C3에는 “/대상지원 [target=C1] /시전 화염구” 이렇게 지정해두면 된다. C1이 해당 몹을 선택한 후 공격을 하게 한 후, 1번 키를 누르면, C2와 C3은 이 매크로를 실행하여, C1이 공격중인 몹을 공격하게 된다.
루팅은 wow 클라이언트에서 대상과 상호작용하는 key를 동일하게 지정.
퀘스트 완료는 “/script SelectGossipAvailableQuest(1), SelectGossipActiveQuest(1), CompleteQuest(), SelectGossipOption(1), AcceptQuest()” 이렇게 하면 될 듯. 아직 테스트 못해봤음.
자세한건 http://wowprogramming.com/docs/api_categories#gossip 참조


Multiboxing 참조 문서
http://www.wowwiki.com/Multiboxing_software

 

 

 

[QNA]

-----------------------------------------------------
[Q1] 다시내손을 쪽지
-----------------------------------------------------
만약에 5계정을 묶는다면 글에쓰신 6번에있는 wow1.ahk에있는
스크립트에 KeyWait 1, D 이부분의 숫자만 3 4 5 이렇게 바꾸면
되는건가요?
그리고 이렇게 하면 메인계정에있는 단축키 1번을 누르면
나머지 4계정에 있는 단축키 1번이 자동 실행된다는거죠?
만약 그렇다면 메인계정에 있는 단축키 1번부터 0번까지
나머지 계정이 다른 특별한 조치?없이 동작되는건가요?
한번해보면 꽤 재미있을거 같은데 알것같다가도 헷갈려서
작성자분께 쪽지 드립니다 바쁘시더라도 답변부탁합니다
좋은 하루 만드세요^^

[A1]
5계정이든, 10계정이든, 와우를 뛰운 수만큼 AutoHotKey가 자동으로 인식합니다.
다만 AutoHotKey 작동 이후에 띄운 와우는 인식하지 않습니다.
이것은 Hooking의 원리상 이럴 수 밖에 없습니다.
와우를 추가로 더 띄운다면,
트레이에 있는 AutoHotKey 메뉴 Stop/Start하거나 exit후 다시 실행하면 됩니다.
처음에는 귀찮게 보일수 있겠지만, 알고나면 사용법 간단합니다.

Wow1.ahk 스크립트에 있는 Loop, %wowid% 코드의 의미는
인식된 와우 모두에 대해서 처리해라는 의미입니다.

그리고 KeyWait 2, D 에서 2는
복제할 문자키를 즉 키보드(하드웨어)에 있는 2번키 버튼을 의미합니다.

모듈 부분에서 하나의 키에 대해 바꾸어야 할 부분은 3군데입니다.
9번키라면
~9::
KeyWait 9, D
ControlSend,, 9, ahk_id %target_window%
입니다.

1번키 옆에 있는 ` 즉 악센트키는
~VKC0::
KeyWait VKC0, D
ControlSend,,{VKC0}, ahk_id %target_window%

스페이스키는
~Space::
KeyWait Spacce, D
ControlSend,,{Space}, ahk_id %target_window%

이 정도의 키로 충분해보이지만, 먼가 더 많은 키버튼을 사용해야하겠다면,
C:Program Files (x86)AutoHotkey에 있는 도움말 파일 AutoHotkey.chm를 참조하세요.
도움말 파일에서 "Send Keys & Clicks"로 검색하세요.
아래와 같은 키들이 있습니다.

{F1} - {F24}
{!}
{#}
{+}
{^}
{{}
{}}
{Enter}
{Escape} or {Esc}
{Space}
{Tab}
{Backspace} or {BS}
{Delete} or {Del}
{Insert} or {Ins}
{Up}
{Down}
{Left}
{Right}
{Home}
{End}
{PgUp}
{PgDn}

{CapsLock}
{ScrollLock}
{NumLock}

{Control} or {Ctrl}
{LControl} or {LCtrl}
{RControl} or {RCtrl}
{Control Down} or {Ctrl Down}

{Alt}
{LAlt}
{RAlt}
{Alt Down}

{Shift}
{LShift}
{RShift}
{Shift Down}

{LWin}
{RWin}
{LWin Down}
{RWin Down}

{AppsKey}
{Sleep}
{ASC nnnnn}
{U+nnnn}
{vkXX}
{scYYY}
{vkXXscYYY}

{Numpad0} - {Numpad9}
{NumpadDot}
{NumpadEnter}
{NumpadMult}
{NumpadDiv}
{NumpadAdd}
{NumpadSub}

{NumpadDel}
{NumpadIns}
{NumpadClear}
{NumpadUp}
{NumpadDown}
{NumpadLeft}
{NumpadRight}
{NumpadHome}
{NumpadEnd}
{NumpadPgUp}
{NumpadPgDn}

{Browser_Back}
{Browser_Forward}
{Browser_Refresh}
{Browser_Stop}
{Browser_Search}
{Browser_Favorites}
{Browser_Home}
{Volume_Mute}
{Volume_Down}
{Volume_Up}
{Media_Next}
{Media_Prev}
{Media_Stop}
{Media_Play_Pause}
{Launch_Mail}
{Launch_Media}
{Launch_App1}
{Launch_App2}

{PrintScreen}
{CtrlBreak}
{Pause}


가상 키 코드값은
;http://msdn.microsoft.com/en-us/library/ms927178.aspx
에서 확인하세요.

 

 

Wow2.ahk
==========================================================================

; 간략하게 함수화한 것
; 필요없는 키에 대해서는 완전히 지우지 말고 줄의 첫부분에 세미콜론(;)을 삽입하고
; 필요할때 세미콜론을 지우면됨

WinGet, wowid, List, 월드 오브 워크래프트

ClonesPush(strKeys)
{
 global wowid
 KeyWait %strKeys%, D
 WinGet, Active_Window, ID, A
 IfWinActive, 월드 오브 워크래프트
 {
  Loop, %wowid%
  {
   target_window := wowid%A_index%
   If (Active_Window <> target_window)
   {
    ControlSend,, %strKeys%, ahk_id %target_window%
   }
  } 
 }
}

;악센트문자(1옆에 있는 키)
~VKC0::ClonesPush("{VKC0 down}{VKC0 up}")

~1::ClonesPush("{1 down}{1 up}")
~2::ClonesPush("{2 down}{2 up}")
~3::ClonesPush("{3 down}{3 up}")
~4::ClonesPush("{4 down}{4 up}")
~5::ClonesPush("{5 down}{5 up}")
~6::ClonesPush("{6 down}{6 up}")
~7::ClonesPush("{7 down}{7 up}")
~8::ClonesPush("{8 down}{8 up}")
~9::ClonesPush("{9 down}{9 up}")
~0::ClonesPush("{0 down}{0 up}")
~=::ClonesPush("{= down}{= up}")
~-::ClonesPush("{- down}{- up}")

~Space::ClonesPush("{Space down}{Space up}")
~Insert::ClonesPush("{Insert down}{Insert up}")
~PgDn::ClonesPush("{PgDn down}{PgDn up}")
~PgUp::ClonesPush("{PgUp down}{PgUp up}")
~NumpadSub::ClonesPush("{NumpadSub down}{NumpadSub up}")
~NumpadAdd::ClonesPush("{NumpadAdd down}{NumpadAdd up}")
Up::ClonesPush("{Up down}")
Up Up::ClonesPush("{Up up}")
Down::ClonesPush("{Down down}")
Down Up::ClonesPush("{Down up}")
Left::ClonesPush("{Left down}")
Left Up::ClonesPush("{Left up}")
Right::ClonesPush("{Right down}")
Right Up::ClonesPush("{Right up}")
~C::ClonesPush("{C down}{C up}")
~Q::ClonesPush("{Q down}{Q up}")
~T::ClonesPush("{T down}{T up}")

========================================================================== 

Lv3 니르워프

모바일 게시판 하단버튼

댓글

새로고침
새로고침

모바일 게시판 하단버튼

지금 뜨는 인벤

더보기+

모바일 게시판 리스트

모바일 게시판 하단버튼

글쓰기

모바일 게시판 페이징

최근 HOT한 콘텐츠

  • 와우
  • 게임
  • IT
  • 유머
  • 연예
AD