1편 :?http://tailstar.net/hiromacro/1002422
2편 : http://tailstar.net/hiromacro/1013187
1편에서는 색값과 좌표 따는 방법을?
2편에서는 그 색값과 좌표를 이용해서 스크립트 짜는 것을 보았습니다.?
하지만 2편에서 만든 스크립트는 기능 수행 상 오류는 없었지만?
한 가지 문제점이 있었습니다.?
별되의 아이템 판매 방식의 문제인데?
아이템 클릭 후 판매 버튼을 누르면?
무기나 방어구와 같은 장비는 보라색 까지는 등급 이하 판매 버튼이 활성화가 되지만?
장신구,이벤트 스크롤, 물약 과 같은 경우는 같은 위치에 취소 버튼이 활성화가 되어서 매크로가 제대로 실행이 되지 않는 문제 점이 있었습니다.?
그리하여 문제점을 잡기 위해서 한 가지 다른 방법을 추가 하였습니다.?
1. 아이템 창의 왼쪽 라인 아이템들의 색값을 읽은 다음?
2. 보라색 등급이하 이면 아이템을 클릭하여?
3. 판매 버튼을 누른 후?
4. 등급 이하 아이템 판매 버튼을?
5. 누르고 "나가기" 버튼을 누르자
6. 만약 4번에서 등급 이하 아이템 판매 가 있는 위치의 버튼을 누른 후 아이템이 판매 되지 않는 경우 아이템 세부 정보 창을 닫고 같은 라인의 오른쪽 끝의 색값을 읽은 후 2~5번 까지 다시 돌아 가기
아래가 작업을 한 후의 스크립트 입니다.?
기존의 스크립트는 설명을 드렸으니 이번에 변경된 부분에서만 설명을 드리겠습니다.
변수 관련은 추가된 부분만 추가 하겠습니다.?
//인벤관련 좌표
var #iny2 1180 ? ?오른쪽 마지막 아이템 아이템 색값 읽을 Y좌표
var #inych2 1120 ?오른쪽 마지막 아이템 선택할 Y좌표
//아이템 디테일 닫기 ? 물약/장신구/이벤트 아이템의 새부정보 창을 닫기 위한 변수 지정
var #closex 647
var #closey 1157
var #closec 16777215
var #closecheck 0
var #invline 0
?:inven1
#invline = 0?
#invline 을 넣은 이유는 스크립트가 실행이 되면서 몇번째 라인의 아이템을 스캔해서 넘어 갔는 지를 확인하고 그 후의 스크립트를 진행하기 위해 추가 하였습니다.?
sleep 1500
getcolor #backcheck #backx #backy
sleep 1000
if #backcheck == #back
getcolor #invc1 #inx1 #iny1
getcolor #invc2 #inx2 #iny1
getcolor #invc3 #inx3 #iny1
getcolor #invc4 #inx4 #iny1
sleep 1000
log #invc1 _invc1_1
log #invc2 _invc2_1
log #invc3 _invc3_1
log #invc4 _invc4_1
else
goto :inven1
endif
if #invc1 == #invw or #invc1 == #invg or #invc1 == #invb or #invc1 == #invp
#invline = #invline + 1 ? ?
touchpress 0 #inx1 #inych1
elseif #invc2 == #invw or #invc2 == #invg or #invc2 == #invb or #invc2 == #invp
#invline = #invline + 2
touchpress 0 #inx2 #inych1
elseif #invc3 == #invw or #invc3 == #invg or #invc3 == #invb or #invc3 == #invp
#invline = #invline + 3
touchpress 0 #inx3 #inych1
elseif #invc4 == #invw or #invc4 == #invg or #invc4 == #invb or #invc4 == #invp
#invline = #invline + 4
touchpress 0 #inx4 #inych1
else
goto :inven2
endif
#invline 에 몇번째 줄에서 아이템 값을 가지고 와서 if 구문이 넘어 가는지 알기 위해서 각 라인마다 일의 자리수에 1~4로 표기가 되도록 만들었습니다.?
바로 아래 줄의 log #invline _invenline 의 로그에서 그 위치가 확인이 됩니다.?
1일 경우 처음 줄 2일 경우 두번째 줄 의 방식으로요..
log #invline _invenline
sleep 1000
touchpress 0 #sex #sey
log touch sell_1
sleep 1000
touchpress 0 #asx #asy
sleep 1000
getcolor #closecheck #closex #closey
sleep 1000
if #closecheck == #closec
touchpress 0 #closex #closey
sleep 1000
goto :inven2
else?
goto :invenout
endif
여기 #closecheck 의 부분은 아이템 세부정보창이 열려있는지 확인하는 과정입니다. 여기서 아무런 문제가 없이 아이템이 판매가 되었다면 아이템 세부정보 창이 자동으로 닫기기에 그냥 아이템 창 나가기로 진행이 되며?
그렇지 않다면 세부 정보 창이 열려있으므로 아이템 창 나가기가 아닌 다음 스크립트를 진행을 하러 가게 됩니다.
:inven2
if #invline == 1
goto :inven11
elseif #invline == 2
goto :inven12
elseif #invline == 3
goto :inven13
elseif #invline == 4
goto :inven14
endif
여기서는 위에서 아이템 줄을 결정한 #invline 의 숫자에 따라 진행하는 매크로의 위치를 바꾸기 위해서 작업하였습니다.?
1번일 경우 처음줄 오른쪽
2번일 경우 두번째줄 오른쪽
3번일 경우 세번째줄 오른쪽
4번일 경우 네번째줄 오른쪽?
에서 부터 색값을 다시 읽고 확인하도록 하였습니다.?
아래 :inven11,?:inven12,?:inven13,?:inven14, 는 그에 따른 각각의 라벨을 지정하여 스크립트가 따라서 진행 하도록 만들어 놓았습니다.
:inven11
getcolor #invc1 #inx1 #iny2
getcolor #invc2 #inx2 #iny2
getcolor #invc3 #inx3 #iny2
getcolor #invc4 #inx4 #iny2
sleep 1000
log #invc2 _invc2_1_1
log #invc3 _invc3_1_1
log #invc4 _invc4_1_1
if #invc1 == #invw or #invc1 == #invg or #invc1 == #invb or #invc1 == #invp
touchpress 0 #inx1 #inych2
elseif #invc2 == #invw or #invc2 == #invg or #invc2 == #invb or #invc2 == #invp
touchpress 0 #inx2 #inych2
elseif #invc3 == #invw or #invc3 == #invg or #invc3 == #invb or #invc3 == #invp
touchpress 0 #inx3 #inych2
elseif #invc4 == #invw or #invc4 == #invg or #invc4 == #invb or #invc4 == #invp
touchpress 0 #inx4 #inych2
else
goto :invenout
endif
goto :invcon
:inven12
getcolor #invc2 #inx2 #iny2
getcolor #invc3 #inx3 #iny2
getcolor #invc4 #inx4 #iny2
sleep 1000
log #invc2 _invc2_1_1
log #invc3 _invc3_1_1
log #invc4 _invc4_1_1
if #invc2 == #invw or #invc2 == #invg or #invc2 == #invb or #invc2 == #invp
touchpress 0 #inx2 #inych2
elseif #invc3 == #invw or #invc3 == #invg or #invc3 == #invb or #invc3 == #invp
touchpress 0 #inx3 #inych2
elseif #invc4 == #invw or #invc4 == #invg or #invc4 == #invb or #invc4 == #invp
touchpress 0 #inx4 #inych2
else
goto :invenout
endif
goto :invcon
:inven13
getcolor #invc3 #inx3 #iny2
getcolor #invc4 #inx4 #iny2
sleep 1000
log #invc3 _invc3_1_1
log #invc4 _invc4_1_1
if #invc3 == #invw or #invc3 == #invg or #invc3 == #invb or #invc3 == #invp
touchpress 0 #inx3 #inych2
elseif #invc4 == #invw or #invc4 == #invg or #invc4 == #invb or #invc4 == #invp
touchpress 0 #inx4 #inych2
else
goto :invenout
endif
goto :invcon
:inven14
getcolor #invc4 #inx4 #iny2
sleep 1000
log #invc4 _invc4_1_1_4
if #invc4 == #invw or #invc4 == #invg or #invc4 == #invb or #invc4 == #invp
touchpress 0 #inx4 #inych2
else
goto :invenout
endif
goto :invcon
:invcon
sleep 1000
touchpress 0 #sex #sey
log touch sell_2
sleep 1000
touchpress 0 #asx #asy
sleep 1000
getcolor #backcheck #backx #backy
sleep 1000
if #backcheck == #back
touchpress 0 #backx #backy
sleep 1000
#invline = #invline + 1
goto :inven2
endif
여기서 :invcon 을 넣은 이유는 여기 스크립트는 단순 판매 버튼 클릭 모두판매 버튼 클릭으로 이루어 져 있는데?
:inven11,?:inven12,?:inven13,?:inven14 4군대에 전부다 넣기에는 스크립트가 의미없이 길어 지는 듯하여 하나로 합친것입니다.
:inven11,?:inven12,?:inven13,?:inven14를 진행 후 :invcon을 진행한 후 :invenout로 연속 진행 하게 됩니다.??
:invenout
sleep 1000
getcolor #backcheck #backx #backy
sleep 1000
if #back == #backcheck
touchpress 0 #backx #backy
sleep 1000
goto :dun
else
goto :invenout
endif
:end
이놈은 10월 30일 패치 전까지는 잘 작동을 하다가?
10월 30일 패치 후 2편과 동일한 증상이 발생을 하게 됩니다.
이 후의 내용은 스크립트를 다시 짠 후에 진행을 하도록 하겠습니다.?
참고 하려고했는데..봐도 모르겠네요..ㅎㅎ