I don't think robot-js supports any of the remotely recent versions of Node? i.e. ones with the cool stuff like async await. I was using a custom fork of memoryjs instead - GitHub - idiidk/memoryjs: Read and write memory in NodeJS (finally!) - this lib supports memory pattern matching too.
In your case, you were creating an instance of the mouse object but setPos is a static variable. What you were doing is identical to "new Mouse()". This is not normal for JavaScript and it's something special I did to save on having to write "new". If you do "let mouse = robot.Mouse". then setPos will work fine.
While I haven't tried node 10, robot-js works with Node 0.12 up to and including 9. If you have Node 10 you can try installing robot-js and see if it compiles automatically.
So that's one of the limitations of robot-js, it's all blocking so it doesn't technically support Promises and async/await. But thanks for linking me this project. It'll help me improve robot-js.
First off, thank you Torpedoes for all your hard work. I have a few questions and I'm very much willing to do the research but I am unsure where to start. I've sifted through a lot of Google Searches as well as OwnedCore forum threads and I've come to a bit of a road block.
I'm attempting to write a super basic bot (eventually just a rotation bot). For right now I just want to read memory and get used to the ins and out of robot-js as well as the WoW client itself.
I've already written (with the help of the many robot-js tutorials) a node app that can attach to the client and runs through a loop function (already done in the tutorials but I wanted Promises and ES6/7 functionality/syntax). All that works great.
I've been using CE to find what the currently selected character is (unable to remember yet how to use IDA as the last time I used it was maybe 6 years ago). It seems obvious now that the client is dynamically referencing offsets as I am unable to lock anything down. I am able to get pointer for the module.
And once I find the address on CE of the selected target I am able to console log the result:Code:let entry = memory.readPtr(module); //12894362189 <-- Looks to be a decimal
But the target address changes every time the client is loaded. Is there a static pointer/offset address from the entry that I am not finding information about in my searches? Am I even on the right track? Is the fact that its all dynamic making this all a moot project? I want to learn this but I am on the hard cord struggle bus. Any help with my endeavors would be appreciated.Code:let target = 0x238A07A350A; // From CE console.log(memory.readString(target, 80).split("|")[0]);
Hello All,
This is a very nice tutorial for a beginner, altough i managed to get stuck, or maybe the client changed somehow.
I was trying out your cooldown iterator demo, but i have some problems.
I am not a javascript expert, i worked with C++ before, so the concept of pointers are clear to me.
But here what i am getting on the latest clients:
Cooldown table address: 7ff719b5f9e8 (This is the base address + the offset for the cooldown table)
After reading this, i get the following address:132965ee000
This address does contain valid data as i can see that spellID = 28730 is valid.
After trying to read the next entry, which should be located at currentAddress + 0x08, io get the following address: 7ff719b5f9e9 (This is the cooldown table + 0x01)
This address does not contain any valid address or valid data.
So the structure should look something like this if the entry holds the next pointer:
class CooldownEntry {
Int64 unused; // Or 2 Int32, etc
Pointer nextEntry; // located at 0x08 - 64bit pointer size
Int32 SpellID; // located at 0x10
Int32 itemID; //located at 0x14
}
Update: I could find the second entry at the cooldown table base(7ff719b5f9e8 ) + 0x08
The third one is not at cooldown table base + 0x10
Did anyone manage to find these cooldowns?
And also a little question about the timestamps for example spellStartTime, it is not epoch, what is it then?
Thank you all for your answers in advance.
Best Regards,
szuecsg
All times are calculated using the timing functions that wow uses. They have 2 methods AFAIK, one is located at 0x285CD0 (8.0.1.28153) the other one is high performance counter, cba to find it as the first one works fine for me. If you are out-of-process you can look at the function in IDA, the function reads the time from a global variable.
As for the cooldown structure, you have to RE it in IDA (or CE if you're brave enough).
Hi Torpedoes
test more than 3days, but still didn't work on 8.0.1.28153. Could you please update the new offsets.js? so for some noobs like me can start use it.
I know made some Cheat Engine Table before, is possible to have some CE table for 8.0.1.28153? don't know how to use OD xD
Thanks