POE(패스오브엑자일) 물약 자동 먹기 매크로


* 경고 *

해당 포스팅은 교육적인 목적입니다. 절대 악용, 남용 하면 아니되옵니다.

 

2019-06-14 

해당 Post는 Arduino Pro Micro를 사용하여 매크로를 제작 했습니다. 그러나 Only Python 만으로도 가능 하더군요 … Only Python을 원하시는 분은 본 글을 가볍게 읽으신 뒤 아래 링크로 가보시기 바랍니다. 

POE(패스오브엑자일) 물약 자동 먹기 매크로 (소프트웨어)

 

할로 ~! 라이프온룸 입니다. 

저번 포스팅에서 아두이노 프로 마이크로를 이용해서 하드웨어 매크로를 만들어 봤죠 ?? ㅎㅎ

오늘은 그 매크로를 요즘 유행하는 겜인 패스오브엑자일에 적용해 보겠습니다. 

먼저 어떤식으로 동작하는지 설명 드릴게요 ㅎㅎ

1. 어떻게 동작하는가 ? 

  • config.cfg 라는 파일을 만든 뒤 아래와 같이 입력합니다.
[portion_drink_delay]
delay = 0.1

[portion_key]
k_f2 = 1,2,3,4,5
m_right = 5
m_middle = 4

portion_drink_delay 섹션은 하드웨어 매크로가 Key를 여렇개 누를 때 두는 시간차 입니다. 즉 위 경우에 1, 2를 누른다고 치면 1을 누르고 0.1초 기다린 뒤 2를 누르겠다는 의미입니다.

portion_key 섹션에서는 특정 입력에 따라 누를 숫자키를 정의하고 있습니다. 

k_f2 = 1,  2, 3, 4, 5 를 예로 들면 키보드 f2 를 누르면 하드웨어 메크로로 1, 2, 3, 4, 5 키를 누르라는 의미 입니다. 즉 f2를 누르면 1, 2, 3, 4, 5 가 0.1 초 시간 텀으로 입력됩니다. 

k_f2 의 k는 Keyboard 라는 의미이며 m_right의 m은 Mouse 라는 의미입니다. 

키보드의 경우 대부분의 키가 지원 되며 마우스는 left, right, middle 만 동작합니다. 

  • 코드를 관리자 권한으로 실행시킨 뒤 패스오브엑자일을 Play 합니다. 

동작 방법을 알았으니 코드를 보겠습니다.

2. 코드 

저번 Post 에서 serialFunc.py 를 만들었죠 ?? 그 폴더에 drinkPortion.py 라는 파일을 만들고 아래 코드를 입력해 줍니다. 아 그리고 config.cfg 파일도 만들어 주세요 ㅎ

import mouse as mo
import keyboard as keys
import time
import serialFunc as sf
import configparser
import os

try:
    ser = sf.ExternalHID('COM16')
except Exception as e:
    print(e)
    print("Hardware Macro Disabled")

def generateKeyEvent(val, key_s, delay):
    if val == True:
        for outVal in key_s:
            # hardware macro
            ser.keyboardInput(outVal)
            # software macro
            # keys.press(outVal)
            time.sleep(delay)


def drinkPortionWithInput(listDevKeyOutVal, delay=0.001):
    listKeyState = [0] * len(listDevKeyOutVal)

    while True:
        for idx, dictDevVal in enumerate(listDevKeyOutVal):
            keyormo = list(dictDevVal.keys())[0]
            generateKeys = dictDevVal[keyormo].split(',')

            # [0] = k is keyboard [1] = pushed key
            if keyormo.split('_')[0].strip() == 'k':
                value = keys.is_pressed(keyormo.split('_')[1].strip())
                if listKeyState[idx] != value:
                    generateKeyEvent(value, generateKeys, delay)
                    listKeyState[idx] = value

            # [0] = m is mouse [1] = pushed mouse btn
            elif keyormo.split('_')[0].strip() == 'm':
                possList = [mo.LEFT, mo.RIGHT, mo.MIDDLE]
                try:
                    possList.index(keyormo.split('_')[1].strip())
                except Exception as e:
                    continue

                value = mo.is_pressed(keyormo.split('_')[1].strip())

                if listKeyState[idx] != value:
                    generateKeyEvent(value, generateKeys, delay)
                    listKeyState[idx] = value


if __name__=="__main__":
    configFile = os.path.dirname(os.path.realpath(__file__)) + '\\' + 'config.cfg'
    config = configparser.ConfigParser()
    config.read(configFile)

    itemList = []
    for option in config.options('portion_key'):
        itemList.append({option:config['portion_key'][option]})

    drinkDelay = float(config['portion_drink_delay']['delay'])

    print("macro start drink delay  %s " % str(drinkDelay))

    while True:
        time.sleep(0.001)
        drinkPortionWithInput(itemList, drinkDelay)

저의 경우 Pycharm에서 폴더의 구성은 다음과 같은데요 

이런식으로 되어 구성이 되어 있는 상태에서 Pycharm에서 코드를 실행해 줍니다. 

아 참 Pycharm을 관리자 권한으로 실행해줘야 합니다. ~~~~

또 코드를 보면 ExternalHID(‘COM16’) 문구가 있죠 ? 여기서 COM16은 시리얼 포트 번호를 의미합니다. 즉 아두이노 프로 마이크로의 COM port를 사용하면 됩니다. 

그리고 라이브러리도 설치해 줘야해요 ! CMD 에서 아래 명령어로 설치해 주면 됩니다. Pycharm에서도 설치가 가능한거 다 아시죠 ~~~ ㅎㅎ 

pip install keyboard
pip install mouse
pip install configparser

실행을 시키면 아래 문구가 나올거에요 

 

macro start drink delay 0.1

그럼 이 상태에서 POE를 켜고 사냥 중에 마우스 오른쪽 버튼과 F2 번을 눌러보세요 ~~ 그러면 자동으로 물약이 먹어질 겁니다. !!



블로그 구독하기 !!

You may also like...

5 Responses

  1. 양옥석 댓글:

    config.cfg파일은 어디다 어떻게 만드나요?

    • 호그 댓글:

      config.cfg 파일은 drinkPortion.py 파일이 있는 폴더 안에 만들어주심 됩니다. ㅋㅋ 그리고 빈 메모장을 열어서 본문 내용을 복사 한뒤 저장하고 파일이름을 변경하면 됩니다. ㅎ

  2. 슬레이어 댓글:

    오토핫키로 픽셀서치 이용해서 만들면 간단한데.. 이건 상당히 복잡하네요

    • 호그 댓글:

      사실 파이썬은 매크로를 위한 언어는 아니라서 코드가 좀 길어지는 경향이 있는것 같습니다 ㅎㅎ 물론 제가 잘 못짜서 그런 걸수도 있어요 ㅠ

  3. yesohyes 댓글:

    안녕하세요.
    글 여러번 읽어봤는데 잘 이해가 안되서요 이거 하려면 아두이노 프로 마이크로 있어야 하나요?