-
Active Member
[Classic] How Click To Move?
I use Arctium WoW Sandbox and Compare 8.2 client , find the offsets:MoveTo = 0x9D6C70 // 1.13.2.30979
The same method, but not working on the classic.
I want to know what methods everyone uses to achieve click to move.
Code:
public void MoveTo(Vector3 position)
{
if (ObjectManager.InGame)
{
//Get pPlayer
IntPtr ptr = ObjectManager.GetActivePlayerObjPtr();
IntPtr Codecave = Memory.MemoryManager.AllocateRawMemory(0xC);
Memory.MemoryManager.Write<float>(positionCodecave, position.X);
Memory.MemoryManager.Write<float>(positionCodecave + 4, position.Y);
Memory.MemoryManager.Write<float>(positionCodecave + 8, position.Z);
var Mnemonics = new string[]
{
"sub rsp, 0x18",
$"mov rdx, {Codecave}",
$"mov rcx, {ptr}",
$"mov rax, {Memory.ModulesManager.MainModule.BaseAddress+(int)Offsets.Function.MoveTo}",
"call rax",
"add rsp, 0x18",
"retn"
};
InjectAndExecute(Mnemonics);
Memory.MemoryManager.FreeRawMemory(positionCodecave);
}
}
Last edited by imzz; 07-15-2019 at 07:58 PM.
回首向来萧瑟处,归去,也无风雨也无晴。
-
Classic client is based on 7.3.5/8.0.1, so it's before the big 8.1 changes.
If you have notes from one of those clients I would compare against that to begin with.
I haven't done any CTM'ing for a few expansions, but don't you have to write the ActionType/Trigger/Push after you've written the destination to make it start the action?
Looks like you are only writing the destination in your example, does it work for you on 8.2?
Edit: Nevermind, I was confused by my memories, you're calling the function rather than writing to the struct.
Calling the function is probably safer anyway.
I would doublecheck the function signature with the client versions I mentioned earlier, and debug from there.
Last edited by h42; 07-16-2019 at 02:25 AM.
-
Post Thanks / Like - 1 Thanks
imzz (1 members gave Thanks to h42 for this useful post)
-
Active Member
It does work on 8.2 !
MoveTo = 0xB3A380, //8.2.0.30993
I have been using this method since, because I have not found other methods.
I don't know if my method is correct.
-
Active Member
Originally Posted by
DarkLinux
Have they added any new return checks to the click to move wrapper? Can you post the asm function?
I am using the YASM function in MyMemory.
GitHub - JuJuBoSc/MyMemory: Process manipulation library for .NET that support x86/x64 written in C++/CLI.
-
Contributor
Works fine for me on latest build (31043)
Code:
//store a temp position for testing
const auto lPlayer = reinterpret_cast<int64_t(__cdecl*)()>(ClassicMorph::ClntObjMgrGetActivePlayerPtr)();
tPos = *reinterpret_cast<ReClass::Vector3*>(lPlayer + 0x1600);
printf("%s", tPos.ToString(3));
//moved player and called function with prev saved pos
reinterpret_cast<void(__fastcall*)(int64_t, ReClass::Vector3*)>(ClassicMorph::Base + 0x9DF110)(lPlayer, &tPos);
P.S. Make sure you have click to move enabled or this will do nothing
让它下雨
Last edited by Icesythe7; 07-17-2019 at 11:13 AM.
-
Post Thanks / Like - 2 Thanks
imzz,
ylb001 (2 members gave Thanks to Icesythe7 for this useful post)
-
Member
//store a temp position for testing
const auto lPlayer = reinterpret_cast<int64_t(__cdecl*)()>(ClassicMorph::ClntObjMgrGetActivePlayerPtr )();
tPos = *reinterpret_cast<ReClass::Vector3*>(lPlayer + 0x1600);
printf("%s", tPos.ToString(3));
//moved player and called function with prev saved pos
reinterpret_cast<void(__fastcall*)(int64_t, ReClass::Vector3*)>(ClassicMorph::Base + 0x9DF110)(lPlayer, &tPos);
please give me version 31727 new address , thank you very much!
-
★ Elder ★
Originally Posted by
ylb001
//store a temp position for testing
const auto lPlayer = reinterpret_cast<int64_t(__cdecl*)()>(ClassicMorph::ClntObjMgrGetActivePlayerPtr )();
tPos = *reinterpret_cast<ReClass::Vector3*>(lPlayer + 0x1600);
printf("%s", tPos.ToString(3));
//moved player and called function with prev saved pos
reinterpret_cast<void(__fastcall*)(int64_t, ReClass::Vector3*)>(ClassicMorph::Base + 0x9DF110)(lPlayer, &tPos);
please give me version 31727 new address , thank you very much!
Dump the exe and find it
-
Member
Have u found a way to move?:gusta:
-
Member
Do you have the latest version of CTM offset address? I'm still a novice in robot production, with only recent memory dump files. I tried IDA for a long time, but I couldn't find the offset. I also tried to use CE to search clicktomovetype and failed.
Thank you very much for any tips or guidance.
-
-
Member
Originally Posted by
fonillius
My lua code to enable "click-to-move"
I hope this helps you find it
Thank you for your guidance, I will study it later.
-
Member
Originally Posted by
fonillius
My lua code to enable "click-to-move"
I hope this helps you find it
Do you have the offset address to execute the CTM function? I don't have the IDA signature of the previous version. I can't find it in the current version. Thanks.
-
Contributor
Originally Posted by
sanyle
Do you have the offset address to execute the CTM function? I don't have the IDA signature of the previous version. I can't find it in the current version. Thanks.
Code:
48 83 ec ? 48 8b 81 ? ? ? ? 48 83 b8 ? ? ? ? ? 7e ? 4c 8b 41
theres the sig for ida
33728 offset is 0x8CAE30
-
Member
Originally Posted by
Icesythe7
Code:
48 83 ec ? 48 8b 81 ? ? ? ? 48 83 b8 ? ? ? ? ? 7e ? 4c 8b 41
theres the sig for ida
33728 offset is 0x8CAE30
thank you very much. I browsed some of your earlier posts and got a lot of help. Learning is continuing.
-
Member
how can find ClntObjMgrGetActivePlayerPtr in IDA?