Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _WIN32_WINNT _WIN32_WINNT_WINXP // _WIN32_WINNT_WINXP
- #define WINVER _WIN32_WINNT_WINXP // _WIN32_WINNT_WINXP
- #define NTDDI_VERSION NTDDI_WINXP
- #include <SDKDDKVer.h>
- #define WIN32_LEAN_AND_MEAN
- #include <Windows.h>
- #include <string>
- #include <vector>
- #include <fstream>
- using namespace std;
- struct FogClick
- {
- UINT unit;
- UINT player;
- };
- vector<FogClick> fogclicklist;
- vector<FogClick> fogclicklisttemp;
- typedef int (__cdecl *HEROLEVEL)(DWORD HERO);
- HEROLEVEL GetHeroLevel = NULL;
- typedef void (__thiscall * Game_SendMessageTimed)(int Inter, const char * text, float time, char unkbyte);
- Game_SendMessageTimed SendMessageTimed = NULL;
- typedef int (__fastcall * Game_GetInter)(int a1, int a2);
- Game_GetInter GetInter = NULL;
- typedef bool (__cdecl *CHECKENEMY)(UINT player1, UINT player2);
- CHECKENEMY IsEnemy = NULL;
- typedef char * (__fastcall *GAME_GetSlotName)(UINT slot);
- GAME_GetSlotName GetPlayerName = NULL;
- typedef bool (__cdecl *GAME_UnitAlive)(UINT arg1);
- GAME_UnitAlive UnitAlive = NULL;
- typedef UINT(__cdecl *PLAYEROWNER)(UINT HERO);
- PLAYEROWNER OwningPlayer = NULL; // Возвращает игрока которому принадлежит герой
- typedef UINT(__cdecl *LOCALPLAYER)();
- LOCALPLAYER GetLocalPlayer = NULL;
- typedef bool (__cdecl *GAME_IsUnitSelected)(UINT whichUnit, UINT whichPlayer);
- GAME_IsUnitSelected IsUnitSelected = NULL;
- typedef UINT(__cdecl *GAME_Player)(int number);
- GAME_Player Player = NULL;
- typedef int (__cdecl *GAME_GetPlayerId)(UINT whichPlayer);
- GAME_GetPlayerId GetPlayerId = NULL;
- typedef bool (__cdecl *GAME_IsUnitVisible)(UINT whichUnit, UINT whichPlayer);
- GAME_IsUnitVisible IsUnitVisible = NULL;
- typedef int (__cdecl *GAME_GetPlayerState)(UINT whichPlayer, UINT whichPlayerState);
- GAME_GetPlayerState GetPlayerState = NULL;
- typedef UINT(__cdecl *GAME_GetUnitTypeId)(UINT whichUnit); // или INT, Юнит
- GAME_GetUnitTypeId GetUnitTypeId = NULL;
- DWORD GameDll = NULL;
- HANDLE mythread = NULL;
- bool ingametwo = false;
- bool IsGame(void)
- {
- bool lagscreen = *(bool*) (GameDll + 0xACF668);
- return (*(bool*) (GameDll + 0xACF678) || *(int*) (GameDll + 0xAB62A4) > 0) && !lagscreen;
- }
- bool IsChat(void)
- {
- return *(bool*) (GameDll + 0xAD15F0);
- }
- UINT GetMaxUnitForMap(void)
- {
- UINT tmp = 0;
- DWORD tmpaddr = *(DWORD*) (GameDll + 0xAAE2FC);
- tmp += *(UINT*) (tmpaddr + 0x428);
- tmp += 0x100000;
- return tmp;
- }
- DWORD FogDetect(LPVOID)
- {
- restartthread:
- Sleep(50);
- if (IsGame())
- {
- if (!ingametwo)
- {
- DWORD Data = *(DWORD *) (GameDll + 0xACEB4C);
- DWORD TlsIndex = *(DWORD *) (GameDll + 0xAB7BF4);
- if (TlsIndex)
- {
- DWORD v5 = **(DWORD **) (*(DWORD *) (*(DWORD *) (GameDll + 0xACEB5C) + 4 * Data) + 44);
- TlsSetValue(TlsIndex, *(LPVOID *) (v5 + 520));
- }
- ingametwo = true;
- }
- for (int m = 0; m < (int) fogclicklist.size(); m++)
- {
- fogclicklisttemp.push_back(fogclicklist[m]);
- }
- fogclicklist.clear();
- for (int m = 0; m < (int) fogclicklisttemp.size(); m++)
- {
- if (IsUnitSelected(fogclicklisttemp[m].unit, fogclicklisttemp[m].player) && !IsUnitVisible(fogclicklisttemp[m].unit, fogclicklisttemp[m].player))
- fogclicklist.push_back(fogclicklisttemp[m]);
- else
- {
- ofstream logfile;
- logfile.open("FogClickLog.txt", ios::out | ios::app);
- char * mesgchar2 = new char[220];
- sprintf_s(mesgchar2, 220, "%i:%i — [%s] remove selection", GetPlayerState(GetLocalPlayer(), 2), GetPlayerState(GetLocalPlayer(), 5), GetPlayerName(GetPlayerId(fogclicklisttemp[m].player)));
- logfile << mesgchar2 << endl;
- delete []mesgchar2;
- logfile.close();
- }
- }
- fogclicklisttemp.clear();
- for (UINT i = 0x100000; i < GetMaxUnitForMap(); i++) // Знаю что начинается первый юнит с 0x100000 , + ~18 на каждого юнита, 0x200000 достаточно.
- {
- if (GetUnitTypeId(i) > 0)//если юнит:
- {
- for (int n = 0; n < 12; n++) //перебираем игроков
- {
- UINT myplayer = Player(n); // получаем игрока
- if (myplayer > 0 && IsUnitSelected(i, myplayer) && !IsUnitVisible(i, myplayer)) //если этот игрок выдил юнита, тот оказался невидимым:
- {
- if (OwningPlayer(i) != myplayer) //Если владелец юнита не равно игрок
- {
- if (IsEnemy(OwningPlayer(i), myplayer) && IsUnitSelected(i, myplayer))//Если владелец юнита враг игроку
- {
- bool tmpcheckfog = false;
- for (int m = 0; m < (int) fogclicklist.size(); m++)
- {
- if (myplayer == fogclicklist[m].player)
- {
- tmpcheckfog = true;
- break;
- }
- }
- if (!tmpcheckfog)
- {
- if (!IsChat())
- {
- UINT VK_PAUSE_SCAN = MapVirtualKey(VK_PAUSE, 0);
- keybd_event(VK_PAUSE, VK_PAUSE_SCAN, 0, 0);
- keybd_event(VK_PAUSE, VK_PAUSE_SCAN, KEYEVENTF_KEYUP, 0);
- }
- ofstream logfile;
- logfile.open("FogClickLog.txt", ios::out | ios::app);
- char * mesgchar = new char[220];
- sprintf_s(mesgchar, 220, "[|c00FF0000%s|r] click -> [|c0000FF40%s|r]", GetPlayerName(GetPlayerId(myplayer)), GetPlayerName(GetPlayerId(OwningPlayer(i))));
- char * mesgchar2 = new char[220];
- sprintf_s(mesgchar2, 220, "%i:%i — [%s] click -> [%s]", GetPlayerState(GetLocalPlayer(), 2), GetPlayerState(GetLocalPlayer(), 5), GetPlayerName(GetPlayerId(myplayer)), GetPlayerName(GetPlayerId(OwningPlayer(i))));
- SendMessageTimed(GetInter(0, 0), mesgchar, 3.f, -1);
- logfile << mesgchar2 << endl;
- Sleep(3);
- FogClick tmpclick;
- tmpclick.player = myplayer;
- tmpclick.unit = i;
- fogclicklist.push_back(tmpclick);
- delete []mesgchar;
- delete []mesgchar2;
- logfile.close();
- }
- }
- }
- break;
- }
- }
- }
- }
- }
- else
- {
- ingametwo = false;
- fogclicklisttemp.clear();
- fogclicklist.clear();
- }
- goto restartthread;
- return 0;
- }
- BOOL APIENTRY DllMain(HINSTANCE hiDLL, DWORD reason, LPVOID)
- {
- switch (reason)
- {
- case DLL_PROCESS_ATTACH:
- {
- GameDll = (DWORD) GetModuleHandle("Game.dll");
- GetHeroLevel = (HEROLEVEL) (GameDll + 0x3C6ED0);
- OwningPlayer = (PLAYEROWNER) (GameDll + 0x3C8190);
- GetLocalPlayer = (LOCALPLAYER) (GameDll + 0x3BBB60);
- IsEnemy = (CHECKENEMY) (GameDll + 0x3C9580);
- UnitAlive = (GAME_UnitAlive) (GameDll + 0x2E0760);
- SendMessageTimed = (Game_SendMessageTimed) (0x2F69A0 + GameDll);
- GetInter = (Game_GetInter) (0x300710 + GameDll);
- GetPlayerName = (GAME_GetSlotName) (GameDll + 0x2F8F90);
- IsUnitSelected = (GAME_IsUnitSelected) (GameDll + 0x3C7E00);
- Player = (GAME_Player) (GameDll + 0x3BBB30);
- IsUnitVisible = (GAME_IsUnitVisible) (GameDll + 0x3C7AF0);
- GetPlayerId = (GAME_GetPlayerId) (GameDll + 0x3C9640);
- GetPlayerState = (GAME_GetPlayerState) (GameDll + 0x3C9B00);
- GetUnitTypeId = (GAME_GetUnitTypeId) (GameDll + 0x3C5910);
- if (!GameDll)
- return 0;
- mythread = CreateThread(0, 0, (LPTHREAD_START_ROUTINE) FogDetect, (LPVOID) 1, 0, 0);
- }
- break;
- case DLL_PROCESS_DETACH:
- {
- TerminateThread(mythread, 0);
- }
- break;
- }
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment