From c0563ac3e34bed2d1e68dd32c8886770a80a6c64 Mon Sep 17 00:00:00 2001 From: TheStonedTurtle <29030969+TheStonedTurtle@users.noreply.github.com> Date: Thu, 21 Feb 2019 10:03:13 -0800 Subject: [PATCH 1/3] Remove binding necklace from Runecraft plugin --- .../plugins/runecraft/BindNeckOverlay.java | 107 ------------------ .../plugins/runecraft/RunecraftConfig.java | 11 -- .../plugins/runecraft/RunecraftPlugin.java | 68 ----------- 3 files changed, 186 deletions(-) delete mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/runecraft/BindNeckOverlay.java diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/BindNeckOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/BindNeckOverlay.java deleted file mode 100644 index 6e8dbcd24f..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/BindNeckOverlay.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (c) 2017, Seth - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package net.runelite.client.plugins.runecraft; - -import static net.runelite.api.ItemID.BINDING_NECKLACE; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics2D; -import java.awt.Point; -import java.awt.Rectangle; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import javax.inject.Inject; -import net.runelite.api.Query; -import net.runelite.api.queries.EquipmentItemQuery; -import net.runelite.api.queries.InventoryWidgetItemQuery; -import net.runelite.api.widgets.WidgetInfo; -import net.runelite.api.widgets.WidgetItem; -import net.runelite.client.ui.FontManager; -import net.runelite.client.ui.overlay.Overlay; -import net.runelite.client.ui.overlay.OverlayLayer; -import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.components.TextComponent; -import net.runelite.client.util.QueryRunner; - -public class BindNeckOverlay extends Overlay -{ - private final QueryRunner queryRunner; - private final RunecraftConfig config; - int bindingCharges; - - @Inject - BindNeckOverlay(QueryRunner queryRunner, RunecraftConfig config) - { - setPosition(OverlayPosition.DYNAMIC); - setLayer(OverlayLayer.ABOVE_WIDGETS); - this.queryRunner = queryRunner; - this.config = config; - } - - @Override - public Dimension render(Graphics2D graphics) - { - if (!config.showBindNeck()) - { - return null; - } - - graphics.setFont(FontManager.getRunescapeSmallFont()); - - for (WidgetItem necklace : getNecklaceWidgetItems()) - { - final Color color = bindingCharges == 1 ? Color.RED : Color.WHITE; - final Rectangle bounds = necklace.getCanvasBounds(); - final String text = bindingCharges <= 0 ? "?" : bindingCharges + ""; - - final TextComponent textComponent = new TextComponent(); - textComponent.setPosition(new Point(bounds.x, bounds.y + 16)); - textComponent.setText(text); - textComponent.setColor(color); - textComponent.render(graphics); - } - - return null; - } - - private Collection getNecklaceWidgetItems() - { - Query inventoryQuery = new InventoryWidgetItemQuery() - .idEquals(BINDING_NECKLACE); - WidgetItem[] inventoryWidgetItems = queryRunner.runQuery(inventoryQuery); - - Query equipmentQuery = new EquipmentItemQuery() - .slotEquals(WidgetInfo.EQUIPMENT_AMULET) - .idEquals(BINDING_NECKLACE); - WidgetItem[] equipmentWidgetItems = queryRunner.runQuery(equipmentQuery); - - Collection necklaces = new ArrayList<>(); - necklaces.addAll(Arrays.asList(inventoryWidgetItems)); - necklaces.addAll(Arrays.asList(equipmentWidgetItems)); - return necklaces; - } -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftConfig.java index d3f4bb4382..f84af6b243 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftConfig.java @@ -32,17 +32,6 @@ import net.runelite.client.config.ConfigItem; @ConfigGroup("runecraft") public interface RunecraftConfig extends Config { - @ConfigItem( - keyName = "showBindNeck", - name = "Show Binding Neck charges", - description = "Configures whether the binding neck charge is displayed", - position = 2 - ) - default boolean showBindNeck() - { - return true; - } - @ConfigItem( keyName = "showRifts", name = "Show Rifts in Abyss", diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftPlugin.java index 342d432114..1a30e18f76 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftPlugin.java @@ -29,8 +29,6 @@ import com.google.inject.Provides; import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import java.util.stream.Stream; import javax.inject.Inject; import lombok.AccessLevel; @@ -50,11 +48,8 @@ import net.runelite.api.events.DecorativeObjectDespawned; import net.runelite.api.events.DecorativeObjectSpawned; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.ItemContainerChanged; -import net.runelite.api.events.MenuOptionClicked; import net.runelite.api.events.NpcDespawned; import net.runelite.api.events.NpcSpawned; -import net.runelite.api.widgets.Widget; -import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.Notifier; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; @@ -69,10 +64,8 @@ import net.runelite.client.ui.overlay.OverlayManager; ) public class RunecraftPlugin extends Plugin { - private static Pattern bindNeckString = Pattern.compile("You have ([0-9]+|one) charges? left before your Binding necklace disintegrates."); private static final String POUCH_DECAYED_NOTIFICATION_MESSAGE = "Your rune pouch has decayed."; private static final String POUCH_DECAYED_MESSAGE = "Your pouch has decayed through use."; - private static final int DESTROY_ITEM_WIDGET_ID = WidgetInfo.DESTROY_ITEM_YES.getId(); private static final List DEGRADED_POUCHES = ImmutableList.of( ItemID.MEDIUM_POUCH_5511, ItemID.LARGE_POUCH_5513, @@ -94,9 +87,6 @@ public class RunecraftPlugin extends Plugin @Inject private OverlayManager overlayManager; - @Inject - private BindNeckOverlay bindNeckOverlay; - @Inject private AbyssOverlay abyssOverlay; @@ -115,7 +105,6 @@ public class RunecraftPlugin extends Plugin @Override protected void startUp() throws Exception { - overlayManager.add(bindNeckOverlay); overlayManager.add(abyssOverlay); abyssOverlay.updateConfig(); } @@ -123,7 +112,6 @@ public class RunecraftPlugin extends Plugin @Override protected void shutDown() throws Exception { - overlayManager.remove(bindNeckOverlay); overlayManager.remove(abyssOverlay); abyssObjects.clear(); darkMage = null; @@ -144,71 +132,15 @@ public class RunecraftPlugin extends Plugin return; } - if (config.showBindNeck()) - { - Matcher match = bindNeckString.matcher(event.getMessage()); - if (match.find()) - { - if (match.group(1).equals("one")) - { - bindNeckOverlay.bindingCharges = 1; - } - else - { - bindNeckOverlay.bindingCharges = Integer.parseInt(match.group(1)); - } - - return; - } - - if (event.getMessage().contains("You bind the temple's power")) - { - if (event.getMessage().contains("mud") - || event.getMessage().contains("lava") - || event.getMessage().contains("steam") - || event.getMessage().contains("dust") - || event.getMessage().contains("smoke") - || event.getMessage().contains("mist")) - { - bindNeckOverlay.bindingCharges -= 1; - return; - } - } - - if (event.getMessage().contains("Your Binding necklace has disintegrated.")) - { - //set it to 17 because this message is triggered first before the above chat event - bindNeckOverlay.bindingCharges = 17; - return; - } - } if (config.degradingNotification()) { if (event.getMessage().contains(POUCH_DECAYED_MESSAGE)) { notifier.notify(POUCH_DECAYED_NOTIFICATION_MESSAGE); - return; } } } - @Subscribe - public void onMenuOptionClicked(MenuOptionClicked event) - { - if (event.getWidgetId() != DESTROY_ITEM_WIDGET_ID) - { - return; - } - - Widget widgetDestroyItemName = client.getWidget(WidgetInfo.DESTROY_ITEM_NAME); - if (widgetDestroyItemName == null || !widgetDestroyItemName.getText().equals("Binding necklace")) - { - return; - } - - bindNeckOverlay.bindingCharges = 16; - } - @Subscribe public void onDecorativeObjectSpawned(DecorativeObjectSpawned event) { From 0489d7de9d1e7df9cb34f29e9621fa869b099e5d Mon Sep 17 00:00:00 2001 From: TheStonedTurtle <29030969+TheStonedTurtle@users.noreply.github.com> Date: Thu, 21 Feb 2019 11:41:48 -0800 Subject: [PATCH 2/3] Add binding necklace to Item Charge plugin --- .../plugins/itemcharges/ItemChargeConfig.java | 42 +++++++++++- .../itemcharges/ItemChargeOverlay.java | 9 +++ .../plugins/itemcharges/ItemChargePlugin.java | 66 +++++++++++++++++++ .../plugins/itemcharges/ItemChargeType.java | 3 +- .../plugins/itemcharges/ItemWithSlot.java | 1 + 5 files changed, 119 insertions(+), 2 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeConfig.java index 28c503b20a..275aa31d24 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeConfig.java @@ -204,11 +204,51 @@ public interface ItemChargeConfig extends Config return false; } + @ConfigItem( + keyName = "showBindingNecklaceCharges", + name = "Show Binding Necklace Charges", + description = "Configures if binding necklace item charge is shown", + position = 15 + ) + default boolean showBindingNecklaceCharges() + { + return true; + } + + @ConfigItem( + keyName = "bindingNecklace", + name = "", + description = "", + hidden = true + ) + default int bindingNecklace() + { + return -1; + } + + @ConfigItem( + keyName = "bindingNecklace", + name = "", + description = "" + ) + void bindingNecklace(int bindingNecklace); + + @ConfigItem( + keyName = "bindingNotification", + name = "Binding Necklace Notification", + description = "Configures if the binding necklace breaking notification is shown", + position = 16 + ) + default boolean bindingNotification() + { + return true; + } + @ConfigItem( keyName = "showInfoboxes", name = "Show Infoboxes", description = "Configures whether to show an infobox equipped charge items", - position = 15 + position = 17 ) default boolean showInfoboxes() { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeOverlay.java index 27bb35b21d..ca289d4013 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeOverlay.java @@ -84,6 +84,15 @@ class ItemChargeOverlay extends Overlay charges = config.dodgyNecklace(); } + else if (item.getId() == ItemID.BINDING_NECKLACE) + { + if (!config.showBindingNecklaceCharges()) + { + continue; + } + + charges = config.bindingNecklace(); + } else { ItemWithCharge chargeItem = ItemWithCharge.findItem(item.getId()); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java index 7d3b1f0cc6..1ddf3924bc 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java @@ -64,8 +64,14 @@ public class ItemChargePlugin extends Plugin private static final Pattern DODGY_BREAK_PATTERN = Pattern.compile( "Your dodgy necklace protects you\\..*It then crumbles to dust\\."); private static final String RING_OF_RECOIL_BREAK_MESSAGE = "Your Ring of Recoil has shattered."; + private static final Pattern BINDING_CHECK_PATTERN = Pattern.compile( + "You have ([0-9]+|one) charges? left before your Binding necklace disintegrates\\."); + private static final Pattern BINDING_USED_PATTERN = Pattern.compile( + "You bind the temple's power into (mud|lava|steam|dust|smoke|mist) runes\\."); + private static final String BINDING_BREAK_TEXT = "Your Binding necklace has disintegrated."; private static final int MAX_DODGY_CHARGES = 10; + private static final int MAX_BINDING_CHARGES = 16; @Inject private Client client; @@ -135,6 +141,11 @@ public class ItemChargePlugin extends Plugin { removeInfobox(ItemWithSlot.DODGY_NECKLACE); } + + if (!config.showBindingNecklaceCharges()) + { + removeInfobox(ItemWithSlot.BINDING_NECKLACE); + } } @Subscribe @@ -144,6 +155,9 @@ public class ItemChargePlugin extends Plugin Matcher dodgyCheckMatcher = DODGY_CHECK_PATTERN.matcher(message); Matcher dodgyProtectMatcher = DODGY_PROTECT_PATTERN.matcher(message); Matcher dodgyBreakMatcher = DODGY_BREAK_PATTERN.matcher(message); + Matcher bindingNecklaceCheckMatcher = BINDING_CHECK_PATTERN.matcher(event.getMessage()); + Matcher bindingNecklaceUsedMatcher = BINDING_USED_PATTERN.matcher(event.getMessage()); + if (event.getType() == ChatMessageType.GAMEMESSAGE || event.getType() == ChatMessageType.SPAM) { if (config.recoilNotification() && message.contains(RING_OF_RECOIL_BREAK_MESSAGE)) @@ -167,6 +181,32 @@ public class ItemChargePlugin extends Plugin { updateDodgyNecklaceCharges(Integer.parseInt(dodgyProtectMatcher.group(1))); } + else if (message.contains(BINDING_BREAK_TEXT)) + { + if (config.bindingNotification()) + { + notifier.notify(BINDING_BREAK_TEXT); + } + + // This chat message triggers before the used message so add 1 to the max charges to ensure proper sync + updateBindingNecklaceCharges(MAX_BINDING_CHARGES + 1); + } + else if (bindingNecklaceUsedMatcher.find()) + { + updateBindingNecklaceCharges(config.bindingNecklace() - 1); + } + else if (bindingNecklaceCheckMatcher.find()) + { + final String match = bindingNecklaceCheckMatcher.group(1); + + int charges = 1; + if (!match.equals("one")) + { + charges = Integer.parseInt(match); + } + + updateBindingNecklaceCharges(charges); + } } } @@ -194,6 +234,11 @@ public class ItemChargePlugin extends Plugin { updateJewelleryInfobox(ItemWithSlot.ABYSSAL_BRACELET, items); } + + if (config.showBindingNecklaceCharges()) + { + updateJewelleryInfobox(ItemWithSlot.BINDING_NECKLACE, items); + } } private void updateDodgyNecklaceCharges(final int value) @@ -213,6 +258,23 @@ public class ItemChargePlugin extends Plugin } } + private void updateBindingNecklaceCharges(final int value) + { + config.bindingNecklace(value); + + if (config.showInfoboxes() && config.showBindingNecklaceCharges()) + { + final ItemContainer itemContainer = client.getItemContainer(InventoryID.EQUIPMENT); + + if (itemContainer == null) + { + return; + } + + updateJewelleryInfobox(ItemWithSlot.BINDING_NECKLACE, itemContainer.getItems()); + } + } + private void updateJewelleryInfobox(ItemWithSlot item, Item[] items) { for (final EquipmentInventorySlot equipmentInventorySlot : item.getSlots()) @@ -245,6 +307,10 @@ public class ItemChargePlugin extends Plugin { charges = config.dodgyNecklace(); } + else if (id == ItemID.BINDING_NECKLACE && type == ItemWithSlot.BINDING_NECKLACE) + { + charges = config.bindingNecklace(); + } } else if (itemWithCharge.getType() == type.getType()) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeType.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeType.java index cbe5d20ff3..d941bf0962 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeType.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeType.java @@ -33,5 +33,6 @@ enum ItemChargeType TELEPORT, WATERCAN, WATERSKIN, - DODGY_NECKLACE + DODGY_NECKLACE, + BINDING_NECKLACE } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithSlot.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithSlot.java index 3fbd2bac66..4ec4aa36be 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithSlot.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithSlot.java @@ -34,6 +34,7 @@ enum ItemWithSlot { ABYSSAL_BRACELET(ItemChargeType.ABYSSAL_BRACELET, EquipmentInventorySlot.GLOVES), DODGY_NECKLACE(ItemChargeType.DODGY_NECKLACE, EquipmentInventorySlot.AMULET), + BINDING_NECKLACE(ItemChargeType.BINDING_NECKLACE, EquipmentInventorySlot.AMULET), TELEPORT(ItemChargeType.TELEPORT, EquipmentInventorySlot.WEAPON, EquipmentInventorySlot.AMULET, EquipmentInventorySlot.GLOVES, EquipmentInventorySlot.RING); private final ItemChargeType type; From f3387bc9f9484976d9e97b97cb348c030c8dc6c8 Mon Sep 17 00:00:00 2001 From: TheStonedTurtle <29030969+TheStonedTurtle@users.noreply.github.com> Date: Sat, 16 Mar 2019 21:12:54 -0700 Subject: [PATCH 3/3] Add destroy support to Item Charge plugin --- .../plugins/itemcharges/ItemChargePlugin.java | 48 ++++++++++ .../src/main/scripts/DestroyOnOpKey.hash | 1 + .../src/main/scripts/DestroyOnOpKey.rs2asm | 93 +++++++++++++++++++ 3 files changed, 142 insertions(+) create mode 100644 runelite-client/src/main/scripts/DestroyOnOpKey.hash create mode 100644 runelite-client/src/main/scripts/DestroyOnOpKey.rs2asm diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java index 1ddf3924bc..3a6c44a0fb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java @@ -41,6 +41,9 @@ import net.runelite.api.ItemID; import net.runelite.api.events.ChatMessage; import net.runelite.api.events.ConfigChanged; import net.runelite.api.events.ItemContainerChanged; +import net.runelite.api.events.ScriptCallbackEvent; +import net.runelite.api.widgets.Widget; +import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.Notifier; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; @@ -94,6 +97,9 @@ public class ItemChargePlugin extends Plugin @Inject private ItemChargeConfig config; + // Limits destroy callback to once per tick + private int lastCheckTick; + @Provides ItemChargeConfig getConfig(ConfigManager configManager) { @@ -111,6 +117,7 @@ public class ItemChargePlugin extends Plugin { overlayManager.remove(overlay); infoBoxManager.removeIf(ItemChargeInfobox.class::isInstance); + lastCheckTick = -1; } @Subscribe @@ -241,6 +248,21 @@ public class ItemChargePlugin extends Plugin } } + @Subscribe + private void onScriptCallbackEvent(ScriptCallbackEvent event) + { + if (!"destroyOnOpKey".equals(event.getEventName())) + { + return; + } + + final int yesOption = client.getIntStack()[client.getIntStackSize() - 1]; + if (yesOption == 1) + { + checkDestroyWidget(); + } + } + private void updateDodgyNecklaceCharges(final int value) { config.dodgyNecklace(value); @@ -275,6 +297,32 @@ public class ItemChargePlugin extends Plugin } } + private void checkDestroyWidget() + { + final int currentTick = client.getTickCount(); + if (lastCheckTick == currentTick) + { + return; + } + lastCheckTick = currentTick; + + final Widget widgetDestroyItemName = client.getWidget(WidgetInfo.DESTROY_ITEM_NAME); + if (widgetDestroyItemName == null) + { + return; + } + + switch (widgetDestroyItemName.getText()) + { + case "Binding necklace": + updateBindingNecklaceCharges(MAX_BINDING_CHARGES); + break; + case "Dodgy necklace": + updateDodgyNecklaceCharges(MAX_DODGY_CHARGES); + break; + } + } + private void updateJewelleryInfobox(ItemWithSlot item, Item[] items) { for (final EquipmentInventorySlot equipmentInventorySlot : item.getSlots()) diff --git a/runelite-client/src/main/scripts/DestroyOnOpKey.hash b/runelite-client/src/main/scripts/DestroyOnOpKey.hash new file mode 100644 index 0000000000..d52d81ffbb --- /dev/null +++ b/runelite-client/src/main/scripts/DestroyOnOpKey.hash @@ -0,0 +1 @@ +DA7BFF3D4B1135F264904DDCED76BC0CD56CEF4B41E1D7852097E9EECC235B9A \ No newline at end of file diff --git a/runelite-client/src/main/scripts/DestroyOnOpKey.rs2asm b/runelite-client/src/main/scripts/DestroyOnOpKey.rs2asm new file mode 100644 index 0000000000..854c1c8c69 --- /dev/null +++ b/runelite-client/src/main/scripts/DestroyOnOpKey.rs2asm @@ -0,0 +1,93 @@ +.id 1651 +.int_stack_count 5 +.string_stack_count 2 +.int_var_count 5 +.string_var_count 2 + iload 0 + iconst 1 + if_icmpeq LABEL13 + iload 1 + iconst -1 + if_icmpne LABEL7 + jump LABEL74 +LABEL7: + sload 1 + iload 1 + string_indexof_char + iconst -1 + if_icmpne LABEL13 + jump LABEL74 +LABEL13: + iload 0 + iconst 1 + if_icmpne LABEL17 + jump LABEL24 +LABEL17: + iconst 584 + iconst -1 + invoke 1701 + iconst 0 + if_icmpeq LABEL23 + jump LABEL24 +LABEL23: + return +LABEL24: + iload 3 + sconst "destroyOnOpKey" ; load event name + runelite_callback ; invoke callback + pop_int + iconst 2266 + iconst 1 + iconst 0 + sound_synth + iload 2 + iload 4 + cc_find + iconst 1 + if_icmpeq LABEL34 + jump LABEL38 +LABEL34: + iconst 16777215 + cc_setcolour + sconst "..." + cc_settext +LABEL38: + iconst -1 + sconst "" + iload 2 + if_setonmouserepeat + iconst -1 + sconst "" + iload 2 + if_setonmouseleave + iload 2 + if_clearops + iconst -1 + sconst "" + iload 2 + if_setonop + iconst -1 + sconst "" + iload 2 + if_setonkey + iconst 1652 + iload 2 + sload 0 + iload 3 + sload 1 + clientclock + iconst 40 + add + sconst "Isisi" + iload 2 + if_setontimer + iconst 38273024 + iload 3 + cc_find + iconst 1 + if_icmpeq LABEL73 + jump LABEL74 +LABEL73: + cc_resume_pausebutton +LABEL74: + return