diff --git a/gradle.properties b/gradle.properties index a55e70d708..d9f735496b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -31,7 +31,7 @@ project.build.group=net.runelite project.build.version=1.12.26.2 glslang.path= -microbot.version=2.5.9 +microbot.version=2.6.0 microbot.commit.sha=nogit microbot.repo.url=http://138.201.81.246:8081/repository/microbot-snapshot/ microbot.repo.username= diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/dialogues/Rs2Dialogue.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/dialogues/Rs2Dialogue.java index 04c2223c0b..ab7b0122c8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/dialogues/Rs2Dialogue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/dialogues/Rs2Dialogue.java @@ -17,6 +17,7 @@ import static net.runelite.client.plugins.microbot.util.Global.sleepUntilTrue; public class Rs2Dialogue { + private static final String CLICK_HERE_TO_CONTINUE = "Click here to continue"; /** * Checks if the player is currently in a dialogue state. @@ -112,13 +113,20 @@ private static boolean hasBarrowsContinue() { /** * Checks if there is a "Continue" option in the spell filter dialogue. * - *

This method verifies the visibility of the widget associated with the spell filter continue option. - * It checks the widget with interface ID 162 and child ID 43 to determine if the "Continue" option is present.

+ *

This method verifies the chatbox widget used by spell filter continue prompts. + * It checks the widget text because the same chatbox child is also used for text inputs.

* * @return true if the spell filter continue option is visible, false otherwise. */ private static boolean hasSpellFilterContinue() { - return Rs2Widget.isWidgetVisible(162, 44); + return Microbot.getClientThread().runOnClientThreadOptional(() -> { + Widget widget = Microbot.getClient().getWidget(162, 44); + return widget != null && !widget.isHidden() && isContinuePromptText(widget.getText()); + }).orElse(false); + } + + static boolean isContinuePromptText(String text) { + return text != null && Rs2UiHelper.stripTagsToSpace(text).equalsIgnoreCase(CLICK_HERE_TO_CONTINUE); } /** diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/microbot/shortestpath/collision-map.zip b/runelite-client/src/main/resources/net/runelite/client/plugins/microbot/shortestpath/collision-map.zip index dc77b7fc80..309dfd5817 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/microbot/shortestpath/collision-map.zip and b/runelite-client/src/main/resources/net/runelite/client/plugins/microbot/shortestpath/collision-map.zip differ diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/dialogues/Rs2DialogueTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/dialogues/Rs2DialogueTest.java new file mode 100644 index 0000000000..de226dcf94 --- /dev/null +++ b/runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/dialogues/Rs2DialogueTest.java @@ -0,0 +1,20 @@ +package net.runelite.client.plugins.microbot.util.dialogues; + +import org.junit.Test; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class Rs2DialogueTest { + @Test + public void isContinuePromptTextAcceptsContinuePrompt() { + assertTrue(Rs2Dialogue.isContinuePromptText("Click here to continue")); + } + + @Test + public void isContinuePromptTextRejectsChatboxInputs() { + assertFalse(Rs2Dialogue.isContinuePromptText("Enter amount:")); + assertFalse(Rs2Dialogue.isContinuePromptText("Search")); + assertFalse(Rs2Dialogue.isContinuePromptText("abyssal whip")); + } +} diff --git a/runelite-client/src/test/resources/threadsafety/client-thread-guardrail-baseline.txt b/runelite-client/src/test/resources/threadsafety/client-thread-guardrail-baseline.txt index 4ff40b2a81..2abf8152c4 100644 --- a/runelite-client/src/test/resources/threadsafety/client-thread-guardrail-baseline.txt +++ b/runelite-client/src/test/resources/threadsafety/client-thread-guardrail-baseline.txt @@ -163,11 +163,11 @@ net.runelite.client.plugins.microbot.util.dialogues.Rs2Dialogue#handleQuestOptio net.runelite.client.plugins.microbot.util.dialogues.Rs2Dialogue#hasDialogueOptionTitle(String, boolean): boolean -> net.runelite.api.widgets.Widget#getDynamicChildren(): Widget[] net.runelite.client.plugins.microbot.util.dialogues.Rs2Dialogue#hasDialogueOptionTitle(String, boolean): boolean -> net.runelite.api.widgets.Widget#getText(): String net.runelite.client.plugins.microbot.util.dialogues.Rs2Dialogue#hasSelectAnOption(): boolean -> net.runelite.api.widgets.Widget#getDynamicChildren(): Widget[] -net.runelite.client.plugins.microbot.util.dialogues.Rs2Dialogue#lambda$clickOption$2(Widget, String): boolean -> net.runelite.api.widgets.Widget#getText(): String net.runelite.client.plugins.microbot.util.dialogues.Rs2Dialogue#lambda$clickOption$3(Widget, String): boolean -> net.runelite.api.widgets.Widget#getText(): String -net.runelite.client.plugins.microbot.util.dialogues.Rs2Dialogue#lambda$getCombinationOption$8(boolean, String, Widget): boolean -> net.runelite.api.widgets.Widget#getName(): String -net.runelite.client.plugins.microbot.util.dialogues.Rs2Dialogue#lambda$getDialogueOption$0(boolean, String, Widget): boolean -> net.runelite.api.widgets.Widget#getText(): String -net.runelite.client.plugins.microbot.util.dialogues.Rs2Dialogue#lambda$hasDialogueOption$1(boolean, String, Widget): boolean -> net.runelite.api.widgets.Widget#getText(): String +net.runelite.client.plugins.microbot.util.dialogues.Rs2Dialogue#lambda$clickOption$4(Widget, String): boolean -> net.runelite.api.widgets.Widget#getText(): String +net.runelite.client.plugins.microbot.util.dialogues.Rs2Dialogue#lambda$getCombinationOption$9(boolean, String, Widget): boolean -> net.runelite.api.widgets.Widget#getName(): String +net.runelite.client.plugins.microbot.util.dialogues.Rs2Dialogue#lambda$getDialogueOption$1(boolean, String, Widget): boolean -> net.runelite.api.widgets.Widget#getText(): String +net.runelite.client.plugins.microbot.util.dialogues.Rs2Dialogue#lambda$hasDialogueOption$2(boolean, String, Widget): boolean -> net.runelite.api.widgets.Widget#getText(): String net.runelite.client.plugins.microbot.util.equipment.Rs2Equipment#(): void -> net.runelite.api.EquipmentInventorySlot#getSlotIdx(): int net.runelite.client.plugins.microbot.util.equipment.Rs2Equipment#(): void -> net.runelite.api.EquipmentInventorySlot#values(): EquipmentInventorySlot[] net.runelite.client.plugins.microbot.util.equipment.Rs2Equipment#equipment(): ItemContainer -> net.runelite.api.Client#getItemContainer(int): ItemContainer