매크로

조회 수 2604 추천 1 댓글 32

다운은 여기에서

----------------

양심 찔려서 막음.2016.08.17.15:54

----------------

구글 검색 방지로 제목을 저렇게 하였구요.

녹스에서 사용하는 gdip 기반 비활성 이미지 서치입니다.


저도 처음엔 ADB로 제작하려고 하였으나 속도가 생각보다 너무 느려 여기저기 검색해서 만들어보았습니다.

화면 해상도는 800*500 DPI 60입니다. 어차피 사이즈 안 맞으면 꺼지게 코딩해두었습니다. 어차피 안되거든요.

DPI는 맞춰주시는게 이롭지 않을까 싶어요. 노트북에서 제작하는 와중 DPI를 높이니 하도 힘들어해서 내리고 했거든요..

또 녹스가 OPENGL옵션으로 실행되있으면 안돌아가게 해놨어요. 메세지가 하나도 안 뜬다면 정상적으로 작동될거란 신호입니다.

메인으로 제작한 코드는[  8월 10일의 시도.ahk ]입니다. 요걸 참고하시면 되요.


프로그램의 기능은 레이드매크로 전반적인 부분과 더불어 휴대폰으로 확인할 때 편하라고 자동로그인도 넣어두었어요.

레이드 화면에서 눌러야 작동이 됩니다. 다만 자동로그인 기능은 녹스 실행시 공지부분에서 다음부터 안보겟다 체크하는건 다 수동으로 제껴야해요. 넣는걸 깜빡했어요..그리고 겸사겸사 토벌대 전복방지용 자동래디 / 빠른 다음시작 기능을 넣기도 했어요.


또, 녹스에서 오토핫키를 특히 비활성 이미지 서치로 사용하고자 하시는 분께 당부말씀 드리자면

초기 실행시 녹스는 OPENGL 방식이라 스크린캡쳐시외엔 이미지 서치로 사용하기 어렵습니다

즉, 비활성 서치로 구동할 수 없는거죠. 이거 때문에 검색와중에 OPENGL에서 사용가능하게끔 하는 관련 라이브러리를 검색하였지만 사용하는건 제 능력 밖의 일이라 느껴져서 포기하고 다른 길을 찾았어요. 첨부파일 안에 OPENGL라이브러리를 함께 첨부하였습니다. 사용하실 분은 사용하시고 사용법을 가르쳐주시는걸 부탁드릴게요. 아무튼 제가 찾은 해결방법은 설정에서 Direct모드로 바꿔주는 거엿죠.

 그리고 Direct모드로 하게되면 잘 돌아갑니다. 다만 문제가 있는게 사이즈가 제멋대로 설정되고 해상도가 제 멋대로 설정되는 등 몇 번의 녹스 재부팅이 필요합니다.

 개인적 소감으로 김영감님이라고 펀땡땡에 있으시는 분은 EKM_lib라고 따로 녹스나 미뮤용 라이브러리를 제작하였다는데 한번 보고싶네요. ADB를 안쓰고 gdip기반 라이브러리 만으로 비활성 서치 부분을 가능하다 하시니 언제고 여유가 된다면 참고하시길 바랄게요.


그리고 코드설명에 대한 코멘트입니다. 제일 먼저 말씀드릴 건 코드 정리가 안된 부분이 많아요.


주된 함수는 Gclick과 Gsearch인데

Gsearch에서 쓸데없는 부분은 지우시고 하시면 됩니다. 아래 지운걸 올려요. adb로 하려던 흔적들이 남아있네요.


Gsearch("x.png",vx,vy)

로 사용하고 이미지를 찾을 경우 true값을 반환하며 vx와 vy에 해당 좌표를 저장합니다.

실패할 경우 false값을 반환하며, true와 false는 화면 체크 등에 유용하게 쓰입니다.

if(gsearch("a.png",vx,vy) = true and gsearch("a.png",vx,vy) = false or gsearch("c.png",vx,vy)=true)

이런식으로 조건문을 달 수 있는거죠.


Gclick("x.png")로 사용하고 그냥 클릭하는 기능입니다.

