|
|
Читодел
OFFLINE
Регистрация: 09.04.2007
Сообщений: 984
Благодарностей:
36,602 всего
|
| |
|
Цитата:
Сообщение от Sammael
выложи исходник второго плз
Ну или ссылку кинь)
|
Ты мне? )
Если да, вот:
Код:
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <tlhelp32.h>
#include <conio.h>
typedef struct _PLAYER_DATA {
BYTE chk[1];
BYTE chk1[1];
BYTE chk2[1];
BYTE chk3[1];
BYTE chk4[1];
BYTE chk5[1];
DWORD chka;
DWORD chk1a;
DWORD chk2a;
DWORD chk3a;
DWORD chk4a;
DWORD chk5a;
DWORD baseadd[1];
DWORD baseaddar4[1];
DWORD hp[1];
DWORD hpa;
DWORD hpmax[1];
DWORD hpmaxa;
DWORD fp[1];
DWORD fpa;
DWORD fpmax[1];
DWORD fpmaxa;
DWORD sp[1];
DWORD spa;
DWORD spmax[1];
DWORD spmaxa;
} PLAYER_DATA;
typedef int bool;
int fight;
bool debug = 0;
HANDLE hProcess;
HWND hrfo;
PLAYER_DATA myp;
void CheckHP();
void CheckFP();
void CheckSP();
int GetPidByName ( char * nom );
PLAYER_DATA GetMyPlayerData();
void PrintMyPlayerData(PLAYER_DATA myp);
void CheckHP() //проверка ХП
{
if ((myp.hp[0] <= (myp.hpmax[0]-3000)) && (myp.chk5[0] == 0) && (myp.chk[0] != 0)) //Если ХП уменьшилось на 3000 и панелька 1 и слот 5 забит
{
keybd_event(VK_F5, 0, 0, 0);
keybd_event(VK_F5, 0, KEYEVENTF_KEYUP, 0);
}
if ((myp.hp[0] <= (myp.hpmax[0]-3000)) && (myp.chk5[0] == 1) && (myp.chk3[0] != 0)) //Если ХП уменьшилось на 3000 и панелька 2 и слот 10 забит
{
keybd_event(VK_F10, 0, 0, 0); //Жмет F10 если Хп меньше маскимального на 3000 и панелька 2
keybd_event(VK_F10, 0, KEYEVENTF_KEYUP, 0);
}
}
void CheckFP() //проверка ФП
{
if ((myp.fp[0] <= (myp.fpmax[0]-500)) && (myp.chk5[0] == 0) && (myp.chk1[0] != 0)) //Если ФП уменьшилось на 500 и панелька 1 и слот 6 забит
{
keybd_event(VK_F6, 0, 0, 0); //Жмет F6 если Мп меньше маскимального на 500
keybd_event(VK_F6, 0, KEYEVENTF_KEYUP, 0);
}
if ((myp.fp[0] <= (myp.fpmax[0]-500)) && (myp.chk5[0] == 1) && (myp.chk4[0] != 0)) //Если ФП уменьшилось на 500 и панелька 2 и слот 9 забит
{
keybd_event(VK_F9, 0, 0, 0); //Жмет F9 если Мп меньше маскимального на 500 и панелька 2
keybd_event(VK_F9, 0, KEYEVENTF_KEYUP, 0);
}
}
void CheckSP() //проверка SP
{
if ((myp.sp[0] <= (myp.spmax[0]-400)) && (myp.chk5[0] == 0) && (myp.chk2[0] != 0)) //Если СП уменьшилось на 400 и панелька 1 и слот 7 забит
{
keybd_event(VK_F7, 0, 0, 0);
keybd_event(VK_F7, 0, KEYEVENTF_KEYUP, 0);
}
}
int GetPidByName ( char * nom ) //эту поеботу я даже боюсь трогать :D
{
HINSTANCE hLib;
PROCESSENTRY32 PEntry;
HANDLE hTool32;
HANDLE (WINAPI *pCreateToolhelp32Snapshot)(DWORD,DWORD);
BOOL (WINAPI *pProcess32First) (HANDLE,LPPROCESSENTRY32);
BOOL (WINAPI *pProcess32Next) (HANDLE,LPPROCESSENTRY32);
pCreateToolhelp32Snapshot = (HANDLE(WINAPI *)(DWORD,DWORD)) GetProcAddress ( LoadLibrary("kernel32.dll"), "CreateToolhelp32Snapshot" );
pProcess32First = (BOOL(WINAPI *) (HANDLE,LPPROCESSENTRY32)) GetProcAddress ( LoadLibrary("kernel32.dll"), "Process32First" );
pProcess32Next = (BOOL(WINAPI *) (HANDLE,LPPROCESSENTRY32)) GetProcAddress ( LoadLibrary("kernel32.dll"), "Process32Next" );
PEntry.dwSize = sizeof(PROCESSENTRY32);
hTool32 = pCreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0);
pProcess32First ( hTool32, &PEntry );
if ( !strcmp ( PEntry.szExeFile, nom ) )
return PEntry.th32ProcessID;
while ( pProcess32Next(hTool32,&PEntry) )
if(!strcmp(PEntry.szExeFile,nom))
return PEntry.th32ProcessID;
return 0;
}
PLAYER_DATA GetMyPlayerData(HANDLE hProcess)
{
DWORD mBase = 0x01127538; //указатель на начало структуры
DWORD mBasear4 = 0x010FCA1C;
PLAYER_DATA Player;
ZeroMemory(&Player, sizeof(PLAYER_DATA));
ReadProcessMemory(hProcess, (LPCVOID)mBase, (LPVOID)Player.baseadd, 4, NULL);
ReadProcessMemory(hProcess, (LPCVOID)mBasear4, (LPVOID)Player.baseaddar4, 4, NULL);
Player.fpa = Player.baseadd[0] + 0x4F3C;
Player.fpmaxa = Player.baseadd[0] + 0x4F38;
Player.hpa = Player.baseadd[0] + 0x4F2C;
Player.hpmaxa = Player.baseadd[0] + 0x4F28;
Player.spa = Player.baseadd[0] + 0x4F4C;
Player.spmaxa = Player.baseadd[0] + 0x4F48;
Player.chka = Player.baseaddar4[0] + 0xC9A; //слот 5
Player.chk1a = Player.baseaddar4[0] + 0xEBa; //слот 6
Player.chk2a = Player.baseaddar4[0] + 0x10DA; //слот 7
Player.chk3a = Player.baseaddar4[0] + 0x2EEA; //слот 10
Player.chk4a = Player.baseaddar4[0] + 0x2CCA; //слот 9
Player.chk5a = Player.baseaddar4[0] + 0x11; //номер панельки
ReadProcessMemory(hProcess, (LPCVOID)Player.fpa, (LPVOID)Player.fp, 4, NULL);
ReadProcessMemory(hProcess, (LPCVOID)Player.fpmaxa, (LPVOID)Player.fpmax, 4, NULL);
ReadProcessMemory(hProcess, (LPCVOID)Player.hpa, (LPVOID)Player.hp, 4, NULL);
ReadProcessMemory(hProcess, (LPCVOID)Player.hpmaxa, (LPVOID)Player.hpmax, 4, NULL);
ReadProcessMemory(hProcess, (LPCVOID)Player.spa, (LPVOID)Player.sp, 4, NULL);
ReadProcessMemory(hProcess, (LPCVOID)Player.spmaxa, (LPVOID)Player.spmax, 4, NULL);
ReadProcessMemory(hProcess, (LPCVOID)Player.chka, (LPVOID)Player.chk, 4, NULL);
ReadProcessMemory(hProcess, (LPCVOID)Player.chk1a, (LPVOID)Player.chk1, 4, NULL);
ReadProcessMemory(hProcess, (LPCVOID)Player.chk2a, (LPVOID)Player.chk2, 4, NULL);
ReadProcessMemory(hProcess, (LPCVOID)Player.chk3a, (LPVOID)Player.chk3, 4, NULL);
ReadProcessMemory(hProcess, (LPCVOID)Player.chk4a, (LPVOID)Player.chk4, 4, NULL);
ReadProcessMemory(hProcess, (LPCVOID)Player.chk5a, (LPVOID)Player.chk5, 4, NULL);
return Player;
}
int main()
{
DWORD pid;
pid = (DWORD)GetPidByName("RF_Online.bin");
hProcess = OpenProcess(PROCESS_VM_READ, FALSE, pid);
if (hProcess == NULL)
{
printf("[-]Please Start Game First...\n");
printf("Press any key....");
getch();
}
else
{
hrfo = FindWindow(NULL,"RF Online");
if(hrfo == NULL)
{
printf("[-]Impossible de trouver le handle de la fenЄtre!\n");
}
myp = GetMyPlayerData(hProcess);
ShowWindow(hrfo,SW_RESTORE);
SetForegroundWindow(hrfo);
while (1 == 1)
{
Sleep(1);
myp = GetMyPlayerData(hProcess);
CheckHP();
CheckFP();
CheckSP();
}
}
Правда, ума не приложу, зачем он тебе, в первом посте бот по-продвинутей.
|