메이플 채집 매크로 만들기



안녕하세요.


오늘은 메이플 채집매크로 만들기에 관한

포스팅을 하도록 하겠습니다.



포스팅은 채집 매크로에 이용 될

타겟 추적및 이동코드 구현에 대해서

작성및 코드 안내를 하도록 하겠습니다.



시작하기전 당부의 말씀을 드리면 본 포스팅에서 프로그램 배포는 하지않습니다.

제작방법을 알려드리는 포스팅 이며 제작방법에 대한 강의나 스크립트 의뢰는 가능합니다 :D


메이플스토리 채집 매크로


메이플스토리 채집 매크로

메이플 채집 매크로 만들기


[타겟 추적및 이동 코드 구현하기]



기본적으로 채집 매크로를 만들기 위해서는 타겟까지 찾아가도록 코드를 작성해야 합니다.

여러가지의 채집 대상중에서도 특정 타겟만을 채집하기 위함입니다.


다양한 방법이 있지만 해당 게임과 같이 직교좌표 에서는 메모리를 따는것보다

이미지 서치를 활용하는것이 더 간결하게 코드를 작성 할 수 있습니다.




여기서 이용되는 3개의 이미지가 있습니다.


첫번째, 화면내에서 타겟이 되는 이미지. 01.bmp

두번째, 화면내에서 자신의 기준이 되는 이미지. 02.bmp

세번째, 미니맵내에서 자신의 위치를 좌표화 하기위한 기준 이미지. 03.bmp


첫번째 조건은 화면내 타겟이미지가 있는가 입니다.

굳이 화면에 찾아갈곳이 없는데 쓰레드를 낭비할 필요는 없습니다.

때문에 화면내 타겟이미지가 있을경우 원하는 좌표화를 진행 할수있도록 조건문을 작성합니다.


두번째는 미니맵 내에서 자신의 좌표 위치를 찾고, 타겟이미지를 미니맵 내에 자신과 같이

좌표화를 진행하여 실제 미니맵내 타겟위치가 표시가 되는것처럼 작업을 할겁니다.


사실 이부분은 굳이 미니맵내에 자신과, 룬을모두 좌표화 

하지않고도 직접 이동을 하게 해주어도 무방 합니다. 


다만 이렇게좌표화를 특정공간에 진행하는 이유는 타겟위치까지 찾아가기 위해 

매번 이미지서치하는것보다 한번에 원하는 위치를 찍고 이동할때까지는 이동만 하도록 하게하면

코드는 좀더 내부적으로 간결해지고 구성상 조금더 깔끔한 구성이 될수 있습니다.




아래는 실제 채집 매크로를 만들면서 작성하였던 타겟이동및 추적에 관한 실제 코드중 일부입니다.



  ImageSearch, lx, ly, stx1, sty1, stx2, sty2, *80 %A_ScriptDir%/Image/01.bmp

  If Errorlevel = 0

  {

    ImageSearch, tx, ty, 7, 40, 170, 140, *60 %A_ScriptDir%/Image/03.bmp

    If Errorlevel = 0

    {

      ImageSearch, cx, cy, 5, 30, 1020, 680, *100 %A_ScriptDir%/Image/02.bmp

      If Errorlevel = 0

      {

        If (cx>lx)

          Setx:=cx-35

        If (cx<lx)

          Setx:=cx+10

      }

      Rxv1:=tx+floor((lx-Setx-65)/16.1)

      Rxv2:=tx+floor((lx-Setx+75)/16.1)

    }

  

  ....




      Rxv1:=tx+floor((lx-Setx-65)/16.1)

      Rxv2:=tx+floor((lx-Setx+75)/16.1)


목표위치는 하나인데 위 코드와 같이 두개의 지점을 둔이유는

멈추는 지점을 다르게 하고, 오차범위를 미리 설정해주기 위함입니다.

목표 지점은 하나이나 타겟으로부터 어디에 위치해있는지에 따라 조금 앞에서 멈추도록 말입니다.


위 계산식의 16.1은 좌표화 되는거리와 실제거리차의 비율 입니다.

SetX 를 설정한 이유는 타겟이미지로부터 어떤 방향에 있는지에따라 

기준치를 좀더 세밀하게 조정하기 위해 설정해둔 변수입니다.


계산식을 풀이하자면 미니맵내 자신의위치(tx) 로부터 얼만큼 떨어져있는지 계산하여 

변수 Rxv1~2 에 저장한다는 뜻입니다.





메이플스토리 채집 매크로


메이플스토리 채집 매크로

메이플 채집 매크로 만들기


위 영상은 실제 완성된 코드의 영상으로 

사실 하나의 완벽한 채집 매크로를 만들기 위해서는 다른 요소의 코드작성이 필요합니다.


문제의 소지가 있을수있어 전체 코드공개는 못하지만 작성된 코드의 원리는 같습니다.

그래픽 개체의 이용과 이미지서치의 활용 입니다.


추후 기회가 되면 더많은 오픈소스와 자료로 포스팅 하도록 하겠습니다 :)



코드 작성에 대해 궁금한점이 있으시거나 

오토핫키 스크립트 작성법 혹은 다른 스크립트 제작의뢰 요청시 아래 메일로 연락주세요.

이메일 : cai6452@naver.com



Posted by Khan64
,

룬 해제 매크로 만들기



안녕하세요 :D


오늘은 메이플 룬해제 매크로를

만들어 보려 합니다.


특수한 경우에 미니게임처럼 등장하는 것으로,

지난 포스팅에서 소개했던 클럽오디션 게임과 

방법은 유사하나 좀더 단순한 구조인듯 합니다.


포스팅 순서는 간략한 설명글과 코드작성시

사용하였던 함수소개후 마무리 하도록 하겠습니다.



시작하기 전 당부의 말씀을 드리면 본 포스팅은 프로그램을 판매하거나 배포하지 않습니다.

제작 방법을 알려드리는 포스팅이며 제작방법에 대한 강의나 기타 스크립트 의뢰는 가능합니다 :D



특정 방향키를 정해진 순서에 따라 입력하여 플레이 하는게임들.



메이플 룬해제 미니게임 매크로 만들기


지난 포스팅 에선 Sort2DArray 함수를 이용하여 서치 하였던 이미지를 순서대로 나열하도록

알고리즘을 구성 하였지만, 이번 적용 대상은 보다 조금 단순한 구조 이기 때문에 해당 함수는

사용하지 않았습니다.


다만 이번 포스팅에서 다루는 부분은 GDI (Graphic Device Interface) 라는 그래픽 구현장치를

이용하려 합니다. GDI 란 그래픽 디바이스를 이용하여 그림을 그릴수있도록 AP에게 제공하는

모든 기능을 통틀어 GDI라고 하며, AP는 GDI를 이용하여 그래픽을 구현하는것입니다.



이것이 필요한 이유는, 어떠한 이미지를 서치하는데 있어 색이 변하거나, 혹은 크기가 변하거나

하는 경우에 따라서 해당이미지를 받아 우리가 원하는 그림으로 그려줄 수 있기 때문입니다.



2018/10/19


2018/01/02


2018/01/05


[메이플 룬 매크로]


2018/09/12



사용된 명령어



문제가 될 수 있는부분이 있어 구체적인 코드는 생략하도록 하겠습니다.


기본적인 이미지의 분류 방법은 픽셀서치를 사용하여도,

이미지서치를 사용하여도 상관은없습니다.


영상과 같이 흑백화한 이미지를 통해 원하는 값을 찾아내는것도

위에 언급한 GDI 장치를 이용한것이구요.


혹은 픽셀값을 이용해도 무방 합니다. 아래와 같은 단순한 코드를

이용해서도 원하는 키패드를 찾을 수도 있습니다.



GetCCD(code, stnd)
{
  Loop, 3 {
    StringMid,gcd,code,stnd,2
    If gcd<=ff
      result=3
    If gcd<=af
      result=2
    If gcd<=45
      result=1
   
BMPH =
( Join
%BMPH%
%result%
)

stnd+=2
}
return BMPH
}


지난번  Sort2DArray 함수를 이용하여 키패드를 검색하고

입력받는 방법에 관한 부분은 아래 포스팅을 참고하시면 됩니다.


http://haha92.tistory.com/36



오토핫키 스크립트 작성법이나 다른 스크립트 제작 의뢰도 같이 받고 있습니다.

이메일 : cai6452@naver.com






Posted by Khan64
,

피싱마스터 매크로 만들기



안녕하세요 :)


이번 포스팅은 피싱마스터 모바일 게임

매크로만들기에 관한 포스팅을 하겠습니다.


피싱마스터 모바일 게임은 낚시 게임으로

낚시의 캐스팅, 챔질, 릴링의 요소가 잘갖추어진 

게임으로 실제 낚시형태와 유사한듯합니다.



포스팅순서는 피싱마스터 게임에대한 간략한 소개와

비활성 이미지서치에대한 포스팅을 하도록 하겠습니다.


시작하기전 당부의 말씀을 드리면 본 포스팅은 프로그램 배포는 하지않습니다.

제작방법을 알려드리는 포스팅 이며 제작방법에 대한 강의나 스크립트 의뢰는 가능합니다 :D


피싱마스터 매크로 만들기 피싱마스터 매크로 만들기

피싱마스터 매크로 만들기 피싱마스터 매크로 만들기


피싱마스터 모바일 게임 



게임빌에서 개발한 모바일 낚시 게임으로 , 에너지를 소모하여 플레이 할 수 있습니다.

에너지는 일정시간이후 회복이 되거나, 캐시 구매를 통해 얻을수 있는 스타로 구매할 수 있습니다.


기본 조작은 낚시대를 물가로 던지는 캐스팅과, 낚아올리는 챔질, 물고기를 끌고오는 릴링으로

구성되어 있으며 물고기의 상태에 따라 게이지등 공략에 약간의 차이가 있습니다.


낚시 게임이지만 특유의 그래픽적인 요소도 잘 살려낸 게임 입니다.

각 캐릭터마다 다양한 코스튬을 장착 할 수 있으며 다양한 미끼를 사용할 수 있습니다.



피싱마스터 매크로 만들기 피싱마스터 매크로 만들기


피싱마스터 매크로 만들기 피싱마스터 매크로 만들기

피싱 마스터 매크로 제작 - 매크로 제작 방법은 ?


전체 소스를 공개하기에는 무리가 있어 

제작방법에 대한 안내의 포스팅으로 진행하겠습니다.


아래는 피싱마스터 매크로를 제작할때 사용한 비활성 이미지서치 함수와에 대한

안내가 있으니 직접 제작해보실 분들은 관련 함수를 참고하시면 좋을듯합니다.



오토핫키 스크립트 작성법이나 다른 스크립트 제작의뢰도 같이 받고있습니다.

이메일 : cai6452@naver.com


피싱마스터 매크로 만들기 피싱마스터 매크로 만들기

피싱마스터 매크로 - 스크립트 제작방법



물론 이미지서치는 굳이 비활성 이미지서치를 사용할 필요는 없습니다.

활성 ImageSearch 명령어로도 충분히 제작이 가능하며 

오히려 더 쉽게 코드를 작성 할 수 있습니다.


* Gdip ImageSearch를 사용하기 위해서는 Gdip 라이브러리가 필요합니다.


1.    먼저 반복구문의 형태를 구성해야 합니다. 

Loop 문으로 할건지, Settimer 로 할건지 Goto 로 할건지 정한이후

반복구문안에 이미지서치 함수를 사용하여 조건문을 구성합니다.


2.    이미지서치 성공의 경우 ControlClick 혹은 MouseClick 명령어를 사용해서 

클릭이벤트를 발생 합니다. 끊김이나 오류없는 반복을 위해서는 예외로 나타날수있는

팝업 메세지나 문구에대한 이미지 반응도 염두하여 코드를 작성해야 합니다.



