diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverPlugin.java
index 0484ce6c37..bbca4a24e7 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverPlugin.java
@@ -33,6 +33,7 @@ import lombok.extern.slf4j.Slf4j;
import net.runelite.api.Client;
import net.runelite.api.events.GameTick;
import net.runelite.api.events.MenuOptionClicked;
+import net.runelite.api.events.WidgetLoaded;
import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetID;
import net.runelite.api.widgets.WidgetInfo;
@@ -93,6 +94,34 @@ public class PuzzleSolverPlugin extends Plugin
return configManager.getConfig(PuzzleSolverConfig.class);
}
+ @Subscribe
+ public void onWidgetLoaded(WidgetLoaded widget)
+ {
+ if (widget.getGroupId() != WidgetID.VARROCK_MUSEUM_QUIZ_GROUP_ID)
+ {
+ return;
+ }
+
+ final Widget questionWidget = client.getWidget(WidgetInfo.VARROCK_MUSEUM_QUESTION);
+
+ if (questionWidget == null)
+ {
+ return;
+ }
+
+ final Widget answerWidget = VarrockMuseumAnswer.findCorrect(
+ client,
+ questionWidget.getText(),
+ WidgetInfo.VARROCK_MUSEUM_FIRST_ANSWER,
+ WidgetInfo.VARROCK_MUSEUM_SECOND_ANSWER,
+ WidgetInfo.VARROCK_MUSEUM_THIRD_ANSWER);
+
+ if (answerWidget != null && !answerWidget.getText().contains("
" + answerWidget.getText() + "");
+ }
+ }
+
@Subscribe
public void onWidgetClicked(MenuOptionClicked menuOptionClicked)
{
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/VarrockMuseumAnswer.java b/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/VarrockMuseumAnswer.java
new file mode 100644
index 0000000000..de38b5616b
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/VarrockMuseumAnswer.java
@@ -0,0 +1,167 @@
+/*
+ * Copyright (c) 2018, Viktor
+ * Copyright (c) 2018, Tomas Slusny
+ * 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.client.plugins.puzzlesolver;
+
+import java.util.HashMap;
+import java.util.Map;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import net.runelite.api.Client;
+import net.runelite.api.widgets.Widget;
+import net.runelite.api.widgets.WidgetInfo;
+
+@Getter
+@RequiredArgsConstructor
+enum VarrockMuseumAnswer
+{
+ LIZARD_1("How does a lizard regulate body heat?", "Sunlight."),
+ LIZARD_2("Who discovered how to kill lizards?", "The Slayer Masters."),
+ LIZARD_3("How many eyes does a lizard have?", "Three."),
+ LIZARD_4("What order do lizards belong to?", "Squamata."),
+ LIZARD_5("What happens when a lizard becomes cold?", "It becomes sleepy."),
+ LIZARD_6("Lizard skin is made of the same substance as?", "Hair."),
+
+ TORTOISE_1("What is the name of the oldest tortoise ever recorded?", "Mibbiwocket."),
+ TORTOISE_2("What is a tortoise's favourite food?", "Vegetables."),
+ TORTOISE_3("Name the explorer who discovered the world's oldest tortoise.", "Admiral Bake."),
+ TORTOISE_4("How does the tortoise protect itself?", "Hard shell."),
+ TORTOISE_5("If a tortoise had twenty rings on its shell, how old would it be?", "Twenty years."),
+ TORTOISE_6("Which race breeds tortoises for battle?", "Gnomes."),
+
+ DRAGON_1("What is considered a delicacy by dragons?", "Runite."),
+ DRAGON_2("What is the best defence against a dragon's attack?", "Anti dragon-breath shield."),
+ DRAGON_3("How long do dragons live?", "Unknown."),
+ DRAGON_4("Which of these is not a type of dragon?", "Elemental."),
+ DRAGON_5("What is the favoured territory of a dragon?", "Old battle sites."),
+ DRAGON_6("Approximately how many feet tall do dragons stand?", "Twelve."),
+
+ WYVERN_1("How did the wyverns die out?", "Climate change."),
+ WYVERN_2("How many legs does a wyvern have?", "Two."),
+ WYVERN_3("Where have wyvern bones been found?", "Asgarnia."),
+ WYVERN_4("Which genus does the wyvern theoretically belong to?", "Reptiles."),
+ WYVERN_5("What are the wyverns' closest relations?", "Dragons."),
+ WYVERN_6("What is the ambient temperature of wyvern bones?", "Below room temperature."),
+
+ SNAIL_1("What is special about the shell of the giant Morytanian snail?", "It is resistant to acid."),
+ SNAIL_2("How do Morytanian snails capture their prey?", "Spitting acid."),
+ SNAIL_3("Which of these is a snail byproduct?", "Fireproof oil."),
+ SNAIL_4("What does 'Achatina Acidia' mean?", "Acid-spitting snail."),
+ SNAIL_5("How do snails move?", "Contracting and stretching."),
+ SNAIL_6("What is the 'trapdoor', which snails use to cover the entrance to their shells called?", "An operculum."),
+
+ SNAKE_1("What is snake venom adapted from?", "Stomach acid."),
+ SNAKE_2("Aside from their noses, what do snakes use to smell?", "Tongue."),
+ SNAKE_3("If a snake sticks its tongue out at you, what is it doing?", "Seeing how you smell."),
+ SNAKE_4("If some snakes use venom to kill their prey, what do other snakes use?", "Constriction."),
+ SNAKE_5("Lizards and snakes belong to the same order - what is it?", "Squamata."),
+ SNAKE_6("Which habitat do snakes prefer?", "Anywhere."),
+
+ SLUG_1("We assume that sea slugs have a stinging organ on their soft skin - what is it called?", "Nematocysts."),
+ SLUG_2("Why has the museum never examined a live sea slug?", "The researchers keep vanishing."),
+ SLUG_3("What do we think the sea slug feeds upon?", "Seaweed."),
+ SLUG_4("What are the two fangs presumed to be used for?", "Defense or display."),
+ SLUG_5("Off of which coastline would you find sea slugs?", "Ardougne."),
+ SLUG_6("In what way are sea slugs similar to snails?", "They have a hard shell."),
+
+ MONKEY_1("Which type of primates do monkeys belong to?", "Simian."),
+ MONKEY_2("Which have the lighter colour: Karamjan or Harmless monkeys?", "Harmless."),
+ MONKEY_3("Monkeys love bananas. What else do they like to eat?", "Bitternuts."),
+ MONKEY_4("There are two known families of monkeys. One is Karamjan, the other is...?", "Harmless."),
+ MONKEY_5("What colour mohawk do Karamjan monkeys have?", "Red."),
+ MONKEY_6("What have Karamjan monkeys taken a deep dislike to?", "Seaweed."),
+
+ KALPHITE_1("Kalphites are ruled by a...?", "Pasha."),
+ KALPHITE_2("What is the lowest caste in kalphite society?", "Worker."),
+ KALPHITE_3("What are the armoured plates on a kalphite called?", "Lamellae."),
+ KALPHITE_4("Are kalphites carnivores, herbivores or omnivores?", "Carnivores."),
+ KALPHITE_5("What are kalphites assumed to have evolved from?", "Scarab beetles."),
+ KALPHITE_6("Name the prominent figure in kalphite mythology?", "Scabaras."),
+
+ TERRORBIRD_1("What is a terrorbird's preferred food?", "Anything."),
+ TERRORBIRD_2("Who use terrorbirds as mounts?", "Gnomes."),
+ TERRORBIRD_3("Where do terrorbirds get most of their water?", "Eating plants."),
+ TERRORBIRD_4("How many claws do terrorbirds have?", "Four."),
+ TERRORBIRD_5("What do terrorbirds eat to aid digestion?", "Stones."),
+ TERRORBIRD_6("How many teeth do terrorbirds have?", "0."),
+
+ PENGUIN_1("Which sense do penguins rely on when hunting?", "Sight."),
+ PENGUIN_2("Which skill seems unusual for the penguins to possess?", "Planning."),
+ PENGUIN_3("How do penguins keep warm?", "A layer of fat."),
+ PENGUIN_4("What is the preferred climate for penguins?", "Cold."),
+ PENGUIN_5("Describe the behaviour of penguins?", "Social."),
+ PENGUIN_6("When do penguins fast?", "During breeding."),
+
+ MOLE_1("What habitat do moles prefer?", "Subterranean."),
+ MOLE_2("Why are moles considered to be an agricultural pest?", "They dig holes."),
+ MOLE_3("Who discovered giant moles?", "Wyson the Gardener."),
+ MOLE_4("What would you call a group of young moles?", "A labour."),
+ MOLE_5("What is a mole's favourite food?", "Insects and other invertebrates."),
+ MOLE_6("Which family do moles belong to?", "The Talpidae family."),
+
+ CAMEL_1("What is produced by feeding chilli to a camel?", "Toxic dung."),
+ CAMEL_2("If an ugthanki has one, how many does a bactrian have?", "Two."),
+ CAMEL_3("Camels: herbivore, carnivore or omnivore?", "Omnivore."),
+ CAMEL_4("What is the usual mood for a camel?", "Annoyed."),
+ CAMEL_5("Where would you find an ugthanki?", "Al Kharid."),
+ CAMEL_6("Which camel byproduct is known to be very nutritious?", "Milk."),
+
+ LEECH_1("What is the favoured habitat of leeches?", "Water."),
+ LEECH_2("What shape is the inside of a leech's mouth?", "'Y'-shaped."),
+ LEECH_3("Which of these is not eaten by leeches?", "Apples."),
+ LEECH_4("What contributed to the giant growth of Morytanian leeches?", "Environment."),
+ LEECH_5("What is special about Morytanian leeches?", "They attack by jumping."),
+ LEECH_6("How does a leech change when it feeds?", "It doubles in size.");
+
+ private static final Map MATCHES = new HashMap<>();
+
+ static
+ {
+ for (VarrockMuseumAnswer varrockMuseumAnswer : VarrockMuseumAnswer.values())
+ {
+ MATCHES.put(varrockMuseumAnswer.question, varrockMuseumAnswer.answer);
+ }
+ }
+
+ private final String question;
+ private final String answer;
+
+ static Widget findCorrect(final Client client, final String question, final WidgetInfo... widgets)
+ {
+ final String s = MATCHES.get(question);
+
+ for (WidgetInfo widgetInfo : widgets)
+ {
+ final Widget widget = client.getWidget(widgetInfo);
+
+ if (widget != null && widget.getText().equals(s))
+ {
+ return widget;
+ }
+ }
+
+ return null;
+ }
+}