diff --git a/src/main/java/client/MapleCharacter.java b/src/main/java/client/MapleCharacter.java index edb7fc099f..ec0d1a5929 100644 --- a/src/main/java/client/MapleCharacter.java +++ b/src/main/java/client/MapleCharacter.java @@ -1221,7 +1221,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } public void broadcastStance() { - map.broadcastMessage(this, PacketCreator.movePlayer(id, this.getIdleMovement(), getIdleMovementDataLength()), false); + map.broadcastMessage(this, PacketCreator.movePlayer(id, this.getIdleMovement(), AbstractAnimatedMapleMapObject.IDLE_MOVEMENT_PACKET_LENGTH), false); } public MapleMap getWarpMap(int map) { diff --git a/src/main/java/client/command/commands/gm3/PeCommand.java b/src/main/java/client/command/commands/gm3/PeCommand.java index 886bee1616..3f959663b9 100644 --- a/src/main/java/client/command/commands/gm3/PeCommand.java +++ b/src/main/java/client/command/commands/gm3/PeCommand.java @@ -28,12 +28,13 @@ import client.MapleClient; import client.command.Command; import net.MaplePacketHandler; import net.PacketProcessor; +import net.packet.ByteBufOutPacket; +import net.packet.OutPacket; import tools.FilePrinter; import tools.HexTool; import tools.data.input.ByteArrayByteStream; import tools.data.input.GenericSeekableLittleEndianAccessor; import tools.data.input.SeekableLittleEndianAccessor; -import tools.data.output.MaplePacketLittleEndianWriter; import java.io.FileReader; import java.io.IOException; @@ -61,9 +62,9 @@ public class PeCommand extends Command { return; } - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.write(HexTool.getByteArrayFromHexString(packet)); - SeekableLittleEndianAccessor slea = new GenericSeekableLittleEndianAccessor(new ByteArrayByteStream(mplew.getPacket())); + OutPacket p = new ByteBufOutPacket(); + p.writeBytes(HexTool.getByteArrayFromHexString(packet)); + SeekableLittleEndianAccessor slea = new GenericSeekableLittleEndianAccessor(new ByteArrayByteStream(p.getBytes())); short packetId = slea.readShort(); final MaplePacketHandler packetHandler = PacketProcessor.getProcessor(0, c.getChannel()).getHandler(packetId); if (packetHandler != null && packetHandler.validateState(c)) { diff --git a/src/main/java/net/server/channel/handlers/AllianceOperationHandler.java b/src/main/java/net/server/channel/handlers/AllianceOperationHandler.java index 01a491ae0d..88b9979cd3 100644 --- a/src/main/java/net/server/channel/handlers/AllianceOperationHandler.java +++ b/src/main/java/net/server/channel/handlers/AllianceOperationHandler.java @@ -24,9 +24,6 @@ package net.server.channel.handlers; import client.MapleCharacter; import client.MapleClient; import net.AbstractMaplePacketHandler; -import net.opcodes.SendOpcode; -import net.packet.OutPacket; -import net.packet.Packet; import net.server.Server; import net.server.guild.GuildPackets; import net.server.guild.MapleAlliance; @@ -34,7 +31,6 @@ import net.server.guild.MapleGuild; import net.server.guild.MapleGuildCharacter; import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; -import tools.data.output.MaplePacketLittleEndianWriter; /** * @@ -78,7 +74,7 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler { // "alliance" is only null at case 0x04 switch (b) { case 0x01: - Server.getInstance().allianceMessage(alliance.getId(), sendShowInfo(chr.getGuild().getAllianceId(), chr.getId()), -1, -1); + Server.getInstance().allianceMessage(alliance.getId(), GuildPackets.sendShowInfo(chr.getGuild().getAllianceId(), chr.getId()), -1, -1); break; case 0x02: { // Leave Alliance if (chr.getGuild().getAllianceId() == 0 || chr.getGuildId() < 1 || chr.getGuildRank() != 1) { @@ -228,53 +224,4 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler { alliance.dropMessage("'" + chr.getName() + "' has been reassigned to '" + alliance.getRankTitle(newRank) + "' in this Alliance."); } - private static Packet sendShowInfo(int allianceid, int playerid) { - OutPacket p = OutPacket.create(SendOpcode.ALLIANCE_OPERATION); - p.writeByte(0x02); - p.writeInt(allianceid); - p.writeInt(playerid); - return p; - } - - private static byte[] sendInvitation(int allianceid, int playerid, final String guildname) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x05); - mplew.writeInt(allianceid); - mplew.writeInt(playerid); - mplew.writeMapleAsciiString(guildname); - return mplew.getPacket(); - } - - private static byte[] sendChangeGuild(int allianceid, int playerid, int guildid, int option) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x07); - mplew.writeInt(allianceid); - mplew.writeInt(guildid); - mplew.writeInt(playerid); - mplew.write(option); - return mplew.getPacket(); - } - - private static byte[] sendChangeLeader(int allianceid, int playerid, int victim) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x08); - mplew.writeInt(allianceid); - mplew.writeInt(playerid); - mplew.writeInt(victim); - return mplew.getPacket(); - } - - private static byte[] sendChangeRank(int allianceid, int playerid, int int1, byte byte1) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x09); - mplew.writeInt(allianceid); - mplew.writeInt(playerid); - mplew.writeInt(int1); - mplew.writeInt(byte1); - return mplew.getPacket(); - } } diff --git a/src/main/java/net/server/guild/GuildPackets.java b/src/main/java/net/server/guild/GuildPackets.java index 92309848dd..f63a748da8 100644 --- a/src/main/java/net/server/guild/GuildPackets.java +++ b/src/main/java/net/server/guild/GuildPackets.java @@ -540,4 +540,51 @@ public class GuildPackets { p.writeByte(guild.getLogoColor()); return p; } + + + public static Packet sendShowInfo(int allianceid, int playerid) { + OutPacket p = OutPacket.create(SendOpcode.ALLIANCE_OPERATION); + p.writeByte(0x02); + p.writeInt(allianceid); + p.writeInt(playerid); + return p; + } + + public static Packet sendInvitation(int allianceid, int playerid, final String guildname) { + OutPacket p = OutPacket.create(SendOpcode.ALLIANCE_OPERATION); + p.writeByte(0x05); + p.writeInt(allianceid); + p.writeInt(playerid); + p.writeString(guildname); + return p; + } + + public static Packet sendChangeGuild(int allianceid, int playerid, int guildid, int option) { + OutPacket p = OutPacket.create(SendOpcode.ALLIANCE_OPERATION); + p.writeByte(0x07); + p.writeInt(allianceid); + p.writeInt(guildid); + p.writeInt(playerid); + p.writeByte(option); + return p; + } + + public static Packet sendChangeLeader(int allianceid, int playerid, int victim) { + OutPacket p = OutPacket.create(SendOpcode.ALLIANCE_OPERATION); + p.writeByte(0x08); + p.writeInt(allianceid); + p.writeInt(playerid); + p.writeInt(victim); + return p; + } + + public static Packet sendChangeRank(int allianceid, int playerid, int int1, byte byte1) { + OutPacket p = OutPacket.create(SendOpcode.ALLIANCE_OPERATION); + p.writeByte(0x09); + p.writeInt(allianceid); + p.writeInt(playerid); + p.writeInt(int1); + p.writeInt(byte1); + return p; + } } diff --git a/src/main/java/server/life/MapleMonster.java b/src/main/java/server/life/MapleMonster.java index dbf7e71dc0..9907157041 100644 --- a/src/main/java/server/life/MapleMonster.java +++ b/src/main/java/server/life/MapleMonster.java @@ -45,6 +45,7 @@ import server.MapleStatEffect; import server.TimerManager; import server.life.MapleLifeFactory.BanishInfo; import server.loot.MapleLootManager; +import server.maps.AbstractAnimatedMapleMapObject; import server.maps.MapleMap; import server.maps.MapleMapObjectType; import server.maps.MapleSummon; @@ -1324,7 +1325,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { aggroRemoveController(); setPosition(newPoint); - map.broadcastMessage(PacketCreator.moveMonster(this.getObjectId(), false, -1, 0, 0, 0, this.getPosition(), this.getIdleMovement(), getIdleMovementDataLength())); + map.broadcastMessage(PacketCreator.moveMonster(this.getObjectId(), false, -1, 0, 0, 0, this.getPosition(), this.getIdleMovement(), AbstractAnimatedMapleMapObject.IDLE_MOVEMENT_PACKET_LENGTH)); map.moveMonster(this, this.getPosition()); aggroUpdateController(); diff --git a/src/main/java/server/maps/AbstractAnimatedMapleMapObject.java b/src/main/java/server/maps/AbstractAnimatedMapleMapObject.java index e7b1f9d4c1..2623240159 100644 --- a/src/main/java/server/maps/AbstractAnimatedMapleMapObject.java +++ b/src/main/java/server/maps/AbstractAnimatedMapleMapObject.java @@ -23,29 +23,17 @@ package server.maps; import java.util.Arrays; +import net.packet.ByteBufOutPacket; +import net.packet.OutPacket; +import net.packet.Packet; import tools.data.input.ByteArrayByteStream; import tools.data.input.GenericSeekableLittleEndianAccessor; import tools.data.input.SeekableLittleEndianAccessor; -import tools.data.output.MaplePacketLittleEndianWriter; public abstract class AbstractAnimatedMapleMapObject extends AbstractMapleMapObject implements AnimatedMapleMapObject { - - static { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter((int) getIdleMovementDataLength()); - mplew.write(1); //movement command count - mplew.write(0); - mplew.writeShort(-1); //x - mplew.writeShort(-1); //y - mplew.writeShort(0); //xwobble - mplew.writeShort(0); //ywobble - mplew.writeShort(0); //fh - mplew.write(-1); //stance - mplew.writeShort(0); //duration - idleMovementPacketData = mplew.getPacket(); - } - - private static final byte[] idleMovementPacketData; - + public static final int IDLE_MOVEMENT_PACKET_LENGTH = 15; + private static final Packet IDLE_MOVEMENT_PACKET = createIdleMovementPacket(); + private int stance; @Override @@ -64,7 +52,8 @@ public abstract class AbstractAnimatedMapleMapObject extends AbstractMapleMapObj } public SeekableLittleEndianAccessor getIdleMovement() { - byte[] movementData = Arrays.copyOf(idleMovementPacketData, idleMovementPacketData.length); + final byte[] idleMovementBytes = IDLE_MOVEMENT_PACKET.getBytes(); + byte[] movementData = Arrays.copyOf(idleMovementBytes, idleMovementBytes.length); //seems wasteful to create a whole packet writer when only a few values are changed int x = getPosition().x; int y = getPosition().y; @@ -75,8 +64,18 @@ public abstract class AbstractAnimatedMapleMapObject extends AbstractMapleMapObj movementData[12] = (byte) (getStance() & 0xFF); return new GenericSeekableLittleEndianAccessor(new ByteArrayByteStream(movementData)); } - - public static long getIdleMovementDataLength() { - return 15; - } + + private static Packet createIdleMovementPacket() { + OutPacket p = new ByteBufOutPacket(); + p.writeByte(1); //movement command count + p.writeByte(0); + p.writeShort(-1); //x + p.writeShort(-1); //y + p.writeShort(0); //xwobble + p.writeShort(0); //ywobble + p.writeShort(0); //fh + p.writeByte(-1); //stance + p.writeShort(0); //duration + return p; + } } diff --git a/src/main/java/server/maps/MaplePlayerShop.java b/src/main/java/server/maps/MaplePlayerShop.java index 9b6edd44a1..8becaa0c3a 100644 --- a/src/main/java/server/maps/MaplePlayerShop.java +++ b/src/main/java/server/maps/MaplePlayerShop.java @@ -28,14 +28,12 @@ import client.inventory.MapleInventory; import client.inventory.MapleInventoryType; import client.inventory.manipulator.MapleInventoryManipulator; import client.inventory.manipulator.MapleKarmaManipulator; -import net.opcodes.SendOpcode; import net.packet.Packet; import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.factory.MonitoredReentrantLockFactory; import server.MapleTrade; import tools.PacketCreator; import tools.Pair; -import tools.data.output.MaplePacketLittleEndianWriter; import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; @@ -377,15 +375,6 @@ public class MaplePlayerShop extends AbstractMapleMapObject { } } - public static byte[] shopErrorMessage(int error, int type) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(0x0A); - mplew.write(type); - mplew.write(error); - return mplew.getPacket(); - } - public void broadcast(Packet packet) { MapleClient client = owner.getClient(); if (client != null) {