매크로

조회 수 478 추천 0 댓글 19

오토핫키 만들어질수록 재미있는데 머리가 뽀개질것 같네요.. ㅠ_ㅠ 안굴러가는 머리 굴리려니.. 흑흑..

또 막힘이 생겨버렸습니다. 고섭으로 이동한 구문에서 고투로 이동후 루프를 빠져나왔다 생각했는데 한바퀴 더돌아버리네요..

왜그럴가요ㅠ_ㅠ?


내용인즉. 해피30을 찾으면 임의위치를 마우스클릭, 다음페이지에서 해피1을찾고 찾으면 start로 돌아와 내용종료. <-- 여기까지는 괜찮습니다. 다음구문부터 문제가..


못찾으면 해피교체2로 넘어가 해피1-1을 찾고 찾으면 교체 후 밖으로 나가 start로 돌아와 해피30이 없으니 구문이 종료 되야 하는데.. 못찾았을때 해피3로 넘어가 또 못찾으면 마우스 드래그 하는 명령어까지 한번더 실행이 되네요..


해피교체2에서 이미지를 찾았을때 클릭까지 다하고 goto start로 넘어왔는데 해피교체부터 다시한번 실행이 되는 이유는 무엇인지요.. 2시간째 이번엔 이것과 씨름을 하고 있습니다 ㅠ_ㅠ;;




F5::
goto start

start:
loop 1
{
Imagesearch, vx, vy, 280, 308, 456, 671,*50 %A_WorkingDir%\seven\해피30.bmp
if errorlevel = 0
{
mouseclick, left, 520, 672
gosub 해피교체
}
}
msgbox ,,,교체완료
return

해피교체:
Loop 6
{
?sleep 1000
Imagesearch, vx, vy, 3, 34, 1400, 800,*100 %A_WorkingDir%\seven\해피1.bmp
if errorlevel = 0
{
mouseclick, left, vx+3, vy+3
sleep, 2000
mouseclick, left, 1123, 656
sleep, 2000
Imagesearch, vx, vy, 280, 308, 456, 671,*50 %A_WorkingDir%\seven\교체선택.bmp
if errorlevel = 0
{
mouseclick, left, vx+10, vy+20
sleep 5000
}
Imagesearch, vx, vy, 3, 34, 1400, 800,*50 %A_WorkingDir%\seven\교체뒤로가기.bmp
if errorlevel = 0
{
mouseclick, left, vx+10, vy+20
return
}
}

if errorlevel = 1
{
?gosub 해피교체2
}

}
return

해피교체2:
{
Imagesearch, vx, vy, 3, 34, 1400, 800,*100 %A_WorkingDir%\seven\해피1-1.bmp
if errorlevel = 0
{
mouseclick, left, vx+3, vy+3
sleep, 2000
mouseclick, left, 1123, 656
sleep, 2000
}
Imagesearch, vx, vy, 280, 308, 456, 671,*50 %A_WorkingDir%\seven\교체선택.bmp
if errorlevel = 0
{
mouseclick, left, vx+10, vy+20
sleep 5000
}
Imagesearch, vx, vy, 3, 34, 1400, 800,*50 %A_WorkingDir%\seven\교체뒤로가기.bmp
if errorlevel = 0
{
mouseclick, left, vx+10, vy+20
goto start
sleep 1000
}

if errorlevel = 1
{
?gosub 해피교체3
}
}
return

