콘텐츠로 이동

스크립트

개념

이 프로그램에 필요한 최소한의 스크립트 기능을 구현하여 사용합니다. 멀티 로더에서 반복작업을 자동화하기 위해서 자체 구현한 스크립트 기능입니다. 명령어 처리기에서는 아래의 스크립트 명령어들만 처리할 수 있으며 문법을 정확하게 지켜야 동작합니다. 명령어 간에는 콤마(,)로 파라미터 간에는 공백문자(스페이스)로 구분합니다.

지원 명령어

1. 마우스 명령어

click 또는 click [가로좌표] [세로좌표]

현재 위치에서 마우스 왼쪽 버튼을 클릭. 좌표가 지정되면 해당 좌표로 이동 후 클릭

    click 100 50           # 윈도우 창 좌표로 가로, 세로 각각 100, 50 위치를 클릭

좌표 값이 1 이하이면 가로 세로 비율로 계산함

    click 0.5 0.5          # 창의 가운데 위치를 클릭

double_click 또는 double_click [가로좌표] [세로좌표]

마우스 왼쪽 버튼 더블클릭

right_click 또는 right_click [가로좌표] [세로좌표]

마우스 오른쪽 버튼 클릭

move [가로좌표] [세로좌표]

마우스 커서를 주어진 좌표로 이동 click 명령과 마찬가지로 1 이하면 가로 세로의 비율로 계산함

2. 키보드 명령어

send [키]

주어진 키의 키보드 입력을 만듬 일반 문자와 특수키('alt', 'alt gr', 'ctrl', 'left alt', 'left ctrl', 'left shift', 'left windows', 'right alt', 'right ctrl', 'right shift', 'right windows', 'shift', 'windows') 조합, 조합시에는 +(+는 ‘plus’사용)로 조합하며 사용

    send ctrl+v             # 조합키, 컨트롤 키를 누른 채로 v를 입력
    send abcd               # abcd 키보드 입력을 만들어서 보냄
press [키]

주어진 키를 누르고 release 하기 전까지 상태 유지, send는 press + release의 조합임

release [키]

키의 눌려진 상태를 해제

    press ctrl,     
    click 0.5 0.5,          # 컨트롤 키가 눌려진 상태에서 중앙을 클릭
    release ctrl
write [문자열]

주어진 문자열의 키보드 입력을 만듬

    wite abcdefg            # abcdefg 문자열을 입력(공백 미포함)

기타 명령어

copy [문자열]

클립보드에 내용을 저장함

    copy abcd           # abcd를 클립보드에 저장

sleep [초]

지정한 시간(초, 실수) 만큼 멈추었다가 진행함.

    sleep 0.3           # 0.3초간 쉼
    sleep 5             # 5초간 쉼

beep

비프음을 냅니다. (1초)

play

wav 파일을 재생합니다.

loop ~ end / for ~ end
  • 주어진 조건(핸들 리스트)로 end 문까지 반복합니다. 중첩 loop는 지원하지 않습니다.
핸들 리스트 설명
{all_gaems} 모든 게임 목록, {mater_game} : 스크립트를 실행한 게임
{slave_games} {all_games} 에서 {master_game} 게임이 빠진 목록
{slave0} 활성화된 게임에 대응 (이 프로그램 리스트의 계정 목록 순)
    loop {all_games},
        beep,
    end

for ~ end 는 조건 없이 주어진 구간을 반복합니다.

    for 0 9,            # 0 ~ 9 까지 반복
        Beep,
    end

activate

스크립트가 실행 중인 창을 활성화하고 앞으로 가져옵니다.

resize [너비] [높이] 또는 resize [x좌표] [y좌표] [너비] [높이]

창의 크기 또는 위치를 변경합니다.

count [plus] 또는 [minus]

게임 번호를 증가하거나 감소합니다.

execute [스크립트명]

다른 스크립트를 실행합니다. 지정한 스크립트는 사전에 스크립트 관리에서 생성해야 합니다.

        execute my_script   # my_script 스크립트 실행

exec_ahk [스크립트명.ahk] [스크립트에 전달할 파라미터]

AHK 스크립트를 실행합니다. 창 핸들(hwnd)나 게임명, 패스워드 등을 추가 파리미터로 전달할 수 있습니다.

    exec_ahk sample.ahk {all_games} 

