Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

Reducing the EXP Rate Below 1x.

Joined
Jan 9, 2009
Messages
29
Reaction score
1
Greetings All,

It's been awhile since I've posted here, but I'm up to my old Maplestory server projects again. Willing to learn and jump right in.
Quick question. I've got a few project ideas floating around in my head. I've been playing around with modern Maplestory the past few weeks. It's fun, but certainly not my preference. The game I find is exetremly... Well, there is no other way to put it... Easy. It seems that you are given everything in the beginning, which is fine, if it wasn't for the fact that you level up unusually fast. At least, all the way to 200. I would love to REDUCE the current standard EXP rate below 1x, slowing progression down to a point that is comparable to Pre-Big Bang levels.

The question is, is it even possible to do that? Obviously we know that multiplying an EXP rate is easily done, but what about dividing that EXP rate? Or, better yet, adjusting the amount of EXP needed to level BACK to Pre BB levels. I'm not even going to attempt setting up the server itself if one of these isn't even a possibility. Let me know.
Thanks guys.
 
Last edited:
Joined
Oct 25, 2008
Messages
1,372
Reaction score
604
Convert the EXP rate in your source to be a percent. In other words, "1" would be equivalent to "100". Then in this new system if you wanted "2x" you'd set the value to "200". Likewise if you wanted "0.5x", you'd just set it to "50".

This isn't the only way to do this, just the way I would do it.
 
Upvote 0
Joined
Jan 9, 2009
Messages
29
Reaction score
1
Convert the EXP rate in your source to be a percent. In other words, "1" would be equivalent to "100". Then in this new system if you wanted "2x" you'd set the value to "200". Likewise if you wanted "0.5x", you'd just set it to "50".

This isn't the only way to do this, just the way I would do it.
Thanks for the reply!:D: I see. Very interesting. Yeah, The past few days I tried to do some experiments on my end with an old V.75 server I had set up. I'm super eager to learn all of the nitty gritty of exactly HOW this stuff works. It's like a giant puzzle for me. I went into the world.properties file and attempted to change the EXP multiplier below 1. So, I tried things like 0.5, .5, etc. The result was nothing lol. All of the EXP just stayed at 1x. So, that brings me to a question. You mention converting the EXP rate in the source to be a percent. But exactly HOW would one do that?

This brings me probably to a more pertinent point. Instead of playing around with EXP rates, it would probably be wiser to just change the EXP curve to level up. That is changing the amount of EXP needed for each level. Is that a possibility? And if so... Exactly how? You see, from my point of view, I look at the source and the plethora of files within it, and I can't help but wonder "Well... Now what?". I'm not even sure what file I would be looking for and how to change it. To the uninitiated, it's a daunting task. :hmmmm2:
 
Upvote 0
Custom Title Activated
Member
Joined
Mar 17, 2009
Messages
1,911
Reaction score
538
Thanks for the reply!:D: I see. Very interesting. Yeah, The past few days I tried to do some experiments on my end with an old V.75 server I had set up. I'm super eager to learn all of the nitty gritty of exactly HOW this stuff works. It's like a giant puzzle for me. I went into the world.properties file and attempted to change the EXP multiplier below 1. So, I tried things like 0.5, .5, etc. The result was nothing lol. All of the EXP just stayed at 1x. So, that brings me to a question. You mention converting the EXP rate in the source to be a percent. But exactly HOW would one do that?

This brings me probably to a more pertinent point. Instead of playing around with EXP rates, it would probably be wiser to just change the EXP curve to level up. That is changing the amount of EXP needed for each level. Is that a possibility? And if so... Exactly how? You see, from my point of view, I look at the source and the plethora of files within it, and I can't help but wonder "Well... Now what?". I'm not even sure what file I would be looking for and how to change it. To the uninitiated, it's a daunting task. :hmmmm2:

The best way to start, would be to look for which function / class is pulling the EXP rate value from the configuration file. For example there may be class that pulls the EXP rate from the config file and saves it as a variable “SERVER_EXP_RATE”

Then, there may be a function called Get_Exp_Rate which returns that variable. Do a search on the source for that function and you may find a link to MapleMonster or something similar. You would dig further down to look for a function called “KillMonster” and look where it awards the exp. It could look something like getPlayer().gainEXP(monster.exp * server.GET_EXP_RATE()); but probably rounding up to the closest ‘1’

I haven’t looked at a Maple source in a long time, but this should be enough info to start.
 
