Merge pull request #7219 from Abextm/diary-questreq

achievementdiary: Add Quest support
This commit is contained in:
Abex
2019-01-08 20:21:20 -07:00
committed by GitHub
23 changed files with 1222 additions and 551 deletions

View File

@@ -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;
}
}
}

View File

@@ -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
}

View File

@@ -67,6 +67,18 @@ public final class ScriptID
*/ */
public static final int CLEAR_CHATBOX_PANEL = 677; public static final int CLEAR_CHATBOX_PANEL = 677;
/**
* Queries the completion state of a quest by its struct id
* <ul>
* <li> int (struct) The id of the quest
* </ul>
* Returns
* <ul>
* <li> int (QuestState) the normalized state of the quest
* </ul>
*/
public static final int QUESTLIST_PROGRESS = 2267;
/** /**
* Updates the Diary/Quest interface's scrollbar * Updates the Diary/Quest interface's scrollbar
* <ul> * <ul>

View File

@@ -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";
}
}

View File

@@ -25,17 +25,19 @@
*/ */
package net.runelite.client.plugins.achievementdiary; package net.runelite.client.plugins.achievementdiary;
import com.google.common.collect.ImmutableList;
import java.util.List;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
class DiaryRequirement class DiaryRequirement
{ {
private final String task; private final String task;
private final Requirement[] skillRequirements; private final List<Requirement> requirements;
DiaryRequirement(String task, Requirement[] skillRequirements) DiaryRequirement(String task, Requirement[] requirements)
{ {
this.task = task; this.task = task;
this.skillRequirements = skillRequirements; this.requirements = ImmutableList.copyOf(requirements);
} }
} }

View File

@@ -25,17 +25,19 @@
*/ */
package net.runelite.client.plugins.achievementdiary; package net.runelite.client.plugins.achievementdiary;
import java.awt.Color;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.regex.Pattern;
import javax.inject.Inject; import javax.inject.Inject;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.api.FontTypeFace;
import net.runelite.api.QuestState;
import net.runelite.api.ScriptID; 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.events.WidgetLoaded;
import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetID; 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.VarrockDiaryRequirement;
import net.runelite.client.plugins.achievementdiary.diaries.WesternDiaryRequirement; import net.runelite.client.plugins.achievementdiary.diaries.WesternDiaryRequirement;
import net.runelite.client.plugins.achievementdiary.diaries.WildernessDiaryRequirement; import net.runelite.client.plugins.achievementdiary.diaries.WildernessDiaryRequirement;
import net.runelite.client.util.ColorUtil;
import net.runelite.client.util.Text; import net.runelite.client.util.Text;
@Slf4j @Slf4j
@@ -66,6 +67,9 @@ import net.runelite.client.util.Text;
) )
public class DiaryRequirementsPlugin extends Plugin public class DiaryRequirementsPlugin extends Plugin
{ {
private static final String AND_JOINER = ", ";
private static final Pattern AND_JOINER_PATTERN = Pattern.compile("(?<=, )");
@Inject @Inject
private Client client; private Client client;
@@ -101,6 +105,9 @@ public class DiaryRequirementsPlugin extends Plugin
return; return;
} }
FontTypeFace font = titleWidget.getFont();
int maxWidth = titleWidget.getWidth();
List<String> originalAchievements = getOriginalAchievements(children); List<String> originalAchievements = getOriginalAchievements(children);
// new requirements starts out as a copy of the original // 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 levelRequirement = skillRequirements.get(taskBuffer);
String task = originalAchievements.get(i); 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("<str>") ? "<str>" : "";
if (ourWidth + taskWidth < maxWidth)
{ {
// Merge onto 1 line
newRequirements.set(i + offset, task + levelRequirement); newRequirements.set(i + offset, task + levelRequirement);
} }
else if (ourWidth < maxWidth)
{
// 2 line split
newRequirements.add(i + (++offset), strike + levelRequirement);
}
else else
{ {
offset++; // Full text layout
if (task.startsWith("<str>")) 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, "<str>" + levelRequirement); int wordWidth = font.getTextWidth(word);
} if (runningWidth == 0 || wordWidth + runningWidth < maxWidth)
else {
{ runningWidth += wordWidth;
newRequirements.add(i + offset, levelRequirement); 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 // returns a map of task -> level requirements
private Map<String, String> buildRequirements(Collection<DiaryRequirement> requirements) private Map<String, String> buildRequirements(Collection<DiaryRequirement> requirements)
{ {
Map<String, String> lineIndexRequirementMap = new HashMap<>(); Map<String, String> reqs = new HashMap<>();
for (DiaryRequirement req : requirements) for (DiaryRequirement req : requirements)
{ {
String reqTask = req.getTask(); StringBuilder b = new StringBuilder();
List<RequirementStringBuilder> requirementBuilders = new ArrayList<>(); b.append("<col=ffffff>(");
for (Requirement i : req.getSkillRequirements()) assert req.getRequirements().size() > 0;
for (Requirement ireq : req.getRequirements())
{ {
RequirementStringBuilder requirementStringBuilder = new RequirementStringBuilder(i); boolean satifisfied = satisfiesRequirement(ireq);
b.append(satifisfied ? "<col=000080><str>" : "<col=800000>");
Skill skill = i.getSkill(); b.append(ireq.toString());
int realSkillLevel; b.append(satifisfied ? "</str>" : "<col=000080>");
if (skill == null && i.getCustomRequirement().equals("Combat")) b.append(AND_JOINER);
{
realSkillLevel = client.getLocalPlayer().getCombatLevel();
}
else
{
realSkillLevel = client.getRealSkillLevel(skill);
}
List<Integer> 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);
} }
lineIndexRequirementMap.put(reqTask, combine(requirementBuilders )); b.delete(b.length() - AND_JOINER.length(), b.length());
b.append("<col=ffffff>)");
reqs.put(req.getTask(), b.toString());
} }
return lineIndexRequirementMap; return reqs;
} }
private String combine(List<RequirementStringBuilder> list) private boolean satisfiesRequirement(Requirement r)
{ {
StringBuilder requirementsString = new StringBuilder(); if (r instanceof OrRequirement)
requirementsString.append(ColorUtil.prependColorTag(" (", Color.WHITE));
for (RequirementStringBuilder req : list)
{ {
requirementsString.append(ColorUtil.colorTag(new Color(0x80))) return ((OrRequirement) r).getRequirements()
.append(req.getRequirementString()) .stream()
.append(", "); .anyMatch(this::satisfiesRequirement);
} }
requirementsString.deleteCharAt(requirementsString.length() - 1); if (r instanceof SkillRequirement)
requirementsString.deleteCharAt(requirementsString.length() - 2); {
requirementsString.append(ColorUtil.prependColorTag(")", Color.WHITE)); SkillRequirement s = (SkillRequirement) r;
return client.getRealSkillLevel(s.getSkill()) >= s.getLevel();
return requirementsString.toString(); }
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;
} }
} }

