[Tut] Modifying Odinms

Newbie Spellweaver
Joined
Aug 1, 2008
Messages
94
Reaction score
6
Ok So this is a guide for Pimping Out your server (or if your lazy just download a repack)

Ok for starters you can download a

Or Leifde's (Monster Skills, Multipets, etc)

And


Ok for starters you can edit the Server Message (easy way)

Go into net.sf.odinms.net.channel.ChannelServer.java
Find
Code:
private String serverMessage =
Replace it with
Code:
private String serverMessage;

Next Find
Code:
moreThanOne = Boolean.parseBoolean(props.getProperty("net.sf.odinms.world.morethanone", "false"));
Add Below
Code:
serverMessage = props.getProperty("net.sf.odinms.world.serverMessage");

Ok now find
Code:
mesoRate = Integer.parseInt(props.getProperty("net.sf.odinms.world.meso"));
Add below that
Code:
serverMessage = props.getProperty("net.sf.odinms.world.serverMessage");

Now go into your World.properties and scroll right to the bottom and add
Code:
#change the server message servermessage
net.sf.odinms.world.serverMessage= Easy Server Message!

Next we will change the event notice

Go into net.sf.odinms.tools.MaplePacketCreator.java

Find
Code:
mplew.writeMapleAsciiString("
Add in your Notice Betwenn the "", for example
Code:
mplew.writeMapleAsciiString("Welcome To the Events Notice!");


Now I will teach you how to modify your world and how to add a world

Go into net.sf.odinms.net.login.handler.ServerlistRequestHandler.java

Scroll down a tiny bit you should see this
Code:
public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
		c.getSession().write(MaplePacketCreator.getServerList(0, "Zenith", LoginServer.getInstance().getLoad()));
		//c.getSession().write(MaplePacketCreator.getServerList(1, "Zenith", LoginServer.getInstance().getChannels(), 1200));
		//c.getSession().write(MaplePacketCreator.getServerList(2, "Zenith", LoginServer.getInstance().getChannels(), 1200));
		//c.getSession().write(MaplePacketCreator.getServerList(3, "Zenith", LoginServer.getInstance().getChannels(), 1200));
		c.getSession().write(MaplePacketCreator.getEndOfServerList());

Change the 0 (Scania) to either 1 (Bera), 2 (Broa), 3 (Windia), 4 (Khania), 5 (Bellocan), 6 (Mardia), 7 (Kradia), 8 (Yellonde), 9 (Demethos)

Code:
c.getSession().write(MaplePacketCreator.getServerList([B]0[/B], "Zenith", LoginServer.getInstance().getLoad()));

You can change all of the "Zenith's" to Whatever,
Example:
Code:
"[B]Zenith[/B]", LoginServer.getInstance
Code:
"[B]Test[/B]", LoginServer.getInstance

To add a new world you need to add this beneath the other world
Code:
c.getSession().write(MaplePacketCreator.getServerList(0, "Zenith", LoginServer.getInstance().getLoad()));
  //c.getSession().write(MaplePacketCreator.getServerList(1, "Zenith", LoginServer.getInstance().getChannels(), 1200));
  //c.getSession().write(MaplePacketCreator.getServerList(2, "Zenith", LoginServer.getInstance().getChannels(), 1200));
  //c.getSession().write(MaplePacketCreator.getServerList(3, "Zenith", LoginServer.getInstance().getChannels(), 1200));
  c.getSession().write(MaplePacketCreator.getEndOfServerList());

For Example:
Code:
c.getSession().write(MaplePacketCreator.getServerList(0, "Zenith", LoginServer.getInstance().getLoad()));
  //c.getSession().write(MaplePacketCreator.getServerList(1, "Zenith", LoginServer.getInstance().getChannels(), 1200));
  //c.getSession().write(MaplePacketCreator.getServerList(2, "Zenith", LoginServer.getInstance().getChannels(), 1200));
  //c.getSession().write(MaplePacketCreator.getServerList(3, "Zenith", LoginServer.getInstance().getChannels(), 1200));
  c.getSession().write(MaplePacketCreator.getEndOfServerList());
  c.getSession().write(MaplePacketCreator.getServerList(0, "Zenith", LoginServer.getInstance().getLoad()));
  //c.getSession().write(MaplePacketCreator.getServerList(1, "Zenith", LoginServer.getInstance().getChannels(), 1200));
  //c.getSession().write(MaplePacketCreator.getServerList(2, "Zenith", LoginServer.getInstance().getChannels(), 1200));
  //c.getSession().write(MaplePacketCreator.getServerList(3, "Zenith", LoginServer.getInstance().getChannels(), 1200));
  c.getSession().write(MaplePacketCreator.getEndOfServerList());


Ok This is how to change the level cap, Example: lvl 255

Ok go to net.sf.odinms.client.ExpTable.java
Scroll down until you see this:
Code:
public class ExpTable {
	private static int[] exp = { 0, 15, 34, 57, 92, 135, 372, 560, 840, 1242, 1716, 2360, 3216, 4200, 5460, 7050, 8840,
		11040, 13716, 16680, 20216, 24402, 28980, 34320, 40512, 47216, 54900, 63666, 73080, 83720, 95700, 108480,
		122760, 138666, 155540, 174216, 194832, 216600, 240500, 266682, 294216, 324240, 356916, 391160, 428280, 468450,
		510420, 555680, 604416, 655200, 709716, 748608, 789631, 832902, 878545, 926689, 977471, 1031036, 1087536,
		1147032, 1209994, 1276301, 1346242, 1420016, 1497832, 1579913, 1666492, 1757815, 1854143, 1955750, 2062925,
		2175973, 2295216, 2420993, 2553663, 2693603, 2841212, 2996910, 3161140, 3334370, 3517093, 3709829, 3913127,
		4127566, 4353756, 4592341, 4844001, 5109452, 5389449, 5684790, 5996316, 6324914, 6671519, 7037118, 7422752,
		7829518, 8258575, 8711144, 9188514, 9692044, 10223168, 10783397, 11374327, 11997640, 12655110, 13348610,
		14080113, 14851703, 15665576, 16524049, 17429566, 18384706, 19392187, 20454878, 21575805, 22758159, 24005306,
		25320796, 26708375, 28171993, 29715818, 31344244, 33061908, 34873700, 36784778, 38800583, 40926854, 43169645,
		45535341, 48030677, 50662758, 53439077, 56367538, 59456479, 62714694, 66151459, 69776558, 73600313, 77633610,
		81887931, 86375389, 91108760, 96101520, 101367883, 106992842, 112782213, 118962678, 125481832, 132358236,
		139611467, 147262175, 155332142, 163844343, 172823012, 182293713, 192283408, 202820538, 213935103, 225658746,
		238024845, 251068606, 264827165, 279339639, 294647508, 310794191, 327825712, 345790561, 364739883, 384727628,
		405810702, 428049128, 451506220, 476248760, 502347192, 529875818, 558913012, 589541445, 621848316, 655925603,
		691870326, 729784819, 769777027, 811960808, 856456260, 903390063, 952895838, 1005114529, 1060194805,
		1118293480, 1179575962, 1244216724, 1312399800, 1384319309, 1460180007, 1540197871, 1624600714, 1713628833,
		1807535693, 1906558648, 2011069705, 2121276324 };
Change all of it to this:
Code:
public class ExpTable {
	private static int[] exp = { 0, 15, 34, 57, 92, 135, 372, 560, 840, 1242, 1716, 2360, 3216, 4200, 5460, 7050, 8840,
		11040, 13716, 16680, 20216, 24402, 28980, 34320, 40512, 47216, 54900, 63666, 73080, 83720, 95700, 108480,
		122760, 138666, 155540, 174216, 194832, 216600, 240500, 266682, 294216, 324240, 356916, 391160, 428280, 468450,
		510420, 555680, 604416, 655200, 709716, 748608, 789631, 832902, 878545, 926689, 977471, 1031036, 1087536,
		1147032, 1209994, 1276301, 1346242, 1420016, 1497832, 1579913, 1666492, 1757815, 1854143, 1955750, 2062925,
		2175973, 2295216, 2420993, 2553663, 2693603, 2841212, 2996910, 3161140, 3334370, 3517093, 3709829, 3913127,
		4127566, 4353756, 4592341, 4844001, 5109452, 5389449, 5684790, 5996316, 6324914, 6671519, 7037118, 7422752,
		7829518, 8258575, 8711144, 9188514, 9692044, 10223168, 10783397, 11374327, 11997640, 12655110, 13348610,
		14080113, 14851703, 15665576, 16524049, 17429566, 18384706, 19392187, 20454878, 21575805, 22758159, 24005306,
		25320796, 26708375, 28171993, 29715818, 31344244, 33061908, 34873700, 36784778, 38800583, 40926854, 43169645,
		45535341, 48030677, 50662758, 53439077, 56367538, 59456479, 62714694, 66151459, 69776558, 73600313, 77633610,
		81887931, 86375389, 91108760, 96101520, 101367883, 106992842, 112782213, 118962678, 125481832, 132358236,
		139611467, 147262175, 155332142, 163844343, 172823012, 182293713, 192283408, 202820538, 213935103, 225658746,
		238024845, 251068606, 264827165, 279339639, 294647508, 310794191, 327825712, 345790561, 364739883, 384727628,
		405810702, 428049128, 451506220, 476248760, 502347192, 529875818, 558913012, 589541445, 621848316, 655925603,
		691870326, 729784819, 769777027, 811960808, 856456260, 903390063, 952895838, 1005114529, 1060194805,
		1118293480, 1179575962, 1244216724, 1312399800, 1384319309, 1460180007, 1540197871, 1624600714, 1713628833,
		1807535693, 1906558648, 2011069705, 2121276324, 2121276324, 2121276324, 2121276324, 2121276324, 2121276324,
                2121276324, 2121276324, 2121276324, 2121276324, 2121276324, 2121276324, 2121276324, 2121276324, 2121276324,
                2121276324, 2121276324, 2121276324, 2121276324, 2121276324, 2121276324, 2121276324, 2121276324, 2121276324,
                2121276324, 2121276324, 2121276324, 2121276324, 2121276324, 2121276324, 2121276324, 2121276324, 2121276324,
                2121276324, 2121276324, 2121276324, 2121276324, 2121276324, 2121276324, 2121276324, 2121276324, 2121276324, 
                2121276324, 2121276324, 2121276324, 2121276324, 2121276324, 2121276324, 2121276324, 2121276324, 2121276324};

Now go to net.sf.odinms.client.MapleCharacter.java
Find
Code:
if (getLevel() < 200) { // lv200 is max and has 0 exp required to level
Change it to
Code:
if (getLevel() < 255) { // lv200 is max and has 0 exp required to level

Now find
Code:
while (level < 200 && exp.get() >= ExpTable.getExpNeededForLevel(level + 1)) {
Change it to
Code:
while (level < 255 && getExp() >= ExpTable.getExpNeededForLevel(level + 1)) {

After that find
Code:
if (level == 200) {
And Change it to
Code:
if (level == 255) {

Now go into your database and select "Characters" and under the table "Level" Make it 255


Now I'm going to teach you how to change the AP Cap

Go into net.sf.odinms.net.channel.handler.DistributeAPHandler.java

Look for
Code:
if (c.getPlayer().getStr() >= [B]999[/B]) {
Code:
[B]Change it to[/B] if (c.getPlayer().getStr() >= [B]32767[/B]) {
32767 is the max (I think)

Then Find
Code:
if (c.getPlayer().getDex() >= [B]999[/B]) {
Change it to
Code:
if (c.getPlayer().getDex() >= [B]32767[/B]) {
32767 is the max (I think)

Then Find
Code:
if (c.getPlayer().getInt() >= [B]999[/B]) {
Change it to
Code:
if (c.getPlayer().getInt() >= [B]32767[/B]) {
32767 is the max (I think)

Then Find
Code:
if (c.getPlayer().getLuk() >= [B]999[/B]) {
Change it to
Code:
f (c.getPlayer().getLuk() >= [B]32767[/B]) {
32767 is the max (I think)

Request From: WhiteTigerX, How to add more channels

Open Up your Channel.properties

Say you want 6 channels find
Code:
net.sf.odinms.channel.count=4
Change it to
Code:
net.sf.odinms.channel.count=6

Then find
Code:
net.sf.odinms.channel.0.key=release1
net.sf.odinms.channel.1.key=release2
Add below
Code:
net.sf.odinms.channel.2.key=release3
net.sf.odinms.channel.3.key=release4
net.sf.odinms.channel.4.key=release5
net.sf.odinms.channel.5.key=release6

Then open up MySql and choose the channels table

Add a new row. + 1 to the channelid, select your world probably 0 (Scania), + 1 to the number and then go here and convert release key from your channel.properties.
Code:
net.sf.odinms.channel.0.key=[B]release1[/B]
Once converted to sha1, copy it into your key column in your database. Do this for each channel.

For Example
xXMicrosoftXx - [Tut] Modifying Odinms - RaGEZONE Forums

↓ to
xXMicrosoftXx - [Tut] Modifying Odinms - RaGEZONE Forums


Next go into ChannelConfig in your database

you dont need to do this if you only have one channel, If you already have 4 it should look like this
xXMicrosoftXx - [Tut] Modifying Odinms - RaGEZONE Forums

+ 1 to ChannelConfigId, Go back into channels and copy the ChannelId
xXMicrosoftXx - [Tut] Modifying Odinms - RaGEZONE Forums

Next set the name as
Code:
net.sf.odinms.channel.net.port
and + 1 to the port.
Do this for each channel

For Example - For Six Channels
xXMicrosoftXx - [Tut] Modifying Odinms - RaGEZONE Forums


Note: If you run on a no hamachi server you'll have to forward those channels ports. How port forward

After you have done all of that Compile - How to compile

Hope You Enjoyed My Guide =D
 
Last edited:
Re: [Guide] Modifying Odinms

Really nice guide, this can help the starters wich don't know anything or barely anything about repacks can edit it .

BTW : Could you add more things ?
Like how to get more channels..
 
Re: [Guide] Modifying Odinms

Code:
Exception in thread "main" java.lang.NoClassDefFoundError: net/sf/odinms/net/cha
nnel/ChannelServer
Caused by: java.lang.ClassNotFoundException: net.sf.odinms.net.channel.ChannelSe
rver
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: net.sf.odinms.net.channel.ChannelServer.  Program
 will exit.

C:\Documents and Settings\crodriguez\Desktop\OdinTeh V.55>

ive had this error be4 but i 4got how to fix it any idea?
 
Re: [Guide] Modifying Odinms

i just realized it missing the odinms.jar. i dont know if that has anything to do with it but... yeh...

also wat does the jpcap.jar do ?
 
Re: [Guide] Modifying Odinms

Do you know if we add enough to the experience table if we can go to level 300? Or is there a limit to how data is stored for the level on MapleStory?
 
Re: [Guide] Modifying Odinms

When you add more channels while you got 3 worlds will they all get the same amount of channels ?

Is it neccesary to compile, or can you do without ?
 
Re: [Guide] Modifying Odinms

uhh the odinteh has this error. Its pretty wierd but ill give an example.

lets say i am level 1 fighting a snail it will prob. do 1 damage to me or sumthin but...

when i was lvl 200 or a lvl like 100 or higher a snail does 400+damage to u ._. .... and the higher u go the higher the damage is even if ure fighting a snail -_-

EDIT: ITS DOING THIS FOR ALL MONSTERS....
Also for some reason you can not edit the npc cody no matter wat u do. I tried to add my script to cody but nuthin worked... I even tried to add otha npcs scripts but it didnt work
 
Re: [Guide] Modifying Odinms

Nice Guide

Its very clear :D
 
Back