diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java index f5ac6f4d8a..d84bae473e 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java @@ -129,6 +129,7 @@ public class WidgetID public static final int SKILLS_GROUP_ID = 320; public static final int QUESTTAB_GROUP_ID = 629; public static final int MUSIC_GROUP_ID = 239; + public static final int BARROWS_PUZZLE_GROUP_ID = 25; static class WorldMap { @@ -577,7 +578,7 @@ public class WidgetID { static final int POINTS_INFOBOX = 6; } - + static class ExperienceDrop { static final int DROP_1 = 15; @@ -771,4 +772,26 @@ public class WidgetID static final int CONTAINER = 0; static final int LIST = 3; } + + static class Barrows_Puzzle + { + static final int PARENT = 0; + static final int CONTAINER = 1; + static final int TOP_ROW_PUZZLE = 2; + static final int SEQUENCE_1 = 3; + static final int SEQUENCE_1_TEXT = 4; + static final int SEQUENCE_2 = 5; + static final int SEQUENCE_2_TEXT = 6; + static final int SEQUENCE_3 = 7; + static final int SEQUENCE_3_TEXT = 8; + static final int SEQUENCE_4 = 9; + static final int SEQUENCE_4_TEXT = 10; + static final int NEXT_SHAPE_TEXT = 11; + static final int ANSWER1_CONTAINER = 12; + static final int ANSWER1 = 13; + static final int ANSWER2_CONTAINER = 14; + static final int ANSWER2 = 15; + static final int ANSWER3_CONTAINER = 16; + static final int ANSWER3 = 17; + } } diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java index 01ba6a0e49..5f12519d5d 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java @@ -410,6 +410,14 @@ public enum WidgetInfo BARROWS_BROTHERS(WidgetID.BARROWS_GROUP_ID, WidgetID.Barrows.BARROWS_BROTHERS), BARROWS_POTENTIAL(WidgetID.BARROWS_GROUP_ID, WidgetID.Barrows.BARROWS_POTENTIAL), BARROWS_REWARD_INVENTORY(WidgetID.BARROWS_REWARD_GROUP_ID, WidgetID.Barrows.BARROWS_REWARD_INVENTORY), + BARROWS_PUZZLE_PARENT(WidgetID.BARROWS_PUZZLE_GROUP_ID, WidgetID.Barrows_Puzzle.PARENT), + BARROWS_PUZZLE_ANSWER1(WidgetID.BARROWS_PUZZLE_GROUP_ID, WidgetID.Barrows_Puzzle.ANSWER1), + BARROWS_PUZZLE_ANSWER1_CONTAINER(WidgetID.BARROWS_PUZZLE_GROUP_ID, WidgetID.Barrows_Puzzle.ANSWER1_CONTAINER), + BARROWS_PUZZLE_ANSWER2(WidgetID.BARROWS_PUZZLE_GROUP_ID, WidgetID.Barrows_Puzzle.ANSWER2), + BARROWS_PUZZLE_ANSWER2_CONTAINER(WidgetID.BARROWS_PUZZLE_GROUP_ID, WidgetID.Barrows_Puzzle.ANSWER2_CONTAINER), + BARROWS_PUZZLE_ANSWER3(WidgetID.BARROWS_PUZZLE_GROUP_ID, WidgetID.Barrows_Puzzle.ANSWER3), + BARROWS_PUZZLE_ANSWER3_CONTAINER(WidgetID.BARROWS_PUZZLE_GROUP_ID, WidgetID.Barrows_Puzzle.ANSWER3_CONTAINER), + BARROWS_FIRST_PUZZLE(WidgetID.BARROWS_PUZZLE_GROUP_ID, WidgetID.Barrows_Puzzle.SEQUENCE_1), BLAST_MINE(WidgetID.BLAST_MINE_GROUP_ID, 2), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsConfig.java index 6fc2e05947..41f2bbc67d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsConfig.java @@ -86,4 +86,15 @@ public interface BarrowsConfig extends Config { return Color.RED; } + + @ConfigItem( + keyName = "showPuzzleAnswer", + name = "Show Puzzle Answer", + description = "Configures if the puzzle answer should be shown.", + position = 5 + ) + default boolean showPuzzleAnswer() + { + return true; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsOverlay.java index 1c480719ec..4ecdebccf3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsOverlay.java @@ -27,6 +27,7 @@ package net.runelite.client.plugins.barrows; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics2D; +import java.awt.Rectangle; import java.util.List; import javax.inject.Inject; import net.runelite.api.Client; @@ -38,6 +39,7 @@ import net.runelite.api.Perspective; import net.runelite.api.Player; import net.runelite.api.WallObject; import net.runelite.api.coords.LocalPoint; +import net.runelite.api.widgets.Widget; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; @@ -66,6 +68,7 @@ class BarrowsOverlay extends Overlay Player local = client.getLocalPlayer(); final Color npcColor = getMinimapDotColor(1); final Color playerColor = getMinimapDotColor(2); + Widget puzzleAnswer = plugin.getPuzzleAnswer(); // tunnels are only on z=0 if (!plugin.getWalls().isEmpty() && client.getPlane() == 0 && config.showMinimap()) @@ -119,6 +122,13 @@ class BarrowsOverlay extends Overlay renderBarrowsBrothers(graphics); } + if (puzzleAnswer != null && config.showPuzzleAnswer() && !puzzleAnswer.isHidden()) + { + Rectangle answerRect = puzzleAnswer.getBounds(); + graphics.setColor(Color.GREEN); + graphics.draw(answerRect); + } + return null; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsPlugin.java index 321bb0a10a..bc505755ff 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsPlugin.java @@ -24,6 +24,7 @@ */ package net.runelite.client.plugins.barrows; +import com.google.common.collect.ImmutableList; import com.google.common.collect.Sets; import com.google.inject.Provides; import java.util.HashSet; @@ -82,6 +83,11 @@ public class BarrowsPlugin extends Plugin ); private static final Set BARROWS_LADDERS = Sets.newHashSet(NullObjectID.NULL_20675, NullObjectID.NULL_20676, NullObjectID.NULL_20677); + private static final ImmutableList POSSIBLE_SOLUTIONS = ImmutableList.of( + WidgetInfo.BARROWS_PUZZLE_ANSWER1, + WidgetInfo.BARROWS_PUZZLE_ANSWER2, + WidgetInfo.BARROWS_PUZZLE_ANSWER3 + ); @Getter(AccessLevel.PACKAGE) private final Set walls = new HashSet<>(); @@ -89,6 +95,9 @@ public class BarrowsPlugin extends Plugin @Getter(AccessLevel.PACKAGE) private final Set ladders = new HashSet<>(); + @Getter + private Widget puzzleAnswer; + @Inject private OverlayManager overlayManager; @@ -130,6 +139,7 @@ public class BarrowsPlugin extends Plugin overlayManager.remove(brotherOverlay); walls.clear(); ladders.clear(); + puzzleAnswer = null; // Restore widgets final Widget potential = client.getWidget(WidgetInfo.BARROWS_POTENTIAL); @@ -213,6 +223,7 @@ public class BarrowsPlugin extends Plugin // on region changes the tiles get set to null walls.clear(); ladders.clear(); + puzzleAnswer = null; } } @@ -243,5 +254,21 @@ public class BarrowsPlugin extends Plugin .runeLiteFormattedMessage(message.build()) .build()); } + else if (event.getGroupId() == WidgetID.BARROWS_PUZZLE_GROUP_ID) + { + final int answer = client.getWidget(WidgetInfo.BARROWS_FIRST_PUZZLE).getModelId() - 3; + puzzleAnswer = null; + + for (WidgetInfo puzzleNode : POSSIBLE_SOLUTIONS) + { + final Widget widgetToCheck = client.getWidget(puzzleNode); + + if (widgetToCheck != null && widgetToCheck.getModelId() == answer) + { + puzzleAnswer = client.getWidget(puzzleNode); + break; + } + } + } } }