해피교체3:
{
Imagesearch, vx, vy, 3, 34, 1400, 800,*100 %A_WorkingDir%\seven\해피1-2.bmp
if errorlevel = 0
{
mouseclick, left, vx+3, vy+3
sleep, 2000
mouseclick, left, 1123, 656
sleep, 2000
Imagesearch, vx, vy, 280, 308, 456, 671,*50 %A_WorkingDir%\seven\교체선택.bmp
if errorlevel = 0
{
mouseclick, left, vx+10, vy+20
sleep 5000
}
Imagesearch, vx, vy, 3, 34, 1400, 800,*50 %A_WorkingDir%\seven\교체뒤로가기.bmp
if errorlevel = 0
{
mouseclick, left, vx+10, vy+20
goto start
}
}

if errorlevel = 1
{
?MouseClickDrag, left, 835, 666, 835, 400
}
}
return


  • profile
    외치기 2014.12.29 17:24

    메세지 박스를 통한 디버깅이 답일거같네요.

    goto랑 gosub를 혼용해서 사용하는건 코드가 복잡해지는 안좋은 습관입니다.

  • 독이든사과 2014.12.29 17:29
    아.. goto랑 gosub를 혼용하면 안좋은거군요.. 흠.. __ ;; 좀더 찾아봐야겠어요.. 감사합니다 ^^
  • profile
    숨어야산다 2014.12.29 17:56

    30체크

    있으면 해피교체 실행?

    해피1.bmp 있으면 해피교체 후 종료

    해피1.bmp 없으면 해피교체2로 이동


    해피교체2

    해피1-1.bmp 있으면 해피교체 후 종료

    해피1-1.bmp 없으면 해피교체3로 이동


    해피교체3

    해피1-2.bmp 있으면 해피교체 후 종료

    해피1-2.bmp 없으면 마우스 드레그


    6회 반복


    이거 같은데..?에초에 괄호가 이상하게 묶여있는걸로 보이는데요

  • 독이든사과 2014.12.29 17:59
    넵!!! 바로 그건데.. 이상한가요?? 으.. 뚫어지게 다시 검토해보겠습니다 !
  • profile
    숨어야산다 2014.12.29 17:58

    수정전?

    SSH7Kll.png



    수정하면


    B11OKwT.png


    3번도 동일하네요


    그거 수정한다고 제대로 돌아가는지는.. 모르겠네요 ㅎㅎ

  • 독이든사과 2014.12.29 18:09
    지금바로 해봤는데 그래도 마찬가지에요.. 그문제는 아닌듯 합니다. 메시지 박스를 넣어서보니 해피교체의 루프6이 해피교체2에서 고투를 타고 스타트지점으로 간다음에 나머지 5번이 이어서 실행이 되는게 문제인듯합니다. 성공했을때 완전히 루프를 탈출하는 방법이 없으려나 ㅠ_ㅠ.. 그렇다고 해피교체 if =1 에 브레이크를 넣어버리면 찾지 못했을때 6번 도는 명령이 수행이 안되고 후.. 어렵네요 ^^; 먼가 있을듯 한데 ..
  • 스푸키 2014.12.29 18:12

    2번째 3번째 교체는 당연히 1번 더 돌게 되는 구문이군요

    오토핫키는 한번도 안써봤지만.. 교체 완료후?'goto start' 하면 다시한번 검색하게 되어 있네요


    교체 완료 메시지박스 앞에 교체완료 라벨을 넣어 주시고 교체 완료시 탈출을 교체완료로 보내셔야 되요

    참고로 goto문은 안쓰시는게 좋습니다.. 가독성이 떨어지고 버그 발생시 머리아프게 하는 주범..


    제가 작성한다면


    교체 시작

    {

    ??? if (해피교체 1?함수) 교체완료 메시지

    ??? else if (해피교체 2 함수) 교체완료 메시지

    ??? else if (해피교체 3 함수) 교체완료 메시지

    ??? else 교체실패 메시지

    }


    해피교체 1

    {

    ??? ...

    ????if 교체 성공 return 1

    ??? else return 0

    }


    .

    .

    이런식이 될거 같군요

    조금더 단순화 시킬수도 있지만 오토핫키에서 어느정도까지 함수 지원을 하는지에 따라 달라지겠구요

  • 스푸키 2014.12.29 18:17

    로또 감사^^


    end: <-추가

    msgbox ,,,교체완료


    교체 완료후

    goto start -> goto end 로 교체

    이렇게 하면 해결되시겠네요

  • 독이든사과 2014.12.29 18:30
    음.. 스푸키님 덕분에 재미있는 상황을 또 알게되었네요. 스푸키님 말대로 end: 를 맨 아래 추가후 msgbox 문구만 넣으니 다시 돌아가 남은루프가 실행이 되지 않았습니다. 하지만 맨 마지막 return을 넣으니 다시 남은 루프가 실행이 되어버리네요. goto로 이동해서 실행된 명령어가 끝나길 기다렸다가 남은 루프가 실행되는거 같습니다.
  • profile
    숨어야산다 2014.12.29 18:22
    F5::
    goto start
    start:
    Imagesearch, vx, vy, 280, 308, 456, 671,*50 %A_WorkingDir%\seven\해피30.bmp
    if errorlevel = 0
    {
    mouseclick, left, 520, 672
    gosub 해피교체
    }
    msgbox ,,,교체완료
    return


    해피교체:
    Loop 6
    {
    sleep 1000
    Imagesearch, vx, vy, 3, 34, 1400, 800,*100 %A_WorkingDir%\seven\해피1.bmp
    if errorlevel = 0
    {
    mouseclick, left, vx+3, vy+3
    sleep, 2000
    mouseclick, left, 1123, 656
    sleep, 2000
    Imagesearch, vx, vy, 280, 308, 456, 671,*50 %A_WorkingDir%\seven\교체선택.bmp
    if errorlevel = 0
    {
    mouseclick, left, vx+10, vy+20
    sleep 5000
    }
    Imagesearch, vx, vy, 3, 34, 1400, 800,*50 %A_WorkingDir%\seven\교체뒤로가기.bmp
    if errorlevel = 0
    {
    mouseclick, left, vx+10, vy+20
    break
    }
    }
    if errorlevel = 1
    {
    Imagesearch, vx, vy, 3, 34, 1400, 800,*100 %A_WorkingDir%\seven\해피1-1.bmp
    if errorlevel = 0
    {
    mouseclick, left, vx+3, vy+3
    sleep, 2000
    mouseclick, left, 1123, 656
    sleep, 2000
    Imagesearch, vx, vy, 280, 308, 456, 671,*50 %A_WorkingDir%\seven\교체선택.bmp
    if errorlevel = 0
    {
    mouseclick, left, vx+10, vy+20
    sleep 5000
    }
    Imagesearch, vx, vy, 3, 34, 1400, 800,*50 %A_WorkingDir%\seven\교체뒤로가기.bmp
    if errorlevel = 0
    {
    mouseclick, left, vx+10, vy+20
    break
    }
    }
    if errorlevel = 1
    {
    Imagesearch, vx, vy, 3, 34, 1400, 800,*100 %A_WorkingDir%\seven\해피1-2.bmp
    if errorlevel = 0
    {
    mouseclick, left, vx+3, vy+3
    sleep, 2000
    mouseclick, left, 1123, 656
    sleep, 2000
    Imagesearch, vx, vy, 280, 308, 456, 671,*50 %A_WorkingDir%\seven\교체선택.bmp
    if errorlevel = 0
    {
    mouseclick, left, vx+10, vy+20
    sleep 5000
    }
    Imagesearch, vx, vy, 3, 34, 1400, 800,*50 %A_WorkingDir%\seven\교체뒤로가기.bmp
    if errorlevel = 0
    {
    mouseclick, left, vx+10, vy+20
    break
    }
    }
    if errorlevel = 1
    {
    MouseClickDrag, left, 835, 666, 835, 400
    }
    }
    }
    }
    return

    goto문 빼고 break문 넎으면 이런식으로 될거같네요 - 테스트는 안해봤습니다.
  • 독이든사과 2014.12.29 18:35
    고투빼고 한번에 이렇게도 되는군요! 감사합니다 !! 너무 많은 고투와 고섭 난발은 이런 결과를 초래한다는것을 뼈저리게 배웠습니다. *-* 정말 감사합니다. 숨어야 산다님 덕분에 속시원하게 퇴근하고 나머지는 내일 가지고 놀아야 겠어요 ^^
  • profile
    테스하자 2014.12.29 18:32

    F5::
    goto start

    return ← 이것도 넣어 주시는게 좋습니다.

    start:

    ...


    start: 끝에 리턴이 있다면 괜찮을 수도 있지만?

    없다고 가정하면 start돌고나서 다시 start가 실행되기 때문에 넣어줘야 됩니다.

  • profile
    파더 2014.12.30 03:20
    F5::

    ;----------------------------------------------------------------------------------------------- 교체 체크
    start:
    loop, 1
    {
    Imagesearch, vx, vy, 280, 308, 456, 671,*50 %A_WorkingDir%\seven\해피30.bmp
    if errorlevel = 0
    {
    mouseclick, left, 520, 672
    gosub, 해피교체
    }
    }
    msgbox ,,,교체완료
    ; 이곳에 끝나고 갈곳 지정..
    return

    ; 이곳에 교체가 끝나고 난이후 갈곳 지정~

    ;----------------------------------------------------------------------------------------------- 해피 교체 1

    해피교체:
    Loop, 6
    {
    ?sleep 1000
    Imagesearch, vx, vy, 3, 34, 1400, 800,*100 %A_WorkingDir%\seven\해피1.bmp
    if errorlevel = 0
    {
    mouseclick, left, vx+3, vy+3
    sleep, 2000
    mouseclick, left, 1123, 656
    sleep, 2000
    Imagesearch, vx, vy, 280, 308, 456, 671,*50 %A_WorkingDir%\seven\교체선택.bmp
    if errorlevel = 0
    {
    mouseclick, left, vx+10, vy+20
    sleep 5000
    }
    Imagesearch, vx, vy, 3, 34, 1400, 800,*50 %A_WorkingDir%\seven\교체뒤로가기.bmp
    if errorlevel = 0
    {
    mouseclick, left, vx+10, vy+20
    return
    }
    }
    if errorlevel = 1
    {
    gosub, 해피교체2?
    }
    }
    return

    ;----------------------------------------------------------------------------------------------- 해피 교체 ?2

    해피교체2:

    Imagesearch, vx, vy, 3, 34, 1400, 800,*100 %A_WorkingDir%\seven\해피1-1.bmp
    if errorlevel = 0
    {
    mouseclick, left, vx+3, vy+3
    sleep, 2000
    mouseclick, left, 1123, 656
    sleep, 2000
    }
    Imagesearch, vx, vy, 280, 308, 456, 671,*50 %A_WorkingDir%\seven\교체선택.bmp
    if errorlevel = 0
    {
    mouseclick, left, vx+10, vy+20
    sleep 5000
    }
    Imagesearch, vx, vy, 3, 34, 1400, 800,*50 %A_WorkingDir%\seven\교체뒤로가기.bmp
    if errorlevel = 0
    {
    mouseclick, left, vx+10, vy+20
    sleep 1000
    return
    }
    if errorlevel = 1
    {
    gosub, 해피교체3?
    }
    return

    ;----------------------------------------------------------------------------------------------- 해피 교체 3

    해피교체3:
    {
    Imagesearch, vx, vy, 3, 34, 1400, 800,*100 %A_WorkingDir%\seven\해피1-2.bmp
    if errorlevel = 0
    {
    mouseclick, left, vx+3, vy+3
    sleep, 2000
    mouseclick, left, 1123, 656
    sleep, 2000
    Imagesearch, vx, vy, 280, 308, 456, 671,*50 %A_WorkingDir%\seven\교체선택.bmp
    if errorlevel = 0
    {
    mouseclick, left, vx+10, vy+20
    sleep 5000
    }
    Imagesearch, vx, vy, 3, 34, 1400, 800,*50 %A_WorkingDir%\seven\교체뒤로가기.bmp
    if errorlevel = 0
    {
    mouseclick, left, vx+10, vy+20
    sleep 1000
    return
    } ??
    if errorlevel = 1
    {
    MouseClickDrag, left, 835, 666, 835, 400
    }
    }
    }
    return


  • 독이든사과 2014.12.30 15:47
    파더님이 정리해주신 스크립트를 이용해 테스트 해보려는데 갑자기 이미지인식이 안되네요 ㅜ_ㅜ ..
  • profile
    파더 2014.12.30 18:03
    goto, start 빼고 아래 주석처리넣은거뺴곤은 .. 별다른게 없어요..
    짤르는거에 리턴넣었구.. 안되실리가없는데...ㅜ
  • 로뎀나무 2014.12.30 12:43

    F5키로 start 라벨을 이용하시는거고 start라벨이 다른 라벨에서 불러와지는경우라면


    F5::

    start:

    스크립트----


    이렇게만 바꿔주셔도 F5키로 start라벨이 동작합니다.


    추가로 loop 1 < 요녀석이 굳이 필요할까 싶네요 어차피 루프문을 1번만 쓸꺼라면 빼버리고 그냥 스크립트만 적어주셔도 될듯한데요..

    그리고 이미지서치를 써서 좌표를 얻어올때, 화면에 항상있는 이미지를 찾는거라면 굳이 if문을 쓰지 않으셔도 될 듯합니다. 이미지 서치가 성공적으로 행해지면 단순히 해당변수에 좌표값을 입력해주고 스크립트는 종료 되니까요..

    F5::

    start:

    Imagesearch, vx, vy, 280, 308, 456, 671,*50 %A_WorkingDir%\seven\해피30.bmp

    if errorlevel = 0

    {

    mouseclick, left, 520, 672

    gosub 해피교체

    }else

    {

    msgbox ,,,교체완료

    }

    return


    해피교체:

    Loop 6

    {

    ?sleep 1000

    Imagesearch, vx, vy, 3, 34, 1400, 800,*100 %A_WorkingDir%\seven\해피1.bmp

    if errorlevel = 0

    {

    mouseclick, left, vx+3, vy+3

    sleep, 2000

    mouseclick, left, 1123, 656

    sleep, 2000

    Imagesearch, vx, vy, 280, 308, 456, 671,*50 %A_WorkingDir%\seven\교체선택.bmp

    mouseclick, left, vx+10, vy+20

    sleep 5000

    Imagesearch, vx, vy, 3, 34, 1400, 800,*50 %A_WorkingDir%\seven\교체뒤로가기.bmp

    mouseclick, left, vx+10, vy+20

    return

    }else

    {

    ?gosub 해피교체2

    }

    }

    return


    해피교체2:

    Imagesearch, vx, vy, 3, 34, 1400, 800,*100 %A_WorkingDir%\seven\해피1-1.bmp

    if errorlevel = 0

    {

    mouseclick, left, vx+3, vy+3

    sleep, 2000

    mouseclick, left, 1123, 656

    sleep, 2000

    Imagesearch, vx, vy, 280, 308, 456, 671,*50 %A_WorkingDir%\seven\교체선택.bmp

    if errorlevel = 0

    {

    mouseclick, left, vx+10, vy+20

    sleep 5000

    }

    Imagesearch, vx, vy, 3, 34, 1400, 800,*50 %A_WorkingDir%\seven\교체뒤로가기.bmp

    if errorlevel = 0

    {

    mouseclick, left, vx+10, vy+20

    goto start

    sleep 1000

    }

    }

    else

    {

    ?gosub 해피교체3

    }

    return


    해피교체3:

    Imagesearch, vx, vy, 3, 34, 1400, 800,*100 %A_WorkingDir%\seven\해피1-2.bmp

    if errorlevel = 0

    {

    mouseclick, left, vx+3, vy+3

    sleep, 2000

    mouseclick, left, 1123, 656

    sleep, 2000

    Imagesearch, vx, vy, 280, 308, 456, 671,*50 %A_WorkingDir%\seven\교체선택.bmp

    if errorlevel = 0

    {

    mouseclick, left, vx+10, vy+20

    sleep 5000

    }

    Imagesearch, vx, vy, 3, 34, 1400, 800,*50 %A_WorkingDir%\seven\교체뒤로가기.bmp

    if errorlevel = 0

    {

    mouseclick, left, vx+10, vy+20

    goto start

    }

    }else

    {

    ?MouseClickDrag, left, 835, 666, 835, 400

    }

    return


    이정도가 되지 않을까 싶네요..

    주석을 사이사이 넣어주시는것도 나중에 수정할때 도움이 많이 됩니다.

  • 독이든사과 2014.12.30 15:50
    좋은 답글 감사합니다. 여러가지 방법들을 알려주셔서 하나하나 다 적용해보고 있습니다.
    그러나.. 새로운 문제에 직면했네요 ㅠ_ㅠ 흑.. 세븐나이츠라는 게임에서 몬스터 교체하는 창에서 이미지값이 바뀌는지 캡쳐해서 처음할때는 잘찾다가 두세번째부터 값을 찾지 못하는경우가 발생하고 있습니다. 이럴수가.. 대체 왜~! 다른곳은 다 괜찮은데 몬스터 교체 창에서만 이미지를 잘 찾지 못하네요.. 오차범위를 100까지 늘려주면 찾긴하는데 다른것과 혼동해서 찾고 99를 주면 찾지 못하고 ㅠ_ㅠ 캡쳐 다시해서 이미지를 새로 만들면 또 잘되다가 케릭을 바꾸면 또 못찾고.. 이건 게임상의 문제겠죠?"
  • 로뎀나무 2014.12.30 16:05
    제가 세나를 안해봐서요... 정확한 답변을 드리기 어렵네요;;
    저도 오토핫키를 접한지 약두어달밖에 안되고 프로그래밍쪽으로는 완전 무뇌한이라서요;;
    그리고! 저는 이미지서치보단 픽셀서치나 픽셀겟컬러를 애용하는 사람으로서.........
    참 답변해드리기 어려운 질문이세요 ㅎㅎ
    그럼 좋은 매크로 만드시길 바랍니다 ^^
  • 깨꿍 2014.12.31 10:14
    다음 이미지 서치전에 sleep값을 적게 줘서 이미지 로딩전에 서치를 한다에 한표...

