반응형
안녕하세요.
지난번에 이어서 오늘은 파이썬 연습용 프로젝트의 일환으로,
메이플랜드 게임 내에서 다른 유저가 같은 맵에 등장했을 때 자동으로 채널을 변경하는 매크로를 만들어 보았습니다.
이 매크로의 작동 방식은 굉장히 간단합니다:
- 미니맵 상에서 다른 유저 (빨간 점)을 10초에 한 번씩 주기적으로 스캔합니다. 이 과정은 게임 내 미니맵에서 다른 플레이어의 존재 여부를 확인하는 "유저 감시 함수"에 의해 수행됩니다.
- 만약 다른 유저가 발견되면, 채널 변경을 위한 이동 수행합니다. 이 때 "채널 변경 함수"를 호출하여 자동으로 채널을 변경합니다.
소스코드
채널 변경 함수는 다음과 같이 구현되어 있습니다:
def change_channel():
print("채널 변경 작업 수행중..")
time.sleep(3.0)
# 월드 언어 바꾸는 형식으로 채널 변경
pyautogui.click(1681, 98)
time.sleep(1.5)
pyautogui.click(1681, 175)
time.sleep(1.5)
# 'ch.png' 이미지를 화면에서 찾아 클릭한 이후 언어 변경 클릭
ch_image_location = pyautogui.locateOnScreen("C:\\dump\\ch.png", confidence=0.7)
if ch_image_location:
ch_x, ch_y = pyautogui.center(ch_image_location)
pyautogui.click(ch_x, ch_y)
time.sleep(1.5)
else:
print("C:\\dump\\ch.png 이미지를 찾지 못했습니다.")
# 최종 채널 변경을 위한 클릭들
pyautogui.click(1081, 714)
time.sleep(1.5)
pyautogui.click(1072, 635)
time.sleep(1.5)
# 변경된 채널 확인을 위해 대기
time.sleep(180)
[로직 설명]
위 사진과 같이 월드 언어 변경하는 방식으로 채널을 변경하며, 위 ch.png 이미지를 통해 월드 언어에 한국어 혹은 영어로 비어있는 동그라미 버튼을 알아서 클릭하도록 해두었습니다.
유저 감지 및 채널 변경 호출 함수는 아래와 같습니다:
def check_for_channel_change():
while True:
# 미니맵의 특정 영역을 스크린샷
screenshot_pillow = pyautogui.screenshot(region=(12, 67, 282 - 12, 374 - 67))
screenshot = np.array(screenshot_pillow)
screenshot = cv2.cvtColor(screenshot, cv2.COLOR_RGB2BGR)
# 빨간 점(다른 유저)을 나타내는 이미지와 매칭 시도
reduser_image = cv2.imread("C:\\dump\\reduser.png", cv2.IMREAD_COLOR)
result = cv2.matchTemplate(screenshot, reduser_image, cv2.TM_CCOEFF_NORMED)
threshold = 0.6
# 매칭 결과가 임계값 이상이면 채널 변경
if cv2.minMaxLoc(result)[1] >= threshold:
print("C://dump//reduser.png 이미지가 발견되었습니다. 채널을 변경합니다.")
change_channel()
else:
print("유저감지 되지 않음")
time.sleep(10) # 다음 스캔까지 10초 대기
위 코드에서는 미니맵에서 reduser 사진 (빨간 점)을 10초에 한번씩 감지합니다.
그리고 만약 빨간 점이 발견된다면 change_channel() 명령어를 통해 아까 먼저 설명드렸던 채널 변경 함수를 호출합니다.
이거는 추후 메인 함수와 별개로 10초마다 한번씩 감지하도록 할꺼기 때문에 하기와 같이 쓰레드로 돌릴 예정입니다.
# 메인 스레드와 별도의 스레드로 채널 변경 여부를 확인
channel_check_thread = threading.Thread(target=check_for_channel_change, daemon=True)
channel_check_thread.start()
이렇게 한번 해봤는데,
다음번에는 사냥, 로프 이동 등으로 마무리 지을 예정입니다.
한번 더 말씀드리지만, 이거는 단순 연습용이라 실제 사용하진 못하며, 만약 사용하더라도 계정이 정지됩니다.
주의해주시기 바랍니다. 이 귀찮은 매크로 제작은 다음번에 마무리 짓도록 하겠습니다.
반응형
'개발 연습 > 메이플랜드 매크로_파이썬' 카테고리의 다른 글
(파이썬연습) 메이플랜드 매크로 만들기3_자동사냥 등 최종본 (17) | 2024.02.27 |
---|---|
(파이썬연습) 메이플랜드 매크로 만들기1_캐릭터 인식 (0) | 2024.02.02 |