[오토핫키] 이미지서치를 활용한 쿠키런 생명반사 매크로

Posted by Readiz
2014.02.01 12:04 연재/오토핫키




쿠키런 생명반사 매크로


 사실 매크로를 배우는 데에는 게임매크로 제작 만한 방법이 없습니다. 솔직히 게임을 자동으로 플레이 하게 하는 것도 가능하지만 이는 너무 불법적인 플레이를 하게 하는 것이고, 생명반사 매크로 정도는 공개해도 되겠다 싶어서 제작방법을 알려드립니다. 타게임에서는 생명을 한번에 다 받는 기능을 구현해두고 있지만 쿠키런은 그렇지 않죠. 이를 가능하게 하는 것이 오토핫키+블루스택을 조합한 방법입니다.


  동작영상을 보여드리겠습니다.


 


  사실 영상까지 첨부해야 하나.. 싶지만 왠지 안올리면 안믿으실 것 같기도 하고 해서..


  우선 제작방법을 자세히 알려드리지는 않습니다만 핵심적인 것들은 알려드릴테니 잘 따라오세요.




1. VMWare에 블루스택 설치


  VMWare에 올라가는 운영체제는 WinXP면 충분합니다. 이전에 제가 포스팅해놓은 글이 있는데, 이걸 참고해서 XP를 깔아주세요. 블루스택은 SP3에서 돌아갑니다.



  사실 이 부분에 대해 도움을 더 드리고 싶지만 2월 1일자 쿠키런 apk 파일을 올려드리는 것으로 대신할게요.



  암호는 blog.readiz.com 이고 이 apk파일을 블루스택을 까신 다음에 실행시키면 쿠키런이 깔립니다. 쿠키런을 설치하는데에 제일 간편한 방법이에요. Play스토어 같은거 블루스택에 깔면 오작동 하더라구요 제 경우엔.. 그냥 apk파일 따서 넣는게 제일 낫습니다.


  블루스택에서 쿠키런 실행 안되면 블루스택 버전을 바꿔서 깔아보시라는게 제 조언입니다. 최신버전에서는 오히려 안돌아가더군요.






2. 오토핫키로 매크로 만들기


  사실 지금 제작한 풀버전에서는 생명반사와 생명발송을 자동으로 반복해서 하는 구조로 만들어뒀지만, 만드는 것이 좀 복잡하기 때문에 생략합니다. 지금 공개해드리는 것은 '생명 반사' 만 자동으로 하게 이미지서치를 활용해서 만든 매크로입니다. 매크로 코드는..


	
fReceive() {
 k:=0
 loop, {
  j:=0
  loop, {
    i:=0
    imagesearch, x1, y1, 0, 0, 1300, 900, *50 c:\hotkey\receive.bmp
    if (ErrorLevel=0) {
      i:=i+1
      j:=j+1
      k:=0
      click, %x1%, %y1%
      sleep, 300
    }
    imagesearch, x1, y1, 0, 0, 1300, 900, *50 c:\hotkey\receive_ok1.bmp
    if (ErrorLevel=0) {
      i:=i+1
      j:=j+1
      k:=0
      click, %x1%, %y1%
      sleep, 800
    }
    imagesearch, x1, y1, 0, 0, 1300, 900, *50 c:\hotkey\receive_ok2.bmp
    if (ErrorLevel=0) {
      i:=i+1
      j:=j+1
      k:=0
      click, %x1%, %y1%
      sleep, 300
    }
    imagesearch, x1, y1, 0, 0, 1300, 900, *50 c:\hotkey\receive_ok3.bmp
    if (ErrorLevel=0) {
      i:=i+1
      j:=j+1
      k:=0
      click, %x1%, %y1%
      sleep, 300
    }
    imagesearch, x1, y1, 0, 0, 1300, 900, *50 c:\hotkey\sendError.bmp
    if (ErrorLevel=0) {
      i:=i+1
      j:=j+1
      k:=0
      click, %x1%, %y1%

      sleep, 500
    }
    if (i=0) {
      break
    }
    sleep, 500
  }
  MouseClickDrag, left, 218, 480, 218, 150, 5
  sleep, 1000
  if (j=0) {
    k:=k+1
  }
  if (k>3) {
    return
  }
 }
} 
	


  위 함수를 원하는 실행키에다가 연동시키시면 됩니다. 별로 어려운 구조는 아니죠? 받고 드래그 하는 것이 다에요. 생명을 다 받으면 자동으로 함수는 끝납니다.


  그런데, 저기 경로에 주목해서 보셔야 할 것이, receive_ok.bmp와 같은 그림 파일인데.. 이는 실제 쿠키런을 실행시키신 다음에 PrintScreen 키로 캡쳐를 하셔야됩니다. 컴퓨터마다 이미지가 조금씩 다를 수 있기 때문에 이것까지 공개해드릴 수는 없고, 직접 찍으셔야 합니다. 아래와 같이 C:\hotkey\ 폴더에 넣으시면 되구요.





  버튼을 다 찍으실 필요는 없고 일부만 찍으시면 됩니다. 찍은 이미지의 좌측 상단을 기준으로 클릭을 하게 되어 있으니, 상단까지 버튼이 다 나와서는 안됩니다. 실제로 마우스가 클릭될 위치를 고려하셔야 돼요.



  

  여기까지 오실 정도면 더이상 뭐 설명 안드려도 될 듯 합니다. 큰 줄기에서의 질문은 코멘트 남겨 주시면 답변 드리겠습니다만 A to Z로 물어보시는 분들에게는 답변이 곤란한 점 숙지해주시기 바랍니다. 솔직히 저도 시행착오를 많이 겪었고, 충분히 검색하면서 해결해 나갈 수 있는 과정들입니다. 이제 생명매크로로 생명걱정 없이 쿠키런 플레이 하자구요.