List of Articles
분류 제목 글쓴이 최근변경 추천
질문 오토핫키 비활성 마우스 드래그 가능한가요?? 3 yodda 2017.12.17 0/0
질문 안녕하세요 간만에 오핫커뮤니티와서 질문!!! 16 파더 2014.12.20 0/0
질문 이미지 서치 질문드립니다 5 연구원 2014.12.21 0/0
질문 지정 영역 이미지서치시 영역값 구하는방법이먼가요? 13 파더 2015.01.20 0/0
질문 postmessage 방향키 질문입니다. 9 김철수씨 2020.04.03 0/0
질문 신기하네요.. 6 서재완 2015.01.23 0/0
질문 Dropdownlist 기본값 줄수 없나요?? 3 yodda 2014.12.21 0/0
질문 매크로 값 설정 저장 7 rh1406 2014.12.27 0/0
질문 별이되어라 매크로 관련 문의 8 퓨이러스 2016.03.13 0/0
질문 트레이아이콘 관련해서 질문 하나 있습니다. 3 마지막이야기 2014.12.22 0/0
질문 오토핫키 문제확인(디버깅) 질문 3 튀니지사람들 2014.12.24 0/0
질문 숨어야산다님 scite4 질문좀하고싶은데.. 튀니지사람들 2014.12.23 0/0
질문 몬길 재뽑기 질문좀 해도될까요.. 9 줄리어스시저 2014.12.25 0/0
질문 별이되어라... 오핫 있으신분 .. 개인적으로 공유 부탁... 7 제라딘 2015.03.21 0/0
질문 오랜만의 질문~ 오차율 전체 조정에대해 15 파더 2014.12.26 0/0
질문 오핫키로 포코팡 질문입니다. 칼시이나 2014.12.26 0/0
질문 몬길 매크로 돌리는중 지니모션 검은화면에 챗창만 나... 4 간부은녀석 2014.12.30 0/0
질문 열쇠대기중 2 백진희짱 2014.12.30 0/0
질문 loop가 끝난뒤 명령어 실행 9 독이든사과 2014.12.31 0/0
질문 goto로 탈출했다 생각했는데 loop1회가 더돌아보리는 ... 19 독이든사과 2014.12.31 0/0
Board Pagination Prev 1 ... 456789101112 ... 173 Next
/ 173

전체 최신 인기글

전체 주간 인기글