diff --git a/src/org/apollo/game/message/impl/RemoveObjectMessage.java b/src/org/apollo/game/message/impl/RemoveObjectMessage.java new file mode 100644 index 00000000..910b96fd --- /dev/null +++ b/src/org/apollo/game/message/impl/RemoveObjectMessage.java @@ -0,0 +1,76 @@ +package org.apollo.game.message.impl; + +import org.apollo.game.message.Message; +import org.apollo.game.model.entity.GameObject; + +/** + * A {@link Message} sent to the client to remove an object from a tile. + * + * @author Major + */ +public final class RemoveObjectMessage extends Message { + + /** + * The orientation of the object. + */ + private final int orientation; + + /** + * The position of the object. + */ + private final int positionOffset; + + /** + * The type of the object. + */ + private final int type; + + /** + * Creates the RemoveObjectMessage. + * + * @param object The {@link GameObject} to send. + */ + public RemoveObjectMessage(GameObject object) { + this(object, 0); + } + + /** + * Creates the RemoveObjectMessage. + * + * @param object The {@link GameObject} to send. + * @param positionOffset The offset of the object's position from the sector's central position. + */ + public RemoveObjectMessage(GameObject object, int positionOffset) { + this.positionOffset = positionOffset; + this.type = object.getType(); + this.orientation = object.getOrientation(); + } + + /** + * Gets the orientation of the object. + * + * @return The orientation. + */ + public int getOrientation() { + return orientation; + } + + /** + * Gets the position offset of the object. + * + * @return The position offset. + */ + public int getPositionOffset() { + return positionOffset; + } + + /** + * Gets the orientation of the object. + * + * @return The type. + */ + public int getType() { + return type; + } + +} \ No newline at end of file diff --git a/src/org/apollo/game/message/impl/SendObjectMessage.java b/src/org/apollo/game/message/impl/SendObjectMessage.java index da40741d..02c4b216 100644 --- a/src/org/apollo/game/message/impl/SendObjectMessage.java +++ b/src/org/apollo/game/message/impl/SendObjectMessage.java @@ -31,15 +31,25 @@ public final class SendObjectMessage extends Message { private final int type; /** - * Creates the send object message. + * Creates the SendObjectMessage. * * @param object The {@link GameObject} to send. */ public SendObjectMessage(GameObject object) { + this(object, 0); + } + + /** + * Creates the SendObjectMessage. + * + * @param object The {@link GameObject} to send. + * @param positionOffset The offset of the object's position from the sector's central position. + */ + public SendObjectMessage(GameObject object, int positionOffset) { this.id = object.getId(); - this.positionOffset = 0; + this.positionOffset = positionOffset; this.type = object.getType(); - this.orientation = object.getRotation(); + this.orientation = object.getOrientation(); } /** diff --git a/src/org/apollo/game/model/entity/GameObject.java b/src/org/apollo/game/model/entity/GameObject.java index 8592c7a1..e5bdc172 100644 --- a/src/org/apollo/game/model/entity/GameObject.java +++ b/src/org/apollo/game/model/entity/GameObject.java @@ -69,7 +69,7 @@ public final class GameObject extends Entity { * * @return The orientation. */ - public int getRotation() { + public int getOrientation() { return packed & 0x3; } @@ -89,7 +89,7 @@ public final class GameObject extends Entity { @Override public String toString() { - return MoreObjects.toStringHelper(this).add("id", getId()).add("type", getType()).add("rotation", getRotation()).toString(); + return MoreObjects.toStringHelper(this).add("id", getId()).add("type", getType()).add("orientation", getOrientation()).toString(); } } \ No newline at end of file diff --git a/src/org/apollo/net/release/r317/Release317.java b/src/org/apollo/net/release/r317/Release317.java index 39c77ab4..54d16065 100644 --- a/src/org/apollo/net/release/r317/Release317.java +++ b/src/org/apollo/net/release/r317/Release317.java @@ -24,6 +24,7 @@ import org.apollo.game.message.impl.OpenSidebarMessage; import org.apollo.game.message.impl.PlayerSynchronizationMessage; import org.apollo.game.message.impl.PositionMessage; import org.apollo.game.message.impl.PrivacyOptionMessage; +import org.apollo.game.message.impl.RemoveObjectMessage; import org.apollo.game.message.impl.RemoveTileItemMessage; import org.apollo.game.message.impl.SectorChangeMessage; import org.apollo.game.message.impl.SendFriendMessage; @@ -206,6 +207,7 @@ public final class Release317 extends Release { register(UpdateTileItemMessage.class, new UpdateTileItemMessageEncoder()); register(RemoveTileItemMessage.class, new RemoveTileItemMessageEncoder()); register(SendObjectMessage.class, new SendObjectMessageEncoder()); + register(RemoveObjectMessage.class, new RemoveObjectMessageEncoder()); register(ForwardPrivateChatMessage.class, new ForwardPrivateChatMessageEncoder()); register(FriendServerStatusMessage.class, new FriendServerStatusMessageEncoder()); diff --git a/src/org/apollo/net/release/r317/RemoveObjectMessageEncoder.java b/src/org/apollo/net/release/r317/RemoveObjectMessageEncoder.java new file mode 100644 index 00000000..20036541 --- /dev/null +++ b/src/org/apollo/net/release/r317/RemoveObjectMessageEncoder.java @@ -0,0 +1,25 @@ +package org.apollo.net.release.r317; + +import org.apollo.game.message.impl.RemoveObjectMessage; +import org.apollo.net.codec.game.DataTransformation; +import org.apollo.net.codec.game.DataType; +import org.apollo.net.codec.game.GamePacket; +import org.apollo.net.codec.game.GamePacketBuilder; +import org.apollo.net.release.MessageEncoder; + +/** + * A {@link MessageEncoder} for the {@link RemoveObjectMessage}. + * + * @author Major + */ +public final class RemoveObjectMessageEncoder extends MessageEncoder { + + @Override + public GamePacket encode(RemoveObjectMessage message) { + GamePacketBuilder builder = new GamePacketBuilder(101); + builder.put(DataType.BYTE, DataTransformation.SUBTRACT, message.getType() << 2 | message.getOrientation()); + builder.put(DataType.BYTE, message.getPositionOffset()); + return builder.toGamePacket(); + } + +} \ No newline at end of file diff --git a/src/org/apollo/net/release/r317/SendObjectMessageEncoder.java b/src/org/apollo/net/release/r317/SendObjectMessageEncoder.java index 67cf38c6..4a815aee 100644 --- a/src/org/apollo/net/release/r317/SendObjectMessageEncoder.java +++ b/src/org/apollo/net/release/r317/SendObjectMessageEncoder.java @@ -20,7 +20,7 @@ public final class SendObjectMessageEncoder extends MessageEncoder { + + @Override + public GamePacket encode(RemoveObjectMessage message) { + GamePacketBuilder builder = new GamePacketBuilder(101); + builder.put(DataType.BYTE, DataTransformation.SUBTRACT, message.getPositionOffset()); + builder.put(DataType.BYTE, DataTransformation.SUBTRACT, message.getType() << 2 | message.getOrientation()); + return builder.toGamePacket(); + } + +} \ No newline at end of file diff --git a/src/org/apollo/net/release/r377/SendObjectMessageEncoder.java b/src/org/apollo/net/release/r377/SendObjectMessageEncoder.java index 533534c3..69d7e1a8 100644 --- a/src/org/apollo/net/release/r377/SendObjectMessageEncoder.java +++ b/src/org/apollo/net/release/r377/SendObjectMessageEncoder.java @@ -18,7 +18,7 @@ public final class SendObjectMessageEncoder extends MessageEncoder