View File

@@ -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<Requirement> requirements;
public OrRequirement(Requirement... reqs)
{
this.requirements = ImmutableList.copyOf(reqs);
}
@Override
public String toString()
{
return Joiner.on(" or ").join(requirements);
}
}

View File

@@ -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";
}
}

View File

@@ -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();
}
}

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2018, Adam <Adam@sigterm.info> * Copyright (c) 2019 Abex
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * 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. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/package net.runelite.client.plugins.achievementdiary; */package net.runelite.client.plugins.achievementdiary;
import lombok.Getter; public interface Requirement
import net.runelite.api.Skill;
@Getter
public class 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;
}
} }

View File

@@ -1,94 +0,0 @@
/*
* Copyright (c) 2018, Marshall <https://github.com/marshdevs>
* Copyright (c) 2018, Adam <Adam@sigterm.info>
* 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 = "<str>" + this.requirementString + "</str>";
}
void colorRedRequirement()
{
this.requirementString = ColorUtil.wrapWithColorTag(this.requirementString, new Color(0x800000));
}
boolean hasLevelRequirement(int realSkillLevel, List<Integer> altRealSkillLevels)
{
return hasLevelRequirement(requirement, realSkillLevel, altRealSkillLevels);
}
private static boolean hasLevelRequirement(Requirement requirement, int realSkillLevel, List<Integer> 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;
}
}

View File

@@ -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();
}
}

View File

@@ -25,78 +25,107 @@
*/ */
package net.runelite.client.plugins.achievementdiary.diaries; package net.runelite.client.plugins.achievementdiary.diaries;
import net.runelite.api.Quest;
import net.runelite.api.Skill; import net.runelite.api.Skill;
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement; 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 class ArdougneDiaryRequirement extends GenericDiaryRequirement
{ {
public ArdougneDiaryRequirement() public ArdougneDiaryRequirement()
{ {
// EASY // 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.", 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 // 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.", add("Grapple over Yanille's south wall.",
new Requirement(Skill.AGILITY, 39), new SkillRequirement(Skill.AGILITY, 39),
new Requirement(Skill.STRENGTH, 38), new SkillRequirement(Skill.STRENGTH, 38),
new Requirement(Skill.RANGED, 21)); new SkillRequirement(Skill.RANGED, 21));
add("Harvest some strawberries from the Ardougne farming patch.", 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.", 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.", 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.", 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.", 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.", add("Equip Iban's upgraded staff or upgrade an Iban staff.",
new Requirement(Skill.MAGIC, 50), new SkillRequirement(Skill.MAGIC, 50),
new Requirement(Skill.ATTACK, 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 // HARD
add("Recharge some Jewellery at Totem in the Legends Guild.",
new QuestRequirement(Quest.LEGENDS_QUEST));
add("Enter the Magic Guild.", add("Enter the Magic Guild.",
new Requirement(Skill.MAGIC, 66)); new SkillRequirement(Skill.MAGIC, 66));
add("Attempt to steal from King Lathas' chest.", 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.", add("Teleport to the Watchtower.",
new Requirement(Skill.MAGIC, 58)); new SkillRequirement(Skill.MAGIC, 58),
new QuestRequirement(Quest.WATCHTOWER));
add("Catch a Red Salamander.", 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.", 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.", 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.", add("Smith a Mithril platebody near Ardougne.",
new Requirement(Skill.SMITHING, 68)); new SkillRequirement(Skill.SMITHING, 68));
add("Enter your POH from Yanille.", 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.", 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.", add("Craft some Death runes.",
new Requirement(Skill.RUNECRAFT, 65)); new SkillRequirement(Skill.RUNECRAFT, 65),
new QuestRequirement(Quest.MOURNINGS_ENDS_PART_II));
// ELITE // ELITE
add("Catch a Manta ray in the Fishing Trawler and cook it in Port Khazard.", add("Catch a Manta ray in the Fishing Trawler and cook it in Port Khazard.",
new SkillRequirement(Skill.FISHING, 81),
new Requirement(Skill.FISHING, 81), new SkillRequirement(Skill.COOKING, 91)
new Requirement(Skill.COOKING, 91)
); );
add("Attempt to picklock the door to the basement of Yanille Agility Dungeon.", 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.", 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.", add("Make a rune crossbow yourself from scratch within Witchaven or Yanille.",
new Requirement(Skill.CRAFTING, 10), new SkillRequirement(Skill.CRAFTING, 10),
new Requirement(Skill.SMITHING, 91), new SkillRequirement(Skill.SMITHING, 91),
new Requirement(Skill.FLETCHING, 69)); 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.", 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.", 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.", add("Cast Ice Barrage on another player within Castlewars.",
new Requirement(Skill.MAGIC, 94)); new SkillRequirement(Skill.MAGIC, 94),
new QuestRequirement(Quest.DESERT_TREASURE));
} }
} }

