티스토리 뷰

이번 Chapter 에서는 오토핫키를 이용해 테라M 던전을 선택하고 횟수 설정까지 할 수 있는 매크로를 만들어보겠습니다.

스크립트를 보기에 앞서 매크로 실행 순서부터 보시겠습니다.

#01선택된 던전으로 이동합니다.

#02지정된 횟수 만큼 반복합니다.

#03지정된 횟수가 끝나면 다음던전으로 이동합니다.

#04지정된 횟수 만큼 반복합니다.

.......

.......

#end 매크로를 끝냅니다.


이정도로 볼 수 있는데, 앞서 만든 스크립트가 #02, #04 의 기능이었습니다.

그럼 여기서 추가할 기능은 #01,#02 인데, 준비해야할 이미지가 생겼습니다.


#일단은 이미지 좌측위 빨간네모 만큼 이미지를 준비해주시고, Close.bmp 로 저장해줍니다.

중앙에 해놓은 설명은 스크립트 보실때 설명 드릴테니 읽어보기만 하세요.


파일부터 올려드리겠습니다.

Chapter_10.txt

스크립트 보시겠습니다. 좀 길어요. 지난 시간에 했던 설명은 생략하겠습니다.


Gui, Add, Text, x12 y10 w110 h20 , 독립군 보급 기지

Gui, Add, Text, x12 y40 w110 h20 , 후카키 마을 수복전

Gui, Add, Text, x12 y70 w110 h20 , 밤피르의 저택

Gui, Add, Text, x12 y100 w110 h20 , 달의 호수 쟁탈전

Gui, Add, Text, x12 y130 w110 h20 , 황금의 미궁

Gui, Add, Text, x12 y160 w110 h20 , 왕자의 궁전

Gui, Add, Text, x12 y190 w110 h20 , 불의 제단

#일반던전이름 Text 입니다.


Gui, Add, Edit, x132 y10 w40 h20 vA01 Number, 0

Gui, Add, Edit, x132 y40 w40 h20 vA02 Number, 0

Gui, Add, Edit, x132 y70 w40 h20 vA03 Number, 0

Gui, Add, Edit, x132 y100 w40 h20 vA04 Number, 0

Gui, Add, Edit, x132 y130 w40 h20 vA05 Number, 0

Gui, Add, Edit, x132 y160 w40 h20 vA06 Number, 0

Gui, Add, Edit, x132 y190 w40 h20 vA07 Number, 0

#일반던전 1~7 의 횟수를 설정 할 수 있습니다. 값은 Number 로 고정합니다.

gui Edit의 경우 이설정이 없으면 텍스트로 값이 들어가는 것 같습니다. 그럼 숫자연산이 안되요.

Number를 적어주세요.

#각각 던전의 횟수를 A01~A07 변수에 저장합니다. 기본값은 0입니다.

만들고나서 알게된건데 실행하실때 0지우시면 오류날거에요.


Gui, Add, Text, x202 y10 w110 h20 , 벤튤라

Gui, Add, Text, x202 y40 w110 h20 , 데미안

Gui, Add, Text, x202 y70 w110 h20 , 그림자기수

Gui, Add, Text, x202 y100 w110 h20 , 굴

Gui, Add, Text, x202 y130 w110 h20 , 티라누스

Gui, Add, Text, x202 y160 w110 h20 , 라우라바

#일반 토벌대 이름입니다 방식은 일반던전과 같아요.


Gui, Add, Edit, x322 y10 w40 h20 vB01 Number, 0

Gui, Add, Edit, x322 y40 w40 h20 vB02 Number, 0

Gui, Add, Edit, x322 y70 w40 h20 vB03 Number, 0

Gui, Add, Edit, x322 y100 w40 h20 vB04 Number, 0

Gui, Add, Edit, x322 y130 w40 h20 vB05 Number, 0

Gui, Add, Edit, x322 y160 w40 h20 vB06 Number, 0

#일반 토벌대 횟수 지정합니다. 일반던전과 방식은 같습니다.


Gui, Add, Button, x262 y330 w130 h50 gStart, Start

Gui, Add, Button, x262 y390 w130 h50 gStop, Stop

#버튼을 두개 만들어 줍니다. Start, Stop 입니다.


Gui, Show, w407 h473, 

#Gui를 보여줍니다. 

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){

WinActivate, 녹스 플레이어

#마우스 클릭전에 녹스플레이를 활성화 시키는 명령어를 추가했습니다.

Send {Click %FoundX% %FoundY%}

}


