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!

Updating v117 to v118 for learning

Status
Not open for further replies.
(O_o(o_O(O_O)o_O)O_o)
Loyal Member
Joined
Apr 9, 2009
Messages
1,088
Reaction score
322
Updating v117.2 to v144.3 for learning

Hi, soo, most of you won't know me and that's fine. Underneath is a little story about me, if you're interested:
I've been on RageZone for years now, yet I never released anything. This has to do with the fact that when I came here the first time at age 13, I didn't know anything about coding/ scripting and just wanted to leech a source and get myself a server. Which I did.
Though the years Ive learned quite a lot from this community and for that I am thankful. I can now make npc's, create functions in the source, create commands,...
Anyways, I think it's time for me to learn some more.

My goal: Update the source to in-game. Fix the Skills that need fixing, check if anything needs immediate attention before it's usable, release.

(and hopefully change myself into a contributor instead of a leecher.)
I will be updating chunkarama's Development v117.2 source to v144.3 Why this source? Click the spoiler..
I was doubting between AngelSpirit's MapleCrystal source, our chunkarama's development source. I chose the latter, since I feel like it is more complete game-play wise. To start it has fully working PQ's and working android movement.
Because of things like that I feel it will have more use for those who would be interested in a v144 source. (mainly leechers)



Download GMS v144.3 with hackshield bypass:

Download GMS v144(.3) Wz XML files:

To be clear: I have never updated before, I'm far from a pro and have trouble getting even simple things to work, so do NOT expect me to post updates daily or soon. It will take a lot of time googling, browsing ragezone, and asking people for help before i get this to work completely. I just hope some people will support me, and that some people will like this. My ultimate goal would be for this to be the most complete v144 source publicly available.

My progress is available publicly, but remember to thank the right people when this is done. At this point you can thank:
- Chunkarama (No srsly, when im done it will still be ~99% his work)
- Chunkarama (Yes, again, he's helping me a lot!~ it's inspiring!)
- The original OdinMS team
- Heidi for IDA guide
- SuperLol for packet update guide
- sunnyboy for helping me determine getAuth's structure. (get it now, also know it was never a problem)
- NPC for his 'simplified' guide to understanding packets.

I will barely update this thread, to keep it clean. You can see my improvements on github.

If you use any of this, and happen to update something, please share it, so it can be implemented and be ready to use for the next person.
 
Last edited:
Custom Title Activated
Loyal Member
Joined
Mar 14, 2010
Messages
5,363
Reaction score
1,343
An old v118.3 getauth that works just incase urs doesn't

Code:
    public static final byte[] getAuthSuccessRequest(final MapleClient client) {
        final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();

        mplew.writeShort(SendPacketOpcode.LOGIN_STATUS.getValue());
        mplew.writeZeroBytes(6);
        mplew.writeInt(client.getAccID());
        mplew.write(client.getGender());
        mplew.write(client.isGm() ? 1 : 0);
        mplew.writeShort(2);
        mplew.write(0);// more admin stuff
        mplew.writeMapleAsciiString(client.getAccountName());
        mplew.writeInt(3);
        mplew.writeZeroBytes(6);
        mplew.writeLong(PacketHelper.getTime(System.currentTimeMillis())); 
        mplew.writeInt(8); 
	mplew.write(1);
	mplew.write(1);
	mplew.write(1); 
        mplew.write(1); //1 = pin disabled, 0 = pin enabled
        mplew.write(client.getSecondPassword() == null ? 0 : (client.getSecondPassword().equals("") ? 2 : 1));
        mplew.writeInt(0);
        mplew.writeInt(0);
        return mplew.getPacket();
    }
 
(O_o(o_O(O_O)o_O)O_o)
Loyal Member
Joined
Apr 9, 2009
Messages
1,088
Reaction score
322
An old v118.3 getauth that works just incase urs doesn't

Thank you so much for this!

With this I've been able to determine it was in fact not getauth that was causing the trouble, so im trying to read the headers of the packet error in the logs now to see what is causing it. So, thank you very, very much for helping me move forward! :D

Oh, and chunkarama you may now say I told you so :p
 
C# developer
Joined
Dec 4, 2013
Messages
656
Reaction score
80
Thank you so much for this!

With this I've been able to determine it was in fact not getauth that was causing the trouble, so im trying to read the headers of the packet error in the logs now to see what is causing it. So, thank you very, very much for helping me move forward! :D

Oh, and @chunkarama you may now say I told you so :p

The localhost is broken. what needs to get past the login is to simply code your own redirector and send the login packets to get past that screen.
 