View File

@@ -25,9 +25,11 @@
*/ */
package net.runelite.client.plugins.achievementdiary.diaries; package net.runelite.client.plugins.achievementdiary.diaries;
import net.runelite.api.Quest;
import net.runelite.api.Skill; import net.runelite.api.Skill;
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement; 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 public class DesertDiaryRequirement extends GenericDiaryRequirement
{ {
@@ -35,60 +37,82 @@ public class DesertDiaryRequirement extends GenericDiaryRequirement
{ {
// EASY // EASY
add("Catch a Golden Warbler.", add("Catch a Golden Warbler.",
new Requirement(Skill.HUNTER, 5)); new SkillRequirement(Skill.HUNTER, 5));
add("Mine 5 clay in the north-eastern desert.", 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.", 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 // MEDIUM
add("Climb to the summit of the Agility Pyramid.", add("Climb to the summit of the Agility Pyramid.",
new Requirement(Skill.AGILITY, 30)); new SkillRequirement(Skill.AGILITY, 30));
add("Slay a desert lizard.", add("Slay a desert lizard.",
new Requirement(Skill.SLAYER, 22)); new SkillRequirement(Skill.SLAYER, 22));
add("Catch an Orange Salamander.", add("Catch an Orange Salamander.",
new Requirement(Skill.HUNTER, 47)); new SkillRequirement(Skill.HUNTER, 47));
add("Steal a feather from the Desert Phoenix.", 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.", 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.", 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.", add("Chop some Teak logs near Uzer.",
new Requirement(Skill.WOODCUTTING, 35)); new SkillRequirement(Skill.WOODCUTTING, 35));
// HARD // HARD
add("Knock out and pickpocket a Menaphite Thug.", 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.", add("Mine some Granite.",
new Requirement(Skill.MINING, 45)); new SkillRequirement(Skill.MINING, 45));
add("Refill your waterskins in the Desert using Lunar magic.", 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.", 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.", add("Slay a Dust Devil with a Slayer helmet equipped.",
new Requirement(Skill.SLAYER, 65), new SkillRequirement(Skill.SLAYER, 65),
new Requirement(Skill.DEFENCE, 10), new SkillRequirement(Skill.DEFENCE, 10),
new Requirement(Skill.CRAFTING, 55)); 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.", 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.", 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.", add("Create a Mithril Platebody in Nardah.",
new Requirement(Skill.SMITHING, 68)); new SkillRequirement(Skill.SMITHING, 68));
// ELITE // ELITE
add("Bake a wild pie at the Nardah Clay Oven.", 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.", 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.", 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.", 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.", 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.", 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));
} }
} }

View File

@@ -25,9 +25,11 @@
*/ */
package net.runelite.client.plugins.achievementdiary.diaries; package net.runelite.client.plugins.achievementdiary.diaries;
import net.runelite.api.Quest;
import net.runelite.api.Skill; import net.runelite.api.Skill;
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement; 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 public class FaladorDiaryRequirement extends GenericDiaryRequirement
{ {
@@ -35,71 +37,83 @@ public class FaladorDiaryRequirement extends GenericDiaryRequirement
{ {
// EASY // EASY
add("Find out what your family crest is from Sir Renitee.", 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.", 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.", add("Smith some Blurite Limbs on Doric's Anvil.",
new Requirement(Skill.MINING, 10), new SkillRequirement(Skill.MINING, 10),
new Requirement(Skill.SMITHING, 13)); new SkillRequirement(Skill.SMITHING, 13),
new QuestRequirement(Quest.THE_KNIGHTS_SWORD),
new QuestRequirement(Quest.DORICS_QUEST));
// MEDIUM // MEDIUM
add("Light a Bullseye lantern at the Chemist's in Rimmington.", 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.", 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.", 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.", 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.", add("Grapple up and then jump off the north Falador wall.",
new Requirement(Skill.AGILITY, 11), new SkillRequirement(Skill.AGILITY, 11),
new Requirement(Skill.STRENGTH, 37), new SkillRequirement(Skill.STRENGTH, 37),
new Requirement(Skill.RANGED, 19)); new SkillRequirement(Skill.RANGED, 19));
add("Pickpocket a Falador guard.", 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.", add("Pray at the Altar of Guthix in Taverley whilst wearing full Initiate.",
new Requirement(Skill.PRAYER, 10), new SkillRequirement(Skill.PRAYER, 10),
new Requirement(Skill.DEFENCE, 20)); new SkillRequirement(Skill.DEFENCE, 20),
new QuestRequirement(Quest.RECRUITMENT_DRIVE));
add("Mine some Gold ore at the Crafting Guild.", add("Mine some Gold ore at the Crafting Guild.",
new Requirement(Skill.CRAFTING, 40), new SkillRequirement(Skill.CRAFTING, 40),
new Requirement(Skill.MINING, 40)); new SkillRequirement(Skill.MINING, 40));
add("Squeeze through the crevice in the Dwarven mines.", 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", add("Chop and burn some Willow logs in Taverley",
new Requirement(Skill.WOODCUTTING, 30), new SkillRequirement(Skill.WOODCUTTING, 30),
new Requirement(Skill.FIREMAKING, 30)); new SkillRequirement(Skill.FIREMAKING, 30));
add("Craft a fruit basket on the Falador Farm loom.", add("Craft a fruit basket on the Falador Farm loom.",
new Requirement(Skill.CRAFTING, 36)); new SkillRequirement(Skill.CRAFTING, 36));
add("Teleport to Falador.", add("Teleport to Falador.",
new Requirement(Skill.MAGIC, 37)); new SkillRequirement(Skill.MAGIC, 37));
// HARD // HARD
add("Craft 140 Mind runes simultaneously.", 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.", 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.", 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.", 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.", 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.", 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.", 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.", 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 // ELITE
add("Craft 252 Air Runes simultaneously.", 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.", add("Find at least 3 magic roots at once when digging up your magic tree in Falador.",
new Requirement(Skill.FARMING, 91), new SkillRequirement(Skill.FARMING, 91),
new Requirement(Skill.WOODCUTTING, 75)); new SkillRequirement(Skill.WOODCUTTING, 75));
add("Jump over the strange floor in Taverley dungeon.", 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.", add("Mix a Saradomin brew in Falador east bank.",
new Requirement(Skill.HERBLORE, 81)); new SkillRequirement(Skill.HERBLORE, 81));
} }
} }

