[개인 프로젝트] Python 메이플스토리 원카드 매크로 제작 + 영상,코드 (Macro for Maplestory One Card + Vide

2021. 6. 28. 08:34프로젝트

반응형

[ 개인 프로젝트 ]
저는 약 2019년도 메이플스토리 라는 게임을 즐기고 있던 도중 원카드라는 컨텐츠를 하기도 귀찮은데 매크로를 만들면 편리 하지 않을까? 라는 의문점이 들어 시작하게되었습니다. 메이플스토리의 운영정책을 위반한 행위이지만 많은 고민끝에 계정정지를 감수하고 기록으로 남기고싶은 마음에 포스팅을 하게되었습니다.

https://github.com/Mr-DooSun/Macro-for-Maplestory-OneCard

 

Mr-DooSun/Macro-for-Maplestory-OneCard

Contribute to Mr-DooSun/Macro-for-Maplestory-OneCard development by creating an account on GitHub.

github.com


[ 개발 기간 ]

  • 2019.01 ~ 2019.01 ( 10일 소요 )

[ 개발언어 ]

  • Python

[ 사용한 툴 및 스킬 ]

  • Sublime Text 3 - 프로그래밍 할 때 사용
  • Visual Studio Code - 프로그래밍, 깃허브 이용할 때 사용
  • Github - 코드공유하기 위해 사용

 

  • Opencv - 색 감지 하기 위해 사용
  • Pytesseract - 글자를 감지하기 위해 사용
  • Pynput - 키보드 제어를 위해 사용

[ 핵심 코드 ]

Check_number() =
메이플스토리 컨텐츠 매크로를 방지하기위해 만들어놓은 숫자 검사기를 화면에서 찍은 후 이미지를 가져와 pytesseract를 이용하여 숫자를 감지한다. 읽어온 숫자를 pynput을 이용해 입력한다

def Check_number(): before_passoword="true" TrueOrFalse=False for_check=True # while True: pixel=0 # printscreen_pil = ImageGrab.grab(bbox=(475,520,750,530)) printscreen_pil = ImageGrab.grab(bbox=(440,390,530,420)) printscreen_numpy = np.array(printscreen_pil.getdata(),dtype='uint8').reshape((printscreen_pil.size[1],printscreen_pil.size[0],3)) img=cv2.cvtColor(printscreen_numpy,cv2.COLOR_BGR2RGB) # img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) lower_color=(255, 255, 255) upper_color=(255,255, 255) img_mask = cv2.inRange(img, lower_color, upper_color) password = image_to_string(img) for num in range(0,len(password)) : #비밀번호 타이핑을 한다 try : print(int(password[num])) except : return for num in range(0,len(password)) : #비밀번호 타이핑을 한다 print(password[num]) keyboard_button.press(password[num]) keyboard_button.release(password[num]) TrueOrFalse=True if before_passoword==password: #이전 비번과 이번 비번이 같을때(무한) 멈춘다 TrueOrFalse=False Only_number() #숫자만 입력하시오 문구가 뜨는 함수로 넘어간다 if TrueOrFalse : #타이핑된 비밀번호를 확인 시킨다 mouse_controller.position=(910,485) mouse_controller.press(mouse_button.left) mouse_controller.release(mouse_button.left) before_passoword=password TrueOrFalse=False sleep(1)


Play() =
숫자 검사기를 통해 통과 될경우 원카드가 시작하기 때문에 play() 함수가 동작한다. 원카드게임은 자기 차례될때 낼수 있는 카드가 있을경우 회색카드에서 밝은 카드로 바뀌기때문에 밝은 부분이 감지되는부분을 마우스를 누르게 한다.

def Play(): #원카드 플레이 playOrstop=True while playOrstop: printscreen_pil = ImageGrab.grab(bbox=(475,520,750,530)) printscreen_numpy = np.array(printscreen_pil.getdata(),dtype='uint8').reshape((printscreen_pil.size[1],printscreen_pil.size[0],3)) img=cv2.cvtColor(printscreen_numpy,cv2.COLOR_BGR2RGB) lower_color=(255, 255, 255) upper_color=(255,255, 255) img_mask = cv2.inRange(img, lower_color, upper_color) for y in range(0,10) : for x in range(0,275) : if img_mask[y,x] == 255 : break print("x : "+str(475+x)+" y : "+str(520+y)) if (475+x) > 748 : if (520+y) > 528 : mouse_controller.position=(475,420) mouse_controller.press(mouse_button.left) mouse_controller.release(mouse_button.left) else : mouse_controller.position=(str(475+x),str(520+y)) mouse_controller.press(mouse_button.left) mouse_controller.release(mouse_button.left) sleep(0.5) mouse_controller.position=(600,460) mouse_controller.press(mouse_button.left) mouse_controller.release(mouse_button.left) sleep(0.5) playOrstop=Check_end() # cv2.imshow("img",img_mask) sleep(1)


[ 시연 영상 ]
이후 테스트 영상을 끝으로 사용하지않았으며, 제작된 매크로는 메이플측으로 넘겼으며, 고객센터에 사실을 알렸습니다.

https://youtu.be/fBQ-6w4SJd8


이상 포스팅을 마치도록 하겠습니다

[ 완성된 코드 ]

https://github.com/Mr-DooSun/Macro-for-Maplestory-OneCard

 

Mr-DooSun/Macro-for-Maplestory-OneCard

Contribute to Mr-DooSun/Macro-for-Maplestory-OneCard development by creating an account on GitHub.

github.com

 

반응형