티스토리 뷰

테라M 매크로를 만들기 위한 오토핫키 문법들을 봤습니다.

지금까지 알아본 문법들을 활용하여, 필요에 따라 조금씩 추가하며 매크로를 만들어 보겠습니다.

오늘 포스팅을 위해 테라M에 접속해보았는데 패치가 되었네요.

기본적으로 모바일게임은 패치때 UI가 바뀌곤 하는데요, 그렇게 되면 만들어 놓은 매크로들이

작동을 안하게 되는 경우가 종종 생깁니다. 지정 좌표 위치가 바뀐다거나, 이미지가 바뀌어서 인데요.

확인 해본 결과 UI변경이 살짝있는듯 하나 지난 챕터에서 만든 매크로는 작동이 되는 걸 확인했습니다.


#Capter.07 ,테라M 일반 던전 매크로 만들기

시작합니다.


이번 Chapter 에서는 지난 시간에 만들었던 스크립트를 좀더 보기쉽고 간략하게 바꿔볼까합니다.

모든 프로그래밍 언어는 '가독성'이 중요합니다. 그래서 반복했었던 명령문들을 함수로 만들어서 중복 코딩을 줄여 보겠습니다.


스크립트 부터 보시겠습니다.


gui, show, w200 h200 Center, Chapter05

gui, Add, Button,x50 y0 w100 h100 gAClick, Start

gui, Add, Button,x50 y100 w100 h100 gBClick, Stop

return


img_search(IMG_Name,ByRef vx,ByRef vy){

WinActivate, 녹스 플레이어

ImageSearch, fx,fy, 0,0,A_ScreenWidth,A_ScreenHeight,*Trans0x000000 *10 %IMG_Name%

if(ErrorLevel=0){

vx:=fx

vy:=fy

return true

}else{

return false

}

}


Send_Clikc(FoundX,FoundY){

Send {Click %FoundX% %FoundY%}

}


AClick:

isStop:=false

isClick:=true

isSkip:=false

skipX:=0

skipY:=0

loop{

if(img_search("Matching.bmp",x,y)){

isClick:=true

Send_Clikc(x,y)

Sleep,1000

}

if(isClick){

if(img_search("Auto.bmp",x,y)){

Send_Clikc(x,y+40)

sleep,1000

}

if(img_search("Auto_02.bmp",x,y)){

isClick:=false

isSkip:=true

Send_Clikc(x,y)

sleep,1000

}

}

if(isSkip){

if(img_search("Auto.bmp",x,y)=false){

isSkip:=false

Send_Clikc(775,42)

sleep,1000

}

}

if(img_search("Exit.bmp",x,y)){

Send_Clikc(x,y)

sleep,5000

}

if(isStop){

break

}

}

return


BClick:

isStop:=true

return


GuiClose:

ExitApp

return


Chapter07_txt.txt

#위 링크를 누르시면 다운 받을 수 있습니다.


지난 Chapter의 스크립트와 비교해서 짧고 간결해진걸 느낄 수 있죠. 반복적으로 녹스 플레이어를 활성화 하고, 이미지를 서칭 하는 명령어를 함수로 뺐습니다. 이해하기 어려우시면 그냥 긁어서 쓰세요. 

기능은 img_search("이미지이름","x좌표를 저장할 변수 이름","y좌표를 저장할 변수 이름") 입니다. 그리고 boolean 값을 리턴합니다. 이미지를 찾으면 true, 못찾으면 false 입니다.



그럼 좀더 세세 하게 스크립트 설명을 해보겠습니다.


img_search(IMG_Name,ByRef vx,ByRef vy){ 

#img_search()함수를 만듭니다. 파라미터() 안에 이미지풀네임, x좌표를 저장할 변수이름, y좌표를 저장할 변수 이름이 들어갑니다.

WinActivate, 녹스 플레이어

#녹스 플레이어를 활성화 시킵니다.

ImageSearch, fx,fy, 0,0,A_ScreenWidth,A_ScreenHeight,*Trans0x000000 *10 %IMG_Name%

#파라미터에 넣어준 이미지 풀네임을 지정된 좌표네에서 찾습니다.

if(ErrorLevel=0){

vx:=fx

#찾은 x좌표를 지정해준 변수에 저장합니다.

vy:=fy

#찾은 y좌표를 지정해준 변수에 저장합니다.

return true

#이미지를 찾으면 true를 return합니다.

}else{

return false

#이미지를 찾지 못하면 false를 return합니다.

}

}