Upvote 0
Joined
Oct 25, 2008
Messages
1,372
Reaction score
604
Thanks for the reply!:D: I see. Very interesting. Yeah, The past few days I tried to do some experiments on my end with an old V.75 server I had set up. I'm super eager to learn all of the nitty gritty of exactly HOW this stuff works. It's like a giant puzzle for me. I went into the world.properties file and attempted to change the EXP multiplier below 1. So, I tried things like 0.5, .5, etc. The result was nothing lol. All of the EXP just stayed at 1x. So, that brings me to a question. You mention converting the EXP rate in the source to be a percent. But exactly HOW would one do that?

Sparrow gave enough info to start. Don't forget, the best way to learn is to experiment. Literally nothing bad is going to happen if you don't get it to work on the first try. Mess with the math, compile, get in-game, and kill a slime and see what EXP you get. If you try and then go in-game, pretty much only one of two things will happen, you'll either get 100x the normal exp of a slime, or you'll get 1x, meaning your math worked.
 
Upvote 0
Joined
Jan 9, 2009
Messages
29
Reaction score
1
Sparrow gave enough info to start. Don't forget, the best way to learn is to experiment. Literally nothing bad is going to happen if you don't get it to work on the first try. Mess with the math, compile, get in-game, and kill a slime and see what EXP you get. If you try and then go in-game, pretty much only one of two things will happen, you'll either get 100x the normal exp of a slime, or you'll get 1x, meaning your math worked.
The best way to start, would be to look for which function / class is pulling the EXP rate value from the configuration file. For example there may be class that pulls the EXP rate from the config file and saves it as a variable “SERVER_EXP_RATE”

Then, there may be a function called Get_Exp_Rate which returns that variable. Do a search on the source for that function and you may find a link to MapleMonster or something similar. You would dig further down to look for a function called “KillMonster” and look where it awards the exp. It could look something like getPlayer().gainEXP(monster.exp * server.GET_EXP_RATE()); but probably rounding up to the closest ‘1’

I haven’t looked at a Maple source in a long time, but this should be enough info to start.

Thank you for the replies gentlemen. Really great stuff! I've been digging through the source and have found some really interesting stuff. My guinea pig has been version 75 OdinTeh Source. Far from modern, but a nice practice run. Interestingly enough as I dug through I found some gold. First off, I found exprate.js, which is definitely related to that originally question of changing an EXP rate below 1.

However, I also found something that interests me even more: EXPTable.Java
Yep, the EXP table itself, listing all of the required EXP needed for each level. Take a look gentlemen:
Code:
package net.sf.odinms.client;

public class ExpTable {

	private static int[] exp = { 0, 15, 34, 57, 92, 135, 372, 560, 840, 1242, 1143, 1573, 2143, 2799, 3639, 4699, 5893,
		7359, 9143, 11119, 13477, 16267, 19319, 22879, 27007, 31477, 36599, 42443, 48719, 55812, 76560, 86784, 98208, 110932,
		124432, 139372, 155865, 173280, 192400, 213345, 235372, 259392, 285532, 312928, 342624, 374760, 408336, 444544, 483532,
		524160, 567772, 598886, 631704, 666321, 702836, 741351, 781976, 824828, 870028, 917625, 967995, 1021040, 1076993, 1136012,
		1198265, 1263930, 1333193, 1406252, 1483314, 1564600, 1650340, 1740778, 1836172, 1936794, 2042930, 2154882, 2272969,
		2397528, 2528912, 2667496, 2813674, 2967863, 3130501, 3302052, 3483004, 3673872, 3875200, 4087561, 4311559, 4547832,
		4797052, 5059931, 5337215, 5629694, 5938201, 6263614, 6606860, 6968915, 7350811, 7753635, 8178534, 8626717, 9099461,
		9598112, 10124088, 10678888, 11264090, 11881362, 12532460, 13219239, 13943652, 14707764, 15513749, 16363902, 17260644,
		18206527, 19204244, 20256636, 21366700, 22537594, 23772654, 25075395, 26449526, 27898960, 29427822, 31040466, 32741483,
		34535716, 36428272, 38424541, 40530206, 42751261, 45094030, 47565183, 50171755, 52921167, 55821246, 58880250, 62106888,
		65510344, 69100311, 72887008, 76881216, 81094306, 85594273, 90225770, 95170142, 100385465, 105886588, 111689173, 117809740,
		124265713, 131075474, 138258409, 145834970, 153826726, 162256430, 171148082, 180526996, 190419876, 200854884, 211861732,
		223471711, 235718006, 248635352, 262260569, 276632448, 291791906, 307782102, 324648561, 342439302, 361204976, 380999008,
		401877753, 423900654, 447130409, 471633156, 497478652, 524740482, 553496260, 583827855, 615821621, 649568646, 685165008,
		722712050, 762316670, 804091623, 848155844, 894634784, 943660769, 995373379, 1049919840, 1107455447, 1168144005, 1232158296,
		1299680571, 1370903066, 1446028554, 1525246918, 1608855764
	};