Gdip_ImageSearch(pBitmapHaystack,pBitmapNeedle,ByRef OutputList=""

,OuterX1=0,OuterY1=0,OuterX2=0,OuterY2=0,Variation=0,Trans=""

,SearchDirection=1,Instances=1,LineDelim="`n",CoordDelim=",") {


    ; Some validations that can be done before proceeding any further

    If !( pBitmapHaystack && pBitmapNeedle )

        Return -1001

    If Variation not between 0 and 255

        return -1002

    If ( ( OuterX1 < 0 ) || ( OuterY1 < 0 ) )

        return -1003

    If SearchDirection not between 1 and 8

        SearchDirection := 1

    If ( Instances < 0 )

        Instances := 0


    ; Getting the dimensions and locking the bits [haystack]

    Gdip_GetImageDimensions(pBitmapHaystack,hWidth,hHeight)

    ; Last parameter being 1 says the LockMode flag is "READ only"

    If Gdip_LockBits(pBitmapHaystack,0,0,hWidth,hHeight,hStride,hScan,hBitmapData,1)

    OR !(hWidth := NumGet(hBitmapData,0))

    OR !(hHeight := NumGet(hBitmapData,4))

        Return -1004


    ; Careful! From this point on, we must do the following before returning:

    ; - unlock haystack bits


    ; Getting the dimensions and locking the bits [needle]

    Gdip_GetImageDimensions(pBitmapNeedle,nWidth,nHeight)

    ; If Trans is correctly specified, create a backup of the original needle bitmap

    ; and modify the current one, setting the desired color as transparent.

    ; Also, since a copy is created, we must remember to dispose the new bitmap later.

    ; This whole thing has to be done before locking the bits.

    If Trans between 0 and 0xFFFFFF

    {

        pOriginalBmpNeedle := pBitmapNeedle

        pBitmapNeedle := Gdip_CloneBitmapArea(pOriginalBmpNeedle,0,0,nWidth,nHeight)

        Gdip_SetBitmapTransColor(pBitmapNeedle,Trans)

        DumpCurrentNeedle := true

    }


    ; Careful! From this point on, we must do the following before returning:

    ; - unlock haystack bits

    ; - dispose current needle bitmap (if necessary)


    If Gdip_LockBits(pBitmapNeedle,0,0,nWidth,nHeight,nStride,nScan,nBitmapData)

    OR !(nWidth := NumGet(nBitmapData,0))

    OR !(nHeight := NumGet(nBitmapData,4))

    {

        If ( DumpCurrentNeedle )

            Gdip_DisposeImage(pBitmapNeedle)

        Gdip_UnlockBits(pBitmapHaystack,hBitmapData)

        Return -1005

    }

    

    ; Careful! From this point on, we must do the following before returning:

    ; - unlock haystack bits

    ; - unlock needle bits

    ; - dispose current needle bitmap (if necessary)


    ; Adjust the search box. "OuterX2,OuterY2" will be the last pixel evaluated

    ; as possibly matching with the needle's first pixel. So, we must avoid going

    ; beyond this maximum final coordinate.

    OuterX2 := ( !OuterX2 ? hWidth-nWidth+1 : OuterX2-nWidth+1 )

    OuterY2 := ( !OuterY2 ? hHeight-nHeight+1 : OuterY2-nHeight+1 )


    OutputCount := Gdip_MultiLockedBitsSearch(hStride,hScan,hWidth,hHeight

    ,nStride,nScan,nWidth,nHeight,OutputList,OuterX1,OuterY1,OuterX2,OuterY2

    ,Variation,SearchDirection,Instances,LineDelim,CoordDelim)


    Gdip_UnlockBits(pBitmapHaystack,hBitmapData)

    Gdip_UnlockBits(pBitmapNeedle,nBitmapData)

    If ( DumpCurrentNeedle )

        Gdip_DisposeImage(pBitmapNeedle)


    Return OutputCount

}



피싱마스터 매크로 만들기 피싱마스터매크로 매크로 피싱마스터

Posted by Khan64
,

메이플 거짓말탐지기 매크로 만들기




안녕하세요 :)


이번 포스팅에선 메이플 스토리 거짓말탐지기에

관한 매크로를 만들어 보았습니다.


포스팅 순서는 코드 작성 방식에 관한 간략한 내용과

코드작성후 촬영한 영상, 방해요소에 대한 순서로

작성 하도록 하겠습니다.



시작하기 전 당부의 말씀을 드리면 본 포스팅은 프로그램을 판매하거나 배포하지 않습니다.




메이플 거짓말탐지기 매크로 만들기



메이플에서 자동사냥 플레이어를 막기위해 도입된 시스템으로 그 역할은 어느정도는 잘 수행하고 있는것 같습니다. 패턴인식이나, 이미지서치, ocr 같은 방응형 프로그램으로는 직접풀기에는 어려움이 있기도 하구요.


키보드 자체에도 녹화 매크로기능이 있는 것부터 ,관련 유틸까지 매크로를 구하는데 어려움이 없어, 사용하는 유저들이 많지만 이러한 외부적인 요소 때문에 직접 해제는 어렵더라도 알림정도로 사용하려는 분들이 꽤 많은듯 합니다.


창을 여러개 띄어둔이후에 'Errorlevel = 1' 을 이용해 알림만 받아서 사용하는 방법이나,

카카오톡과 같은 SNS를 이용해서 알림을 전송받고 해제하도록 사용하시는 분들도 있을겁니다.  

이번 포스팅 에서는 해당 이미지를 촬영하고, SNS로 전송, 답변을 받기까지 작성해보았습니다.



메이플 거짓말 탐지기 알리미




메이플 거짓말탐지기 매크로 만들기




서치이후에 찾아낸 좌표의 변수를 기억하고 해당 좌표부터 일정영역까지 

외부 캠 어플리케이션을 이용해서 촬영하도록 하였습니다. 

촬영이후에는 카카오톡으로 촬영한 gif 파일을 보내었습니다.


여기서 한가지 예상하지 못했던점은, 한글을 전송한이후에 Clipboard 에 저장한 단어를 

붙여넣기(Ctrl+v/Shift+Insert)로 보낼 수가 없었습니다.


때문에 입력받은 한글을 한글 자모 개별로 키 입력을 하도록 코드를 작성해야 했습니다.

입력받은 문장을 우선 한글자씩 뽑아낸뒤 초성과 중성, 종성으로 분리하도록 진행하였습니다.

여기서 주의해야 하는점은 초성과 종성은 배당번호가 겹받침 때문에 다른코드가 나오게됩니다.


때문에 종성의 경우 한번더 변환되도록 코드를 작성해야 합니다. 

실제로 한글에서 사용가능한 모든 글자수는 11172 자로서 한글<>유니코드 변환공식을 보면


[{(초성)×588}+{(중성)×28}+(종성)]+44032


추출할 한글 유니코드값에서 44032를 빼준이후에 28로 나눈 나머지가

바로 한번더 변환과정을 거쳐야할 종성코드가 되겠습니다.





초성 ㄱ, ㄴ, ㄷ, ㄹ, ㅁ, ㅂ, ㅅ, ㅇ, ㅈ, ㅊ, ㅋ, ㅌ, ㅍ, ㅎ, ㄲ, ㄸ, ㅃ, ㅆ, ㅉ
중성 ㅏ, ㅑ, ㅓ,ㅕ, ㅗ, ㅛ, ㅜ, ㅠ, ㅡ, ㅣ, ㅐ, ㅒ, ㅔ, ㅖ, ㅘ, ㅙ, ㅚ, ㅝ, ㅞ, ㅟ, ㅢ 
종성 ㄱ, ㄴ, ㄷ, ㄹ, ㅁ, ㅂ, ㅅ, ㅇ, ㅈ, ㅊ, ㅋ, ㅌ, ㅍ, ㅎ, ㄲ, ㄳ, ㄵ, ㄶ, ㄺ, ㄻ, ㄼ, ㄽ, ㄾ, ㄿ, ㅀ, ㅄ, 


19×21(초+중) + 19×21×27(초+중+종) = 11172 입니다.



메이플 거짓말 탐지기 매크로 만들기



위와 같은 방식으로 한글을 전송받지 않고도 편법으로 조금더 쉬운방법은 있습니다.

한글의 경우 합성자모 (ㄻ , ㅙ ...) 와 같은것때문에 키보드와 서로 대응되지 않습니다.


실제 'ㄱ' 을 Clipboard 에 저장한이후 

한영키를 번갈아가며 누르면서 Sendinput, %Clipboard% 명령어를 내보내면 ㄱ 만 나오는대신에


' r ' 를 Clipbaoard 에 저장한 이후 

한영키를 번갈아가며 누르면서 Sendinput, %Clipboard% 명령어를 내보내면 r , ㄱ 두가지가 나오는것을 확인할 수 있습니다. 



여기서 조금 살펴보면 영어로 입력을 받았을경우 별다른 과정없이 한영키 입력하나로

한글로 바로 대응시켜 입력을 보낼수 있는것을 알 수 있습니다.





현재 한글입력인지 영어 입력인지 확인하는 함수.

HanEnCheck()

IfEqual, hWnd,, WinGet, hWnd, ID, A 

DefaultIMEWnd  := DllCall( "imm32\ImmGetDefaultIMEWnd", "UInt", hWnd) 

DetectSaved = %A_DetectHiddenWindows% 

DetectHiddenWindows, On 

SendMessage, 0x283, 5, 0,, ehl_id %DefaultIMEWnd% 

IfNotEqual, A_DetectHiddenWindows, %DetectSaved%, DetectHiddenWindows, %DetectSaved% 

Return  ErrorLevel 

}



메이플스토리 메이플 메이플매크로 거짓말탐지기 거탐 알리미 알림이 거탐알리미 거탐알림이

메이플거탐 메이플 거탐 메이플 거탐매크로 거탐매크로알리미 탐지기알리미 탐지기 알림이

탐지기알림이 거짓말 탐지기거탐매크로 거탐거탐거탐매크로 거탐 매크로 거탐매크로



Posted by Khan64
,

오토핫키 명령어 속도체크 하는법





안녕하세요.


오늘은 오토핫키에서 사용하는 명령어의 속도를

측정할 수 있는 스크립트를 작성해보도록 하겠습니다.


프로그래밍을 하다가 특정블록이나 함수등

성능 측정을 해야 하는 경우가 종종 있는데,

그 측정도구로 사용 할 수 있습니다.






오토핫키 명령어 속도체크 하는법



QueryPerformanceCounter , QueryPerformanceFrequency



스크립트 코드는 간단하게 사용 할 수 있습니다.

눈에띄는 것으로는 크게 두가지가 보이는데. 각 함수의 의미를 살펴보면


QPF 는 CPU가 초당 몇번의 카운팅을 하는지 알아볼 수 있고

QPC 는 현재 얼만큼 카운팅 되었는지 알수 있습니다.


추출한 두값을 이용해 차이값을 계산한후 QPF로 나누어 준다면

원하는 명령어를 동작하는데 걸린 시간값을 추출 할 수 있습니다.




# 오토핫키 # 명령어 # 속도체크 # 하는법

Posted by Khan64
,

메이플 경매장 매크로 만들기




안녕하세요 :)


한동안 포스팅을 못했는데..

몇개월만에 이렇게 포스팅 하네요.

이번에는 경매장 시세파악 코드를

작성해 보도록 하겠습니다.


포스팅 순서는 경매장 스크립트에 필요한 

숫자 데이터인식과 처리방법 그에 대한

영상및 간략한 설명 순으로 하겠습니다. 



시작하기전 당부의 말씀을 드리면 본 포스팅은 프로그램을 배포하는 포스팅이 아닙니다.

제작방법을 알려드리는 포스팅이며 코드에 대한 설명이나 기타 스크립트 의뢰는 가능합니다. :D





메이플 경매장 매크로 만들기



여러 게임에서 유저간의 활발한 거래를 위하여 경매장이라는 시스템이 도입되어있습니다.

이러한 경매장에서 원하는 품목의 시세를 실시간으로 가져오는 프로그램을 만들기 위해서는


무엇보다 검색한 아이템의 숫자 이미지를 실제값으로 가져오는 작업이 필요합니다.

ImageSearch , PixelSearch , RPM , ImageData.. 등 여러 방법이 있겠지만


ImageData 를 이용한 방법을 통하여 원하는 품목의 가격정보를 가져오도록 하겠습니다.

단순한 방법으로 구현한다면 이미지서치나 픽셀서치를 이용해 코드작성할수 있습니다.






위 영상은 메이플 게임에서의 경매장 이용모습과 상단의 품목에 대한 가격을 인식하고,

인식하는데 걸리는 시간을 Gui 인터페이스에 표시를 해두도록 코드를 작성한 영상 입니다.


경매장 매크로 영상




코드에 사용한 함수.



BinRead(file, ByRef data, n=0, offset=0)

{

   h := DllCall("CreateFile","Str",file,"Uint",0x80000000,"Uint",3,"UInt",0,"UInt",3,"Uint",0,"UInt",0)

   IfEqual h,-1, SetEnv, ErrorLevel, -1

   IfNotEqual ErrorLevel,0,Return,0

   m = 0

   IfLess offset,0, SetEnv,m,2

   r := DllCall("SetFilePointerEx","Uint",h,"Int64",offset,"UInt *",p,"Int",m)

   IfEqual r,0, SetEnv, ErrorLevel, -3

   IfNotEqual ErrorLevel,0, {

      t = %ErrorLevel%

      DllCall("CloseHandle", "Uint", h)

      ErrorLevel = %t%

      Return 0

   }

   m := DllCall("GetFileSize","UInt",h,"Int64 *",r)

   If (n < 1 or n > m)

       n := m

   Granted := VarSetCapacity(data, n, 0)

   IfLess Granted,%n%, {

      ErrorLevel = Mem=%Granted%

      Return 0

   }

   result := DllCall("ReadFile","UInt",h,"Str",data,"UInt",n,"UInt *",Read,"UInt",0)

   if (!result or Read < n)

       t = -3

   IfNotEqual ErrorLevel,0, SetEnv,t,%ErrorLevel%

   h := DllCall("CloseHandle", "Uint", h)

   IfEqual h,-1, SetEnv, ErrorLevel, -2

   IfNotEqual t,,SetEnv, ErrorLevel, %t%-%ErrorLevel%

   Return Read

}


