본문 바로가기

운동하는 개발자/Windows

모바일게임 매크로 만들기 (sikulix 자동화) -3 (완)

728x90

들어가기 앞서 이 글은 자동화 기술을 쉽고 재밌게 익히기 위함이지 실제로 모바일 게임의 매크로를 만들고자 작성된 글이 아닙니다

이 방법으로 매크로를 제작해 사용 시 계정 정지나 삭제 등의 불이익을 받을 수 있으며 매크로 배포 시엔 형사고발 당할 수 있다는 점 주의하시길 바랍니다

2021.06.15 - [운동하는 개발자/Windows] - 모바일게임 매크로 만들기 (sikulix 자동화) -1

2021.07.07 - [운동하는 개발자/Windows] - 모바일게임 매크로 만들기 (sikulix 자동화) -2


 

인기가 너무 많지않으며 남들에게 피해가 없고 게스트 계정으로 잠깐 돌릴 게임을 찾았고 댕댕이 키우기를 받아보았습니다

잠깐 플레이 해본게 다지만 방치형 게임으로 켜 두면 알아서 싸우며 돈을 벌고 그 돈으로 업그레이드를 하고 
이게 기본 게임의 방식으로 파악되었습니다

우선 사용자가 해야 할 일을 작성해봅니다 (이게 결국 알고리즘이 됩니다)

1. 자신이 업그레이드 가능한 능력치 종류를 찾는다(아래화면에서 슬라이드로 위아래로 움직이면
  공격력, 공격속도, 치명확률 등등 순서대로 능력치가 각각 업글 가능하게 존재)
2. 업글 가능한 능력치를 누른다
3. 전투화면을 터치하면 공격 속도가 일정 시간 상승한다
4. 가끔식 비행기가 전투 화면에서 지나가는데 터치하면 보너스를 준다

이 정도가 되겠습니다. 그리고 이걸 구현해 본 화면입니다


우선 필요한 이미지와 맵들을 넣고

※ 버튼들은 B를 붙이고 맵은 M을 넣고 좌표는 Z를 넣어 네이밍 하였습니다

while(True):                        #무한 반복
    for i in findAll(Bupgrade):     #업그레이드 버튼 탐색
        click(i)                    #보이면 1회씩 클릭
        #print('findupgrade!!')   

    click(Zupgrade)			#이벤트를 받을 공간을 active 상태로 만들기 위해 업그레이드하는곳 터치
    if down:                      
        wheel(WHEEL_DOWN, 1)  #휠 다운 1회 (슬라이드)
    else:
        wheel(WHEEL_UP, 30)   #맨 아래까지 내려갔다면 맨위로 휠업
        down = True           #맨위로 올렸으니 다시 내려야 하는 상태라고 생태값 변경

    if MupgradeAll.exists(Zangel):   #천사그림의 강아지가 업그레이드 화면에 존재한다면
        down = False                 #맨 아래이므로 위로 올려야 한다고 상태값 변경해줌

    if Msky.exists(Bskys):           #하늘에 날라다니는 강아지가 있다면
        Msky.click(Bskys)            #강아지 클릭
        
    click(ZMap)                      #상단 맵 클릭(공격속도 증가)
    click(ZMap)                      #1회반복
    sleep(0.5)                       #안정성을 위한 sleep 추가

 

주의점 & 팁

1. click함수에 파라미터로 이미지를 주었을 경우 이미지가 없으면 exception이 발생

try catch로 잡아줘야 합니다 (위 소스에서도 가능성은 낮지만 강아지를 찾았는데 클릭하려는 사이 사라진다면 예외 종료될 수 있습니다) 웬만하면 안정성을 위해 전체적으로 try catch를 잡아주는 게 좋습니다 
한번 잘못꼬이면 잘못된 재화를 사용하거나 하는 불상사가 발생할 수 있기 때문입니다

2. 빠른속도를 위해서 맵을 꼭 지정해주되 최대한 작게 지정하자

모니터 전체화면에서 특정 이미지를 찾는 것과 지정된 작은 구역에서 찾는 것은 속도 차이가 크게 발생합니다
맵을 지정해주고 최대한 작게 지정해줍니다

3. 글자인식도(OCR) 있습니다

이를 응용해서 예를들어 200 스테이지 이상으로 간다면 환생 버튼을 누른다거나 하는 방법도 있습니다

4. 불규칙한 모양의 이미지를 찾을때는 최대의 크기로

이미 코드에서도 존재하는데 위에 Bsky이미지를 보시면 저런 강아지가 날아다닙니다 그런데 Bsky를 그대로 쓰게 되면 
배경이 매번 상이함으로 정상적으로 식별하지 못 할 가능성이 높습니다 그러므로 Bskys처럼 이미지의 일부를 쓰되 가능한 한 가장 큰 크기로 하는 것이 정확도가 올라갑니다

5. 유명 게임들은 매크로 탐지 코드가 존재한다

유명 게임들은 일반 사용자들에게 피해를 줄 수 있다 판단되는 상황에서 매크로 탐지 코드가 존재합니다
매번 1픽셀도 다르지 않게 동일위치를 천 번 가능하다면? 사람이 아니다고 쉽게 판단할 수 있겠죠?
게임회사에 일해보지않아 더 자세한 탐지방법은 알 수 없고 어느 정도 우회방법도 있으나 이 글의 취지와 맞지 않아 생략 합니다

 

마지막으로 동작 화면 잠시 보고 가겠습니다

사용자 입력 전혀 없이 오로지 오토로 동작중인 화면입니다

좌측 상단에 뼈다귀랑 칼 모양 사이에 있는 게 화면을 터치해서 일정 시간 공격 속도가 증가된 상황입니다

좀 더 부드럽고 깔끔하게 그리고 게임의 취지에 맞게 동작하도록 최적화할 순 있으나 이 정도로 마무리해봅니다

반복되는 작업, 사람이 눈으로 보고 무언가 판단해서 어떻게 동작해야 하는 작업이 필요할 때 sikulix 자동화를 사용해 보시기 바랍니다


 

728x90