상세 컨텐츠

본문 제목

크루세이더 퀘스트 매크로 [4강] 최종 코드 v1.0

자작프로그램/히로/프렙-Mobile

by Rahs 2015. 2. 16. 16:10

본문


Autohotkey였으면 훨씬 편하게 끝냈을텐데 아무래도 제약이 많은 히로매크로를 사용하다보니 조금 길어졌네요.

그래도 안드로이드에서 스크립트 언어 지원하도록 해주신게 어딥니까.

이 자리를 빌어 히로매크로 제작자님께 감사의 말씀을.. 고맙습니다!!


(히로매크로에 대한 자세한 정보는 http://prohiro.com 에서 확인하실 수 있습니다.)



최종 코드 v1.0입니다.

0~3강 보신 분들 입장에서는 그냥 죽 훑어보시면 그냥 끊임없는 조건문 비교 반복에 불과합니다.

어떤 식으로 마무리가 되었는지, 코드따라 한번 살펴보실께요.


// 항상 첫 줄은 비우고 주석으로 채워주도록 합니다.

// 히로매크로 자체 문제거나 제 기기만의 문제일 수 있겠지만 여하튼 첫 줄에 뭐 있으면 에러가 나서요.


var #check 0

var #towncolor 15532031

var #allwhite 16777215

var #resultcolor 2307123

var #newcolor 15518532

var #sellcolor 15518532

var #coincolor 12320767

var #color 0


:start


:checkApp

log [0] 크퀘 실행여부 감지 중입니다.

CheckApp #check com.nhnent.SKQUEST


if #check == 1

log [1] 실행감지되어 시나리오 루틴으로 이동합니다.

goto :scenario

endif

// 이렇게 함으로써 크퀘를 플레이 중이더라도 시나리오 화면에만 맞춰놓으면

// 매크로가 이어서 플레이할 수 있게 됩니다.


:execute

log [1] 크퀘 실행합니다.

RunApp com.nhnent.SKQUEST

WaitApp com.nhnent.SKQUEST


:work

getColor #color 1080 150

if #color == #towncolor

log [2] 기본 마을 진입했습니다.

goto :work2

else

touchpress 0 220 1900

sleep 500

touchpress 0 1272 1925

goto :work

endif



:work2

log [3] 빵판매 루틴 시작합니다.

touchpress 0 150 1600

sleep 700

// [용사 관리] 메뉴 선택

touchpress 0 880 800

// 2번째 용사 선택 (첫번째부터 500, 800, 1100, ...)

sleep 700

touchpress 0 180 1000

sleep 700

// [훈련] 선택


:breadsell

getColor #color 190 1439

if #color == #coincolor

sleep 100

else

goto :breadsell

endif

// 빵 판매화면이 나왔는지를 코인 모서리 점 색상값을 이용해 인식


getColor #color 180 1170

if #color == #sellcolor

sleep 100

else

log [3] 더이상 판매할 빵이 없습니다.

goto :finishbreadsell

endif

// [판매] 버튼 비활성화 상태이면 finishbreadsell 루틴으로 이동


touchpress 0 180 1170

sleep 1000

// [판매] 버튼


touchpress 0 900 1200

sleep 300

touchpress 0 700 1200

sleep 300

touchpress 0 500 1200

sleep 300

touchpress 0 300 1200

sleep 300

// 빵을 모두 선택


touchpress 0 150 2000

sleep 700

//[판매] 버튼

touchpress 0 380 1300

sleep 700

//[확인] 버튼

log [3] 빵을 판매했습니다.

goto :breadsell

//다시 빵 판매 화면으로 돌아가서 남은 빵이 있는지를 확인하고 반복해서 판매합니다.


:finishbreadsell

touchpress 0 1240 2240

sleep 700

// X를 눌러 빵 판매창을 닫고

touchpress 0 1260 2040

sleep 700

// 용사 정보 창도 닫고

touchpress 0 1270 2190

sleep 1000

// 용사 관리 창도 닫습니다.


log [4] 시나리오 진행 시작합니다.

touchpress 0 180 2300

// [모험 시작] 누르고,

sleep 900

touchpress 0 560 560

// [시나리오] 눌러서, 사냥 시작합니다.


:scenario

getColor #color 180 1963

if #color == #allwhite

touchpress 0 940 700

sleep 300

// 이 부분은 본인이 플레이하길 원하는 시나리오 좌표를 사용해야 합니다.

// 제 경우, 노멀모드이고 숲이기 때문에 추가로 더 찍어주는 부분이 없는 것입니다.

touchpress 0 180 1963

log [4] 시나리오 전투준비 시작합니다.

else

sleep 300

goto :scenario

endif


// 고기 부족 메시지가 발생하는 경우

getColor #color 535 1560

if #color == #allwhite

log [!] 고기가 없습니다. 45분간 플레이를 중지합니다.

screenLock 2700000

// 45분 = 45(m) * 60(s) * 1000(ms) = 2700000 ms

goto :checkApp

// 45분 후 다시 :checkapp 루틴으로 이동, 반복

endif


sleep 800

log [5] 전투 시작 지시합니다.

touchpress 0 170 2000


:stage

getColor #color 1400 2490

if #color == #allwhite

goto :fightstart

log [6] 전투가 시작 되었습니다.

else

goto :stage

endif


:fightstart

getColor #color 440 1300

if #color == #newcolor

touchpress 0 440 1300

log [!] 새 용사가 합류했습니다!

sleep 1000

goto :fightstart

endif


getColor #color 940 1830

if #color == #resultcolor

log [7] 전투가 종료 되었습니다.

goto :fightend

//----전투종료 감지는 의도적으로 3번 들어갔습니다.

endif

// 여기서부터 스킬 사용 루틴이라고 보면 됩니다.

sleep 3000

// 스킬 블록 쌓일 때까지 3초 기다립니다.

getColor #color 940 1830

if #color == #resultcolor

log [7] 전투가 종료 되었습니다.

goto :fightend

endif

//----전투종료 감지는 의도적으로 3번 들어갔습니다.

sleep 3000

// 스킬 블록 쌓일 때까지 3초 기다립니다.

touchpress 0 900 1200

sleep 200

// 여신 스킬 사용 했습니다.

touchpress 0 135 380

sleep 200

// 왼쪽부터 첫 번째,

touchpress 0 135 640

sleep 200

// 왼쪽부터 두 번째,

touchpress 0 135 900

sleep 200

// 왼쪽부터 세 번째,

touchpress 0 135 1160

sleep 200

// 왼쪽부터 네 번째,

// 스킬은 왼쪽→오른쪽으로 나온다고 했을 때 제일 왼쪽부터 0.2초 간격으로 사용해줍니다.


getColor #color 940 1830

if #color == #resultcolor

log [7] 전투가 종료 되었습니다.

goto :fightend

endif

//----전투종료 감지는 의도적으로 3번 들어갔습니다.


touchpress 0 135 1420

sleep 300

// 왼쪽부터 다섯 번째,

touchpress 0 135 1680

sleep 300

// 왼쪽부터 여섯 번째,

touchpress 0 135 1940

sleep 300

// 왼쪽부터 일곱 번째,

touchpress 0 135 2200

sleep 300

// 왼쪽부터 여덟 번째, 마지막 스킬 블록 위치까지 눌러줬습니다.

goto :fightstart


:fightend

touchpress 0 240 700

sleep 300

// 전투종료 후 결과확인을 위한 터치입니다. 


getColor #color 440 1300

if #color == #newcolor

touchpress 0 440 1300

sleep 300

log [!] 레벨업 또는 최대레벨달성 메시지 발생했습니다.

goto :fightend

endif

// 최초 최대 레벨 달성 혹은 용사단 레벨업 메시지박스가 떴다면, 클릭을 해주도록 합니다.


touchpress 0 240 700

sleep 300

touchpress 0 240 700

// [다시 하기]를 누르고 루틴은 시나리오 루틴으로 돌아갑니다.

log [8] 모든 과정이 종료되어 [4] 시나리오 진행 루틴 실행합니다.

goto :scenario


:end


이거 동작 영상은.. 뭐 어떻게.. 엄청난 길이로 찍어서 배속을 올려서 업로드해야하나.. 뭐 그렇겠네요.

하하하... 차차 생각해보는 걸로 하고 4강은 여기서 마치겠습니다.


5강은 진정한 의미의 예외처리가 적용된, 최종 코드 v2.0이 되겠습니다.


문의는 댓글로만 받습니다.


관련글 더보기

댓글 영역