diff --git a/runelite-api/src/main/java/net/runelite/api/Quest.java b/runelite-api/src/main/java/net/runelite/api/Quest.java
new file mode 100644
index 0000000000..1db66258e8
--- /dev/null
+++ b/runelite-api/src/main/java/net/runelite/api/Quest.java
@@ -0,0 +1,209 @@
+/*
+ * Copyright (c) 2019 Abex
+ * 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.api;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
+@RequiredArgsConstructor
+public enum Quest
+{
+ //Free Quests
+ BLACK_KNIGHTS_FORTRESS(299, "Black Knights' Fortress"),
+ COOKS_ASSISTANT(300, "Cook's Assistant"),
+ THE_CORSAIR_CURSE(301, "The Corsair Curse"),
+ DEMON_SLAYER(302, "Demon Slayer"),
+ DORICS_QUEST(303, "Doric's Quest"),
+ DRAGON_SLAYER(304, "Dragon Slayer"),
+ ERNEST_THE_CHICKEN(305, "Ernest the Chicken"),
+ GOBLIN_DIPLOMACY(306, "Goblin Diplomacy"),
+ IMP_CATCHER(307, "Imp Catcher"),
+ THE_KNIGHTS_SWORD(308, "The Knight's Sword"),
+ MISTHALIN_MYSTERY(309, "Misthalin Mystery"),
+ PIRATES_TREASURE(310, "Pirate's Treasure"),
+ PRINCE_ALI_RESCUE(311, "Prince Ali Rescue"),
+ THE_RESTLESS_GHOST(312, "The Restless Ghost"),
+ ROMEO__JULIET(313, "Romeo & Juliet"),
+ RUNE_MYSTERIES(314, "Rune Mysteries"),
+ SHEEP_SHEARER(315, "Sheep Shearer"),
+ SHIELD_OF_ARRAV(316, "Shield of Arrav"),
+ VAMPIRE_SLAYER(317, "Vampire Slayer"),
+ WITCHS_POTION(318, "Witch's Potion"),
+
+ //Members' Quests
+ ANIMAL_MAGNETISM(331, "Animal Magnetism"),
+ ANOTHER_SLICE_OF_HAM(332, "Another Slice of H.A.M."),
+ BETWEEN_A_ROCK(333, "Between a Rock..."),
+ BIG_CHOMPY_BIRD_HUNTING(334, "Big Chompy Bird Hunting"),
+ BIOHAZARD(335, "Biohazard"),
+ CABIN_FEVER(336, "Cabin Fever"),
+ CLOCK_TOWER(337, "Clock Tower"),
+ COLD_WAR(338, "Cold War"),
+ CONTACT(339, "Contact!"),
+ CREATURE_OF_FENKENSTRAIN(340, "Creature of Fenkenstrain"),
+ DARKNESS_OF_HALLOWVALE(341, "Darkness of Hallowvale"),
+ DEATH_PLATEAU(342, "Death Plateau"),
+ DEATH_TO_THE_DORGESHUUN(343, "Death to the Dorgeshuun"),
+ THE_DEPTHS_OF_DESPAIR(344, "The Depths of Despair"),
+ DESERT_TREASURE(345, "Desert Treasure"),
+ DEVIOUS_MINDS(346, "Devious Minds"),
+ THE_DIG_SITE(347, "The Dig Site"),
+ DRAGON_SLAYER_II(348, "Dragon Slayer II"),
+ DREAM_MENTOR(349, "Dream Mentor"),
+ DRUIDIC_RITUAL(350, "Druidic Ritual"),
+ DWARF_CANNON(351, "Dwarf Cannon"),
+ EADGARS_RUSE(352, "Eadgar's Ruse"),
+ EAGLES_PEAK(353, "Eagles' Peak"),
+ ELEMENTAL_WORKSHOP_I(354, "Elemental Workshop I"),
+ ELEMENTAL_WORKSHOP_II(355, "Elemental Workshop II"),
+ ENAKHRAS_LAMENT(356, "Enakhra's Lament"),
+ ENLIGHTENED_JOURNEY(357, "Enlightened Journey"),
+ THE_EYES_OF_GLOUPHRIE(358, "The Eyes of Glouphrie"),
+ FAIRYTALE_I__GROWING_PAINS(359, "Fairytale I - Growing Pains"),
+ FAIRYTALE_II__CURE_A_QUEEN(360, "Fairytale II - Cure a Queen"),
+ FAMILY_CREST(361, "Family Crest"),
+ THE_FEUD(362, "The Feud"),
+ FIGHT_ARENA(363, "Fight Arena"),
+ FISHING_CONTEST(364, "Fishing Contest"),
+ FORGETTABLE_TALE(365, "Forgettable Tale..."),
+ BONE_VOYAGE(366, "Bone Voyage"),
+ THE_FREMENNIK_ISLES(367, "The Fremennik Isles"),
+ THE_FREMENNIK_TRIALS(368, "The Fremennik Trials"),
+ GARDEN_OF_TRANQUILLITY(369, "Garden of Tranquillity"),
+ GERTRUDES_CAT(370, "Gertrude's Cat"),
+ GHOSTS_AHOY(371, "Ghosts Ahoy"),
+ THE_GIANT_DWARF(372, "The Giant Dwarf"),
+ THE_GOLEM(373, "The Golem"),
+ THE_GRAND_TREE(374, "The Grand Tree"),
+ THE_GREAT_BRAIN_ROBBERY(375, "The Great Brain Robbery"),
+ GRIM_TALES(376, "Grim Tales"),
+ THE_HAND_IN_THE_SAND(377, "The Hand in the Sand"),
+ HAUNTED_MINE(378, "Haunted Mine"),
+ HAZEEL_CULT(379, "Hazeel Cult"),
+ HEROES_QUEST(380, "Heroes' Quest"),
+ HOLY_GRAIL(381, "Holy Grail"),
+ HORROR_FROM_THE_DEEP(382, "Horror from the Deep"),
+ ICTHLARINS_LITTLE_HELPER(383, "Icthlarin's Little Helper"),
+ IN_AID_OF_THE_MYREQUE(384, "In Aid of the Myreque"),
+ IN_SEARCH_OF_THE_MYREQUE(385, "In Search of the Myreque"),
+ JUNGLE_POTION(386, "Jungle Potion"),
+ KINGS_RANSOM(387, "King's Ransom"),
+ LEGENDS_QUEST(388, "Legends' Quest"),
+ LOST_CITY(389, "Lost City"),
+ THE_LOST_TRIBE(390, "The Lost Tribe"),
+ LUNAR_DIPLOMACY(391, "Lunar Diplomacy"),
+ MAKING_FRIENDS_WITH_MY_ARM(392, "Making Friends with My Arm"),
+ MAKING_HISTORY(393, "Making History"),
+ MERLINS_CRYSTAL(394, "Merlin's Crystal"),
+ MONKEY_MADNESS_I(395, "Monkey Madness I"),
+ MONKEY_MADNESS_II(396, "Monkey Madness II"),
+ MONKS_FRIEND(397, "Monk's Friend"),
+ MOUNTAIN_DAUGHTER(398, "Mountain Daughter"),
+ MOURNINGS_ENDS_PART_I(399, "Mourning's Ends Part I"),
+ MOURNINGS_ENDS_PART_II(400, "Mourning's Ends Part II"),
+ MURDER_MYSTERY(401, "Murder Mystery"),
+ MY_ARMS_BIG_ADVENTURE(402, "My Arm's Big Adventure"),
+ NATURE_SPIRIT(403, "Nature Spirit"),
+ OBSERVATORY_QUEST(404, "Observatory Quest"),
+ OLAFS_QUEST(405, "Olaf's Quest"),
+ ONE_SMALL_FAVOUR(406, "One Small Favour"),
+ PLAGUE_CITY(407, "Plague City"),
+ PRIEST_IN_PERIL(408, "Priest in Peril"),
+ THE_QUEEN_OF_THIEVES(409, "The Queen of Thieves"),
+ RAG_AND_BONE_MAN(410, "Rag and Bone Man"),
+ RAG_AND_BONE_MAN_II(411, "Rag and Bone Man II"),
+ RATCATCHERS(412, "Ratcatchers"),
+ RECIPE_FOR_DISASTER(413, "Recipe for Disaster"),
+ RECRUITMENT_DRIVE(414, "Recruitment Drive"),
+ REGICIDE(415, "Regicide"),
+ ROVING_ELVES(416, "Roving Elves"),
+ ROYAL_TROUBLE(417, "Royal Trouble"),
+ RUM_DEAL(418, "Rum Deal"),
+ SCORPION_CATCHER(419, "Scorpion Catcher"),
+ SEA_SLUG(420, "Sea Slug"),
+ SHADES_OF_MORTTON(421, "Shades of Mort'ton"),
+ SHADOW_OF_THE_STORM(422, "Shadow of the Storm"),
+ SHEEP_HERDER(423, "Sheep Herder"),
+ SHILO_VILLAGE(424, "Shilo Village"),
+ THE_SLUG_MENACE(425, "The Slug Menace"),
+ A_SOULS_BANE(426, "A Soul's Bane"),
+ SPIRITS_OF_THE_ELID(427, "Spirits of the Elid"),
+ SWAN_SONG(428, "Swan Song"),
+ TAI_BWO_WANNAI_TRIO(429, "Tai Bwo Wannai Trio"),
+ A_TAIL_OF_TWO_CATS(430, "A Tail of Two Cats"),
+ TALE_OF_THE_RIGHTEOUS(431, "Tale of the Righteous"),
+ A_TASTE_OF_HOPE(432, "A Taste of Hope"),
+ TEARS_OF_GUTHIX(433, "Tears of Guthix"),
+ TEMPLE_OF_IKOV(434, "Temple of Ikov"),
+ THRONE_OF_MISCELLANIA(435, "Throne of Miscellania"),
+ THE_TOURIST_TRAP(436, "The Tourist Trap"),
+ TOWER_OF_LIFE(437, "Tower of Life"),
+ TREE_GNOME_VILLAGE(438, "Tree Gnome Village"),
+ TRIBAL_TOTEM(439, "Tribal Totem"),
+ TROLL_ROMANCE(440, "Troll Romance"),
+ TROLL_STRONGHOLD(441, "Troll Stronghold"),
+ UNDERGROUND_PASS(442, "Underground Pass"),
+ CLIENT_OF_KOUREND(443, "Client of Kourend"),
+ WANTED(444, "Wanted!"),
+ WATCHTOWER(445, "Watchtower"),
+ WATERFALL_QUEST(446, "Waterfall Quest"),
+ WHAT_LIES_BELOW(447, "What Lies Below"),
+ WITCHS_HOUSE(448, "Witch's House"),
+ ZOGRE_FLESH_EATERS(449, "Zogre Flesh Eaters"),
+
+ //Miniquests
+ ENTER_THE_ABYSS(319, "Enter the Abyss"),
+ ARCHITECTURAL_ALLIANCE(320, "Architectural Alliance"),
+ BEAR_YOUR_SOUL(321, "Bear your Soul"),
+ ALFRED_GRIMHANDS_BARCRAWL(322, "Alfred Grimhand's Barcrawl"),
+ CURSE_OF_THE_EMPTY_LORD(323, "Curse of the Empty Lord"),
+ ENCHANTED_KEY(324, "Enchanted Key"),
+ THE_GENERALS_SHADOW(325, "The General's Shadow"),
+ SKIPPY_AND_THE_MOGRES(326, "Skippy and the Mogres"),
+ THE_MAGE_ARENA(327, "The Mage Arena"),
+ LAIR_OF_TARN_RAZORLOR(328, "Lair of Tarn Razorlor"),
+ FAMILY_PEST(329, "Family Pest"),
+ THE_MAGE_ARENA_II(330, "The Mage Arena II");
+
+ @Getter
+ private final int id;
+
+ @Getter
+ private final String name;
+
+ public QuestState getState(Client client)
+ {
+ client.runScript(ScriptID.QUESTLIST_PROGRESS, id);
+ switch (client.getIntStack()[0])
+ {
+ case 2:
+ return QuestState.FINISHED;
+ case 1:
+ return QuestState.NOT_STARTED;
+ default:
+ return QuestState.IN_PROGRESS;
+ }
+ }
+}
diff --git a/runelite-api/src/main/java/net/runelite/api/QuestState.java b/runelite-api/src/main/java/net/runelite/api/QuestState.java
new file mode 100644
index 0000000000..5738f3ec76
--- /dev/null
+++ b/runelite-api/src/main/java/net/runelite/api/QuestState.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2019 Abex
+ * 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.api;
+
+public enum QuestState
+{
+ IN_PROGRESS,
+ NOT_STARTED,
+ FINISHED
+}
diff --git a/runelite-api/src/main/java/net/runelite/api/ScriptID.java b/runelite-api/src/main/java/net/runelite/api/ScriptID.java
index f7353185df..4000d0e727 100644
--- a/runelite-api/src/main/java/net/runelite/api/ScriptID.java
+++ b/runelite-api/src/main/java/net/runelite/api/ScriptID.java
@@ -67,6 +67,18 @@ public final class ScriptID
*/
public static final int CLEAR_CHATBOX_PANEL = 677;
+ /**
+ * Queries the completion state of a quest by its struct id
+ *
+ * - int (struct) The id of the quest
+ *
+ * Returns
+ *
+ * - int (QuestState) the normalized state of the quest
+ *
+ */
+ public static final int QUESTLIST_PROGRESS = 2267;
+
/**
* Updates the Diary/Quest interface's scrollbar
*
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/CombatLevelRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/CombatLevelRequirement.java
new file mode 100644
index 0000000000..4befd43eb1
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/CombatLevelRequirement.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2019 Abex
+ * 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.achievementdiary;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
+@RequiredArgsConstructor
+@Getter
+public class CombatLevelRequirement implements Requirement
+{
+ private final int level;
+
+ @Override
+ public String toString()
+ {
+ return level + " " + "Combat";
+ }
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/DiaryRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/DiaryRequirement.java
index 46f075685c..9da905fe14 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/DiaryRequirement.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/DiaryRequirement.java
@@ -25,17 +25,19 @@
*/
package net.runelite.client.plugins.achievementdiary;
+import com.google.common.collect.ImmutableList;
+import java.util.List;
import lombok.Getter;
@Getter
class DiaryRequirement
{
private final String task;
- private final Requirement[] skillRequirements;
+ private final List requirements;
- DiaryRequirement(String task, Requirement[] skillRequirements)
+ DiaryRequirement(String task, Requirement[] requirements)
{
this.task = task;
- this.skillRequirements = skillRequirements;
+ this.requirements = ImmutableList.copyOf(requirements);
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/DiaryRequirementsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/DiaryRequirementsPlugin.java
index 0c83d69e25..8cf4377809 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/DiaryRequirementsPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/DiaryRequirementsPlugin.java
@@ -25,17 +25,19 @@
*/
package net.runelite.client.plugins.achievementdiary;
-import java.awt.Color;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.regex.Pattern;
import javax.inject.Inject;
import lombok.extern.slf4j.Slf4j;
import net.runelite.api.Client;
+import net.runelite.api.FontTypeFace;
+import net.runelite.api.QuestState;
import net.runelite.api.ScriptID;
-import net.runelite.api.Skill;
+import net.runelite.api.VarPlayer;
import net.runelite.api.events.WidgetLoaded;
import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetID;
@@ -55,7 +57,6 @@ import net.runelite.client.plugins.achievementdiary.diaries.MorytaniaDiaryRequir
import net.runelite.client.plugins.achievementdiary.diaries.VarrockDiaryRequirement;
import net.runelite.client.plugins.achievementdiary.diaries.WesternDiaryRequirement;
import net.runelite.client.plugins.achievementdiary.diaries.WildernessDiaryRequirement;
-import net.runelite.client.util.ColorUtil;
import net.runelite.client.util.Text;
@Slf4j
@@ -66,6 +67,9 @@ import net.runelite.client.util.Text;
)
public class DiaryRequirementsPlugin extends Plugin
{
+ private static final String AND_JOINER = ", ";
+ private static final Pattern AND_JOINER_PATTERN = Pattern.compile("(?<=, )");
+
@Inject
private Client client;
@@ -101,6 +105,9 @@ public class DiaryRequirementsPlugin extends Plugin
return;
}
+ FontTypeFace font = titleWidget.getFont();
+ int maxWidth = titleWidget.getWidth();
+
List originalAchievements = getOriginalAchievements(children);
// new requirements starts out as a copy of the original
@@ -137,21 +144,45 @@ public class DiaryRequirementsPlugin extends Plugin
{
String levelRequirement = skillRequirements.get(taskBuffer);
String task = originalAchievements.get(i);
- if (Text.removeTags(task).length() + Text.removeTags(levelRequirement).length() <= 50)
+
+ int taskWidth = font.getTextWidth(task);
+ int ourWidth = font.getTextWidth(levelRequirement);
+ String strike = task.startsWith("") ? "" : "";
+
+ if (ourWidth + taskWidth < maxWidth)
{
+ // Merge onto 1 line
newRequirements.set(i + offset, task + levelRequirement);
}
+ else if (ourWidth < maxWidth)
+ {
+ // 2 line split
+ newRequirements.add(i + (++offset), strike + levelRequirement);
+ }
else
{
- offset++;
- if (task.startsWith(""))
+ // Full text layout
+ StringBuilder b = new StringBuilder();
+ b.append(task);
+ int runningWidth = font.getTextWidth(b.toString());
+ for (String word : AND_JOINER_PATTERN.split(levelRequirement))
{
- newRequirements.add(i + offset, "" + levelRequirement);
- }
- else
- {
- newRequirements.add(i + offset, levelRequirement);
+ int wordWidth = font.getTextWidth(word);
+ if (runningWidth == 0 || wordWidth + runningWidth < maxWidth)
+ {
+ runningWidth += wordWidth;
+ b.append(word);
+ }
+ else
+ {
+ newRequirements.add(i + (offset++), b.toString());
+ b.delete(0, b.length());
+ runningWidth = wordWidth;
+ b.append(strike);
+ b.append(word);
+ }
}
+ newRequirements.add(i + offset, b.toString());
}
}
}
@@ -233,66 +264,63 @@ public class DiaryRequirementsPlugin extends Plugin
// returns a map of task -> level requirements
private Map buildRequirements(Collection requirements)
{
- Map lineIndexRequirementMap = new HashMap<>();
+ Map reqs = new HashMap<>();
for (DiaryRequirement req : requirements)
{
- String reqTask = req.getTask();
- List requirementBuilders = new ArrayList<>();
+ StringBuilder b = new StringBuilder();
+ b.append("(");
- for (Requirement i : req.getSkillRequirements())
+ assert req.getRequirements().size() > 0;
+ for (Requirement ireq : req.getRequirements())
{
- RequirementStringBuilder requirementStringBuilder = new RequirementStringBuilder(i);
-
- Skill skill = i.getSkill();
- int realSkillLevel;
- if (skill == null && i.getCustomRequirement().equals("Combat"))
- {
- realSkillLevel = client.getLocalPlayer().getCombatLevel();
- }
- else
- {
- realSkillLevel = client.getRealSkillLevel(skill);
- }
- List altRealSkillLevels = null;
- if (i.getAltRequirements() != null)
- {
- altRealSkillLevels = new ArrayList<>();
- for (Requirement j : i.getAltRequirements())
- {
- altRealSkillLevels.add(client.getRealSkillLevel(j.getSkill()));
- }
- }
-
- if (requirementStringBuilder.hasLevelRequirement(realSkillLevel, altRealSkillLevels))
- {
- requirementStringBuilder.strikeThroughRequirement();
- }
- else
- {
- requirementStringBuilder.colorRedRequirement();
- }
- requirementBuilders .add(requirementStringBuilder);
+ boolean satifisfied = satisfiesRequirement(ireq);
+ b.append(satifisfied ? "" : "");
+ b.append(ireq.toString());
+ b.append(satifisfied ? "" : "");
+ b.append(AND_JOINER);
}
- lineIndexRequirementMap.put(reqTask, combine(requirementBuilders ));
+ b.delete(b.length() - AND_JOINER.length(), b.length());
+
+ b.append(")");
+
+ reqs.put(req.getTask(), b.toString());
}
- return lineIndexRequirementMap;
+ return reqs;
}
- private String combine(List list)
+ private boolean satisfiesRequirement(Requirement r)
{
- StringBuilder requirementsString = new StringBuilder();
- requirementsString.append(ColorUtil.prependColorTag(" (", Color.WHITE));
- for (RequirementStringBuilder req : list)
+ if (r instanceof OrRequirement)
{
- requirementsString.append(ColorUtil.colorTag(new Color(0x80)))
- .append(req.getRequirementString())
- .append(", ");
+ return ((OrRequirement) r).getRequirements()
+ .stream()
+ .anyMatch(this::satisfiesRequirement);
}
- requirementsString.deleteCharAt(requirementsString.length() - 1);
- requirementsString.deleteCharAt(requirementsString.length() - 2);
- requirementsString.append(ColorUtil.prependColorTag(")", Color.WHITE));
-
- return requirementsString.toString();
+ if (r instanceof SkillRequirement)
+ {
+ SkillRequirement s = (SkillRequirement) r;
+ return client.getRealSkillLevel(s.getSkill()) >= s.getLevel();
+ }
+ if (r instanceof CombatLevelRequirement)
+ {
+ return client.getLocalPlayer().getCombatLevel() >= ((CombatLevelRequirement) r).getLevel();
+ }
+ if (r instanceof QuestRequirement)
+ {
+ QuestRequirement q = (QuestRequirement) r;
+ QuestState state = q.getQuest().getState(client);
+ if (q.isStarted())
+ {
+ return state != QuestState.NOT_STARTED;
+ }
+ return state == QuestState.FINISHED;
+ }
+ if (r instanceof QuestPointRequirement)
+ {
+ return client.getVar(VarPlayer.QUEST_POINTS) >= ((QuestPointRequirement) r).getQp();
+ }
+ log.warn("Unknown requirement {}", r);
+ return false;
}
-}
+}
\ No newline at end of file
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/OrRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/OrRequirement.java
new file mode 100644
index 0000000000..7b852426f9
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/OrRequirement.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2019 Abex
+ * 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.achievementdiary;
+
+import com.google.common.base.Joiner;
+import com.google.common.collect.ImmutableList;
+import java.util.List;
+import lombok.Getter;
+
+public class OrRequirement implements Requirement
+{
+ @Getter
+ private final List requirements;
+
+ public OrRequirement(Requirement... reqs)
+ {
+ this.requirements = ImmutableList.copyOf(reqs);
+ }
+
+ @Override
+ public String toString()
+ {
+ return Joiner.on(" or ").join(requirements);
+ }
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/QuestPointRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/QuestPointRequirement.java
new file mode 100644
index 0000000000..c2b13e7c9b
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/QuestPointRequirement.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2019 Abex
+ * 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.achievementdiary;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
+@RequiredArgsConstructor
+@Getter
+public class QuestPointRequirement implements Requirement
+{
+ private final int qp;
+
+ @Override
+ public String toString()
+ {
+ return qp + " " + "Quest points";
+ }
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/QuestRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/QuestRequirement.java
new file mode 100644
index 0000000000..cbc471651f
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/QuestRequirement.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2019 Abex
+ * 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.achievementdiary;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import net.runelite.api.Quest;
+
+@Getter
+@RequiredArgsConstructor
+public class QuestRequirement implements Requirement
+{
+ private final Quest quest;
+ private final boolean started;
+
+ public QuestRequirement(Quest quest)
+ {
+ this(quest, false);
+ }
+
+ @Override
+ public String toString()
+ {
+ if (started)
+ {
+ return "Started " + quest.getName();
+ }
+
+ return quest.getName();
+ }
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/Requirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/Requirement.java
index 3c8cc127cd..d7d0b32a13 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/Requirement.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/Requirement.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Adam
+ * Copyright (c) 2019 Abex
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -23,30 +23,6 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/package net.runelite.client.plugins.achievementdiary;
-import lombok.Getter;
-import net.runelite.api.Skill;
-
-@Getter
-public class Requirement
+public interface Requirement
{
- private final Skill skill;
- private final String customRequirement;
- private final int levelRequirement;
- private final Requirement[] altRequirements;
-
- public Requirement(Skill skill, int levelRequirement, Requirement... altRequirements)
- {
- this.skill = skill;
- this.customRequirement = null;
- this.levelRequirement = levelRequirement;
- this.altRequirements = altRequirements;
- }
-
- public Requirement(String customRequirement, int levelRequirement, Requirement... altRequirements)
- {
- this.skill = null;
- this.customRequirement = customRequirement;
- this.levelRequirement = levelRequirement;
- this.altRequirements = altRequirements;
- }
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/RequirementStringBuilder.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/RequirementStringBuilder.java
deleted file mode 100644
index bf69eedd1d..0000000000
--- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/RequirementStringBuilder.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (c) 2018, Marshall
- * Copyright (c) 2018, Adam
- * 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.achievementdiary;
-
-import java.awt.Color;
-import java.util.List;
-import lombok.Getter;
-import net.runelite.api.Skill;
-import net.runelite.client.util.ColorUtil;
-
-class RequirementStringBuilder
-{
- private final Requirement requirement;
- @Getter
- private String requirementString;
-
- RequirementStringBuilder(Requirement requirement)
- {
- this.requirement = requirement;
-
- int levelRequirement = requirement.getLevelRequirement();
- Skill skill = requirement.getSkill();
- Requirement[] altRequirements = requirement.getAltRequirements();
-
- StringBuilder requirementStringBuilder = new StringBuilder()
- .append(levelRequirement)
- .append(" ")
- .append(skill != null ? skill.getName() : requirement.getCustomRequirement());
- for (Requirement i : altRequirements)
- {
- requirementStringBuilder.append(" or ")
- .append(i.getLevelRequirement())
- .append(" ")
- .append(i.getSkill().getName());
- }
- this.requirementString = requirementStringBuilder.toString();
- }
-
- void strikeThroughRequirement()
- {
- this.requirementString = "" + this.requirementString + "";
- }
-
- void colorRedRequirement()
- {
- this.requirementString = ColorUtil.wrapWithColorTag(this.requirementString, new Color(0x800000));
- }
-
- boolean hasLevelRequirement(int realSkillLevel, List altRealSkillLevels)
- {
- return hasLevelRequirement(requirement, realSkillLevel, altRealSkillLevels);
- }
-
- private static boolean hasLevelRequirement(Requirement requirement, int realSkillLevel, List altRealSkillLevels)
- {
- int levelRequirement = requirement.getLevelRequirement();
- Requirement[] altRequirements = requirement.getAltRequirements();
-
- boolean hasReq = (realSkillLevel >= levelRequirement);
- if (altRequirements != null && altRealSkillLevels != null)
- {
- int reqCounter = 0;
- for (Requirement i : altRequirements)
- {
- hasReq = (hasReq || hasLevelRequirement(i, altRealSkillLevels.get(reqCounter), null));
- reqCounter++;
- }
- }
- return hasReq;
- }
-}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/SkillRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/SkillRequirement.java
new file mode 100644
index 0000000000..1a711f91ac
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/SkillRequirement.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2019 Abex
+ * 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.achievementdiary;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import net.runelite.api.Skill;
+
+@RequiredArgsConstructor
+@Getter
+public class SkillRequirement implements Requirement
+{
+ private final Skill skill;
+ private final int level;
+
+ @Override
+ public String toString()
+ {
+ return level + " " + skill.getName();
+ }
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/ArdougneDiaryRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/ArdougneDiaryRequirement.java
index a1535a79c9..7873c2c923 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/ArdougneDiaryRequirement.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/ArdougneDiaryRequirement.java
@@ -25,78 +25,107 @@
*/
package net.runelite.client.plugins.achievementdiary.diaries;
+import net.runelite.api.Quest;
import net.runelite.api.Skill;
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement;
-import net.runelite.client.plugins.achievementdiary.Requirement;
+import net.runelite.client.plugins.achievementdiary.QuestRequirement;
+import net.runelite.client.plugins.achievementdiary.SkillRequirement;
public class ArdougneDiaryRequirement extends GenericDiaryRequirement
{
public ArdougneDiaryRequirement()
{
// EASY
+ add("Have Wizard Cromperty teleport you to the Rune Essence mine.",
+ new QuestRequirement(Quest.RUNE_MYSTERIES));
add("Steal a cake from the Ardougne market stalls.",
- new Requirement(Skill.THIEVING, 5));
+ new SkillRequirement(Skill.THIEVING, 5));
+ add("Enter the Combat Training Camp north of W. Ardougne",
+ new QuestRequirement(Quest.BIOHAZARD));
// MEDIUM
+ add("Enter the Unicorn pen in Ardougne zoo using Fairy rings.",
+ new QuestRequirement(Quest.FAIRYTALE_II__CURE_A_QUEEN, true));
add("Grapple over Yanille's south wall.",
- new Requirement(Skill.AGILITY, 39),
- new Requirement(Skill.STRENGTH, 38),
- new Requirement(Skill.RANGED, 21));
+ new SkillRequirement(Skill.AGILITY, 39),
+ new SkillRequirement(Skill.STRENGTH, 38),
+ new SkillRequirement(Skill.RANGED, 21));
add("Harvest some strawberries from the Ardougne farming patch.",
- new Requirement(Skill.FARMING, 31));
+ new SkillRequirement(Skill.FARMING, 31));
add("Cast the Ardougne Teleport spell.",
- new Requirement(Skill.MAGIC, 51));
+ new SkillRequirement(Skill.MAGIC, 51),
+ new QuestRequirement(Quest.PLAGUE_CITY));
add("Travel to Castlewars by Hot Air Balloon.",
- new Requirement(Skill.FIREMAKING, 50));
+ new SkillRequirement(Skill.FIREMAKING, 50),
+ new QuestRequirement(Quest.ENLIGHTENED_JOURNEY));
add("Claim buckets of sand from Bert in Yanille.",
- new Requirement(Skill.CRAFTING, 49));
+ new SkillRequirement(Skill.CRAFTING, 49),
+ new QuestRequirement(Quest.THE_HAND_IN_THE_SAND));
+ add("Catch any fish on the Fishing Platform.",
+ new QuestRequirement(Quest.SEA_SLUG, true));
add("Pickpocket the master farmer north of Ardougne.",
- new Requirement(Skill.THIEVING, 38));
+ new SkillRequirement(Skill.THIEVING, 38));
+ add("Collect some Nightshade from the Skavid Caves.",
+ new QuestRequirement(Quest.WATCHTOWER, true));
+ add("Kill a swordchick in the Tower of Life.",
+ new QuestRequirement(Quest.TOWER_OF_LIFE));
add("Equip Iban's upgraded staff or upgrade an Iban staff.",
- new Requirement(Skill.MAGIC, 50),
- new Requirement(Skill.ATTACK, 50));
+ new SkillRequirement(Skill.MAGIC, 50),
+ new SkillRequirement(Skill.ATTACK, 50),
+ new QuestRequirement(Quest.UNDERGROUND_PASS));
+ add("Visit the Island East of the Necromancer's tower.",
+ new QuestRequirement(Quest.FAIRYTALE_II__CURE_A_QUEEN, true));
// HARD
+ add("Recharge some Jewellery at Totem in the Legends Guild.",
+ new QuestRequirement(Quest.LEGENDS_QUEST));
add("Enter the Magic Guild.",
- new Requirement(Skill.MAGIC, 66));
+ new SkillRequirement(Skill.MAGIC, 66));
add("Attempt to steal from King Lathas' chest.",
- new Requirement(Skill.THIEVING, 72));
+ new SkillRequirement(Skill.THIEVING, 72));
+ add("Have a zookeeper put you in Ardougne Zoo's monkey cage.",
+ new QuestRequirement(Quest.MONKEY_MADNESS_I, true));
add("Teleport to the Watchtower.",
- new Requirement(Skill.MAGIC, 58));
+ new SkillRequirement(Skill.MAGIC, 58),
+ new QuestRequirement(Quest.WATCHTOWER));
add("Catch a Red Salamander.",
- new Requirement(Skill.HUNTER, 59));
+ new SkillRequirement(Skill.HUNTER, 59));
add("Check the health of a Palm tree near tree gnome village.",
- new Requirement(Skill.FARMING, 68));
+ new SkillRequirement(Skill.FARMING, 68));
add("Pick some Poison Ivy berries from the patch south of Ardougne.",
- new Requirement(Skill.FARMING, 70));
+ new SkillRequirement(Skill.FARMING, 70));
add("Smith a Mithril platebody near Ardougne.",
- new Requirement(Skill.SMITHING, 68));
+ new SkillRequirement(Skill.SMITHING, 68));
add("Enter your POH from Yanille.",
- new Requirement(Skill.CONSTRUCTION, 50));
+ new SkillRequirement(Skill.CONSTRUCTION, 50));
add("Smith a Dragon sq shield in West Ardougne.",
- new Requirement(Skill.SMITHING, 60));
+ new SkillRequirement(Skill.SMITHING, 60),
+ new QuestRequirement(Quest.LEGENDS_QUEST));
add("Craft some Death runes.",
- new Requirement(Skill.RUNECRAFT, 65));
+ new SkillRequirement(Skill.RUNECRAFT, 65),
+ new QuestRequirement(Quest.MOURNINGS_ENDS_PART_II));
// ELITE
add("Catch a Manta ray in the Fishing Trawler and cook it in Port Khazard.",
-
- new Requirement(Skill.FISHING, 81),
- new Requirement(Skill.COOKING, 91)
+ new SkillRequirement(Skill.FISHING, 81),
+ new SkillRequirement(Skill.COOKING, 91)
);
add("Attempt to picklock the door to the basement of Yanille Agility Dungeon.",
- new Requirement(Skill.THIEVING, 82));
+ new SkillRequirement(Skill.THIEVING, 82));
add("Pickpocket a Hero.",
- new Requirement(Skill.THIEVING, 80));
+ new SkillRequirement(Skill.THIEVING, 80));
add("Make a rune crossbow yourself from scratch within Witchaven or Yanille.",
- new Requirement(Skill.CRAFTING, 10),
- new Requirement(Skill.SMITHING, 91),
- new Requirement(Skill.FLETCHING, 69));
+ new SkillRequirement(Skill.CRAFTING, 10),
+ new SkillRequirement(Skill.SMITHING, 91),
+ new SkillRequirement(Skill.FLETCHING, 69));
+ add("Imbue a salve amulet at Nightmare Zone or equip an imbued salve amulet.",
+ new QuestRequirement(Quest.HAUNTED_MINE));
add("Pick some Torstol from the patch north of Ardougne.",
- new Requirement(Skill.FARMING, 85));
+ new SkillRequirement(Skill.FARMING, 85));
add("Complete a lap of Ardougne's rooftop agility course.",
- new Requirement(Skill.AGILITY, 90));
+ new SkillRequirement(Skill.AGILITY, 90));
add("Cast Ice Barrage on another player within Castlewars.",
- new Requirement(Skill.MAGIC, 94));
+ new SkillRequirement(Skill.MAGIC, 94),
+ new QuestRequirement(Quest.DESERT_TREASURE));
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/DesertDiaryRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/DesertDiaryRequirement.java
index 2a5aa27a3c..4de2c0a4d3 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/DesertDiaryRequirement.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/DesertDiaryRequirement.java
@@ -25,9 +25,11 @@
*/
package net.runelite.client.plugins.achievementdiary.diaries;
+import net.runelite.api.Quest;
import net.runelite.api.Skill;
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement;
-import net.runelite.client.plugins.achievementdiary.Requirement;
+import net.runelite.client.plugins.achievementdiary.QuestRequirement;
+import net.runelite.client.plugins.achievementdiary.SkillRequirement;
public class DesertDiaryRequirement extends GenericDiaryRequirement
{
@@ -35,60 +37,82 @@ public class DesertDiaryRequirement extends GenericDiaryRequirement
{
// EASY
add("Catch a Golden Warbler.",
- new Requirement(Skill.HUNTER, 5));
+ new SkillRequirement(Skill.HUNTER, 5));
add("Mine 5 clay in the north-eastern desert.",
- new Requirement(Skill.MINING, 5));
+ new SkillRequirement(Skill.MINING, 5));
add("Open the Sarcophagus in the first room of Pyramid Plunder.",
- new Requirement(Skill.THIEVING, 21));
+ new SkillRequirement(Skill.THIEVING, 21),
+ new QuestRequirement(Quest.ICTHLARINS_LITTLE_HELPER, true));
// MEDIUM
add("Climb to the summit of the Agility Pyramid.",
- new Requirement(Skill.AGILITY, 30));
+ new SkillRequirement(Skill.AGILITY, 30));
add("Slay a desert lizard.",
- new Requirement(Skill.SLAYER, 22));
+ new SkillRequirement(Skill.SLAYER, 22));
add("Catch an Orange Salamander.",
- new Requirement(Skill.HUNTER, 47));
+ new SkillRequirement(Skill.HUNTER, 47));
add("Steal a feather from the Desert Phoenix.",
- new Requirement(Skill.THIEVING, 25));
+ new SkillRequirement(Skill.THIEVING, 25));
+ add("Travel to Uzer via Magic Carpet.",
+ new QuestRequirement(Quest.THE_GOLEM));
+ add("Travel to the Desert via Eagle.",
+ new QuestRequirement(Quest.EAGLES_PEAK));
+ add("Pray at the Elidinis statuette in Nardah.",
+ new QuestRequirement(Quest.SPIRITS_OF_THE_ELID));
add("Create a combat potion in the desert.",
- new Requirement(Skill.HERBLORE, 36));
+ new SkillRequirement(Skill.HERBLORE, 36));
+ add("Teleport to Enakhra's Temple with the Camulet.",
+ new QuestRequirement(Quest.ENAKHRAS_LAMENT));
+ add("Visit the Genie.",
+ new QuestRequirement(Quest.SPIRITS_OF_THE_ELID));
add("Teleport to Pollnivneach with a redirected teleport to house tablet.",
- new Requirement(Skill.CONSTRUCTION, 20));
+ new SkillRequirement(Skill.CONSTRUCTION, 20));
add("Chop some Teak logs near Uzer.",
- new Requirement(Skill.WOODCUTTING, 35));
+ new SkillRequirement(Skill.WOODCUTTING, 35));
// HARD
add("Knock out and pickpocket a Menaphite Thug.",
- new Requirement(Skill.THIEVING, 65));
+ new SkillRequirement(Skill.THIEVING, 65),
+ new QuestRequirement(Quest.THE_FEUD));
add("Mine some Granite.",
- new Requirement(Skill.MINING, 45));
+ new SkillRequirement(Skill.MINING, 45));
add("Refill your waterskins in the Desert using Lunar magic.",
- new Requirement(Skill.MAGIC, 68));
+ new SkillRequirement(Skill.MAGIC, 68),
+ new QuestRequirement(Quest.DREAM_MENTOR));
add("Complete a lap of the Pollnivneach agility course.",
- new Requirement(Skill.AGILITY, 70));
+ new SkillRequirement(Skill.AGILITY, 70));
add("Slay a Dust Devil with a Slayer helmet equipped.",
- new Requirement(Skill.SLAYER, 65),
- new Requirement(Skill.DEFENCE, 10),
- new Requirement(Skill.CRAFTING, 55));
+ new SkillRequirement(Skill.SLAYER, 65),
+ new SkillRequirement(Skill.DEFENCE, 10),
+ new SkillRequirement(Skill.CRAFTING, 55),
+ new QuestRequirement(Quest.DESERT_TREASURE, true));
+ add("Activate Ancient Magicks at the altar in the Jaldraocht Pyramid.",
+ new QuestRequirement(Quest.DESERT_TREASURE));
add("Defeat a Locust Rider with Keris.",
- new Requirement(Skill.ATTACK, 50));
+ new SkillRequirement(Skill.ATTACK, 50),
+ new QuestRequirement(Quest.CONTACT));
add("Burn some yew logs on the Nardah Mayor's balcony.",
- new Requirement(Skill.FIREMAKING, 60));
+ new SkillRequirement(Skill.FIREMAKING, 60));
add("Create a Mithril Platebody in Nardah.",
- new Requirement(Skill.SMITHING, 68));
+ new SkillRequirement(Skill.SMITHING, 68));
// ELITE
add("Bake a wild pie at the Nardah Clay Oven.",
- new Requirement(Skill.COOKING, 85));
+ new SkillRequirement(Skill.COOKING, 85));
add("Cast Ice Barrage against a foe in the Desert.",
- new Requirement(Skill.MAGIC, 94));
+ new SkillRequirement(Skill.MAGIC, 94),
+ new QuestRequirement(Quest.DESERT_TREASURE));
add("Fletch some Dragon darts at the Bedabin Camp.",
- new Requirement(Skill.FLETCHING, 95));
+ new SkillRequirement(Skill.FLETCHING, 95),
+ new QuestRequirement(Quest.THE_TOURIST_TRAP));
add("Speak to the KQ head in your POH.",
- new Requirement(Skill.CONSTRUCTION, 78));
+ new SkillRequirement(Skill.CONSTRUCTION, 78),
+ new QuestRequirement(Quest.PRIEST_IN_PERIL));
add("Steal from the Grand Gold Chest in the final room of Pyramid Plunder.",
- new Requirement(Skill.THIEVING, 91));
+ new SkillRequirement(Skill.THIEVING, 91),
+ new QuestRequirement(Quest.ICTHLARINS_LITTLE_HELPER, true));
add("Restore at least 85 Prayer points when praying at the Altar in Sophanem.",
- new Requirement(Skill.PRAYER, 85));
+ new SkillRequirement(Skill.PRAYER, 85),
+ new QuestRequirement(Quest.ICTHLARINS_LITTLE_HELPER, true));
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/FaladorDiaryRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/FaladorDiaryRequirement.java
index dc0253077c..3111b0d6e1 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/FaladorDiaryRequirement.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/FaladorDiaryRequirement.java
@@ -25,9 +25,11 @@
*/
package net.runelite.client.plugins.achievementdiary.diaries;
+import net.runelite.api.Quest;
import net.runelite.api.Skill;
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement;
-import net.runelite.client.plugins.achievementdiary.Requirement;
+import net.runelite.client.plugins.achievementdiary.QuestRequirement;
+import net.runelite.client.plugins.achievementdiary.SkillRequirement;
public class FaladorDiaryRequirement extends GenericDiaryRequirement
{
@@ -35,71 +37,83 @@ public class FaladorDiaryRequirement extends GenericDiaryRequirement
{
// EASY
add("Find out what your family crest is from Sir Renitee.",
- new Requirement(Skill.CONSTRUCTION, 16));
+ new SkillRequirement(Skill.CONSTRUCTION, 16));
add("Climb over the western Falador wall.",
- new Requirement(Skill.AGILITY, 5));
+ new SkillRequirement(Skill.AGILITY, 5));
+ add("Make a mind tiara.",
+ new QuestRequirement(Quest.RUNE_MYSTERIES));
add("Smith some Blurite Limbs on Doric's Anvil.",
- new Requirement(Skill.MINING, 10),
- new Requirement(Skill.SMITHING, 13));
+ new SkillRequirement(Skill.MINING, 10),
+ new SkillRequirement(Skill.SMITHING, 13),
+ new QuestRequirement(Quest.THE_KNIGHTS_SWORD),
+ new QuestRequirement(Quest.DORICS_QUEST));
// MEDIUM
add("Light a Bullseye lantern at the Chemist's in Rimmington.",
- new Requirement(Skill.FIREMAKING, 49));
+ new SkillRequirement(Skill.FIREMAKING, 49));
add("Telegrab some Wine of Zamorak at the Chaos Temple by the Wilderness.",
- new Requirement(Skill.MAGIC, 33));
+ new SkillRequirement(Skill.MAGIC, 33));
add("Place a Scarecrow in the Falador farming patch.",
- new Requirement(Skill.FARMING, 23));
+ new SkillRequirement(Skill.FARMING, 23));
add("Kill a Mogre at Mudskipper Point.",
- new Requirement(Skill.SLAYER, 32));
+ new SkillRequirement(Skill.SLAYER, 32),
+ new QuestRequirement(Quest.SKIPPY_AND_THE_MOGRES));
+ add("Visit the Port Sarim Rat Pits.",
+ new QuestRequirement(Quest.RATCATCHERS, true));
add("Grapple up and then jump off the north Falador wall.",
- new Requirement(Skill.AGILITY, 11),
- new Requirement(Skill.STRENGTH, 37),
- new Requirement(Skill.RANGED, 19));
+ new SkillRequirement(Skill.AGILITY, 11),
+ new SkillRequirement(Skill.STRENGTH, 37),
+ new SkillRequirement(Skill.RANGED, 19));
add("Pickpocket a Falador guard.",
- new Requirement(Skill.THIEVING, 40));
+ new SkillRequirement(Skill.THIEVING, 40));
add("Pray at the Altar of Guthix in Taverley whilst wearing full Initiate.",
- new Requirement(Skill.PRAYER, 10),
- new Requirement(Skill.DEFENCE, 20));
+ new SkillRequirement(Skill.PRAYER, 10),
+ new SkillRequirement(Skill.DEFENCE, 20),
+ new QuestRequirement(Quest.RECRUITMENT_DRIVE));
add("Mine some Gold ore at the Crafting Guild.",
- new Requirement(Skill.CRAFTING, 40),
- new Requirement(Skill.MINING, 40));
+ new SkillRequirement(Skill.CRAFTING, 40),
+ new SkillRequirement(Skill.MINING, 40));
add("Squeeze through the crevice in the Dwarven mines.",
- new Requirement(Skill.AGILITY, 42));
+ new SkillRequirement(Skill.AGILITY, 42));
add("Chop and burn some Willow logs in Taverley",
- new Requirement(Skill.WOODCUTTING, 30),
- new Requirement(Skill.FIREMAKING, 30));
+ new SkillRequirement(Skill.WOODCUTTING, 30),
+ new SkillRequirement(Skill.FIREMAKING, 30));
add("Craft a fruit basket on the Falador Farm loom.",
- new Requirement(Skill.CRAFTING, 36));
+ new SkillRequirement(Skill.CRAFTING, 36));
add("Teleport to Falador.",
- new Requirement(Skill.MAGIC, 37));
+ new SkillRequirement(Skill.MAGIC, 37));
// HARD
add("Craft 140 Mind runes simultaneously.",
- new Requirement(Skill.RUNECRAFT, 56));
+ new SkillRequirement(Skill.RUNECRAFT, 56));
add("Change your family crest to the Saradomin symbol.",
- new Requirement(Skill.PRAYER, 70));
+ new SkillRequirement(Skill.PRAYER, 70));
add("Kill a Skeletal Wyvern in the Asgarnia Ice Dungeon.",
- new Requirement(Skill.SLAYER, 72));
+ new SkillRequirement(Skill.SLAYER, 72));
add("Complete a lap of the Falador rooftop agility course.",
- new Requirement(Skill.AGILITY, 50));
+ new SkillRequirement(Skill.AGILITY, 50));
add("Enter the mining guild wearing full prospector.",
- new Requirement(Skill.MINING, 60));
+ new SkillRequirement(Skill.MINING, 60));
add("Crack a wall safe within Rogues Den.",
- new Requirement(Skill.THIEVING, 50));
+ new SkillRequirement(Skill.THIEVING, 50));
add("Recharge your prayer in the Port Sarim church while wearing full Proselyte.",
- new Requirement(Skill.DEFENCE, 30));
+ new SkillRequirement(Skill.DEFENCE, 30),
+ new QuestRequirement(Quest.THE_SLUG_MENACE));
add("Equip a dwarven helmet within the dwarven mines.",
- new Requirement(Skill.DEFENCE, 50));
+ new SkillRequirement(Skill.DEFENCE, 50),
+ new QuestRequirement(Quest.GRIM_TALES));
// ELITE
add("Craft 252 Air Runes simultaneously.",
- new Requirement(Skill.RUNECRAFT, 88));
+ new SkillRequirement(Skill.RUNECRAFT, 88));
+ add("Purchase a White 2h Sword from Sir Vyvin.",
+ new QuestRequirement(Quest.WANTED));
add("Find at least 3 magic roots at once when digging up your magic tree in Falador.",
- new Requirement(Skill.FARMING, 91),
- new Requirement(Skill.WOODCUTTING, 75));
+ new SkillRequirement(Skill.FARMING, 91),
+ new SkillRequirement(Skill.WOODCUTTING, 75));
add("Jump over the strange floor in Taverley dungeon.",
- new Requirement(Skill.AGILITY, 80));
+ new SkillRequirement(Skill.AGILITY, 80));
add("Mix a Saradomin brew in Falador east bank.",
- new Requirement(Skill.HERBLORE, 81));
+ new SkillRequirement(Skill.HERBLORE, 81));
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/FremennikDiaryRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/FremennikDiaryRequirement.java
index 1f6632a589..130432035b 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/FremennikDiaryRequirement.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/FremennikDiaryRequirement.java
@@ -25,9 +25,11 @@
*/
package net.runelite.client.plugins.achievementdiary.diaries;
+import net.runelite.api.Quest;
import net.runelite.api.Skill;
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement;
-import net.runelite.client.plugins.achievementdiary.Requirement;
+import net.runelite.client.plugins.achievementdiary.QuestRequirement;
+import net.runelite.client.plugins.achievementdiary.SkillRequirement;
public class FremennikDiaryRequirement extends GenericDiaryRequirement
{
@@ -35,62 +37,96 @@ public class FremennikDiaryRequirement extends GenericDiaryRequirement
{
// EASY
add("Catch a Cerulean twitch.",
- new Requirement(Skill.HUNTER, 11));
+ new SkillRequirement(Skill.HUNTER, 11));
+ add("Change your boots at Yrsa's Shoe Store.",
+ new QuestRequirement(Quest.THE_FREMENNIK_TRIALS));
add("Craft a tiara from scratch in Rellekka.",
- new Requirement(Skill.CRAFTING, 23),
- new Requirement(Skill.MINING, 20),
- new Requirement(Skill.SMITHING, 20));
+ new SkillRequirement(Skill.CRAFTING, 23),
+ new SkillRequirement(Skill.MINING, 20),
+ new SkillRequirement(Skill.SMITHING, 20),
+ new QuestRequirement(Quest.THE_FREMENNIK_TRIALS));
+ add("Browse the Stonemasons shop.",
+ new QuestRequirement(Quest.THE_GIANT_DWARF, true));
add("Steal from the Keldagrim crafting or baker's stall.",
- new Requirement(Skill.THIEVING, 5));
+ new SkillRequirement(Skill.THIEVING, 5),
+ new QuestRequirement(Quest.THE_GIANT_DWARF, true));
+ add("Enter the Troll Stronghold",
+ new QuestRequirement(Quest.DEATH_PLATEAU),
+ new QuestRequirement(Quest.TROLL_STRONGHOLD));
add("Chop and burn some oak logs in the Fremennik Province.",
- new Requirement(Skill.WOODCUTTING, 15),
- new Requirement(Skill.FIREMAKING, 15));
+ new SkillRequirement(Skill.WOODCUTTING, 15),
+ new SkillRequirement(Skill.FIREMAKING, 15));
// MEDIUM
add("Slay a Brine rat.",
- new Requirement(Skill.SLAYER, 47));
+ new SkillRequirement(Skill.SLAYER, 47),
+ new QuestRequirement(Quest.OLAFS_QUEST, true));
+ add("Travel to the Snowy Hunter Area via Eagle.",
+ new QuestRequirement(Quest.EAGLES_PEAK));
add("Mine some coal in Rellekka.",
- new Requirement(Skill.MINING, 30));
+ new SkillRequirement(Skill.MINING, 30),
+ new QuestRequirement(Quest.THE_FREMENNIK_TRIALS));
add("Steal from the Rellekka Fish stalls.",
- new Requirement(Skill.THIEVING, 42));
+ new SkillRequirement(Skill.THIEVING, 42),
+ new QuestRequirement(Quest.THE_FREMENNIK_TRIALS));
+ add("Travel to Miscellania by Fairy ring.",
+ new QuestRequirement(Quest.THE_FREMENNIK_TRIALS),
+ new QuestRequirement(Quest.FAIRYTALE_II__CURE_A_QUEEN, true));
add("Catch a Snowy knight.",
- new Requirement(Skill.HUNTER, 35));
+ new SkillRequirement(Skill.HUNTER, 35));
add("Pick up your Pet Rock from your POH Menagerie.",
- new Requirement(Skill.CONSTRUCTION, 37));
+ new SkillRequirement(Skill.CONSTRUCTION, 37),
+ new QuestRequirement(Quest.THE_FREMENNIK_TRIALS));
+ add("Visit the Lighthouse from Waterbirth island.",
+ new QuestRequirement(Quest.HORROR_FROM_THE_DEEP),
+ new QuestRequirement(Quest.THE_FREMENNIK_TRIALS, true));
add("Mine some gold at the Arzinian mine.",
- new Requirement(Skill.MINING, 40));
+ new SkillRequirement(Skill.MINING, 40),
+ new QuestRequirement(Quest.BETWEEN_A_ROCK, true));
// HARD
add("Teleport to Trollheim.",
- new Requirement(Skill.MAGIC, 61));
+ new SkillRequirement(Skill.MAGIC, 61),
+ new QuestRequirement(Quest.EADGARS_RUSE));
add("Catch a Sabre-toothed Kyatt.",
- new Requirement(Skill.HUNTER, 55));
+ new SkillRequirement(Skill.HUNTER, 55));
add("Mix a super defence potion in the Fremennik province.",
- new Requirement(Skill.HERBLORE, 66));
+ new SkillRequirement(Skill.HERBLORE, 66));
add("Steal from the Keldagrim Gem Stall.",
- new Requirement(Skill.THIEVING, 75));
+ new SkillRequirement(Skill.THIEVING, 75),
+ new QuestRequirement(Quest.THE_GIANT_DWARF, true));
add("Craft a Fremennik shield on Neitiznot.",
- new Requirement(Skill.WOODCUTTING, 56));
+ new SkillRequirement(Skill.WOODCUTTING, 56),
+ new QuestRequirement(Quest.THE_FREMENNIK_ISLES));
add("Mine 5 Adamantite ores on Jatizso.",
- new Requirement(Skill.MINING, 70));
+ new SkillRequirement(Skill.MINING, 70),
+ new QuestRequirement(Quest.THE_FREMENNIK_ISLES));
+ add("Obtain 100% support from your kingdom subjects.",
+ new QuestRequirement(Quest.THRONE_OF_MISCELLANIA));
add("Teleport to Waterbirth Island.",
- new Requirement(Skill.MAGIC, 72));
+ new SkillRequirement(Skill.MAGIC, 72),
+ new QuestRequirement(Quest.LUNAR_DIPLOMACY));
add("Obtain the Blast Furnace Foreman's permission to use the Blast Furnace for free.",
- new Requirement(Skill.SMITHING, 60));
+ new SkillRequirement(Skill.SMITHING, 60),
+ new QuestRequirement(Quest.THE_GIANT_DWARF, true));
// ELITE
add("Craft 56 astral runes at once.",
- new Requirement(Skill.RUNECRAFT, 82));
+ new SkillRequirement(Skill.RUNECRAFT, 82),
+ new QuestRequirement(Quest.LUNAR_DIPLOMACY));
add("Create a dragonstone amulet in the Neitiznot furnace.",
- new Requirement(Skill.CRAFTING, 80));
+ new SkillRequirement(Skill.CRAFTING, 80),
+ new QuestRequirement(Quest.THE_FREMENNIK_ISLES, true));
add("Complete a lap of the Rellekka agility course.",
- new Requirement(Skill.AGILITY, 80));
+ new SkillRequirement(Skill.AGILITY, 80));
add("Kill each of the Godwars generals.",
- new Requirement(Skill.AGILITY, 70),
- new Requirement(Skill.STRENGTH, 70),
- new Requirement(Skill.HITPOINTS, 70),
- new Requirement(Skill.RANGED, 70));
+ new SkillRequirement(Skill.AGILITY, 70),
+ new SkillRequirement(Skill.STRENGTH, 70),
+ new SkillRequirement(Skill.HITPOINTS, 70),
+ new SkillRequirement(Skill.RANGED, 70),
+ new QuestRequirement(Quest.TROLL_STRONGHOLD));
add("Slay a Spiritual mage within the Godwars Dungeon.",
- new Requirement(Skill.SLAYER, 83));
+ new SkillRequirement(Skill.SLAYER, 83),
+ new QuestRequirement(Quest.TROLL_STRONGHOLD));
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/KandarinDiaryRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/KandarinDiaryRequirement.java
index 19dafef43d..0b775a0dba 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/KandarinDiaryRequirement.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/KandarinDiaryRequirement.java
@@ -25,9 +25,11 @@
*/
package net.runelite.client.plugins.achievementdiary.diaries;
+import net.runelite.api.Quest;
import net.runelite.api.Skill;
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement;
-import net.runelite.client.plugins.achievementdiary.Requirement;
+import net.runelite.client.plugins.achievementdiary.QuestRequirement;
+import net.runelite.client.plugins.achievementdiary.SkillRequirement;
public class KandarinDiaryRequirement extends GenericDiaryRequirement
{
@@ -35,78 +37,91 @@ public class KandarinDiaryRequirement extends GenericDiaryRequirement
{
// EASY
add("Catch a Mackerel at Catherby.",
- new Requirement(Skill.FISHING, 16));
+ new SkillRequirement(Skill.FISHING, 16));
add("Plant some Jute seeds in the patch north of McGrubor's Wood.",
- new Requirement(Skill.FARMING, 13));
+ new SkillRequirement(Skill.FARMING, 13));
+ add("Defeat on of each elemental in the workshop.",
+ new QuestRequirement(Quest.ELEMENTAL_WORKSHOP_I, true));
add("Cross the Coal truck log shortcut.",
- new Requirement(Skill.AGILITY, 20));
+ new SkillRequirement(Skill.AGILITY, 20));
// MEDIUM
add("Complete a lap of the Barbarian agility course.",
- new Requirement(Skill.AGILITY, 35));
+ new SkillRequirement(Skill.AGILITY, 35),
+ new QuestRequirement(Quest.ALFRED_GRIMHANDS_BARCRAWL));
add("Create a Super Antipoison potion from scratch in the Seers/Catherby Area.",
- new Requirement(Skill.HERBLORE, 48));
+ new SkillRequirement(Skill.HERBLORE, 48));
add("Enter the Ranging guild.",
- new Requirement(Skill.RANGED, 40));
+ new SkillRequirement(Skill.RANGED, 40));
add("Use the grapple shortcut to get from the water obelisk to Catherby shore.",
- new Requirement(Skill.AGILITY, 36),
- new Requirement(Skill.STRENGTH, 22),
- new Requirement(Skill.RANGED, 39));
+ new SkillRequirement(Skill.AGILITY, 36),
+ new SkillRequirement(Skill.STRENGTH, 22),
+ new SkillRequirement(Skill.RANGED, 39));
add("Catch and cook a Bass in Catherby.",
- new Requirement(Skill.FISHING, 46),
- new Requirement(Skill.COOKING, 43));
+ new SkillRequirement(Skill.FISHING, 46),
+ new SkillRequirement(Skill.COOKING, 43));
add("Teleport to Camelot.",
- new Requirement(Skill.MAGIC, 45));
+ new SkillRequirement(Skill.MAGIC, 45));
add("String a Maple shortbow in Seers' Village bank.",
- new Requirement(Skill.FLETCHING, 50));
+ new SkillRequirement(Skill.FLETCHING, 50));
add("Pick some Limpwurt root from the farming patch in Catherby.",
- new Requirement(Skill.FARMING, 26));
+ new SkillRequirement(Skill.FARMING, 26));
+ add("Create a Mind helmet.",
+ new QuestRequirement(Quest.ELEMENTAL_WORKSHOP_II));
+ add("Kill a Fire Giant inside Baxtorian Waterfall.",
+ new QuestRequirement(Quest.WATERFALL_QUEST, true));
add("Steal from the chest in Hemenster.",
- new Requirement(Skill.THIEVING, 47));
+ new SkillRequirement(Skill.THIEVING, 47));
+ add("Travel to McGrubor's Wood by Fairy Ring.",
+ new QuestRequirement(Quest.FAIRYTALE_II__CURE_A_QUEEN, true));
add("Mine some coal near the coal trucks.",
- new Requirement(Skill.MINING, 30));
+ new SkillRequirement(Skill.MINING, 30));
// HARD
add("Catch a Leaping Sturgeon.",
- new Requirement(Skill.FISHING, 70),
- new Requirement(Skill.AGILITY, 45),
- new Requirement(Skill.STRENGTH, 45));
+ new SkillRequirement(Skill.FISHING, 70),
+ new SkillRequirement(Skill.AGILITY, 45),
+ new SkillRequirement(Skill.STRENGTH, 45));
add("Complete a lap of the Seers' Village agility course.",
- new Requirement(Skill.AGILITY, 60));
+ new SkillRequirement(Skill.AGILITY, 60));
add("Create a Yew Longbow from scratch around Seers' Village.",
- new Requirement(Skill.WOODCUTTING, 60),
- new Requirement(Skill.FLETCHING, 70),
- new Requirement(Skill.CRAFTING, 10));
+ new SkillRequirement(Skill.WOODCUTTING, 60),
+ new SkillRequirement(Skill.FLETCHING, 70),
+ new SkillRequirement(Skill.CRAFTING, 10));
add("Enter the Seers' Village courthouse with piety turned on.",
- new Requirement(Skill.PRAYER, 70),
- new Requirement(Skill.DEFENCE, 70));
+ new SkillRequirement(Skill.PRAYER, 70),
+ new SkillRequirement(Skill.DEFENCE, 70),
+ new QuestRequirement(Quest.KINGS_RANSOM));
add("Charge a Water Orb.",
- new Requirement(Skill.MAGIC, 56));
+ new SkillRequirement(Skill.MAGIC, 56));
add("Burn some Maple logs with a bow in Seers' Village.",
- new Requirement(Skill.FIREMAKING, 65));
+ new SkillRequirement(Skill.FIREMAKING, 65));
add("Purchase and equip a granite body from Barbarian Assault.",
- new Requirement(Skill.STRENGTH, 50),
- new Requirement(Skill.DEFENCE, 50));
+ new SkillRequirement(Skill.STRENGTH, 50),
+ new SkillRequirement(Skill.DEFENCE, 50));
add("Have the Seers' estate agent decorate your house with Fancy Stone.",
- new Requirement(Skill.CONSTRUCTION, 50));
+ new SkillRequirement(Skill.CONSTRUCTION, 50));
add("Smith an Adamant spear at Otto's Grotto.",
- new Requirement(Skill.SMITHING, 75));
+ new SkillRequirement(Skill.SMITHING, 75),
+ new QuestRequirement(Quest.TAI_BWO_WANNAI_TRIO));
// ELITE
add("Pick some Dwarf weed from the herb patch at Catherby.",
- new Requirement(Skill.FARMING, 79));
+ new SkillRequirement(Skill.FARMING, 79));
add("Fish and Cook 5 Sharks in Catherby using the Cooking gauntlets.",
- new Requirement(Skill.FISHING, 76),
- new Requirement(Skill.COOKING, 80));
+ new SkillRequirement(Skill.FISHING, 76),
+ new SkillRequirement(Skill.COOKING, 80),
+ new QuestRequirement(Quest.FAMILY_CREST));
add("Mix a Stamina Mix on top of the Seers' Village bank.",
- new Requirement(Skill.HERBLORE, 86),
- new Requirement(Skill.AGILITY, 60));
+ new SkillRequirement(Skill.HERBLORE, 86),
+ new SkillRequirement(Skill.AGILITY, 60));
add("Smith a Rune Hasta at Otto's Grotto.",
- new Requirement(Skill.SMITHING, 90));
+ new SkillRequirement(Skill.SMITHING, 90));
add("Construct a Pyre ship from Magic Logs.(Requires Chewed Bones.)",
- new Requirement(Skill.FIREMAKING, 85),
- new Requirement(Skill.CRAFTING, 85));
+ new SkillRequirement(Skill.FIREMAKING, 85),
+ new SkillRequirement(Skill.CRAFTING, 85));
add("Teleport to Catherby.",
- new Requirement(Skill.MAGIC, 87));
+ new SkillRequirement(Skill.MAGIC, 87),
+ new QuestRequirement(Quest.LUNAR_DIPLOMACY));
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/KaramjaDiaryRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/KaramjaDiaryRequirement.java
index 9e4d701df7..f6523bc667 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/KaramjaDiaryRequirement.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/KaramjaDiaryRequirement.java
@@ -25,9 +25,13 @@
*/
package net.runelite.client.plugins.achievementdiary.diaries;
+import net.runelite.api.Quest;
import net.runelite.api.Skill;
+import net.runelite.client.plugins.achievementdiary.CombatLevelRequirement;
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement;
-import net.runelite.client.plugins.achievementdiary.Requirement;
+import net.runelite.client.plugins.achievementdiary.OrRequirement;
+import net.runelite.client.plugins.achievementdiary.QuestRequirement;
+import net.runelite.client.plugins.achievementdiary.SkillRequirement;
public class KaramjaDiaryRequirement extends GenericDiaryRequirement
{
@@ -36,70 +40,98 @@ public class KaramjaDiaryRequirement extends GenericDiaryRequirement
// EASY
add("Use the rope swing to travel to the small island north-west of Karamja, where the " +
"moss giants are.",
- new Requirement(Skill.AGILITY, 10));
+ new SkillRequirement(Skill.AGILITY, 10));
add("Mine some gold from the rocks on the north-west peninsula of Karamja.",
- new Requirement(Skill.MINING, 40));
+ new SkillRequirement(Skill.MINING, 40));
add("Explore Cairn Island to the west of Karamja.",
- new Requirement(Skill.AGILITY, 15));
+ new SkillRequirement(Skill.AGILITY, 15));
// MEDIUM
add("Claim a ticket from the Agility Arena in Brimhaven.",
- new Requirement(Skill.AGILITY, 30));
+ new SkillRequirement(Skill.AGILITY, 30));
+ add("Discover hidden wall in the dungeon below the volcano.",
+ new QuestRequirement(Quest.DRAGON_SLAYER, true));
+ add("Visit the Isle of Crandor via the dungeon below the volcano.",
+ new QuestRequirement(Quest.DRAGON_SLAYER, true));
+ add("Use Vigroy and Hajedy's cart service.",
+ new QuestRequirement(Quest.SHILO_VILLAGE));
add("Earn 100% favour in the village of Tai Bwo Wannai.",
- new Requirement(Skill.WOODCUTTING, 10));
+ new SkillRequirement(Skill.WOODCUTTING, 10),
+ new QuestRequirement(Quest.JUNGLE_POTION));
add("Cook a spider on a stick.",
- new Requirement(Skill.COOKING, 16));
+ new SkillRequirement(Skill.COOKING, 16));
+ add("Charter the Lady of the Waves from Cairn Isle to Port Khazard.",
+ new QuestRequirement(Quest.SHILO_VILLAGE));
add("Cut a log from a teak tree.",
- new Requirement(Skill.WOODCUTTING, 35));
+ new SkillRequirement(Skill.WOODCUTTING, 35),
+ new QuestRequirement(Quest.JUNGLE_POTION));
add("Cut a log from a mahogany tree.",
- new Requirement(Skill.WOODCUTTING, 50));
+ new SkillRequirement(Skill.WOODCUTTING, 50),
+ new QuestRequirement(Quest.JUNGLE_POTION));
add("Catch a karambwan.",
- new Requirement(Skill.FISHING, 65));
+ new SkillRequirement(Skill.FISHING, 65),
+ new QuestRequirement(Quest.TAI_BWO_WANNAI_TRIO, true));
+ add("Exchange gems for a machete.",
+ new QuestRequirement(Quest.JUNGLE_POTION));
+ add("Use the gnome glider to travel to Karamja.",
+ new QuestRequirement(Quest.THE_GRAND_TREE));
add("Grow a healthy fruit tree in the patch near Brimhaven.",
- new Requirement(Skill.FARMING, 27));
+ new SkillRequirement(Skill.FARMING, 27));
add("Trap a horned graahk.",
- new Requirement(Skill.HUNTER, 41));
+ new SkillRequirement(Skill.HUNTER, 41));
add("Chop the vines to gain deeper access to Brimhaven Dungeon.",
- new Requirement(Skill.WOODCUTTING, 10));
+ new SkillRequirement(Skill.WOODCUTTING, 10));
add("Cross the lava using the stepping stones within Brimhaven Dungeon.",
- new Requirement(Skill.AGILITY, 12));
+ new SkillRequirement(Skill.AGILITY, 12));
add("Climb the stairs within Brimhaven Dungeon.",
- new Requirement(Skill.WOODCUTTING, 10));
+ new SkillRequirement(Skill.WOODCUTTING, 10));
+ add("Charter a ship from the shipyard in the far east of Karamja.",
+ new QuestRequirement(Quest.THE_GRAND_TREE));
add("Mine a red topaz from a gem rock.",
- new Requirement(Skill.MINING, 40));
+ new SkillRequirement(Skill.MINING, 40),
+ new OrRequirement(
+ new QuestRequirement(Quest.SHILO_VILLAGE),
+ new QuestRequirement(Quest.JUNGLE_POTION)
+ )
+ );
// HARD
add("Craft some nature runes.",
- new Requirement(Skill.RUNECRAFT, 44));
+ new SkillRequirement(Skill.RUNECRAFT, 44),
+ new QuestRequirement(Quest.RUNE_MYSTERIES));
add("Cook a karambwan thoroughly.",
- new Requirement(Skill.COOKING, 30));
+ new SkillRequirement(Skill.COOKING, 30),
+ new QuestRequirement(Quest.TAI_BWO_WANNAI_TRIO));
add("Kill a deathwing in the dungeon under the Kharazi Jungle.",
- new Requirement(Skill.WOODCUTTING, 15),
- new Requirement(Skill.STRENGTH, 50),
- new Requirement(Skill.AGILITY, 50),
- new Requirement(Skill.THIEVING, 50),
- new Requirement(Skill.MINING, 52));
+ new SkillRequirement(Skill.WOODCUTTING, 15),
+ new SkillRequirement(Skill.STRENGTH, 50),
+ new SkillRequirement(Skill.AGILITY, 50),
+ new SkillRequirement(Skill.THIEVING, 50),
+ new SkillRequirement(Skill.MINING, 52),
+ new QuestRequirement(Quest.LEGENDS_QUEST));
add("Use the crossbow short cut south of the volcano.",
- new Requirement(Skill.AGILITY, 53),
- new Requirement(Skill.RANGED, 42),
- new Requirement(Skill.STRENGTH, 21));
+ new SkillRequirement(Skill.AGILITY, 53),
+ new SkillRequirement(Skill.RANGED, 42),
+ new SkillRequirement(Skill.STRENGTH, 21));
add("Collect 5 palm leaves.",
- new Requirement(Skill.WOODCUTTING, 15));
+ new SkillRequirement(Skill.WOODCUTTING, 15),
+ new QuestRequirement(Quest.LEGENDS_QUEST));
add("Be assigned a Slayer task by Duradel north of Shilo Village.",
- new Requirement("Combat", 100),
- new Requirement(Skill.SLAYER, 50));
+ new CombatLevelRequirement(100),
+ new SkillRequirement(Skill.SLAYER, 50),
+ new QuestRequirement(Quest.SHILO_VILLAGE));
add("Kill a metal dragon in Brimhaven Dungeon.",
- new Requirement(Skill.AGILITY, 12),
- new Requirement(Skill.WOODCUTTING, 34));
+ new SkillRequirement(Skill.AGILITY, 12),
+ new SkillRequirement(Skill.WOODCUTTING, 34));
// ELITE
add("Craft 56 Nature runes at once.",
- new Requirement(Skill.RUNECRAFT, 91));
+ new SkillRequirement(Skill.RUNECRAFT, 91));
add("Check the health of a palm tree in Brimhaven.",
- new Requirement(Skill.FARMING, 68));
+ new SkillRequirement(Skill.FARMING, 68));
add("Create an antivenom potion whilst standing in the horse shoe mine.",
- new Requirement(Skill.HERBLORE, 87));
+ new SkillRequirement(Skill.HERBLORE, 87));
add("Check the health of your Calquat tree patch.",
- new Requirement(Skill.FARMING, 72));
+ new SkillRequirement(Skill.FARMING, 72));
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/LumbridgeDiaryRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/LumbridgeDiaryRequirement.java
index 340b708a41..7238e18a55 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/LumbridgeDiaryRequirement.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/LumbridgeDiaryRequirement.java
@@ -25,9 +25,12 @@
*/
package net.runelite.client.plugins.achievementdiary.diaries;
+import net.runelite.api.Quest;
import net.runelite.api.Skill;
+import net.runelite.client.plugins.achievementdiary.CombatLevelRequirement;
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement;
-import net.runelite.client.plugins.achievementdiary.Requirement;
+import net.runelite.client.plugins.achievementdiary.QuestRequirement;
+import net.runelite.client.plugins.achievementdiary.SkillRequirement;
public class LumbridgeDiaryRequirement extends GenericDiaryRequirement
{
@@ -35,76 +38,98 @@ public class LumbridgeDiaryRequirement extends GenericDiaryRequirement
{
// EASY
add("Complete a lap of the Draynor Village agility course.",
- new Requirement(Skill.AGILITY, 10));
+ new SkillRequirement(Skill.AGILITY, 10));
add("Slay a Cave bug beneath Lumbridge Swamp.",
- new Requirement(Skill.SLAYER, 7));
+ new SkillRequirement(Skill.SLAYER, 7));
+ add("Have Sedridor teleport you to the Essence Mine.",
+ new QuestRequirement(Quest.RUNE_MYSTERIES));
add("Craft some water runes.",
- new Requirement(Skill.RUNECRAFT, 5));
+ new SkillRequirement(Skill.RUNECRAFT, 5),
+ new QuestRequirement(Quest.RUNE_MYSTERIES));
add("Chop and burn some oak logs in Lumbridge.",
- new Requirement(Skill.WOODCUTTING, 15),
- new Requirement(Skill.FIREMAKING, 15));
+ new SkillRequirement(Skill.WOODCUTTING, 15),
+ new SkillRequirement(Skill.FIREMAKING, 15));
add("Catch some Anchovies in Al Kharid.",
- new Requirement(Skill.FISHING, 15));
+ new SkillRequirement(Skill.FISHING, 15));
+ add("Bake some Bread on the Lumbridge kitchen range.",
+ new QuestRequirement(Quest.COOKS_ASSISTANT));
add("Mine some Iron ore at the Al Kharid mine.",
- new Requirement(Skill.MINING, 15));
+ new SkillRequirement(Skill.MINING, 15));
// MEDIUM
add("Complete a lap of the Al Kharid agility course.",
- new Requirement(Skill.AGILITY, 20));
+ new SkillRequirement(Skill.AGILITY, 20));
add("Grapple across the River Lum.",
- new Requirement(Skill.AGILITY, 8),
- new Requirement(Skill.STRENGTH, 19),
- new Requirement(Skill.RANGED, 37));
+ new SkillRequirement(Skill.AGILITY, 8),
+ new SkillRequirement(Skill.STRENGTH, 19),
+ new SkillRequirement(Skill.RANGED, 37));
add("Purchase an upgraded device from Ava.",
- new Requirement(Skill.RANGED, 50));
+ new SkillRequirement(Skill.RANGED, 50),
+ new QuestRequirement(Quest.ANIMAL_MAGNETISM));
+ add("Travel to the Wizards' Tower by Fairy ring.",
+ new QuestRequirement(Quest.FAIRYTALE_II__CURE_A_QUEEN, true));
add("Cast the teleport to Lumbridge spell.",
- new Requirement(Skill.MAGIC, 31));
+ new SkillRequirement(Skill.MAGIC, 31));
add("Catch some Salmon in Lumbridge.",
- new Requirement(Skill.FISHING, 30));
+ new SkillRequirement(Skill.FISHING, 30));
add("Craft a coif in the Lumbridge cow pen.",
- new Requirement(Skill.CRAFTING, 38));
- add("Get a slayer task from Chaeldar.",
- new Requirement("Combat", 70));
+ new SkillRequirement(Skill.CRAFTING, 38));
add("Chop some willow logs in Draynor Village.",
- new Requirement(Skill.WOODCUTTING, 30));
+ new SkillRequirement(Skill.WOODCUTTING, 30));
add("Pickpocket Martin the Master Gardener.",
- new Requirement(Skill.THIEVING, 38));
+ new SkillRequirement(Skill.THIEVING, 38));
+ add("Get a slayer task from Chaeldar.",
+ new CombatLevelRequirement(70),
+ new QuestRequirement(Quest.LOST_CITY));
add("Catch an Essence or Eclectic impling in Puro-Puro.",
- new Requirement(Skill.HUNTER, 42));
+ new SkillRequirement(Skill.HUNTER, 42),
+ new QuestRequirement(Quest.LOST_CITY));
add("Craft some Lava runes at the fire altar in Al Kharid.",
- new Requirement(Skill.RUNECRAFT, 23));
+ new SkillRequirement(Skill.RUNECRAFT, 23),
+ new QuestRequirement(Quest.RUNE_MYSTERIES));
// HARD
add("Cast Bones to Peaches in Al Kharid palace.",
- new Requirement(Skill.MAGIC, 60));
+ new SkillRequirement(Skill.MAGIC, 60));
add("Squeeze past the jutting wall on your way to the cosmic altar.",
- new Requirement(Skill.AGILITY, 46));
+ new SkillRequirement(Skill.AGILITY, 46),
+ new QuestRequirement(Quest.LOST_CITY));
add("Craft 56 Cosmic runes simultaneously.",
- new Requirement(Skill.RUNECRAFT, 59));
+ new SkillRequirement(Skill.RUNECRAFT, 59),
+ new QuestRequirement(Quest.LOST_CITY));
add("Travel from Lumbridge to Edgeville on a Waka Canoe.",
- new Requirement(Skill.WOODCUTTING, 57));
+ new SkillRequirement(Skill.WOODCUTTING, 57));
+ add("Collect at least 100 Tears of Guthix in one visit.",
+ new QuestRequirement(Quest.TEARS_OF_GUTHIX));
+ add("Take the train from Dorgesh-Kaan to Keldagrim.",
+ new QuestRequirement(Quest.ANOTHER_SLICE_OF_HAM));
+ add("Purchase some Barrows gloves from the Lumbridge bank chest.",
+ new QuestRequirement(Quest.RECIPE_FOR_DISASTER));
add("Pick some Belladonna from the farming patch at Draynor Manor.",
- new Requirement(Skill.FARMING, 63));
+ new SkillRequirement(Skill.FARMING, 63));
add("Light your mining helmet in the Lumbridge castle basement.",
- new Requirement(Skill.FIREMAKING, 65));
+ new SkillRequirement(Skill.FIREMAKING, 65));
add("Recharge your prayer at Clan Wars with Smite activated.",
- new Requirement(Skill.PRAYER, 52));
+ new SkillRequirement(Skill.PRAYER, 52));
add("Craft, string and enchant an Amulet of Power in Lumbridge.",
- new Requirement(Skill.CRAFTING, 70),
- new Requirement(Skill.MAGIC, 57));
+ new SkillRequirement(Skill.CRAFTING, 70),
+ new SkillRequirement(Skill.MAGIC, 57));
// ELITE
add("Steal from a Dorgesh-Kaan rich chest.",
- new Requirement(Skill.THIEVING, 78));
+ new SkillRequirement(Skill.THIEVING, 78),
+ new QuestRequirement(Quest.DEATH_TO_THE_DORGESHUUN));
add("Pickpocket Movario on the Dorgesh-Kaan Agility course.",
- new Requirement(Skill.AGILITY, 70),
- new Requirement(Skill.RANGED, 70),
- new Requirement(Skill.STRENGTH, 70));
+ new SkillRequirement(Skill.AGILITY, 70),
+ new SkillRequirement(Skill.RANGED, 70),
+ new SkillRequirement(Skill.STRENGTH, 70),
+ new QuestRequirement(Quest.DEATH_TO_THE_DORGESHUUN));
add("Chop some magic logs at the Mage Training Arena.",
- new Requirement(Skill.WOODCUTTING, 75));
+ new SkillRequirement(Skill.WOODCUTTING, 75));
add("Smith an Adamant platebody down Draynor sewer.",
- new Requirement(Skill.SMITHING, 88));
+ new SkillRequirement(Skill.SMITHING, 88));
add("Craft 140 or more Water runes at once.",
- new Requirement(Skill.RUNECRAFT, 76));
+ new SkillRequirement(Skill.RUNECRAFT, 76),
+ new QuestRequirement(Quest.RUNE_MYSTERIES));
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/MorytaniaDiaryRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/MorytaniaDiaryRequirement.java
index da1a5b1bcc..9b9a861779 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/MorytaniaDiaryRequirement.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/MorytaniaDiaryRequirement.java
@@ -25,9 +25,13 @@
*/
package net.runelite.client.plugins.achievementdiary.diaries;
+import net.runelite.api.Quest;
import net.runelite.api.Skill;
+import net.runelite.client.plugins.achievementdiary.CombatLevelRequirement;
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement;
-import net.runelite.client.plugins.achievementdiary.Requirement;
+import net.runelite.client.plugins.achievementdiary.OrRequirement;
+import net.runelite.client.plugins.achievementdiary.QuestRequirement;
+import net.runelite.client.plugins.achievementdiary.SkillRequirement;
public class MorytaniaDiaryRequirement extends GenericDiaryRequirement
{
@@ -35,75 +39,99 @@ public class MorytaniaDiaryRequirement extends GenericDiaryRequirement
{
// EASY
add("Craft any Snelm from scratch in Morytania.",
- new Requirement(Skill.CRAFTING, 15));
+ new SkillRequirement(Skill.CRAFTING, 15));
add("Cook a thin Snail on the Port Phasmatys range.",
- new Requirement(Skill.COOKING, 12));
+ new SkillRequirement(Skill.COOKING, 12));
add("Get a slayer task from Mazchna.",
- new Requirement("Combat", 20));
+ new CombatLevelRequirement(20));
add("Kill a Banshee in the Slayer Tower.",
- new Requirement(Skill.SLAYER, 15));
+ new SkillRequirement(Skill.SLAYER, 15));
add("Place a Scarecrow in the Morytania flower patch.",
- new Requirement(Skill.FARMING, 23));
+ new SkillRequirement(Skill.FARMING, 23));
+ add("Restore your prayer points at the nature altar.",
+ new QuestRequirement(Quest.NATURE_SPIRIT));
// MEDIUM
add("Catch a swamp lizard.",
- new Requirement(Skill.HUNTER, 29));
+ new SkillRequirement(Skill.HUNTER, 29));
add("Complete a lap of the Canifis agility course.",
- new Requirement(Skill.AGILITY, 40));
+ new SkillRequirement(Skill.AGILITY, 40));
add("Obtain some Bark from a Hollow tree.",
- new Requirement(Skill.WOODCUTTING, 45));
+ new SkillRequirement(Skill.WOODCUTTING, 45));
add("Kill a Terror Dog.",
- new Requirement(Skill.SLAYER, 40));
+ new SkillRequirement(Skill.SLAYER, 40),
+ new QuestRequirement(Quest.LAIR_OF_TARN_RAZORLOR));
add("Complete a game of trouble brewing.",
- new Requirement(Skill.COOKING, 40));
+ new SkillRequirement(Skill.COOKING, 40),
+ new QuestRequirement(Quest.CABIN_FEVER));
add("Make a batch of cannonballs at the Port Phasmatys furnace.",
- new Requirement(Skill.SMITHING, 35));
+ new SkillRequirement(Skill.SMITHING, 35),
+ new QuestRequirement(Quest.DWARF_CANNON),
+ new QuestRequirement(Quest.GHOSTS_AHOY, true));
add("Kill a Fever Spider on Braindeath Island.",
- new Requirement(Skill.SLAYER, 42));
+ new SkillRequirement(Skill.SLAYER, 42),
+ new QuestRequirement(Quest.RUM_DEAL));
+ add("Use an ectophial to return to Port Phasmatys.",
+ new QuestRequirement(Quest.GHOSTS_AHOY));
add("Mix a Guthix Balance potion while in Morytania.",
- new Requirement(Skill.HERBLORE, 36));
+ new SkillRequirement(Skill.HERBLORE, 36),
+ new QuestRequirement(Quest.IN_AID_OF_THE_MYREQUE, true));
// HARD
add("Enter the Kharyrll portal in your POH.",
- new Requirement(Skill.MAGIC, 66),
- new Requirement(Skill.CONSTRUCTION, 50));
+ new SkillRequirement(Skill.MAGIC, 66),
+ new SkillRequirement(Skill.CONSTRUCTION, 50),
+ new QuestRequirement(Quest.DESERT_TREASURE));
add("Climb the advanced spike chain within Slayer Tower.",
- new Requirement(Skill.AGILITY, 71));
+ new SkillRequirement(Skill.AGILITY, 71));
add("Harvest some Watermelon from the Allotment patch on Harmony Island.",
- new Requirement(Skill.FARMING, 47));
+ new SkillRequirement(Skill.FARMING, 47),
+ new QuestRequirement(Quest.THE_GREAT_BRAIN_ROBBERY, true));
add("Chop and burn some mahogany logs on Mos Le'Harmless.",
- new Requirement(Skill.WOODCUTTING, 50),
- new Requirement(Skill.FIREMAKING, 50));
+ new SkillRequirement(Skill.WOODCUTTING, 50),
+ new SkillRequirement(Skill.FIREMAKING, 50),
+ new QuestRequirement(Quest.CABIN_FEVER));
+ add("Complete a temple trek with a hard companion.",
+ new QuestRequirement(Quest.IN_AID_OF_THE_MYREQUE));
add("Kill a Cave Horror.",
- new Requirement(Skill.SLAYER, 58));
+ new SkillRequirement(Skill.SLAYER, 58),
+ new QuestRequirement(Quest.CABIN_FEVER));
add("Harvest some Bittercap Mushrooms from the patch in Canifis.",
- new Requirement(Skill.FARMING, 53));
+ new SkillRequirement(Skill.FARMING, 53));
add("Pray at the Altar of Nature with Piety activated.",
- new Requirement(Skill.PRAYER, 70),
- new Requirement(Skill.DEFENCE, 70));
+ new SkillRequirement(Skill.PRAYER, 70),
+ new SkillRequirement(Skill.DEFENCE, 70),
+ new QuestRequirement(Quest.NATURE_SPIRIT),
+ new QuestRequirement(Quest.KINGS_RANSOM));
add("Use the shortcut to get to the bridge over the Salve.",
- new Requirement(Skill.AGILITY, 65));
+ new SkillRequirement(Skill.AGILITY, 65));
add("Mine some Mithril ore in the Abandoned Mine.",
- new Requirement(Skill.MINING, 55));
+ new SkillRequirement(Skill.MINING, 55),
+ new QuestRequirement(Quest.HAUNTED_MINE));
// ELITE
add("Catch a shark in Burgh de Rott with your bare hands.",
- new Requirement(Skill.FISHING, 96),
- new Requirement(Skill.STRENGTH, 76));
+ new SkillRequirement(Skill.FISHING, 96),
+ new SkillRequirement(Skill.STRENGTH, 76),
+ new QuestRequirement(Quest.IN_AID_OF_THE_MYREQUE));
add("Cremate any Shade remains on a Magic or Redwood pyre.",
- new Requirement(Skill.FIREMAKING, 80));
+ new SkillRequirement(Skill.FIREMAKING, 80),
+ new QuestRequirement(Quest.SHADES_OF_MORTTON));
add("Fertilize the Morytania herb patch using Lunar Magic.",
- new Requirement(Skill.MAGIC, 83));
+ new SkillRequirement(Skill.MAGIC, 83),
+ new QuestRequirement(Quest.LUNAR_DIPLOMACY));
add("Craft a Black dragonhide body in Canifis bank.",
- new Requirement(Skill.CRAFTING, 84));
+ new SkillRequirement(Skill.CRAFTING, 84));
add("Kill an Abyssal demon in the Slayer Tower.",
- new Requirement(Skill.SLAYER, 85));
+ new SkillRequirement(Skill.SLAYER, 85));
add("Loot the Barrows chest while wearing any complete barrows set.",
- new Requirement(Skill.DEFENCE, 70),
- new Requirement(Skill.ATTACK, 70,
- new Requirement(Skill.STRENGTH, 70),
- new Requirement(Skill.RANGED, 70),
- new Requirement(Skill.MAGIC, 70))
+ new SkillRequirement(Skill.DEFENCE, 70),
+ new OrRequirement(
+ new SkillRequirement(Skill.ATTACK, 70),
+ new SkillRequirement(Skill.STRENGTH, 70),
+ new SkillRequirement(Skill.RANGED, 70),
+ new SkillRequirement(Skill.MAGIC, 70)
+ )
);
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/VarrockDiaryRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/VarrockDiaryRequirement.java
index d6ecc8e7b7..bff800b4c2 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/VarrockDiaryRequirement.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/VarrockDiaryRequirement.java
@@ -25,71 +25,95 @@
*/
package net.runelite.client.plugins.achievementdiary.diaries;
+import net.runelite.api.Quest;
import net.runelite.api.Skill;
+import net.runelite.client.plugins.achievementdiary.CombatLevelRequirement;
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement;
-import net.runelite.client.plugins.achievementdiary.Requirement;
+import net.runelite.client.plugins.achievementdiary.QuestPointRequirement;
+import net.runelite.client.plugins.achievementdiary.QuestRequirement;
+import net.runelite.client.plugins.achievementdiary.SkillRequirement;
public class VarrockDiaryRequirement extends GenericDiaryRequirement
{
public VarrockDiaryRequirement()
{
// EASY
+ add("Have Aubury teleport you to the Essence mine.",
+ new QuestRequirement(Quest.RUNE_MYSTERIES));
add("Mine some Iron in the south east mining patch near Varrock.",
- new Requirement(Skill.MINING, 15));
+ new SkillRequirement(Skill.MINING, 15));
add("Jump over the fence south of Varrock.",
- new Requirement(Skill.AGILITY, 13));
+ new SkillRequirement(Skill.AGILITY, 13));
add("Spin a bowl on the pottery wheel and fire it in the oven in Barb Village.",
- new Requirement(Skill.CRAFTING, 8));
+ new SkillRequirement(Skill.CRAFTING, 8));
add("Craft some Earth runes.",
- new Requirement(Skill.RUNECRAFT, 9));
+ new SkillRequirement(Skill.RUNECRAFT, 9));
add("Catch some trout in the River Lum at Barbarian Village.",
- new Requirement(Skill.FISHING, 20));
+ new SkillRequirement(Skill.FISHING, 20));
add("Steal from the Tea stall in Varrock.",
- new Requirement(Skill.THIEVING, 5));
+ new SkillRequirement(Skill.THIEVING, 5));
// MEDIUM
+ add("Enter the Champions' Guild.",
+ new QuestPointRequirement(32));
+ add("Select a colour for your kitten.",
+ new QuestRequirement(Quest.GARDEN_OF_TRANQUILLITY, true),
+ new QuestRequirement(Quest.GERTRUDES_CAT));
+ add("Use the spirit tree north of Varrock.",
+ new QuestRequirement(Quest.TREE_GNOME_VILLAGE));
+ add("Enter the Tolna dungeon after completing A Soul's Bane.",
+ new QuestRequirement(Quest.A_SOULS_BANE));
+ add("Teleport to the digsite using a Digsite pendant.",
+ new QuestRequirement(Quest.THE_DIG_SITE));
add("Cast the teleport to Varrock spell.",
- new Requirement(Skill.MAGIC, 25));
+ new SkillRequirement(Skill.MAGIC, 25));
add("Get a Slayer task from Vannaka.",
- new Requirement("Combat", 40));
+ new CombatLevelRequirement(40));
add("Pick a White tree fruit.",
- new Requirement(Skill.FARMING, 25));
+ new SkillRequirement(Skill.FARMING, 25),
+ new QuestRequirement(Quest.GARDEN_OF_TRANQUILLITY));
add("Use the balloon to travel from Varrock.",
- new Requirement(Skill.FIREMAKING, 40));
+ new SkillRequirement(Skill.FIREMAKING, 40),
+ new QuestRequirement(Quest.ENLIGHTENED_JOURNEY));
add("Complete a lap of the Varrock Agility course.",
- new Requirement(Skill.AGILITY, 30));
+ new SkillRequirement(Skill.AGILITY, 30));
// HARD
add("Trade furs with the Fancy Dress Seller for a spottier cape and equip it.",
- new Requirement(Skill.HUNTER, 66));
+ new SkillRequirement(Skill.HUNTER, 66));
add("Make a Waka Canoe near Edgeville.",
- new Requirement(Skill.WOODCUTTING, 57));
+ new SkillRequirement(Skill.WOODCUTTING, 57));
add("Teleport to Paddewwa.",
- new Requirement(Skill.MAGIC, 54));
+ new SkillRequirement(Skill.MAGIC, 54),
+ new QuestRequirement(Quest.DESERT_TREASURE));
add("Chop some yew logs in Varrock and burn them at the top of the Varrock church.",
- new Requirement(Skill.WOODCUTTING, 60),
- new Requirement(Skill.FIREMAKING, 60));
+ new SkillRequirement(Skill.WOODCUTTING, 60),
+ new SkillRequirement(Skill.FIREMAKING, 60));
add("Have the Varrock estate agent decorate your house with Fancy Stone.",
- new Requirement(Skill.CONSTRUCTION, 50));
+ new SkillRequirement(Skill.CONSTRUCTION, 50));
add("Collect at least 2 yew roots from the Tree patch in Varrock Palace.",
- new Requirement(Skill.WOODCUTTING, 60),
- new Requirement(Skill.FARMING, 68));
+ new SkillRequirement(Skill.WOODCUTTING, 60),
+ new SkillRequirement(Skill.FARMING, 68));
add("Pray at the altar in Varrock palace with Smite active.",
- new Requirement(Skill.PRAYER, 52));
+ new SkillRequirement(Skill.PRAYER, 52));
add("Squeeze through the obstacle pipe in Edgeville dungeon.",
- new Requirement(Skill.AGILITY, 51));
+ new SkillRequirement(Skill.AGILITY, 51));
// ELITE
add("Create a super combat potion in Varrock west bank.",
- new Requirement(Skill.HERBLORE, 90));
+ new SkillRequirement(Skill.HERBLORE, 90),
+ new QuestRequirement(Quest.DRUIDIC_RITUAL));
add("Use Lunar magic to make 20 mahogany planks at the Lumberyard.",
- new Requirement(Skill.MAGIC, 86));
+ new SkillRequirement(Skill.MAGIC, 86),
+ new QuestRequirement(Quest.DREAM_MENTOR));
add("Bake a summer pie in the Cooking Guild.",
- new Requirement(Skill.COOKING, 95));
+ new SkillRequirement(Skill.COOKING, 95));
add("Smith and fletch ten rune darts within Varrock.",
- new Requirement(Skill.SMITHING, 89),
- new Requirement(Skill.FLETCHING, 81));
+ new SkillRequirement(Skill.SMITHING, 89),
+ new SkillRequirement(Skill.FLETCHING, 81),
+ new QuestRequirement(Quest.THE_TOURIST_TRAP));
add("Craft 100 or more earth runes simultaneously.",
- new Requirement(Skill.RUNECRAFT, 78));
+ new SkillRequirement(Skill.RUNECRAFT, 78),
+ new QuestRequirement(Quest.RUNE_MYSTERIES));
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/WesternDiaryRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/WesternDiaryRequirement.java
index aba26739a3..be612338e8 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/WesternDiaryRequirement.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/WesternDiaryRequirement.java
@@ -25,9 +25,12 @@
*/
package net.runelite.client.plugins.achievementdiary.diaries;
+import net.runelite.api.Quest;
import net.runelite.api.Skill;
+import net.runelite.client.plugins.achievementdiary.CombatLevelRequirement;
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement;
-import net.runelite.client.plugins.achievementdiary.Requirement;
+import net.runelite.client.plugins.achievementdiary.QuestRequirement;
+import net.runelite.client.plugins.achievementdiary.SkillRequirement;
public class WesternDiaryRequirement extends GenericDiaryRequirement
{
@@ -35,70 +38,108 @@ public class WesternDiaryRequirement extends GenericDiaryRequirement
{
// EASY
add("Catch a Copper Longtail.",
- new Requirement(Skill.HUNTER, 9));
+ new SkillRequirement(Skill.HUNTER, 9));
add("Complete a novice game of Pest Control.",
- new Requirement("Combat", 40));
+ new CombatLevelRequirement(40));
add("Mine some Iron Ore near Piscatoris.",
- new Requirement(Skill.MINING, 15));
+ new SkillRequirement(Skill.MINING, 15));
+ add("Claim any Chompy bird hat from Rantz.",
+ new QuestRequirement(Quest.BIG_CHOMPY_BIRD_HUNTING));
+ add("Have Brimstail teleport you to the Essence mine.",
+ new QuestRequirement(Quest.RUNE_MYSTERIES));
add("Fletch an Oak shortbow from the Gnome Stronghold.",
- new Requirement(Skill.FLETCHING, 20));
+ new SkillRequirement(Skill.FLETCHING, 20));
// MEDIUM
add("Take the agility shortcut from the Grand Tree to Otto's Grotto.",
- new Requirement(Skill.AGILITY, 37));
+ new SkillRequirement(Skill.AGILITY, 37),
+ new QuestRequirement(Quest.TREE_GNOME_VILLAGE),
+ new QuestRequirement(Quest.THE_GRAND_TREE));
+ add("Travel to the Gnome Stronghold by Spirit Tree.",
+ new QuestRequirement(Quest.TREE_GNOME_VILLAGE));
add("Trap a Spined Larupia.",
- new Requirement(Skill.HUNTER, 31));
+ new SkillRequirement(Skill.HUNTER, 31));
add("Fish some Bass on Ape Atoll.",
- new Requirement(Skill.FISHING, 46));
+ new SkillRequirement(Skill.FISHING, 46),
+ new QuestRequirement(Quest.MONKEY_MADNESS_I, true));
add("Chop and burn some teak logs on Ape Atoll.",
- new Requirement(Skill.WOODCUTTING, 35),
- new Requirement(Skill.FIREMAKING, 35));
+ new SkillRequirement(Skill.WOODCUTTING, 35),
+ new SkillRequirement(Skill.FIREMAKING, 35),
+ new QuestRequirement(Quest.MONKEY_MADNESS_I));
add("Complete an intermediate game of Pest Control.",
- new Requirement("Combat", 70));
+ new CombatLevelRequirement(70));
+ add("Travel to the Feldip Hills by Gnome Glider.",
+ new QuestRequirement(Quest.ONE_SMALL_FAVOUR),
+ new QuestRequirement(Quest.THE_GRAND_TREE));
+ add("Claim a Chompy bird hat from Rantz after registering at least 125 kills.",
+ new QuestRequirement(Quest.BIG_CHOMPY_BIRD_HUNTING));
+ add("Travel from Eagles' Peak to the Feldip Hills by Eagle.",
+ new QuestRequirement(Quest.EAGLES_PEAK));
add("Make a Chocolate Bomb at the Grand Tree.",
- new Requirement(Skill.COOKING, 42));
+ new SkillRequirement(Skill.COOKING, 42));
add("Complete a delivery for the Gnome Restaurant.",
- new Requirement(Skill.COOKING, 42));
+ new SkillRequirement(Skill.COOKING, 42));
+ add("Turn your small crystal seed into a Crystal saw.",
+ new QuestRequirement(Quest.THE_EYES_OF_GLOUPHRIE));
add("Mine some Gold ore underneath the Grand Tree.",
- new Requirement(Skill.MINING, 40));
+ new SkillRequirement(Skill.MINING, 40),
+ new QuestRequirement(Quest.THE_GRAND_TREE));
// HARD
add("Kill an Elf with a Crystal bow.",
- new Requirement(Skill.RANGED, 70),
- new Requirement(Skill.AGILITY, 50));
+ new SkillRequirement(Skill.RANGED, 70),
+ new SkillRequirement(Skill.AGILITY, 50),
+ new QuestRequirement(Quest.ROVING_ELVES));
add("Catch and cook a Monkfish in Piscatoris.",
- new Requirement(Skill.FISHING, 62),
- new Requirement(Skill.COOKING, 62));
+ new SkillRequirement(Skill.FISHING, 62),
+ new SkillRequirement(Skill.COOKING, 62),
+ new QuestRequirement(Quest.SWAN_SONG));
add("Complete a Veteran game of Pest Control.",
- new Requirement("Combat", 100));
+ new CombatLevelRequirement(100));
add("Catch a Dashing Kebbit.",
- new Requirement(Skill.HUNTER, 69));
+ new SkillRequirement(Skill.HUNTER, 69));
add("Complete a lap of the Ape Atoll agility course.",
- new Requirement(Skill.AGILITY, 48));
+ new SkillRequirement(Skill.AGILITY, 48),
+ new QuestRequirement(Quest.MONKEY_MADNESS_I));
add("Chop and burn some Mahogany logs on Ape Atoll.",
- new Requirement(Skill.WOODCUTTING, 50),
- new Requirement(Skill.FIREMAKING, 50));
+ new SkillRequirement(Skill.WOODCUTTING, 50),
+ new SkillRequirement(Skill.FIREMAKING, 50),
+ new QuestRequirement(Quest.MONKEY_MADNESS_I));
add("Mine some Adamantite ore in Tirannwn.",
- new Requirement(Skill.MINING, 70));
+ new SkillRequirement(Skill.MINING, 70),
+ new QuestRequirement(Quest.REGICIDE));
add("Check the health of your Palm tree in Lletya.",
- new Requirement(Skill.FARMING, 68));
+ new SkillRequirement(Skill.FARMING, 68),
+ new QuestRequirement(Quest.MOURNINGS_ENDS_PART_I, true));
+ add("Claim a Chompy bird hat from Rantz after registering at least 300 kills.",
+ new QuestRequirement(Quest.BIG_CHOMPY_BIRD_HUNTING));
add("Build an Isafdar painting in your POH Quest hall.",
- new Requirement(Skill.CONSTRUCTION, 65));
+ new SkillRequirement(Skill.CONSTRUCTION, 65),
+ new QuestRequirement(Quest.ROVING_ELVES));
+ add("Kill Zulrah.",
+ new QuestRequirement(Quest.REGICIDE, true));
add("Teleport to Ape Atoll.",
- new Requirement(Skill.MAGIC, 64));
+ new SkillRequirement(Skill.MAGIC, 64),
+ new QuestRequirement(Quest.RECIPE_FOR_DISASTER, true));
add("Pickpocket a Gnome.",
- new Requirement(Skill.THIEVING, 75));
+ new SkillRequirement(Skill.THIEVING, 75),
+ new QuestRequirement(Quest.TREE_GNOME_VILLAGE));
// ELITE
add("Fletch a Magic Longbow in the Elven lands.",
- new Requirement(Skill.FLETCHING, 85));
+ new SkillRequirement(Skill.FLETCHING, 85),
+ new QuestRequirement(Quest.MOURNINGS_ENDS_PART_I));
add("Kill the Thermonuclear Smoke devil (Does not require task).",
- new Requirement(Skill.SLAYER, 93));
+ new SkillRequirement(Skill.SLAYER, 93));
add("Have Prissy Scilla protect your Magic tree.",
- new Requirement(Skill.FARMING, 75));
+ new SkillRequirement(Skill.FARMING, 75));
add("Use the Elven overpass advanced cliffside shortcut.",
- new Requirement(Skill.AGILITY, 85));
+ new SkillRequirement(Skill.AGILITY, 85),
+ new QuestRequirement(Quest.UNDERGROUND_PASS));
+ add("Claim a Chompy bird hat from Rantz after registering at least 1000 kills.",
+ new QuestRequirement(Quest.BIG_CHOMPY_BIRD_HUNTING));
add("Pickpocket an Elf.",
- new Requirement(Skill.THIEVING, 85));
+ new SkillRequirement(Skill.THIEVING, 85),
+ new QuestRequirement(Quest.MOURNINGS_ENDS_PART_II));
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/WildernessDiaryRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/WildernessDiaryRequirement.java
index d3dc26c215..0a059a1785 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/WildernessDiaryRequirement.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/WildernessDiaryRequirement.java
@@ -25,9 +25,12 @@
*/
package net.runelite.client.plugins.achievementdiary.diaries;
+import net.runelite.api.Quest;
import net.runelite.api.Skill;
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement;
-import net.runelite.client.plugins.achievementdiary.Requirement;
+import net.runelite.client.plugins.achievementdiary.OrRequirement;
+import net.runelite.client.plugins.achievementdiary.QuestRequirement;
+import net.runelite.client.plugins.achievementdiary.SkillRequirement;
public class WildernessDiaryRequirement extends GenericDiaryRequirement
{
@@ -35,64 +38,74 @@ public class WildernessDiaryRequirement extends GenericDiaryRequirement
{
// EASY
add("Cast Low Alchemy at the Fountain of Rune.",
- new Requirement(Skill.MAGIC, 21));
+ new SkillRequirement(Skill.MAGIC, 21));
add("Kill an Earth Warrior in the Wilderness beneath Edgeville.",
- new Requirement(Skill.AGILITY, 15));
+ new SkillRequirement(Skill.AGILITY, 15));
add("Mine some Iron ore in the Wilderness.",
- new Requirement(Skill.MINING, 15));
+ new SkillRequirement(Skill.MINING, 15));
+ add("Have the Mage of Zamorak teleport you to the Abyss.",
+ new QuestRequirement(Quest.ENTER_THE_ABYSS));
// MEDIUM
add("Mine some Mithril ore in the wilderness.",
- new Requirement(Skill.MINING, 55));
+ new SkillRequirement(Skill.MINING, 55));
add("Chop some yew logs from a fallen Ent.",
- new Requirement(Skill.WOODCUTTING, 61));
+ new SkillRequirement(Skill.WOODCUTTING, 61));
add("Enter the Wilderness Godwars Dungeon.",
- new Requirement(Skill.AGILITY, 60,
- new Requirement(Skill.STRENGTH, 60))
+ new OrRequirement(
+ new SkillRequirement(Skill.AGILITY, 60),
+ new SkillRequirement(Skill.STRENGTH, 60)
+ )
);
add("Complete a lap of the Wilderness Agility course.",
- new Requirement(Skill.AGILITY, 52));
+ new SkillRequirement(Skill.AGILITY, 52));
add("Charge an Earth Orb.",
- new Requirement(Skill.MAGIC, 60));
+ new SkillRequirement(Skill.MAGIC, 60));
add("Kill a Bloodveld in the Wilderness Godwars Dungeon.",
- new Requirement(Skill.SLAYER, 50));
+ new SkillRequirement(Skill.SLAYER, 50));
add("Smith a Golden helmet in the Resource Area.",
- new Requirement(Skill.SMITHING, 50));
+ new SkillRequirement(Skill.SMITHING, 50),
+ new QuestRequirement(Quest.BETWEEN_A_ROCK, true));
// HARD
add("Cast one of the 3 God spells against another player in the Wilderness.",
- new Requirement(Skill.MAGIC, 60));
+ new SkillRequirement(Skill.MAGIC, 60),
+ new QuestRequirement(Quest.THE_MAGE_ARENA));
add("Charge an Air Orb.",
- new Requirement(Skill.MAGIC, 66));
+ new SkillRequirement(Skill.MAGIC, 66));
add("Catch a Black Salamander in the Wilderness.",
- new Requirement(Skill.HUNTER, 67));
+ new SkillRequirement(Skill.HUNTER, 67));
add("Smith an Adamant scimitar in the Resource Area.",
- new Requirement(Skill.SMITHING, 75));
+ new SkillRequirement(Skill.SMITHING, 75));
add("Take the agility shortcut from Trollheim into the Wilderness.",
- new Requirement(Skill.AGILITY, 64));
+ new SkillRequirement(Skill.AGILITY, 64),
+ new QuestRequirement(Quest.DEATH_PLATEAU));
add("Kill a Spiritual warrior in the Wilderness Godwars Dungeon.",
- new Requirement(Skill.SLAYER, 68));
+ new SkillRequirement(Skill.SLAYER, 68));
add("Fish some Raw Lava Eel in the Wilderness.",
- new Requirement(Skill.FISHING, 53));
+ new SkillRequirement(Skill.FISHING, 53));
// ELITE
add("Teleport to Ghorrock.",
- new Requirement(Skill.MAGIC, 96));
+ new SkillRequirement(Skill.MAGIC, 96),
+ new QuestRequirement(Quest.DESERT_TREASURE));
add("Fish and Cook a Dark Crab in the Resource Area.",
- new Requirement(Skill.FISHING, 85),
- new Requirement(Skill.COOKING, 90));
+ new SkillRequirement(Skill.FISHING, 85),
+ new SkillRequirement(Skill.COOKING, 90));
add("Smith a rune scimitar from scratch in the Resource Area.",
- new Requirement(Skill.MINING, 85),
- new Requirement(Skill.SMITHING, 90));
+ new SkillRequirement(Skill.MINING, 85),
+ new SkillRequirement(Skill.SMITHING, 90));
add("Steal from the Rogues' chest.",
- new Requirement(Skill.THIEVING, 84));
+ new SkillRequirement(Skill.THIEVING, 84));
add("Slay a spiritual mage inside the wilderness Godwars Dungeon.",
- new Requirement(Skill.SLAYER, 83),
- new Requirement(Skill.AGILITY, 60,
- new Requirement(Skill.STRENGTH, 60))
+ new SkillRequirement(Skill.SLAYER, 83),
+ new OrRequirement(
+ new SkillRequirement(Skill.AGILITY, 60),
+ new SkillRequirement(Skill.STRENGTH, 60)
+ )
);
add("Cut and burn some magic logs in the Resource Area.",
- new Requirement(Skill.WOODCUTTING, 75),
- new Requirement(Skill.FIREMAKING, 75));
+ new SkillRequirement(Skill.WOODCUTTING, 75),
+ new SkillRequirement(Skill.FIREMAKING, 75));
}
}