View File

@@ -25,9 +25,11 @@
*/ */
package net.runelite.client.plugins.achievementdiary.diaries; package net.runelite.client.plugins.achievementdiary.diaries;
import net.runelite.api.Quest;
import net.runelite.api.Skill; import net.runelite.api.Skill;
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement; 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 public class FremennikDiaryRequirement extends GenericDiaryRequirement
{ {
@@ -35,62 +37,96 @@ public class FremennikDiaryRequirement extends GenericDiaryRequirement
{ {
// EASY // EASY
add("Catch a Cerulean twitch.", 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.", add("Craft a tiara from scratch in Rellekka.",
new Requirement(Skill.CRAFTING, 23), new SkillRequirement(Skill.CRAFTING, 23),
new Requirement(Skill.MINING, 20), new SkillRequirement(Skill.MINING, 20),
new Requirement(Skill.SMITHING, 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.", 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.", add("Chop and burn some oak logs in the Fremennik Province.",
new Requirement(Skill.WOODCUTTING, 15), new SkillRequirement(Skill.WOODCUTTING, 15),
new Requirement(Skill.FIREMAKING, 15)); new SkillRequirement(Skill.FIREMAKING, 15));
// MEDIUM // MEDIUM
add("Slay a Brine rat.", 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.", 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.", 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.", 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.", 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.", 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 // HARD
add("Teleport to Trollheim.", 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.", 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.", 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.", 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.", 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.", 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.", 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.", 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 // ELITE
add("Craft 56 astral runes at once.", 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.", 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.", 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.", add("Kill each of the Godwars generals.",
new Requirement(Skill.AGILITY, 70), new SkillRequirement(Skill.AGILITY, 70),
new Requirement(Skill.STRENGTH, 70), new SkillRequirement(Skill.STRENGTH, 70),
new Requirement(Skill.HITPOINTS, 70), new SkillRequirement(Skill.HITPOINTS, 70),
new Requirement(Skill.RANGED, 70)); new SkillRequirement(Skill.RANGED, 70),
new QuestRequirement(Quest.TROLL_STRONGHOLD));
add("Slay a Spiritual mage within the Godwars Dungeon.", add("Slay a Spiritual mage within the Godwars Dungeon.",
new Requirement(Skill.SLAYER, 83)); new SkillRequirement(Skill.SLAYER, 83),
new QuestRequirement(Quest.TROLL_STRONGHOLD));
} }
} }

View File

@@ -25,9 +25,11 @@
*/ */
package net.runelite.client.plugins.achievementdiary.diaries; package net.runelite.client.plugins.achievementdiary.diaries;
import net.runelite.api.Quest;
import net.runelite.api.Skill; import net.runelite.api.Skill;
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement; 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 public class KandarinDiaryRequirement extends GenericDiaryRequirement
{ {
@@ -35,78 +37,91 @@ public class KandarinDiaryRequirement extends GenericDiaryRequirement
{ {
// EASY // EASY
add("Catch a Mackerel at Catherby.", 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.", 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.", add("Cross the Coal truck log shortcut.",
new Requirement(Skill.AGILITY, 20)); new SkillRequirement(Skill.AGILITY, 20));
// MEDIUM // MEDIUM
add("Complete a lap of the Barbarian agility course.", 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.", 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.", 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.", add("Use the grapple shortcut to get from the water obelisk to Catherby shore.",
new Requirement(Skill.AGILITY, 36), new SkillRequirement(Skill.AGILITY, 36),
new Requirement(Skill.STRENGTH, 22), new SkillRequirement(Skill.STRENGTH, 22),
new Requirement(Skill.RANGED, 39)); new SkillRequirement(Skill.RANGED, 39));
add("Catch and cook a Bass in Catherby.", add("Catch and cook a Bass in Catherby.",
new Requirement(Skill.FISHING, 46), new SkillRequirement(Skill.FISHING, 46),
new Requirement(Skill.COOKING, 43)); new SkillRequirement(Skill.COOKING, 43));
add("Teleport to Camelot.", add("Teleport to Camelot.",
new Requirement(Skill.MAGIC, 45)); new SkillRequirement(Skill.MAGIC, 45));
add("String a Maple shortbow in Seers' Village bank.", 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.", 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.", 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.", add("Mine some coal near the coal trucks.",
new Requirement(Skill.MINING, 30)); new SkillRequirement(Skill.MINING, 30));
// HARD // HARD
add("Catch a Leaping Sturgeon.", add("Catch a Leaping Sturgeon.",
new Requirement(Skill.FISHING, 70), new SkillRequirement(Skill.FISHING, 70),
new Requirement(Skill.AGILITY, 45), new SkillRequirement(Skill.AGILITY, 45),
new Requirement(Skill.STRENGTH, 45)); new SkillRequirement(Skill.STRENGTH, 45));
add("Complete a lap of the Seers' Village agility course.", 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.", add("Create a Yew Longbow from scratch around Seers' Village.",
new Requirement(Skill.WOODCUTTING, 60), new SkillRequirement(Skill.WOODCUTTING, 60),
new Requirement(Skill.FLETCHING, 70), new SkillRequirement(Skill.FLETCHING, 70),
new Requirement(Skill.CRAFTING, 10)); new SkillRequirement(Skill.CRAFTING, 10));
add("Enter the Seers' Village courthouse with piety turned on.", add("Enter the Seers' Village courthouse with piety turned on.",
new Requirement(Skill.PRAYER, 70), new SkillRequirement(Skill.PRAYER, 70),
new Requirement(Skill.DEFENCE, 70)); new SkillRequirement(Skill.DEFENCE, 70),
new QuestRequirement(Quest.KINGS_RANSOM));
add("Charge a Water Orb.", 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.", 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.", add("Purchase and equip a granite body from Barbarian Assault.",
new Requirement(Skill.STRENGTH, 50), new SkillRequirement(Skill.STRENGTH, 50),
new Requirement(Skill.DEFENCE, 50)); new SkillRequirement(Skill.DEFENCE, 50));
add("Have the Seers' estate agent decorate your house with Fancy Stone.", 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.", 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 // ELITE
add("Pick some Dwarf weed from the herb patch at Catherby.", 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.", add("Fish and Cook 5 Sharks in Catherby using the Cooking gauntlets.",
new Requirement(Skill.FISHING, 76), new SkillRequirement(Skill.FISHING, 76),
new Requirement(Skill.COOKING, 80)); new SkillRequirement(Skill.COOKING, 80),
new QuestRequirement(Quest.FAMILY_CREST));
add("Mix a Stamina Mix on top of the Seers' Village bank.", add("Mix a Stamina Mix on top of the Seers' Village bank.",
new Requirement(Skill.HERBLORE, 86), new SkillRequirement(Skill.HERBLORE, 86),
new Requirement(Skill.AGILITY, 60)); new SkillRequirement(Skill.AGILITY, 60));
add("Smith a Rune Hasta at Otto's Grotto.", 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.)", add("Construct a Pyre ship from Magic Logs.(Requires Chewed Bones.)",
new Requirement(Skill.FIREMAKING, 85), new SkillRequirement(Skill.FIREMAKING, 85),
new Requirement(Skill.CRAFTING, 85)); new SkillRequirement(Skill.CRAFTING, 85));
add("Teleport to Catherby.", add("Teleport to Catherby.",
new Requirement(Skill.MAGIC, 87)); new SkillRequirement(Skill.MAGIC, 87),
new QuestRequirement(Quest.LUNAR_DIPLOMACY));
} }
} }