	private static int[] closeness = {0, 1, 3, 6, 14, 31, 60, 108, 181, 287, 434, 632, 891, 1224, 1642, 2161, 2793,
		3557, 4467, 5542, 6801, 8263, 9950, 11882, 14084, 16578, 19391, 22547, 26074, 30000
	};

	public static int getExpNeededForLevel(int level) {
		return exp[level - 1];
	}

	public static int getClosenessNeededForLevel(int level) {
		return closeness[level - 1];
	}
}

It was easier to find than I anticipated, and I now have a new found respect for this little Odin source stashed away on my computer. "Is it really as easy as just changing the number values listed there?" I thought to myself. Well, there was only one way to find out. For kicks I changed the amount of EXP needed to get from level 1 to 2 to 1000 EXP. I saved the file, started up the server and hopped on to a freshly rolled character. To my dismay, it didn't work. It still only required 15 EXP.

I looked around the source some more, and found a duplicate of the file itself: ExpTable.Java.Svn-Base.
It would not allow me to edit it, so I assumed it mimics the original file in someway. The problem was it wasn't mimicking the changes I made. "What would happen if I just removed this guy from the folder itself?"
I threw it on my desktop, and started the server again, hopped into game. No go, no change.

I sat there at my desk and stared at the computer screen for awhile lost in thought. "Why won't it change?... Maybe it's because I set the number too high? Maybe it needs to be lower than the experience for the subsequent level?" I decided on one last ditch effort before returning here. I opened the file and reduced the level from 1000 to 10. Something lower than what it originally was. I saved the file, started up the server, hopped into game and! ....... Nothing. No change.

I'm stumped guys. Any idea why the EXP table won't change?
 
Upvote 0
Custom Title Activated
Member
Joined
Mar 17, 2009
Messages
1,911
Reaction score
538
Thank you for the replies gentlemen. Really great stuff! I've been digging through the source and have found some really interesting stuff. My guinea pig has been version 75 OdinTeh Source. Far from modern, but a nice practice run. Interestingly enough as I dug through I found some gold. First off, I found exprate.js, which is definitely related to that originally question of changing an EXP rate below 1.

However, I also found something that interests me even more: EXPTable.Java
Yep, the EXP table itself, listing all of the required EXP needed for each level. Take a look gentlemen:
Code:
package net.sf.odinms.client;

public class ExpTable {

	private static int[] exp = { 0, 15, 34, 57, 92, 135, 372, 560, 840, 1242, 1143, 1573, 2143, 2799, 3639, 4699, 5893,
		7359, 9143, 11119, 13477, 16267, 19319, 22879, 27007, 31477, 36599, 42443, 48719, 55812, 76560, 86784, 98208, 110932,
		124432, 139372, 155865, 173280, 192400, 213345, 235372, 259392, 285532, 312928, 342624, 374760, 408336, 444544, 483532,
		524160, 567772, 598886, 631704, 666321, 702836, 741351, 781976, 824828, 870028, 917625, 967995, 1021040, 1076993, 1136012,
		1198265, 1263930, 1333193, 1406252, 1483314, 1564600, 1650340, 1740778, 1836172, 1936794, 2042930, 2154882, 2272969,
		2397528, 2528912, 2667496, 2813674, 2967863, 3130501, 3302052, 3483004, 3673872, 3875200, 4087561, 4311559, 4547832,
		4797052, 5059931, 5337215, 5629694, 5938201, 6263614, 6606860, 6968915, 7350811, 7753635, 8178534, 8626717, 9099461,
		9598112, 10124088, 10678888, 11264090, 11881362, 12532460, 13219239, 13943652, 14707764, 15513749, 16363902, 17260644,
		18206527, 19204244, 20256636, 21366700, 22537594, 23772654, 25075395, 26449526, 27898960, 29427822, 31040466, 32741483,
		34535716, 36428272, 38424541, 40530206, 42751261, 45094030, 47565183, 50171755, 52921167, 55821246, 58880250, 62106888,
		65510344, 69100311, 72887008, 76881216, 81094306, 85594273, 90225770, 95170142, 100385465, 105886588, 111689173, 117809740,
		124265713, 131075474, 138258409, 145834970, 153826726, 162256430, 171148082, 180526996, 190419876, 200854884, 211861732,
		223471711, 235718006, 248635352, 262260569, 276632448, 291791906, 307782102, 324648561, 342439302, 361204976, 380999008,
		401877753, 423900654, 447130409, 471633156, 497478652, 524740482, 553496260, 583827855, 615821621, 649568646, 685165008,
		722712050, 762316670, 804091623, 848155844, 894634784, 943660769, 995373379, 1049919840, 1107455447, 1168144005, 1232158296,
		1299680571, 1370903066, 1446028554, 1525246918, 1608855764
	};

