AutoBot | 만든 과정, 추가 기능 정리, 코드 일부 정리 (끄적끄적)

2020. 8. 23. 16:20AutoBot

반응형

주저리

 

이리저리 뒤적거리면서 만들어서 코드가 깔끔하지 않다.

1가지 기능을 추가할 때 코드가 뒤엉켜서.. 힘들었다

역시 메인코드 설정을 잘해야겠다고 다시 한번 깨닫는 프로젝트였다..

 

유니티 공모전과 이번 롤 유틸 프로그램을 만들면서 좋은 공부가 됐다.

 

사실 소스 코드를 공개하고 싶은데 너무... 이걸 공개해도 되나? 싶을 정도로 부끄러워서

혹시 요청이 있으면...! 

(없으면 구우... 지.. 창피합니다..)


목차

만들면서?

- C#으로 웹 페이지를 Redirect 하는 방법

- C#으로 Client Redirect 하는 방법

- 공공 API 활용 (Kakao Talk, Riot..)

- Json 파일 파싱

- async(비동기) 작동

- 리소스 관리 (Dispose)

- 쓰레드스레드 관리 (크로스 스레드 오류 관련)

- 스크립트 관리 (Manager, Global)

- 레지스트리 변조 (WebBrowser Version Change)

 

새로 추가 기능 정리

- 룬 페이지 생성

- 버전 관리 (매번 드라이브에서 받는 방식 X)

- 사용자의 피드백들

 


만들면서 배웠던 것들 정리

C#으로 웹 페이지를 Redirect 하는 방법

대부분의 API는 Redirect된 데이터(Json, String...)를

보내거나, 받거나, 수정 하는 방식이다.

 

즉, 특정 URL에 접속하면 그 데이터를 주고받는다.

 

카카오톡 로그인 코드 일부분

카카오톡 로그인 기능 구현중 일부 코드이다.

 

request에는 정보를 읽을 웹 페이지를 만들고

response에는 Redirect된 정보를 담는다.

string 데이터로 sResult를 넣어서 Json파일을 파싱 하면 된다.

(카카오톡 API는 Return이 Json데이터로 온다.)

 

카카오톡 로그인 관련 정보는 따로 포스팅 해도 좋을 거 같다.

