Merge pull request #2251 from marshdevs/2123-diary-level-requirements
Add level requirements to diaries
This commit is contained in:
@@ -106,6 +106,7 @@ public class WidgetID
|
||||
public static final int DESTROY_ITEM_GROUP_ID = 584;
|
||||
public static final int VARROCK_MUSEUM_QUIZ_GROUP_ID = 533;
|
||||
public static final int KILL_LOGS_GROUP_ID = 549;
|
||||
public static final int DIARY_QUEST_GROUP_ID = 275;
|
||||
|
||||
static class WorldMap
|
||||
{
|
||||
@@ -549,6 +550,12 @@ public class WidgetID
|
||||
static final int BARROWS_REWARD_INVENTORY = 3;
|
||||
}
|
||||
|
||||
static class Diary
|
||||
{
|
||||
static final int DIARY_TITLE = 2;
|
||||
static final int DIARY_TEXT = 1;
|
||||
}
|
||||
|
||||
static class MTA
|
||||
{
|
||||
static final int BONUS_COMPONENT = 7;
|
||||
|
||||
@@ -73,6 +73,9 @@ public enum WidgetInfo
|
||||
|
||||
DIARY_LIST(WidgetID.DIARY_GROUP_ID, 4),
|
||||
|
||||
DIARY_QUEST_WIDGET_TITLE(WidgetID.DIARY_QUEST_GROUP_ID, WidgetID.Diary.DIARY_TITLE),
|
||||
DIARY_QUEST_WIDGET_TEXT(WidgetID.DIARY_QUEST_GROUP_ID, WidgetID.Diary.DIARY_TEXT),
|
||||
|
||||
PEST_CONTROL_PURPLE_SHIELD(WidgetID.PEST_CONTROL_GROUP_ID, WidgetID.PestControl.PURPLE_SHIELD),
|
||||
PEST_CONTROL_BLUE_SHIELD(WidgetID.PEST_CONTROL_GROUP_ID, WidgetID.PestControl.BLUE_SHIELD),
|
||||
PEST_CONTROL_YELLOW_SHIELD(WidgetID.PEST_CONTROL_GROUP_ID, WidgetID.PestControl.YELLOW_SHIELD),
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* 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 lombok.Getter;
|
||||
|
||||
@Getter
|
||||
class DiaryRequirement
|
||||
{
|
||||
private final String task;
|
||||
private final Requirement[] skillRequirements;
|
||||
|
||||
DiaryRequirement(String task, Requirement[] skillRequirements)
|
||||
{
|
||||
this.task = task;
|
||||
this.skillRequirements = skillRequirements;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,272 @@
|
||||
/*
|
||||
* 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 com.google.common.eventbus.Subscribe;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import javax.inject.Inject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.events.WidgetLoaded;
|
||||
import net.runelite.api.widgets.Widget;
|
||||
import net.runelite.api.widgets.WidgetID;
|
||||
import net.runelite.api.widgets.WidgetInfo;
|
||||
import net.runelite.client.plugins.Plugin;
|
||||
import net.runelite.client.plugins.PluginDescriptor;
|
||||
import net.runelite.client.plugins.achievementdiary.diaries.ArdougneDiaryRequirement;
|
||||
import net.runelite.client.plugins.achievementdiary.diaries.DesertDiaryRequirement;
|
||||
import net.runelite.client.plugins.achievementdiary.diaries.FaladorDiaryRequirement;
|
||||
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.LumbridgeDiaryRequirement;
|
||||
import net.runelite.client.plugins.achievementdiary.diaries.MorytaniaDiaryRequirement;
|
||||
import net.runelite.client.plugins.achievementdiary.diaries.VarrockDiaryRequirement;
|
||||
import net.runelite.client.plugins.achievementdiary.diaries.WesternDiaryRequirement;
|
||||
import net.runelite.client.plugins.achievementdiary.diaries.WildernessDiaryRequirement;
|
||||
import net.runelite.client.util.Text;
|
||||
|
||||
@Slf4j
|
||||
@PluginDescriptor(
|
||||
name = "Diary Requirements",
|
||||
description = "Display level requirements in Achievement Diary interface",
|
||||
tags = {"achievements", "tasks"}
|
||||
)
|
||||
public class DiaryRequirementsPlugin extends Plugin
|
||||
{
|
||||
@Inject
|
||||
private Client client;
|
||||
|
||||
@Subscribe
|
||||
public void onWidgetLoaded(final WidgetLoaded event)
|
||||
{
|
||||
if (event.getGroupId() == WidgetID.DIARY_QUEST_GROUP_ID)
|
||||
{
|
||||
String widgetTitle = Text.removeTags(
|
||||
client.getWidget(
|
||||
WidgetInfo.DIARY_QUEST_WIDGET_TITLE)
|
||||
.getText())
|
||||
.replace(' ', '_')
|
||||
.toUpperCase();
|
||||
if (widgetTitle.startsWith("ACHIEVEMENT_DIARY"))
|
||||
{
|
||||
showDiaryRequirements();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void showDiaryRequirements()
|
||||
{
|
||||
Widget widget = client.getWidget(WidgetInfo.DIARY_QUEST_WIDGET_TEXT);
|
||||
Widget[] children = widget.getStaticChildren();
|
||||
|
||||
Widget titleWidget = children[0];
|
||||
if (titleWidget == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
List<String> originalAchievements = getOriginalAchievements(children);
|
||||
|
||||
// new requirements starts out as a copy of the original
|
||||
List<String> newRequirements = new ArrayList<>(originalAchievements);
|
||||
|
||||
GenericDiaryRequirement requirements = getRequirementsForTitle(titleWidget.getText());
|
||||
if (requirements == null)
|
||||
{
|
||||
log.debug("Unknown achievement diary {}", titleWidget.getText());
|
||||
return;
|
||||
}
|
||||
|
||||
Map<String, String> skillRequirements = buildRequirements(requirements.getRequirements());
|
||||
if (skillRequirements == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int offset = 0;
|
||||
String taskBuffer = "";
|
||||
for (int i = 0; i < originalAchievements.size(); i++)
|
||||
{
|
||||
String rowText = Text.removeTags(originalAchievements.get(i));
|
||||
if (skillRequirements.get(taskBuffer + " " + rowText) != null)
|
||||
{
|
||||
taskBuffer = taskBuffer + " " + rowText;
|
||||
}
|
||||
else
|
||||
{
|
||||
taskBuffer = rowText;
|
||||
}
|
||||
|
||||
if (skillRequirements.get(taskBuffer) != null)
|
||||
{
|
||||
String levelRequirement = skillRequirements.get(taskBuffer);
|
||||
String task = originalAchievements.get(i);
|
||||
if (Text.removeTags(task).length() + Text.removeTags(levelRequirement).length() <= 50)
|
||||
{
|
||||
newRequirements.set(i + offset, task + levelRequirement);
|
||||
}
|
||||
else
|
||||
{
|
||||
offset++;
|
||||
if (task.startsWith("<str>"))
|
||||
{
|
||||
newRequirements.add(i + offset, "<str>" + levelRequirement);
|
||||
}
|
||||
else
|
||||
{
|
||||
newRequirements.add(i + offset, levelRequirement);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < newRequirements.size() && i < children.length; i++)
|
||||
{
|
||||
Widget achievementWidget = children[i];
|
||||
achievementWidget.setText(newRequirements.get(i));
|
||||
}
|
||||
}
|
||||
|
||||
private List<String> getOriginalAchievements(Widget[] children)
|
||||
{
|
||||
List<String> preloadedRequirements = new ArrayList<>(children.length);
|
||||
for (Widget requirementWidget : children)
|
||||
{
|
||||
preloadedRequirements.add(requirementWidget.getText());
|
||||
}
|
||||
return preloadedRequirements;
|
||||
}
|
||||
|
||||
private GenericDiaryRequirement getRequirementsForTitle(String title)
|
||||
{
|
||||
String diaryName = Text.removeTags(title
|
||||
.replaceAll(" ", "_")
|
||||
.toUpperCase());
|
||||
|
||||
GenericDiaryRequirement diaryRequirementContainer;
|
||||
switch (diaryName)
|
||||
{
|
||||
case "ARDOUGNE_AREA_TASKS":
|
||||
diaryRequirementContainer = new ArdougneDiaryRequirement();
|
||||
break;
|
||||
case "DESERT_TASKS":
|
||||
diaryRequirementContainer = new DesertDiaryRequirement();
|
||||
break;
|
||||
case "FALADOR_AREA_TASKS":
|
||||
diaryRequirementContainer = new FaladorDiaryRequirement();
|
||||
break;
|
||||
case "FREMENNIK_TASKS":
|
||||
diaryRequirementContainer = new FremennikDiaryRequirement();
|
||||
break;
|
||||
case "KANDARIN_TASKS":
|
||||
diaryRequirementContainer = new KandarinDiaryRequirement();
|
||||
break;
|
||||
case "KARAMJA_AREA_TASKS":
|
||||
diaryRequirementContainer = new KaramjaDiaryRequirement();
|
||||
break;
|
||||
case "LUMBRIDGE_&_DRAYNOR_TASKS":
|
||||
diaryRequirementContainer = new LumbridgeDiaryRequirement();
|
||||
break;
|
||||
case "MORYTANIA_TASKS":
|
||||
diaryRequirementContainer = new MorytaniaDiaryRequirement();
|
||||
break;
|
||||
case "VARROCK_TASKS":
|
||||
diaryRequirementContainer = new VarrockDiaryRequirement();
|
||||
break;
|
||||
case "WESTERN_AREA_TASKS":
|
||||
diaryRequirementContainer = new WesternDiaryRequirement();
|
||||
break;
|
||||
case "WILDERNESS_AREA_TASKS":
|
||||
diaryRequirementContainer = new WildernessDiaryRequirement();
|
||||
break;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
return diaryRequirementContainer;
|
||||
}
|
||||
|
||||
// returns a map of task -> level requirements
|
||||
private Map<String, String> buildRequirements(Collection<DiaryRequirement> requirements)
|
||||
{
|
||||
Map<String, String> lineIndexRequirementMap = new HashMap<>();
|
||||
for (DiaryRequirement req : requirements)
|
||||
{
|
||||
String reqTask = req.getTask();
|
||||
List<RequirementStringBuilder> requirementBuilders = new ArrayList<>();
|
||||
|
||||
for (Requirement i : req.getSkillRequirements())
|
||||
{
|
||||
RequirementStringBuilder requirementStringBuilder = new RequirementStringBuilder(i);
|
||||
|
||||
int realSkillLevel = client.getRealSkillLevel(i.getSkill());
|
||||
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 ));
|
||||
}
|
||||
return lineIndexRequirementMap;
|
||||
}
|
||||
|
||||
private String combine(List<RequirementStringBuilder> list)
|
||||
{
|
||||
StringBuilder requirementsString = new StringBuilder();
|
||||
requirementsString.append("<col=000000> (");
|
||||
for (RequirementStringBuilder req : list)
|
||||
{
|
||||
requirementsString.append("<col=000080>")
|
||||
.append(req.getRequirementString())
|
||||
.append(", ");
|
||||
}
|
||||
requirementsString.deleteCharAt(requirementsString.length() - 1);
|
||||
requirementsString.deleteCharAt(requirementsString.length() - 2);
|
||||
requirementsString.append("<col=000000>)");
|
||||
|
||||
return requirementsString.toString();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* 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.util.HashSet;
|
||||
import java.util.Set;
|
||||
import lombok.Getter;
|
||||
|
||||
public abstract class GenericDiaryRequirement
|
||||
{
|
||||
@Getter
|
||||
private Set<DiaryRequirement> requirements = new HashSet<>();
|
||||
|
||||
protected void add(String task, Requirement... requirements)
|
||||
{
|
||||
DiaryRequirement diaryRequirement = new DiaryRequirement(task, requirements);
|
||||
this.requirements.add(diaryRequirement);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* 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 lombok.Getter;
|
||||
import net.runelite.api.Skill;
|
||||
|
||||
@Getter
|
||||
public class Requirement
|
||||
{
|
||||
private final Skill skill;
|
||||
private final int levelRequirement;
|
||||
private final Requirement[] altRequirements;
|
||||
|
||||
public Requirement(Skill skill, int levelRequirement, Requirement... altRequirements)
|
||||
{
|
||||
this.skill = skill;
|
||||
this.levelRequirement = levelRequirement;
|
||||
this.altRequirements = altRequirements;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
/*
|
||||
* 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.util.List;
|
||||
import lombok.Getter;
|
||||
import net.runelite.api.Skill;
|
||||
|
||||
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.getName());
|
||||
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 = "<col=800000>" + this.requirementString + "</col>";
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
/*
|
||||
* 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.diaries;
|
||||
|
||||
import net.runelite.api.Skill;
|
||||
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement;
|
||||
import net.runelite.client.plugins.achievementdiary.Requirement;
|
||||
|
||||
public class ArdougneDiaryRequirement extends GenericDiaryRequirement
|
||||
{
|
||||
public ArdougneDiaryRequirement()
|
||||
{
|
||||
// EASY
|
||||
add("Steal a cake from the Ardougne market stalls.",
|
||||
new Requirement(Skill.THIEVING, 5));
|
||||
|
||||
// MEDIUM
|
||||
add("Grapple over Yanille's south wall.",
|
||||
new Requirement(Skill.AGILITY, 39),
|
||||
new Requirement(Skill.STRENGTH, 38),
|
||||
new Requirement(Skill.RANGED, 21));
|
||||
add("Harvest some strawberries from the Ardougne farming patch.",
|
||||
new Requirement(Skill.FARMING, 31));
|
||||
add("Cast the Ardougne Teleport spell.",
|
||||
new Requirement(Skill.MAGIC, 51));
|
||||
add("Travel to Castlewars by Hot Air Balloon.",
|
||||
new Requirement(Skill.FIREMAKING, 50));
|
||||
add("Claim buckets of sand from Bert in Yanille.",
|
||||
new Requirement(Skill.CRAFTING, 49));
|
||||
add("Pickpocket the master farmer north of Ardougne.",
|
||||
new Requirement(Skill.THIEVING, 38));
|
||||
add("Equip Iban's upgraded staff or upgrade an Iban staff.",
|
||||
new Requirement(Skill.MAGIC, 50),
|
||||
new Requirement(Skill.ATTACK, 50));
|
||||
|
||||
// HARD
|
||||
add("Enter the Magic Guild.",
|
||||
new Requirement(Skill.MAGIC, 66));
|
||||
add("Attempt to steal from King Lathas' chest.",
|
||||
new Requirement(Skill.THIEVING, 72));
|
||||
add("Teleport to the Watchtower.",
|
||||
new Requirement(Skill.ATTACK, 58));
|
||||
add("Catch a Red Salamander.",
|
||||
new Requirement(Skill.HUNTER, 59));
|
||||
add("Check the health of a Palm tree near tree gnome village.",
|
||||
new Requirement(Skill.FARMING, 68));
|
||||
add("Pick some Poison Ivy berries from the patch south of Ardougne.",
|
||||
new Requirement(Skill.FARMING, 70));
|
||||
add("Smith a Mithril platebody near Ardougne.",
|
||||
new Requirement(Skill.SMITHING, 68));
|
||||
add("Enter your POH from Yanille.",
|
||||
new Requirement(Skill.CONSTRUCTION, 50));
|
||||
add("Smith a Dragon sq shield in West Ardougne.",
|
||||
new Requirement(Skill.SMITHING, 60));
|
||||
add("Craft some Death runes.",
|
||||
new Requirement(Skill.RUNECRAFT, 65));
|
||||
|
||||
// ELITE
|
||||
add("Catch a Manta ray in the Fishing Trawler and cook it in Port Khazard.",
|
||||
|
||||
new Requirement(Skill.FISHING, 81),
|
||||
new Requirement(Skill.COOKING, 91)
|
||||
);
|
||||
add("Attempt to picklock the door to the basement of Yanille Agility Dungeon.",
|
||||
new Requirement(Skill.THIEVING, 82));
|
||||
add("Pickpocket a Hero.",
|
||||
new Requirement(Skill.THIEVING, 80));
|
||||
add("Make a rune crossbow yourself from scratch within Witchaven or Yanille.",
|
||||
new Requirement(Skill.CRAFTING, 10),
|
||||
new Requirement(Skill.SMITHING, 91),
|
||||
new Requirement(Skill.FLETCHING, 69));
|
||||
add("Pick some Torstol from the patch north of Ardougne.",
|
||||
new Requirement(Skill.FARMING, 85));
|
||||
add("Complete a lap of Ardougne's rooftop agility course.",
|
||||
new Requirement(Skill.AGILITY, 90));
|
||||
add("Cast Ice Barrage on another player within Castlewars.",
|
||||
new Requirement(Skill.MAGIC, 94));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
/*
|
||||
* 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.diaries;
|
||||
|
||||
import net.runelite.api.Skill;
|
||||
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement;
|
||||
import net.runelite.client.plugins.achievementdiary.Requirement;
|
||||
|
||||
public class DesertDiaryRequirement extends GenericDiaryRequirement
|
||||
{
|
||||
public DesertDiaryRequirement()
|
||||
{
|
||||
// EASY
|
||||
add("Catch a Golden Warbler.",
|
||||
new Requirement(Skill.HUNTER, 5));
|
||||
add("Mine 5 clay in the north-eastern desert.",
|
||||
new Requirement(Skill.MINING, 5));
|
||||
add("Open the Sarcophagus in the first room of Pyramid Plunder.",
|
||||
new Requirement(Skill.THIEVING, 21));
|
||||
|
||||
// MEDIUM
|
||||
add("Climb to the summit of the Agility Pyramid.",
|
||||
new Requirement(Skill.AGILITY, 30));
|
||||
add("Slay a desert lizard.",
|
||||
new Requirement(Skill.SLAYER, 22));
|
||||
add("Catch an Orange Salamander.",
|
||||
new Requirement(Skill.HUNTER, 47));
|
||||
add("Steal a feather from the Desert Phoenix.",
|
||||
new Requirement(Skill.THIEVING, 25));
|
||||
add("Create a combat potion in the desert.",
|
||||
new Requirement(Skill.HERBLORE, 36));
|
||||
add("Teleport to Pollnivneach with a redirected teleport to house tablet.",
|
||||
new Requirement(Skill.CONSTRUCTION, 20));
|
||||
add("Chop some Teak logs near Uzer.",
|
||||
new Requirement(Skill.WOODCUTTING, 35));
|
||||
|
||||
// HARD
|
||||
add("Knock out and pickpocket a Menaphite Thug.",
|
||||
new Requirement(Skill.THIEVING, 65));
|
||||
add("Mine some Granite.",
|
||||
new Requirement(Skill.MINING, 45));
|
||||
add("Refill your waterskins in the Desert using Lunar magic.",
|
||||
new Requirement(Skill.MAGIC, 68));
|
||||
add("Complete a lap of the Pollnivneach agility course.",
|
||||
new Requirement(Skill.AGILITY, 70));
|
||||
add("Slay a Dust Devil with a Slayer helmet equipped.",
|
||||
new Requirement(Skill.SLAYER, 65),
|
||||
new Requirement(Skill.DEFENCE, 10),
|
||||
new Requirement(Skill.CRAFTING, 55));
|
||||
add("Defeat a Locust Rider with Keris.",
|
||||
new Requirement(Skill.ATTACK, 50));
|
||||
add("Burn some yew logs on the Nardah Mayor's balcony.",
|
||||
new Requirement(Skill.FIREMAKING, 60));
|
||||
add("Create a Mithril Platebody in Nardah.",
|
||||
new Requirement(Skill.SMITHING, 68));
|
||||
|
||||
// ELITE
|
||||
add("Bake a wild pie at the Nardah Clay Oven.",
|
||||
new Requirement(Skill.COOKING, 85));
|
||||
add("Cast Ice Barrage against a foe in the Desert.",
|
||||
new Requirement(Skill.MAGIC, 94));
|
||||
add("Fletch some Dragon darts at the Bedabin Camp.",
|
||||
new Requirement(Skill.FLETCHING, 95));
|
||||
add("Speak to the KQ head in your POH.",
|
||||
new Requirement(Skill.CONSTRUCTION, 78));
|
||||
add("Steal from the Grand Gold Chest in the final room of Pyramid Plunder.",
|
||||
new Requirement(Skill.THIEVING, 91));
|
||||
add("Restore at least 85 Prayer points when praying at the Altar in Sophanem.",
|
||||
new Requirement(Skill.PRAYER, 85));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
/*
|
||||
* 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.diaries;
|
||||
|
||||
import net.runelite.api.Skill;
|
||||
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement;
|
||||
import net.runelite.client.plugins.achievementdiary.Requirement;
|
||||
|
||||
public class FaladorDiaryRequirement extends GenericDiaryRequirement
|
||||
{
|
||||
public FaladorDiaryRequirement()
|
||||
{
|
||||
// EASY
|
||||
add("Find out what your family crest is from Sir Renitee.",
|
||||
new Requirement(Skill.CONSTRUCTION, 16));
|
||||
add("Climb over the western Falador wall.",
|
||||
new Requirement(Skill.AGILITY, 5));
|
||||
add("Smith some Blurite Limbs on Doric's Anvil.",
|
||||
new Requirement(Skill.MINING, 10),
|
||||
new Requirement(Skill.SMITHING, 13));
|
||||
|
||||
// MEDIUM
|
||||
add("Light a Bullseye lantern at the Chemist's in Rimmington.",
|
||||
new Requirement(Skill.FIREMAKING, 49));
|
||||
add("Telegrab some Wine of Zamorak at the Chaos Temple by the Wilderness.",
|
||||
new Requirement(Skill.MAGIC, 33));
|
||||
add("Place a Scarecrow in the Falador farming patch.",
|
||||
new Requirement(Skill.FARMING, 23));
|
||||
add("Kill a Mogre at Mudskipper Point.",
|
||||
new Requirement(Skill.SLAYER, 32));
|
||||
add("Grapple up and then jump off the north Falador wall.",
|
||||
new Requirement(Skill.AGILITY, 11),
|
||||
new Requirement(Skill.STRENGTH, 37),
|
||||
new Requirement(Skill.RANGED, 19));
|
||||
add("Pickpocket a Falador guard.",
|
||||
new Requirement(Skill.THIEVING, 40));
|
||||
add("Pray at the Altar of Guthix in Taverley whilst wearing full Initiate.",
|
||||
new Requirement(Skill.PRAYER, 10),
|
||||
new Requirement(Skill.DEFENCE, 20));
|
||||
add("Mine some Gold ore at the Crafting Guild.",
|
||||
new Requirement(Skill.CRAFTING, 40),
|
||||
new Requirement(Skill.MINING, 40));
|
||||
add("Squeeze through the crevice in the Dwarven mines.",
|
||||
new Requirement(Skill.AGILITY, 42));
|
||||
add("Chop and burn some Willow logs in Taverley",
|
||||
new Requirement(Skill.WOODCUTTING, 30),
|
||||
new Requirement(Skill.FIREMAKING, 30));
|
||||
add("Craft a fruit basket on the Falador Farm loom.",
|
||||
new Requirement(Skill.CRAFTING, 36));
|
||||
add("Teleport to Falador.",
|
||||
new Requirement(Skill.MAGIC, 37));
|
||||
|
||||
// HARD
|
||||
add("Craft 140 Mind runes simultaneously.",
|
||||
new Requirement(Skill.RUNECRAFT, 56));
|
||||
add("Change your family crest to the Saradomin symbol.",
|
||||
new Requirement(Skill.PRAYER, 70));
|
||||
add("Kill a Skeletal Wyvern in the Asgarnia Ice Dungeon.",
|
||||
new Requirement(Skill.SLAYER, 72));
|
||||
add("Complete a lap of the Falador rooftop agility course.",
|
||||
new Requirement(Skill.AGILITY, 50));
|
||||
add("Enter the mining guild wearing full prospector.",
|
||||
new Requirement(Skill.MINING, 60));
|
||||
add("Crack a wall safe within Rogues Den.",
|
||||
new Requirement(Skill.THIEVING, 50));
|
||||
add("Recharge your prayer in the Port Sarim church while wearing full Proselyte.",
|
||||
new Requirement(Skill.DEFENCE, 30));
|
||||
add("Equip a dwarven helmet within the dwarven mines.",
|
||||
new Requirement(Skill.DEFENCE, 50));
|
||||
|
||||
// ELITE
|
||||
add("Craft 252 Air Runes simultaneously.",
|
||||
new Requirement(Skill.RUNECRAFT, 88));
|
||||
add("Find at least 3 magic roots at once when digging up your magic tree in Falador.",
|
||||
new Requirement(Skill.FARMING, 91),
|
||||
new Requirement(Skill.WOODCUTTING, 75));
|
||||
add("Jump over the strange floor in Taverley dungeon.",
|
||||
new Requirement(Skill.AGILITY, 80));
|
||||
add("Mix a Saradomin brew in Falador east bank.",
|
||||
new Requirement(Skill.HERBLORE, 81));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
/*
|
||||
* 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.diaries;
|
||||
|
||||
import net.runelite.api.Skill;
|
||||
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement;
|
||||
import net.runelite.client.plugins.achievementdiary.Requirement;
|
||||
|
||||
public class FremennikDiaryRequirement extends GenericDiaryRequirement
|
||||
{
|
||||
public FremennikDiaryRequirement()
|
||||
{
|
||||
// EASY
|
||||
add("Catch a Cerulean twitch.",
|
||||
new Requirement(Skill.HUNTER, 11));
|
||||
add("Craft a tiara from scratch in Rellekka.",
|
||||
new Requirement(Skill.CRAFTING, 23),
|
||||
new Requirement(Skill.MINING, 20),
|
||||
new Requirement(Skill.SMITHING, 20));
|
||||
add("Steal from the Keldagrim crafting or baker's stall.",
|
||||
new Requirement(Skill.THIEVING, 5));
|
||||
add("Chop and burn some oak logs in the Fremennik Province.",
|
||||
new Requirement(Skill.WOODCUTTING, 15),
|
||||
new Requirement(Skill.FIREMAKING, 15));
|
||||
|
||||
// MEDIUM
|
||||
add("Slay a Brine rat.",
|
||||
new Requirement(Skill.SLAYER, 47));
|
||||
add("Mine some coal in Rellekka.",
|
||||
new Requirement(Skill.MINING, 30));
|
||||
add("Steal from the Rellekka Fish stalls.",
|
||||
new Requirement(Skill.THIEVING, 42));
|
||||
add("Catch a Snowy knight.",
|
||||
new Requirement(Skill.HUNTER, 35));
|
||||
add("Pick up your Pet Rock from your POH Menagerie.",
|
||||
new Requirement(Skill.CONSTRUCTION, 37));
|
||||
add("Mine some gold at the Arzinian mine.",
|
||||
new Requirement(Skill.MINING, 40));
|
||||
|
||||
// HARD
|
||||
add("Teleport to Trollheim.",
|
||||
new Requirement(Skill.MAGIC, 61));
|
||||
add("Catch a Sabre-toothed Kyatt.",
|
||||
new Requirement(Skill.HUNTER, 55));
|
||||
add("Mix a super defence potion in the Fremennik province.",
|
||||
new Requirement(Skill.HERBLORE, 66));
|
||||
add("Steal from the Keldagrim Gem Stall.",
|
||||
new Requirement(Skill.THIEVING, 75));
|
||||
add("Craft a Fremennik shield on Neitiznot.",
|
||||
new Requirement(Skill.WOODCUTTING, 56));
|
||||
add("Mine 5 Adamantite ores on Jatizso.",
|
||||
new Requirement(Skill.MINING, 70));
|
||||
add("Teleport to Waterbirth Island.",
|
||||
new Requirement(Skill.MAGIC, 72));
|
||||
add("Obtain the Blast Furnace Foreman's permission to use the Blast Furnace for free.",
|
||||
new Requirement(Skill.SMITHING, 60));
|
||||
|
||||
// ELITE
|
||||
add("Craft 56 astral runes at once.",
|
||||
new Requirement(Skill.RUNECRAFT, 82));
|
||||
add("Create a dragonstone amulet in the Neitiznot furnace.",
|
||||
new Requirement(Skill.CRAFTING, 80));
|
||||
add("Complete a lap of the Rellekka agility course.",
|
||||
new Requirement(Skill.AGILITY, 80));
|
||||
add("Kill each of the Godwars generals.",
|
||||
new Requirement(Skill.AGILITY, 70),
|
||||
new Requirement(Skill.STRENGTH, 70),
|
||||
new Requirement(Skill.HITPOINTS, 70),
|
||||
new Requirement(Skill.RANGED, 70));
|
||||
add("Slay a Spiritual mage within the Godwars Dungeon.",
|
||||
new Requirement(Skill.SLAYER, 83));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,112 @@
|
||||
/*
|
||||
* 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.diaries;
|
||||
|
||||
import net.runelite.api.Skill;
|
||||
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement;
|
||||
import net.runelite.client.plugins.achievementdiary.Requirement;
|
||||
|
||||
public class KandarinDiaryRequirement extends GenericDiaryRequirement
|
||||
{
|
||||
public KandarinDiaryRequirement()
|
||||
{
|
||||
// EASY
|
||||
add("Catch a Mackerel at Catherby.",
|
||||
new Requirement(Skill.FISHING, 16));
|
||||
add("Plant some Jute seeds in the patch north of McGrubor's Wood.",
|
||||
new Requirement(Skill.FARMING, 13));
|
||||
add("Cross the Coal truck log shortcut.",
|
||||
new Requirement(Skill.AGILITY, 20));
|
||||
|
||||
// MEDIUM
|
||||
add("Complete a lap of the Barbarian agility course.",
|
||||
new Requirement(Skill.AGILITY, 35));
|
||||
add("Create a Super Antipoison potion from scratch in the Seers/Catherby Area.",
|
||||
new Requirement(Skill.HERBLORE, 48));
|
||||
add("Enter the Ranging guild.",
|
||||
new Requirement(Skill.RANGED, 40));
|
||||
add("Use the grapple shortcut to get from the water obelisk to Catherby shore.",
|
||||
new Requirement(Skill.AGILITY, 36),
|
||||
new Requirement(Skill.STRENGTH, 22),
|
||||
new Requirement(Skill.RANGED, 39));
|
||||
add("Catch and cook a Bass in Catherby.",
|
||||
new Requirement(Skill.FISHING, 46),
|
||||
new Requirement(Skill.COOKING, 43));
|
||||
add("Teleport to Camelot.",
|
||||
new Requirement(Skill.MAGIC, 45));
|
||||
add("String a Maple shortbow in Seers' Village bank.",
|
||||
new Requirement(Skill.FLETCHING, 50));
|
||||
add("Pick some Limpwurt root from the farming patch in Catherby.",
|
||||
new Requirement(Skill.FARMING, 26));
|
||||
add("Steal from the chest in Hemenster.",
|
||||
new Requirement(Skill.THIEVING, 47));
|
||||
add("Mine some coal near the coal trucks.",
|
||||
new Requirement(Skill.MINING, 53));
|
||||
|
||||
// HARD
|
||||
add("Catch a Leaping Sturgeon.",
|
||||
new Requirement(Skill.FISHING, 70),
|
||||
new Requirement(Skill.AGILITY, 45),
|
||||
new Requirement(Skill.STRENGTH, 45));
|
||||
add("Complete a lap of the Seers' Village agility course.",
|
||||
new Requirement(Skill.AGILITY, 60));
|
||||
add("Create a Yew Longbow from scratch around Seers' Village.",
|
||||
new Requirement(Skill.WOODCUTTING, 60),
|
||||
new Requirement(Skill.FLETCHING, 70),
|
||||
new Requirement(Skill.CRAFTING, 10));
|
||||
add("Enter the Seers' Village courthouse with piety turned on.",
|
||||
new Requirement(Skill.PRAYER, 70),
|
||||
new Requirement(Skill.DEFENCE, 70));
|
||||
add("Charge a Water Orb.",
|
||||
new Requirement(Skill.MAGIC, 56));
|
||||
add("Burn some Maple logs with a bow in Seers' Village.",
|
||||
new Requirement(Skill.FIREMAKING, 65));
|
||||
add("Purchase and equip a granite body from Barbarian Assault.",
|
||||
new Requirement(Skill.STRENGTH, 50),
|
||||
new Requirement(Skill.DEFENCE, 50));
|
||||
add("Have the Seers' estate agent decorate your house with Fancy Stone.",
|
||||
new Requirement(Skill.CONSTRUCTION, 50));
|
||||
add("Smith an Adamant spear at Otto's Grotto.",
|
||||
new Requirement(Skill.SMITHING, 75));
|
||||
|
||||
// ELITE
|
||||
add("Pick some Dwarf weed from the herb patch at Catherby.",
|
||||
new Requirement(Skill.FARMING, 79));
|
||||
add("Fish and Cook 5 Sharks in Catherby using the Cooking gauntlets.",
|
||||
new Requirement(Skill.FISHING, 76),
|
||||
new Requirement(Skill.COOKING, 80));
|
||||
add("Mix a Stamina Mix on top of the Seers' Village bank.",
|
||||
new Requirement(Skill.HERBLORE, 86),
|
||||
new Requirement(Skill.AGILITY, 60));
|
||||
add("Smith a Rune Hasta at Otto's Grotto.",
|
||||
new Requirement(Skill.SMITHING, 90));
|
||||
add("Construct a Pyre ship from Magic Logs.(Requires Chewed Bones.)",
|
||||
new Requirement(Skill.FIREMAKING, 85),
|
||||
new Requirement(Skill.CRAFTING, 85));
|
||||
add("Teleport to Catherby.",
|
||||
new Requirement(Skill.MAGIC, 87));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
/*
|
||||
* 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.diaries;
|
||||
|
||||
import net.runelite.api.Skill;
|
||||
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement;
|
||||
import net.runelite.client.plugins.achievementdiary.Requirement;
|
||||
|
||||
public class KaramjaDiaryRequirement extends GenericDiaryRequirement
|
||||
{
|
||||
public KaramjaDiaryRequirement()
|
||||
{
|
||||
// EASY
|
||||
add("Use the rope swing to travel to the small island north-west of Karamja, where the " +
|
||||
"moss giants are.",
|
||||
new Requirement(Skill.AGILITY, 10));
|
||||
add("Mine some gold from the rocks on the north-west peninsula of Karamja.",
|
||||
new Requirement(Skill.MINING, 40));
|
||||
add("Explore Cairn Island to the west of Karamja.",
|
||||
new Requirement(Skill.AGILITY, 15));
|
||||
|
||||
// MEDIUM
|
||||
add("Claim a ticket from the Agility Arena in Brimhaven.",
|
||||
new Requirement(Skill.AGILITY, 30));
|
||||
add("Earn 100% favour in the village of Tai Bwo Wannai.",
|
||||
new Requirement(Skill.WOODCUTTING, 10));
|
||||
add("Cook a spider on a stick.",
|
||||
new Requirement(Skill.COOKING, 16));
|
||||
add("Cut a log from a teak tree.",
|
||||
new Requirement(Skill.WOODCUTTING, 35));
|
||||
add("Cut a log from a mahogany tree.",
|
||||
new Requirement(Skill.WOODCUTTING, 50));
|
||||
add("Catch a karambwan.",
|
||||
new Requirement(Skill.FISHING, 65));
|
||||
add("Grow a healthy fruit tree in the patch near Brimhaven.",
|
||||
new Requirement(Skill.FARMING, 27));
|
||||
add("Trap a horned graahk.",
|
||||
new Requirement(Skill.HUNTER, 41));
|
||||
add("Chop the vines to gain deeper access to Brimhaven Dungeon.",
|
||||
new Requirement(Skill.FARMING, 27));
|
||||
add("Cross the lava using the stepping stones within Brimhaven Dungeon.",
|
||||
new Requirement(Skill.AGILITY, 12));
|
||||
add("Climb the stairs within Brimhaven Dungeon.",
|
||||
new Requirement(Skill.WOODCUTTING, 10));
|
||||
add("Mine a red topaz from a gem rock.",
|
||||
new Requirement(Skill.MINING, 40));
|
||||
|
||||
// HARD
|
||||
add("Craft some nature runes.",
|
||||
new Requirement(Skill.RUNECRAFT, 44));
|
||||
add("Cook a karambwan thoroughly.",
|
||||
new Requirement(Skill.COOKING, 30));
|
||||
add("Kill a deathwing in the dungeon under the Kharazi Jungle.",
|
||||
new Requirement(Skill.WOODCUTTING, 15),
|
||||
new Requirement(Skill.STRENGTH, 50),
|
||||
new Requirement(Skill.AGILITY, 50),
|
||||
new Requirement(Skill.THIEVING, 50),
|
||||
new Requirement(Skill.MINING, 52));
|
||||
add("Use the crossbow short cut south of the volcano.",
|
||||
new Requirement(Skill.AGILITY, 53),
|
||||
new Requirement(Skill.RANGED, 42),
|
||||
new Requirement(Skill.STRENGTH, 21));
|
||||
add("Collect 5 palm leaves.",
|
||||
new Requirement(Skill.WOODCUTTING, 15));
|
||||
add("Be assigned a Slayer task by Duradel north of Shilo Village.",
|
||||
new Requirement(Skill.SLAYER, 50));
|
||||
add("Kill a metal dragon in Brimhaven Dungeon.",
|
||||
new Requirement(Skill.AGILITY, 12),
|
||||
new Requirement(Skill.WOODCUTTING, 34));
|
||||
|
||||
// ELITE
|
||||
add("Craft 56 Nature runes at once.",
|
||||
new Requirement(Skill.RUNECRAFT, 91));
|
||||
add("Check the health of a palm tree in Brimhaven.",
|
||||
new Requirement(Skill.FARMING, 68));
|
||||
add("Create an antivenom potion whilst standing in the horse shoe mine.",
|
||||
new Requirement(Skill.HERBLORE, 87));
|
||||
add("Check the health of your Calquat tree patch.",
|
||||
new Requirement(Skill.FARMING, 72));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
/*
|
||||
* 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.diaries;
|
||||
|
||||
import net.runelite.api.Skill;
|
||||
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement;
|
||||
import net.runelite.client.plugins.achievementdiary.Requirement;
|
||||
|
||||
public class LumbridgeDiaryRequirement extends GenericDiaryRequirement
|
||||
{
|
||||
public LumbridgeDiaryRequirement()
|
||||
{
|
||||
// EASY
|
||||
add("Complete a lap of the Draynor Village agility course.",
|
||||
new Requirement(Skill.AGILITY, 10));
|
||||
add("Slay a Cave bug beneath Lumbridge Swamp.",
|
||||
new Requirement(Skill.SLAYER, 7));
|
||||
add("Craft some water runes.",
|
||||
new Requirement(Skill.RUNECRAFT, 5));
|
||||
add("Chop and burn some oak logs in Lumbridge.",
|
||||
new Requirement(Skill.WOODCUTTING, 15),
|
||||
new Requirement(Skill.FIREMAKING, 15));
|
||||
add("Catch some Anchovies in Al Kharid.",
|
||||
new Requirement(Skill.FISHING, 15));
|
||||
add("Mine some Iron ore at the Al Kharid mine.",
|
||||
new Requirement(Skill.MINING, 15));
|
||||
|
||||
// MEDIUM
|
||||
add("Complete a lap of the Al Kharid agility course.",
|
||||
new Requirement(Skill.AGILITY, 20));
|
||||
add("Grapple across the River Lum.",
|
||||
new Requirement(Skill.AGILITY, 8),
|
||||
new Requirement(Skill.STRENGTH, 19),
|
||||
new Requirement(Skill.RANGED, 37));
|
||||
add("Purchase an upgraded device from Ava.",
|
||||
new Requirement(Skill.RANGED, 50));
|
||||
add("Cast the teleport to Lumbridge spell.",
|
||||
new Requirement(Skill.MAGIC, 31));
|
||||
add("Catch some Salmon in Lumbridge.",
|
||||
new Requirement(Skill.FISHING, 30));
|
||||
add("Craft a coif in the Lumbridge cow pen.",
|
||||
new Requirement(Skill.CRAFTING, 38));
|
||||
add("Chop some willow logs in Draynor Village.",
|
||||
new Requirement(Skill.WOODCUTTING, 30));
|
||||
add("Pickpocket Martin the Master Gardener.",
|
||||
new Requirement(Skill.THIEVING, 38));
|
||||
add("Catch an Essence or Eclectic impling in Puro-Puro.",
|
||||
new Requirement(Skill.HUNTER, 42));
|
||||
add("Craft some Lava runes at the fire altar in Al Kharid.",
|
||||
new Requirement(Skill.RUNECRAFT, 23));
|
||||
|
||||
// HARD
|
||||
add("Cast Bones to Peaches in Al Kharid palace.",
|
||||
new Requirement(Skill.MAGIC, 60));
|
||||
add("Squeeze past the jutting wall on your way to the cosmic altar.",
|
||||
new Requirement(Skill.AGILITY, 46));
|
||||
add("Craft 56 Cosmic runes simultaneously.",
|
||||
new Requirement(Skill.RUNECRAFT, 59));
|
||||
add("Travel from Lumbridge to Edgeville on a Waka Canoe.",
|
||||
new Requirement(Skill.FARMING, 63));
|
||||
add("Pick some Belladonna from the farming patch at Draynor Manor.",
|
||||
new Requirement(Skill.FARMING, 68));
|
||||
add("Light your mining helmet in the Lumbridge castle basement.",
|
||||
new Requirement(Skill.FIREMAKING, 65));
|
||||
add("Recharge your prayer at Clan Wars with Smite activated.",
|
||||
new Requirement(Skill.PRAYER, 52));
|
||||
add("Craft, string and enchant an Amulet of Power in Lumbridge.",
|
||||
new Requirement(Skill.CRAFTING, 70),
|
||||
new Requirement(Skill.MAGIC, 57));
|
||||
|
||||
// ELITE
|
||||
add("Steal from a Dorgesh-Kaan rich chest.",
|
||||
new Requirement(Skill.THIEVING, 78));
|
||||
add("Pickpocket Movario on the Dorgesh-Kaan Agility course.",
|
||||
new Requirement(Skill.AGILITY, 70),
|
||||
new Requirement(Skill.RANGED, 70),
|
||||
new Requirement(Skill.STRENGTH, 70));
|
||||
add("Chop some magic logs at the Mage Training Arena.",
|
||||
new Requirement(Skill.WOODCUTTING, 75));
|
||||
add("Smith an Adamant platebody down Draynor sewer.",
|
||||
new Requirement(Skill.SMITHING, 88));
|
||||
add("Craft 140 or more Water runes at once.",
|
||||
new Requirement(Skill.RUNECRAFT, 76));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
/*
|
||||
* 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.diaries;
|
||||
|
||||
import net.runelite.api.Skill;
|
||||
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement;
|
||||
import net.runelite.client.plugins.achievementdiary.Requirement;
|
||||
|
||||
public class MorytaniaDiaryRequirement extends GenericDiaryRequirement
|
||||
{
|
||||
public MorytaniaDiaryRequirement()
|
||||
{
|
||||
// EASY
|
||||
add("Craft any Snelm from scratch in Morytania.",
|
||||
new Requirement(Skill.CRAFTING, 15));
|
||||
add("Cook a thin Snail on the Port Phasmatys range.",
|
||||
new Requirement(Skill.COOKING, 12));
|
||||
add("Kill a Banshee in the Slayer Tower.",
|
||||
new Requirement(Skill.SLAYER, 15));
|
||||
add("Place a Scarecrow in the Morytania flower patch.",
|
||||
new Requirement(Skill.FARMING, 23));
|
||||
|
||||
// MEDIUM
|
||||
add("Catch a swamp lizard.",
|
||||
new Requirement(Skill.HUNTER, 29));
|
||||
add("Complete a lap of the Canifis agility course.",
|
||||
new Requirement(Skill.AGILITY, 40));
|
||||
add("Obtain some Bark from a Hollow tree.",
|
||||
new Requirement(Skill.WOODCUTTING, 45));
|
||||
add("Kill a Terror Dog.",
|
||||
new Requirement(Skill.SLAYER, 40));
|
||||
add("Complete a game of trouble brewing.",
|
||||
new Requirement(Skill.COOKING, 40));
|
||||
add("Make a batch of cannonballs at the Port Phasmatys furnace.",
|
||||
new Requirement(Skill.SMITHING, 35));
|
||||
add("Kill a Fever Spider on Braindeath Island.",
|
||||
new Requirement(Skill.SLAYER, 42));
|
||||
add("Mix a Guthix Balance potion while in Morytania.",
|
||||
new Requirement(Skill.HERBLORE, 36));
|
||||
|
||||
// HARD
|
||||
add("Enter the Kharyrll portal in your POH.",
|
||||
new Requirement(Skill.MAGIC, 66),
|
||||
new Requirement(Skill.CONSTRUCTION, 50));
|
||||
add("Climb the advanced spike chain within Slayer Tower.",
|
||||
new Requirement(Skill.AGILITY, 71));
|
||||
add("Harvest some Watermelon from the Allotment patch on Harmony Island.",
|
||||
new Requirement(Skill.FARMING, 47));
|
||||
add("Chop and burn some mahogany logs on Mos Le'Harmless.",
|
||||
new Requirement(Skill.WOODCUTTING, 50),
|
||||
new Requirement(Skill.FIREMAKING, 50));
|
||||
add("Kill a Cave Horror.",
|
||||
new Requirement(Skill.SLAYER, 58));
|
||||
add("Harvest some Bittercap Mushrooms from the patch in Canifis.",
|
||||
new Requirement(Skill.FARMING, 53));
|
||||
add("Pray at the Altar of Nature with Piety activated.",
|
||||
new Requirement(Skill.PRAYER, 70),
|
||||
new Requirement(Skill.DEFENCE, 70));
|
||||
add("Use the shortcut to get to the bridge over the Salve.",
|
||||
new Requirement(Skill.AGILITY, 65));
|
||||
add("Mine some Mithril ore in the Abandoned Mine.",
|
||||
new Requirement(Skill.MINING, 55));
|
||||
|
||||
// ELITE
|
||||
add("Catch a shark in Burgh de Rott with your bare hands.",
|
||||
new Requirement(Skill.FISHING, 96),
|
||||
new Requirement(Skill.STRENGTH, 76));
|
||||
add("Cremate any Shade remains on a Magic or Redwood pyre.",
|
||||
new Requirement(Skill.FIREMAKING, 80));
|
||||
add("Fertilize the Morytania herb patch using Lunar Magic.",
|
||||
new Requirement(Skill.MAGIC, 83));
|
||||
add("Craft a Black dragonhide body in Canifis bank.",
|
||||
new Requirement(Skill.CRAFTING, 84));
|
||||
add("Kill an Abyssal demon in the Slayer Tower.",
|
||||
new Requirement(Skill.SLAYER, 61));
|
||||
add("Loot the Barrows chest while wearing any complete barrows set.",
|
||||
new Requirement(Skill.DEFENCE, 70),
|
||||
new Requirement(Skill.ATTACK, 70,
|
||||
new Requirement(Skill.STRENGTH, 70),
|
||||
new Requirement(Skill.RANGED, 70),
|
||||
new Requirement(Skill.MAGIC, 70))
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
/*
|
||||
* 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.diaries;
|
||||
|
||||
import net.runelite.api.Skill;
|
||||
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement;
|
||||
import net.runelite.client.plugins.achievementdiary.Requirement;
|
||||
|
||||
public class VarrockDiaryRequirement extends GenericDiaryRequirement
|
||||
{
|
||||
public VarrockDiaryRequirement()
|
||||
{
|
||||
// EASY
|
||||
add("Mine some Iron in the south east mining patch near Varrock.",
|
||||
new Requirement(Skill.MINING, 15));
|
||||
add("Jump over the fence south of Varrock.",
|
||||
new Requirement(Skill.AGILITY, 13));
|
||||
add("Spin a bowl on the pottery wheel and fire it in the oven in Barb Village.",
|
||||
new Requirement(Skill.CRAFTING, 8));
|
||||
add("Craft some Earth runes.",
|
||||
new Requirement(Skill.RUNECRAFT, 9));
|
||||
add("Catch some trout in the River Lum at Barbarian Village.",
|
||||
new Requirement(Skill.FISHING, 20));
|
||||
add("Steal from the Tea stall in Varrock.",
|
||||
new Requirement(Skill.THIEVING, 5));
|
||||
|
||||
// MEDIUM
|
||||
add("Cast the teleport to Varrock spell.",
|
||||
new Requirement(Skill.MAGIC, 25));
|
||||
add("Pick a White tree fruit.",
|
||||
new Requirement(Skill.FARMING, 25));
|
||||
add("Use the balloon to travel from Varrock.",
|
||||
new Requirement(Skill.FIREMAKING, 40));
|
||||
add("Complete a lap of the Varrock Agility course.",
|
||||
new Requirement(Skill.AGILITY, 30));
|
||||
|
||||
// HARD
|
||||
add("Trade furs with the Fancy Dress Seller for a spottier cape and equip it.",
|
||||
new Requirement(Skill.HUNTER, 66));
|
||||
add("Make a Waka Canoe near Edgeville.",
|
||||
new Requirement(Skill.WOODCUTTING, 57));
|
||||
add("Teleport to Paddewwa.",
|
||||
new Requirement(Skill.MAGIC, 54));
|
||||
add("Chop some yew logs in Varrock and burn them at the top of the Varrock church.",
|
||||
new Requirement(Skill.WOODCUTTING, 60),
|
||||
new Requirement(Skill.FIREMAKING, 60));
|
||||
add("Have the Varrock estate agent decorate your house with Fancy Stone.",
|
||||
new Requirement(Skill.CONSTRUCTION, 50));
|
||||
add("Collect at least 2 yew roots from the Tree patch in Varrock Palace.",
|
||||
new Requirement(Skill.WOODCUTTING, 60),
|
||||
new Requirement(Skill.FARMING, 68));
|
||||
add("Pray at the altar in Varrock palace with Smite active.",
|
||||
new Requirement(Skill.PRAYER, 52));
|
||||
add("Squeeze through the obstacle pipe in Edgeville dungeon.",
|
||||
new Requirement(Skill.AGILITY, 51));
|
||||
|
||||
// ELITE
|
||||
add("Create a super combat potion in Varrock west bank.",
|
||||
new Requirement(Skill.HERBLORE, 90));
|
||||
add("Use Lunar magic to make 20 mahogany planks at the Lumberyard.",
|
||||
new Requirement(Skill.MAGIC, 86));
|
||||
add("Bake a summer pie in the Cooking Guild.",
|
||||
new Requirement(Skill.COOKING, 95));
|
||||
add("Smith and fletch ten rune darts within Varrock.",
|
||||
new Requirement(Skill.SMITHING, 89),
|
||||
new Requirement(Skill.FLETCHING, 81));
|
||||
add("Craft 100 or more earth runes simultaneously.",
|
||||
new Requirement(Skill.RUNECRAFT, 78));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
/*
|
||||
* 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.diaries;
|
||||
|
||||
import net.runelite.api.Skill;
|
||||
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement;
|
||||
import net.runelite.client.plugins.achievementdiary.Requirement;
|
||||
|
||||
public class WesternDiaryRequirement extends GenericDiaryRequirement
|
||||
{
|
||||
public WesternDiaryRequirement()
|
||||
{
|
||||
// EASY
|
||||
add("Catch a Copper Longtail.",
|
||||
new Requirement(Skill.HUNTER, 9));
|
||||
add("Mine some Iron Ore near Piscatoris.",
|
||||
new Requirement(Skill.MINING, 15));
|
||||
add("Fletch an Oak shortbow from the Gnome Stronghold.",
|
||||
new Requirement(Skill.FLETCHING, 20));
|
||||
|
||||
// MEDIUM
|
||||
add("Take the agility shortcut from the Grand Tree to Otto's Grotto.",
|
||||
new Requirement(Skill.AGILITY, 37));
|
||||
add("Trap a Spined Larupia.",
|
||||
new Requirement(Skill.HUNTER, 31));
|
||||
add("Fish some Bass on Ape Atoll.",
|
||||
new Requirement(Skill.FISHING, 46));
|
||||
add("Chop and burn some teak logs on Ape Atoll.",
|
||||
new Requirement(Skill.WOODCUTTING, 35),
|
||||
new Requirement(Skill.FIREMAKING, 35));
|
||||
add("Make a Chocolate Bomb at the Grand Tree.",
|
||||
new Requirement(Skill.COOKING, 42));
|
||||
add("Complete a delivery for the Gnome Restaurant.",
|
||||
new Requirement(Skill.COOKING, 42));
|
||||
add("Mine some Gold ore underneath the Grand Tree.",
|
||||
new Requirement(Skill.MINING, 40));
|
||||
|
||||
// HARD
|
||||
add("Kill an Elf with a Crystal bow.",
|
||||
new Requirement(Skill.RANGED, 70),
|
||||
new Requirement(Skill.AGILITY, 50));
|
||||
add("Catch and cook a Monkfish in Piscatoris.",
|
||||
new Requirement(Skill.FISHING, 62),
|
||||
new Requirement(Skill.COOKING, 62));
|
||||
add("Catch a Dashing Kebbit.",
|
||||
new Requirement(Skill.HUNTER, 69));
|
||||
add("Complete a lap of the Ape Atoll agility course.",
|
||||
new Requirement(Skill.FARMING, 63));
|
||||
add("Chop and burn some Mahogany logs on Ape Atoll.",
|
||||
new Requirement(Skill.WOODCUTTING, 50),
|
||||
new Requirement(Skill.FIREMAKING, 50));
|
||||
add("Mine some Adamantite ore in Tirannwn.",
|
||||
new Requirement(Skill.MINING, 70));
|
||||
add("Check the health of your Palm tree in Lletya.",
|
||||
new Requirement(Skill.FARMING, 68));
|
||||
add("Build an Isafdar painting in your POH Quest hall.",
|
||||
new Requirement(Skill.CONSTRUCTION, 65));
|
||||
add("Teleport to Ape Atoll.",
|
||||
new Requirement(Skill.MAGIC, 64));
|
||||
add("Pickpocket a Gnome.",
|
||||
new Requirement(Skill.THIEVING, 75));
|
||||
|
||||
// ELITE
|
||||
add("Fletch a Magic Longbow in the Elven lands.",
|
||||
new Requirement(Skill.FLETCHING, 85));
|
||||
add("Kill the Thermonuclear Smoke devil (Does not require task).",
|
||||
new Requirement(Skill.SLAYER, 93));
|
||||
add("Have Prissy Scilla protect your Magic tree.",
|
||||
new Requirement(Skill.FARMING, 75));
|
||||
add("Use the Elven overpass advanced cliffside shortcut.",
|
||||
new Requirement(Skill.AGILITY, 85));
|
||||
add("Pickpocket an Elf.",
|
||||
new Requirement(Skill.THIEVING, 85));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
/*
|
||||
* 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.diaries;
|
||||
|
||||
import net.runelite.api.Skill;
|
||||
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement;
|
||||
import net.runelite.client.plugins.achievementdiary.Requirement;
|
||||
|
||||
public class WildernessDiaryRequirement extends GenericDiaryRequirement
|
||||
{
|
||||
public WildernessDiaryRequirement()
|
||||
{
|
||||
// EASY
|
||||
add("Cast Low Alchemy at the Fountain of Rune.",
|
||||
new Requirement(Skill.MAGIC, 21));
|
||||
add("Kill an Earth Warrior in the Wilderness beneath Edgeville.",
|
||||
new Requirement(Skill.AGILITY, 15));
|
||||
add("Mine some Iron ore in the Wilderness.",
|
||||
new Requirement(Skill.MINING, 15));
|
||||
|
||||
// MEDIUM
|
||||
add("Mine some Mithril ore in the wilderness.",
|
||||
new Requirement(Skill.MINING, 55));
|
||||
add("Chop some yew logs from a fallen Ent.",
|
||||
new Requirement(Skill.WOODCUTTING, 61));
|
||||
add("Enter the Wilderness Godwars Dungeon.",
|
||||
new Requirement(Skill.AGILITY, 60,
|
||||
new Requirement(Skill.STRENGTH, 60))
|
||||
);
|
||||
add("Complete a lap of the Wilderness Agility course.",
|
||||
new Requirement(Skill.AGILITY, 52));
|
||||
add("Charge an Earth Orb.",
|
||||
new Requirement(Skill.MAGIC, 60));
|
||||
add("Kill a Bloodveld in the Wilderness Godwars Dungeon.",
|
||||
new Requirement(Skill.SLAYER, 50));
|
||||
add("Smith a Golden helmet in the Resource Area.",
|
||||
new Requirement(Skill.SMITHING, 50));
|
||||
|
||||
// HARD
|
||||
add("Cast one of the 3 God spells against another player in the Wilderness.",
|
||||
new Requirement(Skill.MAGIC, 60));
|
||||
add("Charge an Air Orb.",
|
||||
new Requirement(Skill.MAGIC, 66));
|
||||
add("Catch a Black Salamander in the Wilderness.",
|
||||
new Requirement(Skill.HUNTER, 67));
|
||||
add("Smith an Adamant scimitar in the Resource Area.",
|
||||
new Requirement(Skill.SMITHING, 75));
|
||||
add("Take the agility shortcut from Trollheim into the Wilderness.",
|
||||
new Requirement(Skill.AGILITY, 64));
|
||||
add("Kill a Spiritual warrior in the Wilderness Godwars Dungeon.",
|
||||
new Requirement(Skill.SLAYER, 68));
|
||||
add("Fish some Raw Lava Eel in the Wilderness.",
|
||||
new Requirement(Skill.FISHING, 53));
|
||||
|
||||
// ELITE
|
||||
add("Teleport to Ghorrock.",
|
||||
new Requirement(Skill.MAGIC, 96));
|
||||
add("Fish and Cook a Dark Crab in the Resource Area.",
|
||||
new Requirement(Skill.FISHING, 85),
|
||||
new Requirement(Skill.COOKING, 90));
|
||||
add("Smith a rune scimitar from scratch in the Resource Area.",
|
||||
new Requirement(Skill.MINING, 85),
|
||||
new Requirement(Skill.SMITHING, 90));
|
||||
add("Steal from the Rogues' chest.",
|
||||
new Requirement(Skill.THIEVING, 84));
|
||||
add("Slay a spiritual mage inside the wilderness Godwars Dungeon.",
|
||||
new Requirement(Skill.SLAYER, 83),
|
||||
new Requirement(Skill.AGILITY, 60,
|
||||
new Requirement(Skill.STRENGTH, 60))
|
||||
);
|
||||
add("Cut and burn some magic logs in the Resource Area.",
|
||||
new Requirement(Skill.WOODCUTTING, 75),
|
||||
new Requirement(Skill.FIREMAKING, 75));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user