물론 vx와 vy를 global 선언(보통은 없어지지만 선언할 시 전 영역에 같이 쓰이는 변수로 선언) 하게되면

controlclick으로도 할 수 있지만 보기편하려고 Gclick으로 만들었어요.

그리고 함수 호출 내에서 gui를 수정하게끔 해서 매크로 제작시 어디서 멈추었는지 확인하기 쉽게 끔 했습니다. 저편하자고 넣은 기능인데 이게 또 은근 보는 맛은 있더라구요.

주석으로 달려있는 것 중에

;Gdip_SetBitmapToClipboard(pBitmapHayStack) 은 클립보드로 보내는겁니다. 제작시 스크린샷이 필요한 경우가 많잖아요? 이걸 넣고 하게되면 오류가 난 곳에서 빙빙 돌고 있을 텐데 그대로 그림판 여셔서 붙여넣기 하시면 됩니다. 다만 매크로가 켜져있을 경우엔 일반적인 복붙이 안되서 그냥 주석처리 해두었어요.


나머지 잔재들은 사용자에게 무슨 문제가 생겼는지 알려주게끔 하려고 사이즈 체크, 최소화 여부 등등을 추가했어요. 이게 정답이다 말할 수 없어서 그냥 참고하시길 바랍니다.


사용후 피드백과 첨언은 언제고 받습니다.


수고하세요. 스크립타 제작자 S.bam.23 올림




;------