View File

@@ -25,9 +25,13 @@
*/ */
package net.runelite.client.plugins.achievementdiary.diaries; package net.runelite.client.plugins.achievementdiary.diaries;
import net.runelite.api.Quest;
import net.runelite.api.Skill; 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.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 public class KaramjaDiaryRequirement extends GenericDiaryRequirement
{ {
@@ -36,70 +40,98 @@ public class KaramjaDiaryRequirement extends GenericDiaryRequirement
// EASY // EASY
add("Use the rope swing to travel to the small island north-west of Karamja, where the " + add("Use the rope swing to travel to the small island north-west of Karamja, where the " +
"moss giants are.", "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.", 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.", add("Explore Cairn Island to the west of Karamja.",
new Requirement(Skill.AGILITY, 15)); new SkillRequirement(Skill.AGILITY, 15));
// MEDIUM // MEDIUM
add("Claim a ticket from the Agility Arena in Brimhaven.", 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.", 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.", 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.", 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.", 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.", 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.", 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.", 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.", 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.", 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.", 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.", 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 // HARD
add("Craft some nature runes.", 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.", 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.", add("Kill a deathwing in the dungeon under the Kharazi Jungle.",
new Requirement(Skill.WOODCUTTING, 15), new SkillRequirement(Skill.WOODCUTTING, 15),
new Requirement(Skill.STRENGTH, 50), new SkillRequirement(Skill.STRENGTH, 50),
new Requirement(Skill.AGILITY, 50), new SkillRequirement(Skill.AGILITY, 50),
new Requirement(Skill.THIEVING, 50), new SkillRequirement(Skill.THIEVING, 50),
new Requirement(Skill.MINING, 52)); new SkillRequirement(Skill.MINING, 52),
new QuestRequirement(Quest.LEGENDS_QUEST));
add("Use the crossbow short cut south of the volcano.", add("Use the crossbow short cut south of the volcano.",
new Requirement(Skill.AGILITY, 53), new SkillRequirement(Skill.AGILITY, 53),
new Requirement(Skill.RANGED, 42), new SkillRequirement(Skill.RANGED, 42),
new Requirement(Skill.STRENGTH, 21)); new SkillRequirement(Skill.STRENGTH, 21));
add("Collect 5 palm leaves.", 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.", add("Be assigned a Slayer task by Duradel north of Shilo Village.",
new Requirement("Combat", 100), new CombatLevelRequirement(100),
new Requirement(Skill.SLAYER, 50)); new SkillRequirement(Skill.SLAYER, 50),
new QuestRequirement(Quest.SHILO_VILLAGE));
add("Kill a metal dragon in Brimhaven Dungeon.", add("Kill a metal dragon in Brimhaven Dungeon.",
new Requirement(Skill.AGILITY, 12), new SkillRequirement(Skill.AGILITY, 12),
new Requirement(Skill.WOODCUTTING, 34)); new SkillRequirement(Skill.WOODCUTTING, 34));
// ELITE // ELITE
add("Craft 56 Nature runes at once.", 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.", 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.", 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.", add("Check the health of your Calquat tree patch.",
new Requirement(Skill.FARMING, 72)); new SkillRequirement(Skill.FARMING, 72));
} }
} }

View File

