Reformat entire PacketCreator

This commit is contained in:
P0nk
2021-08-19 21:33:56 +02:00
parent e184f25184
commit e93428f457

View File

@@ -78,7 +78,6 @@ import java.util.Map.Entry;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
*
* @author Frz * @author Frz
*/ */
public class PacketCreator { public class PacketCreator {
@@ -211,7 +210,7 @@ public class PacketCreator {
Set<NewYearCardRecord> received = chr.getReceivedNewYearRecords(); Set<NewYearCardRecord> received = chr.getReceivedNewYearRecords();
mplew.writeShort(received.size()); mplew.writeShort(received.size());
for(NewYearCardRecord nyc : received) { for (NewYearCardRecord nyc : received) {
encodeNewYearCard(nyc, mplew); encodeNewYearCard(nyc, mplew);
} }
} }
@@ -574,7 +573,7 @@ public class PacketCreator {
/** /**
* Gets a login failed packet. * Gets a login failed packet.
* * <p>
* Possible values for <code>reason</code>:<br> 3: ID deleted or blocked<br> * Possible values for <code>reason</code>:<br> 3: ID deleted or blocked<br>
* 4: Incorrect password<br> 5: Not a registered id<br> 6: System error<br> * 4: Incorrect password<br> 5: Not a registered id<br> 6: System error<br>
* 7: Already logged in<br> 8: System error<br> 9: System error<br> 10: * 7: Already logged in<br> 8: System error<br> 9: System error<br> 10:
@@ -601,7 +600,7 @@ public class PacketCreator {
/** /**
* Gets a login failed packet. * Gets a login failed packet.
* * <p>
* Possible values for <code>reason</code>:<br> 2: ID deleted or blocked<br> * Possible values for <code>reason</code>:<br> 2: ID deleted or blocked<br>
* 3: ID deleted or blocked<br> 4: Incorrect password<br> 5: Not a * 3: ID deleted or blocked<br> 4: Incorrect password<br> 5: Not a
* registered id<br> 6: Trouble logging into the game?<br> 7: Already logged * registered id<br> 6: Trouble logging into the game?<br> 7: Already logged
@@ -682,7 +681,7 @@ public class PacketCreator {
mplew.write(c.getGender()); mplew.write(c.getGender());
boolean canFly = Server.getInstance().canFly(c.getAccID()); boolean canFly = Server.getInstance().canFly(c.getAccID());
mplew.writeBool((YamlConfig.config.server.USE_ENFORCE_ADMIN_ACCOUNT || canFly) ? c.getGMLevel() > 1 : false); // thanks Steve(kaito1410) for pointing the GM account boolean here mplew.writeBool((YamlConfig.config.server.USE_ENFORCE_ADMIN_ACCOUNT || canFly) && c.getGMLevel() > 1); // thanks Steve(kaito1410) for pointing the GM account boolean here
mplew.write(((YamlConfig.config.server.USE_ENFORCE_ADMIN_ACCOUNT || canFly) && c.getGMLevel() > 1) ? 0x80 : 0); // Admin Byte. 0x80,0x40,0x20.. Rubbish. mplew.write(((YamlConfig.config.server.USE_ENFORCE_ADMIN_ACCOUNT || canFly) && c.getGMLevel() > 1) ? 0x80 : 0); // Admin Byte. 0x80,0x40,0x20.. Rubbish.
mplew.write(0); // Country Code. mplew.write(0); // Country Code.
@@ -703,7 +702,7 @@ public class PacketCreator {
/** /**
* Gets a packet detailing a PIN operation. * Gets a packet detailing a PIN operation.
* * <p>
* Possible values for <code>mode</code>:<br> 0 - PIN was accepted<br> 1 - * Possible values for <code>mode</code>:<br> 0 - PIN was accepted<br> 1 -
* Register a new PIN<br> 2 - Invalid pin / Reenter<br> 3 - Connection * Register a new PIN<br> 2 - Invalid pin / Reenter<br> 3 - Connection
* failed due to system error<br> 4 - Enter the pin * failed due to system error<br> 4 - Enter the pin
@@ -798,7 +797,7 @@ public class PacketCreator {
/** /**
* Gets a packet detailing a server status message. * Gets a packet detailing a server status message.
* * <p>
* Possible values for <code>status</code>:<br> 0 - Normal<br> 1 - Highly * Possible values for <code>status</code>:<br> 0 - Normal<br> 1 - Highly
* populated<br> 2 - Full * populated<br> 2 - Full
* *
@@ -856,7 +855,7 @@ public class PacketCreator {
* @param serverId The ID of the server requested. * @param serverId The ID of the server requested.
* @param status The charlist request result. * @param status The charlist request result.
* @return The character list packet. * @return The character list packet.
* * <p>
* Possible values for <code>status</code>: * Possible values for <code>status</code>:
* <br> 2: ID deleted or blocked<br> * <br> 2: ID deleted or blocked<br>
* <br> 3: ID deleted or blocked<br> * <br> 3: ID deleted or blocked<br>
@@ -1211,7 +1210,7 @@ public class PacketCreator {
/** /**
* Gets a server notice packet. * Gets a server notice packet.
* * <p>
* Possible values for <code>type</code>:<br> 0: [Notice]<br> 1: Popup<br> * Possible values for <code>type</code>:<br> 0: [Notice]<br> 1: Popup<br>
* 2: Megaphone<br> 3: Super Megaphone<br> 4: Scrolling message at top<br> * 2: Megaphone<br> 3: Super Megaphone<br> 4: Scrolling message at top<br>
* 5: Pink Text<br> 6: Lightblue Text * 5: Pink Text<br> 6: Lightblue Text
@@ -1226,7 +1225,7 @@ public class PacketCreator {
/** /**
* Gets a server notice packet. * Gets a server notice packet.
* * <p>
* Possible values for <code>type</code>:<br> 0: [Notice]<br> 1: Popup<br> * Possible values for <code>type</code>:<br> 0: [Notice]<br> 1: Popup<br>
* 2: Megaphone<br> 3: Super Megaphone<br> 4: Scrolling message at top<br> * 2: Megaphone<br> 3: Super Megaphone<br> 4: Scrolling message at top<br>
* 5: Pink Text<br> 6: Lightblue Text * 5: Pink Text<br> 6: Lightblue Text
@@ -1250,7 +1249,7 @@ public class PacketCreator {
/** /**
* Gets a server message packet. * Gets a server message packet.
* * <p>
* Possible values for <code>type</code>:<br> 0: [Notice]<br> 1: Popup<br> * Possible values for <code>type</code>:<br> 0: [Notice]<br> 1: Popup<br>
* 2: Megaphone<br> 3: Super Megaphone<br> 4: Scrolling message at top<br> * 2: Megaphone<br> 3: Super Megaphone<br> 4: Scrolling message at top<br>
* 5: Pink Text<br> 6: Lightblue Text<br> 7: BroadCasting NPC * 5: Pink Text<br> 6: Lightblue Text<br> 7: BroadCasting NPC
@@ -1464,7 +1463,7 @@ public class PacketCreator {
mplew.writeShort(mobSkill.getSkillId()); mplew.writeShort(mobSkill.getSkillId());
mplew.writeShort(mobSkill.getSkillLevel()); mplew.writeShort(mobSkill.getSkillLevel());
switch(s.getKey()) { switch (s.getKey()) {
case WEAPON_REFLECT: case WEAPON_REFLECT:
pCounter = mobSkill.getX(); pCounter = mobSkill.getX();
break; break;
@@ -1482,9 +1481,15 @@ public class PacketCreator {
} }
// reflect packet structure found thanks to Arnah (Vertisy) // reflect packet structure found thanks to Arnah (Vertisy)
if(pCounter != -1) mplew.writeInt(pCounter);// wPCounter_ if (pCounter != -1) {
if(mCounter != -1) mplew.writeInt(mCounter);// wMCounter_ mplew.writeInt(pCounter);// wPCounter_
if(pCounter != -1 || mCounter != -1) mplew.writeInt(100);// nCounterProb_ }
if (mCounter != -1) {
mplew.writeInt(mCounter);// wMCounter_
}
if (pCounter != -1 || mCounter != -1) {
mplew.writeInt(100);// nCounterProb_
}
} }
/** /**
@@ -1537,7 +1542,7 @@ public class PacketCreator {
if (life.getParentMobOid() != 0) { if (life.getParentMobOid() != 0) {
MapleMonster parentMob = life.getMap().getMonsterByOid(life.getParentMobOid()); MapleMonster parentMob = life.getMap().getMonsterByOid(life.getParentMobOid());
if(parentMob != null && parentMob.isAlive()) { if (parentMob != null && parentMob.isAlive()) {
mplew.write(effect != 0 ? effect : -3); mplew.write(effect != 0 ? effect : -3);
mplew.writeInt(life.getParentMobOid()); mplew.writeInt(life.getParentMobOid());
} else { } else {
@@ -1860,7 +1865,7 @@ public class PacketCreator {
* *
* @param guildName The Guild name, blank for nothing. * @param guildName The Guild name, blank for nothing.
*/ */
public static byte[] guildNameChanged(int chrid, String guildName){ public static byte[] guildNameChanged(int chrid, String guildName) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendOpcode.GUILD_NAME_CHANGED.getValue()); mplew.writeShort(SendOpcode.GUILD_NAME_CHANGED.getValue());
mplew.writeInt(chrid); mplew.writeInt(chrid);
@@ -1868,7 +1873,7 @@ public class PacketCreator {
return mplew.getPacket(); return mplew.getPacket();
} }
public static byte[] guildMarkChanged(int chrid, MapleGuild guild){ public static byte[] guildMarkChanged(int chrid, MapleGuild guild) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendOpcode.GUILD_MARK_CHANGED.getValue()); mplew.writeShort(SendOpcode.GUILD_MARK_CHANGED.getValue());
mplew.writeInt(chrid); mplew.writeInt(chrid);
@@ -2013,7 +2018,7 @@ public class PacketCreator {
mplew.writeInt(chr.getItemEffect()); mplew.writeInt(chr.getItemEffect());
mplew.writeInt(ItemConstants.getInventoryType(chr.getChair()) == MapleInventoryType.SETUP ? chr.getChair() : 0); mplew.writeInt(ItemConstants.getInventoryType(chr.getChair()) == MapleInventoryType.SETUP ? chr.getChair() : 0);
if(enteringField) { if (enteringField) {
Point spawnPos = new Point(chr.getPosition()); Point spawnPos = new Point(chr.getPosition());
spawnPos.y -= 42; spawnPos.y -= 42;
mplew.writePos(spawnPos); mplew.writePos(spawnPos);
@@ -2079,11 +2084,11 @@ public class PacketCreator {
private static void encodeNewYearCardInfo(MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { private static void encodeNewYearCardInfo(MaplePacketLittleEndianWriter mplew, MapleCharacter chr) {
Set<NewYearCardRecord> newyears = chr.getReceivedNewYearRecords(); Set<NewYearCardRecord> newyears = chr.getReceivedNewYearRecords();
if(!newyears.isEmpty()) { if (!newyears.isEmpty()) {
mplew.write(1); mplew.write(1);
mplew.writeInt(newyears.size()); mplew.writeInt(newyears.size());
for(NewYearCardRecord nyc : newyears) { for (NewYearCardRecord nyc : newyears) {
mplew.writeInt(nyc.getId()); mplew.writeInt(nyc.getId());
} }
} else { } else {
@@ -2304,14 +2309,14 @@ public class PacketCreator {
private static void rebroadcastMovementList(LittleEndianWriter lew, SeekableLittleEndianAccessor slea, long movementDataLength) { private static void rebroadcastMovementList(LittleEndianWriter lew, SeekableLittleEndianAccessor slea, long movementDataLength) {
//movement command length is sent by client, probably not a big issue? (could be calculated on server) //movement command length is sent by client, probably not a big issue? (could be calculated on server)
//if multiple write/reads are slow, could use (and cache?) a byte[] buffer //if multiple write/reads are slow, could use (and cache?) a byte[] buffer
for(long i = 0; i < movementDataLength; i++) { for (long i = 0; i < movementDataLength; i++) {
lew.write(slea.readByte()); lew.write(slea.readByte());
} }
} }
private static void serializeMovementList(LittleEndianWriter lew, List<LifeMovementFragment> moves) { private static void serializeMovementList(LittleEndianWriter lew, List<LifeMovementFragment> moves) {
lew.write(moves.size()); lew.write(moves.size());
for(LifeMovementFragment move : moves) { for (LifeMovementFragment move : moves) {
move.serialize(lew); move.serialize(lew);
} }
} }
@@ -2594,7 +2599,9 @@ public class PacketCreator {
} }
public static byte[] updateAriantPQRanking(final MapleCharacter chr, final int score) { public static byte[] updateAriantPQRanking(final MapleCharacter chr, final int score) {
return updateAriantPQRanking(new LinkedHashMap<MapleCharacter, Integer>(){{put(chr, score);}}); return updateAriantPQRanking(new LinkedHashMap<MapleCharacter, Integer>() {{
put(chr, score);
}});
} }
public static byte[] updateAriantPQRanking(Map<MapleCharacter, Integer> playerScore) { public static byte[] updateAriantPQRanking(Map<MapleCharacter, Integer> playerScore) {
@@ -2680,7 +2687,7 @@ public class PacketCreator {
mplew.writeInt(0); mplew.writeInt(0);
} }
mplew.writeInt(damage); mplew.writeInt(damage);
if(skill != -4) { if (skill != -4) {
mplew.writeInt(monsteridfrom); mplew.writeInt(monsteridfrom);
mplew.write(direction); mplew.write(direction);
if (pgmr) { if (pgmr) {
@@ -2789,7 +2796,6 @@ public class PacketCreator {
} }
/** /**
*
* @param chr * @param chr
* @param isSelf * @param isSelf
* @return * @return
@@ -2912,7 +2918,6 @@ public class PacketCreator {
} }
/** /**
*
* @param cid * @param cid
* @param statups * @param statups
* @param mount * @param mount
@@ -2945,7 +2950,6 @@ public class PacketCreator {
mplew.write(0);*/ mplew.write(0);*/
/** /**
*
* @param c * @param c
* @param quest * @param quest
* @return * @return
@@ -2960,7 +2964,6 @@ public class PacketCreator {
} }
/** /**
*
* @param c * @param c
* @param quest * @param quest
* @return * @return
@@ -2976,7 +2979,6 @@ public class PacketCreator {
} }
/** /**
*
* @param c * @param c
* @param quest * @param quest
* @param npc * @param npc
@@ -3353,7 +3355,6 @@ public class PacketCreator {
} }
/** /**
*
* @param c * @param c
* @param shop * @param shop
* @param owner * @param owner
@@ -3384,8 +3385,8 @@ public class PacketCreator {
mplew.writeMapleAsciiString(shop.getOwner().getName()); mplew.writeMapleAsciiString(shop.getOwner().getName());
MapleCharacter[] visitors = shop.getVisitors(); MapleCharacter[] visitors = shop.getVisitors();
for(int i = 0; i < 3; i++) { for (int i = 0; i < 3; i++) {
if(visitors[i] != null) { if (visitors[i] != null) {
mplew.write(i + 1); mplew.write(i + 1);
addCharLook(mplew, visitors[i], false); addCharLook(mplew, visitors[i], false);
mplew.writeMapleAsciiString(visitors[i].getName()); mplew.writeMapleAsciiString(visitors[i].getName());
@@ -3667,8 +3668,7 @@ public class PacketCreator {
return mplew.getPacket(); return mplew.getPacket();
} }
public static byte[] QuickslotMappedInit(MapleQuickslotBinding pQuickslot) public static byte[] QuickslotMappedInit(MapleQuickslotBinding pQuickslot) {
{
final MaplePacketLittleEndianWriter pOutPacket = new MaplePacketLittleEndianWriter(); final MaplePacketLittleEndianWriter pOutPacket = new MaplePacketLittleEndianWriter();
pOutPacket.writeShort(SendOpcode.QUICKSLOT_INIT.getValue()); pOutPacket.writeShort(SendOpcode.QUICKSLOT_INIT.getValue());
@@ -3678,7 +3678,7 @@ public class PacketCreator {
} }
public static byte[] getInventoryFull() { public static byte[] getInventoryFull() {
return modifyInventory(true, Collections.<ModifyInventory>emptyList()); return modifyInventory(true, Collections.emptyList());
} }
public static byte[] getShowInventoryFull() { public static byte[] getShowInventoryFull() {
@@ -3790,7 +3790,6 @@ public class PacketCreator {
} }
/** /**
*
* @param oid * @param oid
* @param remhppercentage * @param remhppercentage
* @return * @return
@@ -3818,7 +3817,7 @@ public class PacketCreator {
private static Pair<Integer, Integer> normalizedCustomMaxHP(long currHP, long maxHP) { private static Pair<Integer, Integer> normalizedCustomMaxHP(long currHP, long maxHP) {
int sendHP, sendMaxHP; int sendHP, sendMaxHP;
if(maxHP <= Integer.MAX_VALUE) { if (maxHP <= Integer.MAX_VALUE) {
sendHP = (int) currHP; sendHP = (int) currHP;
sendMaxHP = (int) maxHP; sendMaxHP = (int) maxHP;
} else { } else {
@@ -3893,7 +3892,7 @@ public class PacketCreator {
if (partyDoors.size() > 0) { if (partyDoors.size() > 0) {
MapleDoor door = partyDoors.get(partycharid); MapleDoor door = partyDoors.get(partycharid);
if(door != null) { if (door != null) {
MapleDoorObject mdo = door.getAreaDoor(); MapleDoorObject mdo = door.getAreaDoor();
mplew.writeInt(mdo.getTo().getId()); mplew.writeInt(mdo.getTo().getId());
mplew.writeInt(mdo.getFrom().getId()); mplew.writeInt(mdo.getFrom().getId());
@@ -4008,7 +4007,7 @@ public class PacketCreator {
if (partychar.getChannel() == forchannel && !leaving) { if (partychar.getChannel() == forchannel && !leaving) {
if (partyDoors.size() > 0) { if (partyDoors.size() > 0) {
MapleDoor door = partyDoors.get(partychar.getId()); MapleDoor door = partyDoors.get(partychar.getId());
if(door != null) { if (door != null) {
MapleDoorObject mdo = door.getTownDoor(); MapleDoorObject mdo = door.getTownDoor();
lew.writeInt(mdo.getTown().getId()); lew.writeInt(mdo.getTown().getId());
lew.writeInt(mdo.getArea().getId()); lew.writeInt(mdo.getArea().getId());
@@ -4415,7 +4414,7 @@ public class PacketCreator {
mplew.writeShort(SendOpcode.FIELD_OBSTACLE_ONOFF_LIST.getValue()); mplew.writeShort(SendOpcode.FIELD_OBSTACLE_ONOFF_LIST.getValue());
mplew.writeInt(envList.size()); mplew.writeInt(envList.size());
for(Entry<String, Integer> envMove : envList) { for (Entry<String, Integer> envMove : envList) {
mplew.writeMapleAsciiString(envMove.getKey()); mplew.writeMapleAsciiString(envMove.getKey());
mplew.writeInt(envMove.getValue()); mplew.writeInt(envMove.getValue());
} }
@@ -4539,7 +4538,7 @@ public class PacketCreator {
/** /**
* Gets a Heracle/guild message packet. * Gets a Heracle/guild message packet.
* * <p>
* Possible values for <code>code</code>:<br> 28: guild name already in use<br> * Possible values for <code>code</code>:<br> 28: guild name already in use<br>
* 31: problem in locating players during agreement<br> 33/40: already joined a guild<br> * 31: problem in locating players during agreement<br> 33/40: already joined a guild<br>
* 35: Cannot make guild<br> 36: problem in player agreement<br> 38: problem during forming guild<br> * 35: Cannot make guild<br> 36: problem in player agreement<br> 38: problem during forming guild<br>
@@ -4547,7 +4546,6 @@ public class PacketCreator {
* 45/48: character not in guild<br> 52: problem in disbanding guild<br> 56: admin cannot make guild<br> * 45/48: character not in guild<br> 52: problem in disbanding guild<br> 56: admin cannot make guild<br>
* 57: problem in increasing guild size<br> * 57: problem in increasing guild size<br>
* *
*
* @param code The response code. * @param code The response code.
* @return The guild message packet. * @return The guild message packet.
*/ */
@@ -4560,7 +4558,7 @@ public class PacketCreator {
/** /**
* Gets a guild message packet appended with target name. * Gets a guild message packet appended with target name.
* * <p>
* 53: player not accepting guild invites<br> * 53: player not accepting guild invites<br>
* 54: player already managing an invite<br> 55: player denied an invite<br> * 54: player already managing an invite<br> 55: player denied an invite<br>
* *
@@ -5667,7 +5665,7 @@ public class PacketCreator {
MaplePlayerShopItem item = hme.getLeft(); MaplePlayerShopItem item = hme.getLeft();
AbstractMapleMapObject mo = hme.getRight(); AbstractMapleMapObject mo = hme.getRight();
if(mo instanceof MaplePlayerShop) { if (mo instanceof MaplePlayerShop) {
MaplePlayerShop ps = (MaplePlayerShop) mo; MaplePlayerShop ps = (MaplePlayerShop) mo;
MapleCharacter owner = ps.getOwner(); MapleCharacter owner = ps.getOwner();
@@ -5931,37 +5929,37 @@ public class PacketCreator {
Map<Short, Integer> equip = npc.getEquips(); Map<Short, Integer> equip = npc.getEquips();
Map<Short, Integer> myEquip = new LinkedHashMap<>(); Map<Short, Integer> myEquip = new LinkedHashMap<>();
Map<Short, Integer> maskedEquip = new LinkedHashMap<>(); Map<Short, Integer> maskedEquip = new LinkedHashMap<>();
for(short position : equip.keySet()) { for (short position : equip.keySet()) {
short pos = (byte) (position * -1); short pos = (byte) (position * -1);
if(pos < 100 && myEquip.get(pos) == null) { if (pos < 100 && myEquip.get(pos) == null) {
myEquip.put(pos, equip.get(position)); myEquip.put(pos, equip.get(position));
} else if((pos > 100 && pos != 111) || pos == -128) { // don't ask. o.o } else if ((pos > 100 && pos != 111) || pos == -128) { // don't ask. o.o
pos -= 100; pos -= 100;
if(myEquip.get(pos) != null) { if (myEquip.get(pos) != null) {
maskedEquip.put(pos, myEquip.get(pos)); maskedEquip.put(pos, myEquip.get(pos));
} }
myEquip.put(pos, equip.get(position)); myEquip.put(pos, equip.get(position));
} else if(myEquip.get(pos) != null) { } else if (myEquip.get(pos) != null) {
maskedEquip.put(pos, equip.get(position)); maskedEquip.put(pos, equip.get(position));
} }
} }
for(Entry<Short, Integer> entry : myEquip.entrySet()) { for (Entry<Short, Integer> entry : myEquip.entrySet()) {
mplew.write(entry.getKey()); mplew.write(entry.getKey());
mplew.writeInt(entry.getValue()); mplew.writeInt(entry.getValue());
} }
mplew.write(0xFF); mplew.write(0xFF);
for(Entry<Short, Integer> entry : maskedEquip.entrySet()) { for (Entry<Short, Integer> entry : maskedEquip.entrySet()) {
mplew.write(entry.getKey()); mplew.write(entry.getKey());
mplew.writeInt(entry.getValue()); mplew.writeInt(entry.getValue());
} }
mplew.write(0xFF); mplew.write(0xFF);
Integer cWeapon = equip.get((byte) -111); Integer cWeapon = equip.get((byte) -111);
if(cWeapon != null) { if (cWeapon != null) {
mplew.writeInt(cWeapon); mplew.writeInt(cWeapon);
} else { } else {
mplew.writeInt(0); mplew.writeInt(0);
} }
for(int i = 0; i < 3; i++) { for (int i = 0; i < 3; i++) {
mplew.writeInt(0); mplew.writeInt(0);
} }
return mplew.getPacket(); return mplew.getPacket();
@@ -6133,10 +6131,10 @@ public class PacketCreator {
mplew.write(error); mplew.write(error);
mplew.writeInt(0); mplew.writeInt(0);
mplew.writeBool(error == 0); //0 = ?, otherwise list servers mplew.writeBool(error == 0); //0 = ?, otherwise list servers
if(error == 0) { if (error == 0) {
List<World> worlds = Server.getInstance().getWorlds(); List<World> worlds = Server.getInstance().getWorlds();
mplew.writeInt(worlds.size()); mplew.writeInt(worlds.size());
for(World world : worlds) { for (World world : worlds) {
mplew.writeMapleAsciiString(GameConstants.WORLD_NAMES[world.getId()]); mplew.writeMapleAsciiString(GameConstants.WORLD_NAMES[world.getId()]);
} }
} }
@@ -6193,7 +6191,9 @@ public class PacketCreator {
final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendOpcode.CANCEL_NAME_CHANGE_RESULT.getValue()); mplew.writeShort(SendOpcode.CANCEL_NAME_CHANGE_RESULT.getValue());
mplew.writeBool(success); mplew.writeBool(success);
if(!success) mplew.write(0); if (!success) {
mplew.write(0);
}
//mplew.writeMapleAsciiString("Custom message."); //only if ^ != 0 //mplew.writeMapleAsciiString("Custom message."); //only if ^ != 0
return mplew.getPacket(); return mplew.getPacket();
} }
@@ -6202,7 +6202,9 @@ public class PacketCreator {
final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendOpcode.CANCEL_TRANSFER_WORLD_RESULT.getValue()); mplew.writeShort(SendOpcode.CANCEL_TRANSFER_WORLD_RESULT.getValue());
mplew.writeBool(success); mplew.writeBool(success);
if(!success) mplew.write(0); if (!success) {
mplew.write(0);
}
//mplew.writeMapleAsciiString("Custom message."); //only if ^ != 0 //mplew.writeMapleAsciiString("Custom message."); //only if ^ != 0
return mplew.getPacket(); return mplew.getPacket();
} }
@@ -6309,13 +6311,13 @@ public class PacketCreator {
final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue());
mplew.write(0x59); mplew.write(0x59);
mplew.write((byte)cashItems.size()); mplew.write((byte) cashItems.size());
for(Item item : cashItems) { for (Item item : cashItems) {
addCashItemInformation(mplew, item, accountId); addCashItemInformation(mplew, item, accountId);
} }
mplew.writeInt(maplePoints); mplew.writeInt(maplePoints);
mplew.writeInt(items.size()); mplew.writeInt(items.size());
for(Pair<Integer, Integer> itemPair : items) { for (Pair<Integer, Integer> itemPair : items) {
int quantity = itemPair.getLeft(); int quantity = itemPair.getLeft();
mplew.writeShort((short) quantity); //quantity (0 = 1 for cash items) mplew.writeShort((short) quantity); //quantity (0 = 1 for cash items)
mplew.writeShort(0x1F); //0 = ?, >=0x20 = ?, <0x20 = ? (does nothing?) mplew.writeShort(0x1F); //0 = ?, >=0x20 = ?, <0x20 = ? (does nothing?)
@@ -6470,7 +6472,7 @@ public class PacketCreator {
/** /**
* Family Result Message * Family Result Message
* * <p>
* Possible values for <code>type</code>:<br> * Possible values for <code>type</code>:<br>
* 64: You cannot add this character as a junior. * 64: You cannot add this character as a junior.
* 65: The name could not be found or is not online. * 65: The name could not be found or is not online.
@@ -6512,7 +6514,9 @@ public class PacketCreator {
} }
public static byte[] getFamilyInfo(MapleFamilyEntry f) { public static byte[] getFamilyInfo(MapleFamilyEntry f) {
if(f == null) return getEmptyFamilyInfo(); if (f == null) {
return getEmptyFamilyInfo();
}
final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendOpcode.FAMILY_INFO_RESULT.getValue()); mplew.writeShort(SendOpcode.FAMILY_INFO_RESULT.getValue());
mplew.writeInt(f.getReputation()); // cur rep left mplew.writeInt(f.getReputation()); // cur rep left
@@ -6525,7 +6529,7 @@ public class PacketCreator {
mplew.writeMapleAsciiString(f.getFamily().getName()); mplew.writeMapleAsciiString(f.getFamily().getName());
mplew.writeMapleAsciiString(f.getFamily().getMessage()); //family message mplew.writeMapleAsciiString(f.getFamily().getMessage()); //family message
mplew.writeInt(MapleFamilyEntitlement.values().length); //Entitlement info count mplew.writeInt(MapleFamilyEntitlement.values().length); //Entitlement info count
for(MapleFamilyEntitlement entitlement : MapleFamilyEntitlement.values()) { for (MapleFamilyEntitlement entitlement : MapleFamilyEntitlement.values()) {
mplew.writeInt(entitlement.ordinal()); //ID mplew.writeInt(entitlement.ordinal()); //ID
mplew.writeInt(f.isEntitlementUsed(entitlement) ? 1 : 0); //Used count mplew.writeInt(f.isEntitlementUsed(entitlement) ? 1 : 0); //Used count
} }
@@ -6557,41 +6561,57 @@ public class PacketCreator {
int entryCount = 2; //2 guaranteed, leader and self int entryCount = 2; //2 guaranteed, leader and self
entryCount += Math.min(2, entry.getTotalSeniors()); entryCount += Math.min(2, entry.getTotalSeniors());
//needed since MaplePacketLittleEndianWriter doesn't have any seek functionality //needed since MaplePacketLittleEndianWriter doesn't have any seek functionality
if(entry.getSenior() != null) { if (entry.getSenior() != null) {
if(entry.getSenior().getJuniorCount() == 2) { if (entry.getSenior().getJuniorCount() == 2) {
entryCount++; entryCount++;
hasOtherJunior = true; hasOtherJunior = true;
} }
} }
for(MapleFamilyEntry junior : entry.getJuniors()) { for (MapleFamilyEntry junior : entry.getJuniors()) {
if(junior == null) continue; if (junior == null) {
continue;
}
entryCount++; entryCount++;
for(MapleFamilyEntry superJunior : junior.getJuniors()) { for (MapleFamilyEntry superJunior : junior.getJuniors()) {
if(superJunior == null) continue; if (superJunior == null) {
continue;
}
entryCount++; entryCount++;
superJuniors.add(superJunior); superJuniors.add(superJunior);
} }
} }
//write entries //write entries
boolean missingEntries = entryCount == 2; //pedigree requires at least 3 entries to show leader, might only have 2 if leader's juniors leave boolean missingEntries = entryCount == 2; //pedigree requires at least 3 entries to show leader, might only have 2 if leader's juniors leave
if(missingEntries) entryCount++; if (missingEntries) {
entryCount++;
}
mplew.writeInt(entryCount); //player count mplew.writeInt(entryCount); //player count
addPedigreeEntry(mplew, entry.getFamily().getLeader()); addPedigreeEntry(mplew, entry.getFamily().getLeader());
if(entry.getSenior() != null) { if (entry.getSenior() != null) {
if(entry.getSenior().getSenior() != null) addPedigreeEntry(mplew, entry.getSenior().getSenior()); if (entry.getSenior().getSenior() != null) {
addPedigreeEntry(mplew, entry.getSenior().getSenior());
}
addPedigreeEntry(mplew, entry.getSenior()); addPedigreeEntry(mplew, entry.getSenior());
} }
addPedigreeEntry(mplew, entry); addPedigreeEntry(mplew, entry);
if(hasOtherJunior) { //must be sent after own entry if (hasOtherJunior) { //must be sent after own entry
MapleFamilyEntry otherJunior = entry.getSenior().getOtherJunior(entry); MapleFamilyEntry otherJunior = entry.getSenior().getOtherJunior(entry);
if(otherJunior != null) addPedigreeEntry(mplew, otherJunior); if (otherJunior != null) {
addPedigreeEntry(mplew, otherJunior);
}
}
if (missingEntries) {
addPedigreeEntry(mplew, entry);
}
for (MapleFamilyEntry junior : entry.getJuniors()) {
if (junior == null) {
continue;
} }
if(missingEntries) addPedigreeEntry(mplew, entry);
for(MapleFamilyEntry junior : entry.getJuniors()) {
if(junior == null) continue;
addPedigreeEntry(mplew, junior); addPedigreeEntry(mplew, junior);
for(MapleFamilyEntry superJunior : junior.getJuniors()) { for (MapleFamilyEntry superJunior : junior.getJuniors()) {
if(superJunior != null) addPedigreeEntry(mplew, superJunior); if (superJunior != null) {
addPedigreeEntry(mplew, superJunior);
}
} }
} }
mplew.writeInt(2 + superJuniors.size()); //member info count mplew.writeInt(2 + superJuniors.size()); //member info count
@@ -6600,7 +6620,7 @@ public class PacketCreator {
mplew.writeInt(entry.getFamily().getTotalMembers()); mplew.writeInt(entry.getFamily().getTotalMembers());
mplew.writeInt(0); mplew.writeInt(0);
mplew.writeInt(entry.getTotalSeniors()); //client subtracts provided seniors mplew.writeInt(entry.getTotalSeniors()); //client subtracts provided seniors
for(MapleFamilyEntry superJunior : superJuniors) { for (MapleFamilyEntry superJunior : superJuniors) {
mplew.writeInt(superJunior.getChrId()); mplew.writeInt(superJunior.getChrId());
mplew.writeInt(superJunior.getTotalJuniors()); mplew.writeInt(superJunior.getTotalJuniors());
} }
@@ -6788,7 +6808,7 @@ public class PacketCreator {
/** /**
* Sends a report response * Sends a report response
* * <p>
* Possible values for <code>mode</code>:<br> 0: You have succesfully * Possible values for <code>mode</code>:<br> 0: You have succesfully
* reported the user.<br> 1: Unable to locate the user.<br> 2: You may only * reported the user.<br> 1: Unable to locate the user.<br> 2: You may only
* report users 10 times a day.<br> 3: You have been reported to the GM's by * report users 10 times a day.<br> 3: You have been reported to the GM's by
@@ -7058,7 +7078,7 @@ public class PacketCreator {
/** /**
* Gets a gm effect packet (ie. hide, banned, etc.) * Gets a gm effect packet (ie. hide, banned, etc.)
* * <p>
* Possible values for <code>type</code>:<br> 0x04: You have successfully * Possible values for <code>type</code>:<br> 0x04: You have successfully
* blocked access.<br> * blocked access.<br>
* 0x05: The unblocking has been successful.<br> 0x06 with Mode 0: You have * 0x05: The unblocking has been successful.<br> 0x06 with Mode 0: You have
@@ -7180,14 +7200,14 @@ public class PacketCreator {
} }
// Cash Shop Surprise packets found thanks to Arnah (Vertisy) // Cash Shop Surprise packets found thanks to Arnah (Vertisy)
public static byte[] onCashItemGachaponOpenFailed(){ public static byte[] onCashItemGachaponOpenFailed() {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendOpcode.CASHSHOP_CASH_ITEM_GACHAPON_RESULT.getValue()); mplew.writeShort(SendOpcode.CASHSHOP_CASH_ITEM_GACHAPON_RESULT.getValue());
mplew.write(0xE4); mplew.write(0xE4);
return mplew.getPacket(); return mplew.getPacket();
} }
public static byte[] onCashGachaponOpenSuccess(int accountid, long sn, int remainingBoxes, Item item, int itemid, int nSelectedItemCount, boolean bJackpot){ public static byte[] onCashGachaponOpenSuccess(int accountid, long sn, int remainingBoxes, Item item, int itemid, int nSelectedItemCount, boolean bJackpot) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendOpcode.CASHSHOP_CASH_ITEM_GACHAPON_RESULT.getValue()); mplew.writeShort(SendOpcode.CASHSHOP_CASH_ITEM_GACHAPON_RESULT.getValue());
mplew.write(0xE5); // subopcode thanks to Ubaware mplew.write(0xE5); // subopcode thanks to Ubaware
@@ -7489,7 +7509,7 @@ public class PacketCreator {
/** /**
* Gets a "block" packet (ie. the cash shop is unavailable, etc) * Gets a "block" packet (ie. the cash shop is unavailable, etc)
* * <p>
* Possible values for <code>type</code>:<br> 1: The portal is closed for * Possible values for <code>type</code>:<br> 1: The portal is closed for
* now.<br> 2: You cannot go to that place.<br> 3: Unable to approach due to * now.<br> 2: You cannot go to that place.<br> 3: Unable to approach due to
* the force of the ground.<br> 4: You cannot teleport to or on this * the force of the ground.<br> 4: You cannot teleport to or on this
@@ -7509,7 +7529,7 @@ public class PacketCreator {
/** /**
* Gets a "block" packet (ie. the cash shop is unavailable, etc) * Gets a "block" packet (ie. the cash shop is unavailable, etc)
* * <p>
* Possible values for <code>type</code>:<br> 1: You cannot move that * Possible values for <code>type</code>:<br> 1: You cannot move that
* channel. Please try again later.<br> 2: You cannot go into the cash shop. * channel. Please try again later.<br> 2: You cannot go into the cash shop.
* Please try again later.<br> 3: The Item-Trading Shop is currently * Please try again later.<br> 3: The Item-Trading Shop is currently
@@ -7538,7 +7558,7 @@ public class PacketCreator {
/** /**
* Sends a "levelup" packet to the guild or family. * Sends a "levelup" packet to the guild or family.
* * <p>
* Possible values for <code>type</code>:<br> 0: <Family> ? has reached Lv. * Possible values for <code>type</code>:<br> 0: <Family> ? has reached Lv.
* ?.<br> - The Reps you have received from ? will be reduced in half. 1: * ?.<br> - The Reps you have received from ? will be reduced in half. 1:
* <Family> ? has reached Lv. ?.<br> 2: <Guild> ? has reached Lv. ?.<br> * <Family> ? has reached Lv. ?.<br> 2: <Guild> ? has reached Lv. ?.<br>
@@ -7558,7 +7578,7 @@ public class PacketCreator {
/** /**
* Sends a "married" packet to the guild or family. * Sends a "married" packet to the guild or family.
* * <p>
* Possible values for <code>type</code>:<br> 0: <Guild ? is now married. * Possible values for <code>type</code>:<br> 0: <Guild ? is now married.
* Please congratulate them.<br> 1: <Family ? is now married. Please * Please congratulate them.<br> 1: <Family ? is now married. Please
* congratulate them.<br> * congratulate them.<br>
@@ -7577,7 +7597,7 @@ public class PacketCreator {
/** /**
* Sends a "job advance" packet to the guild or family. * Sends a "job advance" packet to the guild or family.
* * <p>
* Possible values for <code>type</code>:<br> 0: <Guild ? has advanced to * Possible values for <code>type</code>:<br> 0: <Guild ? has advanced to
* a(an) ?.<br> 1: <Family ? has advanced to a(an) ?.<br> * a(an) ?.<br> 1: <Family ? has advanced to a(an) ?.<br>
* *
@@ -7595,7 +7615,6 @@ public class PacketCreator {
} }
/** /**
*
* @param type - (0:Light&Long 1:Heavy&Short) * @param type - (0:Light&Long 1:Heavy&Short)
* @param delay - seconds * @param delay - seconds
* @return * @return
@@ -7682,7 +7701,7 @@ public class PacketCreator {
mplew.writeInt(ring.getItemId()); mplew.writeInt(ring.getItemId());
} }
if(chr.getPartnerId() > 0) { if (chr.getPartnerId() > 0) {
MapleRing marriageRing = chr.getMarriageRing(); MapleRing marriageRing = chr.getMarriageRing();
mplew.writeShort(1); mplew.writeShort(1);
@@ -7777,7 +7796,7 @@ public class PacketCreator {
/** /**
* Sends a Snowball Message<br> * Sends a Snowball Message<br>
* * <p>
* Possible values for <code>message</code>:<br> 1: ... Team's snowball has * Possible values for <code>message</code>:<br> 1: ... Team's snowball has
* passed the stage 1.<br> 2: ... Team's snowball has passed the stage * passed the stage 1.<br> 2: ... Team's snowball has passed the stage
* 2.<br> 3: ... Team's snowball has passed the stage 3.<br> 4: ... Team is * 2.<br> 3: ... Team's snowball has passed the stage 3.<br> 4: ... Team is
@@ -7785,7 +7804,6 @@ public class PacketCreator {
* again<br> * again<br>
* *
* @param message * @param message
*
*/ */
public static byte[] snowballMessage(int team, int message) { public static byte[] snowballMessage(int team, int message) {
final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7);
@@ -8301,7 +8319,6 @@ public class PacketCreator {
* *
* @param charid - Needs the specific Character ID * @param charid - Needs the specific Character ID
* @return The packet * @return The packet
*
*/ */
public static byte[] removeDragon(int chrid) { public static byte[] removeDragon(int chrid) {
final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
@@ -8318,7 +8335,6 @@ public class PacketCreator {
* @param remove whether or not the remove or add the specified layer. * @param remove whether or not the remove or add the specified layer.
* @param layer the targeted layer for removal or addition. * @param layer the targeted layer for removal or addition.
* @param transition the time it takes to transition the effect. * @param transition the time it takes to transition the effect.
*
* @return a packet to change the background effect of a specified layer. * @return a packet to change the background effect of a specified layer.
*/ */
public static byte[] changeBackgroundEffect(boolean remove, int layer, int transition) { public static byte[] changeBackgroundEffect(boolean remove, int layer, int transition) {
@@ -8352,7 +8368,7 @@ public class PacketCreator {
return mplew.getPacket(); return mplew.getPacket();
} }
private static byte[] MassacreResult(byte nRank,int nIncExp) { private static byte[] MassacreResult(byte nRank, int nIncExp) {
//CField_MassacreResult__OnMassacreResult @ 0x005617C5 //CField_MassacreResult__OnMassacreResult @ 0x005617C5
final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendOpcode.PYRAMID_SCORE.getValue()); //MASSACRERESULT | 0x009E mplew.writeShort(SendOpcode.PYRAMID_SCORE.getValue()); //MASSACRERESULT | 0x009E
@@ -8390,7 +8406,7 @@ public class PacketCreator {
return mplew.getPacket(); return mplew.getPacket();
} }
private static byte[] Tournament__SetPrize(byte bSetPrize, byte bHasPrize,int nItemID1,int nItemID2) { private static byte[] Tournament__SetPrize(byte bSetPrize, byte bHasPrize, int nItemID1, int nItemID2) {
final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendOpcode.TOURNAMENT_SET_PRIZE.getValue()); mplew.writeShort(SendOpcode.TOURNAMENT_SET_PRIZE.getValue());
@@ -8400,8 +8416,7 @@ public class PacketCreator {
mplew.write(bHasPrize); mplew.write(bHasPrize);
if(bHasPrize != 0) if (bHasPrize != 0) {
{
mplew.writeInt(nItemID1); mplew.writeInt(nItemID1);
mplew.writeInt(nItemID2); mplew.writeInt(nItemID2);
} }