Gsearch(image, byref vx, byref vy)
{

winget,hwnd,,ahk_exe Nox.exe, QWidgetClassWindow
pToken:=Gdip_Startup()

pBitmapHayStack:=Gdip_BitmapFromhwnd(hwnd)
pBitmapNeedle:=Gdip_CreateBitmapFromFile(image)
;Gdip_SetBitmapToClipboard(pBitmapHayStack)


if Gdip_ImageSearch(pBitmapHayStack,pBitmapNeedle,list,0,0,0,0,60,,1,1)
{
StringSplit, LISTArray, LIST, `,
vx:=LISTArray1
vy:=LISTArray2
errorlevell:=0
Gdip_DisposeImage(pBitmapHayStack), Gdip_DisposeImage(pBitmapNeedle)
Gdip_Shutdown(pToken)
;msgbox true return
guicontrol , , Status_text, Find %image%
Sleep,100
return true
}
else
{
errorlevell:=2
Gdip_DisposeImage(pBitmapHayStack), Gdip_DisposeImage(pBitmapNeedle)
Gdip_Shutdown(pToken)
guicontrol , , Status_text, fail %image%
;msgbox false return
erro_check:=errocke+1
Sleep,100
return false
}
}


Gclick(image)
{
 ;winget,hwnd,,ahk_exe Nox.exe, QWidgetClassWindow
 pToken:=Gdip_Startup()
 pBitmapHayStack:=Gdip_BitmapFromhwnd(hwnd)
 pBitmapNeedle:=Gdip_CreateBitmapFromFile(image)
 ;Gdip_SetBitmapToClipboard(pBitmapHayStack)
 sleep, 150
 
 if Gdip_ImageSearch(pBitmapHayStack,pBitmapNeedle,list,0,0,0,0,60,,1,1)
  {
  StringSplit, LISTArray, LIST, `,
  vx:=LISTArray1
  vy:=LISTArray2
  sleep,200
  controlclick,x%vx% y%vy%,%noxxx%,%subb%
  sleep,200
  guicontrol , , Status_text, Find %image%
  ;mousemove, %vx%,%vy%
  ;msgbox x%vx% y%vy%,%noxxx%,%subb% return true
  Gdip_ImageSearch(pBitmapHayStack,pBitmapNeedle,list,0,0,0,0,60,,1,1)
  
  /*
  if(vx <> LISTArray1 and vy <> LISTArray2)
  {
   Gclick(image)
  }
  */
  
  Gdip_DisposeImage(pBitmapHayStack), Gdip_DisposeImage(pBitmapNeedle)
  Gdip_Shutdown(pToken)
  
  return true
  }
  else
  {
  
  Gdip_Shutdown(pToken)
  guicontrol , , Status_text, fail %image%
  erro_check:=errocke+1
  
  }

  return false
}





  • 박진가 2016.08.17 10:42

    감사합니다 사용해볼게요 미뮤에서는 안되나요?

  • nadore 2016.08.17 12:25
    미뮤에서는 아직 방법을 못 찾았네요
    미뮤 옵션 내에 OPENGL이 아니라 다이렉트로 바꾸는 옵션만 있으면 가능합니다

    근데 없어서 안되요ㅠ

  • 빡짱 2016.09.28 19:18
    님 오늘패치로 메크로가 안데는데요 어느부분을 손봐야하나요?
    혹시 알려주실수있나요
  • 슉슉이 2016.08.17 13:35

    저도 녹스를 사용합니다. 초반에 녹스에 관한 정보가 없어서 많이 고생했죠.


    //외부 링크가 안달려서 복붙합니다.

    사이즈고정 옵션 체크후 해상도를 변경하면 창크기가 변하지 않습니다.

    녹스를 실행하면서 매개변수로 각 설정을 강제할 수 있습니다. 한가지 주의할 건 파라미터로 지정할 수 있는 최하 DPI가 160이라는 겁니다.


    Nox.exe
    -clone:<nox_id>                                                    #멀티 실행시 특정 기기 실행
    -apk:<local_apk_path>   [-activity:<package_name/launchable_activity_name>   -param:<start_params>]                       
                                                                                    #로컬 apk를 설치 및 실행, 동작 및 변수 지정 가능
    -package:<package_name>                                   #패키지 이름으로 실행
    -title:<player_name>                                             #이름 설정
    -lang:[zh-Hans|en|ko|jp]                                        #언어 설정
    -locale:<locale>                                                     #지역 설정 
    -screen:[vertical|horizontal]                                   #가로/세로 모드 설정
    -resolution:<resolution>                                       #해상도 설정
    -dpi:<dpi>                                                              #dpi 설정
    -performance:[low|middle|high]                            #성능
    -cpu:<cpu_number>                                              #cpu
    -memory:<memory_in_mb>                                  #메모리
    -root:[true|false]                                                     #루트
    -virtualKey:[true|false]                                            #터치버튼 설정
    -quit                                                                         #종료


    1. 변수 설정. 녹스 실행시 변수로 녹스 설정 변경 가능
    1.1 녹스 상단 이름 설정
    -title:<player_name>
    예: Nox.exe "-title:Nox App Player" (Note: 중간에 스페이스가 있으면 "" 필요)
    1.2 언어, 지역 설정
    a) 현재 4가지 언어 설정 가능, zh-Hans: 중국어, en: 영어, ko:한국어, jp:일어
    -lang:[zh-Hans|en|ko|jp]
    b) 지역 설정
    -locale:<locale>
    예: Nox.exe -lang:en -locale:sg

    1.3 스크린 설정, 해상도와 DPI 설정
    a) 모드 설정: horizontal: 태블릿,vertical: 핸드폰.
    -screen:[horizontalvertical] 
    예: Nox.exe -screen:vertical
    b) 해상도 설정
    -resolution:<resolution>
    예: Nox.exe -resolution:1440x900
    c) dpi설정
    -dpi:<dpi>
    예: Nox.exe -resolution:1440x900 -dpi:270
    1.4 성능 설정。
    a)설정: low:하, middle:중, high:상
    -performance:[low|middle|high] 
    예: Nox.exe -performance:high
    b) cpu、메모리,cpu 코어 설정. cpu와 메모리는 동시에 설정해야 합니다.
    VT를 설정하지 않았으면 CPU 코어 하나밖에 사용하지 못합니다.
    -cpu:<cpu_number> -memory:<memory_in_mb>
    예: Nox.exe -cpu:1 -memory:1024
    1.5 root설정. true: 열기,false: 닫기
    -root:[true|false]
    예: Nox.exe -root:false
    1.6 안드로이드 3개의 터치 버튼 설정. true: 나타내기,false: 감추기
    -virtualKey:[true|false]
    예: Nox.exe -virtualKey:true

    2. app설치 구동
    녹스 구동되지 않았으면 녹스 구동, 앱 설치 및 구동. 녹스가 구동 상태면 바로 앱 설치/구동.
    2.1. APK 설치 및 구동。
    -apk:<local_apk_path>   [-activity:<package_name/launchable_activity_name>   -param:<start_params>] 
    -activity 변수 지정 가능. -param 변수 지정 가능.
    예: 
    Nox.exe "-apk:C:\Users\dongdong\Desktop\tmp\apk\jeten.apk"
    Nox.exe "-apk:C:\Users\dongdong\Desktop\tmp\apk\test.apk" "-activity:com.bignox.app.test/com.bignox.app.test.AnotherActivity" "-param:-e param_name1 param_value_1 -e param_name_2 param_value_2"

    2.2. app 패키지 이름으로 app 구동. 패키지가 설치되였으면 바로 app 구동. 
    -package:<package_name>
    예: Nox.exe -package:com.bignox.app.test

    3. 제어변수

    3.1 녹스 종료
    -quit
    예: Nox.exe -quit

    4. 다중실행
    -clone:<nox_id> 멀티 기기 지정
    녹스 id가 Nox_x, 例Nox_0, Nox_1 ... Nox_32 ... 。
    멀티 변수로 멀티 기기 구동 지정
    예:
    Nox.exe -clone:Nox_1 #Nox_1 구동
    Nox.exe -clone:Nox_2 -resolution:1440x900 -dpi:270 -performance:high -root:false #Nox_2를 설정 및 구동
    Nox.exe -clone:Nox_2 -quit #Nox_2 종료
    Nox.exe -clone:Nox_3 "-apk:C:\Users\dongdong\Desktop\tmp\apk\jeten.apk" #Nox_3에 apk 설치
  • nadore 2016.08.17 14:24
    우와 좋은 정보 감사합니다.
  • nadore 2016.08.17 14:41
    http://en.bignox.com/blog/?p=354
    요기 소개되어있네요.
  • 무더기비 2016.08.17 13:39
    DPI 60인가요? 160이아니고요?
  • 삽질 2016.08.18 07:19

    다운을 어디서 받는지요? 링크를 못 찾겠습니다.

  • nadore 2016.08.18 15:59
    스톤 커뮤니티에 매크로 관련 글이 많길래 완성본 링크는 막았습니다. 기존 adb기반 매크로가 여기서 떠돌게 된 걸 봤을 때 요 위에 gdip기반이 속도상 월등하기에 돌아다니게 되면 뒷감당이 안 될것 같아서입니다. 그리고 저 소스면 거의 다입니다. Return 과 false while if else 이거면 나머지는 시간 문제죠. 그리고 클릭을 인식못해서 벙찌는 경우가 많았는데 저같은 경우는 refresh버튼을 기점으로 잡고 했습니다.
    While걸어두고 refresh버튼이 나올 때까지 계속 반복하다가 나오면 break해라 이런 식으로요. 이러면 최소한의 슬립으로 빠른 속도를 안정적으로 낼 수 있더군요.
  • 제트펀치 2016.08.18 11:22

    지금은 다운 받을 수 없는 건가요?

  • nadore 2016.08.18 16:00
    네 지금은 막았습니다. 궁금하신 부분이 있으시면 소스에서 찾아서 드릴게요 어떤데가 보고싶으신가요?
  • 오이시맹 2016.08.18 16:16
    컴알못이라 어떻게 적용시키는지 모르겠네요.ㅠㅠ
  • 눈누난나요 2016.08.18 11:33

    저기 오픈소스해놓으셨네요

    직접쓰시면되지요;

  • nadore 2016.08.19 17:22
    제 의도를 이해해주셔서 감사해요. ㅠ
  • profile
    셋쇼마루 2016.08.18 19:49

    ? 그래서 매크로는 어딧죠..

  • nadore 2016.08.19 17:10
    무분별하게 확산될까봐 막아놨어요.
  • profile
    셋쇼마루 2016.08.20 14:34
    그럼 글 내려주세요 공유하시는것도아닌데;
  • 황신 2016.08.19 01:35

    저도 컴알못이라 이 매크로 어떻게 적용시켜야 할지 모르겠습니다.. 소스는 올려주셨지만 어떻게 넣어야할지 모르겠네요... ㅠㅠ 혹시 염치불구하고 파일로 보내주실 수 있으신가요...? 메일주소는 [email protected] 입니다 보내주시면 정말 감사하겠습니다

  • nadore 2016.08.19 17:15
    저도 하나도 모르는 상태에서 시작했는데 잠깐잠깐씩 1일차에 imagesearch 써보고
    2번째에 gdip에 손을 대보고 3번째에 adb에 손을 댈 수 있게되더군요.
    확실히 어렵지 않았어요.

    여러 글들과 소스들을 찾아가시면서 보시면 금방합니다.
  • 빡짱 2016.08.19 01:57

    보상받고 상자여는부분에서 멍때리는경우가있는데 이건왜그런건가요?

  • nadore 2016.08.19 17:05


    전에 올렸던 파일이 어떻게 되어 있었는지 기억은 안나지만 아래처럼 한다면 문제가 없더라구요.

    직접 짜신 코드에서 그런 문제가 생기셨던 거도 아래처럼 수정하시면 별 문제가 없으실거에요.



    하셔야 할 게, Refresh버튼을 기점으로 계속 클릭하게 하셔야합니다.

    (레이드 참가시엔 Back버튼을 한번 누르는데 이건 소탕버튼과 콜라보 하시면되요 )
    이게 약간 매크로 방지성으로 넣은 느낌도 들고 원래 손으로 상자 깔 때도 어느정도 딜레이는 있더라구요.

    그래서 클릭은했지만 너무 빨라서 인식 못하는 경우가 더러 있어요. 그리고 클릭버튼이 어떻게 아다리가 맞아서 비활성 서칭도중마우스 움직이다가 이상한 곳을 클릭하는 경우도 있구요.


    아무튼
    레이드 상자를 누르는 것은 화면 아무 곳이나 클릭하여도 상자가 까지므로 이를 이용하면
    고정되있는 이미지인 >레이드보상< 이라는 이미지와
    그것을 눌렀을 때 나타나는 확인버튼,
    그리고 Refresh 버튼을 if식으로 하시면 됩니다
    비활성이미지서치로 이미지 유무를 리턴 하는겁니다.
    위에 return false와 return true를 하셨는걸 보시면 되요

    저같은 경우는 레이드보상이라는 글귀의 이미지를 R, 확인버튼을 C, 새로침버튼을 Refr 라고 임의로 한다면
    while(stopwhile=1) ;stopwhile이 1일 때 까지 계속 반복하는데
    {
    if(R=true and C=false) ;레이드상자 까기 전 화면일 때
    {
    R버튼을 클릭 ;레이드 상자를 열게되고
    }
    else if(R=true and C=true) ; 레이드 상자가 열리고 확인버튼이 나왔다면
    {
    C버튼 클릭 ; 확인버튼을 눌러라
    }
    else if(Refr=true and C=false) ; 그리고 확인버튼이 없고 새로고침이 새로 생긴다면
    {
    Return ;빠져나와라(이 함수 종료)
    }
    }

    이런 식으로 됩니다
    저같은 경우는 참가버튼을 찾는 과정, 확인버튼을 찾는 과정등등을 따로 떨어뜨려놓아서
    gosub,- 로 호출했기 때문에 return을 썼습니다.
    계속 이어지도록요.

  • 빡짱 2016.08.19 20:57
    친절한답변 너무감사합니다 그러나 너무어렵네요 ㅜㅜ
  • 섭이팡 2016.08.19 04:29

    헉.. 벌써 막혀나요?

  • nadore 2016.08.19 17:07
    실수로 창 한번 크기 바꾸면 재시작해야하는거 말고는 불편없이 잘 돌아가요.
    직접 해보시면되요.
  • avke 2016.08.19 10:57

    자동로그인 기능이 정확히 뭐하는 기능인지 알수있을까요? 핸드폰으로 들어가서 튕겼을떄 다시 로그인해주는 기능인가요?

  • nadore 2016.08.19 17:09
    네 맞아요 휴대폰으로 확인할 때 만들었어요.

    집에 컴퓨터로 레이드 매크로를 켜놓고 외출 ->
    얼마나 들어왔는지 확인해보고싶을 때 폰으로 게임 실행->
    매크로작동중 로그아웃을 확인 및 6분 휴식->
    다시 레이드 화면으로 복귀
  • 울로 2016.08.20 19:36

    오.. 오토핫키로 만드신분도 계시군요. 댓글보고 왔어요

    쪽지남겼습니다

  • 오빠백곰 2016.08.21 02:26

    제가 진짜 메크로 하나도모르는데 [email protected]으로보내주실수있나요>???

  • 스르느느륵 2016.08.21 22:11

    컴맹이라.. 프로그램을 아예 어떻게 만드는지 어떻게 적용시키는지도 모르는데팡팡 파일좀 [email protected] 여기로 공유해주실수있나요 ...ㅠㅠㅠ

  • 드릴러 2016.08.25 15:32

    이걸 어떻게 3일만에 이해하고 만들었다는거지

    아무리 시도 할려고해도

    모르겠다

    오토핫키 이거 다운받아서

    저 소스 넣고 돌리면 된다

    써놓은건 저렇게 써놨는데

    저거 배워서 할려면 한달은 걸리겠다

    그것도 학원다녀서

    3일이면 천재이신거같은데

    프로그래밍 영재로 티비에서 보겠네요

  • 스톤세나등 2016.09.28 14:01

    다운점 받을수 있도록 해주시면 안되나요? ㅠㅠ

    [email protected] 메일로 보내주실수 있으신지요? ㅠㅠ

  • 유찬파파 2020.03.20 09:42

    배우는게 어렵네여.ㅠㅠ


