-
Member
need help with my homemade bot
Hello guys, I'm a newbie programmer want to make a poe bot by myself, the bot reads memory, but never writes it (to avoid to get banned).
bot usage: dried lake voll farming (for voll card and currency, 6s, 6l, etc)
C language is the only language I know (my job is related to android driver developing).
problem 1: how to let the program know the layout of the map, so it can find the path to the boss without getting stuck? (i.e. how to load the layout into the program?)
problem 2: how to pick up items like chaos, unique? i know that poehud can detect notable loot in the surrounding area, but i'd like to make this function by myself. and also i'd like to learn that how to let the program know the position of the drop, so it can go there to pick it up?
Any help is appreciated, tyvm.
-
★ Elder ★
Problem 1: Buried in the HUD thread somewhere is a link to a youtube video where the guy is viewing the memory region of the walkable area in game. If you find the video, you should be able to track down the map data fairly easily. I found it within a few minutes of looking (to give a massive hint as to how to find it, a walkable tile is flagged as 55, so you can search for a byte array full of several 0x55 bytes. Once you find one, look at the surrounding memory, if it looks like a pattern, you've probably found it). I had to poke for a few more minutes before I found the pointer to it, but the end result was the crappy map hack I posted a screen shot on one of the last couple of pages of the HUD thread. I'm not sure how helpful that would be to find Voll, but there it is.
Problem 2: This is done in HUD. Just look through the code. If you find the CollectEntities function, that will loop through and gather all of the entities near the player. Then you can look at the ItemAlerter to see how entities are checked for specific sockets/links/rarity/class (currency)/etc.
Last edited by TehCheat; 08-09-2016 at 08:28 AM.
-
Post Thanks / Like - 3 Thanks
-
kuandahan if you are still around here is the link to that youtube video
Path of Exile - Pathfinding Data - YouTube
-
Post Thanks / Like - 2 Thanks
-
The next pressing question is how to figure out how large the map is to make sense of the data. Does anyone know if all maps are the same size in a given area? This would make this much easier.
Last edited by Cosmo777; 11-17-2016 at 09:50 AM.
-
Post Thanks / Like - 1 Thanks
toadskin (1 members gave Thanks to Cosmo777 for this useful post)
-
Next update, once you do find the map area in memory you can then find the dimension of one of the axis by looking for the first value of 0x50. The beginning of the memory that represents the map to the first 0x50 is a dimension of an axis. Continue reading memory with that interval until the internal is not 0x50 and you will have read the entire memory region for the map.
-
Private
Just look for a structure containing the start, the end and the width of the map.
Starting from :
PoeHUD PoEHUD/src/Poe/RemoteMemoryObjects/IngameState.cs: public IngameData Data => ReadObject<IngameData>(Address + 0x138 + Offsets.IgsOffset);
or
PoeAutoFlask beta-autopot/Autopot.ahk: global Offset1:=0x138
at offset 0x28c :
3EC75660 map start
3ECD7BA1 map end
3ECD7BA1
3F6470C0 flying shitters map start ?
3F6A9601 map end
3F6A9601
000001C1 width of the map
00000005 something like your position
00000009
00000014
00000018
I think only the 0x0 bytes in the map are non-walkable. If your small enough everything else is walkable.
-
Originally Posted by
rtoqwo
Just look for a structure containing the start, the end and the width of the map.
Starting from :
PoeHUD PoEHUD/src/Poe/RemoteMemoryObjects/IngameState.cs: public IngameData Data => ReadObject<IngameData>(Address + 0x138 + Offsets.IgsOffset);
or
PoeAutoFlask beta-autopot/Autopot.ahk: global Offset1:=0x138
at offset 0x28c :
3EC75660 map start
3ECD7BA1 map end
3ECD7BA1
3F6470C0 flying shitters map start ?
3F6A9601 map end
3F6A9601
000001C1 width of the map
00000005 something like your position
00000009
00000014
00000018
I think only the 0x0 bytes in the map are non-walkable. If your small enough everything else is walkable.
Thanks, based off the in game data offset from poehud i was able to find the following offsets.
AreaStart = memory.ReadInt(Address + 0x28c);
AreaEnd = memory.ReadInt(Address + 0x290);
AreaWidth = memory.ReadInt(Address + 0x2A4);
-
Contributor
Originally Posted by
rtoqwo
Just look for a structure containing the start, the end and the width of the map.
Starting from :
PoeHUD PoEHUD/src/Poe/RemoteMemoryObjects/IngameState.cs: public IngameData Data => ReadObject<IngameData>(Address + 0x138 + Offsets.IgsOffset);
or
PoeAutoFlask beta-autopot/Autopot.ahk: global Offset1:=0x138
at offset 0x28c :
3EC75660 map start
3ECD7BA1 map end
3ECD7BA1
3F6470C0 flying shitters map start ?
3F6A9601 map end
3F6A9601
000001C1 width of the map
00000005 something like your position
00000009
00000014
00000018
I think only the 0x0 bytes in the map are non-walkable. If your small enough everything else is walkable.
I've been following the steps listed in this thread and the offsets now are almost the same (added 4 to all to get it working). I've been researching for a little and came up with the conclusion that every byte of this map is actually 2 values. Both low and high 4 bits of every byte are describing a map cell. And I suppose cell values mean the radius (in this map units) of an object that can step into this map cell. What I struggle with is parsing this so-called coordinates/position. I could almost precisely get map cell coords by dividing game float coodinates by the constant value (4.6 for X and 9.2 for Y). But this doesn't seem the right thing to do. Does anyone know how to parse those 4 dword values after the map width? I've tried to reverse some code that accesses those 4 dwords but from what I've seen it's some tricky math function on params of a function and I'm not sure those operations are lossless. Also those 4 values are likely to be a union.
P.S. Zana's map device located near the wall in my hideout looks like this. With every number representing high/low byte value of every map cell.
P.P.S. after some reversing I've found the constant 0.092f in code. My guess was the right thing. Just multiplying game coords by 0.092 gets you the cell number.
Last edited by Empted; 04-22-2017 at 10:05 AM.
-
Post Thanks / Like - 1 Thanks
-
Member
Can anyone clarify on the following :
Is the offset 28c from Base + Offset1 ( 0x138 ) ? or it is Base + x28c ?? I am trying to get the MapStart, MapEnd, MapWidth in Poe x64 dx11 but to no avail, any help is appreciated.
Thanks!
Edit : Top Post is correct, new pointers are 29c, 300, 2b4. Above post got everything right!! GGWP!!
Last edited by calebrivers098; 10-09-2017 at 11:22 AM.
Reason: edited so it wouldn't parse smileys and found the solution
-
Member
Hey, how did you get the pointer to it? I can find the Walkable tiles and view the map with cheat engine, but i'm having absolutely no luck getting a pointer to it. Also, is there anyway to get the X,Y,Z ssociated with the 55?
-
Member
Originally Posted by
calebrivers098
Can anyone clarify on the following :
Is the offset 28c from Base + Offset1 ( 0x138 ) ? or it is Base + x28c ?? I am trying to get the MapStart, MapEnd, MapWidth in Poe x64 dx11 but to no avail, any help is appreciated.
Thanks!
Edit : Top Post is correct, new pointers are 29c, 300, 2b4. Above post got everything right!! GGWP!!
can you help me with this for 64bit?