From 30c105a4cf6997aeed7c28368072b7b931748ca4 Mon Sep 17 00:00:00 2001 From: Lucas Date: Tue, 11 Jun 2019 00:02:53 +0200 Subject: [PATCH] Use scripts for enabling and removing bankpin keylistener --- .../runeliteplus/RuneLitePlusPlugin.java | 83 +++++++++++-------- .../src/main/scripts/UpdateBankPin.rs2asm | 2 + 2 files changed, 50 insertions(+), 35 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runeliteplus/RuneLitePlusPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/runeliteplus/RuneLitePlusPlugin.java index 51dfe6a9dc..375358a3d2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runeliteplus/RuneLitePlusPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runeliteplus/RuneLitePlusPlugin.java @@ -32,7 +32,7 @@ import javax.inject.Inject; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; import net.runelite.api.events.ConfigChanged; -import net.runelite.api.events.WidgetLoaded; +import net.runelite.api.events.ScriptCallbackEvent; import net.runelite.api.widgets.WidgetID; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.RuneLiteProperties; @@ -155,6 +155,7 @@ public class RuneLitePlusPlugin extends Plugin private RuneLitePlusKeyListener keyListener = new RuneLitePlusKeyListener(); private int entered = -1; private int enterIdx; + private boolean expectInput; @Override protected void startUp() throws Exception @@ -170,6 +171,7 @@ public class RuneLitePlusPlugin extends Plugin entered = -1; enterIdx = 0; + expectInput = false; } @Subscribe @@ -202,8 +204,9 @@ public class RuneLitePlusPlugin extends Plugin else if (!config.keyboardPin()) { - entered = -1; + entered = 0; enterIdx = 0; + expectInput = false; keyManager.unregisterKeyListener(keyListener); } } @@ -211,33 +214,41 @@ public class RuneLitePlusPlugin extends Plugin @Override protected void shutDown() throws Exception { - entered = -1; + entered = 0; enterIdx = 0; + expectInput = false; keyManager.unregisterKeyListener(keyListener); } @Subscribe - public void onWidgetLoaded(WidgetLoaded event) + private void onScriptCallbackEvent(ScriptCallbackEvent e) { - if (!config.keyboardPin()) + if (e.getEventName().equals("bankpin")) { - return; - } + int[] intStack = client.getIntStack(); + int intStackSize = client.getIntStackSize(); - if (event.getGroupId() == WidgetID.BANK_GROUP_ID) - { - // log.debug("Bank opened, removing key listener"); - keyManager.unregisterKeyListener(keyListener); - return; - } - else if (event.getGroupId() != WidgetID.BANK_PIN_GROUP_ID) - //|| !Text.standardize(client.getWidget(WidgetInfo.BANK_PIN_TOP_LEFT_TEXT).getText()).equals("bank of gielinor")) - { - return; - } + // This'll be anywhere from -1 to 3 + // 0 = first number, 1 second, etc + // Anything other than 0123 means the bankpin interface closes + int enterIdx = intStack[intStackSize - 1]; - // log.debug("Registering key listener"); - keyManager.registerKeyListener(keyListener); + if (enterIdx < 0 || enterIdx > 3) + { + keyManager.unregisterKeyListener(keyListener); + this.enterIdx = 0; + this.entered = 0; + expectInput = false; + return; + } + else if (enterIdx == 0) + { + keyManager.registerKeyListener(keyListener); + } + + this.enterIdx = enterIdx; + expectInput = true; + } } private void handleKey(char c) @@ -245,37 +256,39 @@ public class RuneLitePlusPlugin extends Plugin if (client.getWidget(WidgetID.BANK_PIN_GROUP_ID, 0) == null || !client.getWidget(WidgetInfo.BANK_PIN_TOP_LEFT_TEXT).getText().equals("Bank of Gielinor")) { - // log.debug("Key was pressed, but widget wasn't open"); - entered = -1; + entered = 0; enterIdx = 0; + expectInput = false; keyManager.unregisterKeyListener(keyListener); return; } + if (!expectInput) + { + return; + } + log.debug(c + " " + enterIdx + " " + entered); + int num = Character.getNumericValue(c); - client.runScript(685, num, enterIdx, entered, 13959181, 13959183, 13959184, 13959186, 13959188, 13959190, 13959192, 13959194, 13959196, 13959198, 13959200, 13959202, 13959171, 13959172, 13959173, 13959174, 13959178); + // We gotta copy this cause enteridx changes while the script is executing + int oldEnterIdx = enterIdx; - if (enterIdx == 0) + // Script 685 will call 653, which in turn will set expectInput to true + expectInput = false; + client.runScript(685, num, enterIdx, entered, 13959181, 13959183, 13959184, 13959186, 13959188, 13959190, 13959192, 13959194, 13959196, 13959198, 13959200, 13959202, 13959171, 13959172, 13959173, 13959174, 13959178); + + if (oldEnterIdx == 0) { entered = num * 1000; - enterIdx++; } - else if (enterIdx == 1) + else if (oldEnterIdx == 1) { entered += num * 100; - enterIdx++; } - else if (enterIdx == 2) + else if (oldEnterIdx == 2) { entered += num * 10; - enterIdx++; - } - else if (enterIdx == 3) - { - entered = -1; - enterIdx = 0; - keyManager.unregisterKeyListener(keyListener); } } } diff --git a/runelite-client/src/main/scripts/UpdateBankPin.rs2asm b/runelite-client/src/main/scripts/UpdateBankPin.rs2asm index 2f33d19842..0bb6001cfd 100644 --- a/runelite-client/src/main/scripts/UpdateBankPin.rs2asm +++ b/runelite-client/src/main/scripts/UpdateBankPin.rs2asm @@ -4,6 +4,8 @@ .int_var_count 22 .string_var_count 0 iload 0 + sconst "bankpin" + runelite_callback iconst 3 if_icmpeq LABEL4 jump LABEL20