( C#으로 로그인하는 방법은 찾기가 너무 힘들었다.. )

( JAVA는 짱 많은데 ㅜ )

 

C#으로 Client Redirect 하는 방법

사실..!

AutoBot Version 1.9 멀티 서치

 

Op.gg 멀티 서치

Version 1.9 기능 추가 중에 멀티 서치 기능 구현은 끝났었다.

(저거 때문에.. 기간이 무지ㅣㅣㅣ하게 늘었다.)

 

OP.GG를 참고하여 비슷하게 구현했는데 문제가 있었다..

ㅠㅠ 속도 제한선

라이엇 자체에서 요청 속도 제한이 있어서 

한 번의 멀티 서치에 65회 요청을 하게 되는데

2분 안에 2명의 사용자가 사용하면 오류가 발생한다....

 

Error 429 : 많은량의 요청시 발생

 

그리고 챔피언 이미지를 받는 과정에서도, 동적으로 생성되는 Form에서도

GC(가지 컬렉터)가 미친 듯이 발생한다.

 

 

즉, 고생고생하면서 구현했지만~ 실직적으로 쓸 수 없었다.

(마음이 아팠다... 나만 써야지...)

 

그렇게 멀티 서치 구현에 다른 방식에 접근이 필요해서 서칭 하던 중..

 

https://riot-api-libraries.readthedocs.io/en/latest/lcu.html

 

LCU - The League Client — Riot API Libraries documentation

© Copyright 2019, Riot API Community Revision 0f22653c.

riot-api-libraries.readthedocs.io

라이엇 클라이언트에 접속하여 클라이언트 데이터를 주고받는 방식을 발견했다.

 

이 방식에 좋은 점은 각각의 사용자가 자신만에 토큰(Key)을 발급받는 방식으로

 

속도 제한, 클라이언트 이벤트, 주고받는 형식 등

 

제약이 엄청 많이 없어졌다.

 

한 가지 예로 들면

 

Version 1.x

기존 Version 1.x 에서는 OpenCV를 이용하여 이미지를 지정된 시간마다 서칭 하여 찾게 되면 마우스를 클릭하는 형식이었다.( 매우 매우 무식한 방식 )

 

Version 2.x 에서는 Client에 접속하여 매칭 상태만 찾으면

Version 2.x

단 1줄로 끝난다... 허무하군..!

 

이외에도 사용자 정보 등 클라이언트 데이터를 받아서 

 

룬 페이지를 생성하거나, 매칭 상태를 판단하거나, 팀 상태를 확인하는 등

 

잘만 활용하면 많은 기능을 넣을 수 있을 거 같다.

 

* 그래서 사용 방법이 뭐야?

https://github.com/Pupix/lcu-connector

 

Pupix/lcu-connector

🔌 Streamlined LCU integration for your app. Contribute to Pupix/lcu-connector development by creating an account on GitHub.

github.com

https://github.com/Pupix/rift-explore

 

Pupix/rift-explorer

🛠 Explore the API of the League of Legends client. Contribute to Pupix/rift-explorer development by creating an account on GitHub.

github.com

외국분이 이미 C#으로 만들어 놓은 소스와

클라이언트에 대한 api 정보를 정리한 Git 사이트가 있다.

두 사이트를 참고하면 좋을 거 같다!

 

리소스 관리 (파일 크기 관련..)

 

Version 1.x 와 Version 2.x의 가장 큰 차이는 파일 크기와 메모리 사용량에서 많이 난다.

 

Version 1.x

 

Version 2.x

프로파일러를 사용하면 더 확실하지만

직관적으로 확인 가능한 모습은 이러하다.

 

두 버전 같은 기능을 사용하지만 사용량에 대한 리소스 차이가 크다.

 

그리고

 

Version 1.x

 

Version 2.x

배포 파일 크기 차이가..?

 

클라이언트 접속 방식을 사용한 뒤로 많은 리소스가 정리됐다..!

(OpenCV.dll, 서칭에 필요한 Img 들..)

 

새로운 방식의 가장 큰 장점이지 않을까 싶다.

 

레지스트리 변조

레지스트리 변조는 상당히 민감한 코드임을 알고 있다.

해킹과 버그 툴 또한 레지스트리 변조 관련이 많아서..

조심스러웠지만 내가 정직하면 괜찮지 않을까.. 했다

 

이 변조가 필요했던 이유는 카카오톡 로그인 관련한 

 

WebBrowser에 버전 업그레이드가 필요해서였다.

 

C#에 WebBrowser는 IE7 버전으로 내장되어 있다.

이 버전을 업그레이드하기 위해선 

로컬 컴퓨터의 IE 버전을 읽어서 그에 맞춰 브라우저를 열어야 했다.

 

Version 1.x에서는 'CefSharp'를 사용하여 

Chrome 웹 브라우저를 사용했는데

이 CefSharp의 무게가 상당했다.

 

그래서 차라리 코드로 버전을 업그레이드시키면

리소스가 많이 가벼워진다는 걸 알고 있기에

변조 방식을 사용했다.

 

그에 관련한 레지스트리 Init 코드이다.

레지스트리 변경 관련 코드

 


새로운 기능 관련

 

버전 업그레이드하면서 추가했던 기능 또한 많은 사용자분들의 피드백을 수용했다.

 

친구의 제보입니다..!

생각보다 많은 분들이 잘 쓰고 있다는 댓글도 달아주고

나도 만들면서 재밌어서 기능 추가를 조금만 더 해볼 생각이다.

 


Version Path Note (추가 기능 정리)

 

1. Function

전적 검색 기능

 

2. Option

항시 자동 수락에 관한 비활성화, 활성화 모드

(OneClick Mode Change)

 

 

3. Error

카카오톡 로그인 관련 오류 수정 (version 2.0.3 test)

 

4. Function, Option

각 매칭 상황에 따른 피드백 메시지 추가

 

 

5. 버전 관리 (version 2.0.3 test)

 

버전업데이트가 됐을 경우 사용자에게 알람, 확인 할 수 있는 기능

 

6. 발견 오류

 

거절을 눌러도 수락이 됨..


2020월 8월 23일 끄적임

2020월 9월 14일 끄적임

 

반응형