//•\Ž¦‚΅‚½‚’ξ•ρ‚ΜƒAƒhƒŒƒX‚Ζ’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;
	}
}