From c1fdec9d2ed44302cbc93df4fcc7caba17bdfd9c Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 19 Apr 2020 12:57:01 -0400 Subject: [PATCH] bank plugin: add option to input bankpin with keyboard --- .../client/plugins/bank/BankConfig.java | 11 ++ .../client/plugins/bank/BankPlugin.java | 40 ++++++ .../src/main/scripts/BankpinButtonSetup.hash | 1 + .../main/scripts/BankpinButtonSetup.rs2asm | 121 ++++++++++++++++++ 4 files changed, 173 insertions(+) create mode 100644 runelite-client/src/main/scripts/BankpinButtonSetup.hash create mode 100644 runelite-client/src/main/scripts/BankpinButtonSetup.rs2asm diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankConfig.java index b73869ed57..f51625bff5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankConfig.java @@ -108,4 +108,15 @@ public interface BankConfig extends Config { return true; } + + @ConfigItem( + keyName = "bankPinKeyboard", + name = "Keyboard Bankpin", + description = "Allows using the keyboard keys for bank pin input", + position = 8 + ) + default boolean bankPinKeyboard() + { + return false; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java index a9a6161d78..0153dbb5e2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java @@ -37,6 +37,7 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.inject.Inject; +import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; import static net.runelite.api.Constants.HIGH_ALCHEMY_MULTIPLIER; import net.runelite.api.InventoryID; @@ -54,9 +55,12 @@ import net.runelite.api.events.MenuShouldLeftClick; import net.runelite.api.events.ScriptCallbackEvent; import net.runelite.api.events.ScriptPostFired; import net.runelite.api.events.WidgetLoaded; +import net.runelite.api.widgets.JavaScriptCallback; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetID; import net.runelite.api.widgets.WidgetInfo; +import static net.runelite.api.widgets.WidgetInfo.TO_CHILD; +import static net.runelite.api.widgets.WidgetInfo.TO_GROUP; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; @@ -71,6 +75,7 @@ import net.runelite.client.util.QuantityFormatter; description = "Modifications to the banking interface", tags = {"grand", "exchange", "high", "alchemy", "prices", "deposit"} ) +@Slf4j public class BankPlugin extends Plugin { private static final List TAB_VARBITS = ImmutableList.of( @@ -200,6 +205,41 @@ public class BankPlugin extends Plugin } break; + case "bankpinButtonSetup": + { + if (!config.bankPinKeyboard()) + { + return; + } + + final int compId = intStack[intStackSize - 2]; + final int buttonId = intStack[intStackSize - 1]; + Widget button = client.getWidget(TO_GROUP(compId), TO_CHILD(compId)); + Widget buttonRect = button.getChild(0); + + final Object[] onOpListener = buttonRect.getOnOpListener(); + buttonRect.setOnKeyListener((JavaScriptCallback) e -> + { + int typedChar = e.getTypedKeyChar() - '0'; + if (typedChar != buttonId) + { + return; + } + + log.debug("Bank pin keypress"); + + final String input = client.getVar(VarClientStr.CHATBOX_TYPED_TEXT); + clientThread.invokeLater(() -> + { + // reset chatbox input to avoid pin going to chatbox.. + client.setVar(VarClientStr.CHATBOX_TYPED_TEXT, input); + client.runScript(ScriptID.CHAT_PROMPT_INIT); + + client.runScript(onOpListener); + }); + }); + break; + } } } diff --git a/runelite-client/src/main/scripts/BankpinButtonSetup.hash b/runelite-client/src/main/scripts/BankpinButtonSetup.hash new file mode 100644 index 0000000000..7d72d3140b --- /dev/null +++ b/runelite-client/src/main/scripts/BankpinButtonSetup.hash @@ -0,0 +1 @@ +48C575A71CD8CDDBFC8A7C0D2F8915A5EE263731213FFC23BEFFF39B6441A9FF \ No newline at end of file diff --git a/runelite-client/src/main/scripts/BankpinButtonSetup.rs2asm b/runelite-client/src/main/scripts/BankpinButtonSetup.rs2asm new file mode 100644 index 0000000000..4f783cfe53 --- /dev/null +++ b/runelite-client/src/main/scripts/BankpinButtonSetup.rs2asm @@ -0,0 +1,121 @@ +.id 679 +.int_stack_count 21 +.string_stack_count 0 +.int_var_count 21 +.string_var_count 0 + iload 0 + cc_deleteall + iload 0 + iconst 3 + iconst 0 + cc_create + iconst 64 + iconst 64 + iconst 0 + iconst 0 + cc_setsize + iconst 0 + iconst 0 + iconst 0 + iconst 0 + cc_setposition + iconst 16777215 + cc_setcolour + iconst 1 + cc_setfill + iconst 255 + cc_settrans + iload 0 + iconst 4 + iconst 1 + cc_create 1 + iconst 10 + iconst 15 + iconst 0 + iconst 0 + cc_setsize 1 + iconst 5 + iload 0 + if_getwidth + iconst 15 + sub + randominc + add + iconst 5 + iload 0 + if_getheight + iconst 20 + sub + randominc + add + iconst 0 + iconst 0 + cc_setposition 1 + iconst 1 + iconst 1 + iconst 0 + cc_settextalign 1 + iconst 496 + cc_settextfont 1 + iconst 16744192 + cc_setcolour 1 + iconst 0 + cc_settextshadow 1 + sconst "" + cc_settext 1 + iconst 683 + iconst -2147483645 + iconst -2147483643 + iload 1 + clientclock + iconst 5 + add + sconst "Iiii" + cc_setontimer 1 + iconst 684 + iconst 0 + iconst -2147483645 + iconst -2147483643 + cc_getid 1 + sconst "1Iii" + cc_setonmouserepeat + iconst 684 + iconst 1 + iconst -2147483645 + iconst -2147483643 + cc_getid 1 + sconst "1Iii" + cc_setonmouseleave + iconst 1 + sconst "Select" + cc_setop + iconst 685 + iload 1 + iload 2 + iload 3 + iload 4 + iload 5 + iload 6 + iload 7 + iload 8 + iload 9 + iload 10 + iload 11 + iload 12 + iload 13 + iload 14 + iload 15 + iload 16 + iload 17 + iload 18 + iload 19 + iload 20 + sconst "iiiIIIIIIIIIIIIIIIII" + cc_setonop + iload 0 ; button component id + iload 1 ; 0-9 + sconst "bankpinButtonSetup" + runelite_callback + pop_int ; 0-9 + pop_int ; button component id + return