Hey guys, since I can't solve my login problems >< I decided to share em with you, and maybe some of you will release a source :D
getHello:
on serverhandler:PHP Code:public static MaplePacket getHello(short mapleVersion,byte[] sendIv, byte[] recvIv) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(16);
mplew.writeShort(0x0E);
mplew.writeShort(mapleVersion); // version
mplew.writeMapleAsciiString("3"); // version revision, which is 97.3
mplew.write(recvIv);
mplew.write(sendIv);
mplew.write(8);
return mplew.getPacket();
}
PHP Code:MapleAESOFB sendCypher = new MapleAESOFB(key, ivSend, (short) (0xFFFF - 97));
MapleAESOFB recvCypher = new MapleAESOFB(key, ivRecv, (short) 97);
MapleClient client = new MapleClient(sendCypher, recvCypher, session);
client.setChannel(channel);
session.write(MaplePacketCreator.getHello((short) 97, ivSend, ivRecv));
session.setAttribute(MapleClient.CLIENT_KEY, client);
}
HUGE CREDIT TO FATEJIKI ON SERVERLIST,GETAUTHSUCCES PACKETS !
getAuthSuccess:
PHP Code:public static MaplePacket getAuthSuccess(MapleClient c, String account) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendOpcode.LOGIN_STATUS.getValue());
mplew.writeInt(0);
mplew.writeShort(0);
mplew.writeInt(c.getAccID()); //user id
mplew.write(c.getGender());
mplew.write(c.gmLevel() > 0 ? 1 : 0); //admin byte
mplew.write(0);
mplew.write(0);
mplew.write(0); // v97
mplew.writeMapleAsciiString(account);
mplew.write(0);
mplew.write(0); //isquietbanned
mplew.writeLong(0);
mplew.writeLong(0); //creation time
mplew.writeInt(0);
mplew.write(2);
mplew.write(2);
mplew.writeLong(0); // v97
mplew.writeInt(0);// v97
mplew.write(0);// v97
}
Serverlist:
PHP Code:public static MaplePacket getServerList(int serverId, String serverName, Map<Integer, Integer> channelLoad) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendOpcode.SERVERLIST.getValue());
mplew.write(serverId);
mplew.writeMapleAsciiString(serverName);
mplew.write(ServerConstants.FLAG);
mplew.writeMapleAsciiString(ServerConstants.EVENT_MESSAGE);
mplew.write(0x64); // rate modifier, don't ask O.O!
mplew.write(0x0); // event xp * 2.6 O.O!
mplew.write(0x64); // rate modifier, don't ask O.O!
mplew.write(0x0); // drop rate * 2.6
mplew.write(0x0);
int lastChannel = 1;
Set<Integer> channels = channelLoad.keySet();
for (int i = 30; i > 0; i--) {
if (channels.contains(i)) {
lastChannel = i;
break;
}
}
mplew.write(lastChannel);
int load;
for (int i = 1; i <= lastChannel; i++) {
if (channels.contains(i)) {
load = channelLoad.get(i) * 1200 / ServerConstants.CHANNEL_LOAD; // try this
} else {
load = ServerConstants.CHANNEL_LOAD;
}
mplew.writeMapleAsciiString(serverName + "-" + i);
mplew.writeInt(load);
mplew.write(1);
mplew.writeShort(i - 1);
}
mplew.writeShort(0);
return mplew.getPacket();
}
getCharlist: THANKS TO iAkira :>
RECVOPS:PHP Code:public static MaplePacket getCharList(MapleClient c, int serverId) {
//[0B 00] [00] [03] [F5 01 00 00] 41 6B 69 72 61 52 5A 00 00 00 00 00 00 00 00 25 4E 00 00 69 75 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 19 34 08 61 00 28 00 04 00 04 00 C6 04 00 00 76 04 00 00 C1 00 00 00 C1 00 00 00 00 00 01 00 BD 05 00 00 00 00 00 00 00 00 00 E1 F5 05 03 62 38 00 00 00 00 00 00 25 4E 00 00 00 69 75 00 00 01 5F 4E 0F 00 05 F7 E6 0F 00 06 2F 2D 10 00 07 FF 5C 10 00 0B 1D 01 16 00 31 71 6D 11 00 FF 01 68 4A 0F 00 FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 01 D4 11 01 00 6A 02 00 00 E1 04 04 00 56 FF FF FF 00 3B 04 00 41 6B 69 72 61 52 5A 45 00 00 00 00 00 00 02 33 4E 00 00 4B 75 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 00 00 28 00 07 00 04 00 04 00 7F 00 00 00 7F 00 00 00 46 00 00 00 46 00 00 00 00 00 00 00 CD 00 00 00 00 00 00 00 00 00 00 E1 F5 05 02 F6 1A 00 00 00 00 00 02 33 4E 00 00 00 4B 75 00 00 05 8A DE 0F 00 06 2F 2D 10 00 07 72 5D 10 00 0B 8A DE 13 00 FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FA 61 04 00 41 72 61 6E 4D 61 73 74 65 65 72 7A 00 00 00 25 4E 00 00 AA 75 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0A 34 08 23 00 04 00 04 00 04 00 F5 00 00 00 BC 01 00 00 9B 00 00 00 71 00 00 00 17 00 00 00 F7 00 00 00 00 00 00 00 00 00 74 62 58 08 00 5F 01 00 00 00 00 00 00 25 4E 00 00 00 AA 75 00 00 05 17 DF 0F 00 06 E3 34 10 00 07 75 5D 10 00 0B F0 DD 13 00 31 71 6D 11 00 FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 66 44 02 00 0D 06 00 00 DE AD 09 00 C4 FD FF FF 01 03 00 00 00 00 00 00 00
//[0B 00] [00] [03] [F5 01 00 00] DONE!
//[41 72 61 6E 4D 61 73 74 65 65 72 7A] [00] [00] [00] [25 4E 00 00] [AA 75 00 00] [00 00 00 00 00 00 00 00] [00 00 00 00 00 00 00 00] [00 00 00 00 00 00 00 00]
// [?0A 34 08 23] [?00] [?04 00] [?04 00] [?04 00] F5 00 00 00 BC 01 00 00 9B 00 00 00 71 00 00 00 17 00 00 00 F7 00 00 00 00 00 00 00 00 00 74 62 58 08 00 5F 01 [00 00 00 00] [00] [00] [25 4E 00 00] [00] [AA 75 00 00] 05 17 DF 0F 00 06 E3 34 10 00 07 75 5D 10 00 0B F0 DD 13 00 31 71 6D 11 00 FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 66 44 02 00 0D 06 00 00 DE AD 09 00 C4 FD FF FF [01] [03] [00 00 00 00] [00 00] [00]
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendOpcode.CHARLIST.getValue());// v.97
mplew.write(0);//v.97
List<MapleCharacter> chars = c.loadCharacters(serverId);
mplew.write((byte) chars.size());//v.97
for (MapleCharacter chr : chars) {
addCharEntry(mplew, chr, false);
}
//[01] [03 00 00 00] 00] [00 00] [00]
if (ServerConstants.ENABLE_PIC)
mplew.write(c.getPic() == null || c.getPic().length() == 0 ? 0 : 1);
else
mplew.write(2);
mplew.writeInt(7);//c.getCharacterSlots()
mplew.writeInt(0);
return mplew.getPacket();
}
SENDOPS:PHP Code:PONG = 0x19
LOGIN_PASSWORD = 0x01
GUEST_LOGIN = 0x02
SERVERLIST_REREQUEST = 0x04
CHARLIST_REQUEST = 0x05
SERVERSTATUS_REQUEST = 0x06
SET_GENDER = 0x08
AFTER_LOGIN = 0x09
REGISTER_PIN = 0x0A
SERVERLIST_REQUEST = 0x0B
REDISPLAY_SERVER_LIST = 0x0C
VIEW_ALL_CHAR = 0x0D
VIEW_ALL_CHAR_CONNECT = 0x0E
CHAR_SELECT = 0x13
CHECK_CHAR_NAME = 0x15
CREATE_CHAR = 0x16
DELETE_CHAR = 0x18
ERROR = 0x1B
PACKET_ERROR = 0x26
RELOG = 0x1D
PLAYER_LOGGEDIN = 0x14
PICK_ALL_CHAR = 0x0F
STRANGE_DATA = 0x1C
CHANGE_MAP = 0x2A
CHANGE_CHANNEL = 0x2B
MOVE_PLAYER = 0x2D
CANCEL_CHAIR = 0x29
USE_CHAIR = 0x2A
CLOSE_RANGE_ATTACK = 0x2B
RANGED_ATTACK = 0x2C
MAGIC_ATTACK = 0x2D
TAKE_DAMAGE = 0x2F
PHP Code:PING = 0x11
LOGIN_STATUS = 0x00
SEND_LINK = 0x01
SERVERSTATUS = 0x03
GENDER_SET = 0x04
PIN_OPERATION = 0x06
PIN_ASSIGNED = 0x07
VIEW_ALL_CHAR = 0x08
SERVERLIST = 0x0A
CHARLIST = 0x0B
SERVER_IP = 0x0C
CHAR_NAME_RESPONSE = 0x0D
ADD_NEW_CHAR_ENTRY = 0x0E
DELETE_CHAR_RESPONSE = 0x0F
CHANNEL_SELECTED = 0x14
RELOG_RESPONSE = 0x16
ENABLE_RECOMMENDED = 0x19
SEND_RECOMMENDED = 0x1A
RESET_SCREEN = 0x9B
CHANGE_CHANNEL = 0x10
MODIFY_INVENTORY_ITEM = 0x1A
UPDATE_STATS = 0x1C
GIVE_BUFF = 0x1D
CANCEL_BUFF = 0x1E
Will update Serverlist once i'll be sure in the right code.

