POE(패스오브엑자일) 물약 자동 먹기 매크로 (소프트웨어)
* 경고 *
해당 포스팅은 교육적인 목적입니다. 절대 악용, 남용 하면 아니되옵니다.
할로 ~! 라이프온룸 입니다.
저번 포스팅에서 하드웨어 메크로를 이용해서 POE 게임 상에서 물약을 먹었죠 ? 이 포스팅에서는 오직 파이썬 만을 이용해서 먹어 보도록 하겠습니다.
1. 새로운 코드
저번 Post drinkPortion.py 라는 파일을 만들었죠 ? 그 코드 대신 아래 코드를 사용합니다. 사실 거의 바뀐건 없습니다. keyEvent 라이브러리를 Import 한 뒤 generateKeyEvent 함수 안에서 ser.keyboardInput 대신 ke.press 함수를 호출해 준 것 밬에 없습니다. keyEvent 라이브러리는 이 코드 다음에 설명이 되어 있습니다. 사실 라이브러리 라고 하기엔 뭐하고 github에 올라온 예제 코드입니다.
아두이노에게 시리얼 통신으로 Keyboard, Mouse 키 발생 명령을 주는 serialFunc.py 파일은 여기서 필요하지 않습니다. 그래서 try 로 처리했습니다. !
import mouse as mo import keyboard as keys import time import configparser import os import keyEvent as ke try: import serialFunc as sf 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 ke.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)
그리고 drinkPortion.py 파일이 있는 폴더에 keyEvent.py 라는 파일을 만들고 아래 URL에 있는 코드를 복붙합니다.
https://gist.github.com/chriskiehl/2906125
복붙한 코드 맨 위에 아래 내용을 적어줍니다.
import win32api import time import win32con
이 라이브러리를 사용하려면 pywin32 라는 라이브러리를 깔아줘야 합니다. 아래 명령으로 깔아 줍니다.
pip install pywin32
작업을 마치셨다면 Pycharm을 관리자 권한으로 실행 시키고 해당 코드를 돌려보세요 그리고 POE에 들어가셔서 우클릭 과 “F2″버튼을 눌러 보시기 바랍니다. 그럼 물약이 먹어질 거에요 !!
+ Python Opencv를 이용해 HP, MP 상태를 보고 물약을 먹는 코드가 완성되었습니다. ㅎㅎ 관심있으신분은 아래 링크를 참조해 주세요 ~!
————————————————————
블로그 구독하기 !!
마우스 모듈이 없다는 에러가 뜨면 어떻게 해야하나요?
라이브러리를 설치해줘야 하는데요 pywin32, keyboard, mouse, configparser 가 필요합니다.
CMD를 열고 가상환경 에서 아래 명령어 치시면 됩니다.
pip install keyboard
pip install mouse
pip install configparser
pip install pywin32
글 잘 봤습니다~ 파이썬 하나도 모르는데 이거 할려고 동영상보면서 헤딩 엄청하고 있습니다. ㅎㅎ
다름이 아니고 저도 마우스 모듈이 없다고 뜨는데 분명히 pip install mouse 명령어로 설치 했는데 계속 없다고 하는건 무엇 때문 일까요? 그리고 관리자 프롬프트 내부에서 동영상 마지막처럼 실행하면 메모장에서는 되는데 인게임은 또 적용이 안되는데 이건 왜그럴까요? ㅎㅎ
좋은정보 그냥 쓰는데 자꾸 질문드려서 마음이 무겁지만 우선 너무 편해 보여서 안물어 볼 수가 없네여 ㅠㅠ
수고가 많으십니다 ㅎㅎ
관리자 프롬프트 내부에서 pip freeze 라고 쳐보세요 ! 그럼 아래 라이브러리들이 나와야 합니다.
configparser==3.7.4
keyboard==0.13.3
mouse==0.7.0
pywin32==224
그리고 python drinkPortion.py 하시면 문구가 아래처럼 나오나요 ?
No module named ‘serial’
Hardware Macro Disabled
macro start drink delay 0.1
이렇게 나오면 일단 정상입니다.
인게임에서 안되신다면 config.cfg 파일의 portion_drink_delay 섹션의 delay값을 좀 늘려 보시기 바랍니다. 그리고 PoE를 창모드로 실행해 보세요 !!
그럼에도 안되신다면 또 댓글 달아쥬세여 ㅎㅎ
아 ㅋㅋ 작년 수업에 머신러닝때문에 깔았던 파이참을 poe때문에 쓸줄이야 ㅋㅋ 잘 되네요 글 참고하고갑니다!
ㅋㅋㅋ 의외의 활용도죠 ㅋㅋㅋ
poe관련해서 아이템에 알터 혹은 카오스 오브를 원하는 옵션이 나올때까지 반복하는 매크로에 대해서 글 써주시면 안될까요?
넵 조만간 한번 올려보도록 하지요 !! ㅎㅎ
C:\autoTradeLesson\atvenv\Scripts\python.exe C:/autoTradeLesson/atvenv/POE/drinkPortion.py
Traceback (most recent call last):
File “C:/autoTradeLesson/atvenv/POE/drinkPortion.py”, line 6, in
import keyEvent as ke
ModuleNotFoundError: No module named ‘keyEvent’
Process finished with exit code 1
이렇게 나오면서 안돼는데 뭐가 문젠가요? 그냥 보고 따라하기만 했어요…
본문에보면 keyEvent.py 파일을 만들라는 문장이 있습니다 ㅎㅎ 그 부분을 참고하시면 될 것 같아요 !!!!
keyEvent.py 파일 만들어서 그안에 링크에 있는거 그대로 복사하고 맨위에 3개 붙여넣고
같은 폴더에 만들고나서 따로 해줘야하는게 있나요? 뭔가 해줘야하는거 같은 느낌이 드는데 ..
따로해줄건 없습니다 ! 위와 같이 만들고 drinkPortion.py 를 실행하면 됩니다 ㅎㅎ
아 그냥 파일다 지우고 다시 만드니까 되네요 ㅎㅎ;; 처음에 뭔가 실수가 있었나 봅니다.
감사합니다. 이런거 처음 써보는데 배워보고 싶네요
되신다니 다행입니다 ㅎㅎ 파이썬은 기본만 알아도 쓸수 있는 영역이 상당히 넓으니 시간 되시면 한번 배워보셔요 ㅎㅎㅎ
덧글이 사라졌네요 ㅠ
있는 그대로를 복사해서 붙여넣고 복사해서 붙여넣고 실행하고 하니 되내요 감사감사 한번에 성공
ㅋㅋㅋ 수고하셨습니다 ㅎㅎ
덕분에 세팅은 다 잘 마쳤습니다. 반피 관련 자료도 합쳐서 만들었구요.
pip freeze해서 라이브러리 확인도 했구요.
명령프롬프트에서 파이썬 실행하여 0.1 까지도 잘 떴고 메모장 테스트시 12345도 잘 나옵니다.
근데 막상 게임상에서 작동을 안합니다.;; 내 체력 표시도 해보고 전체창 모드도 해봤는데 증상이 같습니다.
혹시 집히는 부분 있으신지요? 모니터는 3개를 쓰고 있고 가운데가 1번 우측이 2번 좌측이 3번입니다.
dvi hdmi dp 이용하여 쓰다가 혹시나 해서 dp포트3개로 변경하였으나 여전히 증상이 같네요. 주 모니터는 1번입니다.
Config.cfg 에 보면 drink_portion_delay section 이 있습니다 ㅎㅎ 거기 delay 값을 좀 늘려 보시겠어요 ? ㅎㅎ 그리고 관리자 권한 잊지 않으셨죠 ? ㅎㅎ
말씀하신대로 관리자 모드로 하니까 게임에서 실행됩니다. ㅠ ㅠ
딜레이값은 0.3으로 줬는데 쓸만큼 작동되는거 같아요.
제가 파이썬이 처음이라 올려주신글을 보고 꽤나 오랫동안 공부를 했는데 너무 뿌듯합니다.ㅎㅎ
도스창 파이썬에서 실행하는 방법으로 진행하였고 파이참은 가상화부분이 atvenv 하위폴더가 뜨질 않는데
원인을 모르겠더라구요. 그래서 파이썬을 커맨드모드에서 관리자모드로 실행하니 잘 됩니다.
궁금한점이 두가지 있는데요. 가상화 모드를 프로그램 실행 시 마다 해줘야 하는지 한번만 해주면 되는지 궁금하구요.
드링크포션 실행시 조그만 창 뜨면서 화면 일부가 나오는데 그게 원래는 케릭터 생명부분이 나와야 할거 같은데
인벤토리 둘째, 셋째줄 맨끝 라인이 나오더라구요. 아마 모니터에 따라 위치가 다른거 같은데..
이 부분은 유튜브 올려주신거 봐도 위치 설정이 조금 헷갈리네요.;;
가상화는 한번만 해주시면 됩니다. ㅎㅎ 조그만 창은 어떤 창을 말씀하시는 건가요 ?
저는 할때마다 cmd 처음부터 해야 오토가 되는데 무슨 문제인가요 ㅠㅠ
죄송합니다만 무슨 말씀 이신가요 ?? ㅎㅎ cmd 관리자 권한으로 열고 drinkportion.py 가 있는 폴더로 간 다음 (cmd 상에서 cd [drinkportion.py 파일이 있는 폴더 경로] 치면 이동 됩니다.) python drinkportion.py 하면 실행 안되시나요 ????
마우스 내장 매크로 말고 일반 소프트웨어 매크로는 칼 영정 먹지 않나요???