룬 해제 매크로 만들기



안녕하세요 :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
,

바람의나라 매크로 만들기



안녕하세요

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

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


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

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

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


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

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

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


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

제작방법을 알려드리는 포스팅이며 제작방법에 대한 강의나 스크립트 의뢰는 가능합니다 :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
,