(O_o(o_O(O_O)o_O)O_o)
Loyal Member
Joined
Apr 9, 2009
Messages
1,088
Reaction score
322
The localhost is broken. what needs to get past the login is to simply code your own redirector and send the login packets to get past that screen.

Oh, that would actually explain a lot. Fortunally, building a redirector is not a problem, will post if that solves the issues as soon as i get home.

-- edit --

Okies, I think that I got that working now. Had problems with getting my redirector to function properly on localhost, found another client online.

I'm now finally getting consistent packet error's in my logs. So I think it 'works' now.

Getting this error:
15 00 0B 00 70 6F 77 33 72 72 61 6E 39 65 72 0A 00 73 61 6E 61 6E 64 72 65 61 73
12 4D B9 D5 3B 00 39 30 30 32 32 42 30 33 2D 33 34 30 34 2D 33 34 30 35 2D 42 4
2 30 36 2D 32 45 30 37 30 30 30 38 30 30 30 39 5F 54 6F 20 62 65 20 66 69 6C 6C
65 64 20 62 79 20 4F 2E 45 2E 4D 2E 14 00 20 20 20 20 20 20 20 20 20 20 20 20 57
31 56 30 5A 51 38 52 00 00 00 00 02 00 00 00 00 00 00 00
Now if I understood the packet guides I have been reading lately correctly, that would be a problem with 0x15 = LOGIN_PASSWORD. So I am looking into that right now.

Then again, could be that it still doesnt work, and that im still going at this the wrong way entirely. Hope not though :thumbup:

-- edit --
chunkarama has helped me (can't thank him enough, this guy's amazing!) determine that it's probably still the client. (PING - PONG wasn't even taking place properly) So I guess I have a second objective:

Learning how to create a redirector, that works on localhost, to be sure it's no longer the client and just packet problems.

(op's are still fine, they are actually quite complete, more than that one other v118 source that is publicly available. Only like 4 op's more though. xD)
 
Last edited:
Custom Title Activated
Loyal Member
Joined
Jan 18, 2010
Messages
3,109
Reaction score
1,139
Oh, that would actually explain a lot. Fortunally, building a redirector is not a problem, will post if that solves the issues as soon as i get home.

-- edit --

Okies, I think that I got that working now. Had problems with getting my redirector to function properly on localhost, found another client online.

I'm now finally getting consistent packet error's in my logs. So I think it 'works' now.

Getting this error:
15 00 0B 00 70 6F 77 33 72 72 61 6E 39 65 72 0A 00 73 61 6E 61 6E 64 72 65 61 73
12 4D B9 D5 3B 00 39 30 30 32 32 42 30 33 2D 33 34 30 34 2D 33 34 30 35 2D 42 4
2 30 36 2D 32 45 30 37 30 30 30 38 30 30 30 39 5F 54 6F 20 62 65 20 66 69 6C 6C
65 64 20 62 79 20 4F 2E 45 2E 4D 2E 14 00 20 20 20 20 20 20 20 20 20 20 20 20 57
31 56 30 5A 51 38 52 00 00 00 00 02 00 00 00 00 00 00 00
Now if I understood the packet guides I have been reading lately correctly, that would be a problem with 0x15 = LOGIN_PASSWORD. So I am looking into that right now.

Then again, could be that it still doesnt work, and that im still going at this the wrong way entirely. Hope not though :thumbup:

LoginPassword is 0x15 on v118.3, yes. Just update your recvops and it should work. Also, I think most of the opcodes are like +2 or +3 from v117 if I remember correctly.
 
Newbie Spellweaver
Joined
Jul 27, 2012
Messages
13
Reaction score
0
Hey, I was wondering, how are you getting the sendops? Sorry for going offtopic, but I wanted to know,
 
Newbie Spellweaver
Joined
Jul 27, 2012
Messages
13
Reaction score
0
there's a few ways. most sendops have a pattern from v117->v118 (common +1, +2, or +3), plus you have the DeviousMS source which had a lot of opcodes updated, and if you still can't find it, IDA ftw.

That is actually what I did because it seemed like a logical thing to do and it actually fixed some of the wrong op codes. Now I am stuck because I dont know how to get opcodes via IDA.
 
(O_o(o_O(O_O)o_O)O_o)
Loyal Member
Joined
Apr 9, 2009
Messages
1,088
Reaction score
322
That is actually what I did because it seemed like a logical thing to do and it actually fixed some of the wrong op codes. Now I am stuck because I dont know how to get opcodes via IDA.

