Got some issue with pet object.
The value of static address + 0x3C is equals to 0 until you first move your cursor and also this value change if you put your cursor on any entity
[Only registered and activated users can see links. Click Here To Register...]
Object = value in ESI needed by pet walk function
1 - In character selection screen, object value is 0 (nothing strange i guess)
2 - In game but haven't move cursor yet, object value is 0, so if i call pet walk it will crash
3 - Normal behavior object value is correct, if i call pet walk function it will work
4 - Cursor on an entity on your screen object value is incorrect, if i call pet walk function it will crash
Here is the code i'm using to test it.
Code:
if (GetAsyncKeyState(VK_INSERT) & 1)
{
std::cout << "--------------- PATTERN ---------------" << std::endl;
DWORD function = Module::GetInstance()->FindPattern<DWORD>("\x55\x8b\xEC\x83\xC4\x00\x53\x56\x57\x8B\xF9\x89\x55\x00\x8B\xD8\xC6\x45", "xxxxx?xxxxxxx?xxxx", 0);
DWORD address = **Module::GetInstance()->FindPattern<DWORD**>("\x50\xA1\x00\x00\x00\x00\x8B\x00\x8B\x40\x20\x66\x8B\x4D\xF6", "xx????x?xxxxxxx", 2);
DWORD obj = *(DWORD*)(*((DWORD*)address) + 0x3C);
std::cout << "Function: " << function << " (NostaleClientX.exe + " << function - Module::GetInstance()->GetBaseAddress() << ")" << std::endl;
std::cout << "Object static address: " << address << " (NostaleClientX.exe + " << address - Module::GetInstance()->GetBaseAddress() << ")" << std::endl;
std::cout << "Object: " << obj << std::endl;
}
else if (GetAsyncKeyState(VK_DELETE) & 1)
{
std::cout << "--------------- HARDCODED ---------------" << std::endl;
DWORD function = 0x53e318;
DWORD address = 0x8997d8;
DWORD obj = *(DWORD*)(*((DWORD*)address) + 0x3C);
std::cout << "Function: " << function << " (NostaleClientX.exe + " << (function - 0x400000) << ")" << std::endl;
std::cout << "Object static address: " << address << " (NostaleClientX.exe + " << (address - 0x400000) << ")" << std::endl;
std::cout << "Object: " << obj << std::endl;
}
else if (GetAsyncKeyState(VK_END) & 1)
{
std::cout << "--------------- TESTING ---------------" << std::endl;
DWORD function = Module::GetInstance()->FindPattern<DWORD>("\x55\x8b\xEC\x83\xC4\x00\x53\x56\x57\x8B\xF9\x89\x55\x00\x8B\xD8\xC6\x45", "xxxxx?xxxxxxx?xxxx", 0);
DWORD address = **Module::GetInstance()->FindPattern<DWORD**>("\x50\xA1\x00\x00\x00\x00\x8B\x00\x8B\x40\x20\x66\x8B\x4D\xF6", "xx????x?xxxxxxx", 2);
DWORD obj = *(DWORD*)(*((DWORD*)address) + 0x3C);
DWORD position = (28 << 16) | 28;
std::cout << "Function: " << function << " (NostaleClientX.exe + " << function - Module::GetInstance()->GetBaseAddress() << ")" << std::endl;
std::cout << "Object static address: " << address << " (NostaleClientX.exe + " << address - Module::GetInstance()->GetBaseAddress() << ")" << std::endl;
std::cout << "Object: " << obj << std::endl;
_asm
{
push 1
xor ecx, ecx
mov edx, position
mov eax, obj
call function;
}
}
Any help appreciated :feelsbadman: