//\¦΅½’ξρΜAhXΖl
struct _ad{
int zeny;
int exp;
int maxexp;
int job;
int maxjob;
int weight;
int maxweight;
int baselv;
int joblv;
int name;
int xorindex;
int xortable;
int statindex;
int stattable;
} ad;
struct _val{
int zeny;
int exp;
int maxexp;
int job;
int maxjob;
int weight;
int maxweight;
int baselv;
int joblv;
char name[MAX_PATH];
int xorindex;
int xortable;
int statindex;
int stattable;
int xor;//0x77777777
int xorval;//xorindex*4+xortable
int hp;
int maxhp;
int sp;
int maxsp;
} val;
{
HWND hrag, hfor;
DWORD dwProcessID = NULL;
DWORD dwThreadID = NULL;
HANDLE hProcess = NULL;
hfor = GetForegroundWindow();
hrag = FindWindow(NULL,"Ragnarok");
dwThreadID = GetWindowThreadProcessId( hrag, &dwProcessID );
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessID);
if(hProcess){
//test
ReadProcessMemory(hProcess, (LPVOID)ad.zeny, (LPVOID)&val.zeny, 4, 0);
ReadProcessMemory(hProcess, (LPVOID)ad.exp, (LPVOID)&val.exp, 4, 0);
ReadProcessMemory(hProcess, (LPVOID)ad.maxexp, (LPVOID)&val.maxexp, 4, 0);
ReadProcessMemory(hProcess, (LPVOID)ad.weight, (LPVOID)&val.weight, 4, 0);
ReadProcessMemory(hProcess, (LPVOID)ad.baselv, (LPVOID)&val.baselv, 4, 0);
ReadProcessMemory(hProcess, (LPVOID)ad.joblv, (LPVOID)&val.joblv, 4, 0);
ReadProcessMemory(hProcess, (LPVOID)ad.job, (LPVOID)&val.job, 4, 0);
if(val.joblv < 50){
ReadProcessMemory(hProcess, (LPVOID)ad.maxjob, (LPVOID)&val.maxjob, 4, 0);
} else {
val.maxjob=99999999;
}
ReadProcessMemory(hProcess, (LPVOID)ad.baselv, (LPVOID)&val.baselv, 4, 0);
ReadProcessMemory(hProcess, (LPVOID)ad.name, (LPVOID)&val.name, MAX_PATH, 0);
ReadProcessMemory(hProcess, (LPVOID)ad.xorindex, (LPVOID)&val.xorindex, 4, 0);
ReadProcessMemory(hProcess, (LPVOID)(val.xorindex*4+ad.xortable), (LPVOID)&val.xorval, 4, 0);
ReadProcessMemory(hProcess, (LPVOID)ad.statindex, (LPVOID)&val.statindex, 4, 0);
ReadProcessMemory(hProcess, (LPVOID)(val.statindex*4+ad.stattable), (LPVOID)&val.hp, 4, 0);
ReadProcessMemory(hProcess, (LPVOID)(ad.statindex+0x4), (LPVOID)&val.statindex, 4, 0);
ReadProcessMemory(hProcess, (LPVOID)(val.statindex*4+ad.stattable+0x30), (LPVOID)&val.maxhp, 4, 0);
ReadProcessMemory(hProcess, (LPVOID)(ad.statindex+0x8), (LPVOID)&val.statindex, 4, 0);
ReadProcessMemory(hProcess, (LPVOID)(val.statindex*4+ad.stattable+0x60), (LPVOID)&val.sp, 4, 0);
ReadProcessMemory(hProcess, (LPVOID)(ad.statindex+0xC), (LPVOID)&val.statindex, 4, 0);
ReadProcessMemory(hProcess, (LPVOID)(val.statindex*4+ad.stattable+0x90), (LPVOID)&val.maxsp, 4, 0);
val.hp ^= val.xorval; val.hp ^= val.xor;
val.maxhp ^= val.xorval; val.maxhp ^= val.xor;
val.sp ^= val.xorval; val.sp ^= val.xor;
val.maxsp ^= val.xorval; val.maxsp ^= val.xor;
sprintf(bufStr, "%s [έΒ©θά΅½][%s Lv%d job%d]", szTitle, val.name, val.baselv, val.joblv);
SendMessage(hWnd, WM_SETTEXT, NULL, (LPARAM)&bufStr);
sprintf(bufStr, "%d/%d", val.exp, val.maxexp);
SetDlgItemText(hWnd, IDC_S_EXP1, bufStr);
sprintf(bufStr, "%d/%d", val.job, val.maxjob);
SetDlgItemText(hWnd, IDC_S_JOB1, bufStr);
sprintf(bufStr, "%d/%d", val.hp, val.maxhp);
SetDlgItemText(hWnd, IDC_S_HP, bufStr);
sprintf(bufStr, "%d/%d", val.sp, val.maxsp);
SetDlgItemText(hWnd, IDC_S_SP, bufStr);
//o±lΜ\¦A¦Δ’½Ύ―\¦π«·¦½’B
if(!dwStart){
dwStart = GetTickCount();
dwCurrent = dwStart;
ft.exp = val.exp;
ft.job = val.job;
lt.exp = val.exp;
lt.job = val.job;
} else {
dwCurrent = GetTickCount();
if(lt.exp != val.exp && val.exp>lt.exp){
sprintf(bufStr, "+%d", val.exp - lt.exp);
SetDlgItemText(hWnd, IDC_S_EXP3, bufStr);
sprintf(bufStr, "+%d", val.job - lt.job);
SetDlgItemText(hWnd, IDC_S_JOB3, bufStr);
}
lt.exp = val.exp;
lt.job = val.job;
if(lt.exp != val.exp && val.exp>lt.exp){
sprintf(bufStr, "+%d/h", (lt.exp - ft.exp)*1000*60*60/(dwCurrent - dwStart));
SetDlgItemText(hWnd, IDC_S_EXP2, bufStr);
sprintf(bufStr, "+%d/h", (lt.job - ft.job)*1000*60*60/(dwCurrent - dwStart));
SetDlgItemText(hWnd, IDC_S_JOB2, bufStr);
}
}
} else {
sprintf(bufStr, "%s [έΒ©θάΉρ]", szTitle);
SendMessage(hWnd, WM_SETTEXT, NULL, (LPARAM)&bufStr);
dwStart = 0; dwCurrent = 0;
}
}