I wonder if I missed anything.
Every time when I need to read eve memory (to find UI elements) I have to scan the whole client memory and search for the UI Root objects, right?
Usually this takes so much time and memory (specially, when you need to scan 5 running boxes). Is there any optimized way how to find UI Root object than bruteforce? Any static pointers or something like that?
No, most people search the root only once per process, not every time they read the memory.
Probably there are faster ways to find the root. Most people don’t care if it takes ten or five seconds because they search the root only once when starting their bot.
The memory reading that happens frequently takes less than 200 milliseconds most of the time.
The duration also depends on how many UI elements you have in the game client at that moment and on your CPU. When you use one of the popular frameworks for EVE Online, you can see in devtools how many milliseconds it spent on a memory reading.
Thanks, as I thought.
I am storing the address of RootUI and then reusing when I restart the bot.
My issues comming from the fact, that I am using 10 boxes at once so I am trying to optimize it as much as possible.
Currently, when I find all important addresses, getting some value from memory takes around 2ms. Just when I dock or undock I have to recalculate it since most of the UI addresses will change. Recalculation requires to load fresh root UI element and go through it, which takes around 300ms per client, my plan is to cut it under 50ms.
Hi, you can find UIRoot through python garbage collector that saves all pythons objects pointers in itself. For me, finding UIRoot this way taking about 7 sec and not require too much memory. Most of the time is spent reading from the process, so if inject some code in process I think it takes less than second, but it is not safe.
GC has a static address, so you can direct access to it without scanning. However, any changes in python27.dll will change GC address.