ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프메 자동사냥, 거탐 매크로
    대피소 2023. 4. 12. 01:37

     

    드디어 완성했다...생각보다 존나 오래 걸렸다. 그것은 아마도 내가 멍청해서 일 것이다.

     

    3월 중순부터 시작했으니 거의 한달걸렸다고 봐야겠지

     

    물론 이것만 계속 잡고있던 것은 아니지만 이렇게 오래걸릴 일인가...? 싶기도 하다.

     

    이 서버에서는 이렇게 4가지 형식의 이미지를 거탐에 사용하는데 가장 위에 있는 것은 숫자를 따서 FindText 와 Sort 를 이용해서 정렬하면 끝이 나는 간단한 문제였지만 밑에 것들은 대충 캡챠 이미지 어디서 구해와서 띄우는거라 이미지 자체는 고정이었다. 물론 이것을 다 모으기는 쉽지 않았는데 그와 더불어서 의뢰를 요청했던 사람의 이미지가 나에게는 소용이 없었다. 아마 원본이 훼손되거나 픽셀이 깨진 것이 원인일 것이라 생각했고 처음부터 다시 따기 시작했다.

     

    거탐이 뜨면 거탐 이미지 부분만 캡쳐를 하기로 결정했고 Gdip 을 사용해서 Hwnd 캡쳐를 만들었다. 역시 Gdip 이 짱이야...

    Hwnd_Capture(hwnd, x, y, w, h, FileName="snap.png") {
    	WinGetPos, wx, wy, ww, wh, % "ahk_id" hwnd
    	pToken:=Gdip_Startup()
    	pBitmap:=Gdip_BitmapFromHwnd(hwnd)
    	pCroppedBitmap := Gdip_CropBitmap(pBitmap, x, ww-x-w, y, wh-y-h)
    	Gdip_SaveBitmapToFile(pCroppedBitmap, Filename, 100)
    	Gdip_DisposeImage(pBitmap)
    	Gdip_Shutdown(pToken)
    	return True
    }

    근데 문제는 메이플스토리는 비활성 캡쳐가 되지 않았다. 즉 화면을 가리면 검은화면으로 나왔다.

    그래서 일반적인 캡쳐로 다시 만들었다.

    물론 일반캡쳐는 메이플 화면을 가리면 안된다는 큰 단점이 있다.

     

    그 이후에 사냥은 그래도 비활성으로 해야지 싶어서 PostMessage 를 활용했다.

    SendKey1:
    key1Count ++
    if(!Mod(key1Count, 45))
    	Send("Up")
    else
    	Send("Control")
    return

    45번마다 위방향키를 눌러서 층 이동을 하고 그 외에는 컨트롤키를 눌러서 몹을 잡는다.

    이것을 SetTimer 를 돌려서 반복시켜준다. 딜레이는 대략 100ms 정도로 했다.

     

    그리고 main 부분에서는 Loop 로 반복문을 돌리고 그 안에서 거탐 이미지를 인식하면 SetTimer 를 끄고 거탐 결과를 입력 후 다시 SetTimer 를 돌려서 사냥을 돌리는 방식으로 구현하고자 했다.

     

    거탐은 캡챠 이미지를 캡챠풀어주는 사이트로 전송하고 결과를 받아서 거탐을 푸는 방식을 채택했다.

    OpenCV 로 전처리하고 테서랙트로 OCR 을 돌려볼까 했지만 종류가 다양해서 더 복잡해질 것 같아 하지 않았다.

    이거 때문에 1달러를 결제했다. 근데 무료 유료 차이가 확실하다.

    근데 문제가 있었다.

    해당 이미지는 몇십장 내에서 재활용되는데 캡챠사이트에 계속 보내면 자원의 손실이 발생한다.

    그래서 캡챠 이미지를 저장하고 결과값을 하나의 폴더에 모아두고 그 이미지를 먼저 찾아보고 없으면 캡챠사이트로 보내는 방식으로 만들었다. 그렇게 했더니 사용량이 확실히 많이 줄었다.

    처음에는 이미지를 엄청 저장한다.


    나중에는 저장하는 횟수는 줄고 이미지를 재활용하기 시작한다.

    이 과정에서 오류가 있었는데 이미지를 캡챠사이트로 보내고 결과를 받은 후 거탐을 풀면 그 이후에 윗방향키를 누르지 않아 사냥이 더이상 진행이 안된다는 것이다. 이미 저장된 이미지를 활용하면 정상적으로 진행이 됐다.

     

    근본적인 해결책을 찾지는 못했지만 매크로 프로그램을 껐다가 다시 키면 해결이 되긴했다.

    그래서 결국은 그냥

    그냥 Reload 를 넣고 해결했다 ㅋㅋㅋㅋㅋ 이 Reload 를 생각못해서 2주를 까먹었다...

    그 과정에서 기존에 의뢰를 요청한 사람은 답이 없다 ㅠ

    26시간 째 수많은 거탐을 스스로 풀고 사냥을 혼자 잘 하고있다.

     

    층구조로 개조된 맵이 있는 서버라면 어디든 가능할 듯?

Designed by Tistory.