[오토핫키] 쿠키런 곰젤리를 터치하세요! 뚫기

Posted by Readiz
2014.03.01 20:50 연재/오토핫키


쿠키런 곰젤리를 터치하세요! 뚫기


  쿠키런이 시즌4 격변의 전조로 업데이트 되면서 매크로방지가 업그레이드 됐습니다. 저번에 예견했던 대로네요. 하지만 오토핫키로 매크로를 돌리셨던 분들이라면 이번에도 쉽게 뚫을 수 있습니다.


격변의 전조에서 새롭게 업그레이드 된 매크로 방지 시스템을 보여주는 쿠키런..

오토핫키가 있다면 쉽게 뚫린다.




  오토핫키를 이용해서 뚫으려면 우선 블루스택을 이용하여 쿠키런을 돌려야 합니다. 돌린 뒤에 오토핫키의 이미지서치 기능을 이용하여 뚫는 것입니다. 오히려 저번보다 더 간단해졌어요. 어떻게 하냐구요? 저기 가운데에 있는 곰젤리 모양을 인식시키면 됩니다. 저 같은 경우에는 아래 첨부한 이미지로 인식시켜 사용하는데 블루스택 버전이나 윈도우 버전에 따라 다르게 보일 가능성이 농후하므로 직접 캡쳐해서 쓰셔야 합니다.




 곰젤리 일부 사진을 찍으시면 되는거죠.. 그다음에 매크로 전체 코드를 공개해드릴 수는 없고, 곰젤리 인식하는 부분은 아래에 첨부해드리겠습니다. 참고하셔서 제작하세요. 전체 코드를 공유하면 아무래도 너무 많은 사람들이 쓰게 될 것 같아서 그렇게는 하지 않겠습니다. 스스로 공부하시면서 만들어보세요.


	
fMacroCheck() {
  loop, {
    imagesearch, x1, y1, 0, 0, 1060, 620, *50 c:\hotkey\game_gom.bmp
    if (ErrorLevel=0) {
      click, %x1%, %y1%
      sleep, 500
    } else {
      return
   }
  }
} 
	



  이미지서치로 인식한다는게 어떤 느낌인지 말씀드리기 위해 일부러 '곰젤리가 아닌 카드'를 누르는 데모영상을 올려보았습니다. 아래 영상 참고해보시구요. (곰젤리가 아닌 카드만 누르는 것을 볼 수 있습니다)




  그리고 실제 게임에 쓰이면 아래처럼 게임 진행이 자동으로 됩니다. 이미지인식 기반이기 때문에 꼬이지 않아서 좋습니다. (한번 켜두면 하루고 이틀이고 신경쓸 필요없이 계속 돌아갑니다)





  제작 과정중에 어느정도 질문은 받습니다만 처음부터 끝까지 알려달라는 식의 질문은 받지 않습니다. 이전 글도 첨부하니 한번 읽어보시면 도움이 되실 겁니다.




