Code:
#include <Windows.h>
#include <iostream>
#include <string>
enum ObjectManager
{
CurMgrPointer = 0x00C79CE0, // 3.3.5a 12340
CurMgrOffset = 0x00002ED0, // 3.3.5a 12340
NextObject = 0x3C, // 3.3.5a 12340
FirstObject = 0xAC, // 3.3.5a 12340
LocalGUID = 0xC0, // 3.3.5a 12340
};
enum WoWObjectFields
{
OBJECT_FIELD_GUID = 0x0,
OBJECT_FIELD_TYPE = 0x2,
OBJECT_FIELD_ENTRY = 0x3,
OBJECT_FIELD_SCALE_X = 0x4,
OBJECT_FIELD_PADDING = 0x5,
//TOTAL_OBJECT_FIELDS = 0x5
};
UINT READUInt(HANDLE WowHandle, UINT address) {
UINT val;
ReadProcessMemory(WowHandle, (LPVOID)(address), (LPVOID)(&val), sizeof(UINT), 0);
return val;
}
UINT64 READUInt64(HANDLE WowHandle, UINT address) {
UINT64 val;
ReadProcessMemory(WowHandle, (LPVOID)(address), (LPVOID)(&val), sizeof(UINT64), 0);
return val;
}
std::string READString(HANDLE WowHandle, UINT address, size_t length) {
std::string res(length, 0);
ReadProcessMemory(WowHandle, (LPVOID)(address), (LPVOID)(&res[0]), sizeof(char) * length, 0);
return res;
}
DWORD GetMemLocByGUID(HANDLE WowHandle, UINT64 guid, DWORD curMgr) {
DWORD nextObject = READUInt(WowHandle, curMgr + FirstObject);
DWORD ObjType = READUInt(WowHandle, nextObject + OBJECT_FIELD_TYPE);
while ((ObjType <= 7) && (ObjType > 0)) {
if (READUInt64(WowHandle, nextObject) == guid) {
return nextObject;
}
nextObject = READUInt(WowHandle, nextObject + NextObject);
ObjType = READUInt(WowHandle, nextObject + OBJECT_FIELD_TYPE);
}
return 0;
}
int main(int argc, char* argv[]) {
HWND Wow = FindWindow(NULL, "World of Warcraft");
if (!Wow) {
std::cout << "Failed to find window process" << std::endl;
return 0;
}
DWORD Pid;
GetWindowThreadProcessId(Wow, &Pid);
HANDLE WowHandle = OpenProcess(PROCESS_ALL_ACCESS, 0, Pid);
SIZE_T read;
DWORD currentManager_pre = READUInt(WowHandle, CurMgrPointer);
DWORD currentManager = READUInt(WowHandle, currentManager_pre + CurMgrOffset);
UINT64 PGuid = READUInt64(WowHandle, currentManager + LocalGUID);
DWORD player = GetMemLocByGUID(WowHandle, PGuid, currentManager);
std::cout << PGuid << std::endl;
std::cout << player << std::endl;
return 0;
}
I'd be glad if someone could help