Add magic plugin, more decoders and commands.

This commit is contained in:
Major-
2013-11-03 23:48:17 +00:00
parent ac4c8408a3
commit 82b12e30a2
58 changed files with 1730 additions and 96 deletions
@@ -67,93 +67,90 @@ public final class ItemDefinitionDecoder {
private ItemDefinition decode(int id, ByteBuffer buffer) {
ItemDefinition definition = new ItemDefinition(id);
while (true) {
int code = buffer.get() & 0xFF;
int opcode = buffer.get() & 0xFF;
if (code == 0) {
if (opcode == 0) {
return definition;
} else if (code == 1) {
} else if (opcode == 1) {
buffer.getShort();// & 0xFFFF; // model Id
} else if (code == 2) {
} else if (opcode == 2) {
definition.setName(ByteBufferUtil.readString(buffer));
} else if (code == 3) {
} else if (opcode == 3) {
definition.setDescription(ByteBufferUtil.readString(buffer));
} else if (code == 4) {
} else if (opcode == 4) {
buffer.getShort();// & 0xFFFF; // sprite scale
} else if (code == 5) {
} else if (opcode == 5) {
buffer.getShort();// & 0xFFFF; // sprite pitch
} else if (code == 6) {
} else if (opcode == 6) {
buffer.getShort();// & 0xFFFF; //sprite camera roll
} else if (code == 7) {
} else if (opcode == 7) {
buffer.getShort(); // sprite dX
} else if (code == 8) {
} else if (opcode == 8) {
buffer.getShort(); // sprite dY
} else if (code == 10) {
} else if (opcode == 10) {
buffer.getShort();
} else if (code == 11) {
} else if (opcode == 11) {
definition.setStackable(true);
} else if (code == 12) {
buffer.getInt(); // model height
} else if (code == 16) {
} else if (opcode == 12) {
definition.setValue(buffer.getInt());
} else if (opcode == 16) {
definition.setMembersOnly(true);
} else if (code == 23) {
} else if (opcode == 23) {
buffer.getShort(); // & 0xFFFF; //primaryMaleEquipModelId
buffer.get(); // maleEquipYTranslation
} else if (code == 24) {
} else if (opcode == 24) {
buffer.getShort(); // & 0xFFFF; // secondaryMaleEquipModelId
} else if (code == 25) {
} else if (opcode == 25) {
buffer.getShort(); // & 0xFFFF; // primaryFemaleEquipModelId
buffer.get(); // femaleEquipYTranslation
} else if (code == 26) {
} else if (opcode == 26) {
buffer.getShort(); // & 0xFFFF; // secondaryFemaleEquipModelId
} else if (code >= 30 && code < 35) {
} else if (opcode >= 30 && opcode < 35) {
String str = ByteBufferUtil.readString(buffer);
if (str.equalsIgnoreCase("hidden")) {
str = null;
}
definition.setGroundAction(code - 30, str);
} else if (code >= 35 && code < 40) {
String str = ByteBufferUtil.readString(buffer);
definition.setInventoryAction(code - 35, str);
} else if (code == 40) {
definition.setGroundAction(opcode - 30, str);
} else if (opcode >= 35 && opcode < 40) {
definition.setInventoryAction(opcode - 35, ByteBufferUtil.readString(buffer));
} else if (opcode == 40) {
int colourCount = buffer.get() & 0xFF;
for (int i = 0; i < colourCount; i++) {
buffer.getShort(); // & 0xFFFF; // original colour
buffer.getShort(); // & 0xFFFF; // replacement colour
}
} else if (code == 78) {
} else if (opcode == 78) {
buffer.getShort(); // & 0xFFFF; // tertiaryMaleEquipModelId
} else if (code == 79) {
} else if (opcode == 79) {
buffer.getShort(); // & 0xFFFF; // tertiaryFemaleEquipModelId
} else if (code == 90) {
} else if (opcode == 90) {
buffer.getShort(); // & 0xFFFF; // primaryMaleHeadPiece
} else if (code == 91) {
} else if (opcode == 91) {
buffer.getShort(); // & 0xFFFF; // primaryFemaleHeadPiece
} else if (code == 92) {
} else if (opcode == 92) {
buffer.getShort(); // & 0xFFFF; // secondaryMaleHeadPiece
} else if (code == 93) {
} else if (opcode == 93) {
buffer.getShort(); // & 0xFFFF; // secondaryFemaleHeadPiece
} else if (code == 95) {
} else if (opcode == 95) {
buffer.getShort(); // & 0xFFFF; // spriteCameraYaw
} else if (code == 97) {
int noteInfoId = buffer.getShort() & 0xFFFF;
definition.setNoteInfoId(noteInfoId);
} else if (code == 98) {
int noteGraphicId = buffer.getShort() & 0xFFFF;
definition.setNoteGraphicId(noteGraphicId);
} else if (code >= 100 && code < 110) {
} else if (opcode == 97) {
definition.setNoteInfoId(buffer.getShort() & 0xFFFF);
} else if (opcode == 98) {
definition.setNoteGraphicId(buffer.getShort() & 0xFFFF);
} else if (opcode >= 100 && opcode < 110) {
buffer.getShort(); // & 0xFFFF; // stack id
buffer.getShort(); // & 0xFFFF; // stack size
} else if (code == 110) {
} else if (opcode == 110) {
buffer.getShort(); // & 0xFFFF; // groundScaleX
} else if (code == 111) {
} else if (opcode == 111) {
buffer.getShort(); // & 0xFFFF; // groundScaleY
} else if (code == 112) {
} else if (opcode == 112) {
buffer.getShort(); // & 0xFFFF; // groundScaleZ
} else if (code == 113) {
} else if (opcode == 113) {
buffer.get(); // light ambiance
} else if (code == 114) {
} else if (opcode == 114) {
buffer.getShort(); // * 5; // light diffusion
} else if (code == 115) {
} else if (opcode == 115) {
definition.setTeam(buffer.get() & 0xFF);
}
}
@@ -0,0 +1,48 @@
package org.apollo.game.event.impl;
import org.apollo.game.event.Event;
/**
* An {@link Event} sent by the client when the user has pressed an arrow key.
*
* @author Major
*/
public final class ArrowKeyEvent extends Event {
/**
* The camera roll.
*/
private final int roll;
/**
* The camera yaw.
*/
private final int yaw;
/**
* Creates a new arrow key event.
*/
public ArrowKeyEvent(int roll, int yaw) {
this.roll = roll;
this.yaw = yaw;
}
/**
* Gets the roll of the camera.
*
* @return The roll.
*/
public int getRoll() {
return roll;
}
/**
* Gets the yaw of the camera.
*
* @return The yaw.
*/
public int getYaw() {
return yaw;
}
}
@@ -0,0 +1,51 @@
package org.apollo.game.event.impl;
import org.apollo.game.event.Event;
/**
* An event sent when the user moves the camera.
*
* @author Toby
*/
public class CameraMovementEvent extends Event {
/**
* The camera x.
*/
private final int cameraX;
/**
* The camera y.
*/
private final int cameraY;
/**
* Creates a new camera movement event.
*
* @param cameraX The camera x.
* @param cameraY The camera y.
*/
public CameraMovementEvent(int cameraX, int cameraY) {
this.cameraX = cameraX;
this.cameraY = cameraY;
}
/**
* Gets the camera x.
*
* @return The camera x.
*/
public int getCameraX() {
return cameraX;
}
/**
* Gets the camera y.
*
* @return The camera y.
*/
public int getCameraY() {
return cameraY;
}
}
@@ -0,0 +1,12 @@
package org.apollo.game.event.impl;
import org.apollo.game.event.Event;
/**
* An outgoing event sent to reset the animations of every character.
*
* @author Major
*/
public class CharacterAnimationResetEvent extends Event {
}
@@ -0,0 +1,35 @@
package org.apollo.game.event.impl;
import org.apollo.game.event.Event;
/**
* An event which is sent to the client to switch the currently displayed tab interface.
*
* @author Chris Fletcher
*/
public final class DisplayTabInterfaceEvent extends Event {
/**
* The tab index.
*/
private final int tab;
/**
* Creates a new display tab interface event.
*
* @param tab The index of the tab to display.
*/
public DisplayTabInterfaceEvent(int tab) {
this.tab = tab;
}
/**
* Gets the index of the tab to display.
*
* @return The tab index.
*/
public int getTab() {
return tab;
}
}
@@ -0,0 +1,19 @@
package org.apollo.game.event.impl;
/**
* The first {@link NpcActionEvent}.
*
* @author Major
*/
public class FirstNpcActionEvent extends NpcActionEvent {
/**
* Creates a new first npc action event.
*
* @param npcIndex The index of the npc.
*/
public FirstNpcActionEvent(int npcIndex) {
super(1, npcIndex);
}
}
@@ -0,0 +1,35 @@
package org.apollo.game.event.impl;
import org.apollo.game.event.Event;
/**
* Represents a change in the client's focus (if it is the active window).
*
* @author Major
*/
public class FocusUpdateEvent extends Event {
/**
* Dictates whether the client is focused or not.
*/
private final boolean focused;
/**
* Creates a new focus update event.
*
* @param update The data received.
*/
public FocusUpdateEvent(boolean focused) {
this.focused = focused;
}
/**
* Indicates whether or not the client is focused.
*
* @return {@code true} if the client is focused, otherwise {@code false}.
*/
public boolean isFocused() {
return focused;
}
}
@@ -0,0 +1,37 @@
package org.apollo.game.event.impl;
/**
* An event sent by the client when a player casts a spell on an inventory item.
*
* @author Chris Fletcher
*/
public final class MagicOnItemEvent extends InventoryItemEvent {
/**
* The spell id.
*/
private final int spell;
/**
* Creates a new magic on item event.
*
* @param interfaceId The interface id.
* @param id The item id.
* @param slot The item slot.
* @param spell The spell id.
*/
public MagicOnItemEvent(int interfaceId, int id, int slot, int spell) {
super(0, interfaceId, id, slot);
this.spell = spell;
}
/**
* Gets the spell id.
*
* @return The spell id.
*/
public int getSpellId() {
return spell;
}
}
@@ -0,0 +1,12 @@
package org.apollo.game.event.impl;
import org.apollo.game.event.Event;
/**
* An{@link Event} sent when the player has clicked on something. TODO
*
* @author Major
*/
public class MouseClickEvent extends Event {
}
@@ -0,0 +1,51 @@
package org.apollo.game.event.impl;
import org.apollo.game.event.Event;
/**
* An {@link Event} representing the clicking of an npc menu action.
*
* @author Major
*/
public class NpcActionEvent extends Event {
/**
* The action number .
*/
private final int action;
/**
* The npc index.
*/
private final int npcIndex;
/**
* Creates a new npc action event.
*
* @param action The action number.
* @param npcIndex The index of the npc.
*/
public NpcActionEvent(int action, int npcIndex) {
this.action = action;
this.npcIndex = npcIndex;
}
/**
* Gets the menu action number clicked.
*
* @return The action number.
*/
public int getAction() {
return action;
}
/**
* Gets the index of the npc clicked.
*
* @return The npc index.
*/
public int getNpcIndex() {
return npcIndex;
}
}
@@ -0,0 +1,19 @@
package org.apollo.game.event.impl;
/**
* The second {@link NpcActionEvent}.
*
* @author Major
*/
public class SecondNpcActionEvent extends NpcActionEvent {
/**
* Creates a new second npc action event.
*
* @param npcIndex The index of the npc.
*/
public SecondNpcActionEvent(int npcIndex) {
super(2, npcIndex);
}
}
@@ -0,0 +1,47 @@
package org.apollo.game.event.impl;
import org.apollo.game.event.Event;
/**
* A message sent after a short period of time containing random data.
*
* @author Major
*/
public class SpamPacketEvent extends Event {
/**
* Data sent by the spam packet.
*/
private final byte[] data;
/**
* Creates a new spam packet event.
*
* @param data The data sent.
*/
public SpamPacketEvent(byte[] data) {
this.data = data;
}
/**
* Gets the data sent.
*
* @return The data.
*/
public byte[] getData() {
return data;
}
// 0
// random * 256
// 101
// 233
// 45092 (short)
// 35784 if random * 2= 0
// random * 256
// 64
// 38
// Math.random() * 65536
// Math.random() * 65536
// offset - start offset (exc. the first 0 sent) - size byte.
}
@@ -0,0 +1,19 @@
package org.apollo.game.event.impl;
/**
* The third {@link NpcActionEvent}.
*
* @author Major
*/
public class ThirdNpcActionEvent extends NpcActionEvent {
/**
* Creates a new third npc action event.
*
* @param npcIndex The index of the npc.
*/
public ThirdNpcActionEvent(int npcIndex) {
super(3, npcIndex);
}
}
@@ -47,4 +47,10 @@ public class InterfaceConstants {
12201, 12202, 12203, 12204, 12205, 12206, 12207, 12208, 12209, 12210, 12211, 12212, 12213, 12214, 12215,
12216, 12217, 12218, 12219, 12220, 12221, 12222, 12223 };
/**
* Prevent instantiation.
*/
private InterfaceConstants() {
}
}
+1 -2
View File
@@ -325,9 +325,8 @@ public final class Inventory implements Cloneable {
return true;
} else if (mode == StackMode.STACK_STACKABLE_ITEMS) {
return def.isStackable();
} else { // will be STACK_NEVER
return false;
}
return false; // will be STACK_NEVER
}
/**
@@ -36,6 +36,15 @@ public final class ItemDefinition {
return definitions.length;
}
/**
* Gets the array of item definitions.
*
* @return The definitions.
*/
public static ItemDefinition[] getDefinitions() {
return definitions;
}
/**
* Initialises the class with the specified set of definitions.
*
@@ -121,7 +130,7 @@ public final class ItemDefinition {
/**
* A flag indicating if this item is members only.
*/
private boolean members;
private boolean members = false;
/**
* The name of the item.
@@ -149,9 +158,9 @@ public final class ItemDefinition {
private int team;
/**
* The value of the item.
* The item's floor value.
*/
private int value;
private int value = 1;
/**
* Creates an item definition with the default values.
@@ -186,9 +195,9 @@ public final class ItemDefinition {
}
/**
* Gets the item's id.
* Gets this item's id.
*
* @return The item's id.
* @return The id.
*/
public int getId() {
return id;
@@ -209,16 +218,16 @@ public final class ItemDefinition {
}
/**
* Gets the name of this item.
* Gets this item's name.
*
* @return The name of this item, or {@code null} if it has no name.
* @return The name.
*/
public String getName() {
return name;
}
/**
* Gets the note graphic id.
* Gets this item's note graphic id.
*
* @return The note graphic id.
*/
@@ -227,7 +236,7 @@ public final class ItemDefinition {
}
/**
* Gets the note info id.
* Gets this item's note info id.
*
* @return The note info id.
*/
@@ -245,9 +254,9 @@ public final class ItemDefinition {
}
/**
* Gets the value of this item.
* Gets this item's value.
*
* @return The value of this item.
* @return The value.
*/
public int getValue() {
return value;
@@ -281,9 +290,9 @@ public final class ItemDefinition {
}
/**
* Sets the description of this item.
* Sets this item's description.
*
* @param description The item's description.
* @param description The description.
*/
public void setDescription(String description) {
this.description = description;
@@ -318,25 +327,25 @@ public final class ItemDefinition {
}
/**
* Sets the members only flag.
* Sets this item's members only flag.
*
* @param members The members only flag.
* @param members The flag.
*/
public void setMembersOnly(boolean members) {
this.members = members;
}
/**
* Sets the name of this item.
* Sets this item's name.
*
* @param name The item's name.
* @param name The name.
*/
public void setName(String name) {
this.name = name;
}
/**
* Sets the note graphic id.
* Sets this item's note graphic id.
*
* @param noteGraphicId The note graphic id.
*/
@@ -345,7 +354,7 @@ public final class ItemDefinition {
}
/**
* Sets the note info id.
* Sets this item's note info id.
*
* @param noteInfoId The note info id.
*/
@@ -354,7 +363,7 @@ public final class ItemDefinition {
}
/**
* Sets the stackable flag.
* Sets this item's stackable flag.
*
* @param stackable The stackable flag.
*/
@@ -363,7 +372,7 @@ public final class ItemDefinition {
}
/**
* Sets this items team.
* Sets this item's team.
*
* @param team The team.
*/
@@ -372,9 +381,9 @@ public final class ItemDefinition {
}
/**
* Sets the value of this item.
* sets this item's value.
*
* @param value The value of this item.
* @param value The value.
*/
public void setValue(int value) {
this.value = value;
@@ -394,7 +403,6 @@ public final class ItemDefinition {
ItemDefinition infoDef = lookup(noteInfoId);
name = infoDef.name;
members = infoDef.members;
value = infoDef.value;
String prefix = "a";
char firstChar = name == null ? 'n' : name.charAt(0);
@@ -23,6 +23,15 @@ public final class NpcDefinition {
return definitions.length;
}
/**
* Gets the array of npc definitions.
*
* @return The definitions.
*/
public static NpcDefinition[] getDefinitions() {
return definitions;
}
/**
* Initialises the class with the specified set of definitions.
*
@@ -36,9 +36,10 @@ public final class GameEventDecoder extends OneToOneDecoder {
if (decoder != null) {
return decoder.decode(packet);
}
System.out.println("Unidentified packet received - opcode: " + packet.getOpcode() + ".");
return null;
}
return msg;
}
}
}
@@ -64,4 +64,4 @@ public final class GamePacketEncoder extends OneToOneEncoder {
return buffer;
}
}
}
+1 -1
View File
@@ -111,4 +111,4 @@ public abstract class Release {
decoders[opcode] = decoder;
}
}
}
@@ -0,0 +1,24 @@
package org.apollo.net.release.r317;
import org.apollo.game.event.impl.ArrowKeyEvent;
import org.apollo.net.codec.game.DataOrder;
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.EventDecoder;
/**
* An {@link EventDecoder} for the {@link ArrowKeyEvent}.
*
* @author Major
*/
public class ArrowKeyEventDecoder extends EventDecoder<ArrowKeyEvent> {
@Override
public ArrowKeyEvent decode(GamePacket packet) {
GamePacketReader reader = new GamePacketReader(packet);
int roll = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE);
int yaw = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE);
return new ArrowKeyEvent(roll, yaw);
}
}
@@ -0,0 +1,25 @@
package org.apollo.net.release.r317;
import org.apollo.game.event.impl.CameraMovementEvent;
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.EventDecoder;
/**
* An {@link EventDecoder} for the {@link CameraMovementEvent}.
*
* @author Toby
*/
public class CameraMovementEventDecoder extends EventDecoder<CameraMovementEvent> {
@Override
public CameraMovementEvent decode(GamePacket packet) {
GamePacketReader reader = new GamePacketReader(packet);
int cameraY = (int) reader.getUnsigned(DataType.SHORT);
int cameraX = (int) reader.getUnsigned(DataType.SHORT, DataTransformation.ADD);
return new CameraMovementEvent(cameraX, cameraY);
}
}
@@ -0,0 +1,20 @@
package org.apollo.net.release.r317;
import org.apollo.game.event.impl.CharacterAnimationResetEvent;
import org.apollo.net.codec.game.GamePacket;
import org.apollo.net.codec.game.GamePacketBuilder;
import org.apollo.net.release.EventEncoder;
/**
* An {@link EventEncoder} for the {@link CharacterAnimationResetEvent}.
*
* @author Major
*/
public class CharacterAnimationResetEventEncoder extends EventEncoder<CharacterAnimationResetEvent> {
@Override
public GamePacket encode(CharacterAnimationResetEvent event) {
return new GamePacketBuilder(1).toGamePacket();
}
}
@@ -0,0 +1,24 @@
package org.apollo.net.release.r317;
import org.apollo.game.event.impl.DisplayTabInterfaceEvent;
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.EventEncoder;
/**
* An {@link EventEncoder} for the {@link DisplayTabInterfaceEvent}.
*
* @author Chris Fletcher
*/
final class DisplayTabInterfaceEventEncoder extends EventEncoder<DisplayTabInterfaceEvent> {
@Override
public GamePacket encode(DisplayTabInterfaceEvent event) {
GamePacketBuilder builder = new GamePacketBuilder(106);
builder.put(DataType.BYTE, DataTransformation.NEGATE, event.getTab());
return builder.toGamePacket();
}
}
@@ -0,0 +1,23 @@
package org.apollo.net.release.r317;
import org.apollo.game.event.impl.FocusUpdateEvent;
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.EventDecoder;
/**
* An {@link EventDecoder} for the {@link FocusUpdateEvent}.
*
* @author Major
*/
public class FocusUpdateEventDecoder extends EventDecoder<FocusUpdateEvent> {
@Override
public FocusUpdateEvent decode(GamePacket packet) {
GamePacketReader reader = new GamePacketReader(packet);
boolean focused = (byte) reader.getUnsigned(DataType.BYTE) == 1;
return new FocusUpdateEvent(focused);
}
}
@@ -0,0 +1,29 @@
package org.apollo.net.release.r317;
import org.apollo.game.event.impl.MagicOnItemEvent;
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.EventDecoder;
/**
* An {@link EventDecoder} for the {@link MagicOnItemEvent}.
*
* @author Chris Fletcher
*/
final class MagicOnItemEventDecoder extends EventDecoder<MagicOnItemEvent> {
@Override
public MagicOnItemEvent decode(GamePacket packet) {
GamePacketReader reader = new GamePacketReader(packet);
int slot = (int) reader.getUnsigned(DataType.SHORT);
int id = (int) reader.getUnsigned(DataType.SHORT, DataTransformation.ADD);
int interfaceId = (int) reader.getUnsigned(DataType.SHORT);
int spell = (int) reader.getUnsigned(DataType.SHORT, DataTransformation.ADD);
return new MagicOnItemEvent(interfaceId, id, slot, spell);
}
}
@@ -0,0 +1,23 @@
package org.apollo.net.release.r317;
import org.apollo.game.event.impl.MouseClickEvent;
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.EventDecoder;
/**
* An {@link EventDecoder} for the {@link MouseClickEvent}.
*
* @author Major
*/
public class MouseClickEventDecoder extends EventDecoder<MouseClickEvent> {
@Override
public MouseClickEvent decode(GamePacket packet) {
GamePacketReader reader = new GamePacketReader(packet);
reader.getUnsigned(DataType.INT);
return new MouseClickEvent();
}
}
@@ -2,6 +2,7 @@ package org.apollo.net.release.r317;
import org.apollo.game.event.impl.CloseInterfaceEvent;
import org.apollo.game.event.impl.ConfigEvent;
import org.apollo.game.event.impl.DisplayTabInterfaceEvent;
import org.apollo.game.event.impl.EnterAmountEvent;
import org.apollo.game.event.impl.IdAssignmentEvent;
import org.apollo.game.event.impl.LogoutEvent;
@@ -23,6 +24,9 @@ import org.apollo.game.event.impl.UpdateSkillEvent;
import org.apollo.game.event.impl.UpdateSlottedItemsEvent;
import org.apollo.net.meta.PacketMetaDataGroup;
import org.apollo.net.release.Release;
import org.apollo.net.release.r377.FirstNpcActionEventDecoder;
import org.apollo.net.release.r377.SecondNpcActionEventDecoder;
import org.apollo.net.release.r377.ThirdNpcActionEventDecoder;
/**
* An implementation of {@link Release} for the 317 protocol.
@@ -106,6 +110,17 @@ public final class Release317 extends Release {
register(130, new ClosedInterfaceEventDecoder());
register(208, new EnteredAmountEventDecoder());
register(53, new ItemOnItemEventDecoder());
register(237, new MagicOnItemEventDecoder());
register(3, new FocusUpdateEventDecoder());
register(241, new MouseClickEventDecoder());
register(86, new ArrowKeyEventDecoder());
SpamPacketEventDecoder spamEventDecoder = new SpamPacketEventDecoder();
register(77, spamEventDecoder);
register(72, new FirstNpcActionEventDecoder());
register(155, new SecondNpcActionEventDecoder());
register(17, new ThirdNpcActionEventDecoder());
// register encoders
register(IdAssignmentEvent.class, new IdAssignmentEventEncoder());
@@ -129,6 +144,7 @@ public final class Release317 extends Release {
register(SetWidgetPlayerModelEvent.class, new SetWidgetPlayerModelEventEncoder());
register(SetWidgetModelAnimationEvent.class, new SetWidgetModelAnimationEventEncoder());
register(ConfigEvent.class, new ConfigEventEncoder());
register(DisplayTabInterfaceEvent.class, new DisplayTabInterfaceEventEncoder());
}
}
@@ -0,0 +1,19 @@
package org.apollo.net.release.r317;
import org.apollo.game.event.impl.SpamPacketEvent;
import org.apollo.net.codec.game.GamePacket;
import org.apollo.net.release.EventDecoder;
/**
* An {@link EventDecoder} for the {@link SpamPacketEvent}.
*
* @author Major
*/
public class SpamPacketEventDecoder extends EventDecoder<SpamPacketEvent> {
@Override
public SpamPacketEvent decode(GamePacket packet) {
return new SpamPacketEvent(packet.getPayload().array());
}
}
@@ -0,0 +1,24 @@
package org.apollo.net.release.r377;
import org.apollo.game.event.impl.ArrowKeyEvent;
import org.apollo.net.codec.game.DataOrder;
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.EventDecoder;
/**
* An {@link EventDecoder} for the {@link ArrowKeyEvent}.
*
* @author Major
*/
public class ArrowKeyEventDecoder extends EventDecoder<ArrowKeyEvent> {
@Override
public ArrowKeyEvent decode(GamePacket packet) {
GamePacketReader reader = new GamePacketReader(packet);
int roll = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE);
int yaw = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE);
return new ArrowKeyEvent(roll, yaw);
}
}
@@ -0,0 +1,20 @@
package org.apollo.net.release.r377;
import org.apollo.game.event.impl.CharacterAnimationResetEvent;
import org.apollo.net.codec.game.GamePacket;
import org.apollo.net.codec.game.GamePacketBuilder;
import org.apollo.net.release.EventEncoder;
/**
* An {@link EventEncoder} for the {@link CharacterAnimationResetEvent}.
*
* @author Major
*/
public class CharacterAnimationResetEventEncoder extends EventEncoder<CharacterAnimationResetEvent> {
@Override
public GamePacket encode(CharacterAnimationResetEvent event) {
return new GamePacketBuilder(13).toGamePacket();
}
}
@@ -0,0 +1,24 @@
package org.apollo.net.release.r377;
import org.apollo.game.event.impl.DisplayTabInterfaceEvent;
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.EventEncoder;
/**
* An {@link EventEncoder} for the {@link DisplayTabInterfaceEvent}.
*
* @author Chris Fletcher
*/
final class DisplayTabInterfaceEventEncoder extends EventEncoder<DisplayTabInterfaceEvent> {
@Override
public GamePacket encode(DisplayTabInterfaceEvent event) {
GamePacketBuilder builder = new GamePacketBuilder(252);
builder.put(DataType.BYTE, DataTransformation.NEGATE, event.getTab());
return builder.toGamePacket();
}
}
@@ -0,0 +1,24 @@
package org.apollo.net.release.r377;
import org.apollo.game.event.impl.FirstNpcActionEvent;
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.EventDecoder;
/**
* The {@link EventDecoder} for the {@link FirstNpcActionEvent}.
*
* @author Major
*/
public class FirstNpcActionEventDecoder extends EventDecoder<FirstNpcActionEvent> {
@Override
public FirstNpcActionEvent decode(GamePacket packet) {
GamePacketReader reader = new GamePacketReader(packet);
int index = (int) reader.getUnsigned(DataType.SHORT, DataTransformation.ADD);
return new FirstNpcActionEvent(index);
}
}
@@ -0,0 +1,22 @@
package org.apollo.net.release.r377;
import org.apollo.game.event.impl.FocusUpdateEvent;
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.EventDecoder;
/**
* An {@link EventDecoder} for the {@link FocusUpdateEvent}.
*
* @author Major
*/
public class FocusUpdateEventDecoder extends EventDecoder<FocusUpdateEvent> {
@Override
public FocusUpdateEvent decode(GamePacket packet) {
GamePacketReader decoder = new GamePacketReader(packet);
return new FocusUpdateEvent(decoder.getUnsigned(DataType.BYTE) == 1);
}
}
@@ -0,0 +1,29 @@
package org.apollo.net.release.r377;
import org.apollo.game.event.impl.MagicOnItemEvent;
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.EventDecoder;
/**
* An {@link EventDecoder} for the {@link MagicOnItemEvent}.
*
* @author Chris Fletcher
*/
final class MagicOnItemEventDecoder extends EventDecoder<MagicOnItemEvent> {
@Override
public MagicOnItemEvent decode(GamePacket packet) {
GamePacketReader reader = new GamePacketReader(packet);
int spell = (int) reader.getUnsigned(DataType.SHORT);
int interfaceId = (int) reader.getUnsigned(DataType.SHORT, DataTransformation.ADD);
int slot = (int) reader.getUnsigned(DataType.SHORT, DataTransformation.ADD);
int id = (int) reader.getUnsigned(DataType.SHORT, DataTransformation.ADD);
return new MagicOnItemEvent(interfaceId, id, slot, spell);
}
}
@@ -0,0 +1,23 @@
package org.apollo.net.release.r377;
import org.apollo.game.event.impl.MouseClickEvent;
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.EventDecoder;
/**
* An {@link EventDecoder} for the {@link MouseClickEvent}.
*
* @author Major
*/
public class MouseClickEventDecoder extends EventDecoder<MouseClickEvent> {
@Override
public MouseClickEvent decode(GamePacket packet) {
GamePacketReader reader = new GamePacketReader(packet);
reader.getUnsigned(DataType.INT);
return new MouseClickEvent();
}
}
@@ -2,6 +2,7 @@ package org.apollo.net.release.r377;
import org.apollo.game.event.impl.CloseInterfaceEvent;
import org.apollo.game.event.impl.ConfigEvent;
import org.apollo.game.event.impl.DisplayTabInterfaceEvent;
import org.apollo.game.event.impl.EnterAmountEvent;
import org.apollo.game.event.impl.IdAssignmentEvent;
import org.apollo.game.event.impl.LogoutEvent;
@@ -106,6 +107,19 @@ public final class Release377 extends Release {
register(110, new ClosedInterfaceEventDecoder());
register(75, new EnteredAmountEventDecoder());
register(1, new ItemOnItemEventDecoder());
register(36, new MagicOnItemEventDecoder());
register(187, new FocusUpdateEventDecoder());
register(19, new MouseClickEventDecoder());
register(140, new ArrowKeyEventDecoder());
SpamPacketEventDecoder spamEventDecoder = new SpamPacketEventDecoder();
register(40, spamEventDecoder);
register(244, spamEventDecoder);
register(67, new FirstNpcActionEventDecoder());
register(112, new SecondNpcActionEventDecoder());
register(13, new ThirdNpcActionEventDecoder());
// register encoders
register(IdAssignmentEvent.class, new IdAssignmentEventEncoder());
@@ -129,6 +143,7 @@ public final class Release377 extends Release {
register(SetWidgetPlayerModelEvent.class, new SetWidgetPlayerModelEventEncoder());
register(SetWidgetModelAnimationEvent.class, new SetWidgetModelAnimationEventEncoder());
register(ConfigEvent.class, new ConfigEventEncoder());
register(DisplayTabInterfaceEvent.class, new DisplayTabInterfaceEventEncoder());
}
}
@@ -0,0 +1,24 @@
package org.apollo.net.release.r377;
import org.apollo.game.event.impl.SecondNpcActionEvent;
import org.apollo.net.codec.game.DataOrder;
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.EventDecoder;
/**
* The {@link EventDecoder} for the {@link SecondNpcActionEvent}.
*
* @author Major
*/
public class SecondNpcActionEventDecoder extends EventDecoder<SecondNpcActionEvent> {
@Override
public SecondNpcActionEvent decode(GamePacket packet) {
GamePacketReader reader = new GamePacketReader(packet);
int index = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE);
return new SecondNpcActionEvent(index);
}
}
@@ -0,0 +1,19 @@
package org.apollo.net.release.r377;
import org.apollo.game.event.impl.SpamPacketEvent;
import org.apollo.net.codec.game.GamePacket;
import org.apollo.net.release.EventDecoder;
/**
* An {@link EventDecoder} for the {@link SpamPacketEvent}.
*
* @author Major
*/
public class SpamPacketEventDecoder extends EventDecoder<SpamPacketEvent> {
@Override
public SpamPacketEvent decode(GamePacket packet) {
return new SpamPacketEvent(packet.getPayload().array());
}
}
@@ -0,0 +1,25 @@
package org.apollo.net.release.r377;
import org.apollo.game.event.impl.ThirdNpcActionEvent;
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.EventDecoder;
/**
* The {@link EventDecoder} for the {@link ThirdNpcActionEvent}.
*
* @author Major
*/
public class ThirdNpcActionEventDecoder extends EventDecoder<ThirdNpcActionEvent> {
@Override
public ThirdNpcActionEvent decode(GamePacket packet) {
GamePacketReader reader = new GamePacketReader(packet);
int index = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE, DataTransformation.ADD);
return new ThirdNpcActionEvent(index);
}
}
@@ -167,10 +167,10 @@ public final class PluginManager {
String[] scripts = plugin.getScripts();
for (String script : scripts) {
File f = new File("./data/plugins/" + plugin.getId() + "/" + script); // TODO get from metadata obj?
File f = new File("./data/plugins/" + plugin.getId() + "/" + script);
InputStream is = new FileInputStream(f);
env.parse(is, f.getAbsolutePath());
}
}
}
}