diff --git a/game/src/main/org/apollo/game/message/impl/ItemOnNpcMessage.java b/game/src/main/org/apollo/game/message/impl/ItemOnNpcMessage.java new file mode 100644 index 00000000..67e61827 --- /dev/null +++ b/game/src/main/org/apollo/game/message/impl/ItemOnNpcMessage.java @@ -0,0 +1,83 @@ +package org.apollo.game.message.impl; + +import org.apollo.net.message.Message; + +/** + * A {@link Message} sent by the client when a player uses an item on a npc. + * + * @author Lmctruck30 + */ +public final class ItemOnNpcMessage extends Message { + + /** + * The id of the item used on the Npc. + */ + private final int id; + + /** + * The index of the Npc the item was used on. + */ + private final int index; + + /** + * Item slot from inventory. + */ + private final int slot; + + /** + * The id of the interface the item was in, before it was used. + */ + private final int interfaceId; + + /** + * Creates the ItemOnNpcMessage. + * + * @param id The id of the item used on the Npc. + * @param index The index of the Npc the item was used on. + * @param slot The slot the item was in, in the players inventory. + * @param interfaceId The id of the interface the item was in, before it was used. + */ + public ItemOnNpcMessage(int id, int index, int slot, int interfaceId) { + this.id = id; + this.slot = slot; + this.index = index; + this.interfaceId = interfaceId; + } + + /** + * Gets the item id. + * + * @return The id. + */ + public int getId() { + return id; + } + + /** + * Gets the slot the item was in. + * + * @return The slot. + */ + public int getSlot() { + return slot; + } + + /** + * Gets the index of the Npc the item was used on. + * + * @return The index. + */ + public int getIndex() { + return index; + } + + /** + * Gets the id of the interface the item was in, before it was used. + * + * @return The interface id. + */ + public int getInterfaceId() { + return interfaceId; + } + +} diff --git a/game/src/main/org/apollo/game/release/r317/ItemOnNpcMessageDecoder.java b/game/src/main/org/apollo/game/release/r317/ItemOnNpcMessageDecoder.java new file mode 100644 index 00000000..6d9eefcd --- /dev/null +++ b/game/src/main/org/apollo/game/release/r317/ItemOnNpcMessageDecoder.java @@ -0,0 +1,30 @@ +package org.apollo.game.release.r317; + +import org.apollo.game.message.impl.ItemOnNpcMessage; +import org.apollo.net.codec.game.DataOrder; +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.GamePacketReader; +import org.apollo.net.release.MessageDecoder; + +/** + * A {@link MessageDecoder} for the {@link ItemOnNpcMessage}. + * + * @author Lmctruck30 + */ +public final class ItemOnNpcMessageDecoder extends MessageDecoder { + + @Override + public ItemOnNpcMessage decode(GamePacket packet) { + GamePacketReader reader = new GamePacketReader(packet); + + int id = (int) reader.getUnsigned(DataType.SHORT, DataTransformation.ADD); + int index = (int) reader.getUnsigned(DataType.SHORT, DataTransformation.ADD); + int slot = (int) reader.getSigned(DataType.SHORT, DataOrder.LITTLE); + int interfaceId = (int) reader.getUnsigned(DataType.SHORT, DataTransformation.ADD); + + return new ItemOnNpcMessage(id, index, slot, interfaceId); + } + +} \ No newline at end of file diff --git a/game/src/main/org/apollo/game/release/r317/Release317.java b/game/src/main/org/apollo/game/release/r317/Release317.java index 00763714..dd2da433 100644 --- a/game/src/main/org/apollo/game/release/r317/Release317.java +++ b/game/src/main/org/apollo/game/release/r317/Release317.java @@ -61,12 +61,13 @@ public final class Release317 extends Release { /** * The incoming packet lengths array. */ - public static final int[] PACKET_LENGTHS = { 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, // 0 + public static final int[] PACKET_LENGTHS = { + 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, // 0 0, 0, 0, 0, 8, 0, 6, 2, 2, 0, // 10 0, 2, 0, 6, 0, 12, 0, 0, 0, 0, // 20 0, 0, 0, 0, 0, 8, 4, 0, 0, 2, // 30 2, 6, 0, 6, 0, -1, 0, 0, 0, 0, // 40 - 0, 0, 0, 12, 0, 0, 0, 0, 8, 0, // 50 + 0, 0, 0, 12, 0, 0, 0, 8, 8, 0, // 50 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, // 60 6, 0, 2, 2, 8, 6, 0, -1, 0, 6, // 70 0, 0, 0, 0, 0, 1, 4, 6, 0, 0, // 80 @@ -136,6 +137,7 @@ public final class Release317 extends Release { register(120, new FlashingTabClickedMessageDecoder()); register(53, new ItemOnItemMessageDecoder()); + register(57, new ItemOnNpcMessageDecoder()); register(237, new MagicOnItemMessageDecoder()); register(249, new MagicOnPlayerMessageDecoder()); diff --git a/game/src/main/org/apollo/game/release/r377/ItemOnNpcMessageDecoder.java b/game/src/main/org/apollo/game/release/r377/ItemOnNpcMessageDecoder.java new file mode 100644 index 00000000..8600b17b --- /dev/null +++ b/game/src/main/org/apollo/game/release/r377/ItemOnNpcMessageDecoder.java @@ -0,0 +1,30 @@ +package org.apollo.game.release.r377; + +import org.apollo.game.message.impl.ItemOnNpcMessage; +import org.apollo.net.codec.game.DataOrder; +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.GamePacketReader; +import org.apollo.net.release.MessageDecoder; + +/** + * A {@link MessageDecoder} for the {@link ItemOnNpcMessage}. + * + * @author Major + */ +public final class ItemOnNpcMessageDecoder extends MessageDecoder { + + @Override + public ItemOnNpcMessage decode(GamePacket packet) { + GamePacketReader reader = new GamePacketReader(packet); + + int index = (int) reader.getUnsigned(DataType.SHORT); + int id = (int) reader.getSigned(DataType.SHORT, DataOrder.LITTLE); + int widget = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE, DataTransformation.ADD); + int slot = (int) reader.getUnsigned(DataType.SHORT); + + return new ItemOnNpcMessage(id, index, slot, widget); + } + +} diff --git a/game/src/main/org/apollo/game/release/r377/Release377.java b/game/src/main/org/apollo/game/release/r377/Release377.java index 71460504..47464f5f 100644 --- a/game/src/main/org/apollo/game/release/r377/Release377.java +++ b/game/src/main/org/apollo/game/release/r377/Release377.java @@ -135,6 +135,7 @@ public final class Release377 extends Release { register(119, new FlashingTabClickedMessageDecoder()); register(1, new ItemOnItemMessageDecoder()); + register(57, new ItemOnNpcMessageDecoder()); register(36, new MagicOnItemMessageDecoder()); register(31, new MagicOnPlayerMessageDecoder()); register(104, new MagicOnNpcMessageDecoder());