- #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 <Psapi.h>
- #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;