sample.ahk 전달되어온 파라미터 창 핸들로 최대화하고 메시지 출력하는 ahk 스크립트

    for n, param in A_Args  ; For each parameter:
    {
        WinMaximize, ahk_id %param%
        WinActivate, ahk_id %param%
        MsgBox Parameter number %n% is %param% is maxmized and activated.
    }

exec_script_file [파일명]

확장자 script인 스크립트 파일을 실행합니다.

    exec_script_file scripts\create.script      # Scripts 폴더에 있는 create.script 스크립트 파일을 실행합니다. 

스크립트 설정

환경설정 → 환경설정 변경 → 스크립트 관리에서 스크립트를 변경하거나 추가, 삭제할 수 있습니다. 내부적으로 사용하는 스크립트는 [System] 으로 시작하고 수정은 가능하지만 삭제할 수 없습니다.

스크립트 설정

스크립트 예제

게임 만들기

    activate,                                   # 현재 게임 클라이언트 활성화
    count plus,                                 # 게임 번호를 하나 증가
    copy {game_name},                           # 게임 이름을 클립보드로 복사, {game_name} 은 스크립트 실행 중 대체됨
    click {create_x} {create_y},                # 대기실의 “게임 생성” 탭 좌표 클릭 {create_x} {create_y} 값은 자동 계산 대체됨
    click {create_title_x} {create_title_y},    # 대기실의 “게임 생성” 탭에서 “게임 이름” 입력창 클릭
    send ctrl+a,                                # 이전 게임 이름을 삭제하기 위해 전체 선택(ctrl+a) 
    send del,                                   # 이전 게임 이름 삭제
    send ctrl+v,                                # 클립보드에 있는 게임 이름을 붙여 넣음 (ctrl+v)
    copy {game_password},                       # 비밀번호를 클립보드로 복사, {game_password}는 스크립트 실행 중 대체됨
    send tab,                                   # 비밀번호 입력창으로 이동 
    send ctrl+a,                                # 이전 비밀번호를 삭제하기 위해 전체 선택(ctrl+a)
    send del,                                   # 이전 패스워드 삭제
    send ctrl+v,                                # 클립보드에 있는 비밀번호를 붙여 넣음 (ctrl+v)
    send enter,                                 # 게임 생성 (enter를 누르면 게임이 생성됨)
    sleep 0.2                                   # 0.2초 대기

대기실

  1. 게임을 생성할 캐릭터를 대기실에 위치시킵니다.
  2. 난이도 선택, 레벨 차이, 친구참가 허용 등 기본적인 설정을 합니다.
  3. 단축키가 설정되어 있으면 ctrl+n, 해당 계정(들)을 선택 후 오른쪽 마우스로 컨텍스트 메뉴를 활성화 한 후에 게임 옵션에서 게임 만들기를 선택합니다. 스크립트 설정
  4. 기능이 정상적으로 동작하면 환경설정 변경게임 정보에 입력한 정보로 게임을 만들게 됩니다. 게임 생성시 게임번호(Count)가 하나씩 증가합니다.
  5. 여러 계정 목록을 선택 후 “게임 생성”을 하는 경우에는 게임번호가 하나씩 증가하면서 별도 게임을 만들게 됩니다. (우버 디아블로용으로 여러 게임을 만드는 경우에 편리)

