diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeConfig.java index 3d484d381e..b1eb1e212c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeConfig.java @@ -74,4 +74,26 @@ public interface GrandExchangeConfig extends Config { return true; } + + @ConfigItem( + position = 5, + keyName = "showTotal", + name = "Show grand exchange total", + description = "Show grand exchange total" + ) + default boolean showTotal() + { + return true; + } + + @ConfigItem( + position = 6, + keyName = "showExact", + name = "Show exact total value", + description = "Show exact total value" + ) + default boolean showExact() + { + return false; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java index 01fde6181d..bccc7be58d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java @@ -60,6 +60,7 @@ import net.runelite.api.events.MenuEntryAdded; import net.runelite.client.events.SessionClose; import net.runelite.client.events.SessionOpen; import net.runelite.api.events.WidgetLoaded; +import net.runelite.api.events.ScriptCallbackEvent; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetID; import net.runelite.api.widgets.WidgetInfo; @@ -428,6 +429,49 @@ public class GrandExchangePlugin extends Plugin } } + @Subscribe + public void onScriptCallbackEvent(ScriptCallbackEvent event) + { + if (!event.getEventName().equals("setGETitle") || !config.showTotal()) + { + return; + } + + long total = 0; + GrandExchangeOffer[] offers = client.getGrandExchangeOffers(); + for (GrandExchangeOffer offer : offers) + { + if (offer != null) + { + total += offer.getPrice() * offer.getTotalQuantity(); + } + } + + if (total == 0L) + { + return; + } + + StringBuilder titleBuilder = new StringBuilder(" ("); + + if (config.showExact()) + { + titleBuilder.append(StackFormatter.formatNumber(total)); + } + else + { + titleBuilder.append(StackFormatter.quantityToStackSize(total)); + } + + titleBuilder.append(')'); + + // Append to title + String[] stringStack = client.getStringStack(); + int stringStackSize = client.getStringStackSize(); + + stringStack[stringStackSize - 1] += titleBuilder.toString(); + } + @Subscribe public void onGameTick(GameTick event) { diff --git a/runelite-client/src/main/scripts/GELayout.hash b/runelite-client/src/main/scripts/GELayout.hash new file mode 100644 index 0000000000..dba0bed2f5 --- /dev/null +++ b/runelite-client/src/main/scripts/GELayout.hash @@ -0,0 +1 @@ +03E202EADA91DB0D5EE9B98E360685149F29B10A1C565B9BE65C2A50BD262BC3 \ No newline at end of file diff --git a/runelite-client/src/main/scripts/GELayout.rs2asm b/runelite-client/src/main/scripts/GELayout.rs2asm new file mode 100644 index 0000000000..5a75b20ffc --- /dev/null +++ b/runelite-client/src/main/scripts/GELayout.rs2asm @@ -0,0 +1,101 @@ +.id 806 +.int_stack_count 7 +.string_stack_count 0 +.int_var_count 9 +.string_var_count 0 + iload 6 + invoke 41 + get_varbit 4439 + iconst 1 + sub + istore 7 + iconst 105 + iconst 118 + iconst 150 + iload 7 + enum + istore 8 + iload 8 + iconst -1 + if_icmpeq LABEL16 + jump LABEL37 +LABEL16: + iconst 1 + iload 2 + if_sethide + iconst 0 + iload 3 + if_sethide + iconst 1 + iload 4 + if_sethide + iconst 1 + iload 5 + if_sethide + iload 0 + iload 1 + cc_find + iconst 1 + if_icmpeq LABEL34 + jump LABEL36 +LABEL34: + sconst "Grand Exchange" + sconst "setGETitle" ; + runelite_callback ; + cc_settext +LABEL36: + return +LABEL37: + iconst 0 + iload 2 + if_sethide + iconst 0 + iload 2 + if_settrans + iload 7 + stockmarket_isofferempty + iconst 1 + if_icmpeq LABEL48 + jump LABEL66 +LABEL48: + iconst 1 + iload 3 + if_sethide + iconst 1 + iload 4 + if_sethide + iconst 0 + iload 5 + if_sethide + iload 0 + iload 1 + cc_find + iconst 1 + if_icmpeq LABEL63 + jump LABEL65 +LABEL63: + sconst "Grand Exchange: Set up offer" + cc_settext +LABEL65: + return +LABEL66: + iconst 1 + iload 3 + if_sethide + iconst 0 + iload 4 + if_sethide + iconst 1 + iload 5 + if_sethide + iload 0 + iload 1 + cc_find + iconst 1 + if_icmpeq LABEL81 + jump LABEL83 +LABEL81: + sconst "Grand Exchange: Offer status" + cc_settext +LABEL83: + return