-
Member
hmm i should probably learn how to find these things
-
★ Elder ★
Originally Posted by
MasterDMFour
Lets hope finding the new offsets doesn't take too long :P Can't wait to use this in the new league.
Assuming you guys will be hard at work as usual finding the new breach content stuff too?
Stridemann and I just worked out how to get patterns, so we should be good to go soon enough. I stared at code for hours last night, couldn't figure out what I was looking at, stared at it for about 5 minutes today and figured it out.
-
Post Thanks / Like - 1 Thanks
davoooooo (1 members gave Thanks to TehCheat for this useful post)
-
Member
Originally Posted by
TehCheat
I stared at code for hours last night, couldn't figure out what I was looking at, stared at it for about 5 minutes today and figured it out.
that's always how it goes, man.
your mind works on this stuff while you sleep and you wake up with those ideas.
-
Member
Hello,
I'm fairly new to programming and was looking through the HUD code.
I was looking at the inventory code specifically and playing around a bit. Are the inventory offsets for the 32-bit client working related to inventories?
I was try fooling around and tried the following with no results from the current source in git hub.
I just placed this into one of the game loops in the hud.
var iList = _gameController.Game.IngameState.ServerData.PlayerInventories;
var flasks = iList[InventoryIndex.Flasks];
var isi = iList.Inventories;
Thanks for any reply,
Nemo
-
★ Elder ★
Originally Posted by
NemoOfTheSea22
Hello,
I'm fairly new to programming and was looking through the HUD code.
I was looking at the inventory code specifically and playing around a bit. Are the inventory offsets for the 32-bit client working related to inventories?
I was try fooling around and tried the following with no results from the current source in git hub.
I just placed this into one of the game loops in the hud.
var iList = _gameController.Game.IngameState.ServerData.PlayerInventories;
var flasks = iList[InventoryIndex.Flasks];
var isi = iList.Inventories;
Thanks for any reply,
Nemo
It's not used for anything in HUD so I don't usually keep it updated.
-
Post Thanks / Like - 1 Thanks
toadskin (1 members gave Thanks to TehCheat for this useful post)
-
Member
Originally Posted by
TehCheat
It's not used for anything in HUD so I don't usually keep it updated.
Ahh, thanks, I was hoping to make something that would do some easy calcs to see when leveling if an item you picked up and was in your inventory was better than ones you had equipped. I'll look into trying to get those pointers updated, any pointers on how to start... good at programming but little experience on assembly stuff.
-
★ Elder ★
Originally Posted by
NemoOfTheSea22
Ahh, thanks, I was hoping to make something that would do some easy calcs to see when leveling if an item you picked up and was in your inventory was better than ones you had equipped. I'll look into trying to get those pointers updated, any pointers on how to start... good at programming but little experience on assembly stuff.
There's a component Inventories. It's completely empty in HUD, but you access it like this:
Code:
var playerInventories = localplayer.GetComponent(Components.Inventories);
Not sure if it's the same thing, or if it's even slightly useful. You could grab its address and look at the structure in a memory viewer, might find something.
-
Post Thanks / Like - 1 Thanks
toadskin (1 members gave Thanks to TehCheat for this useful post)
-
Originally Posted by
davoooooo
that's always how it goes, man.
your mind works on this stuff while you sleep and you wake up with those ideas.