@@ -25,9 +25,12 @@
*/ */
package net.runelite.client.plugins.achievementdiary.diaries; package net.runelite.client.plugins.achievementdiary.diaries;
import net.runelite.api.Quest;
import net.runelite.api.Skill; 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.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 public class LumbridgeDiaryRequirement extends GenericDiaryRequirement
{ {
@@ -35,76 +38,98 @@ public class LumbridgeDiaryRequirement extends GenericDiaryRequirement
{ {
// EASY // EASY
add("Complete a lap of the Draynor Village agility course.", 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.", 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.", 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.", add("Chop and burn some oak logs in Lumbridge.",
new Requirement(Skill.WOODCUTTING, 15), new SkillRequirement(Skill.WOODCUTTING, 15),
new Requirement(Skill.FIREMAKING, 15)); new SkillRequirement(Skill.FIREMAKING, 15));
add("Catch some Anchovies in Al Kharid.", 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.", add("Mine some Iron ore at the Al Kharid mine.",
new Requirement(Skill.MINING, 15)); new SkillRequirement(Skill.MINING, 15));
// MEDIUM // MEDIUM
add("Complete a lap of the Al Kharid agility course.", 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.", add("Grapple across the River Lum.",
new Requirement(Skill.AGILITY, 8), new SkillRequirement(Skill.AGILITY, 8),
new Requirement(Skill.STRENGTH, 19), new SkillRequirement(Skill.STRENGTH, 19),
new Requirement(Skill.RANGED, 37)); new SkillRequirement(Skill.RANGED, 37));
add("Purchase an upgraded device from Ava.", 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.", add("Cast the teleport to Lumbridge spell.",
new Requirement(Skill.MAGIC, 31)); new SkillRequirement(Skill.MAGIC, 31));
add("Catch some Salmon in Lumbridge.", 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.", add("Craft a coif in the Lumbridge cow pen.",
new Requirement(Skill.CRAFTING, 38)); new SkillRequirement(Skill.CRAFTING, 38));
add("Get a slayer task from Chaeldar.",
new Requirement("Combat", 70));
add("Chop some willow logs in Draynor Village.", add("Chop some willow logs in Draynor Village.",
new Requirement(Skill.WOODCUTTING, 30)); new SkillRequirement(Skill.WOODCUTTING, 30));
add("Pickpocket Martin the Master Gardener.", 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.", 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.", 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 // HARD
add("Cast Bones to Peaches in Al Kharid palace.", 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.", 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.", 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.", 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.", 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.", 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.", 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.", add("Craft, string and enchant an Amulet of Power in Lumbridge.",
new Requirement(Skill.CRAFTING, 70), new SkillRequirement(Skill.CRAFTING, 70),
new Requirement(Skill.MAGIC, 57)); new SkillRequirement(Skill.MAGIC, 57));
// ELITE // ELITE
add("Steal from a Dorgesh-Kaan rich chest.", 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.", add("Pickpocket Movario on the Dorgesh-Kaan Agility course.",
new Requirement(Skill.AGILITY, 70), new SkillRequirement(Skill.AGILITY, 70),
new Requirement(Skill.RANGED, 70), new SkillRequirement(Skill.RANGED, 70),
new Requirement(Skill.STRENGTH, 70)); new SkillRequirement(Skill.STRENGTH, 70),
new QuestRequirement(Quest.DEATH_TO_THE_DORGESHUUN));
add("Chop some magic logs at the Mage Training Arena.", 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.", 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.", add("Craft 140 or more Water runes at once.",
new Requirement(Skill.RUNECRAFT, 76)); new SkillRequirement(Skill.RUNECRAFT, 76),
new QuestRequirement(Quest.RUNE_MYSTERIES));
} }
} }

View File