저작자 표시 비영리 변경 금지
신고
이 댓글을 비밀 댓글로
  1. 이전 댓글 더보기
  2. F5::
    loop, {
    imagesearch, x1, y1, 0, 0, 1060, 620, *50 c:\hotkey\game_gom.bmp
    if (ErrorLevel=0) {
    click, %x1%, %y1%
    sleep, 500
    }
    }

    코드만 넣어서
    곰젤리만 인식하게 하려고 하는데,
    그런데 F5 를 누르고 이미지가 있어도 멀뚱히 있네요...
    블루스택 상의 사진은 인식을 못하고
    윈도우 탐색기에 있는 것은 인식을 하네요
    왜 그럴까요?

    zw1012@naver.com

    으로 답주시면 감사할것같아요...
      • nevi
      • 2014.06.23 19:38 신고
      그림 인식이 잘 안되는 경우가 많습니다.
      블루스택은 기본적으로 랜더링을 통해 윈도우창을 가공합니다.
      (다중 해상도와 리사이징을 지원하기 위해서겠죠)
      가급적 단순한 그림을 찾도록 만들어야 합니다.
      저 같은 경우 카드 가장자리 일부를 찾습니다. 그럼 잘 잡더군요.
    • 강혜성
    • 2014.06.21 22:17 신고
    ImageSearch,x1,y1,0,0, A_ScreenWidth, A_ScreenHeight, *50 start.png
    if (ErrorLevel=0)
    {
    click,L, %x1%, %y1%
    sleep, 500
    }
    else {
    return
    }
    }
    에서 이미지를 찾았을때 클릭하는 좌표값은 어디에 적어야하나요?

      • nevi
      • 2014.06.23 19:40 신고
      코드로는 start.png 그림을 찾은 바로 그 위치의 좌표를 클릭하는군요.
      click,L %x1% %y1% 의 x1과 y1 값은 첫째줄인
      ImageSearch,x1,y1,0,0.... 에서 결정됩니다.
    • 강혜성
    • 2014.06.24 00:05 신고
    Ctrl::
    Imagesearch, x1, y1, 0, 0, 1119, 616, *50 C:\Users\user\Pictures\3.bmp
    If ErrorLevel=0
    {
    MouseClick, Left, %x1%, %y1%
    Sleep, 500
    }else{
    IF ErrorLevel = 1
    {
    MsgBox not fine
    }
    }
    Return
    에서 Imagesearch, x1, y1, 0, 0, 1119, 616, *50 C:\Users\user\Pictures\3.bmp 중에서
    1119,616을 고쳐야하나요?
    아님 0,0을 고쳐야하나요 둘다 고쳐서 적용해봤는데 3.bmp만 클릭하고 마네요 ㅠㅠ
    정확히 어떤것을 고쳐야하나요...
      • nevi
      • 2014.06.25 10:39 신고
      질문 의도가 잘 파악이 안되는데 3.bmp 이미지를 찾아 클릭하는게 아니라 3.bmp 그림을 찾으면 다른 어떤 곳을 클릭하도록 하고 싶다는 말씀인가요?
      함수의 의미를 먼저 파악해 봅시다.
      Imagesearch, x1, y1, 0, 0, 1119, 616, *50 C:\...\3.bmp
      화면의 0,0,1119,616 영역내에서 3.bmp와 같은 이미지를 찾아서 x1,y1
      변수에 저장하라. *50은 적당히 비슷하면 찾을걸로 해라 라는 의미임
      MouseClick,Left, %x1%, %y1%
      아까 찾은 x1,y1 좌표를 클릭하라. 즉 3.bmp 이미지 자리를 클릭.
      만약 다른 위치를 클릭하고 싶으면 해당 좌표를 알아 낸 후,
      MouseClick, Left, 200, 300 처럼 직접 좌표값을 써 주면 됩니다.
    • 강혜성
    • 2014.06.25 20:33 신고
    아! 감사합니다!!
    • 2014.06.30 21:20
    비밀댓글입니다
    • 강혜성
    • 2014.07.02 00:15 신고
    으아아아!!! 데브에서 매크로를 막아버렸습니다!!! 이번엔.. 점프하는 쿠키들은 고르라고하는데요... 어떻게 하면 될까요? ㅋㅋ
      • nevi
      • 2014.07.02 10:56 신고
      카드 게임이 2종 더 추가되었죠.
      점프카드와 슬라이드카드 찾기..
      둘 다 카드 내 쿠키 그림이 랜덤하게 바뀌기 때문에 귀찮습니다.
      그래도 크게 어렵지는 않습니다.
      어떤게임인지 알아내는 건 글자를 판독하면 되니까 기존과 같구요.
      카드 잘못 클릭하면 카드게임이 다시 시작되는걸 이용해서 카드
      한종류만 공략하면 됩니다.
      인식잘되는 쿠기 한 종만 (물론 전체그림은 잘 안됩니다. 특정 부위만
      따세요) 이미지 저장해 놓고 이 그림 나올 때까지 하면 됩니다.

      slide_01.bmp는 여우의 꼬리부분입니다.
      slide_card.bmp는 카드 귀퉁이(쿠키그림은 안 포함)입니다.

      fMacro_slide()
      {
      loop {
      imagesearch,x1,y1,100,100,600,370,*50 .\image\slide_01.bmp
      if(ErrorLevel=0) {
      mouseclick, left,%x1%,%y1%
      sleep, 1000
      } else {
      // 여우꼬리 못 찾았다면 랜덤하게 아무 카드나 클릭해서
      // 게임 restart
      imagesearch,x1,y1,100,100,600,370,*50 .\image\slide_card.bmp
      if(ErrorLevel=0) {
      mouseclick, left, %x1%, %y1%
      sleep, 500
      }
      else {
      return
      }
      }
      }
      }
      • nevi
      • 2014.07.02 11:06 신고
      사실 모든 카드에 대해 세세하게 프로그램하는게 제일 좋겠지만
      30종이 넘는 카드에 대해 잘 인식하는 이미지 따내는게 만만한 일이
      아닙니다. 매크로 만들 때 제일 힘든게 이미지 인식부분이라..
      어쨋든 대충 이렇게 만들고 만능해결책인 쿠키런 리스타트랑
      조합하면 어찌어찌 수행은 됩니다.
      어제 저녁에 돌려놓고 아침에 보니 잘 돌고 있더군요.
    • 강혜성
    • 2014.07.02 17:20 신고
    Ctrl::

    Imagesearch, x1, y1, 0, 0, 1286, 748, *50 C:\Users\user\Pictures\3.bmp
    If ErrorLevel=0
    {
    MouseClick, Left, %x1116%, %y612%
    Sleep, 500
    }else{
    IF ErrorLevel = 1
    {
    MsgBox, not fine
    }
    }
    Return
    를쓰게 되면 특정이미지를 찾아서 점프키를 누르는데..
    Ctrl::
    alt::
    exitapp
    loop, {
    Imagesearch, x1, y1, 0, 0, 1286, 748, *50 C:\Users\user\Pictures\3.bmp
    If ErrorLevel=0
    loop,{
    MouseClick, Left, %x1116%, %y612%
    Sleep, 50
    }
    }

    를쓰면 반응이 없습니다.. 왜이럴까요? 어디가 잘못된건지..
    • 강혜성
    • 2014.07.02 17:56 신고
    위에 질문한건.. 해결이 됐는데요..
    궁금한게 한가지 더 생겼습니다... 중간에 떨어져 죽거나.. 보탐을 다녀와서 내려온후 체력이 다해 죽는경우..
    이렇게 2가지 상황이있습니다...
    죽으면 게임결과창이 떠도 계속해서 점프키를 누를텐데..
    어떻게 하면 좋을까요??
      • nevi
      • 2014.07.02 21:31 신고
      좀 더 자주 게임결과창을 확인하면 좋겠지만 그러면 이미지처리 때문에 렉이 생겨서 달리는 와중에 점프가 늦어집니다.
      (정확히 말하면 그냥 뛰는 구간이 생김)
      그래서 적당한 횟수를 점프한 후 결과창이 떴는지 확인하는 식으로 합니다. 결과창 뜨고 얼마간 점프 누른다고 크게 시간적으로 손해나지는 않습니다.
    • RAPBOy
    • 2014.07.02 18:36 신고
    안녕하세요
    블로그 글 잘보고 배우는 도중에 어려운 부분이 있어서 도움이 필요해서 글써봅니다.
    지금 제가 만든게

    end::
    exitapp

    Home::
    loop
    {
    sleep 5000
    gosub, 쿠키
    sleep 5000
    }

    쿠키:
    {
    imagesearch, vx, vy, 0, 0, 1300, 880, *50 C:\Users\ho\Desktop\이미지\게임시작.png
    if ErrorLevel = 0
    {
    click, %vx%, %vy%
    }

    sleep 1000

    imagesearch, vx, vy, 0, 0, 1300, 880, *50 C:\Users\ho\Desktop\이미지\게임시작.png
    if ErrorLevel = 0
    {
    click, %vx%, %vy%
    }

    sleep 5000

    Mousemove 150, 800

    SetTimer, 점프, 300

    loop
    {
    imagesearch, vx, vy, 0, 0, 1300, 880, *50 C:\Users\ho\Desktop\이미지\확인.png
    if ErrorLevel = 0
    {
    SetTimer, 점프, off
    sleep 3000
    click, %vx%, %vy%
    return
    }
    }
    }

    점프:
    Mouseclick, left

    이렇게 사용중인데 게임시작은 무리없이 되지만 미니게임창에서 문제가 생겨요.
    이미지 서치를 통해서 해결하고싶은데
    fMacroCheck() {
    loop, {
    imagesearch, x1, y1, 0, 0, 1060, 620, *50 c:\hotkey\game_gom.bmp
    if (ErrorLevel=0) {
    click, %x1%, %y1%
    sleep, 500
    } else {
    return
    }
    }
    }

    이걸 통해서 해결하라고 하던데 감이안잡혀서.. 도움 부탁드립니다!

      • nevi
      • 2014.07.03 10:46 신고
      미니게임은 4종류입니다.
      1. 같은 카드 찾기
      2. 곰젤리카드 찾기
      3. 점프카드 찾기
      4. 슬라이드카드 찾기
      각각 다르게 프로그래밍 해야 합니다.
      같은 카드 찾기는 아래와 같이 하면 됩니다.
      fCardClick함수는 6개의 카드 중 해당 위치를 마우스 클릭해주는
      함수니까 알아서 만들면 되구요.
      fMacro_samecard()
      {
      a:=1
      loop, 5 {
      b:=a+1
      c:=7-b
      loop, %c% {
      fCardClick(a)
      fCardClick(b)
      b:=b+1
      }
      a:=a+1
      }
      }
      곰젤리 찾기는 간단합니다.
      곰젤리카드 중 특징이 있는 부분을 저장해놓고 찾으면 끝
      fMacro_findGom()
      {
      loop {
      imagesearch,x1,y1,100,100,600,370,*50 .\image\minigame_card02.bmp
      if(ErrorLevel=0) {
      mouseclick, left,%x1%,%y1%
      sleep, 1000
      } else {
      return
      }
      }
      }
      슬라이드와 점프는 어렵습니다.
      카드 내 쿠키가 animated되어 imagesearch로 찾기가 어렵네요.
      위에 방법을 써놓긴 했는데 확실히 효율이 떨어집니다.
      이건 좀 생각을 해 봐야 겠습니다.
      차라리 확률로 승부보는게 좋을 것 같기도 합니다. 랜덤하게 찍어도
      1/15 확률이니 해 볼만 하지 싶은데..
    • 강혜성
    • 2014.07.02 22:56 신고
    어떤 명령어를 써야할지 모르겠습니다 ㅠㅠ
    • RAPBOy
    • 2014.07.03 15:14 신고
    nevi님 답변감사합니다. 덕분에 완성에 가까워지고 있습니다.
    nevi님 말씀대로 슬라이드와 점프 이미지를 찾는게 어려워서
    fMacroCheckSlide()
    {
    Winclose, BlueStacks App Player
    sleep 5000
    run, C:\Users\Public\Desktop\Start BlueStacks
    }

    fMacroCheckJump()
    {
    Winclose, BlueStacks App Player
    sleep 5000
    run, C:\Users\Public\Desktop\Start BlueStacks
    }

    이렇게 사용중인데 문제는 없는지 그리고 곰젤리 찾는 수식은 위 글의 형식을 그대로 가져왔는데
    4개의 곰젤리가 있는데 3개 이상을 찾지 못하는게 궁금합니다...

    답변 부탁드립니다.!
      • nevi
      • 2014.07.03 22:08 신고
      전 잘 됩니다.
      아마 이미지 문제일 겁니다.
      랜더링이 균일한게 아니라 사람 눈에는 같아 보여도 다르게 인식될 수 있습니다. 그래서 가급적 단순한 부분을 잡아야 합니다.
    • RAPBOy
    • 2014.07.04 09:43 신고
    감사합니다 덕분에 완성시키고 잘사용중입니다.ㅎㅎ
    근데 슬라이드랑 점프는 도저히 인식시키기가 어려워서 포기하고
    종료 재시작으로 하고있네요 ㅎㅎ
    • 강혜성
    • 2014.07.05 02:24 신고
    점프 횟수 체크하는 명령어가 무엇인가여?
      • nevi
      • 2014.07.06 12:31 신고
      점프 횟수는 변수로 사용자가 직접 제어해야 합니다.
      게임 플레이 영상에서 점프 횟수까지 알아내는건 지극히
      어려울겁니다. 그런데 그렇게 해야할 필요가 없죠.
      autohotkey 스크립터 -> 게임 으로 가는 명령흐름은 제어가 쉽습니다만 반대로 게임 -> autohotkey 로의 흐름은 매우 어렵습니다.
      실제로 imagesearch로 게임의 현 상태를 알아내는 건 매크로 작업 중 제일 어려운 부분이죠.
      예를들어 50번 점프를 시키고 싶다면 아래와 같이 하면 큰 문제없이
      쿠키가 50번 점프할겁니다.
      loop 50 {
      mouseclick,left, 64,340
      sleep 200
      }
      그런데 무조건 점프를 시키고 게임 내에서 이미지서치를 통해 점프 동작 50번을 알아내겠다면 지극히 어렵습니다.
      아래와 같이 작성하면 논리적으로는 말이 되나 실제로는 이미지서치가 제대로 안되어 오동작 투성이일겁니다.
      jumpNum=0;
      loop {
      mouseclick, left, 64,340
      sleep 200
      imagesearch,x1,y1,0,0,640,480,*50 jump_img.bmp
      if(ErrorLevel=0)
      {
      jumpNum+=1;
      }
      if(jumpNum>50) break;
      }
    • hyoseap08
    • 2014.07.11 16:39
    이용약관위배로 관리자 삭제된 댓글입니다.
    • 임효섭
    • 2014.07.11 16:43
    이용약관위배로 관리자 삭제된 댓글입니다.
    • 강혜성
    • 2014.07.18 00:04 신고
    Ctrl::

    Imagesearch, x1, y1, 0, 0, 1286, 748, *50 C:\Users\user\Pictures\3.bmp
    If ErrorLevel=0
    loop 200 {
    mouseclick,left, 1116,216
    sleep 200
    }
    게임시작후 이 스크립트를 쓰면 정삭적으로 클릭을하는데요
    //////////////////////////////////////////////////////////
    Ctrl::
    alt::
    pause

    loop,{
    Imagesearch, x1, y1, 0, 0, 1286, 748, *50 C:\Users\user\Pictures\1.bmp
    If ErrorLevel=0
    {
    MouseClick, Left, %x1%, %y1%
    Sleep, 2000
    return
    }


    Imagesearch, x1, y1, 0, 0, 1286, 748, *50 C:\Users\user\Pictures\2.bmp
    If ErrorLevel=0
    {
    MouseClick, Left, %x1%, %y1%
    Sleep, 6500
    return
    }

    Imagesearch, x1, y1, 0, 0, 1286, 748, *50 C:\Users\user\Pictures\3.bmp
    If ErrorLevel=0
    loop 200 {
    mouseclick,left, 1116,216
    sleep 200
    return
    }
    }
    이 명령어를 쓰게 되면 두번째 까지는 가다가 마지막 3.bmp를 찾지 못하고 클릭을 하지못합니다 ㅠㅠ.. 어디가 잘못된걸끼요?
    • hoya
    • 2014.08.25 19:00 신고
    감사합니다
    점프/슬라이드 쿠키 찾기는 여러번 틀리면서 확인해봤는데 2/3번 4/5번 2/4번 3/5번 카드 선택이 정답인 경우가 매우 많았어요.
    풀릴 때까지 넷 중 하나를 골라서 체크 후 재확인시키도록 하니 대부분 10회 이내로 풀렸어요.
    캘라그래피의 찾아라!를 인식시켜서 같은 함수로 점프/슬라이드 둘 다 해결봤어요
    • 쿠키런
    • 2014.09.11 00:28 신고
    어느정도 기초지식(?) 있는 사람입니다.
    저기있는 공식을 어떻게 대입해야하나요?
    이전글 매크로 우회하는건 적용해서 하고있는데
    fMacroCheck이라는 수식어를 어떻게 적용시켜아하나요?
    • 2014.10.15 15:53
    비밀댓글입니다
    • 오핫초보
    • 2015.05.13 09:48 신고
    아래와 같은 방식으로 미니게임을 인식 불가능한가요?

    fMacroCheck() {
    loop, {
    imagesearch, x1, y1, 0, 0, 1060, 620, *50 C:\Users\000\Desktop\마도요/공주_슬라이드.png
    if (ErrorLevel=0) {
    click, %x1%, %y1%
    sleep, 500
    } else {
    return
    }
    }
    }

티스토리 툴바