Bin2Hex(ByRef h, ByRef b, n=0)

{

   format = %A_FormatInteger%

   SetFormat Integer, Hex

   m := VarSetCapacity(b)

   If (n < 1 or n > m)

       n := m

   Address := &b

   h =

   Loop %n%

   {

      x := *Address

      StringTrimLeft x, x, 2

      x = 0%x%

      StringRight x, x, 2

      h = %h%%x%

      Address++

   }

   SetFormat Integer, %format%      ; restore original format

}


Hex2Bin(ByRef @bin, ByRef @hex, _byteNb=0)

{

 local l, data, granted, dataAddress

 If (_byteNb < 1 or _byteNb > dataSize)

 {

  l := StrLen(@hex)

  _byteNb := l // 2

  if (l = 0 or _byteNb * 2 != l)

  {


   ErrorLevel = Param

   Return -1

  }

 }

 granted := VarSetCapacity(@bin, _byteNb, 0)

 if (granted < _byteNb)

 {

  ErrorLevel = Mem=%granted%

  Return -1

 }

 data := RegExReplace(@hex, "..", "0x$0!")

 StringLeft data, data, _byteNb * 5

 dataAddress := &@bin

 Loop Parse, data, !

 {

  DllCall("RtlFillMemory"

    , "UInt", dataAddress++

    , "UInt", 1

    , "UChar", A_LoopField)

 }

 Return _byteNb

}









Posted by Khan64
,

클럽 오디션 매크로 만들기



안녕하세요 :)


오랜만에 이렇게 포스팅 하는것 같습니다.

17년 초부터 업무가 많아 최근에 들어서야

여유가 생겨 이렇게 포스팅 하네요.


이번에는 클럽오디션 이라는 모바일게임의

키노트를 자동으로 인식후 눌러주는 매크로를

만들어 보도록 하겠습니다.


포스팅 순서는 클럽오디션에 대한 게임 안내

간단한 게임방법 에 대한 포스팅 이후 매크로 

 스크립트 일부를 공개하도록 하겠습니다.



시작하기전 당부의 말씀을 드리면 본 포스팅은 프로그램 배포는 하지않습니다.

제작방법을 알려드리는 포스팅 이며 제작방법에 대한 강의나 스크립트 의뢰는 가능합니다 :D






클럽 오디션 모바일 게임 - 간단한 소개


2000년대 초반 음악에 맞추어 마치 악기를 연주하는듯한 플레이로 

큰 인기를 누렸던 pc 게임이 모바일 게임으로도 출시한걸로 알고있습니다.


단순히 리듬에 맞추어 게임을 플레이 하는것뿐 아니라 캐릭터를 원하는 

스타일로 꾸밀수도 있어 많은 여성분들에게 인기를 끌었던 게임이 였죠.


최근 모바일 게임을 pc에서 플레이 할 수 있게 녹스,미뮤,지니모션,블루스택등 

많은 에뮬레이터들이 나와 모바일과 pc게임의 경계가 모호 해지긴 했습니다








클럽 오디션 모바일 게임 - 게임 방법 소개


게임설치이후 튜토리얼을 진행하게 되면 크게 스토리모드 / 커플모드 / 댄싱홀 모드를

중심으로 게임을 즐길 수 있으며 , 자신이 원하는 모드로 게임을 플레이 하시면 됩니다.


기본적으로 게임 플레이방법은 비슷한데 키노트가 2개인 경우와 4개인경우로 나뉩니다.

4개의 키노트를 사용하는것이 훨씬 어려우며 공통적으로 키노트를 모두 입력후에 


마지막으로 디스크를 타이밍에 맞게 터치 해주어야 춤을 추게 되며 콤보 달성시 많은

점수를 획들 할 수 있습니다. 플레이를 하며 느낀점은. 


키노트 2개인경우도 손으로 못누르는 필자의 똥손을 확인하였습니다..

매크로 제작을 진행한 결과는 상당히 만족 스러웠습니다. :)





BPM 자동인식후 자동 조정하며,

정확도는 대략 6~70%정도로 수정해두었습니다.

대기시간 공식을 1ms단위까지 좁혀 계산한다면.. 좀더 정확히 할 수 있겠죠 :) 

처음에 128 이라고 작성된것은 OCR에 의해 자동으로 인식하여 작성된것입니다.



아래 영상은 루비라는 캐시아이템을 자동으로 소모하는 과정 입니다.





     클럽 오디셔 매크로 제작기 - 매크로 제작방법은?


전체소스 공개는 무리가 있어 매크로 제작방법에 대한 

스크립트 안내의 포스팅으로 진행하겠습니다.


아래 스크립트에 대한 설명과 안내를 해두었으며 더이상 바이러스나 랜섬웨어같은 

악성 프로그램에 대한 걱정없이 직접 프로그램을 만들어 보는건 어떨까요?



오토핫키 스크립트 작성법이나 다른 스크립트 제작의뢰도 같이 받고있습니다.

이메일 : cai6452@naver.com






스크립트



중복 이미지서치및 찾은 이미지와 연관된 벼수에 특정 마킹을 남겨

찾은 이미지를 분류하고 순서대로 기억하여 호출하는 방식으로 스크립트를 작성하셔야 합니다.


중복 이미지서치는 여러 방법이 있지만

가장 간단한방법은 ImageSearch 변수를 바꾸어 가며 서치를 진행하시면 됩니다.


먼저 각자의 방식으로 중복이미지서치에 대한 Loop / Settimer / goto / 함수등을  설정합니다.


1. 해당 키 이미지를 중복 서치한뒤에 서치한 순서대로 배열 변수에 저장 합니다,.

2. 아래는 이중배열에 대한 나열로 저장한 배열을 아래 함수를 이용하여 나열 한 이후 

   그 순서대로 호출하여 불러내면 됩니다.

3. BPM 에 따른 최종 디스크 클릭 시간을 달리 주어야 하기 때문에 OCR 프로그램을

   이용하여 BPM 속도를 읽은 이후 슬립시간을 달리 주어 클릭하게 하여야 합니다.


  물론 BPM을 굳이 OCR로 읽어 들일필요는 없으며 숫자이미지인식을 통하여 코딩을

  하여도 무방합니다. 하지만 이미지숫자를 일일이 따기 귀찮다면 OCR을 이용하시면 됩니다 :)

OCR은 문자인식 프로그램으로 Capture2Text 프로그램을 이용하였으며

문자 인식의 경우 숫자나 영문같은경우는 정확도가 매우 높습니다. lol



Sort2DArray(Byref TDArray, KeyName, Order=1) {

   ;TDArray : a two dimensional TDArray

   ;KeyName : the key name to be sorted

   ;Order: 1:Ascending 0:Descending

 

    For index2, obj2 in TDArray {           

        For index, obj in TDArray {

            if (lastIndex = index)

                break

            if !(A_Index = 1) &&  ((Order=1) ? (TDArray[prevIndex][KeyName] > TDArray[index][KeyName]) : (TDArray[prevIndex][KeyName] < TDArray[index][KeyName])) {    

               tmp := TDArray[index][KeyName] 

               TDArray[index][KeyName] := TDArray[prevIndex][KeyName]

               TDArray[prevIndex][KeyName] := tmp  

            }         

            prevIndex := index

        }     

        lastIndex := prevIndex

    }

}



클럽오디션/ 클럽/ 오디션/ 매크로/ 오토핫키 / 리듬게임 / 매크로만들기/ 매크로 제작


매크로 /오토핫키 /클럽 /오디션/

Posted by Khan64
,

바람의나라 매크로 만들기



안녕하세요

오늘은 바람의나라 매크로에 

대한 포스트를 들고 왔습니다.


사실 바람의나라는 오래된 게임이기도하고

바람 매크로에 관련된 포스트가 정말 많지만..

그래도 찾아오신분들께 정말 감사드립니다 :)


포스트은 매크로 제작에 대한 간략한 이야기

바람의나라 마한매크로에대한 효율검토 및 

매크로 스크립트 공개 순으로 포스팅 하였습니다 


시작하기전 당부의 말씀을 드리면 본 포스팅은 프로그램 배포는 하지 않습니다.

제작방법을 알려드리는 포스팅이며 제작방법에 대한 강의나 스크립트 의뢰는 가능합니다 :D






본 영상은 특정카페 에서 제작한 스크립트및 영상으로

동의를 구한후 홍보 영상으로 활용 하였습니다.



바람의나라 매크로 제작이야기 - 서론



우선.. 필자는 2011년쯤 향수에 젖어 바람의나라 복귀에 가담을했었죠..

그때 정말 유명했던 사냥터가 마한던전 이였습니다.

직업불문하고 촙 ~ 거의3차 까지아우르는 사냥터였죠



바람의나라에 던전이란 사냥방식이 처음도입된 것도 한 목 했지만..

무엇보다 5차승급이 나온지 얼마 되지 않았다는거였죠

(맞나요? 기억이 맞는지 잘 모르겠네요;)



그당시 저는.. 바람의나라 매크로를 만들어서 마한/낭산/와산 던전에서 

3주만에 5차를 찍었답니다..; 그때는 바람의나라 매크로들도 엄청많았었죠..

특히 주술사 하시는분들이 많이들 매크로를 사용하셨을겁니다.


최근 6차승급이 나와 복귀대열에 합류했지만 정말 많은게 바뀌었더라구요 

사냥터도 정말 많이 생기고 모든게 다 낯설어서..ㅋㅋ 못하겠더라구요

그러다 마한사냥터나 가볼까해서 가보니 환수키우시는분 딱 한분 계시더라구요


이것저것 바람나라에서 매크로에대한 최근정보를 알아가던 중

또 새로운것 한가지는 경험치 미터기 라는게 생겼더라구요. 

얼마나 경험치를 획득했는지 계산해주는 인터페이스였습니다.


그래서 바람의나라 마한 매크로를 제작하기전에.매크로 구동시 

마한던전 에서 1차~5차까지 얼마 만큼의 시간과 경험치가 필요한지 계산해보게되었죠.








바람의나라 매크로 제작 이야기 -  마한던전 경험치 계산



먼저 매크로를 제작하기 앞서,

제작 후 매크로 구동시 5차승급까지 하는데 필요한 경험치량과

시간을 미리 한번 계산해보도록 하겠습니다 ㅎㅎ


물론 6차승급이 남았지만 마한매크로 에선 절대 안될것 같아요 ㅋㅋ

장비를 맞춘 후에 하거나 다른 사냥터 매크로를 만들어야 할것 같습니다

우선 마한매크로는 5차까지만..ㅎㅎ




◆ 마한던전 경험치



왼쪽 속도계처럼 보이는게 바로 경험치 계산기입니다 ㅎ

위 그림에서 처럼 한판당 5912만을 받았으며 두번도니 

1억1824만(5912만*2)에 해당하는 누적경험치로 기록이 되더군요

(아마 승급이 낮으신분들은 더 받으실겁니다.)


매크로는 마한던전에선 빠르면 20~30초 수준이였습니다.





      



◆ 마한던전 경험치 계산



위 자료는 바람서치의 경험치 계산기를 이용하였습니다.

5차 최소 기준까지 필요 경험치량은 5조 890억 수준..


정말 많다고 느껴지는 수치이지만 1차에서 5차까지 판당1분기준

1434시간 즉 대략 60일정도 됩니다. 최근엔 패널티가 있어

마한사냥터에서 5차를 하기에는 무리가 있으므로 환수키우는 용도로 적합할 것 같습니다 :)


그런데 어떻게 필자는 그 옛날 매크로로 3주만에 5차를 찍었느냐.. 라고 물으신다면

우선 레벨이 낮을수록 클리어 경험치를 더 많이 받았던걸로 기업합니다. 그리고


사실 민망하지만 마한같은 경우 단순한 알고리즘이여서 손으로 하는것보다 훨씬 빨르죠.. :(

초상이나 또 축지/ 경험치 변환비서 캐시를 사용하구 2차부터는 속도또한 3~40초 이내로

돌 수 있으며 가장큰 이점은 패널티가 그당시는 없었습니다 . :)





 

바람의나라 매크로 제작이야기 - 마한던전 매크로 제작은? 




사실 이전부터 소스 공개는 악용될 우려가 많아 공개하지 않으려 하였지만..

최근 프로그램 배포자체가 법률적인 문제가 될 수 있어 직접 만들 수 있도록

