Hi there,
Before I begin this rather annoying post to write, here's what I expect you have experience and somewhat know how to:
- General Usage of CE
- Basics of pointer scanning.
- Ability to think logically.
If you do not have the qualifications listed above, I suggest you learning from either YouTube, or the countless of articles scattered across the internet. I will not be responding to questions, or help for that sake, if you fail to have the least bit of idea how CE operates.
Now let's get rolling with the tutorial. So you see the way Nippy's Fishing Bot works, is that it has Offsets (funny enough) pointing to the different Liquid Types. The LiquidOffsets with STATE. Attached to the Variable name, is a way to determine which liquid you're fishing in, the value turns to 1 as soon as the lure hits the Liquid. Now some of you might think that, it's a way to do it. Which it is. I will show you how I would do it manually, I made automation tools for this, but once you get the grasp of it, you should be able to make some similar yourself.
For this update example, I'm going to be using Water as liquid. So load up Cheat Engine, and start finding the WaterStateAddr. Simply by casting the fishing rod into water, then searching 1 in CE. Then reel the lure in and proceed to scan for 0. Repeat this process until you've narrowed down this list.
EDIT: The fishing addresses are commonly allocated in 0x05-0x06 memory space, look for 0x0500000-0x0600000 in the search results. It should be the only one, if you did it correctly.
I did everything you said and I can't find the value that changes from 0 to 1?
Redo, the procedure. You have scanned incorrectly if you're facing this issue.
Alright, so you found the address of the WaterState. Good job! Now comes the fun part. Before you place the address on the saved addresses tab below. Add this address manually, as it will serve as a reference to the BaseAddress.
trove.g_pRegistryMgr+C-trove.exe
What is this you might ask? It's a static address inside of trove that never changes. It's always the same. Not going into details of what it is. Too complicated and not much value for you to know it.
Double tap the address you found for the WaterState, then proceed to copy the address. Now add a new address manually, and follow the chart below. It will show you how to calculate each of the addresses for the variables you need.
| WaterPtr = |
WaterStateAddr + 0xB20 |
| PlasmaState = |
WaterStateAddr - 0x4D4 |
| PlasmaPtr = |
WaterPtrAddr + 0x73C |
| LavaState = |
WaterStateAddr - 0x268 |
| LavaPtr = |
WaterPtrAddr + 0x4D4 |
| ChokoState = |
WaterStateAddr + 0x268 |
| ChokoPtr = |
WaterPtrAddr + 0x268 |
To use this table above, you first need to find WaterPtr. It's simple follow the way to calculate it. After that. Do you have everything you need for the fish bot, you still need to pointerscan, but no need to fish anymore. Why does this work some of you might ask? It works due to the way this struct is built up. You see these offsets are relative to each other, meaning if you don't have the correct WaterStateAddr, it won't work. There's multiple ways around ASLR, but it's for automation this is a manual process for you beginners

.
ATTENTION!!! Name each of the addresses appropriately, otherwise you will have trouble later distinguishing between them.
Now you should have a giant list with all the addresses of the different liquids, and the catch identifier (the liquidptr). Now you should pointer scan for each of the addresses, normal settings should suffice, don't close the scan windows down after they complete. Just resize them to a smaller window and place them somewhere. Keep doing this for each address. Now you should have 8 windows of pointer results.
You have made it so far?
Good job, now a single step is necessary and you should be rolling. Instead of begging for offsets each time the game updates.
Open a new game client, re-attach CE. Then for each of the pointerscan results. Re-Scan memory and search for a value with 0. Since you're not fishing you want it to search for all the pointers that have a endpoint result of 0 - to delete all the invalid pointers.
Now the list should be a bit nicer to look at. Now you should see to the far left, a string like this "trove.exe+0x000000" the "0" after the x are just placeholders, since I couldn't be bothered to find all the static addresses for this build.
Now how do you find the correct pointer that won't break no matter the amount of restarts? Remember the address I asked you to plot in?
this one ->
trove.g_pRegistryMgr+C-trove.exe
Take a look at the address it has. Now look in the pointer scan results for "trove.exe+0x000000" remember it won't say trove.g_pRegistryMgr + C, but it will have the hexadecimal address of that address. Which I provided you.
ALL POINTERS WITH that exact base address will work for the entirety of the current build of trove. It will for sure change in the future, due to the ASLR and imagebase shifts. Double click the pointer, to place it into the CE table. Rename it as quickly as you can to avoid confusion.
Do it for the remaining addresses and you're done.
Now how to update the offsets to match the bot's system.
Double click the pointer in the CE table.
The first offset you need to write is always the bottom one. then process upwards, remember to add "0x" in front of every offset. I will give an example.
>7C<
>128<
>94<
>E4<
>68<
trove.exe+0x000000
Pointer: the address after +. -> 0x00000 (not trove.exe)
String to write inside the .ini file: 0x68+0xE4+0x94+0x128+0x7C
Now you're done, you fully updated this bot to the new offsets. Now for the love of god, don't fucking spam me with shitty questions after I have spoonfed you the answers. Obviously a long time has been put in to this post, show me some support by thanking me if you found it useful or it helped you in any way, if it did not help you, then don't bother.