@@ -25,9 +25,13 @@
*/ */
package net.runelite.client.plugins.achievementdiary.diaries; package net.runelite.client.plugins.achievementdiary.diaries;
import net.runelite.api.Quest;
import net.runelite.api.Skill; 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.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 public class MorytaniaDiaryRequirement extends GenericDiaryRequirement
{ {
@@ -35,75 +39,99 @@ public class MorytaniaDiaryRequirement extends GenericDiaryRequirement
{ {
// EASY // EASY
add("Craft any Snelm from scratch in Morytania.", 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.", 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.", add("Get a slayer task from Mazchna.",
new Requirement("Combat", 20)); new CombatLevelRequirement(20));
add("Kill a Banshee in the Slayer Tower.", 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.", 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 // MEDIUM
add("Catch a swamp lizard.", add("Catch a swamp lizard.",
new Requirement(Skill.HUNTER, 29)); new SkillRequirement(Skill.HUNTER, 29));
add("Complete a lap of the Canifis agility course.", 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.", add("Obtain some Bark from a Hollow tree.",
new Requirement(Skill.WOODCUTTING, 45)); new SkillRequirement(Skill.WOODCUTTING, 45));
add("Kill a Terror Dog.", 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.", 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.", 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.", 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.", 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 // HARD
add("Enter the Kharyrll portal in your POH.", add("Enter the Kharyrll portal in your POH.",
new Requirement(Skill.MAGIC, 66), new SkillRequirement(Skill.MAGIC, 66),
new Requirement(Skill.CONSTRUCTION, 50)); new SkillRequirement(Skill.CONSTRUCTION, 50),
new QuestRequirement(Quest.DESERT_TREASURE));
add("Climb the advanced spike chain within Slayer Tower.", 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.", 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.", add("Chop and burn some mahogany logs on Mos Le'Harmless.",
new Requirement(Skill.WOODCUTTING, 50), new SkillRequirement(Skill.WOODCUTTING, 50),
new Requirement(Skill.FIREMAKING, 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.", 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.", 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.", add("Pray at the Altar of Nature with Piety activated.",
new Requirement(Skill.PRAYER, 70), new SkillRequirement(Skill.PRAYER, 70),
new Requirement(Skill.DEFENCE, 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.", 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.", 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 // ELITE
add("Catch a shark in Burgh de Rott with your bare hands.", add("Catch a shark in Burgh de Rott with your bare hands.",
new Requirement(Skill.FISHING, 96), new SkillRequirement(Skill.FISHING, 96),
new Requirement(Skill.STRENGTH, 76)); new SkillRequirement(Skill.STRENGTH, 76),
new QuestRequirement(Quest.IN_AID_OF_THE_MYREQUE));
add("Cremate any Shade remains on a Magic or Redwood pyre.", 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.", 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.", 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.", 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.", add("Loot the Barrows chest while wearing any complete barrows set.",
new Requirement(Skill.DEFENCE, 70), new SkillRequirement(Skill.DEFENCE, 70),
new Requirement(Skill.ATTACK, 70, new OrRequirement(
new Requirement(Skill.STRENGTH, 70), new SkillRequirement(Skill.ATTACK, 70),
new Requirement(Skill.RANGED, 70), new SkillRequirement(Skill.STRENGTH, 70),
new Requirement(Skill.MAGIC, 70)) new SkillRequirement(Skill.RANGED, 70),
new SkillRequirement(Skill.MAGIC, 70)
)
); );
} }
} }

View File

@@ -25,71 +25,95 @@
*/ */
package net.runelite.client.plugins.achievementdiary.diaries; package net.runelite.client.plugins.achievementdiary.diaries;
import net.runelite.api.Quest;
import net.runelite.api.Skill; 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.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 class VarrockDiaryRequirement extends GenericDiaryRequirement
{ {
public VarrockDiaryRequirement() public VarrockDiaryRequirement()
{ {
// EASY // 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.", 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.", 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.", 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.", 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.", 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.", add("Steal from the Tea stall in Varrock.",
new Requirement(Skill.THIEVING, 5)); new SkillRequirement(Skill.THIEVING, 5));
// MEDIUM // 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.", add("Cast the teleport to Varrock spell.",
new Requirement(Skill.MAGIC, 25)); new SkillRequirement(Skill.MAGIC, 25));
add("Get a Slayer task from Vannaka.", add("Get a Slayer task from Vannaka.",
new Requirement("Combat", 40)); new CombatLevelRequirement(40));
add("Pick a White tree fruit.", 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.", 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.", add("Complete a lap of the Varrock Agility course.",
new Requirement(Skill.AGILITY, 30)); new SkillRequirement(Skill.AGILITY, 30));
// HARD // HARD
add("Trade furs with the Fancy Dress Seller for a spottier cape and equip it.", 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.", add("Make a Waka Canoe near Edgeville.",
new Requirement(Skill.WOODCUTTING, 57)); new SkillRequirement(Skill.WOODCUTTING, 57));
add("Teleport to Paddewwa.", 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.", add("Chop some yew logs in Varrock and burn them at the top of the Varrock church.",
new Requirement(Skill.WOODCUTTING, 60), new SkillRequirement(Skill.WOODCUTTING, 60),
new Requirement(Skill.FIREMAKING, 60)); new SkillRequirement(Skill.FIREMAKING, 60));
add("Have the Varrock estate agent decorate your house with Fancy Stone.", 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.", add("Collect at least 2 yew roots from the Tree patch in Varrock Palace.",
new Requirement(Skill.WOODCUTTING, 60), new SkillRequirement(Skill.WOODCUTTING, 60),
new Requirement(Skill.FARMING, 68)); new SkillRequirement(Skill.FARMING, 68));
add("Pray at the altar in Varrock palace with Smite active.", 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.", add("Squeeze through the obstacle pipe in Edgeville dungeon.",
new Requirement(Skill.AGILITY, 51)); new SkillRequirement(Skill.AGILITY, 51));
// ELITE // ELITE
add("Create a super combat potion in Varrock west bank.", 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.", 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.", 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.", add("Smith and fletch ten rune darts within Varrock.",
new Requirement(Skill.SMITHING, 89), new SkillRequirement(Skill.SMITHING, 89),
new Requirement(Skill.FLETCHING, 81)); new SkillRequirement(Skill.FLETCHING, 81),
new QuestRequirement(Quest.THE_TOURIST_TRAP));
add("Craft 100 or more earth runes simultaneously.", add("Craft 100 or more earth runes simultaneously.",
new Requirement(Skill.RUNECRAFT, 78)); new SkillRequirement(Skill.RUNECRAFT, 78),
new QuestRequirement(Quest.RUNE_MYSTERIES));
} }
} }

View File