스크립트 형태로 공개 하였습니다.


아래 스크립트를 안내해두었으며 더이상 바이러스나 랜섬웨어 걱정없이 

프로그램을 직접 만들어 보시는건 어떨까요? :)  


아래 스크립트는 

Brand You 네이버 카페의 하하핫님께서 작성하신 스크립트로

카페 홍보를 위해 동의를 구한이후 영상과 스크립트를 공개해두었습니다.


오토핫키 스크립트 작성법이나 다른 스크립트 제작의뢰도 같이 받고있습니다.

활동 카페 : http://cafe.naver.com/brandui

이메일 : cai6452@naver.com











[AutoHotkey Script 1]



#NoEnv
#SingleInstance force
SetKeyDelay, -1
SetWinDelay,-1
SetBatchLines,-1
SetControlDelay,-1
CoordMode, Pixel, Screen


FileMoveDir, Baram03, C:\Baram03, 2

psw=2

Gui,1: +AlwaysOnTop -Caption +Border +ToolWindow
Gui,1: Add, Picture, x20 y15 BackgroundTrans, C:\Baram03\Bground.png
Gui,1: Color, FFFFFF
Gui,1: Add, Button, x280 y20 w77 h23 vexit Disabled Hidden, Exit
Gui,1: Add, Button, x280 y20 w77 h23 vstart, Start
Gui,1: Add, Button, x364 y20 w77 h23 gBrm, Baram

Gui,1: Add, Tab, x150 y45 w295 h210, 술사 ' 도사
Gui,1: Tab, 술사 ' 도사
Gui,1: Add, GroupBox, x161 y70 w132 h175 cgreen , Skill
Gui,1: Add, GroupBox, x301 y70 w132 h125 cgreen, Buff
Gui,1: Add, CheckBox, x171 y90 w50 h20 vC1, 공격1
Gui,1: Add, CheckBox, x171 y115 w50 h20 vC2, 공격2
Gui,1: Add, CheckBox, x171 y140 w50 h20 vC3, 공격3
Gui,1: Add, CheckBox, x171 y165 w50 h20 vC4, 시폭
Gui,1: Add, CheckBox, x171 y190 w50 h20 vC5, 지폭
Gui,1: Add, CheckBox, x171 y215 w50 h20 vC6, 폭류

Gui,1: Add, CheckBox, x311 y90 w50 h20 vC7, 마기
Gui,1: Add, CheckBox, x311 y115 w50 h20 vC8, 명상
Gui,1: Add, CheckBox, x311 y140 w50 h20 checked, 기원
Gui,1: Add, CheckBox, x311 y165 w50 h20 checked, 공증

Gui,1: Add, DropDownList, x222 y92 w60 h60 vD1, |1|2|3|4|5|6|7|8|9|
Gui,1: Add, DropDownList, x222 y117 w60 h60 vD2, |1|2|3|4|5|6|7|8|9|
Gui,1: Add, DropDownList, x222 y142 w60 h60 vD3, |1|2|3|4|5|6|7|8|9|
Gui,1: Add, DropDownList, x222 y167 w60 h60 vD4, |1|2|3|4|5|6|7|8|9|
Gui,1: Add, DropDownList, x222 y192 w60 h60 vD5, |1|2|3|4|5|6|7|8|9|
Gui,1: Add, DropDownList, x222 y217 w60 h60 vD6, |1|2|3|4|5|6|7|8|9|

Gui,1: Add, DropDownList, x361 y92 w60 h60 vD7, |1|2|3|4|5|6|7|8|9|
Gui,1: Add, DropDownList, x361 y117 w60 h60 vD8, |1|2|3|4|5|6|7|8|9|
Gui,1: Add, DropDownList, x361 y142 w60 h30 , 0||
Gui,1: Add, DropDownList, x361 y167 w60 h30 , 2||

Gui,1: Add, CheckBox, x311 y205 w53 h20 vC9, 십억경
Gui,1: Add, DropDownList, x371 y205 w52 h60 vD9, a|b|c|d|e|f|g

Gui,1: Show, x600 y310 h261 w458, Baram03
OnMessage(0x201, "WM_LBUTTONDOWN")
WM_LBUTTONDOWN() 
PostMessage, 0xA1, 2,,, A 
}
WinSet, Transparent, 230 , Baram03
WinSet, Region, R35-35 W458 H261 0-0

IniRead, L_C1, C:/Baram03/save.ini, ini, C1, 0 
GuiControl,,C1, %L_C1% 
IniRead, L_C2, C:/Baram03/save.ini, ini, C2, 0 
GuiControl,,C2, %L_C2% 
IniRead, L_C3, C:/Baram03/save.ini, ini, C3, 0 
GuiControl,,C3, %L_C3% 
IniRead, L_C4, C:/Baram03/save.ini, ini, C4, 0 
GuiControl,,C4, %L_C4% 
IniRead, L_C5, C:/Baram03/save.ini, ini, C5, 0 
GuiControl,,C5, %L_C5% 
IniRead, L_C6, C:/Baram03/save.ini, ini, C6, 0 
GuiControl,,C6, %L_C6% 
IniRead, L_C7, C:/Baram03/save.ini, ini, C7, 0 
GuiControl,,C7, %L_C7% 
IniRead, L_C8, C:/Baram03/save.ini, ini, C8, 0 
GuiControl,,C8, %L_C8% 

IniRead, L_D1, C:/Baram03/save.ini, ini, D1, 0
L_D1a:=L_D1+1
GuiControl, Choose,D1, %L_D1a%
IniRead, L_D2, C:/Baram03/save.ini, ini, D2, 0
L_D2a:=L_D2+1
GuiControl, Choose,D2, %L_D2a%
IniRead, L_D3, C:/Baram03/save.ini, ini, D3, 0
L_D3a:=L_D3+1
GuiControl, Choose,D3, %L_D3a%
IniRead, L_D4, C:/Baram03/save.ini, ini, D4, 0
L_D4a:=L_D4+1
GuiControl, Choose,D4, %L_D4a%
IniRead, L_D5, C:/Baram03/save.ini, ini, D5, 0
L_D5a:=L_D5+1
GuiControl, Choose,D5, %L_D5a%
IniRead, L_D6, C:/Baram03/save.ini, ini, D6, 0
L_D6a:=L_D6+1
GuiControl, Choose,D6, %L_D6a%
IniRead, L_D7, C:/Baram03/save.ini, ini, D7, 0
L_D7a:=L_D7+1
GuiControl, Choose,D7, %L_D7a%
IniRead, L_D8, C:/Baram03/save.ini, ini, D8, 0
L_D8a:=L_D8+1
GuiControl, Choose,D8, %L_D8a%
return


;###########################################################################


Brm:
return


ButtonExit:
GuiControl,disable,exit
GuiControl,hide,exit
GuiControl,enable,start
GuiControl,Show,start
IniWrite, 0, C:/Baram03/save.ini, ini, FG
ExitApp
return



ButtonStart:
Gui,Submit,nohide
GuiControl,disable,start
GuiControl,hide,start
GuiControl,enable,exit
GuiControl,Show,exit
WinWait, 바람의나라, 
IfWinNotActive, 바람의나라, , WinActivate, 바람의나라, 
WinWaitActive, 바람의나라, 
Winmove, 0, 0
GuiControlGet, C1
If C1 = 1
{
Settimer, Ms1, 340
}
GuiControlGet, C2
If C2 = 1
{
Settimer, Ms2, 1000
}
GuiControlGet, C3
If C3 = 1
{
Settimer, Ms3, 1783
}
GuiControlGet, C4
If C4 = 1
{
Settimer, Ms4, 3000
}
GuiControlGet, C7
If C7 = 1
{
Settimer, Ms7, 10700
}
Settimer, Ms5, 8000
Settimer, Mpt, 5138
Settimer, Hel, 250
Settimer, Buf, 3050
Settimer, Out, 3100
pause
return


;###########################################################################


Mpt:
Thread, NoTimers
Imagesearch, vx, vy, 200, 10, 610, 500, *15 C:/Baram03/potal2.bmp
If Errorlevel = 0
{
IniWrite, 2, C:/Baram03/save.ini, ini, FG
gosub, Exp
Sleep, 500
ControlSend,, {Esc}, 바람의나라
ControlSend,, {Ctrl down}, 바람의나라
ControlSend,, {r}, 바람의나라
ControlSend,, {Ctrl up}, 바람의나라
Sleep,2800
va:=vx+161
vb:=vy
a:= (vb*65536)+va
PostMessage, 0x200, 0, %a%, , 바람의나라
PostMessage, 0x201, 1, %a%, , 바람의나라
PostMessage, 0x202, 0, %a%, , 바람의나라
Sleep,100
k:= (62*65536)+459
PostMessage, 0x200, 0, %k%, , 바람의나라
PostMessage, 0x201, 1, %k%, , 바람의나라
PostMessage, 0x202, 0, %k%, , 바람의나라
Sleep, 1000
ControlSend,, {Down}, 바람의나라
ControlSend,, {Enter}, 바람의나라
Sleep, 500
Imagesearch, VX, VY, 300, 1, 540, 80, *15 C:/Baram03/Room1.bmp
If Errorlevel = 0
{
Sleep, 77
ControlSend,, {Up}, 바람의나라
Sleep, 78
ControlSend,, {3}, 바람의나라
Sleep, 597
ControlSend,, {3}, 바람의나라
IniWrite, 1, C:/Baram03/save.ini, ini, FG
}
}
return

Exp:
Gui,Submit,Nohide
Thread, NoTimers
GuiControlGet, C9
if C9=1
{
Imagesearch, vx, vy, 890, 738, 915, 750, *10 C:/Baram03/Exp.bmp
If Errorlevel = 0
{
Loop, 4
  {
  ControlSend,,{u},바람의나라 
  Sleep, 50
  ControlSend,,{%D3%},바람의나라 
  Sleep, 800
  ControlSend,,{Down},바람의나라 
  Sleep, 150
  ControlSend,,{Enter},바람의나라 
  Sleep, 800
  ControlSend,,{Esc},바람의나라 
  }
}
}
return


Out:
Thread, NoTimers
Imagesearch, VX, VY, 10, 30, 820, 750, *100 C:/Baram03/out.bmp
If Errorlevel = 0
{
Controlsend,, {down}, 바람의나라
}
return


;###########################################################################


Hel:
Thread, NoTimers
Imagesearch, VX, VY, 300, 1, 540, 80, *15 C:/Baram03/Room1.bmp
If Errorlevel = 0
{
Imagesearch, VX, VY, 800, 600, 1024, 750, *30 C:/Baram03/hph.bmp
If Errorlevel = 0
{
Controlsend,,{0}, 바람의나라
Controlsend,,{Home}, 바람의나라
Controlsend,,{Enter}, 바람의나라
}
Imagesearch, VX, VY, 800, 600, 1024, 750, *30 C:/Baram03/mph.bmp
If Errorlevel = 0
{
Controlsend,,{2}, 바람의나라
Controlsend,,{2}, 바람의나라
}
}
return

Buf:
Gui,Submit,Nohide
Thread, NoTimers
Guicontrolget, C8
if C8 = 1
{
Imagesearch, VX, VY, 300, 1, 540, 80, *15 C:/Baram03/Room1.bmp
If Errorlevel = 0
{
Imagesearch, VX, VY, 30, 30, 300, 400, *30 C:/Baram03/명상.bmp
If Errorlevel = 1
{
IniWrite, 2, C:/Baram03/save.ini, ini, FG
Sleep, 500
ControlSend,, {%D8%}, 바람의나라
Sleep,1600
IniWrite, 1, C:/Baram03/save.ini, ini, FG
}
}
}
return

;###########################################################################


Ms1:
Gui,Submit,Nohide
Thread, NoTimers
Imagesearch, VX, VY,10, 30, 815, 655, *10 C:/Baram03/mob.bmp
If Errorlevel = 0
{
Controlsend,,{%D1%}, 바람의나라
Controlsend,,{Right}, 바람의나라
Controlsend,,{Enter}, 바람의나라
}
return

Ms2:
Gui,Submit,Nohide
Thread, NoTimers
Imagesearch, VX, VY,10, 30, 815, 655, *10 C:/Baram03/mob.bmp
If Errorlevel = 0
{
Controlsend,,{%D2%}, 바람의나라
Controlsend,,{Home}, 바람의나라
Controlsend,,{Right}, 바람의나라
Controlsend,,{Enter}, 바람의나라
}
return

Ms3:
Gui,Submit,Nohide
Thread, NoTimers
Controlsend,,{%D3%}, 바람의나라
Controlsend,,{%D3%}, 바람의나라
return

