From 42d42af0c52b65c7a85447b6a9d162675b0c5133 Mon Sep 17 00:00:00 2001 From: Major- Date: Sun, 3 Nov 2013 05:32:54 +0000 Subject: [PATCH] Add item on item decoder; minor mining changes. --- data/events.xml | 9 ++- data/plugins/bank/bank.rb | 2 +- data/plugins/cmd-teleport/teleport.rb | 2 +- data/plugins/logout/logout.rb | 2 +- data/plugins/mining/gem.rb | 2 +- data/plugins/mining/mining.rb | 2 +- data/plugins/mining/ore.rb | 2 +- data/plugins/mining/pickaxe.rb | 2 +- data/plugins/mining/respawn.rb | 6 +- .../handler/impl/BankButtonEventHandler.java | 4 +- .../impl/ItemOnItemVerificationHandler.java | 34 +++++++++ .../handler/impl/ItemVerificationHandler.java | 7 +- .../apollo/game/event/impl/ButtonEvent.java | 22 +++--- .../game/event/impl/ItemOnItemEvent.java | 70 +++++++++++++++++++ .../release/r317/ItemOnItemEventDecoder.java | 34 +++++++++ .../apollo/net/release/r317/Release317.java | 1 + .../release/r377/ItemOnItemEventDecoder.java | 34 +++++++++ .../apollo/net/release/r377/Release377.java | 3 +- 18 files changed, 208 insertions(+), 30 deletions(-) create mode 100644 src/org/apollo/game/event/handler/impl/ItemOnItemVerificationHandler.java create mode 100644 src/org/apollo/game/event/impl/ItemOnItemEvent.java create mode 100644 src/org/apollo/net/release/r317/ItemOnItemEventDecoder.java create mode 100644 src/org/apollo/net/release/r377/ItemOnItemEventDecoder.java 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());