I have just read my code and there is a list what you have to do:
1. Connect to world server (79.110.84.75:4004 in PL).
2. Send NoS0575 packet.
e.g.
NoS0575 9419207 testowyuser B109F3BBBC244EB82441917ED06D618B9008DD09B3BEFD1B5E 07394C706A8BB980B1D7785E5976EC049B46DF5F1326AF5A2E A6D103FD07C95385FFAB0CACBC86 235ad7ef-23a8-3488-ff97-e9e765a44437 0054CB760.9.3.3103 0 5CA69D7595718A8BACDCA380CAE1B1BC
It means:
NoS0575 %random% Login SHA512password GUID 00+%random%+char(11)+versionofNostaleClientX.exe 0 MD5NostaleClientX+MD5NostaleClient
?Helpful? thread:
If you use Cryless~'s cryptography you have to use Crypto::encryptLoginPacket. Link:
3. Decode response. Use Crypto::decryptLoginPacket.
NsTeST testowyuser 1072 127.0.0.1:4500:7:1.1.S1-Game 127.0.0.1:4501:4:1.2.S1-Game 127.0.0.1:4502:2:1.3.S1-Game
1072 is session ID. After that you have avaliable channels.
4. Choose channel and connect.
5. Send sesson ID. Use Crypto::encryptGamePacket.
In this case: encryptGamePacket("1072",1072,
true);
6. Wait 1 second.
7. Send login: encryptGamePacket("testowyuser",1072,
false);
8. Send password: encryptGamePacket("password",1072,false);
9. Decode response using Crypto::decryptGamePacket
It's list of characters:
clist_start 0
clist 0 charname ...
clist 1 charname2 ...
clist_end
10. Client sends this packets, but probably it's not necessary to send all of them:
c_close 0
f_stash_end
c_close 1
select [character's id from list above]
game_start
lbs 0
npinfo 0
c_close 1
Of course use encryptGamePacket.
11. Send pulse packet every minute (see in packet logger).
I hope it will be helpful.