Ms4:
Gui,Submit,Nohide
Thread, NoTimers
Imagesearch, VX, VY, 340, 200, 470, 350, *10 C:/Baram03/mob.bmp
If Errorlevel = 0
{
Random, ran, 1, 3
if ran = 1
{
Controlsend,, {Left}, 바람의나라
Controlsend,, {%D4%}, 바람의나라
}
if ran = 2
{
Controlsend,, {Right}, 바람의나라
Controlsend,, {%D4%}, 바람의나라
}
if ran = 3
{
Controlsend,, {Down}, 바람의나라
Controlsend,, {%D4%}, 바람의나라
}
}
return

Ms5:
Gui,Submit,nohide
Guicontrolget, C5
if C5 = 1
{
Imagesearch, vx, vy, 980, 760, 1001, 780, *100 C:/Baram03/12.bmp
If Errorlevel = 0
{
Controlsend,,{%D5%}, 바람의나라
}}
Guicontrolget, C6
if C6 = 1
{
Imagesearch, vx, vy, 980, 760, 1001, 780, *100 C:/Baram03/12.bmp
If Errorlevel = 0
{
Controlsend,,{%D6%}, 바람의나라
}}
return

Ms7:
Gui,Submit,Nohide
Thread, NoTimers
Controlsend,,{%D7%}, 바람의나라
return


;###########################################################################


GuiClose:
IniWrite, 0, C:/Baram03/save.ini, ini, FG
ExitApp
return

GuiContextMenu:
Gui,Submit,Nohide
GuiControlget,C1
IniWrite,%C1%, C:/Baram03/save.ini, ini, C1
GuiControlget,C2
IniWrite,%C2%, C:/Baram03/save.ini, ini, C2
GuiControlget,C3
IniWrite,%C3%, C:/Baram03/save.ini, ini, C3
GuiControlget,C4
IniWrite,%C4%, C:/Baram03/save.ini, ini, C4
GuiControlget,C5
IniWrite,%C5%, C:/Baram03/save.ini, ini, C5
GuiControlget,C6
IniWrite,%C6%, C:/Baram03/save.ini, ini, C6
GuiControlget,C7
IniWrite,%C7%, C:/Baram03/save.ini, ini, C7
GuiControlget,C8
IniWrite,%C8%, C:/Baram03/save.ini, ini, C8
GuiControlget,C13
IniWrite,%C8%, C:/Baram03/save.ini, ini, C13
GuiControlget,D1
IniWrite,%D1%, C:/Baram03/save.ini, ini, D1
GuiControlget,D2
IniWrite,%D2%, C:/Baram03/save.ini, ini, D2
GuiControlget,D3
IniWrite,%D3%, C:/Baram03/save.ini, ini, D3
GuiControlget,D4
IniWrite,%D4%, C:/Baram03/save.ini, ini, D4
GuiControlget,D5
IniWrite,%D5%, C:/Baram03/save.ini, ini, D5
GuiControlget,D6
IniWrite,%D6%, C:/Baram03/save.ini, ini, D6
GuiControlget,D7
IniWrite,%D7%, C:/Baram03/save.ini, ini, D7
GuiControlget,D8
IniWrite,%D8%, C:/Baram03/save.ini, ini, D8
IniWrite, 0, C:/Baram03/save.ini, ini, FG
ExitApp
return


]::
Pause,off
If (psw=1)
{
IniWrite, 2, C:/Baram03/save.ini, ini, FG
psw=2
Pause,on
return
}
If (psw=2)
{
IniWrite, 1, C:/Baram03/save.ini, ini, FG
psw=1
}
return











[AutoHotkey Script 2]


#NoEnv
#SingleInstance force
SetKeyDelay, -1
SetWinDelay,-1
SetBatchLines,-1
SetControlDelay,-1
CoordMode, Pixel, Screen

IniWrite, 2, C:/Baram03/save.ini, ini, FG

Settimer, Xmv, 311
Settimer, Ymv, 60
return


;###########################################################################


Xmv:
IniRead, RFG, C:/Baram03/save.ini, ini, FG, 0 
if (RFG=0)
{
ExitApp
}
IniRead, RFG, C:/Baram03/save.ini, ini, FG, 0 
if (RFG=1)
{
gosub,Lax2
Imagesearch, VX, VY, 300, 1, 540, 80, *15 C:/Baram03/Room1.bmp
If Errorlevel = 0
{
if (x<16)
ControlSend,,{Right},바람의나라 
if (x>16)
ControlSend,,{Left},바람의나라 
}
Imagesearch, VX, VY, 300, 1, 540, 80, *15 C:/Baram03/Room2.bmp
If Errorlevel = 0
{
if(x<18)
ControlSend,,{Right},바람의나라 
if(x>18)
ControlSend,,{Left},바람의나라 
}
}
return

Ymv:
IniRead, RFG, C:/Baram03/save.ini, ini, FG, 0 
if (RFG=1)
{
Imagesearch, vx, vy, 980, 760, 993, 780, *20 C:/Baram03/0.bmp
If Errorlevel = 0
{
ControlSend,,{Down},바람의나라
return
}
Imagesearch, vx, vy, 980, 760, 1001, 780, *10 C:/Baram03/09.bmp
If Errorlevel = 0
{
ControlSend,,{Down},바람의나라 
return
}
Imagesearch, vx, vy, 980, 760, 1001, 780, *10 C:/Baram03/10.bmp
If Errorlevel = 0
{
ControlSend,,{Down},바람의나라 
return
}
Imagesearch, vx, vy, 980, 760, 1001, 780, *10 C:/Baram03/11.bmp
If Errorlevel = 0
{
ControlSend,,{Down},바람의나라 
return
}
Imagesearch, vx, vy, 980, 760, 1001, 780, *10 C:/Baram03/12.bmp
If Errorlevel = 1
{
ControlSend,,{Up},바람의나라
Sleep, 123
ControlSend,,{Up},바람의나라
}
}
return


;##########################################################################################


Lax2:
number = 0,1,2
loop,parse,number,`,
{
ImageSearch, ooVX, ooVY, 923, 762, 936, 774, *51 C:/Baram03/%A_LoopField%.bmp
If Errorlevel = 0
{
ax2 = %A_LoopField%
goto, Lax1
} }

Lax1:
number = 0,1,2,3,4,5,6,7,8,9
loop,parse,number,`,
{
ImageSearch, oVX, oVY, 931, 762, 944, 774, *51 C:/Baram03/%A_LoopField%.bmp
If Errorlevel = 0
{
ax1 = %A_LoopField%
goto, Crd
} }

Crd:
x:=ax2*10 + ax1
return


;###########################################################################


#q::
return




Posted by Khan64
,

메이플스토리 매크로 만들기




안녕하세요

오늘은 메이플스토리 매크로에 대한

제작 포스트를 쓰도록 하겠습니다.


먼저 진행하기 앞서 찾아와주신

모든분들 정말 감사합니다.   :)


포스팅은 제작기에 대한 간략한 설명

어떠한 방식으로 만드는지, 제작후 영상,

마지막으로 테스트 스크립트 공개순으로 

포스팅 하였습니다.


시작하기전 당부의 말씀을 드리면 본 포스팅은 프로그램 배포는 하지 않습니다.

제작방법을 알려드리는 포스팅이며 제작방법에 대한 강의나 스크립트 의뢰는 가능합니다 :D



메이플 매크로


메이플스토리 매크로 제작이야기 - 1



사실 작년 초여름 이미 메이플 스토리 매크로를 제작했었고 제작내용에 관하여 포스트 한 적이

있었습니다. 하지만 한시적으로 소수인원을 대상으로 테스트정도만 진행하였고 포스트 글또한

금방 내려두었습니다.  그동안 메일이나 쪽지등으로 매크로를 공유받고 싶다는 요청의 연락을

매우 많이 받았었습니다만 개인적으로 답장을 보내드리지 못해서 죄송했습니다.


오늘은 단순히 메이플스토리 매크로를 만들고 그에관한 자료 공유 포스트가 아니라 직접만들고

제작당시 작성했던 소스를 공개할 예정입니다.   여기서 소스란 하나의 프로그램이 되기전,

즉 컴파일하기이전의 것으로 매크로가 어떻게 작동하는지 그 방법을 모두 살펴 볼 수 있습니다.


대부분의 매크로 만드시는분들은 개인적으로 쓰시거나 / 비싸게 팔거나 / 비공개 커뮤니티를 통해

공유하는 방식으로 사용합니다. 이유는 매크로 배포는 약관위반과 더불어  법률 위반이기 때문입니다.

또한 사용하는것 자체만으로도 약관상 위배 이기때문에 매크로의 제작및 사용여부는 본인의 판단하에

이루어져야 할것입니다. 




서론이 길었지만,

어쨋든 오늘 이포스트가 다 끝날때 쯤에는 들러주신 모든분들이

원하는 정보를 얻으시고 그 지식을 함께 공유해 나갈 수 있었으면 좋겠습니다.




메이플스토리 매크로 제작과정 - 2



첫째로 매크로는 AutoHotkey 를 이용해서 제작하려고 합니다.

가볍고 꽤 강력한 프리웨어로서 C를 기반으로두었기때문에 매크로 이외에도 그 쓰임새가 넓습니다.


둘째로 이번 제작을 해볼 게임은 " 메이플스토리 " 입니다.

워낙 유명한 게임이니 대부분 아시리라 생각합니다. 예전에 만들어둔 백업자료가 거의다 날라가고

남은게 이미지자료 정도 뿐이 안되서 빨리작업한데다가  많은분들이 쉽게 따라하실 수 있도록 하기

위하여 쉬운명령어들로만 구성하였습니다.


자동사냥 매크로가 단순하다 뛰어나다의 그 기준은

얼마나 예외옵션을 많이두는지 / 가독성이 얼마나 뛰어나는지, 에서 차이가 나게 됩니다.


예외옵션이란 매크로는 사용자가 입력한 명령에서 절대 벗어나지 않습니다.

하지만 모든상황에는 예외가 발생합니다. 이러한 예외처리를 해두지 않으면 그 상황에서

아무 입력이 안되어 정지하거나, 반대로 꼬여버리는 현상이 발생하게 됩니다.

혹은 예외옵션을 활용하여 인공지능인척(?) 도 가능합니다. 이런 활용적인부분은

나중에 따로 포스트 하도록 하겠습니다.


게임매크로는 뭐라해도 반응속도가 생명인만큼 가독성이 뛰어나야 우리가 원하는 속도의

매크로를 만들 수 가 있겠습니다 :) 소스를 보기좋게 정리하는것부터가 그 시작입니다.

그이후에야 알고리즘의 개선이나 서브루틴및 함수의 활용이 더해지는거라고 생각합니다.







아래는 이번주 제작했던 메이플스토리 매크로 영상 입니다.





메이플 스토리 매크로 제작은? - 3



사실은 매크로는 자신이 어떻게 만드냐에 따라 그 기능과 효율차이가 많이 납니다.

또한 스크립트에 많은 기능을 담을수록 힘들고 어려워 집니다. 


위 사진처럼 1000줄을 쓸수도.. 15000줄을 쓸수도 300줄을 쓸수도

그 기능에 따라 소스의 길이나 내용은 완전 달라집니다.


스크립트를 전부 공개하는것은 악용될 소지가 많아 영상처럼 테스트용으로 

작성했던 스크립트만 공개 하도록 하겠습니다. 해당 스크립트를 기반으로 다양한 기능을

추가해보시거나 소스를 응용하여 직접 만들어 보시는건 어떨까요? :)


오토핫키 스크립트 작성법이나 다른 스크립트 제작의뢰도 같이 받고있습니다.

이메일 : cai6452@naver.com







스크립트




Gui,3: +LastFound +AlwaysOnTop -Caption +ToolWindow 

Gui,3: Add, Button, x20 y10 w82 h16 gBop,Option

Gui,3: Add, Button, x20 y30 w82 h16 gBst,Start

Gui,3: Add, Picture, x0 y0 BackgroundTrans, C:\KHAN\Mps\bn.png

Gui,3: Show, x400 y100 w500 h357, Mps


Gui,1: Color, FFFAFA

Gui,1: Add, GroupBox, x11 y14 w250 h190 cgreen, Option

Gui,1: Add, GroupBox, x271 y14 w180 h85 cgreen, Sub Skill

Gui,1: Add, GroupBox, x271 y100 w180 h82 cgreen, Buff

Gui,1: Add, Text, x23 y47 w70 h20 , 사냥터

Gui,1: Add, Text, x23 y87 w100 h20 , 물약  f11/f12

Gui,1: Add, Text, x23 y117 w100 h20 , 탐지기 알림

Gui,1: Add, Text, x23 y167 w50 h20 , 주스킬

Gui,1: Add, Text, x153 y167 w50 h20 , 점프

Gui,1: Add, Text, x425 y39 w15 h20, /s

Gui,1: Add, Text, x425 y69 w15 h20, /s

Gui,1: Add, Text, x425 y122 w15 h20, /s

Gui,1: Add, Text, x425 y152 w15 h20, /s