so true. Happens with me too.
If I did not reply to you, it mean the question you are asking is stupid.
-
Member
Would it be possible to add a separate alert for phys/ele reflect + volatile combo rare mobs? They're pretty rare but super rippy af
-
★ Elder ★
I have search patterns for Base and AreaChange. Can't nail down FileRoot. But the other two work and I run HUD in Steam or standalone and they work bouncing between the two.
I built an exe and pushed the changes to the github x64 branch. You should be able to use this version in steam or standalone without issue. It will start slowly as it searches for patterns which takes a bit. I can speed that process up a bit. Right now it searches for the pattern every byte, but ideally the patterns start at 4-byte offsets (the patterns I'm using currently do, I just forgot to change the search pattern), so our searches can be roughly 4 times faster.
Last edited by TehCheat; 12-01-2016 at 09:29 AM.
-
Post Thanks / Like - 1 Thanks
toadskin (1 members gave Thanks to TehCheat for this useful post)
-
★ Elder ★
OK, I pushed a change that has a pattern for FileRoot. EDIT: Tested this and it seems to be working well. I also made the 4 byte scanning change, so it's pretty quick, about a second of scanning on my PC.
So to explain all the fun I've had the last 2 weeks...
inside a function there will be a call to something like FileRoot. In x86 it would just give you the offset from the base of the executable, or the direct address. Really easy to find references to an object this way. There's only two things to search for and they're quite obvious.
In x64 it seems very common to use Object Relative Addressing with their pointers (also known as RIP). And RIP is a bit tricky because the offset it gives you is how far away the object it is referencing is.
As an example:
In x86, if a program's base address is 0x20000000 and the offset of a pointer to main is 0x20200000 you'd search for 0x20200000 or 0x00200000 and find any references that are present. With x64 if the pointer was at 0x201c0000 (and the pointer takes up 4 bytes) you'd need to search for 0x20200000-0x201c0004. The number changes as you progress through code. You can't search for a single number because it varies depending how far away the referenced object is.
So I wrote a simple program from scratch to find RIP references. After looking for hours and hours the last few days, I found a function (actually I found 11 of them) within about 2 seconds of getting my program up and running. Once you have a proper function, finding patterns is easy.
I'm sure there are search tools out there that already do this for you, but I looked and couldn't find any. Finally decided writing my own would just be easier.
Here's a screenshot of the program in action:
Last edited by TehCheat; 12-01-2016 at 05:25 PM.
-
Post Thanks / Like - 1 Thanks
toadskin (1 members gave Thanks to TehCheat for this useful post)
-
Corporal
hmm I'm not understanding. How are u using the RIP register to find these "references" and what are they? are these functions ur finding or values in .data or values in dynamic memory or what? Maybe I'm confused because i don't know what all these values u talk of updating in ur project or how you use them since idk C# but I'll definatly be looking into it in the future because it looks like ur project has access to a lot of interesting information in the game.
-
Post Thanks / Like - 1 Thanks
toadskin (1 members gave Thanks to ntoskrnl for this useful post)
-
★ Elder ★
Originally Posted by
ntoskrnl
hmm I'm not understanding. How are u using the RIP register to find these "references" and what are they? are these functions ur finding or values in .data or values in dynamic memory or what? Maybe I'm confused because i don't know what all these values u talk of updating in ur project or how you use them since idk C# but I'll definatly be looking into it in the future because it looks like ur project has access to a lot of interesting information in the game.
Normally you'd just read an address from memory and then go to that address. x64 tends to use RIP addresses, which means you read the value at the address, and add it and the size (generally 4) to the address the value is at. So If you're reading address 0x12345678 and the value is 0x00200000 (4 bytes) you take 0x12345678 and add 0x00200000 and add 4 which would tell you the RIP was pointing at 0x1254567C. Super annoying, but it's efficient, so I understand why x64 does it.
-
Post Thanks / Like - 1 Thanks
toadskin (1 members gave Thanks to TehCheat for this useful post)
-
For detail explanation a simple google gave me this: Understanding the x64 code models - Eli Bendersky's website 
Originally Posted by
TehCheat
Normally you'd just read an address from memory and then go to that address. x64 tends to use RIP addresses, which means you read the value at the address, and add it and the size (generally 4) to the address the value is at. So If you're reading address 0x12345678 and the value is 0x00200000 (4 bytes) you take 0x12345678 and add 0x00200000 and add 4 which would tell you the RIP was pointing at 0x1254567C. Super annoying, but it's efficient, so I understand why x64 does it.
If I did not reply to you, it mean the question you are asking is stupid.
-
★ Elder ★
Originally Posted by
zaafar
That was one of the many websites I looked at over the last week or so.