#include "plugin.h" #include "game_sa\RenderWare.h" #include "game_sa\common.h" #include "game_sa\CFont.h" #include "game_sa\CPed.h" #include "game_sa\CMessages.h" #include #pragma comment( lib, "psapi.lib" ) #define E_ADDR_GAMEPROCESS 0x53E981 using namespace plugin; #pragma pack(push, 1) typedef struct stOpcodeRelCall { BYTE bOpcode; DWORD dwRelAddr; } OpcodeRelCall; #pragma pack(pop) class GPS { private: HANDLE hThread = NULL; public: GPS() { hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)GPS::init, (LPVOID)this, 0, (LPDWORD)NULL); } ~GPS() { if (hThread != NULL) TerminateThread(hThread, 0); } static LPVOID WINAPI init(LPVOID *lpParam) { MODULEINFO miSampDll; DWORD dwSampDllBaseAddr, dwSampDllEndAddr, dwCallAddr; GPS *sender = (GPS *)lpParam; stOpcodeRelCall *fnGameProc = (stOpcodeRelCall *)E_ADDR_GAMEPROCESS; while (fnGameProc->bOpcode != 0xE8) Sleep(100); while (true) { Sleep(100); if (!GetModuleInformation(GetCurrentProcess(), GetModuleHandle("samp.dll"), &miSampDll, sizeof(MODULEINFO))) { continue; } dwSampDllBaseAddr = (DWORD)miSampDll.lpBaseOfDll; dwSampDllEndAddr = dwSampDllBaseAddr + miSampDll.SizeOfImage; dwCallAddr = fnGameProc->dwRelAddr + E_ADDR_GAMEPROCESS + 5; if (dwCallAddr >= dwSampDllBaseAddr && dwCallAddr <= dwSampDllEndAddr) break; } while (!FindPlayerPed(0)) Sleep(2500); sender->run(); sender->hThread = NULL; return NULL; } void run() { Events::drawHudEvent += [] { CPed *player = FindPlayerPed(0); if (player) { float angle = (player->m_fCurrentRotation + 3.14159) * (360.0 / (2.0 * 3.14159)); if (angle < 180) angle + 180; else if (angle > 180) angle - 180; int i = 0; if (angle >= 0 && angle <= 35) CMessages::AddBigMessage("SOUTH-EAST", 15, 1); else if (angle >= 46 && angle <= 80) CMessages::AddBigMessage("EAST-SOUTH", 15, 1); else if (angle >= 81 && angle <= 100) CMessages::AddBigMessage("EAST", 15, 1); else if (angle >= 101 && angle <= 135) CMessages::AddBigMessage("EAST-NORTH", 15, 1); else if (angle >= 136 && angle <= 170) CMessages::AddBigMessage("NORTH-EAST", 15, 1); else if (angle >= 171 && angle <= 190) CMessages::AddBigMessage("NORTH", 15, 1); else if (angle >= 191 && angle <= 225) CMessages::AddBigMessage("NORTH-WEST", 15, 1); else if (angle >= 226 && angle <= 260) CMessages::AddBigMessage("WEST-NORTH", 15, 1); else if (angle >= 261 && angle <= 280) CMessages::AddBigMessage("WEST", 15, 1); else if (angle >= 281 && angle <= 315) CMessages::AddBigMessage("WEST-SOUTH", 15, 1); else if (angle >= 316 && angle <= 350) CMessages::AddBigMessage("SOUTH-WEST", 15, 1); else if (angle >= 351 && angle <= 360 || angle >= 36 && angle <= 35) CMessages::AddBigMessage("SOUTH", 15, 1); } }; } } gps;