From e0534ebb22f3bf9120c89ba4d2fe86916b68a62a Mon Sep 17 00:00:00 2001 From: Monster Sync Date: Fri, 4 Jan 2019 15:09:45 +1030 Subject: [PATCH] Add Kourend & Kebos diary requirements --- .../main/java/net/runelite/api/Favour.java | 45 ++++++ .../main/java/net/runelite/api/Varbits.java | 9 ++ .../DiaryRequirementsPlugin.java | 10 ++ .../achievementdiary/FavourRequirement.java | 43 ++++++ .../diaries/KourendDiaryRequirement.java | 139 ++++++++++++++++++ 5 files changed, 246 insertions(+) create mode 100644 runelite-api/src/main/java/net/runelite/api/Favour.java create mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/FavourRequirement.java create mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/KourendDiaryRequirement.java diff --git a/runelite-api/src/main/java/net/runelite/api/Favour.java b/runelite-api/src/main/java/net/runelite/api/Favour.java new file mode 100644 index 0000000000..38904257b1 --- /dev/null +++ b/runelite-api/src/main/java/net/runelite/api/Favour.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2019 William + * 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; + +/** + * An enumeration of Kourend house favour the player can earn. + */ +@RequiredArgsConstructor +@Getter +public enum Favour +{ + ARCEUUS("Arceuus", Varbits.KOUREND_FAVOR_ARCEUUS), + HOSIDIUS("Hosidius", Varbits.KOUREND_FAVOR_HOSIDIUS), + LOVAKENGJ("Lovakengj", Varbits.KOUREND_FAVOR_LOVAKENGJ), + PISCARILIUS("Piscarilius", Varbits.KOUREND_FAVOR_PISCARILIUS), + SHAYZIEN("Shayzien", Varbits.KOUREND_FAVOR_SHAYZIEN); + + private final String name; + private final Varbits varbit; +} diff --git a/runelite-api/src/main/java/net/runelite/api/Varbits.java b/runelite-api/src/main/java/net/runelite/api/Varbits.java index 0b3996e335..01be37b49a 100644 --- a/runelite-api/src/main/java/net/runelite/api/Varbits.java +++ b/runelite-api/src/main/java/net/runelite/api/Varbits.java @@ -151,6 +151,15 @@ public enum Varbits DIARY_WILDERNESS_HARD(4468), DIARY_WILDERNESS_ELITE(4469), + /** + * Kourend house favours + */ + KOUREND_FAVOR_ARCEUUS(4896), + KOUREND_FAVOR_HOSIDIUS(4895), + KOUREND_FAVOR_LOVAKENGJ(4898), + KOUREND_FAVOR_PISCARILIUS(4899), + KOUREND_FAVOR_SHAYZIEN(4894), + /** * Equipped weapon type */ diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/DiaryRequirementsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/DiaryRequirementsPlugin.java index 0061589b48..eea28e1ed2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/DiaryRequirementsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/DiaryRequirementsPlugin.java @@ -52,6 +52,7 @@ import net.runelite.client.plugins.achievementdiary.diaries.FaladorDiaryRequirem import net.runelite.client.plugins.achievementdiary.diaries.FremennikDiaryRequirement; import net.runelite.client.plugins.achievementdiary.diaries.KandarinDiaryRequirement; import net.runelite.client.plugins.achievementdiary.diaries.KaramjaDiaryRequirement; +import net.runelite.client.plugins.achievementdiary.diaries.KourendDiaryRequirement; import net.runelite.client.plugins.achievementdiary.diaries.LumbridgeDiaryRequirement; import net.runelite.client.plugins.achievementdiary.diaries.MorytaniaDiaryRequirement; import net.runelite.client.plugins.achievementdiary.diaries.VarrockDiaryRequirement; @@ -240,6 +241,9 @@ public class DiaryRequirementsPlugin extends Plugin case "KARAMJA_AREA_TASKS": diaryRequirementContainer = new KaramjaDiaryRequirement(); break; + case "KOUREND_&_KEBOS_TASKS": + diaryRequirementContainer = new KourendDiaryRequirement(); + break; case "LUMBRIDGE_&_DRAYNOR_TASKS": diaryRequirementContainer = new LumbridgeDiaryRequirement(); break; @@ -320,6 +324,12 @@ public class DiaryRequirementsPlugin extends Plugin { return client.getVar(VarPlayer.QUEST_POINTS) >= ((QuestPointRequirement) r).getQp(); } + if (r instanceof FavourRequirement) + { + FavourRequirement f = (FavourRequirement) r; + int realFavour = client.getVar(f.getHouse().getVarbit()); + return (realFavour / 10) >= f.getPercent(); + } log.warn("Unknown requirement {}", r); return false; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/FavourRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/FavourRequirement.java new file mode 100644 index 0000000000..575faa0e75 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/FavourRequirement.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2019 William + * 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.Favour; + +@RequiredArgsConstructor +@Getter +public class FavourRequirement implements Requirement +{ + private final Favour house; + private final int percent; + + @Override + public String toString() + { + return percent + "% " + house.getName() + " favour"; + } +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/KourendDiaryRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/KourendDiaryRequirement.java new file mode 100644 index 0000000000..b0b2781ecb --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/KourendDiaryRequirement.java @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2019 William + * 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.diaries; + +import net.runelite.api.Favour; +import net.runelite.api.Quest; +import net.runelite.api.Skill; +import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement; +import net.runelite.client.plugins.achievementdiary.SkillRequirement; +import net.runelite.client.plugins.achievementdiary.QuestRequirement; +import net.runelite.client.plugins.achievementdiary.FavourRequirement; + +public class KourendDiaryRequirement extends GenericDiaryRequirement +{ + public KourendDiaryRequirement() + { + //EASY + add("Mine some Iron at the Mount Karuulm mine.", + new SkillRequirement(Skill.MINING, 15)); + add("Steal from a Hosidius Food Stall.", + new SkillRequirement(Skill.THIEVING, 25), + new FavourRequirement(Favour.HOSIDIUS, 15)); + add("Browse the Warrens General Store.", + new QuestRequirement(Quest.THE_QUEEN_OF_THIEVES, true)); + add("Enter your Player Owned House from Hosidius.", + new SkillRequirement(Skill.CONSTRUCTION, 25)); + add("Create a Strength potion in the Lovakengj Pub.", + new SkillRequirement(Skill.HERBLORE, 12)); + add("Fish a Trout from the River Molch.", + new SkillRequirement(Skill.FISHING, 20)); + + //MEDIUM + add("Travel to the Fairy Ring south of Mount Karuulm.", + new QuestRequirement(Quest.FAIRYTALE_II__CURE_A_QUEEN, true)); + add("Use Kharedst's memoirs to teleport to all five cities in Great Kourend.", + new QuestRequirement(Quest.THE_DEPTHS_OF_DESPAIR), + new QuestRequirement(Quest.THE_QUEEN_OF_THIEVES), + new QuestRequirement(Quest.TALE_OF_THE_RIGHTEOUS), + new QuestRequirement(Quest.THE_FORSAKEN_TOWER), + new QuestRequirement(Quest.THE_ASCENT_OF_ARCEUUS)); + add("Mine some Volcanic sulphur.", + new SkillRequirement(Skill.MINING, 42)); + add("Enter the Farming Guild.", + new SkillRequirement(Skill.FARMING, 45)); + add("Switch to the Necromancy Spellbook at Tyss.", + new FavourRequirement(Favour.ARCEUUS, 60)); + add("Repair a Piscarilius crane.", + new SkillRequirement(Skill.CRAFTING, 30)); + //will be removed once jagex fix the spelling mistake made. + add("Repair a Piscarillius crane.", + new SkillRequirement(Skill.CRAFTING, 30)); + add("Deliver some intelligence to Captain Ginea.", + new FavourRequirement(Favour.SHAYZIEN, 40)); + add("Catch a Bluegill on Molch Island.", + new SkillRequirement(Skill.FISHING, 43), + new SkillRequirement(Skill.HUNTER, 35)); + add("Use the boulder leap in the Arceuus essence mine.", + new SkillRequirement(Skill.AGILITY, 49)); + add("Subdue the Wintertodt.", + new SkillRequirement(Skill.FIREMAKING, 50)); + add("Catch a Chinchompa in the Kourend Woodland.", + new SkillRequirement(Skill.HUNTER, 53), + new QuestRequirement(Quest.EAGLES_PEAK)); + add("Chop some Mahogany logs north of the Farming Guild.", + new SkillRequirement(Skill.WOODCUTTING, 50)); + + //HARD + add("Enter the Woodcutting Guild.", + new SkillRequirement(Skill.WOODCUTTING, 60), + new FavourRequirement(Favour.HOSIDIUS, 75)); + add("Smelt an Adamantite bar in The Forsaken Tower.", + new SkillRequirement(Skill.SMITHING, 70)); + add("Kill a Lizardman Shaman in Molch.", + new FavourRequirement(Favour.SHAYZIEN, 100)); + add("Mine some Lovakite.", + new SkillRequirement(Skill.MINING, 65), + new FavourRequirement(Favour.LOVAKENGJ, 30)); + add("Plant some Logavano seeds at the Tithe Farm.", + new SkillRequirement(Skill.FARMING, 74), + new FavourRequirement(Favour.HOSIDIUS, 100)); + add("Teleport to Xeric's Heart using Xeric's Talisman.", + new QuestRequirement(Quest.ARCHITECTURAL_ALLIANCE)); + add("Deliver an artefact to Captain Khaled.", + new SkillRequirement(Skill.THIEVING, 49), + new FavourRequirement(Favour.PISCARILIUS, 75)); + add("Kill a Wyrm in the Karuulm Slayer Dungeon.", + new SkillRequirement(Skill.SLAYER, 62)); + add("Cast Monster Examine on a Troll south of Mount Quidamortem.", + new SkillRequirement(Skill.MAGIC, 66), + new QuestRequirement(Quest.DREAM_MENTOR)); + + //ELITE + add("Craft one or more Blood runes.", + new SkillRequirement(Skill.RUNECRAFT, 77), + new SkillRequirement(Skill.MINING, 38), + new SkillRequirement(Skill.CRAFTING, 38), + new FavourRequirement(Favour.ARCEUUS, 100)); + add("Chop some Redwood logs.", + new SkillRequirement(Skill.WOODCUTTING, 90), + new FavourRequirement(Favour.HOSIDIUS, 75)); + add("Catch an Anglerfish and cook it whilst in Great Kourend.", + new SkillRequirement(Skill.FISHING, 82), + new SkillRequirement(Skill.COOKING, 84), + new FavourRequirement(Favour.PISCARILIUS, 100)); + add("Kill a Hydra in the Karuulm Slayer Dungeon.", + new SkillRequirement(Skill.SLAYER, 95)); + add("Create an Ape Atoll teleport tablet.", + new SkillRequirement(Skill.MAGIC, 90), + new SkillRequirement(Skill.MINING, 38), + new SkillRequirement(Skill.CRAFTING, 38), + new QuestRequirement(Quest.MONKEY_MADNESS_I), + new FavourRequirement(Favour.ARCEUUS, 100)); + add("Create your own Battlestaff from scratch within the Farming Guild.", + new SkillRequirement(Skill.FARMING, 85), + new SkillRequirement(Skill.FLETCHING, 40)); + } +}