#include #include #include #include #include #define ENTITY_LIST 0x004D5AE4 //client #define LOCALPLAYER 0x004C88E8 //client #define NAME_LIST 0x0050E368 //client #define HEALTH 0x94 //player #define XYZ 0x260 //player #define TEAM 0x9C //player #define DORMANT 0x17C //player #define LIFESTATE 0x93 //player #define BONEMATRIX 0x578 //player https://youtu.be/elKUMiqitxY #define VIEW_MATRIX 0x5B0D68 //engine class Vector3 { public: float x, y, z; }; class Vector2 { public: float x, y; }; namespace Process { DWORD ID; HANDLE Handle; HWND Hwnd; WNDPROC WndProc; int WindowWidth; int WindowHeight; int WindowLeft; int WindowRight; int WindowTop; int WindowBottom; LPCSTR Title; LPCSTR ClassName; LPCSTR Path; } namespace Game { HANDLE handle = NULL; uintptr_t client = NULL; uintptr_t engine = NULL; DWORD PID = 0; } template TYPE RPM(DWORD address) { TYPE buffer; ReadProcessMemory(Game::handle, (LPCVOID)address, &buffer, sizeof(buffer), 0); return buffer; } float vmatrix_t[4][4]; bool WorldToScreen(const Vector3& vIn, Vector3& vOut) { ReadProcessMemory(Game::handle, (void*)(Game::engine + VIEW_MATRIX), &vmatrix_t, sizeof(vmatrix_t), NULL); FLOAT w = vmatrix_t[3][0] * vIn.x + vmatrix_t[3][1] * vIn.y + vmatrix_t[3][2] * vIn.z + vmatrix_t[3][3]; if (w < 0.01f) return false; vOut.x = vmatrix_t[0][0] * vIn.x + vmatrix_t[0][1] * vIn.y + vmatrix_t[0][2] * vIn.z + vmatrix_t[0][3]; vOut.y = vmatrix_t[1][0] * vIn.x + vmatrix_t[1][1] * vIn.y + vmatrix_t[1][2] * vIn.z + vmatrix_t[1][3]; FLOAT invw = 1.0f / w; vOut.x *= invw; vOut.y *= invw; int width = Process::WindowWidth; int height = Process::WindowHeight; float x = width / 2.0f; float y = height / 2.0f; x += 0.5f * vOut.x * width + 0.5f; y -= 0.5f * vOut.y * height + 0.5f; vOut.x = x; vOut.y = y; return true; } enum class BoneID { PELVIS, LEFT_HIPS, LEFT_KNEE, LEFT_ANKLE, LEFT_FOOT, RIGHT_HIPS, RIGHT_KNEE, RIGHT_ANKLE, RIGHT_FOOT, STOMACH, BODY, CHEST, NECK, FACE, HEAD, LEFT_NECK, LEFT_SHOULDER, LEFT_ELBOW, LEFT_HAND, RIGHT_NECK = 28, RIGHT_SHOULDER, RIGHT_ELBOW, RIGHT_HAND }; Vector3 GetBonePos(DWORD addr, BoneID boneid) { Vector3 pos {}; addr = 0xC + addr + (0x30 * (int)boneid); pos.x = RPM(addr); pos.y = RPM(addr + 0x10); pos.z = RPM(addr + 0x10*2); return pos; } enum class Weapon { Glock = 0, USP, P228, Deagle, Elite, FiveSeven, M3, XM1014, Galil, AK47, Scout, SG552, AWP, G3SG1, Famas, M4A1, Aug, SG550, Mac10, TMP, MP5Navy, Ump45, P90, M249, Vest, VestHelm, FlashBang, HEGrenade, SmokeGrenade, Defuser, NightVision, C4, Max }; uintptr_t GetEntity(uintptr_t entity_list, int index) { return RPM(entity_list + (index * 0x10)); } inline MODULEENTRY32 get_module(const char* modName, DWORD proc_id) { HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, proc_id); if (hSnap != INVALID_HANDLE_VALUE) { MODULEENTRY32 modEntry; modEntry.dwSize = sizeof(modEntry); if (Module32First(hSnap, &modEntry)) { do { if (!strcmp(modEntry.szModule, modName)) { CloseHandle(hSnap); return modEntry; } } while (Module32Next(hSnap, &modEntry)); } } MODULEENTRY32 module = { (DWORD)-1 }; return module; } void init_modules() { Game::client = (uintptr_t)get_module(xorstr_("client.dll"), Game::PID).modBaseAddr; Game::engine = (uintptr_t)get_module(xorstr_("engine.dll"), Game::PID).modBaseAddr; }