게임핵 개발03

게임핵 개발03

Summary 게임핵 개발에 관한 내용으로, 포인터 찾기, 연산자 변경 함수, 피타고라스 정리 함수를 다루고 있다. 치트엔진을 활용하여 적 캐릭터의 HP를 추적하고, C#에서 double을 float으로 변환하는 함수와 2D 및 3D 거리 계산을 위한 피타고라스 법칙을 적용한 수학 함수를 구현하는 방법이 설명되어 있다.


🎥 동영상 보기

🔥 치트엔진 새로운거

정확한 수치를 모를때 치트엔진에서 Scan Type을 Decressed value로 해두면 줄어드는 값을 확인할 수 있다

게임 내에서 적캐릭터를 공격해서 찾아낸 적캐릭터의 HP를 더블클릭하면 주소를 확인할 수 있다.

F6을 눌러 HP가 깎을때마다 함수를 호출하는 포인터의 위치를 발견하고

해당 포인트를 더블클릭하면

Image

Image

해당 과정으로 클래스를 호출하는 포인터를 찾을 수 있다

또한 체력이 다는 함수를 following opcodes 하여 적 캐릭터의 HP 구조체를 찾을 수 있다

어처피 플레이어블 캐릭터에게 할당되는 클래스는 대부분 동일하기 때문이다

🎥 동영상 보기

🔥 Double to Float 함수 제작 C#에서는 메서드를 만들때 자동으로 8byte로 변경하는데 4byte인 float으로 변경하기 위해 다음과 같은 함수를 제작하여 사용한다

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
private float Double2Float(double input)
        {
            float result = (float)input;
            if (float.IsPositiveInfinity(result))
            {
                result = float.MaxValue;
            }
            else if (float.IsNegativeInfinity(result))
            {
                result = float.MinValue;
            }
            return result;
        }

🔥 Math 함수를 활용한 피타고라스 정리 시팔 ㅈㄴ어렵다

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
private double Get2DDegree(PlayerData mainPlayer, PlayerData enemyPlayer)
        {
            //Abs = 절대값
            //Atan = 탄젠트의 역함수

            //일반적으로 거리는 양수이기 때문에 절대값을 입힙니다
            double x = mainPlayer.x_pos - enemyPlayer.x_pos; //플레이어 캐릭터의 x위치에서 적의 x위치를 뺀 값
            double z = mainPlayer.z_pos - enemyPlayer.z_pos;
            double correction = 270;

            if (x > 0) correction = 90; //0보다 크다는것은 Player 왼쪽에 존재한다는것

            return correction + Math.Atan(z / x) * 180 / Math.PI; //2PI radian = 360

            double tan = Math.Cbrt(Math.Pow(x,2) + Math.Pow(z,2));
        }

        private double GetDistance(PlayerData mainPlayer, PlayerData enemyPlayer)
        {
            //피타고라스법칙
            //Sqrt = 루트
            //Pow = 제곱

            //피타고라스의 법칙을 사용해 xz_distance를 구함 (2D) (위에서 바라본 좌표)
            double  xz_distance = Math.Sqrt(Math.Pow(mainPlayer.x_pos - enemyPlayer.x_pos, 2) + Math.Pow(mainPlayer.z_pos - enemyPlayer.z_pos, 2)); // 좌표 x의 2승

            //피타고라스의 법칙을 사용해 distance 를 구함 (3D) (옆에서 바라본 좌표)
            //(xz_distance를 먼저 구하고 그 위에 세로축을 구했기 때문에 3D가 됨)
            double distance = Math.Sqrt(Math.Pow(xz_distance, 2) + Math.Pow(mainPlayer.y_pos - enemyPlayer.y_pos, 2));
            return distance;
        }

💬 댓글

GitHub 계정으로 로그인하여 댓글을 남겨보세요. GitHub 로그인

🔧 댓글 시스템 설정이 필요합니다

GitHub Discussions 기반 댓글 시스템을 활성화하려면:

  1. Giscus 설정 페이지에서 설정 생성
  2. GISCUS_SETUP_GUIDE.md 파일의 안내를 따라 설정 완료
  3. Repository의 Discussions 기능 활성화

Repository 관리자만 설정할 수 있습니다. 설정이 완료되면 모든 방문자가 댓글을 남길 수 있습니다.

목차