List of Articles
분류 제목 글쓴이 최근변경 추천
공유 화면 이미지 흑백화 추출 프로그램 만들어봤습니다. 숨꿀 2018.07.02 0/0
공유 프로그램 종료시 스스로 지워지는 스크립트 1 노터스 2020.08.08 0/0
공유 포켓몬고 닌자봇 매크로 감시 매크로 소스 공유 1 T7GG 2017.03.05 0/0
공유 초보가 만든 세나매크로 소스공유 5 공유야우 2020.03.20 0/0
공유 초보가 만든 세나매크로 공유 공유야우 2018.01.28 0/0
공유 조촐한 색상 검출(16진수, 10진수, RGB) 3 데드비프 2023.06.25 0/0
공유 제가 만들어 본 닼나용 오토핫키 소스입니다. 8 Deceptor 2016.11.22 0/0
공유 자작)매크로 제작에 유용한 툴 ImageTool for Game 14 sama 2021.04.22 2/0
공유 와이로 컴파일러 디컴파일 도구 (3/16 수정) 6 wejkqv 2023.03.27 0/0
공유 와이로 컴파일러 디컴파일 도구 wejkqv 2023.03.07 0/0
공유 오토핫키 호환 및 퍼플 연동 가능한 HID스틱입니다. M2U 2020.03.06 0/0
공유 오토핫키 디컴방지 컴파일러 4 digim0 2023.03.09 1/0
공유 오버워치 오토핫키 오토에임입니다 13 오토에임 2022.10.02 2/0
공유 오버워치 오토에임 공유해주실분 이나 최신소스좀 던져... 2 박둘니 2016.10.30 0/0
공유 앱플레이어스샷모니터링 12 큐르 2020.03.20 0/0
공유 압살맨 플레이어 ver 1.0.5a 1 압살맨블로그 2022.09.01 0/0
공유 스톤에이지 r4id 매크로 공유. 0.9v 32 nadore 2020.03.20 1/0
공유 세나 진형설정 UI 소스코드 3 암드래 2016.12.27 0/0
공유 배틀그라운드 식생제거 최신버전 4 오토에임 2018.10.15 0/0
공유 배틀그라운드 풀,연막,불,피,돌,나무등 식생제거 15 오토에임 2018.03.04 0/0
Board Pagination Prev 1 2 Next
/ 2

전체 최신 인기글

전체 주간 인기글