From 7a222bbb6f214096a51a42da694111dd86fc0549 Mon Sep 17 00:00:00 2001 From: Max Weber Date: Sun, 21 Jul 2019 13:01:46 -0600 Subject: [PATCH 1/3] runelite-api Remove WidgetPositioned It is nearly guaranteed that this event runs every game tick, because there are cs2s that touch widgets every frame. Additionally it should have been run at the end of every client tick, but DeferredEventBus doesn't support that. --- .../runelite/api/events/WidgetPositioned.java | 36 ------------------- .../ChatboxPerformancePlugin.java | 4 +-- .../InterfaceStylesPlugin.java | 4 +-- 3 files changed, 4 insertions(+), 40 deletions(-) delete mode 100644 runelite-api/src/main/java/net/runelite/api/events/WidgetPositioned.java diff --git a/runelite-api/src/main/java/net/runelite/api/events/WidgetPositioned.java b/runelite-api/src/main/java/net/runelite/api/events/WidgetPositioned.java deleted file mode 100644 index d5479e3485..0000000000 --- a/runelite-api/src/main/java/net/runelite/api/events/WidgetPositioned.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2018, Adam - * 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 OWNER 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.api.events; - -import lombok.Value; - -/** - * An event where the position of a {@link net.runelite.api.widgets.Widget} - * relative to its parent has changed. - */ -@Value -public class WidgetPositioned -{ -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatboxperformance/ChatboxPerformancePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatboxperformance/ChatboxPerformancePlugin.java index aaf6634ead..b03b75fe54 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatboxperformance/ChatboxPerformancePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatboxperformance/ChatboxPerformancePlugin.java @@ -26,8 +26,8 @@ package net.runelite.client.plugins.chatboxperformance; import javax.inject.Inject; import net.runelite.api.Client; +import net.runelite.api.events.ClientTick; import net.runelite.api.widgets.WidgetType; -import net.runelite.api.events.WidgetPositioned; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.api.widgets.WidgetPositionMode; @@ -46,7 +46,7 @@ public class ChatboxPerformancePlugin extends Plugin private Client client; @Subscribe - public void onWidgetPositioned(WidgetPositioned event) + public void onClientTick(ClientTick event) { if (!areWidgetsFixed()) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesPlugin.java index c635eb9bd5..839fff4083 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesPlugin.java @@ -36,10 +36,10 @@ import net.runelite.api.HealthBar; import net.runelite.api.SpriteID; import net.runelite.api.SpritePixels; import net.runelite.api.events.BeforeMenuRender; +import net.runelite.api.events.ClientTick; import net.runelite.api.events.ConfigChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.PostHealthBar; -import net.runelite.api.events.WidgetPositioned; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.callback.ClientThread; @@ -107,7 +107,7 @@ public class InterfaceStylesPlugin extends Plugin } @Subscribe - public void onWidgetPositioned(WidgetPositioned widgetPositioned) + public void onClientTick(ClientTick event) { adjustWidgetDimensions(); } From bacc5ae6d06d2b34485e0332bed760f8af011b37 Mon Sep 17 00:00:00 2001 From: Max Weber Date: Sun, 21 Jul 2019 19:41:27 -0600 Subject: [PATCH 2/3] ChatboxPerformancePlugin: Hook the cs2 to know when to rebuild --- .../ChatboxPerformancePlugin.java | 54 +-- .../scripts/ToplevelChatboxBackground.hash | 1 + .../scripts/ToplevelChatboxBackground.rs2asm | 426 ++++++++++++++++++ 3 files changed, 455 insertions(+), 26 deletions(-) create mode 100644 runelite-client/src/main/scripts/ToplevelChatboxBackground.hash create mode 100644 runelite-client/src/main/scripts/ToplevelChatboxBackground.rs2asm diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatboxperformance/ChatboxPerformancePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatboxperformance/ChatboxPerformancePlugin.java index b03b75fe54..a548bb44ff 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatboxperformance/ChatboxPerformancePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatboxperformance/ChatboxPerformancePlugin.java @@ -26,12 +26,15 @@ package net.runelite.client.plugins.chatboxperformance; import javax.inject.Inject; import net.runelite.api.Client; -import net.runelite.api.events.ClientTick; +import net.runelite.api.GameState; +import net.runelite.api.ScriptID; +import net.runelite.api.events.ScriptCallbackEvent; import net.runelite.api.widgets.WidgetType; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.api.widgets.WidgetPositionMode; import net.runelite.api.widgets.WidgetSizeMode; +import net.runelite.client.callback.ClientThread; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -45,36 +48,35 @@ public class ChatboxPerformancePlugin extends Plugin @Inject private Client client; + @Inject + private ClientThread clientThread; + + @Override + public void startUp() + { + if (client.getGameState() == GameState.LOGGED_IN) + { + clientThread.invokeLater(() -> client.runScript(ScriptID.RESET_CHATBOX_INPUT)); + } + } + + @Override + public void shutDown() + { + if (client.getGameState() == GameState.LOGGED_IN) + { + clientThread.invokeLater(() -> client.runScript(ScriptID.RESET_CHATBOX_INPUT)); + } + } + @Subscribe - public void onClientTick(ClientTick event) + private void onScriptCallbackEvent(ScriptCallbackEvent ev) { - if (!areWidgetsFixed()) + if (!"chatboxBackgroundBuilt".equals(ev.getEventName())) { - fixChatbox(); - } - } - - private boolean areWidgetsFixed() - { - Widget widget = client.getWidget(WidgetInfo.CHATBOX_TRANSPARENT_BACKGROUND); - if (widget == null) - { - return true; + return; } - Widget[] widgets = widget.getChildren(); - - if (widgets != null && widgets.length > 0) - { - Widget last = widgets[widgets.length - 1]; - return last != null && last.getOpacity() < 254; - } - - return false; - } - - private void fixChatbox() - { fixDarkBackground(); fixWhiteLines(true); fixWhiteLines(false); diff --git a/runelite-client/src/main/scripts/ToplevelChatboxBackground.hash b/runelite-client/src/main/scripts/ToplevelChatboxBackground.hash new file mode 100644 index 0000000000..96871403a0 --- /dev/null +++ b/runelite-client/src/main/scripts/ToplevelChatboxBackground.hash @@ -0,0 +1 @@ +975C2E20F49CD83A72B6A7BA4CF34F9B476F26DCD2649B0CE79B3F93CBB892DD \ No newline at end of file diff --git a/runelite-client/src/main/scripts/ToplevelChatboxBackground.rs2asm b/runelite-client/src/main/scripts/ToplevelChatboxBackground.rs2asm new file mode 100644 index 0000000000..3504991537 --- /dev/null +++ b/runelite-client/src/main/scripts/ToplevelChatboxBackground.rs2asm @@ -0,0 +1,426 @@ +.id 923 +.int_stack_count 0 +.string_stack_count 0 +.int_var_count 5 +.string_var_count 0 +; callback "chatboxBackgroundBuilt" +; used by the ChatboxPerformancePlugin to know when it needs to rebuild. +; Unmark the plugin as hidden and toggle it. The chatbox should change opacity +; slightly + iconst 10616834 + cc_deleteall + iconst 0 + istore 0 + get_varc_int 41 + iconst 1337 + if_icmpeq LABEL8 + jump LABEL24 +LABEL8: + invoke 922 + iconst 1 + if_icmpeq LABEL12 + jump LABEL15 +LABEL12: + iconst 1 + istore 0 + jump LABEL24 +LABEL15: + getwindowmode + iconst 1 + if_icmpeq LABEL19 + jump LABEL24 +LABEL19: + iconst 0 + set_varc_int 41 + iconst 0 + iconst 0 + invoke 183 +LABEL24: + iload 0 + iconst 10616869 + if_sethide + get_varbit 6374 + iconst 1 + if_icmpeq LABEL31 + jump LABEL48 +LABEL31: + getwindowmode + iconst 1 + if_icmpne LABEL35 + jump LABEL48 +LABEL35: + iconst 1 + iconst 0 + iconst 2 + iconst 0 + iconst 10616890 + if_setposition + iconst -1 + iconst 0 + iconst 0 + iconst 0 + iconst 10617391 + if_setposition + jump LABEL60 +LABEL48: + iconst 0 + iconst 0 + iconst 0 + iconst 0 + iconst 10616890 + if_setposition + iconst 0 + iconst 0 + iconst 2 + iconst 0 + iconst 10617391 + if_setposition +LABEL60: + iconst 10616870 + cc_deleteall + iconst 10616888 + cc_deleteall + iconst 0 + istore 1 + clientclock + get_varc_int 223 + if_icmplt LABEL70 + jump LABEL82 +LABEL70: + invoke 900 + iconst 1129 + if_icmpne LABEL74 + jump LABEL82 +LABEL74: + iconst 1 + istore 1 + iconst 2155 + get_varc_int 223 + sconst "i" + iconst 10616870 + if_setontimer + jump LABEL86 +LABEL82: + iconst -1 + sconst "" + iconst 10616870 + if_setontimer +LABEL86: + invoke 921 + iconst 0 + if_icmpeq LABEL90 + jump LABEL156 +LABEL90: + iconst 1 + iconst 10616870 + if_setnoclickthrough + iload 1 + iconst 0 + if_icmpeq LABEL97 + jump LABEL135 +LABEL97: + iconst 10616870 + iconst 5 + iconst 0 + cc_create + iconst 0 + iconst 0 + iconst 1 + iconst 1 + cc_setsize + iconst 0 + iconst 0 + iconst 1 + iconst 1 + cc_setposition + iconst 1017 + cc_setgraphic + iconst 0 + cc_settiling + iconst 0 + cc_settrans + iconst 10616888 + iconst 3 + iconst 0 + cc_create + iconst 0 + iconst 1 + iconst 1 + iconst 0 + cc_setsize + iconst 0 + iconst 15 + iconst 1 + iconst 2 + cc_setposition + iconst 8418912 + cc_setcolour + iconst 1 + cc_setfill +LABEL135: + iconst 10617391 + iconst 792 + iconst 789 + iconst 790 + iconst 791 + iconst 773 + iconst 788 + iconst 0 + invoke 838 + invoke 2373 + iconst 1 + if_icmpeq LABEL148 + jump LABEL152 +LABEL148: + iconst 255 + iconst 10616835 + if_settrans + jump LABEL155 +LABEL152: + iconst 0 + iconst 10616835 + if_settrans +LABEL155: + return +LABEL156: + iconst 16384 + iconst 25 + div + istore 2 + iconst 16384 + istore 3 + get_varbit 2570 + iconst 1 + if_icmpeq LABEL166 + jump LABEL170 +LABEL166: + iconst 1 + iconst 10616870 + if_setnoclickthrough + jump LABEL176 +LABEL170: + iconst 0 + iconst 10616870 + if_setnoclickthrough + iconst 1 + iconst 10616870 + 2006 +LABEL176: + iconst 0 + istore 4 + iload 1 + iconst 0 + if_icmpeq LABEL182 + jump LABEL332 +LABEL182: + invoke 1972 + iconst 0 + if_icmpeq LABEL186 + jump LABEL266 +LABEL186: + iload 4 + iconst 20 + if_icmplt LABEL190 + jump LABEL265 +LABEL190: + iconst 10616870 + iconst 3 + iload 4 + cc_create + iconst 0 + iload 3 + iconst 1 + iconst 2 + cc_setsize + iconst 0 + iconst 0 + iconst 1 + iconst 2 + cc_setposition + iconst 0 + cc_setcolour + iconst 1 + cc_setfill + iconst 254 + cc_settrans + iconst 10616888 + iconst 3 + iload 4 + iconst 2 + multiply + cc_create + iconst 10616888 + iconst 3 + iload 4 + iconst 2 + multiply + iconst 1 + add + cc_create 1 + iload 3 + iconst 1 + iconst 2 + iconst 0 + cc_setsize + iload 3 + iconst 1 + iconst 2 + iconst 0 + cc_setsize 1 + iconst 0 + iconst 0 + iconst 0 + iconst 0 + cc_setposition + iconst 0 + iconst 15 + iconst 0 + iconst 2 + cc_setposition 1 + iconst 16777215 + cc_setcolour + iconst 16777215 + cc_setcolour 1 + iconst 1 + cc_setfill + iconst 1 + cc_setfill 1 + iconst 251 + cc_settrans + iconst 250 + cc_settrans 1 + iload 4 + iconst 1 + add + iload 3 + iload 2 + sub + istore 3 + istore 4 + jump LABEL186 +LABEL265: + sconst "chatboxBackgroundBuilt" + runelite_callback + jump LABEL332 +LABEL266: + iconst 10616870 + iconst 3 + iload 4 + cc_create + iconst 0 + iload 3 + iconst 1 + iconst 2 + cc_setsize + iconst 0 + iconst 0 + iconst 1 + iconst 2 + cc_setposition + iconst 0 + cc_setcolour + iconst 1 + cc_setfill + iconst 225 + cc_settrans + iconst 10616888 + iconst 3 + iload 4 + iconst 2 + multiply + cc_create + iconst 10616888 + iconst 3 + iload 4 + iconst 2 + multiply + iconst 1 + add + cc_create 1 + iload 3 + iconst 1 + iconst 2 + iconst 0 + cc_setsize + iload 3 + iconst 1 + iconst 2 + iconst 0 + cc_setsize 1 + iconst 0 + iconst 0 + iconst 0 + iconst 0 + cc_setposition + iconst 0 + iconst 15 + iconst 0 + iconst 2 + cc_setposition 1 + iconst 16777215 + cc_setcolour + iconst 16777215 + cc_setcolour 1 + iconst 1 + cc_setfill + iconst 1 + cc_setfill 1 + iconst 200 + cc_settrans + iconst 130 + cc_settrans 1 +LABEL332: + iconst 10617391 + iconst 1190 + iconst 1187 + iconst 1188 + iconst 1189 + iconst 1185 + iconst 1186 + iconst 1 + invoke 838 + iload 0 + iconst 1 + if_icmpeq LABEL345 + jump LABEL349 +LABEL345: + iconst 255 + iconst 10616835 + if_settrans + jump LABEL380 +LABEL349: + invoke 1972 + iconst 0 + if_icmpeq LABEL353 + jump LABEL357 +LABEL353: + iconst 155 + iconst 10616835 + if_settrans + jump LABEL380 +LABEL357: + iconst 255 + iconst 10616835 + if_settrans + iconst 10616834 + iconst 3 + iconst 0 + cc_create + iconst 0 + iconst 0 + iconst 1 + iconst 1 + cc_setsize + iconst 0 + iconst 0 + iconst 1 + iconst 1 + cc_setposition + iconst 0 + cc_setcolour + iconst 1 + cc_setfill + iconst 225 + cc_settrans +LABEL380: + return From eccbc7f34e774d5a2fccb254ada53b7637b3e247 Mon Sep 17 00:00:00 2001 From: Max Weber Date: Sun, 21 Jul 2019 19:42:27 -0600 Subject: [PATCH 3/3] BankTags: Call scripts with all of their arguments explicitly --- .../net/runelite/client/plugins/banktags/tabs/BankSearch.java | 2 +- .../net/runelite/client/plugins/banktags/tabs/TabInterface.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/BankSearch.java b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/BankSearch.java index 4aed474dae..73bfbc99a4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/BankSearch.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/BankSearch.java @@ -85,7 +85,7 @@ public class BankSearch // selecting/changing tab if (closeInput) { - client.runScript(ScriptID.RESET_CHATBOX_INPUT); + client.runScript(ScriptID.RESET_CHATBOX_INPUT, 0, 0); } client.setVar(VarClientInt.INPUT_TYPE, inputType.getType()); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java index 416dfdc824..ef4c7e027b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java @@ -333,7 +333,7 @@ public class TabInterface { bankSearch.reset(true); - clientThread.invokeLater(() -> client.runScript(ScriptID.RESET_CHATBOX_INPUT)); + clientThread.invokeLater(() -> client.runScript(ScriptID.RESET_CHATBOX_INPUT, 0, 0)); } else {