Merge pull request #331 from Major-/npc-item

Add support for decoding Item on Npc messages
This commit is contained in:
Gary Tierney
2017-05-25 15:15:17 +01:00
committed by GitHub
5 changed files with 148 additions and 2 deletions
@@ -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;
}
}
@@ -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<ItemOnNpcMessage> {
@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);
}
}
@@ -61,12 +61,13 @@ public final class Release317 extends Release {
/** /**
* The incoming packet lengths array. * 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, 0, 0, 0, 8, 0, 6, 2, 2, 0, // 10
0, 2, 0, 6, 0, 12, 0, 0, 0, 0, // 20 0, 2, 0, 6, 0, 12, 0, 0, 0, 0, // 20
0, 0, 0, 0, 0, 8, 4, 0, 0, 2, // 30 0, 0, 0, 0, 0, 8, 4, 0, 0, 2, // 30
2, 6, 0, 6, 0, -1, 0, 0, 0, 0, // 40 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 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, // 60
6, 0, 2, 2, 8, 6, 0, -1, 0, 6, // 70 6, 0, 2, 2, 8, 6, 0, -1, 0, 6, // 70
0, 0, 0, 0, 0, 1, 4, 6, 0, 0, // 80 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(120, new FlashingTabClickedMessageDecoder());
register(53, new ItemOnItemMessageDecoder()); register(53, new ItemOnItemMessageDecoder());
register(57, new ItemOnNpcMessageDecoder());
register(237, new MagicOnItemMessageDecoder()); register(237, new MagicOnItemMessageDecoder());
register(249, new MagicOnPlayerMessageDecoder()); register(249, new MagicOnPlayerMessageDecoder());
@@ -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<ItemOnNpcMessage> {
@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);
}
}
@@ -135,6 +135,7 @@ public final class Release377 extends Release {
register(119, new FlashingTabClickedMessageDecoder()); register(119, new FlashingTabClickedMessageDecoder());
register(1, new ItemOnItemMessageDecoder()); register(1, new ItemOnItemMessageDecoder());
register(57, new ItemOnNpcMessageDecoder());
register(36, new MagicOnItemMessageDecoder()); register(36, new MagicOnItemMessageDecoder());
register(31, new MagicOnPlayerMessageDecoder()); register(31, new MagicOnPlayerMessageDecoder());
register(104, new MagicOnNpcMessageDecoder()); register(104, new MagicOnNpcMessageDecoder());