저작자 표시 비영리 변경 금지
신고
이 댓글을 비밀 댓글로
  1. 이전 댓글 더보기
  2. VM에 메모리랑 cpu개수는 얼마나 잡으셨나요?
    • 램 1GB로 잡았고 CPU 1코어입니다. 어차피 핸드폰 게임이니까 높은 사양은 필요 없습니다.
      다만 본 컴퓨터가 충분히 빨라야겠죠. 저는 i5 4670을 쓰고 있으니 참고바랍니다.
  3. xp에서 사용하는 블루스택 버전을 알려주시면 매우 감사하겠네요 ㅜ.ㅜ
    막상 쿠키런 실행이 안되네요..
    • 저도 막상 그 부분에서 굉장히 힘이 들었습니다. 그런데 이것은 답은 없는 듯 한데, 여러 버전을 깔다보면 되는 버전이 있습니다.
      저같은 경우에는 0.8.0.2997 버전인데, 굉장히 잘 돌아갑니다. 절대적인게 아니라 아마 컴퓨터를 많이 타는 것 같구요, 여러 버전 돌리시다보면 돌아가는게 있을 겁니다.
    • 때보
    • 2014.03.18 06:35 신고
    처음엔 블루스택으로 매크로 돌리는것만 보려 왓다가, 이 새벽까지 잠못들게 만들어 주시네요 ㅋㅋ
    결국엔 함수를 여러개 만들어 놓고 특정 상황에서 그 함수를 불러오는것까지 만들려면,
    어지간히 공학도 아니구서는 힘들겟네요;;
    쿠키런 매크로 만들려면, 처음엔 이미지 서치로 확인 시작 눌루게 만들어주고, 간단 클릭으로 지나가다가 확인 나오면 이미지서치로 다시 클릭, 그러다가 매크로 방지 나오면 함수 불러와서 다시 매크로 방지 뚫고 다시 이미지 서치로 시작 버튼 클릭... 루트...
    인것은 알겟는데 함수 불러오는 부분, 이미지 서치에서 매칭하는 방법, 등등에서 기본적으로 막히네요 ㅋㅋ
    십몇년전에 군대에서 매크로 만들어서 끄적대던 실력으로 다시 할려니 힘드네요...
    몇일 고생해봐야 겟습니다.
    게임 쉽게하려다 점점 더 이상한쪽으로 빠져드네요 ㅋㅋ
    • ㅋㅋㅋㅋ 저도 같았어요. 집을 짓는 기분으로 하나하나 부분부분 만들어서 최종적으로 게임 전체에 대해 돌아가게 하는게 재밌습니다. ㅎㅎ
    • 쿠키런
    • 2014.03.25 20:03 신고
    받고보내기만 누르려고하는데 이건 이미지파일을 더 크게 하면되나요
    • 이미지 파일 크기는 중요치 않습니다. 무슨 이미지든 인식합니다.
  4. 주인장님께서 한화 선발투수 송창현을 카톡 친구로 두고 계신다는 것이 흥미롭습니다!! :)
    • 아마 쿠키런 유저분 중에 송창현 투수 팬이 있나봐요. ^^
    • 2014.05.19 15:31
    비밀댓글입니다
  5. 오토핫키 에서 := 이거는 뭐고, = 이거는 뭔가요?
  6. 그리고 MouseClickDrag, left, 218, 480, 218, 150, 5
    이거 에서 맨 뒤 5는 무얼 의미 하나요 ?
  7. 아 ! 위에 5는 속도를 의미 하는군요 !
    아 근데, 실행 시킬 려고 하니, 맨위에 다가
    F9::
    fReceive() ...
    F9 단축키로 만들고 실행 하니, D:\Cookie\HTSend\Run.ahk (2) : ==> A label must not point to a function.
    이런 에러가 뜨는데 뭐가 잘못된거죠 ?
    • 1. :=는 대입한다는 의미이고 =는 비교한다는 의미로 쓰입니다. 그런데 아닐때도 있는 듯 하고 좀 애매하긴 합니다.
      2. 함수를 정의하는 부분이 있어야 하고 실행하는 부분이 있어야 합니다. 라벨은 함수를 실행시키는 부분이 포함되어야 합니다.
  8. 우와, 명확한 답변 정말 감ㅅ ㅏ드립니다. !_!
    위와 같이 변수를 이용 하면, 하트 반사 뿐만 아니라, 발송 까지도 가능한 부분이라 생각 되옵니다만...
    아직 오토핫키의 정의와 개념을 부분적으로만 알고 있는지라, 응용을 하기에는 너무 벅이 찹니다.
    송구한줄 알고, 하나만더 여쭙겠습니다.

    보통, 발송 을 하려면 3개의 이미지가 필요 하다고 가정할때,
    A, B, C 이미지가 다 거짓 일경우 D 를 실행 한다.
    이는, 거짓일 경우 발송 보내는 화면안에 발송 버튼이 없고, 다 V 체크로 되어있을때,
    즉 D는, 마우스 드래그 함수가 되겠죠!
    그리고, 다 발송 하면 하나의 이미지를 검색시켜 실행 시켜 함수 종료!

    라는 알고리즘 을 만들고 싶은데, 위와 같은 토대로 만들수 있는지?
    만들수 있다면 조그만한 힌트 하나, 부탁드리겠습니다.

    정말, 일주일도 안되, C언어, 가장 기본적인 프로그래밍 언어 하나, 하나, 모르는 상태에,
    맨땅에 헤딩하면서 까지, 플레이 오토만들고, 선물 까는 오토 만들고, 하나, 하나, 배워가면서 깨닮음 을 얻는것 자체에,
    크나큰 희열과 전율을 느끼면서 계속 오토핫키에 대해 공부 하고있습니다.!
    저에게도 조그만한, 가르침 한가지 부탁드리는 바 입니다.!

    점점 더워져 가는 날씨속에, 고생 하시는줄 사뢰됩니다.
    항상 건강챙기시며, 나날히 건승 하십시요!
    • 우선 생명 발송 버튼을 하나 찍어두고요.
      현재 화면이 생명 발송 화면임을 알 수 있는 이미지를 찍으실 수 있을 것입니다.
      그리고 현재 화면이 생명 발송 화면이고, 생명 발송 버튼이 있으면 계속 그 버튼을 누르게 해서 보내게 하고, 확인 버튼도 마찬가지로 계속 눌러지게 합니다.
      그러다가 여전히 생명 발송화면인데도 발송 버튼이 없으면 드래그합니다.
      드래그 하고 나서도 발송 버튼이 계속 없으면 (3회정도로 잡고) 다 보냈다고 치고 다른 작업으로 넘어가게 하면 됩니다.
  9. 그리고, 위 알고리즘 에서 보면 아래 부분에, J 가 0인 경우 K 값에 1을 대입 하는 경우가
    마지막, K>3 를 맞춰주는 위함인가요 ?

    • k>3은 예전에 생명반사 할 때는 모두 받고 보내기가 없어서 드래그를 몇번 해도 확인 버튼이 없으면 모두 받은 것으로 보고 종료시키기 위해 존재했었습니다. 드래그 3번 해보고도 없으면 다 받았다고 판단한거죠.. 지금은 이렇게 할 필요가 없을 것입니다.
  10. 감사합니다. 제가 제작중인건 다른 게임이지만
    도움이 많이 되었네요 ^^
    • 블택
    • 2014.08.05 16:40 신고
    vmware 에 블루스택을 깔려고하면 그래픽 에러가뜨는데 어떻게하나요?
    본컴퓨터에서는 뜨지 않았는데 ...
    • 나리나리개나리
    • 2014.09.24 18:40 신고
    덕분에 잘 사용하고 있습니다 ㅎ
    좀 궁금한 점이 있는데 PC한군데에서는 빠르게 잘 돌아가는데
    다른 PC에서 돌리니 작동은 하나 속도가 10배 정도 느려졌는데
    하드웨어 스펙은 거의 비슷하구요..
    혹시 영향을 미칠만한 요소를 알수 있을까요?
    • 토깽이
    • 2014.09.25 16:33 신고
    안녕하세요. Readiz의 글을 보며 오토핫키 매크로 소스 짜기 습득 중에 있습니다.
    2시간동안 두뇌 풀가동하면서 짜고 있는데 막힙니다... 혹시 http://blog.naver.com/pst666/220132498233
    제 블로그에 소스와 문제발생 영상을 올려놨는데 보시고 어떤 부분이 잘못되었는지 설명좀 해주실수 있을까요? 부탁드립니다.
      • 지나가다가
      • 2014.09.30 18:27 신고
      블로그 가서 봤는데 아마도..

      1. 투명배경 이미지이던데 이부분을 캡쳐한 그대로 저장해보시면 어떨지..
      2. PNG 포맷도 지원하는 것으로 나와 있으나 그림판에서 BMP로 저장해 사용하시길 권장...
      3. 아래 소스가 동작하는지 장담 못하나 개념만 잡으시길..
      재귀호출 관련 내용이 헬프파일 설명에는 없으나 될꺼라는 기대감으로... 안되면 대충 수정하시면 될듯... 테스트 안해봤습니다.

      $F2::
      WinGetActiveStats, Title, Width, Height, X, Y

      if isActive(Title) {
      searrchImage("upwarrow")
      sleep 500
      searchImage("train")
      }
      return


      isActive(Title) {
      if ( Title <> "BlueStacks App Player" ) {
      msgbox "Change window to BlueStacks"
      return 0
      }

      return 1
      }


      searrchImage(imgName) {
      WinGetActiveStats, Title, wndWidth, wndHeight, wndX, wndY

      if isActive(Title) {
      Loop {
      ImageSearch fndX, fndY, 0, 0, wndWidth, wndHeight, *50 C:/auto/%imgName%%A_Index%.bmp
      ;msgbox %ErrorLevel%:C:\auto\%imgName%%A_Index%.bmp

      if ( ErrorLevel = 0 ) { ; 이미지와 일치하는 영역이 있다면
      if ( imageName = "upwarrow" ) {
      searrchImage("replace") ; 재귀호출
      }
      else {
      MouseClick, left, fndX, fndY
      }
      break
      }
      else
      if ( ErrorLevel = 1 ) {; 이미지와 일치하는 영역이 없다면
      if ( imageName = "upwarrow" ) {
      searrchImage("continue") ; 재귀호출
      }
      break
      }
      else
      if ( ErrorLevel = 2 ) { ; 경로에 해당하는 이미지 파일이 없다면
      break
      }
      }
      }
      }

      4. 위에서 저장할 파일은 4개 입니다.
      upwarrow1.bmp : 화살표 이미지
      trainning1.bmp : 훈련 이미지
      continue1.bmp : 유지 이미지
      replace1.bmp : 교체 이미지

      글자가 있는 이미지는 글자를 캡쳐하면 좋을듯 싶구요
      전체화면 모드이거나 해상도가 변경될 경우 이미지가 다를 수 있으므로 그때 그때 이미지를 캡쳐해 1,2,3,4.. 이런식으로 저장해 두면 해상도 변경에 상관없이 처리될겁니다.

      동작 하지 않는 부분이 있으면 수정해 사용하셔요 ^^a

      경로명을 바르게 역슬래쉬로 바꿔줘야 합니다.
    • 궁금
    • 2015.01.04 23:15 신고
    imagesearch, x1, y1, 0, 0, 1300, 900, *50 c:\hotkey\receive_ok2.bmp
    위에 라인에서 1300, 900 의 의미는 무엇인가요? 해상도인지 좌표 인지 좌표가 어떻게 정해 지는지 모르겠어요..

    if (ErrorLevel=0) {
    i:=i+1
    j:=j+1
    k:=0
    click, %x1%, %y1%
    (%x1%, %y1%) 이것의 의미는 무엇인가요?
    sleep, 300

    오래된 글에 질문을 남겼는데 궁금 하네요..
    지금 블루 스택으로 테스트 해보고 있으나.. 뭔가 안돼서요 ㅜㅜ
    • 2015.03.28 00:38
    비밀댓글입니다
    • 2015.08.09 18:32
    비밀댓글입니다
    • 넘궁금...
    • 2015.10.10 04:48 신고
    이미지캡쳐할때 크기가 실제크기와 똑같아야하나여?
    • 블루스택 말고
    • 2016.12.10 18:11 신고
    블루스택 말고 다른 프로그램에서도 실행이 되는지 해상도만 바꾼다면...

티스토리 툴바