Guest User

Absol Fog Select Detect

a guest
Nov 7th, 2013
382
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.35 KB | None | 0 0
  1. #define _WIN32_WINNT _WIN32_WINNT_WINXP // _WIN32_WINNT_WINXP
  2. #define WINVER _WIN32_WINNT_WINXP // _WIN32_WINNT_WINXP
  3. #define NTDDI_VERSION NTDDI_WINXP
  4. #include <SDKDDKVer.h>
  5.  
  6. #define WIN32_LEAN_AND_MEAN
  7. #include <Windows.h>
  8. #include <string>
  9. #include <vector>
  10. #include <fstream>
  11.  
  12. using namespace std;
  13.  
  14. struct FogClick
  15. {
  16.     UINT unit;
  17.     UINT player;
  18. };
  19.  
  20. vector<FogClick> fogclicklist;
  21. vector<FogClick> fogclicklisttemp;
  22.  
  23. typedef int (__cdecl *HEROLEVEL)(DWORD HERO);
  24. HEROLEVEL GetHeroLevel = NULL;
  25. typedef void (__thiscall * Game_SendMessageTimed)(int Inter, const char * text, float time, char unkbyte);
  26. Game_SendMessageTimed SendMessageTimed = NULL;
  27. typedef int (__fastcall * Game_GetInter)(int a1, int a2);
  28. Game_GetInter GetInter = NULL;
  29. typedef bool  (__cdecl *CHECKENEMY)(UINT player1, UINT player2);
  30. CHECKENEMY IsEnemy = NULL;
  31. typedef char * (__fastcall *GAME_GetSlotName)(UINT slot);
  32. GAME_GetSlotName GetPlayerName = NULL;
  33. typedef bool  (__cdecl *GAME_UnitAlive)(UINT arg1);
  34. GAME_UnitAlive UnitAlive = NULL;
  35. typedef UINT(__cdecl *PLAYEROWNER)(UINT HERO);
  36. PLAYEROWNER OwningPlayer = NULL; // Возвращает игрока которому принадлежит герой
  37. typedef UINT(__cdecl *LOCALPLAYER)();
  38. LOCALPLAYER GetLocalPlayer = NULL;
  39. typedef bool  (__cdecl *GAME_IsUnitSelected)(UINT whichUnit, UINT whichPlayer);
  40. GAME_IsUnitSelected IsUnitSelected = NULL;
  41. typedef UINT(__cdecl *GAME_Player)(int number);
  42. GAME_Player Player = NULL;
  43. typedef int (__cdecl *GAME_GetPlayerId)(UINT whichPlayer);
  44. GAME_GetPlayerId GetPlayerId = NULL;
  45. typedef bool  (__cdecl *GAME_IsUnitVisible)(UINT whichUnit, UINT whichPlayer);
  46. GAME_IsUnitVisible IsUnitVisible = NULL;
  47. typedef int  (__cdecl *GAME_GetPlayerState)(UINT whichPlayer, UINT whichPlayerState);
  48. GAME_GetPlayerState GetPlayerState = NULL;
  49. typedef UINT(__cdecl *GAME_GetUnitTypeId)(UINT whichUnit); // или INT, Юнит
  50. GAME_GetUnitTypeId GetUnitTypeId = NULL;
  51.  
  52. DWORD GameDll = NULL;
  53. HANDLE mythread = NULL;
  54.  
  55.  
  56. bool ingametwo = false;
  57.  
  58.  
  59. bool IsGame(void)
  60. {
  61.     bool lagscreen = *(bool*) (GameDll + 0xACF668);
  62.     return (*(bool*) (GameDll + 0xACF678) || *(int*) (GameDll + 0xAB62A4) > 0) && !lagscreen;
  63. }
  64.  
  65. bool IsChat(void)
  66. {
  67.     return *(bool*) (GameDll + 0xAD15F0);
  68. }
  69.  
  70. UINT GetMaxUnitForMap(void)
  71. {
  72.     UINT tmp = 0;
  73.     DWORD tmpaddr = *(DWORD*) (GameDll + 0xAAE2FC);
  74.     tmp += *(UINT*) (tmpaddr + 0x428);
  75.     tmp += 0x100000;
  76.     return tmp;
  77. }
  78.  
  79.  
  80. DWORD FogDetect(LPVOID)
  81. {
  82. restartthread:
  83.     Sleep(50);
  84.     if (IsGame())
  85.     {
  86.         if (!ingametwo)
  87.         {
  88.            
  89.             DWORD Data = *(DWORD *) (GameDll + 0xACEB4C);
  90.             DWORD TlsIndex = *(DWORD *) (GameDll + 0xAB7BF4);
  91.             if (TlsIndex)
  92.             {
  93.                 DWORD v5 = **(DWORD **) (*(DWORD *) (*(DWORD *) (GameDll + 0xACEB5C) + 4 * Data) + 44);
  94.                 TlsSetValue(TlsIndex, *(LPVOID *) (v5 + 520));
  95.             }
  96.  
  97.             ingametwo = true;
  98.         }
  99.        
  100.         for (int m = 0; m < (int) fogclicklist.size(); m++)
  101.         {
  102.             fogclicklisttemp.push_back(fogclicklist[m]);
  103.         }
  104.         fogclicklist.clear();
  105.         for (int m = 0; m < (int) fogclicklisttemp.size(); m++)
  106.         {
  107.             if (IsUnitSelected(fogclicklisttemp[m].unit, fogclicklisttemp[m].player) && !IsUnitVisible(fogclicklisttemp[m].unit, fogclicklisttemp[m].player))
  108.                 fogclicklist.push_back(fogclicklisttemp[m]);
  109.             else
  110.             {
  111.                 ofstream logfile;
  112.                 logfile.open("FogClickLog.txt", ios::out | ios::app);
  113.                 char * mesgchar2 = new char[220];
  114.                 sprintf_s(mesgchar2, 220, "%i:%i — [%s] remove selection", GetPlayerState(GetLocalPlayer(), 2), GetPlayerState(GetLocalPlayer(), 5), GetPlayerName(GetPlayerId(fogclicklisttemp[m].player)));
  115.                 logfile << mesgchar2 << endl;
  116.                 delete []mesgchar2;
  117.                 logfile.close();
  118.             }
  119.         }
  120.         fogclicklisttemp.clear();
  121.  
  122.  
  123.         for (UINT i = 0x100000; i < GetMaxUnitForMap(); i++) // Знаю что начинается первый юнит с 0x100000 , + ~18 на каждого юнита, 0x200000 достаточно.
  124.         {
  125.             if (GetUnitTypeId(i) > 0)//если юнит:
  126.             {
  127.                 for (int n = 0; n < 12; n++) //перебираем игроков
  128.                 {
  129.                     UINT myplayer = Player(n); // получаем игрока
  130.  
  131.                     if (myplayer > 0 && IsUnitSelected(i, myplayer) && !IsUnitVisible(i, myplayer)) //если этот игрок выдил юнита, тот оказался невидимым:
  132.                     {
  133.                        
  134.                         if (OwningPlayer(i) != myplayer) //Если владелец юнита не равно игрок
  135.                         {
  136.  
  137.                             if (IsEnemy(OwningPlayer(i), myplayer) && IsUnitSelected(i, myplayer))//Если владелец юнита враг игроку
  138.                             {
  139.                                
  140.                                 bool tmpcheckfog = false;
  141.  
  142.                                 for (int m = 0; m < (int) fogclicklist.size(); m++)
  143.                                 {
  144.                                     if (myplayer == fogclicklist[m].player)
  145.                                     {
  146.                                         tmpcheckfog = true;
  147.                                         break;
  148.                                     }
  149.  
  150.                                 }
  151.  
  152.                                 if (!tmpcheckfog)
  153.                                 {
  154.                                     if (!IsChat())
  155.                                     {
  156.                                         UINT VK_PAUSE_SCAN = MapVirtualKey(VK_PAUSE, 0);
  157.                                         keybd_event(VK_PAUSE, VK_PAUSE_SCAN, 0, 0);
  158.                                         keybd_event(VK_PAUSE, VK_PAUSE_SCAN, KEYEVENTF_KEYUP, 0);
  159.                                     }
  160.  
  161.                                     ofstream logfile;
  162.                                     logfile.open("FogClickLog.txt", ios::out | ios::app);
  163.                                     char * mesgchar = new char[220];
  164.                                     sprintf_s(mesgchar, 220, "[|c00FF0000%s|r] click -> [|c0000FF40%s|r]", GetPlayerName(GetPlayerId(myplayer)), GetPlayerName(GetPlayerId(OwningPlayer(i))));
  165.                                     char * mesgchar2 = new char[220];
  166.                                     sprintf_s(mesgchar2, 220, "%i:%i — [%s] click -> [%s]", GetPlayerState(GetLocalPlayer(), 2), GetPlayerState(GetLocalPlayer(), 5), GetPlayerName(GetPlayerId(myplayer)), GetPlayerName(GetPlayerId(OwningPlayer(i))));
  167.                                     SendMessageTimed(GetInter(0, 0), mesgchar, 3.f, -1);
  168.                                     logfile << mesgchar2 << endl;
  169.                                     Sleep(3);
  170.                                     FogClick tmpclick;
  171.                                     tmpclick.player = myplayer;
  172.                                     tmpclick.unit = i;
  173.                                     fogclicklist.push_back(tmpclick);
  174.                                     delete []mesgchar;
  175.                                     delete []mesgchar2;
  176.                                     logfile.close();
  177.                                 }
  178.                                
  179.  
  180.                             }
  181.                         }
  182.  
  183.                         break;
  184.                     }
  185.                 }
  186.             }
  187.         }
  188.     }
  189.     else
  190.     {
  191.         ingametwo = false;
  192.         fogclicklisttemp.clear();
  193.         fogclicklist.clear();
  194.     }
  195.  
  196.  
  197.     goto restartthread;
  198.     return 0;
  199. }
  200.  
  201.  
  202.  
  203.  
  204.  
  205. BOOL APIENTRY DllMain(HINSTANCE hiDLL, DWORD reason, LPVOID)
  206. {
  207.     switch (reason)
  208.     {
  209.     case DLL_PROCESS_ATTACH:
  210.         {
  211.             GameDll = (DWORD) GetModuleHandle("Game.dll");
  212.             GetHeroLevel = (HEROLEVEL) (GameDll + 0x3C6ED0);
  213.             OwningPlayer = (PLAYEROWNER) (GameDll + 0x3C8190);
  214.             GetLocalPlayer = (LOCALPLAYER) (GameDll + 0x3BBB60);
  215.             IsEnemy = (CHECKENEMY) (GameDll + 0x3C9580);
  216.             UnitAlive = (GAME_UnitAlive) (GameDll + 0x2E0760);
  217.             SendMessageTimed = (Game_SendMessageTimed) (0x2F69A0 + GameDll);
  218.             GetInter = (Game_GetInter) (0x300710 + GameDll);
  219.             GetPlayerName = (GAME_GetSlotName) (GameDll + 0x2F8F90);
  220.             IsUnitSelected = (GAME_IsUnitSelected) (GameDll + 0x3C7E00);
  221.             Player = (GAME_Player) (GameDll + 0x3BBB30);
  222.             IsUnitVisible = (GAME_IsUnitVisible) (GameDll + 0x3C7AF0);
  223.             GetPlayerId = (GAME_GetPlayerId) (GameDll + 0x3C9640);
  224.             GetPlayerState = (GAME_GetPlayerState) (GameDll + 0x3C9B00);
  225.             GetUnitTypeId = (GAME_GetUnitTypeId) (GameDll + 0x3C5910);
  226.  
  227.             if (!GameDll)
  228.                 return 0;
  229.  
  230.             mythread = CreateThread(0, 0, (LPTHREAD_START_ROUTINE) FogDetect, (LPVOID) 1, 0, 0);
  231.         }
  232.         break;
  233.     case DLL_PROCESS_DETACH:
  234.         {
  235.             TerminateThread(mythread, 0);
  236.         }
  237.         break;
  238.     }
  239.     return 1;
  240. }
Advertisement
Add Comment
Please, Sign In to add comment