diff --git a/src/org/apollo/game/message/impl/FifthNpcActionMessage.java b/src/org/apollo/game/message/impl/FifthNpcActionMessage.java new file mode 100644 index 00000000..6dddd036 --- /dev/null +++ b/src/org/apollo/game/message/impl/FifthNpcActionMessage.java @@ -0,0 +1,19 @@ +package org.apollo.game.message.impl; + +/** + * The fifth {@link NpcActionMessage}. + * + * @author Major + */ +public final class FifthNpcActionMessage extends NpcActionMessage { + + /** + * Creates a new fifth npc action message. + * + * @param index The index of the npc. + */ + public FifthNpcActionMessage(int index) { + super(5, index); + } + +} \ No newline at end of file diff --git a/src/org/apollo/game/message/impl/FourthNpcActionMessage.java b/src/org/apollo/game/message/impl/FourthNpcActionMessage.java new file mode 100644 index 00000000..2ecd1ae1 --- /dev/null +++ b/src/org/apollo/game/message/impl/FourthNpcActionMessage.java @@ -0,0 +1,19 @@ +package org.apollo.game.message.impl; + +/** + * The fourth {@link NpcActionMessage}. + * + * @author Major + */ +public final class FourthNpcActionMessage extends NpcActionMessage { + + /** + * Creates a new fourth npc action message. + * + * @param index The index of the npc. + */ + public FourthNpcActionMessage(int index) { + super(4, index); + } + +} \ No newline at end of file diff --git a/src/org/apollo/game/message/impl/HintIconMessage.java b/src/org/apollo/game/message/impl/HintIconMessage.java new file mode 100644 index 00000000..dff7f252 --- /dev/null +++ b/src/org/apollo/game/message/impl/HintIconMessage.java @@ -0,0 +1,102 @@ +package org.apollo.game.message.impl; + +import java.util.Optional; + +import org.apollo.game.message.Message; +import org.apollo.game.model.Position; + +/** + * A {@link Message} that displays a hint icon over an Npc, tile, or player. + * + * @author Major + */ +public final class HintIconMessage extends Message { + + // TODO identify the other types and use an enum. + + /** + * The hint icon type for Npcs. + */ + public static final int NPC_TYPE = 1; + + /** + * The hint icon type for Players. + */ + public static final int PLAYER_TYPE = 10; + + /** + * Creates a HintIconMessage for the Npc with the specified index. + * + * @param index The index of the Npc. + * @return The HintIconMessage. + */ + public static HintIconMessage forNpc(int index) { + return new HintIconMessage(NPC_TYPE, Optional.of(index), Optional.empty()); + } + + /** + * Creates a HintIconMessage for the Player with the specified index. + * + * @param index The index of the Player. + * @return The HintIconMessage. + */ + public static HintIconMessage forPlayer(int index) { + return new HintIconMessage(PLAYER_TYPE, Optional.of(index), Optional.empty()); + } + + /** + * The index of the entity, if applicable. + */ + private final Optional index; + + /** + * The Position of the tile, if applicable. + */ + private final Optional position; + + /** + * The type of entity this HintIconMessage is directed at. + */ + private final int type; + + /** + * Creates the HintIconMessage. + * + * @param type The type of entity this HintIconMessage is directed at. + * @param index The index of the entity, if applicable. + * @param position The Position of the tile, if applicable. + */ + private HintIconMessage(int type, Optional index, Optional position) { + this.type = type; + this.index = index; + this.position = position; + } + + /** + * Gets the index of the entity, if applicable. + * + * @return The index. + */ + public Optional getIndex() { + return index; + } + + /** + * Gets the {@link Position} of the tile, if applicable. + * + * @return The Position. + */ + public Optional getPosition() { + return position; + } + + /** + * Gets the type this HintIconMessage is directed at. + * + * @return The type. + */ + public int getType() { + return type; + } + +} \ No newline at end of file diff --git a/src/org/apollo/net/release/r317/HintIconMessageEncoder.java b/src/org/apollo/net/release/r317/HintIconMessageEncoder.java new file mode 100644 index 00000000..b8be56c3 --- /dev/null +++ b/src/org/apollo/net/release/r317/HintIconMessageEncoder.java @@ -0,0 +1,34 @@ +package org.apollo.net.release.r317; + +import org.apollo.game.message.impl.HintIconMessage; +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 HintIconMessage}. + * + * @author Major + */ +public final class HintIconMessageEncoder extends MessageEncoder { + + @Override + public GamePacket encode(HintIconMessage message) { + GamePacketBuilder builder = new GamePacketBuilder(254); + int type = message.getType(); + builder.put(DataType.BYTE, type); + + switch (type) { + case HintIconMessage.NPC_TYPE: + case HintIconMessage.PLAYER_TYPE: + builder.put(DataType.SHORT, message.getIndex().get()); + break; + default: + throw new IllegalStateException("Unsupported hint icon type " + type + "."); + } + + return builder.toGamePacket(); + } + +} \ 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 4d4a48ea..b90d0308 100644 --- a/src/org/apollo/net/release/r317/Release317.java +++ b/src/org/apollo/net/release/r317/Release317.java @@ -9,6 +9,7 @@ import org.apollo.game.message.impl.DisplayTabInterfaceMessage; import org.apollo.game.message.impl.EnterAmountMessage; import org.apollo.game.message.impl.ForwardPrivateChatMessage; import org.apollo.game.message.impl.FriendServerStatusMessage; +import org.apollo.game.message.impl.HintIconMessage; import org.apollo.game.message.impl.IdAssignmentMessage; import org.apollo.game.message.impl.IgnoreListMessage; import org.apollo.game.message.impl.LogoutMessage; @@ -145,6 +146,7 @@ public final class Release317 extends Release { register(155, new FirstNpcActionMessageDecoder()); register(17, new SecondNpcActionMessageDecoder()); register(21, new ThirdNpcActionMessageDecoder()); + register(236, new TakeTileItemMessageDecoder()); register(192, new ItemOnObjectMessageDecoder()); @@ -201,6 +203,7 @@ public final class Release317 extends Release { register(FriendServerStatusMessage.class, new FriendServerStatusMessageEncoder()); register(IgnoreListMessage.class, new IgnoreListMessageEncoder()); register(SendFriendMessage.class, new SendFriendMessageEncoder()); + register(HintIconMessage.class, new HintIconMessageEncoder()); } } \ No newline at end of file diff --git a/src/org/apollo/net/release/r377/HintIconMessageEncoder.java b/src/org/apollo/net/release/r377/HintIconMessageEncoder.java new file mode 100644 index 00000000..d4e39ff6 --- /dev/null +++ b/src/org/apollo/net/release/r377/HintIconMessageEncoder.java @@ -0,0 +1,34 @@ +package org.apollo.net.release.r377; + +import org.apollo.game.message.impl.HintIconMessage; +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 HintIconMessage}. + * + * @author Major + */ +public final class HintIconMessageEncoder extends MessageEncoder { + + @Override + public GamePacket encode(HintIconMessage message) { + GamePacketBuilder builder = new GamePacketBuilder(199); + int type = message.getType(); + builder.put(DataType.BYTE, type); + + switch (type) { + case HintIconMessage.NPC_TYPE: + case HintIconMessage.PLAYER_TYPE: + builder.put(DataType.SHORT, message.getIndex().get()); + break; + default: + throw new IllegalStateException("Unsupported hint icon type " + type + "."); + } + + return builder.toGamePacket(); + } + +} \ No newline at end of file diff --git a/src/org/apollo/net/release/r377/Release377.java b/src/org/apollo/net/release/r377/Release377.java index 9b368738..ee731707 100644 --- a/src/org/apollo/net/release/r377/Release377.java +++ b/src/org/apollo/net/release/r377/Release377.java @@ -9,6 +9,7 @@ import org.apollo.game.message.impl.DisplayTabInterfaceMessage; import org.apollo.game.message.impl.EnterAmountMessage; import org.apollo.game.message.impl.ForwardPrivateChatMessage; import org.apollo.game.message.impl.FriendServerStatusMessage; +import org.apollo.game.message.impl.HintIconMessage; import org.apollo.game.message.impl.IdAssignmentMessage; import org.apollo.game.message.impl.IgnoreListMessage; import org.apollo.game.message.impl.LogoutMessage; @@ -19,8 +20,8 @@ import org.apollo.game.message.impl.OpenInterfaceSidebarMessage; 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.SectorChangeMessage; import org.apollo.game.message.impl.RemoveTileItemMessage; +import org.apollo.game.message.impl.SectorChangeMessage; import org.apollo.game.message.impl.SendFriendMessage; import org.apollo.game.message.impl.SendObjectMessage; import org.apollo.game.message.impl.ServerChatMessage; @@ -40,6 +41,7 @@ import org.apollo.game.message.impl.UpdateTileItemMessage; import org.apollo.game.message.impl.UpdateWeightMessage; import org.apollo.net.meta.PacketMetaDataGroup; import org.apollo.net.release.Release; +import org.apollo.net.release.r317.HintIconMessageEncoder; /** * A {@link Release} implementation for the 377 protocol. @@ -128,7 +130,7 @@ public final class Release377 extends Release { register(36, new MagicOnItemMessageDecoder()); register(187, new FocusUpdateMessageDecoder()); - register(19, new MouseClickedMessageDecoder()); + register(19, new MouseClickedMessageDecoder()); register(171, new FlaggedMouseEventMessageDecoder()); register(140, new ArrowKeyMessageDecoder()); register(176, new PrivacyOptionMessageDecoder()); @@ -196,6 +198,7 @@ public final class Release377 extends Release { register(FriendServerStatusMessage.class, new FriendServerStatusMessageEncoder()); register(IgnoreListMessage.class, new IgnoreListMessageEncoder()); register(SendFriendMessage.class, new SendFriendMessageEncoder()); + register(HintIconMessage.class, new HintIconMessageEncoder()); } } \ No newline at end of file