Gui,1: Add, ComboBox, x101 y44 w150 h100 vBa, 또 다른 망각의길4|남겨진 용의 둥지1|준비중

Gui,1: Add, Radio, x121 y84 w50 h20 vR1, On

Gui,1: Add, Radio, x171 y84 w70 h20 , Off

Gui,1: Add, Radio, x121 y114 w50 h20 Group vR2, On

Gui,1: Add, Radio, x171 y114 w70 h20, Off

Gui,1: Add, ComboBox, x74 y164 w60 h80 vB1, Ctrl||Shift|Alt|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|f11

Gui,1: Add, ComboBox, x191 y164 w60 h80 vB2, Alt||Shift|Ctrl|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z


Gui,1: Add, CheckBox, x281 y36 w20 h20 vC1,

Gui,1: Add, CheckBox, x281 y66 w20 h20 vC2,

Gui,1: Add, ComboBox, x305 y36 w65 h60 vB3, a||b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z

Gui,1: Add, ComboBox, x305 y66 w65 h60 vB4, a||b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z

Gui,1: Add, Edit, x381 y36 w40 h24 vE1,10

Gui,1: Add, Edit, x381 y66 w40 h24 vE2,10


Gui,1: Add, CheckBox, x281 y119 w20 h20 vC3,

Gui,1: Add, CheckBox, x281 y149 w20 h20 vC4, 

Gui,1: Add, ComboBox, x305 y119 w65 h60 vB5, PgDn||PgUp|Home|End|Ins|Del|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z

Gui,1: Add, ComboBox, x305 y149 w65 h60 vB6, PgUp||PgDn|Home|End|Ins|Del|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z

Gui,1: Add, Edit, x381 y119 w40 h24 vE3, 60

Gui,1: Add, Edit, x381 y149 w40 h24 vE4, 60


Gui,1: Add, Button, x271 y185 w85 h20 gBld, Load

Gui,1: Add, Button, x366 y185 w85 h20 gBok, Ok


OnMessage(0x201, "WM_LBUTTONDOWN")

WM_LBUTTONDOWN() 

PostMessage, 0xA1, 2,,, A 

}

WinSet, Transparent, 205 , Mps

WinSet, Region, R35-35 W500 H357 0-0

Pause

return


Bop:

Gui,1: +LastFound +AlwaysOnTop -Caption +ToolWindow 

Gui,1: Show, x700 y400 h272 w576, option

WinSet, Transparent, 230 , option

WinSet, Region, R10-10 W576 H272 0-0

Gui,Submit,nohide

return


Bld:

IniRead, L_C1, C:/KHAN/Mps/save.ini, ini, C1, 0 

GuiControl,,C1, %L_C1% 

IniRead, L_C2, C:/KHAN/Mps/save.ini, ini, C2, 0 

GuiControl,,C2, %L_C2% 

IniRead, L_C3, C:/KHAN/Mps/save.ini, ini, C3, 0 

GuiControl,,C3, %L_C3% 

IniRead, L_C4, C:/KHAN/Mps/save.ini, ini, C4, 0 

GuiControl,,C4, %L_C4% 

IniRead, L_E1, C:/KHAN/Mps/save.ini, ini, E1, 0 

GuiControl,,E1, %L_E1% 

IniRead, L_E2, C:/KHAN/Mps/save.ini, ini, E2, 0 

GuiControl,,E2, %L_E2% 

IniRead, L_E3, C:/KHAN/Mps/save.ini, ini, E3, 0 

GuiControl,,E3, %L_E3% 

IniRead, L_E4, C:/KHAN/Mps/save.ini, ini, E4, 0 

GuiControl,,E4, %L_E4% 

IniRead, L_R1, C:/KHAN/Mps/save.ini, ini, R1, 0 

GuiControl,,R1, %L_R1% 

IniRead, L_R2, C:/KHAN/Mps/save.ini, ini, R2, 0 

GuiControl,,R2, %L_R2% 

IniRead, L_B1, C:/KHAN/Mps/save.ini, ini, B1, 0 

GuiControl,,B1, %L_B1% 

IniRead, L_B2, C:/KHAN/Mps/save.ini, ini, B2, 0 

GuiControl,,B2, %L_B2% 

IniRead, L_B3, C:/KHAN/Mps/save.ini, ini, B3, 0 

GuiControl,,B3, %L_B3% 

IniRead, L_B4, C:/KHAN/Mps/save.ini, ini, B4, 0 

GuiControl,,B4, %L_B4% 

IniRead, L_B5, C:/KHAN/Mps/save.ini, ini, B5, 0 

GuiControl,,B5, %L_B5% 

IniRead, L_B6, C:/KHAN/Mps/save.ini, ini, B6, 0 

GuiControl,,B6, %L_B6% 

return


Bok:

Gui, Submit, Hide

GuiControlget,E1

IniWrite,%E1%, C:\KHAN/Mps/save.ini, ini, E1

GuiControlget,E2

IniWrite,%E2%, C:\KHAN/Mps/save.ini, ini, E2

GuiControlget,E3

IniWrite,%E3%, C:\KHAN/Mps/save.ini, ini, E3

GuiControlget,E4

IniWrite,%E4%, C:\KHAN/Mps/save.ini, ini, E4

GuiControlget,B1

IniWrite,%B1%, C:\KHAN/Mps/save.ini, ini, B1

GuiControlget,B2

IniWrite,%B2%, C:\KHAN/Mps/save.ini, ini, B2

GuiControlget,B3

IniWrite,%B3%, C:\KHAN/Mps/save.ini, ini, B3

GuiControlget,B4

IniWrite,%B4%, C:\KHAN/Mps/save.ini, ini, B4

GuiControlget,B5

IniWrite,%B5%, C:\KHAN/Mps/save.ini, ini, B5

GuiControlget,B6

IniWrite,%B6%, C:\KHAN/Mps/save.ini, ini, B6

GuiControlget,R1

if R1 = 1

{

Settimer, Ma, 300

}

IniWrite,%R1%, C:\KHAN/Mps/save.ini, ini, R1

GuiControlget,R2

if R2 = 1

{

Settimer, Mb, 1000

}

IniWrite,%R2%, C:\KHAN/Mps/save.ini, ini, R2

GuiControlget,C1

if C1 = 1

{

Settimer, S1,%E1%000

}

IniWrite,%C1%, C:\KHAN/Mps/save.ini, ini, C1

GuiControlget,C2

if C2 = 1

{

Settimer, S2,%E2%000

}

IniWrite,%C2%, C:\KHAN/Mps/save.ini, ini, C2

GuiControlget,C3

if C3 = 1

{

Settimer, S3,%E3%000

}

IniWrite,%C3%, C:\KHAN/Mps/save.ini, ini, C3

GuiControlget,C4

if C4 = 1

{

Settimer, S4,%E4%000

}

IniWrite,%C4%, C:\KHAN/Mps/save.ini, ini, C4

GuiControlget,Ba

if Ba = 또 다른 망각의길4

{

Settimer, Aak, 300

Settimer, Mve1, 2500

Settimer, Upr1, 500

}

if Ba = 남겨진 용의 둥지1

{

Settimer, Bak, 230

Settimer, Mve2, 1000

Settimer, Upr2, 500

}

return


]::

pause

Sendinput, {%B1% Up}

return


Bst:

WinWait, MapleStory, 

IfWinNotActive, MapleStory, , WinActivate, MapleStory, 

WinWaitActive, MapleStory, 

WinMove, 0, 0

Settimer, cfm, 1800000

Settimer, Err, 600000

return




Aak:

Thread, Notimers

Gui, Submit, nohide

Imagesearch, vr, vt, 1, 1, 1024, 768, *63 C:\KHAN\Mps\nw.bmp

Imagesearch, vx, vy, vr-320, vt-250, vr, vt, *11 C:\KHAN\Mps\mv.bmp

If Errorlevel = 0

{

Sendinput, {Right Up}

Sendinput, {Left Down}

Sleep, 50

Sendinput, {%B1% Down}

Sleep, 1000

}

If Errorlevel = 0

{

Sendinput, {%B1% up}

}

Imagesearch, vr, vt, 1, 1, 1024, 768, *63 C:\KHAN\Mps\nw.bmp

Imagesearch, vx, vy, vr, vt-250, vr+320, vt, *11 C:\KHAN\Mps\mv.bmp

If Errorlevel = 0

{

Sendinput, {Left Up}

Sendinput, {Right Down}

Sleep, 50

Sendinput, {%B1% Down}

Sleep, 1000

}

If Errorlevel = 0

{

Sendinput, {%B1% up}

}

return



Mve1:

Thread, NoTimers

Imagesearch, va, vb, 117, 170, 157, 186, *12 C:\KHAN\Mps\bs.bmp

If Errorlevel = 0

{

Sendinput, {Right up}

Sleep, 50

Sendinput, {Left Down}

}

Imagesearch, va, vb, 62, 147, 157, 167, *12 C:\KHAN\Mps\bs.bmp

If Errorlevel = 0

{

Sendinput, {Right up}

Sleep, 50

Sendinput, {Left Down}

}

Imagesearch, va, vb, 92, 107, 157, 124, *12 C:\KHAN\Mps\bs.bmp

If Errorlevel = 0

{

Sendinput, {Right up}

Sleep, 50

Sendinput, {Left Down}

}

Imagesearch, va, vb, 32, 127, 151, 144, *12 C:\KHAN\Mps\bs.bmp

If Errorlevel = 0

{

Sendinput, {Left up}

Sleep, 50

Sendinput, {Right Down}

}

Imagesearch, va, vb, 32, 170, 117, 186, *12 C:\KHAN\Mps\bs.bmp

If Errorlevel = 0

{

Sendinput, {Left up}

Sleep, 50

Sendinput, {Right Down}

}

return


Upr1:

Thread, NoTimers

Imagesearch, va, vb, 112, 170, 120, 186, *12 C:\KHAN\Mps\bs.bmp

If Errorlevel = 0

{

Sendinput, {Left Up}

Sendinput, {Right Up}

Sleep, 50

Sendinput, {Up Down}

Sleep, 50

Sendinput, {Up up}

Sendinput, {Right Down}

}

Imagesearch, va, vb, 146, 127, 157, 144, *12 C:\KHAN\Mps\bs.bmp

If Errorlevel = 0

{

Sendinput, {Down Down}

Sleep, 50

Sendinput, {%B2% Down}

Sleep, 50

Sendinput, {%B2% Up}

Sleep, 50

Sendinput, {Down Up}

}

return



Bak:

Thread, Notimers

Gui, Submit, nohide

Imagesearch, vr, vt, 1, 1, 1024, 768, *60 C:\KHAN\Mps\nw2.bmp

Imagesearch, vx, vy, vr-320, vt-250, vr, vt, *14 C:\KHAN\Mps\mv2.bmp

If Errorlevel = 0

{

Sendinput, {Right Up}

Sendinput, {Left Down}

Sleep, 50

Sendinput, {%B1% Down}

Sleep, 1000

}

If Errorlevel = 0

{

Sendinput, {%B1% up}

}

Imagesearch, vr, vt, 1, 1, 1024, 768, *60 C:\KHAN\Mps\nw2.bmp

Imagesearch, vx, vy, vr, vt-250, vr+320, vt, *14 C:\KHAN\Mps\mv2.bmp

If Errorlevel = 0

{

Sendinput, {Left Up}

Sendinput, {Right Down}

Sleep, 50

Sendinput, {%B1% Down}

Sleep, 1000

}

If Errorlevel = 0

{

Sendinput, {%B1% up}

}

return


Mve2:

Thread, Notimers

Imagesearch, PX, PY, 39, 169, 72, 187, *12 C:\KHAN\Mps\bs.bmp

If Errorlevel = 0

{

Sendinput, {Left up}

Sleep, 50

Sendinput, {Right Down}

}

Imagesearch, PX, PY, 39, 145, 72, 166, *12 C:\KHAN\Mps\bs.bmp

If Errorlevel = 0

{

Sendinput, {Left up}

Sleep, 50

Sendinput, {Right Down}

}

Imagesearch, PX, PY, 39, 125, 56, 143, *12 C:\KHAN\Mps\bs.bmp

If Errorlevel = 0

{

Sendinput, {Left up}

Sleep, 50

Sendinput, {Right Down}

}

Imagesearch, PX, PY, 39, 108, 96, 125, *12 C:\KHAN\Mps\bs.bmp

If Errorlevel = 0

{

Sendinput, {Left up}

Sleep, 50

Sendinput, {Right Down}

}

Imagesearch, PX1, PY1, 85, 169, 137, 187, *12 C:\KHAN\Mps\bs.bmp

If Errorlevel = 0

{

Sendinput, {Right up}

Sleep, 50

Sendinput, {Left Down}

}

Imagesearch, PX1, PY1, 80, 145, 112, 166, *12 C:\KHAN\Mps\bs.bmp