Auto_D(MatchingName,ClearN){

#일반 던전을 반복하던 함수였습니다. ()메서드로 던전 이름(MatchingName)과, 클리어 횟수(ClearN)를 받게 바꿨습니다.


AutoClearN:=ClearN

#AutoClearN은 지정된 횟수를 확인하는데 사용할겁니다. ClearN의 값을 대입합니다.

MatchingY:=0

#위 이미지의 설명을 보시면 독립군 보급기지와 후카족 마을 수복전의 위치가 x는 같은 값이고 y값만 바뀌는 것을 알 수 있습니다. 던전 이름별 y값을 MatchingY에 저장합니다.

if(MatchingName="A01"){

#"A01"첫번째 일반 던전 입니다. 독립군 보급기지 입니다.

MatchingY := 130

#Y값은 130 입니다.

}else if(MatchingName="A02"){

#"A01"두번째 일반던전 입니다.

MatchingY := 180

#Y값은 180 입니다.

#아래부도 마찬가지입니다.

}else if(MatchingName="A03"){

MatchingY := 230

}else if(MatchingName="A04"){

MatchingY := 280

}else if(MatchingName="A05"){

MatchingY := 330

}else if(MatchingName="A06"){

MatchingY := 380

}else if(MatchingName="A07"){

MatchingY := 430

}


MsgBox, %MatchingName%

MsgBox, %MatchingY%

#이건 던전 이름과 횟수를 찍어본건데 안지웠네요. 사용하실땐 지우시면됩니다.

Send_Clikc(280,480)

#실행조건은 접속 후 캐릭터만 서있는 상황입니다. 기억하세요. 위좌표는 하단에 메뉴 버튼 위치입니다.

Sleep,1000

Send_Clikc(740,120)

#위좌표는 메뉴로 들어가서 레이르버튼 좌표입니다.

Sleep,1000

Send_Clikc(180,200)

#위좌표는 일반던전 좌표입니다.

Sleep,1000

Send_Clikc(70,MatchingY)

#위 좌표는 위에서 설정했던 Y값과 기본 x값으로 정한 던전을 찾습니다.

Sleep,1000



isStop:=false

isClick:=true

isSkip:=false


loop{

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

if(AutoClearN=0){

#AutoClearN이 0이되면 실행됩니다.

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

#Close.bmp를 찾고 클릭합니다.

Send_Clikc(x,y)

break

}

}

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)){

AutoClearN-=1

#'나가기'를 찾고 클릭할때마다 AutoClearN을 하나씩 줄여줍니다.

GuiControl,,%MatchingName%,%AutoClearN%

#gui에서 정한 던전의 클리어 횟수도 하나씩 줄여줍니다.

Gui, Submit,NoHide

#gui값을 submit 합니다.

Send_Clikc(x,y)

sleep,5000

}

if(isStop){

break

}

##토벌대도 원리는 같으니 설명은 넘어갈게요. 이해가 잘안되시면

실행부분인 Start: 부터 봐보세요, 다른사람이 한 코딩을 한번에 이해하는건 정말힘든 일입니다 천천히보세요.

}

}


Auto_T(MatchingTName,ClearTN){

AutoTClearN:=ClearTN

MatchingY:=0

if(MatchingTName="B01"){

MatchingY := 160

}else if(MatchingTName="B02"){

MatchingY := 210

}else if(MatchingTName="B03"){

MatchingY := 260

}else if(MatchingTName="B04"){

MatchingY := 310

}else if(MatchingTName="B05"){

MatchingY := 360

}else if(MatchingTName="B06"){

MatchingY := 410

}

Send_Clikc(280,480)

Sleep,1000

Send_Clikc(740,120)

Sleep,1000

Send_Clikc(400,200)

Sleep,1000

Send_Clikc(70,MatchingY)

Sleep,1000

isStop:=false

isClick:=true


loop{

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

if(AutoTClearN=0){

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

Send_Clikc(x,y)

break

}

}

isClick:=true

Send_Clikc(x,y)

Sleep,1000

}

if(isClick){

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

x:=775

y:=82

Send_Clikc(x,y)

sleep,1000

}

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

isClick:=false

Send_Clikc(x,y)

sleep,1000

}

}

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

AutoTClearN-=1

GuiControl,,%MatchingTName%,%AutoTClearN%

Gui, Submit,NoHide

Send_Clikc(x,y)

sleep,5000

}

if(isStop){

break

}

}

}


Start:

gui,Submit,NoHide

#gui를 전송합니다.

if(A01<>0){

#A01이, 즉 독립군 보급기지의 클리어 횟수가 0이 아니면 실행됩니다.

Auto_D("A01",A01)

#Auto_D는 일반던전 매크로였죠? 던전이름은 "A01"이고 클리어 횟수는 A01이라고 알려줍니다. 여기서

어려울수 있는데 "A01"은 텍스트, 즉 글자로 알려주는거고 A01은 gui에서 내가 설정한 클리어 횟수를 담고있는 변수 이름입니다.


#아래도 같은 원리니 설명은 넘어가겠습니다.

Sleep,2000

}

if(A02<>0){

Auto_D("A02",A02)

Sleep,2000

}

if(A03<>0){

Auto_D("A03",A03)

Sleep,2000

}

if(A04<>0){

Auto_D("A04",A04)

Sleep,2000

}

if(A05<>0){

Auto_D("A05",A05)

Sleep,2000

}

if(A06<>0){

Auto_D("A06",A06)

Sleep,2000

}

if(A07<>0){

Auto_D("A07",A07)

Sleep,2000

}

if(B01<>0){

Auto_T("B01",B01)

Sleep,2000

}

if(B02<>0){

Auto_T("B02",B02)

Sleep,2000

}

if(B03<>0){

Auto_T("B03",B03)

Sleep,2000

}

if(B04<>0){

Auto_T("B04",B04)

Sleep,2000

}

if(B05<>0){

Auto_T("B05",B05)

Sleep,2000

}

if(B06<>0){

Auto_T("B06",B06)

Sleep,2000

}

return


Stop:

ExitApp

return


GuiClose:

ExitApp

return


이걸로 좀 그럴듯한 매크로가 완성되었습니다. 그런데, 이 매크로는 사용하는 동안 컴퓨터를 쓸수 가없죠, 그래서 다음 Chapter 부터는 비활성 명령어를 몇가지 본뒤 매크로까지 만들어 보겠습니다.

댓글