diff --git a/data/events.xml b/data/events.xml
index ae5b4662..c6a6c48a 100644
--- a/data/events.xml
+++ b/data/events.xml
@@ -72,4 +72,11 @@
org.apollo.game.event.handler.impl.EnteredAmountEventHandler
-
+
+ org.apollo.game.event.impl.ItemOnItemEvent
+
+ org.apollo.game.event.handler.impl.ItemVerificationHandler
+ org.apollo.game.event.handler.impl.ItemOnItemVerificationHandler
+
+
+
\ No newline at end of file
diff --git a/data/plugins/bank/bank.rb b/data/plugins/bank/bank.rb
index 671638da..1b5520c7 100644
--- a/data/plugins/bank/bank.rb
+++ b/data/plugins/bank/bank.rb
@@ -30,4 +30,4 @@ on :event, :object_action do |ctx, player, event|
end
end
-# TODO: when we have NPCs/dialogue, also respond to clicking on them
+# TODO: when we have NPCs/dialogue, also respond to clicking on them
\ No newline at end of file
diff --git a/data/plugins/cmd-teleport/teleport.rb b/data/plugins/cmd-teleport/teleport.rb
index d10f52e3..7b5b3ce1 100644
--- a/data/plugins/cmd-teleport/teleport.rb
+++ b/data/plugins/cmd-teleport/teleport.rb
@@ -16,4 +16,4 @@ on :command, :tele, RIGHTS_ADMIN do |player, command|
else
player.send_message "Syntax: ::tele [x] [y] [z=0]"
end
-end
+end
\ No newline at end of file
diff --git a/data/plugins/logout/logout.rb b/data/plugins/logout/logout.rb
index 38883468..63ab9afc 100644
--- a/data/plugins/logout/logout.rb
+++ b/data/plugins/logout/logout.rb
@@ -2,4 +2,4 @@ LOGOUT_BUTTON_ID = 2458
on :button, LOGOUT_BUTTON_ID do |player|
player.logout
-end
+end
\ No newline at end of file
diff --git a/data/plugins/mining/gem.rb b/data/plugins/mining/gem.rb
index eb48be7a..95b44cc1 100644
--- a/data/plugins/mining/gem.rb
+++ b/data/plugins/mining/gem.rb
@@ -16,4 +16,4 @@ end
append_gem(Gemstone.new(1623, 0)) # uncut sapphire
append_gem(Gemstone.new(1605, 0)) # uncut emerald
append_gem(Gemstone.new(1619, 0)) # uncut ruby
-append_gem(Gemstone.new(1617, 0)) # uncut diamond
+append_gem(Gemstone.new(1617, 0)) # uncut diamond
\ No newline at end of file
diff --git a/data/plugins/mining/mining.rb b/data/plugins/mining/mining.rb
index 7ddcb74e..937b1881 100644
--- a/data/plugins/mining/mining.rb
+++ b/data/plugins/mining/mining.rb
@@ -160,4 +160,4 @@ on :event, :object_action do |ctx, player, event|
end
end
end
-end
+end
\ No newline at end of file
diff --git a/data/plugins/mining/ore.rb b/data/plugins/mining/ore.rb
index 42f3ef80..45f87c29 100644
--- a/data/plugins/mining/ore.rb
+++ b/data/plugins/mining/ore.rb
@@ -93,4 +93,4 @@ append_ore Ore.new(449, ADAMANT_OBJECTS, 70, 95, 800 ) # adamant ore
append_ore Ore.new(451, RUNITE_OBJECTS, 85, 125, 2500) # runite ore
# TODO: rune essence object id = 2491
-# level 1, exp 5, rune ess = 1436, pure ess = 7936
+# level 1, exp 5, rune ess = 1436, pure ess = 7936
\ No newline at end of file
diff --git a/data/plugins/mining/pickaxe.rb b/data/plugins/mining/pickaxe.rb
index b7acefef..5d5f8142 100644
--- a/data/plugins/mining/pickaxe.rb
+++ b/data/plugins/mining/pickaxe.rb
@@ -28,4 +28,4 @@ append_pickaxe(Pickaxe.new(1273, 21, 629, 5)) # mithril pickaxe
append_pickaxe(Pickaxe.new(1271, 31, 628, 4)) # adamant pickaxe
append_pickaxe(Pickaxe.new(1275, 41, 624, 3)) # rune pickaxe
-PICKAXE_IDS.reverse!
+PICKAXE_IDS.reverse!
\ No newline at end of file
diff --git a/data/plugins/mining/respawn.rb b/data/plugins/mining/respawn.rb
index 34d0d8b4..bda2dfe5 100644
--- a/data/plugins/mining/respawn.rb
+++ b/data/plugins/mining/respawn.rb
@@ -1,5 +1,3 @@
-MAX_PLAYERS = 2000 # TODO: obtain from a Java class
-
# Calculates the number of pulses it takes for an ore to respawn based on the
# number of players currently online.
#
@@ -14,5 +12,5 @@ MAX_PLAYERS = 2000 # TODO: obtain from a Java class
# function. The rest of the mining plugin rounds the base respawn times in
# pulses down where appropriate.
def respawn_pulses(base, players)
- base - players * base / (MAX_PLAYERS * 2)
-end
+ base - players * base / (World.world.player_repository.size * 2)
+end
\ No newline at end of file
diff --git a/src/org/apollo/game/event/handler/impl/BankButtonEventHandler.java b/src/org/apollo/game/event/handler/impl/BankButtonEventHandler.java
index afd846e6..d9e85695 100644
--- a/src/org/apollo/game/event/handler/impl/BankButtonEventHandler.java
+++ b/src/org/apollo/game/event/handler/impl/BankButtonEventHandler.java
@@ -24,9 +24,9 @@ public final class BankButtonEventHandler extends EventHandler {
@Override
public void handle(EventHandlerContext ctx, Player player, ButtonEvent event) {
- if (event.getInterfaceId() == WITHDRAW_AS_ITEM) {
+ if (event.getWidgetId() == WITHDRAW_AS_ITEM) {
player.setWithdrawingNotes(false);
- } else if (event.getInterfaceId() == WITHDRAW_AS_NOTE) {
+ } else if (event.getWidgetId() == WITHDRAW_AS_NOTE) {
player.setWithdrawingNotes(true);
}
}
diff --git a/src/org/apollo/game/event/handler/impl/ItemOnItemVerificationHandler.java b/src/org/apollo/game/event/handler/impl/ItemOnItemVerificationHandler.java
new file mode 100644
index 00000000..40d7919e
--- /dev/null
+++ b/src/org/apollo/game/event/handler/impl/ItemOnItemVerificationHandler.java
@@ -0,0 +1,34 @@
+package org.apollo.game.event.handler.impl;
+
+import org.apollo.game.event.handler.EventHandler;
+import org.apollo.game.event.handler.EventHandlerContext;
+import org.apollo.game.event.impl.ItemOnItemEvent;
+import org.apollo.game.model.Inventory;
+import org.apollo.game.model.Item;
+import org.apollo.game.model.Player;
+
+/**
+ * An {@link EventHandler} which verifies the target item in {@link ItemOnItemEvent}s.
+ *
+ * @author Chris Fletcher
+ */
+public final class ItemOnItemVerificationHandler extends EventHandler {
+
+ @Override
+ public void handle(EventHandlerContext ctx, Player player, ItemOnItemEvent event) {
+ Inventory inventory = ItemVerificationHandler.interfaceToInventory(player, event.getTargetInterfaceId());
+
+ int slot = event.getTargetSlot();
+ if (slot < 0 || slot >= inventory.capacity()) {
+ ctx.breakHandlerChain();
+ return;
+ }
+
+ Item item = inventory.get(slot);
+ if (item == null || item.getId() != event.getTargetId()) {
+ ctx.breakHandlerChain();
+ return;
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/src/org/apollo/game/event/handler/impl/ItemVerificationHandler.java b/src/org/apollo/game/event/handler/impl/ItemVerificationHandler.java
index d29668cb..79b14b39 100644
--- a/src/org/apollo/game/event/handler/impl/ItemVerificationHandler.java
+++ b/src/org/apollo/game/event/handler/impl/ItemVerificationHandler.java
@@ -19,12 +19,11 @@ public final class ItemVerificationHandler extends EventHandler {
+
+ @Override
+ public ItemOnItemEvent decode(GamePacket packet) {
+ GamePacketReader reader = new GamePacketReader(packet);
+
+ int targetSlot = (int) reader.getUnsigned(DataType.SHORT);
+ int usedSlot = (int) reader.getUnsigned(DataType.SHORT, DataTransformation.ADD);
+
+ int targetId = (int) reader.getSigned(DataType.SHORT, DataOrder.LITTLE, DataTransformation.ADD);
+ int targetInterface = (int) reader.getUnsigned(DataType.SHORT);
+
+ int usedId = (int) reader.getSigned(DataType.SHORT, DataOrder.LITTLE);
+ int usedInterface = (int) reader.getUnsigned(DataType.SHORT);
+
+ return new ItemOnItemEvent(usedInterface, usedId, usedSlot, targetInterface, targetId, targetSlot);
+ }
+
+}
\ 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 5bf4b5db..16f32732 100644
--- a/src/org/apollo/net/release/r317/Release317.java
+++ b/src/org/apollo/net/release/r317/Release317.java
@@ -94,6 +94,7 @@ public final class Release317 extends Release {
register(135, new FifthItemActionEventDecoder());
register(130, new ClosedInterfaceEventDecoder());
register(208, new EnteredAmountEventDecoder());
+ register(53, new ItemOnItemEventDecoder());
// register encoders
register(IdAssignmentEvent.class, new IdAssignmentEventEncoder());
diff --git a/src/org/apollo/net/release/r377/ItemOnItemEventDecoder.java b/src/org/apollo/net/release/r377/ItemOnItemEventDecoder.java
new file mode 100644
index 00000000..9d457a82
--- /dev/null
+++ b/src/org/apollo/net/release/r377/ItemOnItemEventDecoder.java
@@ -0,0 +1,34 @@
+package org.apollo.net.release.r377;
+
+import org.apollo.game.event.impl.ItemOnItemEvent;
+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;
+
+/**
+ * An {@link EventDecoder} for the {@link ItemOnItemEventDecoder}.
+ *
+ * @author Chris Fletcher
+ */
+final class ItemOnItemEventDecoder extends EventDecoder {
+
+ @Override
+ public ItemOnItemEvent decode(GamePacket packet) {
+ GamePacketReader reader = new GamePacketReader(packet);
+
+ int targetId = (int) reader.getUnsigned(DataType.SHORT);
+ int usedSlot = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE);
+
+ int usedId = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE);
+ int targetInterface = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE, DataTransformation.ADD);
+
+ int targetSlot = (int) reader.getUnsigned(DataType.SHORT, DataTransformation.ADD);
+ int usedInterface = (int) reader.getUnsigned(DataType.SHORT, DataTransformation.ADD);
+
+ return new ItemOnItemEvent(usedInterface, usedId, usedSlot, targetInterface, targetId, targetSlot);
+ }
+
+}
\ 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 47ac4fab..13066e5b 100644
--- a/src/org/apollo/net/release/r377/Release377.java
+++ b/src/org/apollo/net/release/r377/Release377.java
@@ -94,7 +94,8 @@ public final class Release377 extends Release {
register(158, new FifthItemActionEventDecoder());
register(110, new ClosedInterfaceEventDecoder());
register(75, new EnteredAmountEventDecoder());
-
+ register(1, new ItemOnItemEventDecoder());
+
// register encoders
register(IdAssignmentEvent.class, new IdAssignmentEventEncoder());
register(RegionChangeEvent.class, new RegionChangeEventEncoder());