так сказать нахожусь в процессе изучения всего процесса. Написал простенький и не много корявый aim. Каким образом его сделать "умнее"?что бы по стенам не водил, а при виде противников. #include <Windows.h> #include <TlHelp32.h> #include <iostream> #include <vector> using namespace std; #define M_PI 3.14159265358979323846 #define BaseAddress 0x50F4F4 #define EntityAddress 0x50F4F8 #define NumberPlayersAddress 0x50F500 #define NoRecoilAddress 0x463786 #define CountPlayer 0x50F500 // Offsets #define OffSetLife 0xF8 #define OffSetArmor 0xFC #define OffSetJump 0x18 #define OffSetPos 0x4 #define OffSetViewX 0x40 #define OffSetViewY 0x44 #define OffSetAmmo 0x150 #define OffSetTeam 0x32C #define OffSetName 0x225 class LocalPlayer { public: int LocalAddress; int Life; int Armor; float View[2]; float Position[3]; int Team; char Name[16]; int NumberOfPlayer; void Read(HANDLE hProc) { ReadProcessMemory(hProc, (LPCVOID)BaseAddress, &LocalAddress, sizeof(LocalAddress), NULL);//Получение локального адресса игрока ReadProcessMemory(hProc, (LPCVOID)(LocalAddress + OffSetLife), &Life, sizeof(Life), NULL);//Получение Life локального игрока ReadProcessMemory(hProc, (LPCVOID)(LocalAddress + OffSetArmor), &Armor, sizeof(Armor), NULL);//Получение Armor локального игрока //Позиция ReadProcessMemory(hProc, (LPCVOID)(LocalAddress + OffSetPos), &Position[0], sizeof(Position[0]), NULL);//Получение Position_X локального игрока ReadProcessMemory(hProc, (LPCVOID)(LocalAddress + OffSetPos + 0x4), &Position[1], sizeof(Position[1]), NULL);//Получение Position_Y локального игрока ReadProcessMemory(hProc, (LPCVOID)(LocalAddress + OffSetPos + 0x4 + 0x4), &Position[2], sizeof(Position[2]), NULL);//Получение Position_Y локального игрока //Обзо ось_x ось_Y ReadProcessMemory(hProc, (LPCVOID)(LocalAddress + OffSetViewX), &View[0], sizeof(View[0]), NULL);//Получение View_x локального игрока ReadProcessMemory(hProc, (LPCVOID)(LocalAddress + OffSetViewY), &View[1], sizeof(View[1]), NULL);//Получение View_Y локального игрока //Команда->Кол-во_Игроков_Всего->Имя ReadProcessMemory(hProc, (LPCVOID)(LocalAddress + OffSetTeam), &Team, sizeof(Team), NULL);//Получение команды игрока ReadProcessMemory(hProc, (LPCVOID)(CountPlayer), &NumberOfPlayer, sizeof(NumberOfPlayer), NULL);//Получение Кол-во игроков ReadProcessMemory(hProc, (LPCVOID)(LocalAddress + OffSetName), &Name, sizeof(Name), NULL);//Получение имя игрока } }; class EntityPlayer { public: int BotAddress; int BotAdressGet; int Life; int Armor; float Position[3]; int Team; char Name[16]; void Read(HANDLE hProc, int i) { ReadProcessMemory(hProc, (LPCVOID)(EntityAddress), &BotAddress, sizeof(BotAddress), NULL); ReadProcessMemory(hProc, (LPCVOID)(BotAddress + (0x4 * i)), &BotAdressGet, sizeof(BotAdressGet), NULL); ReadProcessMemory(hProc, (LPCVOID)(BotAdressGet + OffSetLife), &Life, sizeof(Life), NULL);//Получение Life локального игрока ReadProcessMemory(hProc, (LPCVOID)(BotAdressGet + OffSetArmor), &Armor, sizeof(Armor), NULL);//Получение Armor локального игрока //Позиция ReadProcessMemory(hProc, (LPCVOID)(BotAdressGet + OffSetPos), &Position[0], sizeof(Position[0]), NULL);//Получение Position_X локального игрока ReadProcessMemory(hProc, (LPCVOID)(BotAdressGet + OffSetPos + 0x4), &Position[1], sizeof(Position[1]), NULL);//Получение Position_Y локального игрока ReadProcessMemory(hProc, (LPCVOID)(BotAdressGet + OffSetPos + 0x4 + 0x4), &Position[2], sizeof(Position[2]), NULL);//Получение Position_Y локального игрока ReadProcessMemory(hProc, (LPCVOID)(BotAdressGet + OffSetTeam), &Team, sizeof(Team), NULL);//Получение команды игрока ReadProcessMemory(hProc, (LPCVOID)(BotAdressGet + OffSetName), &Name, sizeof(Name), NULL);//Получение имя игрока } }; float Get3dDistance(LocalPlayer Myplayer, EntityPlayer Target) { return sqrt(pow(Target.Position[0] - Myplayer.Position[0], 2) + pow(Target.Position[1] - Myplayer.Position[1], 2) + pow(Target.Position[2] - Myplayer.Position[2], 2) ); } void getDelta(float* delta, LocalPlayer MyPlayer, EntityPlayer TargetPlayer) { delta[0] = TargetPlayer.Position[0] - MyPlayer.Position[0]; delta[1] = TargetPlayer.Position[1] - MyPlayer.Position[1]; delta[2] = TargetPlayer.Position[2] - MyPlayer.Position[2]; } void getAngles(float* angles, float* delta) { // angle X (pitch) if (delta[1] < 0) angles[0] = (float)((180 / M_PI) * (-atan(delta[0] / delta[1]))); else if (delta[1] > 0) angles[0] = (float)(180 - (180 / M_PI) * (atan(delta[0] / delta[1]))); else delta[0] >= 0 ? angles[0] = -90 : angles[0] = 90; // angle Y (yaw) float dist2D = sqrt(delta[0] * delta[0] + delta[1] * delta[1]); if (dist2D != 0) angles[1] = (float)((180 / M_PI) * (atan(delta[2] / dist2D))); else angles[1] = 0; } int main() { HANDLE hProc; DWORD pid; HWND hWND; float angles[2]; float delta[3]; float Distance = 0; float TempDistance = 0; int aim = 0; hWND = FindWindow(0, (LPCSTR)"AssaultCube"); GetWindowThreadProcessId(hWND, &pid); hProc = OpenProcess(PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_VM_OPERATION, FALSE, pid); LocalPlayer MyPlayer; MyPlayer.Read(hProc); EntityPlayer TargetPlayer[16]; for (int i = 1; i < MyPlayer.NumberOfPlayer; i++) { TargetPlayer[i].Read(hProc, i); } while (true) { MyPlayer.Read(hProc); for (int i = 1; i < MyPlayer.NumberOfPlayer; i++) { Distance = 99999; TargetPlayer[i].Read(hProc, i); TempDistance = Get3dDistance(MyPlayer, TargetPlayer[i]); if (TempDistance < Distance && MyPlayer.Team != TargetPlayer[i].Team && TargetPlayer[i].Life > 0) { aim = i; Distance = TempDistance; } } getDelta(delta, MyPlayer, TargetPlayer[aim]); getAngles(angles, delta); WriteProcessMemory(hProc, (LPVOID)(MyPlayer.LocalAddress + OffSetViewX), &angles[0], sizeof(float), NULL); WriteProcessMemory(hProc, (LPVOID)(MyPlayer.LocalAddress + OffSetViewY), &angles[1], sizeof(float), NULL); system("CLS"); } } Код #include <Windows.h> #include <TlHelp32.h> #include <iostream> #include <vector> using namespace std; #define M_PI 3.14159265358979323846 #define BaseAddress 0x50F4F4 #define EntityAddress 0x50F4F8 #define NumberPlayersAddress 0x50F500 #define NoRecoilAddress 0x463786 #define CountPlayer 0x50F500 // Offsets #define OffSetLife 0xF8 #define OffSetArmor 0xFC #define OffSetJump 0x18 #define OffSetPos 0x4 #define OffSetViewX 0x40 #define OffSetViewY 0x44 #define OffSetAmmo 0x150 #define OffSetTeam 0x32C #define OffSetName 0x225 class LocalPlayer { public: int LocalAddress; int Life; int Armor; float View[2]; float Position[3]; int Team; char Name[16]; int NumberOfPlayer; void Read(HANDLE hProc) { ReadProcessMemory(hProc, (LPCVOID)BaseAddress, &LocalAddress, sizeof(LocalAddress), NULL);//Получение локального адресса игрока ReadProcessMemory(hProc, (LPCVOID)(LocalAddress + OffSetLife), &Life, sizeof(Life), NULL);//Получение Life локального игрока ReadProcessMemory(hProc, (LPCVOID)(LocalAddress + OffSetArmor), &Armor, sizeof(Armor), NULL);//Получение Armor локального игрока //Позиция ReadProcessMemory(hProc, (LPCVOID)(LocalAddress + OffSetPos), &Position[0], sizeof(Position[0]), NULL);//Получение Position_X локального игрока ReadProcessMemory(hProc, (LPCVOID)(LocalAddress + OffSetPos + 0x4), &Position[1], sizeof(Position[1]), NULL);//Получение Position_Y локального игрока ReadProcessMemory(hProc, (LPCVOID)(LocalAddress + OffSetPos + 0x4 + 0x4), &Position[2], sizeof(Position[2]), NULL);//Получение Position_Y локального игрока //Обзо ось_x ось_Y ReadProcessMemory(hProc, (LPCVOID)(LocalAddress + OffSetViewX), &View[0], sizeof(View[0]), NULL);//Получение View_x локального игрока ReadProcessMemory(hProc, (LPCVOID)(LocalAddress + OffSetViewY), &View[1], sizeof(View[1]), NULL);//Получение View_Y локального игрока //Команда->Кол-во_Игроков_Всего->Имя ReadProcessMemory(hProc, (LPCVOID)(LocalAddress + OffSetTeam), &Team, sizeof(Team), NULL);//Получение команды игрока ReadProcessMemory(hProc, (LPCVOID)(CountPlayer), &NumberOfPlayer, sizeof(NumberOfPlayer), NULL);//Получение Кол-во игроков ReadProcessMemory(hProc, (LPCVOID)(LocalAddress + OffSetName), &Name, sizeof(Name), NULL);//Получение имя игрока } }; class EntityPlayer { public: int BotAddress; int BotAdressGet; int Life; int Armor; float Position[3]; int Team; char Name[16]; void Read(HANDLE hProc, int i) { ReadProcessMemory(hProc, (LPCVOID)(EntityAddress), &BotAddress, sizeof(BotAddress), NULL); ReadProcessMemory(hProc, (LPCVOID)(BotAddress + (0x4 * i)), &BotAdressGet, sizeof(BotAdressGet), NULL); ReadProcessMemory(hProc, (LPCVOID)(BotAdressGet + OffSetLife), &Life, sizeof(Life), NULL);//Получение Life локального игрока ReadProcessMemory(hProc, (LPCVOID)(BotAdressGet + OffSetArmor), &Armor, sizeof(Armor), NULL);//Получение Armor локального игрока //Позиция ReadProcessMemory(hProc, (LPCVOID)(BotAdressGet + OffSetPos), &Position[0], sizeof(Position[0]), NULL);//Получение Position_X локального игрока ReadProcessMemory(hProc, (LPCVOID)(BotAdressGet + OffSetPos + 0x4), &Position[1], sizeof(Position[1]), NULL);//Получение Position_Y локального игрока ReadProcessMemory(hProc, (LPCVOID)(BotAdressGet + OffSetPos + 0x4 + 0x4), &Position[2], sizeof(Position[2]), NULL);//Получение Position_Y локального игрока ReadProcessMemory(hProc, (LPCVOID)(BotAdressGet + OffSetTeam), &Team, sizeof(Team), NULL);//Получение команды игрока ReadProcessMemory(hProc, (LPCVOID)(BotAdressGet + OffSetName), &Name, sizeof(Name), NULL);//Получение имя игрока } }; float Get3dDistance(LocalPlayer Myplayer, EntityPlayer Target) { return sqrt(pow(Target.Position[0] - Myplayer.Position[0], 2) + pow(Target.Position[1] - Myplayer.Position[1], 2) + pow(Target.Position[2] - Myplayer.Position[2], 2) ); } void getDelta(float* delta, LocalPlayer MyPlayer, EntityPlayer TargetPlayer) { delta[0] = TargetPlayer.Position[0] - MyPlayer.Position[0]; delta[1] = TargetPlayer.Position[1] - MyPlayer.Position[1]; delta[2] = TargetPlayer.Position[2] - MyPlayer.Position[2]; } void getAngles(float* angles, float* delta) { // angle X (pitch) if (delta[1] < 0) angles[0] = (float)((180 / M_PI) * (-atan(delta[0] / delta[1]))); else if (delta[1] > 0) angles[0] = (float)(180 - (180 / M_PI) * (atan(delta[0] / delta[1]))); else delta[0] >= 0 ? angles[0] = -90 : angles[0] = 90; // angle Y (yaw) float dist2D = sqrt(delta[0] * delta[0] + delta[1] * delta[1]); if (dist2D != 0) angles[1] = (float)((180 / M_PI) * (atan(delta[2] / dist2D))); else angles[1] = 0; } int main() { HANDLE hProc; DWORD pid; HWND hWND; float angles[2]; float delta[3]; float Distance = 0; float TempDistance = 0; int aim = 0; hWND = FindWindow(0, (LPCSTR)"AssaultCube"); GetWindowThreadProcessId(hWND, &pid); hProc = OpenProcess(PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_VM_OPERATION, FALSE, pid); LocalPlayer MyPlayer; MyPlayer.Read(hProc); EntityPlayer TargetPlayer[16]; for (int i = 1; i < MyPlayer.NumberOfPlayer; i++) { TargetPlayer[i].Read(hProc, i); } while (true) { MyPlayer.Read(hProc); for (int i = 1; i < MyPlayer.NumberOfPlayer; i++) { Distance = 99999; TargetPlayer[i].Read(hProc, i); TempDistance = Get3dDistance(MyPlayer, TargetPlayer[i]); if (TempDistance < Distance && MyPlayer.Team != TargetPlayer[i].Team && TargetPlayer[i].Life > 0) { aim = i; Distance = TempDistance; } } getDelta(delta, MyPlayer, TargetPlayer[aim]); getAngles(angles, delta); WriteProcessMemory(hProc, (LPVOID)(MyPlayer.LocalAddress + OffSetViewX), &angles[0], sizeof(float), NULL); WriteProcessMemory(hProc, (LPVOID)(MyPlayer.LocalAddress + OffSetViewY), &angles[1], sizeof(float), NULL); system("CLS"); } }
wwwhttpru, тебе нужно проверять за стеной ли противник, делается это при помощи traceray функции, почитай на форумах.