If Errorlevel = 0

{

Sendinput, {Right up}

Sleep, 50

Sendinput, {Left Down}

}

Imagesearch, PX1, PY1, 62, 125, 96, 143, *12 C:\KHAN\Mps\bs.bmp

If Errorlevel = 0

{

Sendinput, {Right up}

Sleep, 50

Sendinput, {Left Down}

}

Imagesearch, PX3, PY3, 101, 128, 140, 166, *12 C:\KHAN\Mps\bs.bmp

If Errorlevel = 0

{

Sendinput, {Up up}

Sendinput, {Right down}

Sleep, 50

Sendinput, {Down down}

Sendinput, {%B2% Down}

Sleep,50

Sendinput, {%B2% up}

Sleep,100

Sendinput, {Down Up}


}

return


Upr2:

Thread, NoTimers

Gui, Submit, Nohide

Imagesearch, PX2, PY2, 75, 174, 86, 187, *12 C:\KHAN\Mps\bs.bmp

If Errorlevel = 0

{

Sendinput, {Up up}

Sleep, 50

Sendinput, {Left down}

Sleep, 50

Sendinput, {%B2% down}

Sleep, 50

Sendinput, {%B2% up}

Sleep, 200

Sendinput, {Up down}

Sendinput, {Left Up}

}

Imagesearch, PX2, PY2, 75, 157, 86, 164, *12 C:\KHAN\Mps\bs.bmp

If Errorlevel = 0

{

Sendinput, {Up up}

Sleep, 50m

Sendinput, {Left down}

Sendinput, {%B2% down}

Sleep, 50

Sendinput, {%B2% up}

Sleep, 200

Sendinput, {Up down}

Sendinput, {Left up}

}

Imagesearch, PX2, PY2, 60, 134, 68, 144, *12 C:\KHAN\Mps\bs.bmp

If Errorlevel = 0

{

Sendinput, {Up up}

Sleep, 50

Sendinput, {%B2% down}

Sleep, 50

Sendinput, {%B2% up}

Sleep, 200

Sendinput, {Up down}

}

return




S1:

Thread, NoTimers

Gui, Submit, Nohide

Sleep, 100

Sendinput, {%B3% down}

Sleep, 50

Sendinput, {%B3% up}

return


S2:

Thread, NoTimers

Gui, Submit, Nohide

Sleep, 100

Sendinput, {%B4% down}

Sleep, 50

Sendinput, {%B4% up}

return


S3:

Thread, NoTimers

Gui, Submit, Nohide

Sleep, 50

Sendinput, {%B5% down}

Sleep, 50

Sendinput, {%B5% up}

Sleep, 4000

return


S4:

Thread, NoTimers

Gui, Submit, Nohide

Sleep, 50

Sendinput, {%B6% down}

Sleep, 50

Sendinput, {%B6% up}

Sleep, 4000

return



Ma:

Thread, NoTimers

Imagesearch, p1, p2, 340, 730, 365, 790, *10 C:\KHAN\Mps\h1.bmp

If Errorlevel = 1

{

Sendinput, {F11 down}

Sleep,50

Sendinput, {F11 up}

}

Imagesearch, p3, p4, 500, 750, 515, 790, *10 C:\KHAN\Mps\h2.bmp

If Errorlevel = 1

{

Sendinput, {F12 down}

Sleep,50

Sendinput, {F12 up}

}

return


Mb:

Thread, NoTimers

ImageSearch, VX, VY, 1, 1, A_ScreenWidth, A_ScreenHeight, *10 C:\KHAN\Mps\gt.bmp

If Errorlevel = 0

{

Soundplay, C:\KHAN\Mps\Collide.mp3

pause

}

return



cfm:

Thread, NoTimers

Urldownloadtofile, http://mynewblogcai2.blogspot.kr/2016/05/blog-post.html, C:\KHAN\Temp2.txt

Fileread, Int, C:\KHAN\Temp2.txt

Ifinstring, Int, 0x01

{

filedelete,C:\KHAN\Temp2.txt

}

else

{

filedelete,C:\KHAN\Temp2.txt

ExitApp

}

return


Err:

Sleep, 10000

return


GuiClose:

ExitApp

return


3GuiContextMenu:

ExitApp

return









로, 매크로만들기,매크로제작, 메이플,메이플스토리, 메이플 스토리, 메이플 매크로 메이플매크로, 매크로제작, 메이플매크로 만들기, 매크로 만들기,메이플스토리매크로메이플스토리매크로 메이플 스토리 매크로















Posted by Khan64
,

원트크 자동 리세마라



안녕하세요 :)

오늘은 원피스 트레저크루즈 리세마라 

매크로를 만들어 보도록 하겠 습니다.


리세마라란 리셋마라톤(?) 의

줄임말인지는 정확히 모르겠으나 


처음에 기본으로 주는 보석으로 도박을해서

좋은 캐릭터로 시작을 하려고 많은 분들이

만들고 지우고를 반복을하시는 걸로 알고 있습니다.


소개해드릴 원피스 트레저 크루즈 또한 마찬가지로 초반에 지급되는것으로 적은확률이지만

좋은 스타터 캐릭터를 얻을수 있으며 수월하게 초반진입벽을 낮추는데에 도움이 됩니다.




전문적으로 리세마라 하시는 분들은 좋은 스타터캐릭터를 판매하는것같습니다.

비전문적인 저희가 그분들 못지않게 좋은 캐릭터를 뽑아 낼수 있는 매크로를

소개하려고 합니다. 



시작하기 앞서


스고페스 스타터 or 좋은 캐릭터로 새로 시작하고 싶은데 너무 안나온다..

나는 루팅이 먼지도 몰라 빠른 리세라마를 어떻게 해야할지도 모르겠다..

하시는분들은 꼭 주목해서 포스팅 내용을 봐주시길 바랍니다.






Step 1.   녹스 앱 플레이어어 설치


    http://www.yeshen.com/kr



Step 2.   녹스 루팅 및 해상도 설정 










Step 3.   원피스트레저크루즈 설치


 앱플레이어 실행후 구글앱에서 설치해주세요. 



Step 4.   저장 지점 만들기. 


 다른분 블로그에 잘 게시되있어서 주소를 안내해두도록 하겠습니다 :D


 http://gusrealworld.tistory.com/286

 

 주의하실점은 꼭 위에 블로그에 올려주신분과 똑같이

 Documents 이전 파일에 저장을 해두셔야 합니다.





Step 5.   자동 리세마라 이용하기.



 자동리세마라 파일 :  

 현재는 더이상 업데이트 진행하지않아 프로그램은 내려두었습니다.

 하지만 직접 제작할 수 있또록 스크립트를 공개 해두었습니다. 


 준비물 : 저장지점 파일, 자동리세마라 스크립트, 오토핫키 컴파일러


 글로 설명드리는것보다 영상으로 설명드리는게 나을것 같아 동영상 첨부합니다.


 자동리세마라 진행시 모든 기록은 스크린샷으로 저장되어 이후에 갤러리 들어가시면

 그동안 획득한 캐릭터와 발급아이디가 순서대로 저장됩니다 


 직접 프로그램을 제작을 하려는 분들은 맨아래 스크립트를 참고해주세요.

 단순 쓰레드의 반복이니 크게 어렵지 않게 제작할 수 있습니다 :)










 


이상 원피스트레저크루즈 리세마라 매크로 만들기였습니다.

자료는 카페에서 공유하고 있습니다.


혹시 제작에 대해 관심있으시거나 궁금한점 있으시면

덧글, 방명록, 이메일을 통해 연락주시길 바랍니다.


오토핫키 스크립트 작성법이나 다른 스크립트 제작의뢰도 같이 받고있습니다.
이메일 : cai6452@naver.com




스크립트



#NoEnv
#NoTrayicon
#SingleInstance force

SetKeyDelay, -1
SetWinDelay,-1
SetBatchLines,-1
SetControlDelay,-1
CoordMode, Pixel, Screen

FileMoveDir, Otc, C:\Khna\Otc, 2


Gui, +LastFound +AlwaysOnTop -Caption +ToolWindow
Gui, Add, Picture, x0 y0 BackgroundTrans, C:\Khna\Otc\1n.png
Gui, Add, Button, x12 y10 w70 h16 gBst, Start
Gui, Add, Edit, x12 y35 w70 h16 vE1, 메일 개수
Gui, Add, Edit, x100 y35 w70 h16 vE55, 확장 개수
Gui, Add, Edit, x12 y60 w100 h20 vE2,
Gui, Add, Edit, x12 y90 w100 h20 vE3,

Gui, Show, x500 y200 w213 h254, Otc

OnMessage(0x201, "WM_LBUTTONDOWN")
WM_LBUTTONDOWN()
{
PostMessage, 0xA1, 2,,, A
}
WinSet, Transparent, 190 , Otc
WinSet, Region, R35-35 W213 H254 0-0
return


F1::
Gui, Submit, Nohide
WinGetActiveTitle, TitleName1
GuiControl,,E2, %TitleName1%
return

F2::
Gui, Submit, Nohide
WinGetActiveTitle, TitleName2
GuiControl,,E3, %TitleName2%
return


`::
Pause
return



Bst:
Gui, Submit, Nohide
WinWait, %E2%
IfWinNotActive, %E2%, , WinActivate, %E2%
WinWaitActive, %E2%,
WinMove,0,0
Sleep, 1000
goto,a1
return


a1:
Gui, Submit, Nohide
Thread, NoTimers
Imagesearch, vx, vy, 1, 10, 500, 850, *100 C:/Khna/Otc/1.bmp
If Errorlevel = 0
{
va:=vx-72
vb:=vy+12
a:= (vb*65536)+va
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep,1000
}
Imagesearch, vx, vy, 1, 10, 500, 850, *100 C:/Khna/Otc/2.bmp
If Errorlevel = 0
{
va:=vx-72
vb:=vy+12
a:= (vb*65536)+va
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep,1000
}
Imagesearch, vx, vy, 1, 10, 500, 850, *100 C:/Khna/Otc/3.bmp
If Errorlevel = 0
{
goto, a2
}
If Errorlevel = 1
{
goto, a1
}
return

a2:
Gui, Submit, Nohide
Thread, NoTimers
Sleep,1000
z:= (810*65536)+28
PostMessage, 0x200, 0, %z%, , %E2%
PostMessage, 0x201, 1, %z%, , %E2%
PostMessage, 0x202, 0, %z%, , %E2%
Sleep, 1000
z:= (500*65536)+120
PostMessage, 0x200, 0, %z%, , %E2%
PostMessage, 0x201, 1, %z%, , %E2%
PostMessage, 0x202, 0, %z%, , %E2%
Sleep, 1000
z:= (500*65536)+350
PostMessage, 0x200, 0, %z%, , %E2%
PostMessage, 0x201, 1, %z%, , %E2%
PostMessage, 0x202, 0, %z%, , %E2%
Sleep, 1000
z:= (88*65536)+30
PostMessage, 0x200, 0, %z%, , %E2%
PostMessage, 0x201, 1, %z%, , %E2%
PostMessage, 0x202, 0, %z%, , %E2%
Sleep, 1000
goto, a3
return

a3:
Gui, Submit, Nohide
Thread, NoTimers
Imagesearch, vx, vy, 1, 10, 500, 850, *100 C:/Khna/Otc/2.bmp
If Errorlevel = 0
{
va:=vx-72
vb:=vy+12
a:= (vb*65536)+va
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 1000
}
Imagesearch, vx, vy, 1, 10, 500, 850, *100 C:/Khna/Otc/3.bmp
If Errorlevel = 0
{
z:= (230*65536)+120
PostMessage, 0x200, 0, %z%, , %E2%
PostMessage, 0x201, 1, %z%, , %E2%
PostMessage, 0x202, 0, %z%, , %E2%
Sleep, 1000
goto, a4
}
if Errorlevel = 1
{
goto, a3
}
return

a4:
Gui, Submit, Nohide
Thread, NoTimers
Sleep, 1000
z:= (810*65536)+28
PostMessage, 0x200, 0, %z%, , %E2%
PostMessage, 0x201, 1, %z%, , %E2%
PostMessage, 0x202, 0, %z%, , %E2%
Sleep, 1000
z:= (440*65536)+120
PostMessage, 0x200, 0, %z%, , %E2%
PostMessage, 0x201, 1, %z%, , %E2%
PostMessage, 0x202, 0, %z%, , %E2%
Sleep, 1000
z:= (735*65536)+18
PostMessage, 0x200, 0, %z%, , %E3%
PostMessage, 0x201, 1, %z%, , %E3%
PostMessage, 0x202, 0, %z%, , %E3%
Sleep, 1000
goto, gin
return


b0:
Gui,Submit,nohide
am=%E1%
if am>0
{
Sleep,500
a:= (280*65536)+250
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 2000
gosub, ok
}
if am>1
{
Sleep,500
a:= (380*65536)+250
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 2000
gosub,ok
Sleep, 2000
gosub, amp
}
if am>2
{
Sleep,500
a:= (480*65536)+250
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 2000
gosub,ok
}
if am>3
{
Sleep,500
a:= (580*65536)+250
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 2000
gosub,ok
}
if am>4
{
Sleep,500
a:= (680*65536)+250
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 2000
gosub,ok
}
if am>5
{
Sleep,500
z:= (330*65536)+200
PostMessage, 0x200, 0, %z%, , %E2%
PostMessage, 0x201, 1, %z%, , %E2%
z:= (315*65536)+200
PostMessage, 0x200, 0, %z%, , %E2%
Sleep, 500
PostMessage, 0x202, 0, %z%, , %E2%
Sleep,1000
a:= (680*65536)+250
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 2000
gosub,ok
}
if am>6
{
Sleep,500
z:= (330*65536)+200
PostMessage, 0x200, 0, %z%, , %E2%
PostMessage, 0x201, 1, %z%, , %E2%
z:= (315*65536)+200
PostMessage, 0x200, 0, %z%, , %E2%
Sleep, 500
PostMessage, 0x202, 0, %z%, , %E2%
Sleep,1000
a:= (680*65536)+250
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 2000
gosub,ok
}
if am>7
{
Sleep,500
z:= (330*65536)+200
PostMessage, 0x200, 0, %z%, , %E2%
PostMessage, 0x201, 1, %z%, , %E2%
z:= (315*65536)+200
PostMessage, 0x200, 0, %z%, , %E2%
Sleep, 500
PostMessage, 0x202, 0, %z%, , %E2%
Sleep,1000
a:= (680*65536)+250
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 2000
gosub,ok
}
if am>8
{
Sleep,500
z:= (330*65536)+200
PostMessage, 0x200, 0, %z%, , %E2%
PostMessage, 0x201, 1, %z%, , %E2%
z:= (315*65536)+200
PostMessage, 0x200, 0, %z%, , %E2%
Sleep, 500
PostMessage, 0x202, 0, %z%, , %E2%
Sleep,1000
a:= (680*65536)+250
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 2000
gosub,ok
}
if am>9
{
Sleep,500
z:= (330*65536)+200
PostMessage, 0x200, 0, %z%, , %E2%
PostMessage, 0x201, 1, %z%, , %E2%
z:= (315*65536)+200
PostMessage, 0x200, 0, %z%, , %E2%
Sleep, 500
PostMessage, 0x202, 0, %z%, , %E2%
Sleep,1000
a:= (680*65536)+250
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 2000
gosub,ok
}
if am>10
{
Sleep,500
z:= (330*65536)+200
PostMessage, 0x200, 0, %z%, , %E2%
PostMessage, 0x201, 1, %z%, , %E2%
z:= (315*65536)+200
PostMessage, 0x200, 0, %z%, , %E2%
Sleep, 500
PostMessage, 0x202, 0, %z%, , %E2%
Sleep,1000
a:= (680*65536)+250
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 2000
gosub,ok
}
if am>11
{
Sleep,500
z:= (330*65536)+200
PostMessage, 0x200, 0, %z%, , %E2%
PostMessage, 0x201, 1, %z%, , %E2%
z:= (315*65536)+200
PostMessage, 0x200, 0, %z%, , %E2%
Sleep, 500
PostMessage, 0x202, 0, %z%, , %E2%
Sleep,1000
a:= (680*65536)+250
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 2000
gosub,ok
}
if am>12
{
Sleep,500
z:= (330*65536)+200
PostMessage, 0x200, 0, %z%, , %E2%
PostMessage, 0x201, 1, %z%, , %E2%
z:= (315*65536)+200
PostMessage, 0x200, 0, %z%, , %E2%
Sleep, 500
PostMessage, 0x202, 0, %z%, , %E2%
Sleep,1000
a:= (680*65536)+250
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 2000
gosub,ok
}
if am>13
{
Sleep,500
z:= (330*65536)+200
PostMessage, 0x200, 0, %z%, , %E2%
PostMessage, 0x201, 1, %z%, , %E2%
z:= (315*65536)+200
PostMessage, 0x200, 0, %z%, , %E2%
Sleep, 500
PostMessage, 0x202, 0, %z%, , %E2%
Sleep,1000
a:= (680*65536)+250
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 2000
gosub,ok
}
goto, b1
return

ok:
Gui, Submit, Nohide
Imagesearch, vx, vy, 100, 300, 400, 850, *100 C:/Khna/Otc/e.bmp
If Errorlevel = 0
{
a:= (vy*65536)+vx
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
}
If Errorlevel = 1
{
Controlsend,,{Esc}, %E2%
}
Sleep, 1000
return

amp:
Gui, Submit, Nohide
a:= (765*65536)+250
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 2000
Loop, %E55%
{
Sleep, 1000
a:= (570*65536)+130
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 2000
a:= (544*65536)+184
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 2000
a:= (525*65536)+250
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 2000
}
a:= (770*65536)+350
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 1500
a:= (380*65536)+350
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 1500
return

b1:
Gui, Submit, Nohide
Thread, NoTimers
Imagesearch, va, vb, 1, 10, 500, 850, *100 C:/Khna/Otc/b.bmp
If Errorlevel = 0
{
a:= (vb*65536)+va
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
}
Imagesearch, va, vy, 10, 720, 100, 850, *100 C:/Khna/Otc/h.bmp
If Errorlevel = 0
{
vx:=va+200
a:= (vy*65536)+vx
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 3000
z:= (505*65536)+410
PostMessage, 0x200, 0, %z%, , %E2%
PostMessage, 0x201, 1, %z%, , %E2%
PostMessage, 0x202, 0, %z%, , %E2%
Sleep, 1200
goto, b2
}
If Errorlevel = 1
{
goto, b1
Sleep,50
}
Imagesearch, vx, vy, 1, 10, 500, 850, *100 C:/Khna/Otc/5.bmp
If Errorlevel = 0
{
va:=vx-135
vb:=vy+190
a:= (vb*65536)+va
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 3000
z:= (505*65536)+410
PostMessage, 0x200, 0, %z%, , %E2%
PostMessage, 0x201, 1, %z%, , %E2%
PostMessage, 0x202, 0, %z%, , %E2%
Sleep, 1200
goto, b2
}
If Errorlevel = 1
{
goto, b1
Sleep,50
}
return

b2:
Gui, Submit, Nohide
Thread, NoTimers
Imagesearch, vx, vy, 1, 10, 500, 850, *100 C:/Khna/Otc/6.bmp
If Errorlevel = 0
{
a:= (vy*65536)+vx
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 2000
}
Imagesearch, vx, vy, 1, 10, 500, 850, *100 C:/Khna/Otc/7.bmp
If Errorlevel = 0
{
z:= (770*65536)+433
PostMessage, 0x200, 0, %z%, , %E2%
PostMessage, 0x201, 1, %z%, , %E2%
PostMessage, 0x202, 0, %z%, , %E2%
Sleep, 1500
goto, b3
}
If Errorlevel = 1
{
a:= (280*65536)+250
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
a:= (420*65536)+250
PostMessage, 0x200, 0, %a%, , %E2%
Sleep, 500
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 3000
a:= (280*65536)+250
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 3000
a:= (280*65536)+250
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 3770
Controlsend,, {Ctrl down},  %E2%
Controlsend,, {2},  %E2%
Controlsend,, {Ctrl up},  %E2%
Sleep, 3770
a:= (280*65536)+250
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 3000
a:= (280*65536)+250
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 3000
goto, b2
}
return

b3:
Gui, Submit, Nohide
Thread, NoTimers
z:= (705*65536)+250
PostMessage, 0x200, 0, %z%, , %E2%
PostMessage, 0x201, 1, %z%, , %E2%
PostMessage, 0x202, 0, %z%, , %E2%
Sleep, 1000
z:= (450*65536)+250
PostMessage, 0x200, 0, %z%, , %E2%
PostMessage, 0x201, 1, %z%, , %E2%
PostMessage, 0x202, 0, %z%, , %E2%
Sleep, 1000
z:= (290*65536)+250
PostMessage, 0x200, 0, %z%, , %E2%
PostMessage, 0x201, 1, %z%, , %E2%
PostMessage, 0x202, 0, %z%, , %E2%
Sleep, 1000
z:= (680*65536)+250
PostMessage, 0x200, 0, %z%, , %E2%
PostMessage, 0x201, 1, %z%, , %E2%
PostMessage, 0x202, 0, %z%, , %E2%
Sleep, 3770
Controlsend,, {Ctrl down},  %E2%
Controlsend,, {2},  %E2%
Controlsend,, {Ctrl up},  %E2%
Sleep, 3770
z:= (775*65536)+18
PostMessage, 0x200, 0, %z%, , %E3%
PostMessage, 0x201, 1, %z%, , %E3%
PostMessage, 0x202, 0, %z%, , %E3%
Sleep, 2000
a:= (755*65536)+370
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
a:= (755*65536)+201
PostMessage, 0x200, 0, %a%, , %E2%
Sleep, 500
PostMessage, 0x202, 0, %a%, , %E2%
Sleep, 1000
z:= (740*65536)+248
PostMessage, 0x200, 0, %z%, , %E2%
PostMessage, 0x201, 1, %z%, , %E2%
PostMessage, 0x202, 0, %z%, , %E2%
Sleep, 1500
z:= (83*65536)+35
PostMessage, 0x200, 0, %z%, , %E2%
PostMessage, 0x201, 1, %z%, , %E2%
PostMessage, 0x202, 0, %z%, , %E2%
Sleep, 1500
z:= (230*65536)+120
PostMessage, 0x200, 0, %z%, , %E2%
PostMessage, 0x201, 1, %z%, , %E2%
PostMessage, 0x202, 0, %z%, , %E2%
Sleep, 1000
goto, a1
return


gin:
Gui, Submit, Nohide
Thread, NoTimers
Imagesearch, va, vb, 1, 10, 500, 850, *100 C:/Khna/Otc/4.bmp
If Errorlevel = 0
{
a:= (vb*65536)+va
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
}
Sleep, 3000
Imagesearch, va, vb, 1, 10, 500, 850, *100 C:/Khna/Otc/a.bmp
If Errorlevel = 0
{
a:= (vb*65536)+va
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
Goto, gin2
}
If Errorlevel = 1
{
z:= (735*65536)+18
PostMessage, 0x200, 0, %z%, , %E3%
PostMessage, 0x201, 1, %z%, , %E3%
PostMessage, 0x202, 0, %z%, , %E3%
goto,gin
}
return


gin2:
Gui, Submit, Nohide
Thread, NoTimers
Imagesearch, va, vb, 1, 10, 200, 300, *70 C:/Khna/Otc/ttt.bmp
If Errorlevel = 0
{
Settimer, Err, 2000
}
else
{
Sleep, 2000
z:= (650*65536)+250
PostMessage, 0x200, 0, %z%, , %E2%
PostMessage, 0x201, 1, %z%, , %E2%
PostMessage, 0x202, 0, %z%, , %E2%
goto, gin2
}
return


Err:
Gui, Submit, Nohide
Thread, NoTimers
Imagesearch, va, vb, 1, 10, 500, 850, *100 C:/Khna/Otc/d.bmp
If Errorlevel = 0
{
Settimer, Err, off
goto, b0
}
Imagesearch, va, vb, 1, 10, 500, 850, *100 C:/Khna/Otc/b.bmp
If Errorlevel = 0
{
a:= (vb*65536)+va
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
}
Imagesearch, va, vb, 1, 10, 500, 850, *100 C:/Khna/Otc/ukr.bmp
If Errorlevel = 0
{
a:= (vb*65536)+va
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
}
Imagesearch, va, vb, 1, 10, 500, 850, *100 C:/Khna/Otc/kkkk.bmp
If Errorlevel = 0
{
a:= (vb*65536)+va
PostMessage, 0x200, 0, %a%, , %E2%
PostMessage, 0x201, 1, %a%, , %E2%
PostMessage, 0x202, 0, %a%, , %E2%
}
z:= (570*65536)+370
PostMessage, 0x200, 0, %z%, , %E2%
PostMessage, 0x201, 1, %z%, , %E2%
z:= (665*65536)+370
PostMessage, 0x200, 0, %z%, , %E2%
Sleep, 500
PostMessage, 0x202, 0, %z%, , %E2%
Sleep, 500
return

GuiClose:
ExitApp
return

GuiContextMenu:
ExitApp
return



『 태그 』 - 원피스 / 원트크 / 원피스트레저크루즈 / 트레저크루즈 / 리세마라 / 자동 리세마라

              리세마라 매크로 / 원트크 매크로 / 트레저쿠르즈 매크로 / 리세마라 매크로 


Posted by Khan64
,