[크루세이더 퀘스트 매크로 이전 글 보기]
2015/02/15 - [per IT/Android of Google] - 크루세이더 퀘스트 매크로 [3강] 예외처리
2015/02/15 - [per IT/Android of Google] - 크루세이더 퀘스트 매크로 [2강] 루틴별 구상 #2
2015/02/08 - [per IT/Android of Google] - 크루세이더 퀘스트 매크로 [1강] 루틴별 구상 #1
2015/02/08 - [per IT/Android of Google] - 크루세이더 퀘스트 매크로 [0강] 시작하기에 앞서
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이 되겠습니다.
문의는 댓글로만 받습니다.
크루세이더 퀘스트 매크로 [5강] 진정한 예외처리, 최종 코드 v2.0 (30) | 2015.02.16 |
---|---|
크루세이더 퀘스트 매크로 [3강] 예외처리 (0) | 2015.02.15 |
크루세이더 퀘스트 매크로 [2강] 루틴별 구상 #2 (0) | 2015.02.15 |
크루세이더 퀘스트 매크로 [1강] 루틴별 구상 #1 (6) | 2015.02.08 |
모바일 게임 매크로 작성 시, 정확한 좌표따는 방법 (7) | 2015.02.08 |
댓글 영역