level Adding in client

Newbie Spellweaver
Joined
Aug 1, 2012
Messages
10
Reaction score
0
Hello People..

i have a question..

Any one can explain me , how to change the xp table in the client

How do I get the client-exp table in higher ..

destroyed without the client goes here .. whenever a new line come get broken and can start the exe nothing around!

someone has a good toturial for me? time or the time to look at?

or pictures or video?

That is where I now just hanging still = /

I wanted to set the level cap of 100 to 150 because I have no other client actually level with 150 in english

so i need edit this PPT client = /
 
First, add an empty section to the executable, with appropriate section flags in a PE file editor. (CFF Explorer Suite is quite popular because it is powerful and safe ... but many other alternatives exist)

Second, create the experience table in that section, up to the desired maximum level, and terminate it with a -1 experience. (0xFFFFFFFFFFFFFFFF)

Third, open the client in Olly, or other good disassembler with built in assembly modification and save abilities. (it's hard to find a good alternative to Olly Debug for this task, but there are some) Locate any and all code which points to the existing experience table, or to pointers which point there, etc. and update them to point to the same location in your new table, in your new section.

Fourth, look out for the code which checks a checksum value at the end of the experience table, and place an IBP (instruction breakpoint) on it. Run the game in Olly with this breakpoint active. (it is pretty impossible to find an alternative to Olly for this) When the breakpoint is triggered, check that the hashing algorithm processes all your levels, and is definitely reading the new table, and not the old one. When it compares it's hash sum with the one recorded at the end of the old table, make a note of the calculated value.

Fifth, close and re-open the executable in Olly (or other [dis]assembling debugger) and go back the that checksum routine. Change the pointer to the stored checksum to address the end of your new experience table and, at that location, place the value calculated in the last debug run. (which you made a note of in step 4) Then save the changes out again.

Sixth, test the changes you have made, and if they work, optionally zero the old table out, save and test again.

Finally, make sure the active table in your server is exactly the same, if you have not already done so.
 
Okay, so i Got the programs you mentioned and it looks like this: Naamloos - level Adding in client - RaGEZONE Forums

Where do i have to create an empty section? I use this client: http://forum.ragezone.com/f399/kpt-server-2477-a-810715/ and 1 server to collect kronos also from tolrok and 1 server just for being lvl 120 (but that one doesn't support ice mine) so i really want to know how i can change the level cap of the server from tolrok (about what tolrok said about changing the level cap i don't understand it... If you could explain?) I also have downloaded olly, but i really have no idea about what pointers you are talking about. Anyway, I am quiet a beginner in this stuff, I just managed to run my server and got a friend of mine playing on it. So there are still somethings I want to know. Are you willing to help? Mabye adjust your tutorial so I understand it?
 
Last edited:
Where do i have to create an empty section?
Due to missing images, I'll give a quick illustration:-
R4mxx - level Adding in client - RaGEZONE Forums
I also have downloaded olly, but i really have no idea about what pointers you are talking about.
That is a massive pitfall, and utterly beyond the scope of these forums.
Mabye adjust your tutorial so I understand it?
Pre-requisites of any understanding:-
  • Must already be familiar with "digital principals" as they pertain to CPU machine-code, binary memory devices and their addressing mechanisms.
  • Basic understanding of i386 instruction set.
  • Understanding of standard programming practices regarding stack frames, memory maps, pointer referencing and dereferencing... at least in a language like C. (in this case, not C++, which hides such activity behind objects)

These things are basic, basic, basic level understanding of a computer. If you don't really understand this, you aren't really in control of your computer. That's fine, I don't understand internal combustion engines, and I'm happy that if my car breaks down I take it to the Auto-repair guy. What you want to do here (change the level cap) is like turning a Skoda into a Hotrod, so I hope you can repair a factory model that was written off. :wink:

Those basic understandings are beyond the scope of RaGEZONE. Some examples may be found in the Coders Paradise, but not enough to get you to the level of understanding needed to follow the most in-depth guide to changing PTs level-cap. You need to know this already! If you don't know it, you either need to go elsewhere to study it, or just accept what you are given here by others who already do.

That may sound harsh, but it's not meant to. Honestly if I hadn't studied this at school and college I wouldn't know where to start. (and these are not common classes that everyone takes, this is private study outside lessons or optional evening / weekend classes and such)

I could give you 2 or 3 books to spend a year working through exercises until you understand this, and can think of no more succinct way of imparting that information. I'm certainly not going to post 2 or 3 books on basic digital principals here on RaGEZONE, as that would be breaking our rules of relevancy. There are websites which dedicate themselves to such things, and they are great when you are working through the exercises in such a book... but it's not our place to do that. It is our place to help people apply that knowledge to specific game servers and their clients. But we have to assume that they already have the basic knowledge / skill.

What to look for elsewhere...?
If you understand high level programming of some kind (C[++/#], Pascal, Basic, even php) then imagine your entire memory is an array of bytes. Some of those bytes are your code, and some are data. They could be pictures, numbers, text, shapes, absolutely anything. That's how general purpose a computers memory is.

Map your memory:-
Code:
+--------+----------------------------------+
| +40000 |            Stack Space           |
+--------+----------------------------------+
| +30000 |            Variables             |
+--------+----------------------------------+
| +20000 |            Constants             |
+--------+----------------------------------+
| +10000 |              Code                |
+--------+----------------------------------+
|0-10000 |            ROM / BIOS            |
+--------+----------------------------------+
Each variable in your high level program has a name, right? Machine code doesn't give names to variables, just addresses laid out in your map. So each variable name is mapped to an address. An array variable, like the experience table, is lots of variables with the same name, so it actually has lots of addresses for different array elements.

If your array is "Array()" and you access the tenth element by "Array(10)" then you can set X to 10 and access the 10th element by "Array(X)". Now you are referencing an offset to the array by a variable. It is a "pointer" to an Array element, but it's also a pointer offset, because "Array()" is actually a pointer.

If you create a structure which contains an array, you are referencing a pointer to a pointer. Then X becomes and offset from a pointer to a pointer. If you wrap that structure in another structure, a pointer to a pointer to a pointer. As you move into object orientation the levels of this "abstraction" become deeper, and overhead at the machine code level gets greater and greater. It's wasteful, but makes the high level programmers job much easier, the code clearer and reduces bugs and time spent debugging. Until you have to debug without the source. XD

Compilers will try to "optimize" some of this waste away, which actually makes the machine code look even messier, and harder to trace and debug.

Fortunately, most of Priston Tale is written in C style (all be it with a C++ compiler) and there are very few layers of abstraction. There is no abstraction to the experience table, and it is literally treated as an array.

However, there are offsets within the array which are kept, and may need to be taken care of. For example, the Job-Change levels are "special" levels, and there will be offsets to them in the code.
 
Last edited:
Holy ****, I guess I need to study some more than. I will look into the experience table. I now play with the solution to use the server kpt 1977 (which allows max level cap of 120) and the client of Tolrok. Now and then i switch to the server of tolrok, hunt with a lvl 100 kronos and bring them over to the other server. This way i have the new items (although I cannot go into mine).
or just accept what you are given here by others who already do.
I suppose you or someone else already fixed this problem in the server of tolrok? I will of course look myself first, but it would be nice if someone could post it somewhere. Anyway thank you for the bobsobol (i get the pointer thing now).
 
Items are in a more complex table than experience. Each element in the table is a struct, and the array is broken down into groups of similar items. The offsets which say "the following items are all Axes" then "the following items are all Swords" etc are embedded in the code, and can be quite tricky to dig out, and find all of them. :(:

You can make basic "drop item" files for anything you like... but there is no guarantee that it will work as it should, if it isn't included in this table inside the two executables.
 
Back