상세 컨텐츠

본문 제목

크루세이더 퀘스트 매크로 [2강] 루틴별 구상 #2

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

by Rahs 2015. 2. 15. 12:45

본문



0강, 1강에 이어지는 [2강] 루틴별 구상 #2 편입니다.


앞서 설명드렸다시피, 크루세이더 퀘스트는 "고기"가 있어야 모험을 할 수가 있지요.

헌데 고기를 인식해야 하는 화면이 두 화면입니다(1강 참조). 효율성이 떨어져요.

하여 저는 후에 무조건 돌려보고, 고기가 부족하다고 뜨는 창을 인식하도록 해서 조건을 분기시킬 겁니다.


0강에서는 코드 없이 전체적인 루틴을 짚어봤고, 1강에서는 일부 코드를 포함한 루틴을 짚었었죠.


2강에서는 사냥을 해보겠습니다.



사냥 루틴은 몇 장면 바뀌지 않고 5번 그림(실제 스킬 사용)때만 조금 복잡해질 예정이었으나 예상치 못했던 변수로 심지어 

더 단순하게 되었습니다.


우선 기본 마을을 시작점으로 봅니다.


[그림1] 기본 시작점인 마을에 와 있는 모습입니다. 1강에서 마을 복귀여부 판단하는 코드를 미리 짜놨었죠?

일단 우측 하단의 [모험 시작]을 터치할 겁니다. 제 폰에서의 좌표는 (180, 2300)입니다.

(좌표 따는 방법을 확실히 모르겠다 하시는 분은 1강 참고해주세요!)

//----- 마을 복귀 확인 코드------//

touchpress 0 180 2300




[그림2] 단순하게 딜레이만 준 후 그림2에서는 [시나리오] 아래의 파란 포탈 위치(560, 560)를 찍어줄 겁니다.

sleep 900

touchpress 0 560 560




[그림3] 역시 단순하게 딜레이만 줘도 되지만 레벨이 높아지면 노말/하드를 떠나서 원하는 스테이지로 이동, 선택을 해야 

하는 부분 추가가 필요할테니 이참에 만들겠습니다.

제가 선택한 점은 (180, 1963)입니다. 전투준비의 비에 "ㅣ" 중간정도인데 이유는 이 부분 color가

완전 흰색(0xFFFFFF)이라 나중에 혹시라도 필요할 때-코드가 꼬였다거나- 기억하기가 쉬울 것 같아서 입니다 :)

아래 166777215는 0xFFFFFF를 10진수로 바꾼 값입니다. 색상값 따는 방법은 1강에!

var #scenariocolor 16777215

var #scenario 0

:scenario

getColor #scenario 180 1963

if #scenario == #scenariocolor

touchpress 0 180 1963

else

goto :scenario

endif




[그림4]이번에는 확인 생략하고 바로 시작(170, 2000) 누를께요.

sleep 800

touchpress 0 170 2000




[그림5] 대망의 전투씬입니다. 2가지를 해야 하는데, 1) "전투씬에 완전히 들어왔는지"를 식별해야 하고,

2) "스킬"을 효율적으로 사용해야 합니다.

스킬블록은 왼쪽에서 오른쪽으로(→) 나오는 기본 설정 상태입니다.

- [전투종료 확인][스킬블록 FULL 확인]→[3블록/2블록/1블록 그냥 스킬사용]으로 반복합니다.

- 코드는 편의상 아래 그림 2장 사이에서 보겠습니다.

2015.02.15 스킬을 "효율적으로" 사용하도록 짜는 부분을 뒤로 미룬 것에 대한 변명


사냥할 때는 위 끝나면 아래와 같은 모습이 되겠죠?

오른쪽 위의 일시정지 버튼(II)에 흰색(0xFFFFFF) 부분이 있습니다. 제 폰에서는 (1400, 2490) 점이구요.

이 점을 기준으로 전투가 시작된 것을 인지하고, 스킬을 누르기 시작할 겁니다.

단, 스킬을 누르고 나서는 항상 전투결과 창이 나왔는지, 안 나왔는지를 확인할 것이고,

아래 화면은 [획득골드]의 동전 중 귀퉁이에 빛나는 점(940, 1830) 색상을 따서 이용할 겁니다.



// 항상 코드 첫 줄은 비우고 주석으로 아무 말이나 넣어주세요~


var #stagecolor 16777215

var #stage 0

var #resultcolor 2307123

var #result 0


:start

:stage

getColor #stage 1400 2490

if #stage == #stagecolor

goto :fightstart

else

goto :stage

endif

// 일시정지 버튼의 흰색 점이 나올 때까지 기다리게 됩니다.


:fightstart

getColor #result 940 1830

if #result == #resultcolor

goto :fightend

// 전투 종료가 확인되면 :fightend 루틴으로 이동하고,

else

sleep 6000

//스킬블록이 쌓일 때까지 기다림의 미덕을 보여줍니다.

touchpress 0 900 1200

//여신스킬 게이지가 차있다면 여신스킬도 사용하고..

sleep 300

touchpress 0 135 380

sleep 300

touchpress 0 135 640

sleep 300

touchpress 0 135 900

sleep 300

touchpress 0 135 1160

sleep 300

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

// 아니면 스킬 8칸을 최근 나온 순서대로 0.5초 간격으로 다다다다다 눌러준 뒤 다시 전투시작 루틴으로 되돌아갑니다.

endif


:fightend

:end



[그림6] 자, 그러면 아래 화면으로 넘어오게 되는데요, 아무 화면이나 한번 클릭하면 [그림7]로 넘어가게 됩니다.



[그림7] 한 바퀴가 무사히 돌아간 후의 모습이죠?

여기서 "다시하기"를 누르면 [그림3]으로 돌아가게 되고 반복이 가능하게 됩니다.

touchpress 0 240 700

goto :scenario

// [그림3]의 루틴으로 다시 올라가서 실행됩니다.



[그림8] 끝난 줄 아셨죠?



실제로는 위의 [최초 최대 레벨 달성]과 [용사단 레벨업]이 [그림6]과 [그림7]사이에 빈번하게

나타나게 됩니다. 새로운 용사가 합류하였을 경우에는 [그림5]와 [그림6]사이에 합류메시지가 뜨게 되죠.


항상 나오는 메시지나 창이 아니더라도, 어쩌나 한번 나타났을 때, 매크로가 멍 때려버리면 그 매크로는 가치를 잃게 됩니다.


그래서, 3강에서는 예외처리에 대한 부분을 알아보도록 하고,


스킬을 3블록 우선순위로 사용하는 방법은 마무리가 지어진 후 번외편으로 작성하거나 아니면 그냥 이대로 쓰는 걸로(...)


하겠습니다 :)

관련글 더보기

댓글 영역