Facebook
From Idiotic Hamster, 5 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 242
  1. #include "plugin.h"
  2. #include "game_sa\RenderWare.h"
  3. #include "game_sa\common.h"
  4. #include "game_sa\CFont.h"
  5. #include "game_sa\CPed.h"
  6. #include "game_sa\CMessages.h"
  7.  
  8. #include <Psapi.h>
  9.  
  10. #pragma comment( lib, "psapi.lib" )
  11.  
  12. #define E_ADDR_GAMEPROCESS      0x53E981
  13.  
  14. using namespace plugin;
  15.  
  16. #pragma pack(push, 1)
  17. typedef struct stOpcodeRelCall
  18. {
  19.         BYTE bOpcode;
  20.         DWORD dwRelAddr;
  21. } OpcodeRelCall;
  22. #pragma pack(pop)
  23.  
  24. class GPS {
  25. private:
  26.         HANDLE hThread = NULL;
  27.  
  28. public:
  29.         GPS() {
  30.                 hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)GPS::init, (LPVOID)this, 0, (LPDWORD)NULL);
  31.         }
  32.  
  33.         ~GPS() {
  34.                 if (hThread != NULL)
  35.                         TerminateThread(hThread, 0);
  36.         }
  37.  
  38.         static LPVOID WINAPI init(LPVOID *lpParam) {
  39.                 MODULEINFO miSampDll;
  40.                 DWORD dwSampDllBaseAddr, dwSampDllEndAddr, dwCallAddr;
  41.  
  42.                 GPS *sender = (GPS *)lpParam;
  43.  
  44.                 stOpcodeRelCall *fnGameProc = (stOpcodeRelCall *)E_ADDR_GAMEPROCESS;
  45.  
  46.                 while (fnGameProc->bOpcode != 0xE8)
  47.                         Sleep(100);
  48.  
  49.                 while (true) {
  50.                         Sleep(100);
  51.  
  52.                         if (!GetModuleInformation(GetCurrentProcess(), GetModuleHandle("samp.dll"), &miSampDll, sizeof(MODULEINFO))) {
  53.                                 continue;
  54.                         }
  55.  
  56.                         dwSampDllBaseAddr = (DWORD)miSampDll.lpBaseOfDll;
  57.                         dwSampDllEndAddr = dwSampDllBaseAddr + miSampDll.SizeOfImage;
  58.  
  59.                         dwCallAddr = fnGameProc->dwRelAddr + E_ADDR_GAMEPROCESS + 5;
  60.  
  61.                         if (dwCallAddr >= dwSampDllBaseAddr && dwCallAddr <= dwSampDllEndAddr)
  62.                                 break;
  63.                 }
  64.  
  65.                 while (!FindPlayerPed(0))
  66.                         Sleep(2500);
  67.  
  68.                 sender->run();
  69.  
  70.                 sender->hThread = NULL;
  71.  
  72.                 return NULL;
  73.         }
  74.  
  75.         void run() {
  76.                 Events::drawHudEvent += [] {
  77.                         CPed *player = FindPlayerPed(0);
  78.                         if (player)
  79.                         {
  80.                                 float angle = (player->m_fCurrentRotation + 3.14159) * (360.0 / (2.0 * 3.14159));
  81.                                
  82.                                 if (angle < 180) angle + 180;
  83.                                 else if (angle > 180) angle - 180;
  84.  
  85.                                 int i = 0;
  86.  
  87.                                 if (angle >= 0 && angle <= 35) CMessages::AddBigMessage("SOUTH-EAST", 15, 1);
  88.                                
  89.                                 else if (angle >= 46 && angle <= 80) CMessages::AddBigMessage("EAST-SOUTH", 15, 1);
  90.                                 else if (angle >= 81 && angle <= 100) CMessages::AddBigMessage("EAST", 15, 1);
  91.                                 else if (angle >= 101 && angle <= 135) CMessages::AddBigMessage("EAST-NORTH", 15, 1);
  92.  
  93.  
  94.                                 else if (angle >= 136 && angle <= 170) CMessages::AddBigMessage("NORTH-EAST", 15, 1);
  95.                                 else if (angle >= 171 && angle <= 190) CMessages::AddBigMessage("NORTH", 15, 1);
  96.                                 else if (angle >= 191 && angle <= 225) CMessages::AddBigMessage("NORTH-WEST", 15, 1);
  97.  
  98.                                 else if (angle >= 226 && angle <= 260) CMessages::AddBigMessage("WEST-NORTH", 15, 1);
  99.                                 else if (angle >= 261 && angle <= 280) CMessages::AddBigMessage("WEST", 15, 1);
  100.                                 else if (angle >= 281 && angle <= 315) CMessages::AddBigMessage("WEST-SOUTH", 15, 1);
  101.  
  102.                                 else if (angle >= 316 && angle <= 350) CMessages::AddBigMessage("SOUTH-WEST", 15, 1);
  103.                                 else if (angle >= 351 && angle <= 360 || angle >= 36 && angle <= 35) CMessages::AddBigMessage("SOUTH", 15, 1);
  104.                         }
  105.                 };
  106.  
  107.         }
  108.  
  109. } gps;