게임 참가

    activate,                                       # 현재 게임 클라이언트 활성화
    copy {game_name},                               # 게임 이름을 클립보드로 복사, {game_name} 은 스크립트 실행 중 대체됨
    click {join_x} {join_y},                        # 대기실의 “게임 참가” 탭 좌표 클릭 {join_x} {join_y} 값은 자동 계산 대체됨
    click {join_title_x} {join_title_y},            # 대기실의 “게임 참가” 탭에서 “게임 이름” 입력창 클릭
    send ctrl+a,                                    # 이전 게임 이름을 삭제하기 위해 전체 선택(ctrl+a) 
    send del,                                       # 이전 게임 이름 삭제
    send ctrl+v,                                    # 클립보드에 있는 게임 이름을 붙여 넣음 (ctrl+v)
    copy {game_password},                           # 비밀번호를 클립보드로 복사, {game_password}는 스크립트 실행 중 대체됨
    send tab,                                       # 비밀번호 입력창으로 이동
    send ctrl+a,                                    # 이전 비밀번호를 삭제하기 위해 전체 선택(ctrl+a)
    send del,                                       # 이전 패스워드 삭제
    send ctrl+v,                                    # 클립보드에 있는 비밀번호를 붙여 넣음 (ctrl+v), 
    send enter,                                     # 게임 참가
    sleep 0.2                                       # 0.2초 대기
  1. 참가할 게임이 게임 정보로 미리 만들어져 있어야 합니다.
  2. 위에서 게임을 생성한 캐릭터와 다른 캐릭터를 대기실에 위치시킵니다.
  3. 단축키가 설정되어 있으면 ctrl+j, 해당 계정(들)을 선택 후 오른쪽 마우스로 컨텍스트 메뉴를 활성화 한 후에 게임 옵션에서 게임 참가를 선택합니다.
  4. 기능이 정상적으로 동작하면 환경설정 변경게임 정보에 입력한 정보로 입장하게 됩니다.

※ 여러 계정 목록을 선택 후 “게임 참가”하는 경우 현재 “게임 정보”의 게임 하나에 모두 입장하게 됩니다.

게임 나가기

    activate,                               # 현재 게임 클라이언트 활성화
    send space,                             # 캐릭터 상태나 인벤토리 창을 닫음
    send esc,                               # 게임 메뉴 팝업
    sleep 0.1,                              # 0.1초 대기
    click 0.5 0.436,                        # 나가기 버튼 클릭 (비율 좌표)
    sleep 0.2                               # 0.2초 대기
  1. 캐릭터가 게임에 들어와 있는 상태(게임 중)이어야 합니다.
  2. 단축키가 설정되어 있으면 “ctrl+x”, 적용할 계정(들)을 선택 후 오른쪽 마우스로 컨텍스트 메뉴를 활성화 한 후에 게임 옵션에서 게임 나가기를 선택합니다.
  3. 기능이 정상적으로 동작하면 캐릭터는 대기실 화면에 있게 됩니다.

  4. 게임 중에 “게임 나가기”를 두 번 실행하면 캐릭터 선택 화면으로 나가게 됩니다.

레거시 모드로 전환

  1. 캐릭터가 게임에 들어와 있는 상태(게임 중)이어야 합니다. 2
  2. 단축키가 설정되어 있으면 ctrl+l, 계정(들)을 선택 후 오른쪽 마우스로 컨텍스트 메뉴를 활성화 한 후에 게임 옵션에서 레거시 모드로 전환을 선택합니다.

  3. 악마술사의 군림에서는 레거시 모드가 지원되지 않습니다.

자동(auto) 스크립트
    loop {all_games},           # 모든 게임에 대해서 순회
        execute exit,           # 게임 나가기 스크립트 실행
    end,
    loop {master_game},         # 주 게임에 대해서 순회
        execute create,         # 게임 생성 스크립트 실행
    end,
    loop {slave_games},         # 보조 게임들만 순회
        execute join,           # 게임 참가 스크립트 실행
    end,
    sleep 4.5,                  # 참가완료까지 4.5초 대기
    loop {slave_games},         # 보조 게임들만 순회
        execute legacy,         # 레거시 모드로 전환
    end,
    activate {master_game},     # 주 게임 활성화
    beep

위 스크립트는 여러 작업을 자동화 한 것입니다. 하나씩 따라해 봐야 이해가 쉽습니다.

  1. 메인 캐릭터와 서브 캐릭터가 모두 게임에 들어와 있는 상태(게임 중) 이어야 합니다.
  2. 단축키가 설정되어 있으면 ctrl+a, 또는 게임 옵션에서 자동을 선택합니다.
  3. 기능이 정상적으로 동작하면 모든 캐릭터는 새로 만들어진 게임에 들어와 있어야 합니다.

  4. 단축키로 실행 시 활성화된 게임에 계정이 이 메인 캐릭터로 게임을 만들게 됩니다. 컨텍스트 메뉴에서 실행 시에는 클릭한 계정이 메인 캐릭터가 됩니다. 게임 나가기, 게임 만들기, 게임 참가, 레거시 모드로 전환을 반복합니다.