From e6bf527dff09b0890ae509069f0e3e1c7ff15567 Mon Sep 17 00:00:00 2001 From: Major- Date: Sun, 3 Nov 2013 17:37:52 +0000 Subject: [PATCH] Add config events. --- .../apollo/game/event/impl/ConfigEvent.java | 51 +++++++++++++++++++ .../net/release/r317/ConfigEventEncoder.java | 38 ++++++++++++++ .../apollo/net/release/r317/Release317.java | 2 + .../net/release/r377/ConfigEventEncoder.java | 39 ++++++++++++++ .../apollo/net/release/r377/Release377.java | 2 + 5 files changed, 132 insertions(+) create mode 100644 src/org/apollo/game/event/impl/ConfigEvent.java create mode 100644 src/org/apollo/net/release/r317/ConfigEventEncoder.java create mode 100644 src/org/apollo/net/release/r377/ConfigEventEncoder.java diff --git a/src/org/apollo/game/event/impl/ConfigEvent.java b/src/org/apollo/game/event/impl/ConfigEvent.java new file mode 100644 index 00000000..575666bc --- /dev/null +++ b/src/org/apollo/game/event/impl/ConfigEvent.java @@ -0,0 +1,51 @@ +package org.apollo.game.event.impl; + +import org.apollo.game.event.Event; + +/** + * An event sent to the client to adjust a certain config or attribute setting. + * + * @author Chris Fletcher + */ +public final class ConfigEvent extends Event { + + /** + * The identifier. + */ + private final int id; + + /** + * The value. + */ + private final int value; + + /** + * Creates a new config event. + * + * @param id The config's identifier. + * @param value The value. + */ + public ConfigEvent(int id, int value) { + this.id = id; + this.value = value; + } + + /** + * Gets the config's identifier. + * + * @return The config id. + */ + public int getId() { + return id; + } + + /** + * Gets the config's value. + * + * @return The config value. + */ + public int getValue() { + return value; + } + +} \ No newline at end of file diff --git a/src/org/apollo/net/release/r317/ConfigEventEncoder.java b/src/org/apollo/net/release/r317/ConfigEventEncoder.java new file mode 100644 index 00000000..ab96dc14 --- /dev/null +++ b/src/org/apollo/net/release/r317/ConfigEventEncoder.java @@ -0,0 +1,38 @@ +package org.apollo.net.release.r317; + +import org.apollo.game.event.impl.ConfigEvent; +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.GamePacketBuilder; +import org.apollo.net.release.EventEncoder; + +/** + * An {@link EventEncoder} for the {@link ConfigEvent}. + * + * @author Chris Fletcher + * @author Major + */ +final class ConfigEventEncoder extends EventEncoder { + + @Override + public GamePacket encode(ConfigEvent event) { + GamePacketBuilder builder; + int value = event.getValue(); + + if (value > Byte.MIN_VALUE && value < Byte.MAX_VALUE) { + builder = new GamePacketBuilder(36); + + builder.put(DataType.SHORT, DataOrder.LITTLE, event.getId()); + builder.put(DataType.BYTE, value & 0xFF); + } else { + builder = new GamePacketBuilder(87); + + builder.put(DataType.SHORT, DataOrder.LITTLE, event.getId()); + builder.put(DataType.INT, DataOrder.MIDDLE, value); + } + + 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 ac66d2ee..e657f347 100644 --- a/src/org/apollo/net/release/r317/Release317.java +++ b/src/org/apollo/net/release/r317/Release317.java @@ -1,6 +1,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.EnterAmountEvent; import org.apollo.game.event.impl.IdAssignmentEvent; import org.apollo.game.event.impl.LogoutEvent; @@ -122,6 +123,7 @@ public final class Release317 extends Release { register(SetWidgetNpcModelEvent.class, new SetWidgetNpcModelEventEncoder()); register(SetWidgetPlayerModelEvent.class, new SetWidgetPlayerModelEventEncoder()); register(SetWidgetModelAnimationEvent.class, new SetWidgetModelAnimationEventEncoder()); + register(ConfigEvent.class, new ConfigEventEncoder()); } } \ No newline at end of file diff --git a/src/org/apollo/net/release/r377/ConfigEventEncoder.java b/src/org/apollo/net/release/r377/ConfigEventEncoder.java new file mode 100644 index 00000000..46513736 --- /dev/null +++ b/src/org/apollo/net/release/r377/ConfigEventEncoder.java @@ -0,0 +1,39 @@ +package org.apollo.net.release.r377; + +import org.apollo.game.event.impl.ConfigEvent; +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.GamePacketBuilder; +import org.apollo.net.release.EventEncoder; + +/** + * An {@link EventEncoder} for the {@link ConfigEvent}. + * + * @author Chris Fletcher + * @author Major + */ +final class ConfigEventEncoder extends EventEncoder { + + @Override + public GamePacket encode(ConfigEvent event) { + GamePacketBuilder builder; + int value = event.getValue(); + + if (value > Byte.MIN_VALUE && value < Byte.MAX_VALUE) { + builder = new GamePacketBuilder(182); + + builder.put(DataType.SHORT, DataTransformation.ADD, event.getId()); + builder.put(DataType.BYTE, DataTransformation.SUBTRACT, value & 0xFF); + } else { + builder = new GamePacketBuilder(115); + + builder.put(DataType.INT, DataOrder.INVERSED_MIDDLE, value); + builder.put(DataType.SHORT, DataOrder.LITTLE, event.getId()); + } + + 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 f65321a5..7861d6fc 100644 --- a/src/org/apollo/net/release/r377/Release377.java +++ b/src/org/apollo/net/release/r377/Release377.java @@ -1,6 +1,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.EnterAmountEvent; import org.apollo.game.event.impl.IdAssignmentEvent; import org.apollo.game.event.impl.LogoutEvent; @@ -122,6 +123,7 @@ public final class Release377 extends Release { register(SetWidgetNpcModelEvent.class, new SetWidgetNpcModelEventEncoder()); register(SetWidgetPlayerModelEvent.class, new SetWidgetPlayerModelEventEncoder()); register(SetWidgetModelAnimationEvent.class, new SetWidgetModelAnimationEventEncoder()); + register(ConfigEvent.class, new ConfigEventEncoder()); } } \ No newline at end of file