From 290802b9260b14a382f9fa7b4417d4fd020188d5 Mon Sep 17 00:00:00 2001 From: RLitePlus Date: Thu, 3 Sep 2026 13:24:38 -0500 Subject: [PATCH] fix(grandexchange): bound quantity entry retries --- .../grandexchange/GrandExchangeWidget.java | 2 +- .../util/grandexchange/Rs2GrandExchange.java | 28 ++++++++++++------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/grandexchange/GrandExchangeWidget.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/grandexchange/GrandExchangeWidget.java index a45ada09aae..43c406d7f47 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/grandexchange/GrandExchangeWidget.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/grandexchange/GrandExchangeWidget.java @@ -401,4 +401,4 @@ private static Widget getSlotChild(GrandExchangeSlots slot, int childIndex) { return getWidgetChild(getSlot(slot), childIndex); } -} \ No newline at end of file +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/grandexchange/Rs2GrandExchange.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/grandexchange/Rs2GrandExchange.java index 7eec62f2f33..b455347d1d7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/grandexchange/Rs2GrandExchange.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/grandexchange/Rs2GrandExchange.java @@ -41,6 +41,7 @@ import java.util.List; import java.util.*; import java.util.concurrent.ConcurrentHashMap; +import java.util.function.IntSupplier; import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -587,10 +588,12 @@ private static void confirm() { * @param quantity the number of items to set for the offer */ private static boolean setQuantity(int quantity) { - int tries = 0; - while (quantity != getOfferQuantity()) { + boolean success = retryQuantity(quantity, Rs2GrandExchange::getOfferQuantity, () -> { Widget quantityButtonX = GrandExchangeWidget.getQuantityButton_X(); - if (quantityButtonX == null) { log.warn("Quantity button not found"); tries++; continue; } + if (quantityButtonX == null) { + log.warn("Quantity button not found"); + return; + } Microbot.getMouse().click(quantityButtonX.getBounds()); sleepUntil(() -> Rs2Widget.getWidget(InterfaceID.Chatbox.MES_TEXT2) != null); //GE Enter Price/Quantity sleep(600, 1000); @@ -598,14 +601,19 @@ private static boolean setQuantity(int quantity) { sleep(500, 750); Rs2Keyboard.enter(); sleep(1000); - tries++; - if (tries > 3) { - log.error("Failed to set quantity after 3 tries, breaking out to avoid infinite loop."); - Rs2GrandExchange.closeExchange(); - break; - } + }); + if (!success) { + log.error("Failed to set quantity after 3 tries, breaking out to avoid infinite loop."); + Rs2GrandExchange.closeExchange(); + } + return success; + } + + static boolean retryQuantity(int quantity, IntSupplier currentQuantity, Runnable attempt) { + for (int tries = 0; quantity != currentQuantity.getAsInt() && tries < 3; tries++) { + attempt.run(); } - return tries <= 3; + return quantity == currentQuantity.getAsInt(); } /**