	private static int[] closeness = {0, 1, 3, 6, 14, 31, 60, 108, 181, 287, 434, 632, 891, 1224, 1642, 2161, 2793,
		3557, 4467, 5542, 6801, 8263, 9950, 11882, 14084, 16578, 19391, 22547, 26074, 30000
	};

	public static int getExpNeededForLevel(int level) {
		return exp[level - 1];
	}

	public static int getClosenessNeededForLevel(int level) {
		return closeness[level - 1];
	}
}

It was easier to find than I anticipated, and I now have a new found respect for this little Odin source stashed away on my computer. "Is it really as easy as just changing the number values listed there?" I thought to myself. Well, there was only one way to find out. For kicks I changed the amount of EXP needed to get from level 1 to 2 to 1000 EXP. I saved the file, started up the server and hopped on to a freshly rolled character. To my dismay, it didn't work. It still only required 15 EXP.

I looked around the source some more, and found a duplicate of the file itself: ExpTable.Java.Svn-Base.
It would not allow me to edit it, so I assumed it mimics the original file in someway. The problem was it wasn't mimicking the changes I made. "What would happen if I just removed this guy from the folder itself?"
I threw it on my desktop, and started the server again, hopped into game. No go, no change.

I sat there at my desk and stared at the computer screen for awhile lost in thought. "Why won't it change?... Maybe it's because I set the number too high? Maybe it needs to be lower than the experience for the subsequent level?" I decided on one last ditch effort before returning here. I opened the file and reduced the level from 1000 to 10. Something lower than what it originally was. I saved the file, started up the server, hopped into game and! ....... Nothing. No change.

I'm stumped guys. Any idea why the EXP table won't change?

Just confirming that you've imported the source into an IDE and you have actually compiled it?

Old but standard guide should help: http://forum.ragezone.com/f428/tools-compiling-netbeans-odin-406097/
 
Upvote 0
Joined
Nov 27, 2009
Messages
442
Reaction score
230

ExpTable.java is just a class with constants on how much Exp is needed for the next level. This is used in the gainExp method (forgot the exact name) in MapleCharacter to check if the Char has enough Exp needed to level up and not overflow. As far as editing how much Exp is needed per level, that's related client side, someone released it here on rz before. There's a listener method in MapleMonster or MapleMap i dont remember for when a monster is killed, that's probably where exp distribution is calculated.

edit:
http://forum.ragezone.com/f921/v83-custom-exp-table-dll-1171474/
 
Upvote 0
Joined
Jan 9, 2009
Messages
29
Reaction score
1
Just confirming that you've imported the source into an IDE and you have actually compiled it?

Old but standard guide should help: http://forum.ragezone.com/f428/tools-compiling-netbeans-odin-406097/

No, I actually had no idea I needed to do that. I figured since I was already playing around with different world settings without having to compile anything it wasn't needed. Am I going to need to compile anytime I mess around with the files within the source? Thanks for the link! I followed those instructions but I'm getting a strange error. Just 1 error, but sadly it is making the build fail. I posted my problem here.

ExpTable.java is just a class with constants on how much Exp is needed for the next level. This is used in the gainExp method (forgot the exact name) in MapleCharacter to check if the Char has enough Exp needed to level up and not overflow. As far as editing how much Exp is needed per level, that's related client side, someone released it here on rz before. There's a listener method in MapleMonster or MapleMap i dont remember for when a monster is killed, that's probably where exp distribution is calculated.

edit:
http://forum.ragezone.com/f921/v83-c...e-dll-1171474/

Wow this is awesome! Thank you for that info. I'll follow that link and will update soon with results.:thumbup:
 
Upvote 0
Back
Top