Searching offsets in Jade Dynasty
The purpose of this tutorial is to help our Community improving the Jade Dynasty Bot(s), updating them faster and without the help of our Coders like me. This will be a step by step tutorial, I won't explain the logic behind it and things like this, I will simply explain you step by step how you can find these offsets, this will be enough for our goals.
You will ask yourself: what’s an offset?
Let me explain it in my words. The principle behind our Bots is memory reading and memory writing into the games process memory. For example we read out the current health points and maximum health points values and then calculate the health percent. Now we check if this value is smaller than the user defined value for using pots - if so we will send a key to the window what makes the character using a health potion.In computer science, an offset within an array or other data structure object is an integer indicating the distance (displacement) from the beginning of the object up until a given element or point, presumably within the same object. The concept of a distance is valid only if all elements of the object are the same size (typically given in bytes or words).
So the memory is based on addresses and values in these addresses, so we simply have to find the current hp address and then read the value out of it.
Sadly these addresses are not static, they change on each game restart or even earlier! To solve this problem we are doing the following: we are searching for a so called "base pointer" which is the basic static address which never changes (only on patches, that’s why I will explain you how to find it). Now starting from the base pointer we are reading the value in this address and adding an offset to it. Example: 0xA00000 is the value and our offset is 0x4. Now our new value is 0xA00004, easy isn't it? This value then points to a new value if we use it as an address. So now we are checking the value of the address 0xA00004. The value in this address is (for example) 100 which is our current hp value. All we got to do is simply search these base pointer and these offset each time the game gets patched, its that easy.
Searching the offset:
Lets start with the important part of this tutorial - searching the offset(s).
1. Start Jade Dynasty and login with your Character to join the Jade Dynasty world.
2. Wait until you have full health points like in the following picture.
3. Minimize the Game and start Cheat Engine:
4. Select the process via the following button:
5. Now a new window pops up, scroll down until you see a process called elementclient.exe. Click it and click the "Open" button in Cheat-Engine.
6. Searching the non-static address: In our hp-picture above the hp value of my character was 4040/4040. Now we will start searching the current hp. So in Cheat Engine enter the value 4040; Scan type: Exact value; Value type: 4 bytes
Now click the "First Scan" button in Cheat engine and it will start searching. You will find about 400 addresses in the left list. Now let a monster attack you so that your hp value decreases a bit.
In my example my hp decreased to 3327, the value doesn’t matter; important is that it is below the max hp value (4040). Now while its below max hp go back to Cheat-Engine and search for Scan type: Decreased value and click "Next Scan" (Its important that you don't click "New Scan"!). Now you will have less address than before, but our goal is to find only 1 address. So, wait until your character has full hp again (for me it would be 4040). Then search for Scan type: Exact value; Value: 4040 and click Next Scan again. Now you should only find 1 or 2 addresses. Double click on them in the list until they move to the Cheat-Table:
As you can see my address is 138BC92C. For you it will be another one, that’s why we need these offsets, to find a way that works for everyone. By the way if you still found 2 addresses observe them until you know which one always shows the hp value. This example of my step 6 is the same principle for max hp (you may get a level up to change the value, so start with low level characters), current mp, maxmp and so on.
7. We found the address, now we need the offset(s):
This example will also be the same for everything. Lets start, right click the address in your Cheat-Table (the table at the bottom in CE) and select "Find out what accesses this address". Click "Yes" in the confirm window. Now its important to change your hp value once, so let a mob hit you or whatever. Now you will see that something happened in the so called "opcodes" window:
We are interested in the "[esi + 0000024c]" thing, which could also be eax+... or whatever. The "24c" value is the offset what we have been searching for, so you can be proud that you found the first one . This value may changes when the game gets updated, for example to "25c" or whatever. Now write down this value that you can find it in the end.
Now double click on the line with the "[esi+0000024c]" to see some details about it. It will look like this:
So since for me it was "esi + something" we need the esi value. In CE you can see the sentence "The value of the pointer needed to find this address is... [value]" so CE tells us that the value is "138BC6E0" (will be different for you). Write down this value, click OK and click the "New Scan" button. Check the "Hex" checkbox, search for exact value; 4 bytes; 138BC6E0 as in the following picture:
Click first scan! You will find many addresses, I found 25 of them. Now we don't have to observe all of them, mostly its the first or second one that we need. Add the first value to your cheat table via double clicking it.
Now we will do this opcodes thing again, right click the address and search for what access like you did it before.
You will see this: "[eax+28]". Now we found the second offset, the "28". I suggest you to write it down now, you will need it in 5 minutes.
Double click a value again to see the opcodes window like in the picture above. Again since its "[eax+28]" you will need the eax value (for you maybe edi, esi or whatever). CE says: "The value of the pointer ... 04EDC7E8", so click ok, close the opcodes window, start a new scan again with:
like in this picture:
-value:04EDC7E8 (for you it will be another one for sure)
-scan type: exact value
-value type: 4 bytes
Click first scan and you will see a new list of addresses now, here we are nearly done. One of them is probably written in green like this one:
This is the base pointer, write it down too (on the current Jade Dynasty version its like in my picture "00A4AAEC"). This address is the same for everyone who is currently playing the game and it will probably change on the next update. Write it down now (00A4AAEC).
8. The result:
The result is the following path: 00A4AAEC+28+24c = current hp. Now you are able to search the values for current hp, maxhp, current mp and maxmp easily. Now its time for you to start finding them yourself. Post them here, after these 4 values are found I will explain how to find the targetid, which is a bit different to this tutorial. After we also found this we are done, you can always update the Bot yourself then.