我玩的是CMS104,大概相當TMS148左右,如果版本相差太大,數据包的結構也許會產生變化。 由於這個時期的源碼內容都相近,所以抄寫入源碼裏,應該沒問題。我本身只是個小白,也是從韓國的原始程式碼中抄出來的。
宅配.rar
(11.12 KB, 下載次數: 190)
由於內容比較多,我只是粘貼一小部分。
public void openDuey() {
c.getPlayer().setConversation(2);
c.getSession().write(MaplePacketCreator.sendDuey((byte) 9, null, null));
}
############################################################
/*
送货员相关内容
*/
public static byte[] sendDuey(byte operation, List<MapleDueyActions> packages, List<MapleDueyActions> expired) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.DUEY.getValue());
mplew.write(operation);
if (packages == null) {
mplew.write(0);
mplew.write(0);
mplew.write(0);
return mplew.getPacket();
}
switch (operation) {
case 9: { // Request 13 Digit AS
mplew.write(1);
// 0xFF = error
break;
}
case 10: { // Open duey
mplew.write(0); // != 0
mplew.write(packages.size());
for (MapleDueyActions dp : packages) {
mplew.writeInt(dp.getPackageId());
mplew.writeAsciiString(dp.getSender(), 13);
mplew.writeInt(dp.getMesos());
mplew.writeLong(PacketHelper.getTime(dp.getExpireTime()));
mplew.writeInt(dp.isQuick() ? 1 : 0);
mplew.writeAsciiString(dp.getContent(), 100);
mplew.writeZeroBytes(100);
mplew.write(0);
if (dp.getItem() != null) {
mplew.write(1);
PacketHelper.addItemInfo(mplew, dp.getItem());
} else {
mplew.write(0);
}
}
if (expired == null) {
mplew.write(0);
return mplew.getPacket();
}
mplew.write(expired.size());
for (MapleDueyActions dp : expired) {
mplew.writeInt(dp.getPackageId());
mplew.writeAsciiString(dp.getSender(), 13);
mplew.writeLong(dp.getMesos());
if (dp.canReceive()) {
mplew.writeLong(PacketHelper.getTime(dp.getExpireTime()));
} else {
mplew.writeLong(0);
}
mplew.writeInt(dp.isQuick() ? 1 : 0);
mplew.writeAsciiString(dp.getContent(), 100);
mplew.writeZeroBytes(100);
mplew.write(0);
if (dp.getItem() != null) {
mplew.write(1);
PacketHelper.addItemInfo(mplew, dp.getItem());
} else {
mplew.write(0);
}
}
break;
}
}
return mplew.getPacket();
}
/*
送货员相关内容
*/
public static byte[] removeItemFromDuey(boolean remove, int Package) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.DUEY.getValue());
mplew.write(24);
mplew.writeInt(Package);
mplew.write(remove ? 3 : 4);
return mplew.getPacket();
}
/*
送货员相关内容
*/
public static byte[] checkFailedDuey() {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.DUEY.getValue());
mplew.write(9);
mplew.write(-1); // 0xFF = error
return mplew.getPacket();
}
/*
送货员相关内容
*/
public static byte[] receiveParcel(String from, boolean quick) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.DUEY.getValue());
mplew.write(0x1A);
mplew.writeMapleAsciiString(from);
mplew.write(quick ? 1 : 0);
return mplew.getPacket();
}
|