Send_Clikc(FoundX,FoundY){

Send {Click %FoundX% %FoundY%}

#Send{} 명령어를 함수로 뺐습니다.

}


AClick:

isStop:=false

#loop를 중지할 조건입니다.

isClick:=true

#퀘스트 수행을 클릭할 조건입니다.

isSkip:=false

#보스영상을 스킵할 조건입니다.

loop{

if(img_search("Matching.bmp",x,y)){

#"Matching.bmp"이미지의 x좌표를 x라는 변수에 저장하고, y좌표을 y라는 변수에 저장합니다.

isClick:=true

#파티 매칭을 눌러줬으니 퀘스트 수행 [던전] 도 눌러주라고 명령합니다

Send_Clikc(x,y)

#찾은 좌표를 클릭합니다.

Sleep,1000

}

if(isClick){

#위에서 isClick을 true로 해줬으니 실행됩니다.

if(img_search("Auto.bmp",x,y)){

#"Auto.bmp"이미지의 x좌표를 x라는 변수에 저장하고, y좌표을 y라는 변수에 저장합니다.

Send_Clikc(x,y+40)

#'+'이미지의 좌표값에 y좌표를 +40해주면 좌표값이 '[던전]' 쯤갑니다.

sleep,1000

}

if(img_search("Auto_02.bmp",x,y)){

#"Auto_02.bmp"이미지의 x좌표를 x라는 변수에 저장하고, y좌표을 y라는 변수에 저장합니다.

isClick:=false

#퀘스트 수행은 던전을 시작해서 클리어 하기까지 한번만 클릭하면 됩니다. 한번 클릭했으니 그만 찾으라고 명령합니다.

isSkip:=true

#이제 보스영상을 스킵하라고 명령해줍니다.

Send_Clikc(x,y)

#찾은 이미지의 좌표를 클릭합니다.'수행'입니다.

sleep,1000

}

}

if(isSkip){

#위에서 보스영상을 스킵하라고 명령받았으니 실행됩니다.

if(img_search("Auto.bmp",x,y)=false){

#'+'이미지가 사라지면 보스영상이 나오는겁니다. 그래서 그자리를 클릭해줘야하는데,

이미지를 찾지 못했으니 좌표값이 없습니다.

isSkip:=false

#보스영상을 스킵했으니 더이상 false로 바꾸어줍니다.

Send_Clikc(775,42)

#좌표값을 얻지 못했으니 Active Window Info (Window Spy) 프로그램을 통해 좌표값을 찾아서 적어줍니다.Relative: 값으로 해주셔야됩니다. 녹스를 한번 클릭해준뒤 좌표값을 얻으세요.

녹스 좌측 상단을 0,0으로 잡고 좌표값을 주기때문에 창위치가 바뀌어도 값을 같습니다.

sleep,1000

}

}

if(img_search("Exit.bmp",x,y)){

#"Exit.bmp"이미지의 x좌표를 x라는 변수에 저장하고, y좌표을 y라는 변수에 저장합니다.

Send_Clikc(x,y)

#찾은 이미지의 좌표를 클릭합니다.'나가기'입니다.

sleep,5000

#화면전환에 시간이 걸리기 때문에 5초정도 쉬어줍니다.

}

if(isStop){

break

}

}

return

#설명이 없는 부분은 이전 Chapter를 확인해주세요.


이번 시간에는 지난 시간에 했던 스크립트를 좀더 간결하게 만들어 보았습니다. 다음 Chapter 에서는 

일단 던전을 만들어 보았으니, 일반 토벌대를 만들어 보겠습니다.

댓글