Which ones do you need? I mainly used the pattern, most login packets are +1/ +2, and later on in the list most that changed are +7 (if i remember correctly.).
If you really can't find it you should take a look at the DeviousMS source, it's quite complete.
 
Newbie Spellweaver
Joined
Jul 27, 2012
Messages
13
Reaction score
0
I am updating the HelisiumDev v148.1 to v148.3 so I am not sure look at deviousMs source would help me that much. I just need to figure out how to use IDA to get the op codes.
 
(O_o(o_O(O_O)o_O)O_o)
Loyal Member
Joined
Apr 9, 2009
Messages
1,088
Reaction score
322
Updated the thread to day 6. Learning a lot with nearly invisible progress to outsiders :p. Just a whole lot of failing, teaching me how to do things right. I actually think I can do daily updates. Since my schedule is reaaaaally free. Hoping to be in-game by the end of the week. I wanna start updating skills xD.

Won't rest till this has basically all skills working!

Okay maybe rest a bit. And im guessing more than wanted skills will be hacky-fixed. Ah well. Drifting off. Back to trying to get a redirector to work!

(Also, I have allready determined what will be my next project, and I think a lot of people will like it. Also have a partner for that project. Won't spoil it till this one is done though.)
 
(O_o(o_O(O_O)o_O)O_o)
Loyal Member
Joined
Apr 9, 2009
Messages
1,088
Reaction score
322
I am updating the HelisiumDev v148.1 to v148.3 so I am not sure look at deviousMs source would help me that much. I just need to figure out how to use IDA to get the op codes.

I think i figured out how to get what you need. (If i'm wrong, please correct me, it's just a learning process)
Big chance you allready figured it out too, but still, if not, this might help xD

If you get into the IDA you can find the packet's structure. You can either find it based on the Header (if the basic things are named), or probably by comparing it with one of the leaks (didnt try that yet). When you find the structure, you also find the send opcode, which you can then both put into the server. (if you find the SUB_ in which the packet is defined, you can go back to the ....:OnPacket or w/e to see which case holds that SUB_ which gets you the sendOps header)

As for the recvOPS. You can get their headers from launching the game. After you send a packet the client will send the response packet, if you log that packet you can find the correct, updated recvop header. (that why you first need the send from IDA)
 
Newbie Spellweaver
Joined
Jul 27, 2012
Messages
13
Reaction score
0
I think i figured out how to get what you need. (If i'm wrong, please correct me, it's just a learning process)
Big chance you allready figured it out too, but still, if not, this might help xD

If you get into the IDA you can find the packet's structure. You can either find it based on the Header (if the basic things are named), or probably by comparing it with one of the leaks (didnt try that yet). When you find the structure, you also find the send opcode, which you can then both put into the server. (if you find the SUB_ in which the packet is defined, you can go back to the ....:OnPacket or w/e to see which case holds that SUB_ which gets you the sendOps header)

As for the recvOPS. You can get their headers from launching the game. After you send a packet the client will send the response packet, if you log that packet you can find the correct, updated recvop header. (that why you first need the send from IDA)
Where would I look? There are like a couple of named functions like CField, CLogin, etc.
 
Custom Title Activated
Loyal Member
Joined
Jan 18, 2010
Messages
3,109
Reaction score
1,139
I think i figured out how to get what you need. (If i'm wrong, please correct me, it's just a learning process)
Big chance you allready figured it out too, but still, if not, this might help xD

If you get into the IDA you can find the packet's structure. You can either find it based on the Header (if the basic things are named), or probably by comparing it with one of the leaks (didnt try that yet). When you find the structure, you also find the send opcode, which you can then both put into the server. (if you find the SUB_ in which the packet is defined, you can go back to the ....:OnPacket or w/e to see which case holds that SUB_ which gets you the sendOps header)

As for the recvOPS. You can get their headers from launching the game. After you send a packet the client will send the response packet, if you log that packet you can find the correct, updated recvop header. (that why you first need the send from IDA)

that's the general idea basically, yeah. Most people here reference the v95 or v97 leaked idb (forgot the exact version) for the names nexon/wizet uses. They also use the kms leaked idb as well. However, you don't need send first to get receive all the time. With handlers, you receive a packet which calls the handler -> you handle it by sending out a packet.

Where would I look? There are like a couple of named functions like CField, CLogin, etc.

Think of it like this:
- CLogin : Your LoginPacket, this is by itself
- CField : The main sub which goes to CNpcPool CUserPool, pretty much every BIG packet sub is in this.
- CWvsContext : Well, this is for the most part notices and messages I'd say.
 
Status
Not open for further replies.
Back
Top