@@ -25,9 +25,12 @@
*/ */
package net.runelite.client.plugins.achievementdiary.diaries; package net.runelite.client.plugins.achievementdiary.diaries;
import net.runelite.api.Quest;
import net.runelite.api.Skill; 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.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 public class WesternDiaryRequirement extends GenericDiaryRequirement
{ {
@@ -35,70 +38,108 @@ public class WesternDiaryRequirement extends GenericDiaryRequirement
{ {
// EASY // EASY
add("Catch a Copper Longtail.", add("Catch a Copper Longtail.",
new Requirement(Skill.HUNTER, 9)); new SkillRequirement(Skill.HUNTER, 9));
add("Complete a novice game of Pest Control.", add("Complete a novice game of Pest Control.",
new Requirement("Combat", 40)); new CombatLevelRequirement(40));
add("Mine some Iron Ore near Piscatoris.", 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.", add("Fletch an Oak shortbow from the Gnome Stronghold.",
new Requirement(Skill.FLETCHING, 20)); new SkillRequirement(Skill.FLETCHING, 20));
// MEDIUM // MEDIUM
add("Take the agility shortcut from the Grand Tree to Otto's Grotto.", 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.", add("Trap a Spined Larupia.",
new Requirement(Skill.HUNTER, 31)); new SkillRequirement(Skill.HUNTER, 31));
add("Fish some Bass on Ape Atoll.", 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.", add("Chop and burn some teak logs on Ape Atoll.",
new Requirement(Skill.WOODCUTTING, 35), new SkillRequirement(Skill.WOODCUTTING, 35),
new Requirement(Skill.FIREMAKING, 35)); new SkillRequirement(Skill.FIREMAKING, 35),
new QuestRequirement(Quest.MONKEY_MADNESS_I));
add("Complete an intermediate game of Pest Control.", 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.", 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.", 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.", 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 // HARD
add("Kill an Elf with a Crystal bow.", add("Kill an Elf with a Crystal bow.",
new Requirement(Skill.RANGED, 70), new SkillRequirement(Skill.RANGED, 70),
new Requirement(Skill.AGILITY, 50)); new SkillRequirement(Skill.AGILITY, 50),
new QuestRequirement(Quest.ROVING_ELVES));
add("Catch and cook a Monkfish in Piscatoris.", add("Catch and cook a Monkfish in Piscatoris.",
new Requirement(Skill.FISHING, 62), new SkillRequirement(Skill.FISHING, 62),
new Requirement(Skill.COOKING, 62)); new SkillRequirement(Skill.COOKING, 62),
new QuestRequirement(Quest.SWAN_SONG));
add("Complete a Veteran game of Pest Control.", add("Complete a Veteran game of Pest Control.",
new Requirement("Combat", 100)); new CombatLevelRequirement(100));
add("Catch a Dashing Kebbit.", 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.", 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.", add("Chop and burn some Mahogany logs on Ape Atoll.",
new Requirement(Skill.WOODCUTTING, 50), new SkillRequirement(Skill.WOODCUTTING, 50),
new Requirement(Skill.FIREMAKING, 50)); new SkillRequirement(Skill.FIREMAKING, 50),
new QuestRequirement(Quest.MONKEY_MADNESS_I));
add("Mine some Adamantite ore in Tirannwn.", 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.", 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.", 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.", 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.", add("Pickpocket a Gnome.",
new Requirement(Skill.THIEVING, 75)); new SkillRequirement(Skill.THIEVING, 75),
new QuestRequirement(Quest.TREE_GNOME_VILLAGE));
// ELITE // ELITE
add("Fletch a Magic Longbow in the Elven lands.", 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).", 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.", 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.", 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.", add("Pickpocket an Elf.",
new Requirement(Skill.THIEVING, 85)); new SkillRequirement(Skill.THIEVING, 85),
new QuestRequirement(Quest.MOURNINGS_ENDS_PART_II));
} }
} }

View File

@@ -25,9 +25,12 @@
*/ */
package net.runelite.client.plugins.achievementdiary.diaries; package net.runelite.client.plugins.achievementdiary.diaries;
import net.runelite.api.Quest;
import net.runelite.api.Skill; import net.runelite.api.Skill;
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement; 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 public class WildernessDiaryRequirement extends GenericDiaryRequirement
{ {
@@ -35,64 +38,74 @@ public class WildernessDiaryRequirement extends GenericDiaryRequirement
{ {
// EASY // EASY
add("Cast Low Alchemy at the Fountain of Rune.", 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.", 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.", 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 // MEDIUM
add("Mine some Mithril ore in the wilderness.", 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.", 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.", add("Enter the Wilderness Godwars Dungeon.",
new Requirement(Skill.AGILITY, 60, new OrRequirement(
new Requirement(Skill.STRENGTH, 60)) new SkillRequirement(Skill.AGILITY, 60),
new SkillRequirement(Skill.STRENGTH, 60)
)
); );
add("Complete a lap of the Wilderness Agility course.", add("Complete a lap of the Wilderness Agility course.",
new Requirement(Skill.AGILITY, 52)); new SkillRequirement(Skill.AGILITY, 52));
add("Charge an Earth Orb.", add("Charge an Earth Orb.",
new Requirement(Skill.MAGIC, 60)); new SkillRequirement(Skill.MAGIC, 60));
add("Kill a Bloodveld in the Wilderness Godwars Dungeon.", 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.", 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 // HARD
add("Cast one of the 3 God spells against another player in the Wilderness.", 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.", add("Charge an Air Orb.",
new Requirement(Skill.MAGIC, 66)); new SkillRequirement(Skill.MAGIC, 66));
add("Catch a Black Salamander in the Wilderness.", 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.", 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.", 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.", 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.", add("Fish some Raw Lava Eel in the Wilderness.",
new Requirement(Skill.FISHING, 53)); new SkillRequirement(Skill.FISHING, 53));
// ELITE // ELITE
add("Teleport to Ghorrock.", 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.", add("Fish and Cook a Dark Crab in the Resource Area.",
new Requirement(Skill.FISHING, 85), new SkillRequirement(Skill.FISHING, 85),
new Requirement(Skill.COOKING, 90)); new SkillRequirement(Skill.COOKING, 90));
add("Smith a rune scimitar from scratch in the Resource Area.", add("Smith a rune scimitar from scratch in the Resource Area.",
new Requirement(Skill.MINING, 85), new SkillRequirement(Skill.MINING, 85),
new Requirement(Skill.SMITHING, 90)); new SkillRequirement(Skill.SMITHING, 90));
add("Steal from the Rogues' chest.", 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.", add("Slay a spiritual mage inside the wilderness Godwars Dungeon.",
new Requirement(Skill.SLAYER, 83), new SkillRequirement(Skill.SLAYER, 83),
new Requirement(Skill.AGILITY, 60, new OrRequirement(
new Requirement(Skill.STRENGTH, 60)) new SkillRequirement(Skill.AGILITY, 60),
new SkillRequirement(Skill.STRENGTH, 60)
)
); );
add("Cut and burn some magic logs in the Resource Area.", add("Cut and burn some magic logs in the Resource Area.",
new Requirement(Skill.WOODCUTTING, 75), new SkillRequirement(Skill.WOODCUTTING, 75),
new Requirement(Skill.FIREMAKING, 75)); new SkillRequirement(Skill.FIREMAKING, 75));
} }
} }