diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/quest/MQuestScript.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/quest/MQuestScript.java
index f13a80f1c42..b8906da11a2 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/quest/MQuestScript.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/quest/MQuestScript.java
@@ -239,7 +239,7 @@ private boolean handleRequirements(DetailedQuestStep questStep) {
if (requirement instanceof ItemRequirement) {
var itemRequirement = (ItemRequirement) requirement;
- if (itemRequirement.isEquip() && Rs2Inventory.contains(itemRequirement.getAllIds().stream().mapToInt(i -> i).toArray())
+ if (itemRequirement.mustBeEquipped() && Rs2Inventory.contains(itemRequirement.getAllIds().stream().mapToInt(i -> i).toArray())
&& itemRequirement.getAllIds().stream().noneMatch(Rs2Equipment::isWearing)) {
Rs2Inventory.wear(itemRequirement.getAllIds().stream().filter(Rs2Inventory::contains).findFirst().orElse(-1));
return true;
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/QuestHelperConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/QuestHelperConfig.java
index 2277d5fad83..9047d7866fa 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/QuestHelperConfig.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/QuestHelperConfig.java
@@ -534,6 +534,17 @@ default boolean showWidgetHints()
)
default boolean solvePuzzles() { return true; }
+ @ConfigItem(
+ keyName = "showWorldMapPoint",
+ name = "Display world map point",
+ description = "Choose whether the arrow & icon of your current step should be visible on the world map.
Changing this will take effect next time your quest step updates.",
+ section = hintsSection
+ )
+ default boolean showWorldMapPoint()
+ {
+ return true;
+ }
+
@ConfigItem(
keyName = "useShortestPath",
name = "Use 'Shortest Path' plugin",
@@ -681,4 +692,24 @@ default boolean showCompletedQuests()
{
return false;
}
+
+ @ConfigSection(
+ position = 5,
+ name = "Development",
+ description = "Options that configure the quest helper development experience",
+ closedByDefault = true
+ )
+ String developmentSection = "developmentSection";
+
+ @ConfigItem(
+ keyName = "devShowOverlayOnLaunch",
+ name = "Show overlay on launch",
+ description = "Show the dev overlay (::questhelperdebug) on launch",
+ position = 4,
+ section = developmentSection
+ )
+ default boolean devShowOverlayOnLaunch()
+ {
+ return false;
+ }
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/QuestHelperPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/QuestHelperPlugin.java
index 349bc76f559..0525afce86a 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/QuestHelperPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/QuestHelperPlugin.java
@@ -46,11 +46,9 @@
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import net.runelite.api.*;
-import net.runelite.api.annotations.Varbit;
import net.runelite.api.events.*;
import net.runelite.api.gameval.InventoryID;
-import net.runelite.api.gameval.ItemID;
-import net.runelite.api.gameval.VarbitID;
+import net.runelite.api.gameval.VarPlayerID;
import net.runelite.client.RuneLite;
import net.runelite.client.callback.ClientThread;
import net.runelite.client.chat.ChatMessageManager;
@@ -69,8 +67,8 @@
import net.runelite.client.ui.NavigationButton;
import net.runelite.client.ui.components.colorpicker.ColorPickerManager;
import net.runelite.client.util.Text;
-import org.apache.commons.lang3.ArrayUtils;
+import javax.annotation.Nullable;
import javax.inject.Inject;
import javax.inject.Named;
import javax.swing.*;
@@ -198,6 +196,14 @@ protected void startUp() throws IOException
questOverlayManager.startUp();
+ if (developerMode)
+ {
+ if (config.devShowOverlayOnLaunch())
+ {
+ questOverlayManager.addDebugOverlay();
+ }
+ }
+
final BufferedImage icon = Icon.QUEST_ICON.getImage();
panel = new QuestHelperPanel(this, questManager, configManager);
@@ -229,6 +235,11 @@ protected void shutDown()
eventBus.unregister(playerStateManager);
eventBus.unregister(runeliteObjectManager);
eventBus.unregister(worldMapAreaManager);
+ if (developerMode)
+ {
+ // We don't check if it was added, since removing an unadded overlay is a no-op
+ questOverlayManager.removeDebugOverlay();
+ }
questOverlayManager.shutDown();
playerStateManager.shutDown();
@@ -333,7 +344,7 @@ public void onVarbitChanged(VarbitChanged event)
}
if (client.getWorldType().contains(WorldType.QUEST_SPEEDRUNNING)
- && event.getVarpId() == VarPlayer.IN_RAID_PARTY
+ && event.getVarpId() == VarPlayerID.RAIDS_PARTY_GROUPHOLDER
&& event.getValue() == 0
&& client.getGameState() == GameState.LOGGED_IN)
{
@@ -409,6 +420,18 @@ public void onConfigChanged(ConfigChanged event)
questManager.getSelectedQuest().setSidebarOrder(loadSidebarOrder(questManager.getSelectedQuest()));
}
}
+
+ if (developerMode && "devShowOverlayOnLaunch".equals(event.getKey()))
+ {
+ if (config.devShowOverlayOnLaunch())
+ {
+ questOverlayManager.addDebugOverlay();
+ }
+ else
+ {
+ questOverlayManager.removeDebugOverlay();
+ }
+ }
}
@Subscribe
@@ -462,7 +485,7 @@ public List getPluginBankTagItemsForSections()
return questBankManager.getBankTagService().getPluginBankTagItemsForSections(false);
}
- public QuestHelper getSelectedQuest()
+ public @Nullable QuestHelper getSelectedQuest()
{
return questManager.getSelectedQuest();
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/bank/banktab/QuestBankTab.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/bank/banktab/QuestBankTab.java
index 1f4070c052b..0ebd16abf5c 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/bank/banktab/QuestBankTab.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/bank/banktab/QuestBankTab.java
@@ -37,6 +37,8 @@
import net.runelite.api.gameval.InterfaceID;
import net.runelite.api.gameval.InventoryID;
import net.runelite.api.gameval.ItemID;
+import net.runelite.api.gameval.SpriteID;
+import net.runelite.api.gameval.VarClientID;
import net.runelite.api.gameval.VarbitID;
import net.runelite.api.widgets.ItemQuantityMode;
import net.runelite.api.widgets.JavaScriptCallback;
@@ -154,7 +156,7 @@ public void refreshBankTab()
@Subscribe
public void onGrandExchangeSearched(GrandExchangeSearched event)
{
- final String input = client.getVarcStrValue(VarClientStr.INPUT_TEXT);
+ final String input = client.getVarcStrValue(VarClientID.MESLAYERINPUT);
String QUEST_BANK_TAG = "quest-helper";
if (!input.equals(QUEST_BANK_TAG) || questHelper.getSelectedQuest() == null)
@@ -400,7 +402,7 @@ private void sortBankTabItems(Widget itemContainer, Widget[] containerChildren,
List itemList = new ArrayList<>();
for (Widget itemWidget : containerChildren)
{
- if (itemWidget.getSpriteId() == SpriteID.RESIZEABLE_MODE_SIDE_PANEL_BACKGROUND
+ if (itemWidget.getSpriteId() == SpriteID.TRADEBACKING_DARK
|| itemWidget.getText().contains("Tab"))
{
itemWidget.setHidden(true);
@@ -508,7 +510,7 @@ private void hideBankWidgets(Widget itemContainer, Widget[] containerChildren)
// ~bankmain_drawitem uses 6512 for empty item slots
if (!widget.isSelfHidden() &&
(widget.getItemId() > -1 && widget.getItemId() != ItemID.BLANKOBJECT) ||
- (widget.getSpriteId() == SpriteID.RESIZEABLE_MODE_SIDE_PANEL_BACKGROUND || widget.getText().contains("Tab"))
+ (widget.getSpriteId() == SpriteID.TRADEBACKING_DARK || widget.getText().contains("Tab"))
)
{
widget.setHidden(true);
@@ -757,7 +759,7 @@ private int addSubSectionHeader(Widget itemContainer, String title, int totalSec
private int addSectionHeader(Widget itemContainer, String title, int totalSectionsHeight)
{
- addedWidgets.add(createGraphic(itemContainer, SpriteID.RESIZEABLE_MODE_SIDE_PANEL_BACKGROUND, ITEM_ROW_START, totalSectionsHeight));
+ addedWidgets.add(createGraphic(itemContainer, SpriteID.TRADEBACKING_DARK, ITEM_ROW_START, totalSectionsHeight));
addedWidgets.add(createText(itemContainer, title, new Color(228, 216, 162).getRGB(), (ITEMS_PER_ROW * ITEM_HORIZONTAL_SPACING) + ITEM_ROW_START
, TEXT_HEIGHT, ITEM_ROW_START, totalSectionsHeight + LINE_VERTICAL_SPACING));
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/bank/banktab/QuestBankTabInterface.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/bank/banktab/QuestBankTabInterface.java
index 08a3d147d3a..32e6be9e82d 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/bank/banktab/QuestBankTabInterface.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/bank/banktab/QuestBankTabInterface.java
@@ -31,6 +31,8 @@
import net.runelite.api.*;
import net.runelite.api.events.MenuOptionClicked;
import net.runelite.api.gameval.InterfaceID;
+import net.runelite.api.gameval.SpriteID;
+import net.runelite.api.gameval.VarClientID;
import net.runelite.api.gameval.VarbitID;
import net.runelite.api.widgets.JavaScriptCallback;
import net.runelite.api.widgets.Widget;
@@ -83,13 +85,13 @@ public void init()
int QUEST_BUTTON_SIZE = 25;
int QUEST_BUTTON_X = 408;
int QUEST_BUTTON_Y = 5;
- questBackgroundWidget = createGraphic("quest-helper", SpriteID.UNKNOWN_BUTTON_SQUARE_SMALL, QUEST_BUTTON_SIZE,
+ questBackgroundWidget = createGraphic("quest-helper", SpriteID.Miscgraphics3.UNKNOWN_BUTTON_SQUARE_SMALL, QUEST_BUTTON_SIZE,
QUEST_BUTTON_SIZE,
QUEST_BUTTON_X, QUEST_BUTTON_Y);
questBackgroundWidget.setAction(1, VIEW_TAB);
questBackgroundWidget.setOnOpListener((JavaScriptCallback) this::handleTagTab);
- questIconWidget = createGraphic("", SpriteID.QUESTS_PAGE_ICON_BLUE_QUESTS, QUEST_BUTTON_SIZE - 6,
+ questIconWidget = createGraphic("", SpriteID.AchievementDiaryIcons.BLUE_QUESTS, QUEST_BUTTON_SIZE - 6,
QUEST_BUTTON_SIZE - 6,
QUEST_BUTTON_X + 3, QUEST_BUTTON_Y + 3);
@@ -148,8 +150,8 @@ public void handleSearch()
closeTab();
// This ensures that when clicking Search when tab is selected, the search input is opened rather
// than client trying to close it first
- client.setVarcStrValue(VarClientStr.INPUT_TEXT, "");
- client.setVarcIntValue(VarClientInt.INPUT_TYPE, 0);
+ client.setVarcStrValue(VarClientID.MESLAYERINPUT, "");
+ client.setVarcIntValue(VarClientID.MESLAYERMODE, 0);
}
}
@@ -186,7 +188,7 @@ public void closeTab()
questTabActive = false;
if (questBackgroundWidget != null)
{
- questBackgroundWidget.setSpriteId(SpriteID.UNKNOWN_BUTTON_SQUARE_SMALL);
+ questBackgroundWidget.setSpriteId(SpriteID.Miscgraphics3.UNKNOWN_BUTTON_SQUARE_SMALL);
questBackgroundWidget.revalidate();
}
}
@@ -210,7 +212,7 @@ public void refreshTab()
if (searchButtonBackground != null)
{
searchButtonBackground.setOnTimerListener((Object[]) null);
- searchButtonBackground.setSpriteId(SpriteID.EQUIPMENT_SLOT_TILE);
+ searchButtonBackground.setSpriteId(SpriteID.Miscgraphics.EQUIPMENT_SLOT_TILE);
}
}
@@ -228,7 +230,7 @@ private void activateTab(boolean wasInPotionStorage)
client.menuAction(-1, InterfaceID.Bankmain.POTIONSTORE_BUTTON, MenuAction.CC_OP, 1, -1, "Potion store", "");
}
- questBackgroundWidget.setSpriteId(SpriteID.UNKNOWN_BUTTON_SQUARE_SMALL_SELECTED);
+ questBackgroundWidget.setSpriteId(SpriteID.Miscgraphics3.UNKNOWN_BUTTON_SQUARE_SMALL_SELECTED);
questBackgroundWidget.revalidate();
questTabActive = true;
@@ -242,7 +244,7 @@ private void activateTab(boolean wasInPotionStorage)
if (searchButtonBackground != null)
{
searchButtonBackground.setOnTimerListener((Object[]) null);
- searchButtonBackground.setSpriteId(SpriteID.EQUIPMENT_SLOT_TILE);
+ searchButtonBackground.setSpriteId(SpriteID.Miscgraphics.EQUIPMENT_SLOT_TILE);
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/bank/banktab/QuestGrandExchangeInterface.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/bank/banktab/QuestGrandExchangeInterface.java
index 6f2e9a7cd88..abeefb059c0 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/bank/banktab/QuestGrandExchangeInterface.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/bank/banktab/QuestGrandExchangeInterface.java
@@ -31,6 +31,8 @@
import lombok.Setter;
import net.runelite.api.*;
import net.runelite.api.gameval.InterfaceID;
+import net.runelite.api.gameval.SpriteID;
+import net.runelite.api.gameval.VarClientID;
import net.runelite.api.widgets.JavaScriptCallback;
import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetType;
@@ -83,14 +85,14 @@ public void init()
int QUEST_BUTTON_SIZE = 20;
int QUEST_BUTTON_X = 480;
int QUEST_BUTTON_Y = 0;
- questBackgroundWidget = createGraphic("quest helper", SpriteID.UNKNOWN_BUTTON_SQUARE_SMALL,
+ questBackgroundWidget = createGraphic("quest helper", SpriteID.Miscgraphics3.UNKNOWN_BUTTON_SQUARE_SMALL,
QUEST_BUTTON_SIZE,
QUEST_BUTTON_SIZE,
QUEST_BUTTON_X, QUEST_BUTTON_Y);
questBackgroundWidget.setAction(1, VIEW_TAB);
questBackgroundWidget.setOnOpListener((JavaScriptCallback) this::handleTagTab);
- questIconWidget = createGraphic("", SpriteID.QUESTS_PAGE_ICON_BLUE_QUESTS, QUEST_BUTTON_SIZE - 6,
+ questIconWidget = createGraphic("", SpriteID.AchievementDiaryIcons.BLUE_QUESTS, QUEST_BUTTON_SIZE - 6,
QUEST_BUTTON_SIZE - 6,
QUEST_BUTTON_X + 3, QUEST_BUTTON_Y + 3);
@@ -154,14 +156,14 @@ public void closeOptions()
active = false;
if (questBackgroundWidget != null)
{
- questBackgroundWidget.setSpriteId(SpriteID.UNKNOWN_BUTTON_SQUARE_SMALL);
+ questBackgroundWidget.setSpriteId(SpriteID.Miscgraphics3.UNKNOWN_BUTTON_SQUARE_SMALL);
questBackgroundWidget.revalidate();
}
grandExchangeTitle.setHidden(true);
- client.setVarcStrValue(VarClientStr.INPUT_TEXT, "");
- client.setVarcIntValue(VarClientInt.INPUT_TYPE, 14);
+ client.setVarcStrValue(VarClientID.MESLAYERINPUT, "");
+ client.setVarcIntValue(VarClientID.MESLAYERMODE, 14);
clientThread.invokeLater(() -> updateSearchInterface(false));
}
@@ -173,12 +175,12 @@ private void activateTab()
return;
}
- questBackgroundWidget.setSpriteId(SpriteID.UNKNOWN_BUTTON_SQUARE_SMALL_SELECTED);
+ questBackgroundWidget.setSpriteId(SpriteID.Miscgraphics3.UNKNOWN_BUTTON_SQUARE_SMALL_SELECTED);
questBackgroundWidget.revalidate();
grandExchangeTitle.setHidden(false);
active = true;
- client.setVarcStrValue(VarClientStr.INPUT_TEXT, "quest-helper");
- client.setVarcIntValue(VarClientInt.INPUT_TYPE, 14);
+ client.setVarcStrValue(VarClientID.MESLAYERINPUT, "quest-helper");
+ client.setVarcIntValue(VarClientID.MESLAYERMODE, 14);
clientThread.invokeLater(() -> updateSearchInterface(true));
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/collections/ItemCollections.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/collections/ItemCollections.java
index 300131a53c1..07007445b54 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/collections/ItemCollections.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/collections/ItemCollections.java
@@ -170,6 +170,7 @@ public enum ItemCollections
SAW("Saw", ImmutableList.of(
ItemID.POH_SAW,
ItemID.WEARABLE_SAW,
+ ItemID.WEARABLE_SAW_OFFHAND,
ItemID.EYEGLO_CRYSTAL_SAW
)),
@@ -485,7 +486,14 @@ public enum ItemCollections
ItemID._4DOSEPRAYERRESTORE,
ItemID._3DOSEPRAYERRESTORE,
ItemID._2DOSEPRAYERRESTORE,
- ItemID._1DOSEPRAYERRESTORE
+ ItemID._1DOSEPRAYERRESTORE,
+ ItemID._4DOSE2RESTORE,
+ ItemID._3DOSE2RESTORE,
+ ItemID._2DOSE2RESTORE,
+ ItemID._1DOSE2RESTORE,
+ ItemID.HUNTER_MIX_MOONMOTH_2DOSE,
+ ItemID.HUNTER_MIX_MOONMOTH_1DOSE,
+ ItemID.BUTTERFLY_JAR_MOONMOTH
)),
RESTORE_POTIONS(ImmutableList.of(
@@ -1218,17 +1226,16 @@ public enum ItemCollections
ItemID.DRAMEN_STAFF
)),
- ESSENCE_LOW(ImmutableList.of(
- ItemID.BLANKRUNE_DAEYALT,
- ItemID.BLANKRUNE_HIGH,
- ItemID.BLANKRUNE
- )),
-
ESSENCE_HIGH(ImmutableList.of(
ItemID.BLANKRUNE_DAEYALT,
ItemID.BLANKRUNE_HIGH
)),
+ ESSENCE_LOW(new ImmutableList.Builder()
+ .addAll(ESSENCE_HIGH.items).add(
+ ItemID.BLANKRUNE).build()
+ ),
+
COINS(ImmutableList.of(
ItemID.COINS,
ItemID.MAGICTRAINING_COINS,
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/ardougne/ArdougneHard.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/ardougne/ArdougneHard.java
index 25ef4b36aaa..d08ea96525e 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/ardougne/ArdougneHard.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/ardougne/ArdougneHard.java
@@ -129,13 +129,13 @@ public QuestStep loadStep()
doHard.addStep(notDragSquare, dragSquareTask);
deathRuneTask = new ConditionalStep(this, enterMournerHQ);
- deathRuneTask.addStep(inMournerHQ, enterMournerBasement);
+ deathRuneTask.addStep(new Conditions(redAtAltar, inDeath02), deathAltar);
+ deathRuneTask.addStep(new Conditions(redAtDoor, inDeath02), turnKeyMirror);
+ deathRuneTask.addStep(new Conditions(inDeath), deathRune);
deathRuneTask.addStep(inDeath0, deathMoveUp1);
+ deathRuneTask.addStep(inDeath12, deathMoveDown0);
deathRuneTask.addStep(inDeath1, deathMoveUp2);
deathRuneTask.addStep(inDeath2, deathMoveDown1);
- deathRuneTask.addStep(inDeath12, deathMoveDown0);
- deathRuneTask.addStep(new Conditions(redAtDoor, inDeath02), turnKeyMirror);
- deathRuneTask.addStep(new Conditions(redAtAltar, inDeath02), deathRune);
doHard.addStep(notDeathRune, deathRuneTask);
return doHard;
@@ -158,9 +158,9 @@ protected void setupRequirements()
notDeathRune = new VarplayerRequirement(VarPlayerID.ARDOUNGE_ACHIEVEMENT_DIARY2, false, 5);
notYanHouse = new VarbitRequirement(VarbitID.POH_HOUSE_LOCATION, 6, Operation.NOT_EQUAL);
- notYanHouse2 = new VarbitRequirement(2187, 6);
- redAtDoor = new VarbitRequirement(1249, 1);
- redAtAltar = new VarbitRequirement(1250, 1);
+ notYanHouse2 = new VarbitRequirement(VarbitID.POH_HOUSE_LOCATION, 6);
+ redAtDoor = new VarbitRequirement(VarbitID.MOURNING_LIGHT_TEMPLE_1_B_EAST, 1);
+ redAtAltar = new VarbitRequirement(VarbitID.MOURNING_LIGHT_TEMPLE_1_B_WEST, 1);
earthRune = new ItemRequirement("Earth rune", ItemID.EARTHRUNE).showConditioned(notTPWatchtower);
lawRune = new ItemRequirement("Law runes", ItemID.LAWRUNE).showConditioned(notTPWatchtower);
@@ -184,16 +184,20 @@ protected void setupRequirements()
crystalTrink = new ItemRequirement("Crystal Trinket", ItemID.MOURNING_CRYSTAL_TRINKET).showConditioned(notDeathRune).isNotConsumed();
highEss = new ItemRequirement("Pure or Daeyalt essence", ItemCollections.ESSENCE_HIGH)
.showConditioned(notDeathRune);
- newKey = new KeyringRequirement("New key", configManager, KeyringCollection.NEW_KEY).showConditioned(notDeathRune).isNotConsumed();
+
+ var hasCompletedSOTE = new QuestRequirement(QuestHelperQuest.SONG_OF_THE_ELVES, QuestState.FINISHED);
+
+ newKey = new KeyringRequirement("New key", configManager, KeyringCollection.NEW_KEY).showConditioned(notDeathRune).isNotConsumed().hideConditioned(hasCompletedSOTE);
newKey.setTooltip("Another can be found on the desk in the south-east room of the Mourner HQ basement.");
- mournerBoots = new ItemRequirement("Mourner boots", ItemID.MOURNING_MOURNER_BOOTS).isNotConsumed();
- gasMask = new ItemRequirement("Gas mask", ItemID.GASMASK).isNotConsumed();
- mournerGloves = new ItemRequirement("Mourner gloves", ItemID.MOURNING_MOURNER_GLOVES).isNotConsumed();
- mournerCloak = new ItemRequirement("Mourner cloak", ItemID.MOURNING_MOURNER_CLOAK).isNotConsumed();
- mournerTop = new ItemRequirement("Mourner top", ItemID.MOURNING_MOURNER_TOP).isNotConsumed();
- mournerTrousers = new ItemRequirement("Mourner trousers", ItemID.MOURNING_MOURNER_LEGS).isNotConsumed();
+
+ mournerBoots = new ItemRequirement("Mourner boots", ItemID.MOURNING_MOURNER_BOOTS).isNotConsumed().hideConditioned(hasCompletedSOTE);
+ gasMask = new ItemRequirement("Gas mask", ItemID.GASMASK).isNotConsumed().hideConditioned(hasCompletedSOTE);
+ mournerGloves = new ItemRequirement("Mourner gloves", ItemID.MOURNING_MOURNER_GLOVES).isNotConsumed().hideConditioned(hasCompletedSOTE);
+ mournerCloak = new ItemRequirement("Mourner cloak", ItemID.MOURNING_MOURNER_CLOAK).isNotConsumed().hideConditioned(hasCompletedSOTE);
+ mournerTop = new ItemRequirement("Mourner top", ItemID.MOURNING_MOURNER_TOP).isNotConsumed().hideConditioned(hasCompletedSOTE);
+ mournerTrousers = new ItemRequirement("Mourner trousers", ItemID.MOURNING_MOURNER_LEGS).isNotConsumed().hideConditioned(hasCompletedSOTE);
mournersOutfit = new ItemRequirements("Full mourners' outfit", gasMask, mournerTop, mournerTrousers,
- mournerCloak, mournerBoots, mournerGloves).showConditioned(notDeathRune).isNotConsumed();
+ mournerCloak, mournerBoots, mournerGloves).showConditioned(notDeathRune).isNotConsumed().hideConditioned(hasCompletedSOTE);
mournersOutfit.setTooltip("Another set can be obtained at the north entrance to Arandar.");
rake = new ItemRequirement("Rake", ItemID.RAKE)
.showConditioned(new Conditions(LogicType.OR, notPalmTree, notPoisonIvy)).isNotConsumed();
@@ -244,7 +248,7 @@ public void setupSteps()
moveHouse = new NpcStep(this, NpcID.POH_ESTATE_AGENT, new WorldPoint(2638, 3293, 0),
"Talk to an Estate agent and relocate your house to Yanille.", coins.quantity(25000));
moveHouse.addDialogStep("Can you move my house please?");
- yanPOH = new ObjectStep(this, 15482, new WorldPoint(2544, 3098, 0),
+ yanPOH = new ObjectStep(this, ObjectID.POH_YANILLE_PORTAL, new WorldPoint(2544, 3098, 0),
"Enter your house from the portal in Yanille.");
magicGuild = new ObjectStep(this, ObjectID.MAGICGUILD_DOOR_L, new WorldPoint(2584, 3088, 0),
@@ -257,7 +261,7 @@ public void setupSteps()
redSally = new ObjectStep(this, ObjectID.HUNTING_SAPLING_UP_RED, new WorldPoint(2474, 3239, 0),
"Catch a Red Salamander.", true, rope, smallFishingNet);
- recharge = new ObjectStep(this, 2638, new WorldPoint(2729, 3378, 0),
+ recharge = new ObjectStep(this, ObjectID.LG_TOTEM_POLE_LEGENDS, new WorldPoint(2729, 3378, 0),
"Recharge some jewellery at the Totem pole in the Legends' Guild.", rechargableJewelry);
monkeyCage = new NpcStep(this, NpcID.MM_MONKEY_MINDER, new WorldPoint(2607, 3277, 0),
@@ -287,19 +291,19 @@ public void setupSteps()
"Go down to the ground floor.", deathAccess, highEss, crystalTrink);
turnKeyMirror = new ObjectStep(this, ObjectID.MOURNING_TEMPLE_PILLAR_1_B, new WorldPoint(1881, 4639, 0),
"Enter the central area, and turn the pillar's mirror west.");
- deathAltar = new ObjectStep(this, 34823, new WorldPoint(1860, 4639, 0),
- "Enter the Death altar.", deathAccess, highEss, crystalTrink);
+ deathAltar = new ObjectStep(this, ObjectID.DEATHTEMPLE_RUINED, new WorldPoint(1860, 4639, 0),
+ "Enter the Death altar.", deathAccess.highlighted(), highEss, crystalTrink);
deathAltar.addIcon(ItemID.DEATH_TALISMAN);
deathRune = new ObjectStep(this, ObjectID.DEATH_ALTAR, new WorldPoint(2205, 4836, 0),
"Craft some death runes from essence."
+ "TURN THE MIDDLE PILLAR TO POINT BACK EAST OR YOU'LL HAVE TO RETURN VIA THE UNDERGROUND PASS.", highEss);
- poisonIvy = new ObjectStep(this, 7580, new WorldPoint(2618, 3226, 0),
+ poisonIvy = new ObjectStep(this, ObjectID.FARMING_BUSH_PATCH_4, new WorldPoint(2618, 3226, 0),
"Plant and harvest poison ivy in the Ardougne Monastery bush patch. " +
"If you're waiting for it to grow and want to complete further tasks, use the tick box on panel.",
rake, seedDib, poisonIvySeed);
- palmTree = new ObjectStep(this, 7963, new WorldPoint(2490, 3180, 0),
+ palmTree = new ObjectStep(this, ObjectID.FARMING_FRUIT_TREE_PATCH_2, new WorldPoint(2490, 3180, 0),
"Check the health of a palm tree near Tree Gnome Village. " +
"If you're waiting for it to grow and want to complete further tasks, use the tick box on panel.",
spade, rake, palmSap);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/ardougne/ArdougneMedium.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/ardougne/ArdougneMedium.java
index 3cf16b27895..f7ceb5f6fd1 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/ardougne/ArdougneMedium.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/ardougne/ArdougneMedium.java
@@ -55,6 +55,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import net.runelite.api.gameval.VarPlayerID;
import net.runelite.client.game.FishingSpot;
@@ -163,8 +164,8 @@ protected void setupRequirements()
notIbanUpgrade = new VarplayerRequirement(VarPlayerID.ARDOUNGE_ACHIEVEMENT_DIARY, false, 24);
notNecroTower = new VarplayerRequirement(VarPlayerID.ARDOUNGE_ACHIEVEMENT_DIARY, false, 25);
- notCWBallon = new VarbitRequirement(2869, 1);
- notCWBallon2 = new VarbitRequirement(2869, 0);
+ notCWBallon = new VarbitRequirement(VarbitID.ZEP_MULTI_CAST, 1);
+ notCWBallon2 = new VarbitRequirement(VarbitID.ZEP_MULTI_CAST, 0);
normalBook = new SpellbookRequirement(Spellbook.NORMAL);
combatGear = new ItemRequirement("Combat gear", -1, -1).isNotConsumed();
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/desert/DesertEasy.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/desert/DesertEasy.java
index 8d3ffe7d127..99af7a2e11e 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/desert/DesertEasy.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/desert/DesertEasy.java
@@ -217,24 +217,24 @@ public void setupSteps()
"Kill a vulture.", true);
killVulture.addAlternateNpcs(NpcID.RAG_VULTURE_FLYING);
- moveToPyramidPlunder = new ObjectStep(this, 26622, new WorldPoint(3289, 2800, 0),
+ moveToPyramidPlunder = new ObjectStep(this, ObjectID.NTK_PYRAMID_DOOR_NORTH_MULTI, new WorldPoint(3289, 2800, 0),
"Enter the Pyramid plunder minigame. If you don't see a Guardian mummy exit and try a different entrance.");
startPyramidPlunder = new NpcStep(this, NpcID.NTK_MUMMY_GUARDIAN, new WorldPoint(1934, 4427, 3),
"Talk to the guardian mummy to start the minigame. If you don't see a Guardian mummy exit and try a different entrance.");
startPyramidPlunder.addDialogStep("I know what I'm doing - let's get on with it.");
- openSarc = new ObjectStep(this, 26626, new WorldPoint(1928, 4465, 0),
+ openSarc = new ObjectStep(this, ObjectID.NTK_SARCOPHAGUS_MULTI, new WorldPoint(1928, 4465, 0),
"Open the sarcophagus in the first room.");
sellArtefact = new NpcStep(this, NpcID.AGILITY_PYRAMID_SIMON, new WorldPoint(3346, 2827, 0),
"Talk to Simon Templeton and sell your artefact.", pyramidPlunderArtefact);
sellArtefact.addDialogStep("Yes, show me the money.");
- enterKalph = new ObjectStep(this, 3827, new WorldPoint(3228, 3109, 0),
+ enterKalph = new ObjectStep(this, ObjectID.KALPHITE_BURROW_ENTRANCE, new WorldPoint(3228, 3109, 0),
"Use the rope on the entrance and enter the Kalphite Hive.", rope.highlighted());
enterKalph.addAlternateObjects(ObjectID.KALPHITE_BURROW_ENTRANCE_WITHROPE);
enterKalph.addIcon(ItemID.ROPE);
- enterKalphForCacti = new ObjectStep(this, 3827, new WorldPoint(3228, 3109, 0),
+ enterKalphForCacti = new ObjectStep(this, ObjectID.KALPHITE_BURROW_ENTRANCE, new WorldPoint(3228, 3109, 0),
"Use the rope on the entrance and enter the Kalphite Hive.", rope.highlighted());
enterKalphForCacti.addAlternateObjects(ObjectID.KALPHITE_BURROW_ENTRANCE_WITHROPE);
enterKalphForCacti.addIcon(ItemID.ROPE);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/desert/DesertElite.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/desert/DesertElite.java
index ed674161ff4..5ad42c5b9e8 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/desert/DesertElite.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/desert/DesertElite.java
@@ -171,7 +171,7 @@ protected void setupZones()
public void setupSteps()
{
- moveToPyramidPlunder = new ObjectStep(this, 26622, new WorldPoint(3289, 2800, 0),
+ moveToPyramidPlunder = new ObjectStep(this, ObjectID.NTK_PYRAMID_DOOR_NORTH_MULTI, new WorldPoint(3289, 2800, 0),
"Enter the Pyramid plunder minigame. If you don't see a Guardian mummy exit and try a different " +
"entrance.", true);
((ObjectStep) moveToPyramidPlunder).addAlternateObjects(ObjectID.NTK_PYRAMID_DOOR_EAST_MULTI, ObjectID.NTK_PYRAMID_DOOR_SOUTH_MULTI,
@@ -180,7 +180,7 @@ public void setupSteps()
"Talk to the guardian mummy to start the minigame.");
startPyramidPlunder.addDialogStep("I know what I'm doing - let's get on with it.");
- traversePyramid = new ObjectStep(this, 26618, new WorldPoint(1951, 4452, 0),
+ traversePyramid = new ObjectStep(this, ObjectID.NTK_TOMB_DOOR1, new WorldPoint(1951, 4452, 0),
"Go through each of the pyramid rooms until the final room.", true);
((ObjectStep) traversePyramid).setMaxObjectDistance(40);
((ObjectStep) traversePyramid).setMaxRenderDistance(10);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/desert/DesertHard.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/desert/DesertHard.java
index 014c79931c9..6e9c8b9b546 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/desert/DesertHard.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/desert/DesertHard.java
@@ -201,11 +201,11 @@ protected void setupZones()
public void setupSteps()
{
- moveToKalph = new ObjectStep(this, 3827, new WorldPoint(3228, 3109, 0),
+ moveToKalph = new ObjectStep(this, ObjectID.KALPHITE_BURROW_ENTRANCE, new WorldPoint(3228, 3109, 0),
"Use the rope on the entrance and enter the Kalphite Hive.", rope.highlighted().quantity(2));
moveToKalph.addAlternateObjects(ObjectID.KALPHITE_BURROW_ENTRANCE_WITHROPE);
moveToKalph.addIcon(ItemID.ROPE);
- kalphQueen = new ObjectStep(this, 23609, new WorldPoint(3510, 9498, 2),
+ kalphQueen = new ObjectStep(this, ObjectID.KALPHITE_CHAMBER_ENTRANCE_UPDATE, new WorldPoint(3510, 9498, 2),
"Climb down the tunnel entrance that leads to the Kalphite Queen and kill her.", rope);
kalphQueen.addAlternateObjects(10230);
kalphQueen.addIcon(ItemID.ROPE);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/desert/DesertMedium.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/desert/DesertMedium.java
index 5a46f14e848..d2be4ac2f37 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/desert/DesertMedium.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/desert/DesertMedium.java
@@ -208,7 +208,7 @@ protected void setupZones()
public void setupSteps()
{
- moveToEagle = new ObjectStep(this, 19790, new WorldPoint(2329, 3495, 0),
+ moveToEagle = new ObjectStep(this, ObjectID.EAGLEPEAK_ENTRANCE_CAVE_MULTI, new WorldPoint(2329, 3495, 0),
"Enter the cave at the top of Eagles' Peak. You can use a fairy ring to (AKQ), then head " +
"south to get there easily.");
eagleTravel = new NpcStep(this, NpcID.EAGLEPEAK_EAGLE_TODESERT, new WorldPoint(2027, 4964, 3),
@@ -240,7 +240,7 @@ public void setupSteps()
visitGenie = new NpcStep(this, NpcID.ELID_GENIE, new WorldPoint(3371, 9320, 0),
"Visit the genie.");
- moveToGenie = new ObjectStep(this, 10478, new WorldPoint(3374, 2904, 0),
+ moveToGenie = new ObjectStep(this, ObjectID.ELID_FALLOFF_5, new WorldPoint(3374, 2904, 0),
"Climb down the crevice west of Nardah.", rope, lightSource);
talkToSimon = new NpcStep(this, NpcID.AGILITY_PYRAMID_SIMON, new WorldPoint(3346, 2827, 0),
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/falador/FaladorElite.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/falador/FaladorElite.java
index 8db5ed4f72d..114ddbe74da 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/falador/FaladorElite.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/falador/FaladorElite.java
@@ -53,6 +53,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import net.runelite.api.gameval.VarPlayerID;
import java.util.ArrayList;
@@ -149,9 +150,9 @@ protected void setupRequirements()
faladorTeleport = new TeleportItemRequirement("Multiple Teleports to Falador", ItemID.POH_TABLET_FALADORTELEPORT, -1);
- magicTreeNearbyNotCheckedVar = new VarbitRequirement(4471, 60);
- magicTreeNearbyCheckedVar = new VarbitRequirement(4471, 61);
- stumpNearbyVar = new VarbitRequirement(4471, 62);
+ magicTreeNearbyNotCheckedVar = new VarbitRequirement(VarbitID.WESTERN_DIARY_EASY_COMPLETE, 60);
+ magicTreeNearbyCheckedVar = new VarbitRequirement(VarbitID.WESTERN_DIARY_EASY_COMPLETE, 61);
+ stumpNearbyVar = new VarbitRequirement(VarbitID.WESTERN_DIARY_EASY_COMPLETE, 62);
inAirAltar = new ZoneRequirement(airAltar);
inFaladorCastle1 = new ZoneRequirement(faladorCastle1);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/fremennik/DagRoute.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/fremennik/DagRoute.java
index 64cf077e40b..4075ccb267a 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/fremennik/DagRoute.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/fremennik/DagRoute.java
@@ -38,11 +38,11 @@
import net.runelite.client.plugins.microbot.questhelper.requirements.zone.ZoneRequirement;
import net.runelite.client.plugins.microbot.questhelper.steps.*;
import net.runelite.api.Prayer;
-import net.runelite.api.SpriteID;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.SpriteID;
import java.util.List;
@@ -161,21 +161,21 @@ public void setupConditions()
public void setupSteps()
{
moveToWaterbirth = steps.get(null);
- moveToDagCave = new ObjectStep(questHelper, 8929, new WorldPoint(2521, 3740, 0),
+ moveToDagCave = new ObjectStep(questHelper, ObjectID.DAGANNOTH_CAVEENTRANCE_ROCK, new WorldPoint(2521, 3740, 0),
"Enter the cave and pray melee. Make sure you are full stamina and prayer before entering.", protectMelee,
thrownaxe, petRock, food, stamPot, prayerPot);
- dropPetRock = new ObjectStep(questHelper, 8965, new WorldPoint(2490, 10162, 0),
+ dropPetRock = new ObjectStep(questHelper, ObjectID.DAGANNOTH_PRESSURE_PAD_2, new WorldPoint(2490, 10162, 0),
"Drop your pet rock on one pressure pad then stand on the other pad to open the gate.", petRock);// item on tile req?
dropPetRock.addIcon(ItemID.VT_USELESS_ROCK);
- dropPetRock.addTileMarker(new WorldPoint(2490, 10164, 0), SpriteID.SKILL_AGILITY);
- moveToAxeSpot = new ObjectStep(questHelper, 8945, new WorldPoint(2545, 10146, 0),
+ dropPetRock.addTileMarker(new WorldPoint(2490, 10164, 0), SpriteID.Staticons.AGILITY);
+ moveToAxeSpot = new ObjectStep(questHelper, ObjectID.DAGANNOTH_DUGUPSOIL_2, new WorldPoint(2545, 10146, 0),
"Continue onwards until you reach the barrier.", thrownaxe);
activateSpecial = new DetailedQuestStep(questHelper, "Activate special attack with the rune thrownaxes equipped.",
thrownaxe.equipped(), specialAttackEnabled);
throwAxe = new NpcStep(questHelper, 2253, new WorldPoint(2543, 10143, 0),
"Attack the Door-Support with a rune thrownaxe special attack. If done correctly the axe should ricochet" +
" and lower all 3 barriers.", thrownaxe.equipped(), specialAttackEnabled);
- moveToDagCave1 = new ObjectStep(questHelper, 10177, new WorldPoint(2546, 10143, 0),
+ moveToDagCave1 = new ObjectStep(questHelper, ObjectID.DAGANNOTH_LADDER_BASE_EXT2, new WorldPoint(2546, 10143, 0),
"Enable magic protection then climb down the ladder.", protectMagic);
moveToDagCave1.addDialogSteps("Climb Down.");
moveToDagCave2 = new ObjectStep(questHelper, ObjectID.DAGEXP_LADDER1, new WorldPoint(1808, 4405, 3),
@@ -200,7 +200,7 @@ public void setupSteps()
"Keep current protection and continue through the cave.", protectMelee);
moveToDagCave12 = new ObjectStep(questHelper, ObjectID.DAGEXP_LADDER21, new WorldPoint(1890, 4407, 1),
"Keep current protection and continue through the cave.", protectMelee);
- moveToDagKings = new ObjectStep(questHelper, 3831, new WorldPoint(1911, 4367, 0),
+ moveToDagKings = new ObjectStep(questHelper, ObjectID.DAGEXP_BOSSROOMLADDER_DOWN, new WorldPoint(1911, 4367, 0),
"Enter the Kings' lair.", protectMelee);
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/fremennik/FremennikElite.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/fremennik/FremennikElite.java
index 18e07a6cbac..43b00dee037 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/fremennik/FremennikElite.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/fremennik/FremennikElite.java
@@ -50,11 +50,11 @@
import net.runelite.api.Prayer;
import net.runelite.api.QuestState;
import net.runelite.api.Skill;
-import net.runelite.api.SpriteID;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.SpriteID;
import net.runelite.api.gameval.VarPlayerID;
import java.util.ArrayList;
@@ -264,9 +264,9 @@ protected void setupZones()
public void setupSteps()
{
- rellRooftop = new ObjectStep(this, 14946, new WorldPoint(2625, 3677, 0),
+ rellRooftop = new ObjectStep(this, ObjectID.ROOFTOPS_RELLEKKA_WALLCLIMB, new WorldPoint(2625, 3677, 0),
"Complete a lap of the Rellekka Rooftop course.");
- dragonAmulet = new ObjectStep(this, 21303, new WorldPoint(2344, 3811, 0),
+ dragonAmulet = new ObjectStep(this, ObjectID.IZNOT_CLAY_FORGE, new WorldPoint(2344, 3811, 0),
"Smelt a dragonstone amulet on the clay forge.");
dragonAmulet.addIcon(ItemID.UNSTRUNG_DRAGONSTONE_AMULET);
moveToPirates = new NpcStep(this, NpcID.LUNAR_FREMENNIK_PIRATE_BY_PIRATESHIP, new WorldPoint(2620, 3693, 0),
@@ -287,9 +287,9 @@ public void setupSteps()
"Speak with Maria Gunnars to travel to Neitiznot.");
- moveToGodWarsSM = new ObjectStep(this, 26419, new WorldPoint(2919, 3747, 0),
+ moveToGodWarsSM = new ObjectStep(this, ObjectID.GODWARS_ENTRANCE_MULTI, new WorldPoint(2919, 3747, 0),
"Go down the hole. Bring a rope if this is your first time entering.", combatGear, food);
- moveToGodWarsGWD = new ObjectStep(this, 26419, new WorldPoint(2919, 3747, 0),
+ moveToGodWarsGWD = new ObjectStep(this, ObjectID.GODWARS_ENTRANCE_MULTI, new WorldPoint(2919, 3747, 0),
"Go down the hole. Bring a rope if this is your first time entering.", combatGear, food);
godwarsGenerals = new NpcStep(this, NpcID.GODWARS_ARMADYL_AVATAR, new WorldPoint(2832, 5301, 2),
"Get kills for a faction then kill its respective general.", true);
@@ -308,17 +308,17 @@ public void setupSteps()
moveToWaterbirth.addDialogStep("What Jarvald is doing.");
moveToWaterbirth.addDialogStep("Can I come?");
moveToWaterbirth.addDialogStep("YES");
- moveToDagCave = new ObjectStep(this, 8929, new WorldPoint(2521, 3740, 0),
+ moveToDagCave = new ObjectStep(this, ObjectID.DAGANNOTH_CAVEENTRANCE_ROCK, new WorldPoint(2521, 3740, 0),
"Enter cave and pray melee. Make sure you are full stam and prayer before entering.", protectMelee);
- dropPetRock = new ObjectStep(this, 8965, new WorldPoint(2490, 10162, 0),
+ dropPetRock = new ObjectStep(this, ObjectID.DAGANNOTH_PRESSURE_PAD_2, new WorldPoint(2490, 10162, 0),
"Drop your pet rock on one pressure pad then stand on the other pad to open the gate.", petRock);// item on tile req?
dropPetRock.addIcon(ItemID.VT_USELESS_ROCK);
- dropPetRock.addTileMarker(new WorldPoint(2490, 10164, 0), SpriteID.SKILL_AGILITY);
- moveToAxeSpot = new ObjectStep(this, 8945, new WorldPoint(2545, 10146, 0),
+ dropPetRock.addTileMarker(new WorldPoint(2490, 10164, 0), SpriteID.Staticons.AGILITY);
+ moveToAxeSpot = new ObjectStep(this, ObjectID.DAGANNOTH_DUGUPSOIL_2, new WorldPoint(2545, 10146, 0),
"Continue onwards until you reach the barrier.");
- throwAxe = new NpcStep(this, 2253, new WorldPoint(2543, 10143, 0),
+ throwAxe = new NpcStep(this, NpcID.DAGANNOTH_WEAK_DOOR_WEST, new WorldPoint(2543, 10143, 0),
"Attack the Door-Support with a rune thrownaxe special attack. If done correctly the axe should ricochet and lower all 3 barriers.", thrownaxe.equipped(), specialAttackEnabled);
- moveToDagCave1 = new ObjectStep(this, 10177, new WorldPoint(2546, 10143, 0),
+ moveToDagCave1 = new ObjectStep(this, ObjectID.DAGANNOTH_LADDER_BASE_EXT2, new WorldPoint(2546, 10143, 0),
"Enable magic protection then climb down the ladder.", protectMagic);
moveToDagCave1.addDialogSteps("Climb Down.");
moveToDagCave2 = new ObjectStep(this, ObjectID.DAGEXP_LADDER1, new WorldPoint(1808, 4405, 3),
@@ -345,7 +345,7 @@ public void setupSteps()
"Continue through the cave.", protectMelee);
moveToDagCave13 = new ObjectStep(this, ObjectID.DAGEXP_LADDER23, new WorldPoint(1957, 4371, 0),
"Continue through the cave.", protectMelee);
- moveToDagKings = new ObjectStep(this, 3831, new WorldPoint(1911, 4367, 0),
+ moveToDagKings = new ObjectStep(this, ObjectID.DAGEXP_BOSSROOMLADDER_DOWN, new WorldPoint(1911, 4367, 0),
"Enter the Kings' lair.", protectMelee);
dagKings = new NpcStep(this, NpcID.DAGCAVE_MELEE_BOSS, new WorldPoint(2913, 4449, 0),
"Kill each of the Dagannoth Kings.", true, combatGear);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/fremennik/FremennikHard.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/fremennik/FremennikHard.java
index 04758883fc0..616f6e2bcbb 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/fremennik/FremennikHard.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/fremennik/FremennikHard.java
@@ -246,12 +246,12 @@ public void setupSteps()
moveToJatizso.addDialogStep("Can you ferry me to Jatizso?");
moveToMine = new ObjectStep(this, ObjectID.FRISD_IZSO_MINE_ENTRANCE, new WorldPoint(2398, 3813, 0),
"Go down the staircase.");
- mineAddy = new ObjectStep(this, 11374, new WorldPoint(2402, 10189, 0),
+ mineAddy = new ObjectStep(this, ObjectID.ADAMANTITEROCK1, new WorldPoint(2402, 10189, 0),
"Mine 5 Adamantite ores.", pickaxe);
mineAddy.addIcon(ItemID.RUNE_PICKAXE);
moveToMisc = new NpcStep(this, NpcID.VIKING_SAILOR, new WorldPoint(2630, 3692, 0),
"Speak to the sailor to go to Miscellania.");
- miscSupport = new ObjectStep(this, 15084, new WorldPoint(2527, 3849, 0),
+ miscSupport = new ObjectStep(this, ObjectID.MISC_HERB_MULTILOC, new WorldPoint(2527, 3849, 0),
"Rake the herb and flax patch until 100% support.", true, rake);
miscSupport.addAlternateObjects(15079);
tpWaterbirth = new DetailedQuestStep(this,
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/fremennik/FremennikMedium.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/fremennik/FremennikMedium.java
index 56490701a35..3da8361af4f 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/fremennik/FremennikMedium.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/fremennik/FremennikMedium.java
@@ -51,11 +51,11 @@
import net.runelite.api.Prayer;
import net.runelite.api.QuestState;
import net.runelite.api.Skill;
-import net.runelite.api.SpriteID;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.SpriteID;
import net.runelite.api.gameval.VarPlayerID;
import java.util.ArrayList;
@@ -308,14 +308,14 @@ public void setupSteps()
enterBrineCave.addIcon(ItemID.SPADE);
slayBrineRat = new NpcStep(this, NpcID.OLAF2_BRINE_RATS, new WorldPoint(2706, 10133, 0),
"Kill a brine rat then roll the boulder and exit the cave..", true);
- travelMisc = new ObjectStep(this, 29495, new WorldPoint(2744, 3719, 0),
+ travelMisc = new ObjectStep(this, ObjectID.FAIRYRING_MINORHUB, new WorldPoint(2744, 3719, 0),
"Use a fairy ring and travel to (CIP).", fairyTaleII);
- enterEaglesPeak = new ObjectStep(this, 19790, new WorldPoint(2329, 3495, 0),
+ enterEaglesPeak = new ObjectStep(this, ObjectID.EAGLEPEAK_ENTRANCE_CAVE_MULTI, new WorldPoint(2329, 3495, 0),
"Enter the cave at the top of Eagles' Peak. Use fairy ring and travel to (AKQ), then head south.", rope);
snowyHunter = new NpcStep(this, NpcID.EAGLEPEAK_EAGLE_TOPOLAR, new WorldPoint(2027, 4964, 3),
"Use rope on the Polar Eagle to travel to the Snowy Hunter area.", rope.highlighted());
snowyHunter.addIcon(ItemID.ROPE);
- exitIceCave = new ObjectStep(this, 19764, new WorldPoint(2706, 10205, 0), "Exit the cave.");
+ exitIceCave = new ObjectStep(this, ObjectID.EAGLEPEAK_ICE_CAVE_ENTRANCE, new WorldPoint(2706, 10205, 0), "Exit the cave.");
snowyKnight0 = new NpcStep(this, NpcID.BUTTERFLY_SNOWY, new WorldPoint(2725, 3770, 0),
"Catch a Snowy Knight at the Fremennik Hunter Area.", butterFlyNet.equipped());
snowyKnight1 = new NpcStep(this, NpcID.BUTTERFLY_SNOWY, new WorldPoint(2712, 3822, 1),
@@ -341,21 +341,21 @@ public void setupSteps()
moveToWaterbirth = new NpcStep(this, NpcID.VIKING_DAGGANOTH_CAVE_FERRYMAN_ISLAND, new WorldPoint(2620, 3686, 0),
"Speak with Jarvald to travel to Waterbirth Island.", petRock, thrownaxe);
moveToWaterbirth.addDialogSteps("What Jarvald is doing.", "Can I come?", "YES");
- moveToDagCave = new ObjectStep(this, 8929, new WorldPoint(2521, 3740, 0),
+ moveToDagCave = new ObjectStep(this, ObjectID.DAGANNOTH_CAVEENTRANCE_ROCK, new WorldPoint(2521, 3740, 0),
"Enter the cave and pray melee. Make sure you are full stamina and prayer before entering.", protectMelee,
thrownaxe, petRock, food, stamPot, prayerPot);
- dropPetRock = new ObjectStep(this, 8965, new WorldPoint(2490, 10162, 0),
+ dropPetRock = new ObjectStep(this, ObjectID.DAGANNOTH_PRESSURE_PAD_2, new WorldPoint(2490, 10162, 0),
"Drop your pet rock on one pressure pad then stand on the other pad to open the gate.", petRock);// item on tile req?
dropPetRock.addIcon(ItemID.VT_USELESS_ROCK);
- dropPetRock.addTileMarker(new WorldPoint(2490, 10164, 0), SpriteID.SKILL_AGILITY);
- moveToAxeSpot = new ObjectStep(this, 8945, new WorldPoint(2545, 10146, 0),
+ dropPetRock.addTileMarker(new WorldPoint(2490, 10164, 0), SpriteID.Staticons.AGILITY);
+ moveToAxeSpot = new ObjectStep(this, ObjectID.DAGANNOTH_DUGUPSOIL_2, new WorldPoint(2545, 10146, 0),
"Continue onwards until you reach the barrier.", thrownaxe);
activateSpecial = new DetailedQuestStep(this, "Activate special attack with the rune thrownaxes equipped.",
thrownaxe.equipped(), specialAttackEnabled);
- throwAxe = new NpcStep(this, 2253, new WorldPoint(2543, 10143, 0),
+ throwAxe = new NpcStep(this, NpcID.DAGANNOTH_WEAK_DOOR_WEST, new WorldPoint(2543, 10143, 0),
"Attack the Door-Support with a rune thrownaxe special attack. If done correctly the axe should ricochet" +
" and lower all 3 barriers.", thrownaxe.equipped(), specialAttackEnabled);
- moveToDagCave1 = new ObjectStep(this, 10177, new WorldPoint(2546, 10143, 0),
+ moveToDagCave1 = new ObjectStep(this, ObjectID.DAGANNOTH_LADDER_BASE_EXT2, new WorldPoint(2546, 10143, 0),
"Enable magic protection then climb down the ladder.", protectMagic);
moveToDagCave1.addDialogSteps("Climb Down.");
moveToDagCave2 = new ObjectStep(this, ObjectID.DAGEXP_LADDER1, new WorldPoint(1808, 4405, 3),
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/karamja/KaramjaEasy.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/karamja/KaramjaEasy.java
index 507f4ba2b90..1f950a9da85 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/karamja/KaramjaEasy.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/karamja/KaramjaEasy.java
@@ -125,15 +125,15 @@ protected void setupRequirements()
seaweed = new ItemRequirement("Seaweed", ItemID.SEAWEED);
notPickedBananas = new VarbitRequirement(VarbitID.ATJUN_EASY_BANANA, 4, Operation.LESS_EQUAL);
- notSwungOnRope = new VarbitRequirement(3567, 0);
- notMinedGold = new VarbitRequirement(3568, 0);
- notGoneToSarim = new VarbitRequirement(3569, 0);
- notGoneToArdougne = new VarbitRequirement(3570, 0);
- notGoneToCairn = new VarbitRequirement(3571, 0);
- notFished = new VarbitRequirement(3572, 0);
+ notSwungOnRope = new VarbitRequirement(VarbitID.ATJUN_EASY_SWING, 0);
+ notMinedGold = new VarbitRequirement(VarbitID.ATJUN_EASY_GOLD, 0);
+ notGoneToSarim = new VarbitRequirement(VarbitID.ATJUN_EASY_BOAT_SARIM, 0);
+ notGoneToArdougne = new VarbitRequirement(VarbitID.ATJUN_EASY_BOAT_ARDY, 0);
+ notGoneToCairn = new VarbitRequirement(VarbitID.ATJUN_EASY_CAIRN, 0);
+ notFished = new VarbitRequirement(VarbitID.ATJUN_EASY_FISHING, 0);
notPickedUpSeaweed = new VarbitRequirement(VarbitID.ATJUN_EASY_SEAWEED, 4, Operation.LESS_EQUAL);
- notEnteredFightCave = new VarbitRequirement(3574, 0);
- notKilledJogre = new VarbitRequirement(3575, 0);
+ notEnteredFightCave = new VarbitRequirement(VarbitID.ATJUN_EASY_TZHAAR, 0);
+ notKilledJogre = new VarbitRequirement(VarbitID.ATJUN_EASY_JOGRE, 0);
pickaxe = new ItemRequirement("Any pickaxe", ItemCollections.PICKAXES).showConditioned(notMinedGold).isNotConsumed();
coins = new ItemRequirement("Coins", ItemCollections.COINS).showConditioned(new Conditions(LogicType.OR,
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/karamja/KaramjaHard.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/karamja/KaramjaHard.java
index 52ac01e77a9..0769ccd2a3d 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/karamja/KaramjaHard.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/karamja/KaramjaHard.java
@@ -149,16 +149,16 @@ public QuestStep loadStep()
@Override
protected void setupRequirements()
{
- notBecomeChampion = new VarbitRequirement(3600, 0);
- notKilledZek = new VarbitRequirement(3601, 0);
- notEatenWrap = new VarbitRequirement(3602, 0);
- notCraftedNature = new VarbitRequirement(3603, 0);
- notCookedKarambwan = new VarbitRequirement(3604, 0);
- notKilledDeathwing = new VarbitRequirement(3605, 0);
- notUsedShortcut = new VarbitRequirement(3606, 0);
+ notBecomeChampion = new VarbitRequirement(VarbitID.ATJUN_HARD_FIGHTPITS, 0);
+ notKilledZek = new VarbitRequirement(VarbitID.ATJUN_HARD_FIGHTCAVE, 0);
+ notEatenWrap = new VarbitRequirement(VarbitID.ATJUN_HARD_OOMLIE, 0);
+ notCraftedNature = new VarbitRequirement(VarbitID.ATJUN_HARD_NATURE, 0);
+ notCookedKarambwan = new VarbitRequirement(VarbitID.ATJUN_HARD_KARAMBWAN, 0);
+ notKilledDeathwing = new VarbitRequirement(VarbitID.ATJUN_HARD_DEATHWING, 0);
+ notUsedShortcut = new VarbitRequirement(VarbitID.ATJUN_HARD_XBOW, 0);
notCollectedLeaves = new VarbitRequirement(VarbitID.ATJUN_HARD_PALM, 4, Operation.LESS_EQUAL);
- notAssignedTask = new VarbitRequirement(3608, 0);
- notKilledDragon = new VarbitRequirement(3609, 0);
+ notAssignedTask = new VarbitRequirement(VarbitID.ATJUN_HARD_DURADEL, 0);
+ notKilledDragon = new VarbitRequirement(VarbitID.ATJUN_HARD_DRAGON, 0);
pickaxe = new ItemRequirement("Any pickaxe", ItemCollections.PICKAXES).showConditioned(notKilledDeathwing).isNotConsumed();
coins = new ItemRequirement("Coins", ItemCollections.COINS).showConditioned(notKilledDragon);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/karamja/KaramjaMedium.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/karamja/KaramjaMedium.java
index 2ba9f9c7ed4..842347b4ee1 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/karamja/KaramjaMedium.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/karamja/KaramjaMedium.java
@@ -46,6 +46,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import java.util.*;
@@ -168,25 +169,25 @@ public Map loadSteps()
@Override
protected void setupRequirements()
{
- notClaimedTicket = new VarbitRequirement(3579, 0);
- notEnteredWall = new VarbitRequirement(3580, 0);
- notEnteredCrandor = new VarbitRequirement(3581, 0);
- notUsedCart = new VarbitRequirement(3582, 0);
- notEarned100 = new VarbitRequirement(3583, 0);
- notCookedSpider = new VarbitRequirement(3584, 0);
- notMinedRedRopaz = new VarbitRequirement(3585, 0);
- notCutTeak = new VarbitRequirement(3586, 0);
- notCutMahog = new VarbitRequirement(3587, 0);
- notCaughtKarambwan = new VarbitRequirement(3588, 0);
- notExchangedGems = new VarbitRequirement(3589, 0);
- notUsedGlider = new VarbitRequirement(3590, 0);
- notGrownFruitTree = new VarbitRequirement(3591, 0);
- notTrappedGraahk = new VarbitRequirement(3592, 0);
- notCutVine = new VarbitRequirement(3593, 0);
- notCrossedLava = new VarbitRequirement(3594, 0);
- notClimbedStairs = new VarbitRequirement(3595, 0);
- notTraveledToKhazard = new VarbitRequirement(3596, 0);
- notCharteredFromShipyard = new VarbitRequirement(3597, 0);
+ notClaimedTicket = new VarbitRequirement(VarbitID.ATJUN_MED_AGILITY, 0);
+ notEnteredWall = new VarbitRequirement(VarbitID.ATJUN_MED_VOLCANO, 0);
+ notEnteredCrandor = new VarbitRequirement(VarbitID.ATJUN_MED_CRANDOR, 0);
+ notUsedCart = new VarbitRequirement(VarbitID.ATJUN_MED_CART, 0);
+ notEarned100 = new VarbitRequirement(VarbitID.ATJUN_MED_CLEANUP, 0);
+ notCookedSpider = new VarbitRequirement(VarbitID.ATJUN_MED_SPIDER, 0);
+ notMinedRedRopaz = new VarbitRequirement(VarbitID.ATJUN_MED_TOPAZ, 0);
+ notCutTeak = new VarbitRequirement(VarbitID.ATJUN_MED_TEAK, 0);
+ notCutMahog = new VarbitRequirement(VarbitID.ATJUN_MED_MAHOGANY, 0);
+ notCaughtKarambwan = new VarbitRequirement(VarbitID.ATJUN_MED_KARAMBWAN, 0);
+ notExchangedGems = new VarbitRequirement(VarbitID.ATJUN_MED_MACHETTE, 0);
+ notUsedGlider = new VarbitRequirement(VarbitID.ATJUN_MED_GLIDER, 0);
+ notGrownFruitTree = new VarbitRequirement(VarbitID.ATJUN_MED_FARMING, 0);
+ notTrappedGraahk = new VarbitRequirement(VarbitID.ATJUN_MED_GRAAHK, 0);
+ notCutVine = new VarbitRequirement(VarbitID.ATJUN_MED_SHILO_VINES, 0);
+ notCrossedLava = new VarbitRequirement(VarbitID.ATJUN_MED_SHILO_LAVA, 0);
+ notClimbedStairs = new VarbitRequirement(VarbitID.ATJUN_MED_SHILO_STAIRS, 0);
+ notTraveledToKhazard = new VarbitRequirement(VarbitID.ATJUN_MED_KHAZARD, 0);
+ notCharteredFromShipyard = new VarbitRequirement(VarbitID.ATJUN_MED_CHARTER, 0);
pickaxe = new ItemRequirement("Any pickaxe", ItemCollections.PICKAXES)
.showConditioned(new Conditions(LogicType.OR, notMinedRedRopaz, notEarned100)).isNotConsumed();
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/kourend/KourendEasy.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/kourend/KourendEasy.java
index e1b5dedcfa0..64669b15045 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/kourend/KourendEasy.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/kourend/KourendEasy.java
@@ -46,6 +46,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import net.runelite.api.gameval.VarPlayerID;
import java.util.ArrayList;
@@ -182,7 +183,7 @@ protected void setupRequirements()
inCastleF1 = new ZoneRequirement(castleF1);
inCastleF2 = new ZoneRequirement(castleF2);
- houseInKourend = new VarbitRequirement(2187, 8);
+ houseInKourend = new VarbitRequirement(VarbitID.POH_HOUSE_LOCATION, 8);
}
@Override
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/kourend/KourendHard.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/kourend/KourendHard.java
index 2bbbda764ab..f5532f0fdac 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/kourend/KourendHard.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/kourend/KourendHard.java
@@ -233,7 +233,7 @@ public void setupSteps()
// Smelt an adamantite bar
enterForsakenTower = new DetailedQuestStep(this, new WorldPoint(1382, 3818, 0),
"Enter the Forsaken Tower.", adamantiteOre, coal.quantity(6));
- smeltAddyBar = new ObjectStep(this, 34591, "Smelt an adamantite bar.", adamantiteOre,
+ smeltAddyBar = new ObjectStep(this, ObjectID.LOVAQUEST_TOWER_FURNACE, "Smelt an adamantite bar.", adamantiteOre,
coal.quantity(6));
smeltAddyBar.addSubSteps(enterForsakenTower);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/kourend/KourendMedium.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/kourend/KourendMedium.java
index fb8015b9596..ffe5a31eab8 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/kourend/KourendMedium.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/kourend/KourendMedium.java
@@ -213,7 +213,7 @@ protected void setupRequirements()
// Zone requirements
inMolchIsland = new ZoneRequirement(molchIsland);
- hasBird = new VarbitRequirement(5983, 1);
+ hasBird = new VarbitRequirement(VarbitID.SETTINGS_BARBARIAN_POTION_MAKEX, 1);
}
@Override
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/lumbridgeanddraynor/LumbridgeEasy.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/lumbridgeanddraynor/LumbridgeEasy.java
index f7adbd004e5..8898df2a500 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/lumbridgeanddraynor/LumbridgeEasy.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/lumbridgeanddraynor/LumbridgeEasy.java
@@ -49,6 +49,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import net.runelite.api.gameval.VarPlayerID;
import java.util.ArrayList;
@@ -156,7 +157,7 @@ protected void setupRequirements()
notIron = new VarplayerRequirement(VarPlayerID.LUMB_DRAY_ACHIEVEMENT_DIARY, false, 11);
notEnterHAM = new VarplayerRequirement(VarPlayerID.LUMB_DRAY_ACHIEVEMENT_DIARY, false, 12);
- addedRopeToHole = new VarbitRequirement(279, 1);
+ addedRopeToHole = new VarbitRequirement(VarbitID.SWAMP_CAVES_ROPED_ENTRANCE, 1);
lightSource = new ItemRequirement("Light source", ItemCollections.LIGHT_SOURCES).showConditioned(notKillCaveBug).isNotConsumed();
rope = new ItemRequirement("Rope", ItemID.ROPE).showConditioned(notKillCaveBug);
@@ -210,7 +211,7 @@ protected void setupZones()
public void setupSteps()
{
- drayAgi = new ObjectStep(this, 11404, new WorldPoint(3103, 3279, 0),
+ drayAgi = new ObjectStep(this, ObjectID.ROOFTOPS_DRAYNOR_WALLCLIMB, new WorldPoint(3103, 3279, 0),
"Complete a lap of the Draynor Rooftop Course.");
moveToDraySewer = new ObjectStep(this, ObjectID.VAMPIRE_TRAP2, new WorldPoint(3118, 3244, 0),
@@ -242,7 +243,7 @@ public void setupSteps()
killCaveBug = new NpcStep(this, NpcID.SWAMP_CAVE_BUG, new WorldPoint(3151, 9574, 0),
"Kill a Cave Bug.", true, combatGear, lightSource);
- moveToWaterAltar = new ObjectStep(this, 34815, new WorldPoint(3185, 3165, 0),
+ moveToWaterAltar = new ObjectStep(this, ObjectID.WATERTEMPLE_RUINED, new WorldPoint(3185, 3165, 0),
"Enter the water altar in Lumbridge Swamp.", waterAccessOrAbyss.highlighted(), runeEss);
moveToWaterAltar.addIcon(ItemID.WATER_TALISMAN);
waterRune = new ObjectStep(this, ObjectID.WATER_ALTAR, new WorldPoint(2716, 4836, 0),
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/lumbridgeanddraynor/LumbridgeElite.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/lumbridgeanddraynor/LumbridgeElite.java
index d18f7a27427..a1180503c94 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/lumbridgeanddraynor/LumbridgeElite.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/lumbridgeanddraynor/LumbridgeElite.java
@@ -48,11 +48,11 @@
import net.runelite.client.plugins.microbot.questhelper.steps.emote.QuestEmote;
import net.runelite.api.QuestState;
import net.runelite.api.Skill;
-import net.runelite.api.VarPlayer;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import net.runelite.api.gameval.VarPlayerID;
import java.util.ArrayList;
@@ -132,7 +132,7 @@ protected void setupRequirements()
notWaterRunes = new VarplayerRequirement(VarPlayerID.LUMB_DRAY_ACHIEVEMENT_DIARY2, false, 8);
notQCEmote = new VarplayerRequirement(VarPlayerID.LUMB_DRAY_ACHIEVEMENT_DIARY2, false, 9);
- allQuests = new VarComparisonRequirement(VarType.VARP, VarPlayer.QUEST_POINTS, VarType.VARBIT, 1782, Operation.EQUAL, "All quests completed");
+ allQuests = new VarComparisonRequirement(VarType.VARP, VarPlayerID.QP, VarType.VARBIT, VarbitID.QP_MAX, Operation.EQUAL, "All quests completed");
lockpick = new ItemRequirement("Lockpick", ItemID.LOCKPICK).showConditioned(notRichChest).isNotConsumed();
crossbow = new ItemRequirement("Crossbow", ItemCollections.CROSSBOWS).showConditioned(notMovario).isNotConsumed();
@@ -187,7 +187,7 @@ public void setupSteps()
qcEmote = new EmoteStep(this, QuestEmote.SKILL_CAPE, new WorldPoint(3088, 3253, 0),
"Perform the skill cape emote with the quest cape equipped.", qcCape.equipped());
- moveToWater = new ObjectStep(this, 34815, new WorldPoint(3185, 3165, 0),
+ moveToWater = new ObjectStep(this, ObjectID.WATERTEMPLE_RUINED, new WorldPoint(3185, 3165, 0),
"Enter the water altar.", waterAccessOrAbyss.highlighted(), essence.quantity(28));
waterRunes = new ObjectStep(this, ObjectID.WATER_ALTAR, new WorldPoint(2716, 4836, 0),
"Craft water runes.", essence.quantity(28));
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/lumbridgeanddraynor/LumbridgeHard.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/lumbridgeanddraynor/LumbridgeHard.java
index 82b06a2a4f5..971e486b484 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/lumbridgeanddraynor/LumbridgeHard.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/lumbridgeanddraynor/LumbridgeHard.java
@@ -256,7 +256,7 @@ public void setupSteps()
waterRune, natureRune);
unlockBonesToPeaches = new DetailedQuestStep(this, "Unlock bones to peaches from the Mage Training Arena.");
- wakaToEdge = new ObjectStep(this, 12163, new WorldPoint(3242, 3237, 0),
+ wakaToEdge = new ObjectStep(this, ObjectID.CANOEING_CANOESTATION_LUMBRIDGE, new WorldPoint(3242, 3237, 0),
"Use the canoe station in lumbridge to make a Waka and travel to Edgeville.", axe);
smeltAmmy = new ObjectStep(this, ObjectID.FAI_FALADOR_FURNACE, new WorldPoint(3227, 3257, 0),
@@ -274,7 +274,7 @@ public void setupSteps()
moveToBasementForGloves = new ObjectStep(this, ObjectID.QIP_COOK_TRAPDOOR_OPEN, new WorldPoint(3209, 3216, 0),
"Climb down the trapdoor in the Lumbridge Castle.", coins);
- barrowsGloves = new ObjectStep(this, 12308, new WorldPoint(3219, 9623, 0),
+ barrowsGloves = new ObjectStep(this, ObjectID.HUNDRED_GOODCHEST, new WorldPoint(3219, 9623, 0),
"Purchase the barrows gloves from the bank chest. Right click and select 'Buy-items'.",
coins);
// 12308 is mine and I only have FULL access, and the ELITE version wouldn't make sense here
@@ -310,7 +310,7 @@ public void setupSteps()
moveToCosmic.addIcon(ItemID.COSMIC_TALISMAN);
cosmics = new ObjectStep(this, ObjectID.COSMIC_ALTAR, new WorldPoint(2142, 4833, 0),
"Craft 56 cosmic runes.", essence);
- belladonna = new ObjectStep(this, 7572, new WorldPoint(3087, 3355, 0),
+ belladonna = new ObjectStep(this, ObjectID.FARMING_BELLADONNA_PATCH, new WorldPoint(3087, 3355, 0),
"Grow and pick some belladonna from the Draynor Manor farming patch. " +
"If you're waiting for it to grow and want to complete further tasks, use the tick box on panel.",
bellaSeed, rake, spade, gloves, seedDib);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/lumbridgeanddraynor/LumbridgeMedium.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/lumbridgeanddraynor/LumbridgeMedium.java
index c9416a076a2..8d8fa99fb92 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/lumbridgeanddraynor/LumbridgeMedium.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/lumbridgeanddraynor/LumbridgeMedium.java
@@ -211,7 +211,7 @@ public void setupSteps()
grappleLum = new ObjectStep(this, ObjectID.XBOWS_RAFT_BR, new WorldPoint(3252, 3179, 0),
"Grapple across the River Lum.", mithGrap.equipped(), crossbow.equipped());
- moveToLavaAltar = new ObjectStep(this, 34817, new WorldPoint(3313, 3255, 0),
+ moveToLavaAltar = new ObjectStep(this, ObjectID.FIRETEMPLE_RUINED, new WorldPoint(3313, 3255, 0),
"Enter the fire altar north of Al Kharid.", fireAccess);
craftLava = new ObjectStep(this, ObjectID.FIRE_ALTAR, new WorldPoint(2585, 4838, 0),
"Use an earth talisman on the fire altar.", earthTali.highlighted(), essence, earthRune);
@@ -252,7 +252,7 @@ public void setupSteps()
"Catch an essence or eclectic impling in Puro-Puro.", true, butterflyNet, implingJar);
puroImp.addAlternateNpcs(NpcID.II_IMPLING_TYPE_5_MAZE, NpcID.II_IMPLING_TYPE_6, NpcID.II_IMPLING_TYPE_6_MAZE);
- wizardFairy = new ObjectStep(this, 29560, new WorldPoint(2412, 4434, 0),
+ wizardFairy = new ObjectStep(this, ObjectID.FAIRYRING_HOMEHUB, new WorldPoint(2412, 4434, 0),
"Take the nearest fairy ring and travel to the Wizards' Tower (DIS).", fairyAccess.equipped());
claimReward = new NpcStep(this, NpcID.HATIUS_LUMBRIDGE_DIARY, new WorldPoint(3235, 3213, 0),
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/morytania/MorytaniaEasy.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/morytania/MorytaniaEasy.java
index 95e201568c1..8936535a4cb 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/morytania/MorytaniaEasy.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/morytania/MorytaniaEasy.java
@@ -240,7 +240,7 @@ public void setupSteps()
"Use the Hay sack on the Bronze Spear.", haySack.highlighted(), bronzeSpear.highlighted());
useWatermelonOnSack = new DetailedQuestStep(this,
"Use the watermelon on the Hay Sack to make the Scarecrow.", scarecrowStep2.highlighted(), watermelon.highlighted());
- placeScarecrow = new ObjectStep(this, 7850, new WorldPoint(3602, 3526, 0),
+ placeScarecrow = new ObjectStep(this, ObjectID.FARMING_FLOWER_PATCH_4, new WorldPoint(3602, 3526, 0),
"Place a scarecrow at the Morytania flower patch, West of Port Phasmatys.", scarecrow.highlighted());
placeScarecrow.addIcon(ItemID.SCARECROW_COMPLETE);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/morytania/MorytaniaElite.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/morytania/MorytaniaElite.java
index 503a5077021..c1bf1c7c5c8 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/morytania/MorytaniaElite.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/morytania/MorytaniaElite.java
@@ -47,11 +47,11 @@
import net.runelite.client.plugins.microbot.questhelper.steps.*;
import net.runelite.api.QuestState;
import net.runelite.api.Skill;
-import net.runelite.api.SpriteID;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.SpriteID;
import net.runelite.api.gameval.VarPlayerID;
import java.util.ArrayList;
@@ -208,7 +208,7 @@ public void setupSteps()
"Dig at the top of the mounds and search the Sarcophagi until you find the hidden tunnel. A spade can " +
"be found in a shed at the entrance.", spade, barrowsSet, food);
// equipped doesn't work, it's highlighted as long as it's in inventory.
- barrowsChest = new ObjectStep(this, 20973, new WorldPoint(3552, 9696, 0),
+ barrowsChest = new ObjectStep(this, ObjectID.BARROWS_STONE_CHEST, new WorldPoint(3552, 9696, 0),
"Loot the chest wearing a complete set of barrows gear.", barrowsSet.equipped());
cremateShade = new ObjectStep(this, ObjectID.TEMPLE_PYRE, new WorldPoint(3500, 3266, 0),
@@ -219,7 +219,7 @@ public void setupSteps()
bareHandShark = new NpcStep(this, NpcID._0_54_49_MEMBERFISH, new WorldPoint(3479, 3189, 0),
"Bare hand fish a shark in Burgh de Rott.");
- moveToSlayer2 = new ObjectStep(this, 2114, new WorldPoint(3436, 3538, 0),
+ moveToSlayer2 = new ObjectStep(this, ObjectID.SLAYER_STAIRS_LV1, new WorldPoint(3436, 3538, 0),
"Climb the stairs or the Spikey chains in the Slayer tower to ascend to the higher level.", combatGear,
food);
moveToSlayer3 = new ObjectStep(this, ObjectID.SLAYER_STAIRS_LV2, new WorldPoint(3415, 3541, 1),
@@ -233,10 +233,10 @@ public void setupSteps()
craftBlackDhideBody = new DetailedQuestStep(this, "Craft a black dragon hide body.",
blackLeather.quantity(3).highlighted(), needle.highlighted(), thread);
- fertilizeHerb = new ObjectStep(this, 8153, new WorldPoint(3606, 3530, 0),
+ fertilizeHerb = new ObjectStep(this, ObjectID.FARMING_HERB_PATCH_4, new WorldPoint(3606, 3530, 0),
"Cast Fertile Soil on the herb patch in Morytania.", lunarBook, earthRune.quantity(15),
astralRune.quantity(3), natureRune.quantity(2));
- fertilizeHerb.addIcon(SpriteID.SPELL_FERTILE_SOIL);
+ fertilizeHerb.addIcon(SpriteID.LunarMagicOn.FERTILE_SOIL);
claimReward = new NpcStep(this, NpcID.LESABRE_MORT_DIARY, new WorldPoint(3464, 3480, 0),
"Talk to Le-Sabre near Canifis to claim your reward!");
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/morytania/MorytaniaHard.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/morytania/MorytaniaHard.java
index 00dc4d6c06b..69f5acf42b3 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/morytania/MorytaniaHard.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/morytania/MorytaniaHard.java
@@ -267,7 +267,7 @@ public void setupSteps()
moveToUpstairs = new ObjectStep(this, ObjectID.SLAYERTOWER_SC_CHAINBOTTOM, new WorldPoint(3422, 3550, 0),
"Climb up the chain to get to the second floor of the slayer tower.");
- advancedSpikes = new ObjectStep(this, 16537, new WorldPoint(3447, 3576, 1),
+ advancedSpikes = new ObjectStep(this, ObjectID.SLAYERTOWER_SC_CHAINBOTTOM, new WorldPoint(3447, 3576, 1),
"Climb the advanced spike chain. Go down and back up if you rip your hands as you climb.");
moveToCaptHorror = new ObjectStep(this, ObjectID.FEVER_GANGPLANK, new WorldPoint(3710, 3496, 0),
@@ -289,7 +289,7 @@ public void setupSteps()
moveToIsland = new ObjectStep(this, ObjectID.HARMLESS_BLACK_SPIRAL_STAIRS, new WorldPoint(3830, 9463, 0),
"Climb the staircase in the north east of the Cave Horror dungeon.");
burnMaho = new ItemStep(this, "Burn mahogany logs on the island.", tinderbox.highlighted(), mahoLogs.highlighted());
- chopMaho = new ObjectStep(this, 9034, new WorldPoint(3826, 3056, 0),
+ chopMaho = new ObjectStep(this, ObjectID.MAHOGANYTREE, new WorldPoint(3826, 3056, 0),
"Chop mahogany logs on the island.", axe, tinderbox);
moveToCaptMelon = new ObjectStep(this, ObjectID.FEVER_GANGPLANK, new WorldPoint(3710, 3496, 0),
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/varrock/VarrockEasy.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/varrock/VarrockEasy.java
index d7278e52d88..d05692f96ab 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/varrock/VarrockEasy.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/varrock/VarrockEasy.java
@@ -236,10 +236,10 @@ public void setupSteps()
"Get more kudos from either quests, miniquests, or turning in fossils.");
kudos = new NpcStep(this, NpcID.CURATOR, new WorldPoint(3258, 3449, 0),
"Speak to Curator Haig Halen.", notMoreKudos);
- moveToEarthRune = new ObjectStep(this, 34816, new WorldPoint(3306, 3474, 0),
+ moveToEarthRune = new ObjectStep(this, ObjectID.EARTHTEMPLE_RUINED, new WorldPoint(3306, 3474, 0),
"Travel to the earth altar or go through the abyss.", earthTali.highlighted(), essence);
moveToEarthRune.addIcon(ItemID.EARTH_TALISMAN);
- earthRune = new ObjectStep(this, 34763, new WorldPoint(2658, 4841, 0),
+ earthRune = new ObjectStep(this, ObjectID.EARTH_ALTAR, new WorldPoint(2658, 4841, 0),
"Craft an earth rune.", essence);
trout = new NpcStep(this, NpcID._0_48_53_FRESHFISH, new WorldPoint(3106, 3428, 0),
"Fish a trout in the River Lum at Barbarian Village.", flyRod, feathers);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/varrock/VarrockElite.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/varrock/VarrockElite.java
index 89dcf2f8272..d1bb7789463 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/varrock/VarrockElite.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/varrock/VarrockElite.java
@@ -180,7 +180,7 @@ public void setupSteps()
"Move to the west Varrock bank.");
superCombat = new ItemStep(this, "Create a super combat potion.", sAtk4.highlighted(), sStr4.highlighted(),
sDef4.highlighted(), torstol.highlighted());
- moveToLumb = new ObjectStep(this, 2618, new WorldPoint(3308, 3492, 0),
+ moveToLumb = new ObjectStep(this, ObjectID.GERTRUDEFENCE, new WorldPoint(3308, 3492, 0),
"Climb the fence to enter the lumber yard.", natureRune.quantity(20), astralRune.quantity(40),
earthRune.quantity(300), coins.quantity(21000), mahoganyLog.quantity(20));
plankMake = new DetailedQuestStep(this, "Cast plank make until you've made 20 mahogany planks.",
@@ -189,9 +189,9 @@ public void setupSteps()
"Enter the cooking guild.", cookingGuild.equipped());
summerPie = new ObjectStep(this, ObjectID.FAI_VARROCK_RANGE, new WorldPoint(3146, 3453, 0),
"Cook the summer pie.", rawPie);
- moveToEarthRune = new ObjectStep(this, 34816, new WorldPoint(3306, 3474, 0),
+ moveToEarthRune = new ObjectStep(this, ObjectID.EARTHTEMPLE_RUINED, new WorldPoint(3306, 3474, 0),
"Travel to the earth altar or go through the abyss.", earthTali, essence.quantity(25));
- earthRune100 = new ObjectStep(this, 34763, new WorldPoint(2658, 4841, 0),
+ earthRune100 = new ObjectStep(this, ObjectID.EARTH_ALTAR, new WorldPoint(2658, 4841, 0),
"Craft the earth runes.", essence.quantity(25));
moveToAnvil = new DetailedQuestStep(this, new WorldPoint(3188, 3426, 0),
"Go to the anvil beside the west Varrock bank.", runeBar, feather, hammer);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/varrock/VarrockHard.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/varrock/VarrockHard.java
index 9996fe6bf68..51fa2e254ec 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/varrock/VarrockHard.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/varrock/VarrockHard.java
@@ -200,9 +200,9 @@ protected void setupRequirements()
ancientBook = new SpellbookRequirement(Spellbook.ANCIENT);
- yewNotChecked = new VarbitRequirement(4771, 45);
- yewChecked = new VarbitRequirement(4771, 46);
- yewStump = new VarbitRequirement(4771, 47);
+ yewNotChecked = new VarbitRequirement(VarbitID.FARMING_TRANSMIT_A, 45);
+ yewChecked = new VarbitRequirement(VarbitID.FARMING_TRANSMIT_A, 46);
+ yewStump = new VarbitRequirement(VarbitID.FARMING_TRANSMIT_A, 47);
botSceptre = new ItemRequirement("Bottom of sceptre", ItemID.SOS_HALF_SCEPTRE2).showConditioned(notSkullSceptre);
topSceptre = new ItemRequirement("Top of sceptre", ItemID.SOS_HALF_SCEPTRE1).showConditioned(notSkullSceptre);
@@ -331,10 +331,10 @@ public void setupSteps()
"Speak with Orlando.");
getKudos = new DetailedQuestStep(this, "Complete more quests and tasks for kudos. " +
"Check out the kudos wiki page for more details.");
- wakkaEdge = new ObjectStep(this, 12166, new WorldPoint(3131, 3510, 0),
+ wakkaEdge = new ObjectStep(this, ObjectID.CANOEING_CANOESTATION_EDGEVILLE, new WorldPoint(3131, 3510, 0),
"Make a Waka at the canoe station in Edgeville.", axe);
paddewwaTP = new DetailedQuestStep(this, "Cast teleport to Paddewwa.", ancientBook, lawRune.quantity(2), airRune.quantity(1), fireRune.quantity(1));
- cutYew = new ObjectStep(this, 10823, new WorldPoint(3249, 3473, 0),
+ cutYew = new ObjectStep(this, ObjectID.DEADMAN_YEWTREE, new WorldPoint(3249, 3473, 0),
"Cut a yew tree until you get a log.", axe);
goUp1 = new ObjectStep(this, ObjectID.VARROCK_SPIRALSTAIRS_TALLER, new WorldPoint(3259, 3488, 0),
"Climb to the top of the Varrock Church.", yewLog, tinderBox);
@@ -351,15 +351,15 @@ public void setupSteps()
fancyStone = new NpcStep(this, NpcID.POH_ESTATE_AGENT, new WorldPoint(3240, 3475, 0),
"Talk to the estate agent to redecorate your house to fancy stone.", coins.quantity(25000));
fancyStone.addDialogStep("Can you redecorate my house please?");
- growYew = new ObjectStep(this, 8513, new WorldPoint(3229, 3459, 0),
+ growYew = new ObjectStep(this, ObjectID.YEW_TREE_FULLYGROWN_2, new WorldPoint(3229, 3459, 0),
"Grow and check the health of a yew tree in front of Varrock palace. " +
"Afterwards, dig up the stump to get the yew roots. " +
"If you're waiting for it to grow and want to complete further tasks, use the tick box on panel.",
yewSap, rake, spade);
- chopYew = new ObjectStep(this, 8513, new WorldPoint(3229, 3459, 0),
+ chopYew = new ObjectStep(this, ObjectID.YEW_TREE_FULLYGROWN_2, new WorldPoint(3229, 3459, 0),
"Chop the yew tree that you grew in front of Varrock palace. Afterwards, dig up the stump to get the Yew " +
"roots.", axe, spade);
- digUpYewRoots = new ObjectStep(this, 8514, new WorldPoint(3229, 3459, 0),
+ digUpYewRoots = new ObjectStep(this, ObjectID.YEW_TREE_STUMP, new WorldPoint(3229, 3459, 0),
"Dig up the stump to get the Yew roots.", spade);
moveToUpstairs = new ObjectStep(this, ObjectID.VARROCK_SPIRALSTAIRS, new WorldPoint(3219, 3497, 0),
"Climb the stairs in the back of the Varrock palace.");
@@ -367,7 +367,7 @@ public void setupSteps()
"Pray at altar with Smite active.", smiteActive);
moveToEdge = new ObjectStep(this, ObjectID.TRAPDOOR_OPEN, new WorldPoint(3097, 3468, 0),
"Enter the Edgeville dungeon.");
- obsPipe = new ObjectStep(this, 16511, new WorldPoint(3150, 9906, 0),
+ obsPipe = new ObjectStep(this, ObjectID.VARROCK_DUNGEON_PIPE_SC, new WorldPoint(3150, 9906, 0),
"Climb through the pipe shortcut near Vannaka.");
claimReward = new NpcStep(this, NpcID.TOBY_VARROCK_DIARY, new WorldPoint(3225, 3415, 0),
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/varrock/VarrockMedium.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/varrock/VarrockMedium.java
index 7544c7c92fa..fd66e8f4e94 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/varrock/VarrockMedium.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/varrock/VarrockMedium.java
@@ -51,6 +51,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import net.runelite.api.gameval.VarPlayerID;
import java.util.ArrayList;
@@ -167,15 +168,15 @@ protected void setupRequirements()
notBalloon = new VarplayerRequirement(VarPlayerID.VARROCK_ACHIEVEMENT_DIARY, false, 27);
notVarrAgi = new VarplayerRequirement(VarPlayerID.VARROCK_ACHIEVEMENT_DIARY, false, 28);
- notFlap = new VarbitRequirement(2309, 1);
- notSlap = new VarbitRequirement(2310, 1);
- notIdea = new VarbitRequirement(2311, 1);
- notStamp = new VarbitRequirement(2312, 1);
+ notFlap = new VarbitRequirement(VarbitID.SOS_EMOTE_FLAP, 1);
+ notSlap = new VarbitRequirement(VarbitID.SOS_EMOTE_DOH, 1);
+ notIdea = new VarbitRequirement(VarbitID.SOS_EMOTE_IDEA, 1);
+ notStamp = new VarbitRequirement(VarbitID.SOS_EMOTE_STAMP, 1);
normalBook = new SpellbookRequirement(Spellbook.NORMAL);
- notVarrBalloon = new VarbitRequirement(2872, 0);
- notVarrBalloon2 = new VarbitRequirement(2872, 1);
+ notVarrBalloon = new VarbitRequirement(VarbitID.ZEP_MULTI_VARR, 0);
+ notVarrBalloon2 = new VarbitRequirement(VarbitID.ZEP_MULTI_VARR, 1);
coins = new ItemRequirement("Coins", ItemCollections.COINS).showConditioned(new Conditions(LogicType.OR, notApothStr, notCatColour, notMaho20));
limpRoot = new ItemRequirement("Limpwurt root", ItemID.LIMPWURT_ROOT).showConditioned(notApothStr);
@@ -233,7 +234,7 @@ public void setupSteps()
"Check your bank if you own a cat/kitten and either store them in the POH Menagerie or shoo them. Then speak with Gertrude for a new kitten.",
coins.quantity(100), ringOfCharos.equipped());
colourCat.addDialogSteps("Do you have any more kittens?", "[Charm] I'm quite fussy over cats - can I pick my own?");
- geSpirit = new ObjectStep(this, 1295, new WorldPoint(3185, 3510, 0),
+ geSpirit = new ObjectStep(this, ObjectID.SPIRITTREE_SMALL, new WorldPoint(3185, 3510, 0),
"Use the spirit tree in the Grand Exchange.");
moveToStronghold = new ObjectStep(this, ObjectID.SOS_DUNG_ENT_OPEN, new WorldPoint(3081, 3420, 0),
@@ -259,7 +260,7 @@ public void setupSteps()
//TODO find a better way to check for slayer task
vannaka = new NpcStep(this, NpcID.SLAYER_MASTER_3, new WorldPoint(3146, 9913, 0),
"Get a task from Vannaka.");
- tolna = new ObjectStep(this, 13968, new WorldPoint(3310, 3452, 0),
+ tolna = new ObjectStep(this, ObjectID.SOULBANE_FALLOFF2_ROPE_MULTI, new WorldPoint(3310, 3452, 0),
"Enter the Tolna dungeon.");
tpDigsite = new DetailedQuestStep(this, "Rub the digsite pendant and select the 'Digsite' teleport.",
@@ -268,7 +269,7 @@ public void setupSteps()
maho20 = new NpcStep(this, NpcID.POH_SAWMILL_OPP, new WorldPoint(3302, 3492, 0),
"Make 20 mahogany planks at the sawmill in ONE run.", mahoLog.quantity(20), coins.quantity(30000));
- balloon = new ObjectStep(this, 19143, new WorldPoint(3297, 3482, 0),
+ balloon = new ObjectStep(this, ObjectID.ZEP_MULTI_BASKET_VARR, new WorldPoint(3297, 3482, 0),
"Use the basket east of Varrock to fly to any available destination.", willowLog1);
moveToEntrana = new NpcStep(this, NpcID.SHIPMONK1_C, new WorldPoint(3048, 3236, 0),
"Speak with a monk to travel to Entrana.", true, willowLog11);
@@ -276,7 +277,7 @@ public void setupSteps()
talkToAug = new NpcStep(this, NpcID.ZEP_PICCARD, new WorldPoint(2810, 3356, 0),
"Speak with Augustine and travel to Varrock.", willowLog11);
- whiteFruit = new ObjectStep(this, 9209, new WorldPoint(3230, 3475, 0),
+ whiteFruit = new ObjectStep(this, ObjectID.GARDEN_WHITE_TREE_PATCH, new WorldPoint(3230, 3475, 0),
"Pick a white tree fruit at Varrock Castle.");
varrAgi = new ObjectStep(this, ObjectID.ROOFTOPS_VARROCK_WALLCLIMB, new WorldPoint(3221, 3414, 0),
"Complete a lap of the Varrock rooftop course.");
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/westernprovinces/WesternMedium.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/westernprovinces/WesternMedium.java
index 754ce2a4e80..b87bae14cd1 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/westernprovinces/WesternMedium.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/westernprovinces/WesternMedium.java
@@ -279,7 +279,7 @@ public void setupSteps()
agiShortcut = new ObjectStep(this, ObjectID.GNOME_STRONGHOLD_SC_ROCK_TOP, new WorldPoint(2487, 3515, 0),
"Take the agility shortcut from the Grand Tree to Otto's Grotto.");
- moveToEagle = new ObjectStep(this, 19790, new WorldPoint(2329, 3495, 0),
+ moveToEagle = new ObjectStep(this, ObjectID.EAGLEPEAK_ENTRANCE_CAVE_MULTI, new WorldPoint(2329, 3495, 0),
"Enter the cave at the top of Eagles' Peak. " +
"You can use a fairy ring to (AKQ), then head south to get there easily.", rope);
eagleFeldip = new NpcStep(this, NpcID.EAGLEPEAK_EAGLE_TOJUNGLE, new WorldPoint(2027, 4964, 3),
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/wilderness/WildernessEasy.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/wilderness/WildernessEasy.java
index 53846a4d43f..2a139a97e84 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/wilderness/WildernessEasy.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/achievementdiaries/wilderness/WildernessEasy.java
@@ -50,6 +50,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import net.runelite.api.gameval.VarPlayerID;
import java.util.ArrayList;
@@ -151,7 +152,7 @@ protected void setupRequirements()
notEnterAbyss = new VarplayerRequirement(VarPlayerID.WILDERNESS_ACHIEVEMENT_DIARY, false, 11);
notEquipTeamCape = new VarplayerRequirement(VarPlayerID.WILDERNESS_ACHIEVEMENT_DIARY, false, 12);
- firstTimeAbyss = new VarbitRequirement(626, 1);
+ firstTimeAbyss = new VarbitRequirement(VarbitID.RCU_ABYSSAL_WARNING, 1);
normalBook = new SpellbookRequirement(Spellbook.NORMAL);
chaosAccess = new ItemRequirement("Access to the Chaos altar",
@@ -204,7 +205,7 @@ public void setupSteps()
equipTeamCape = new DetailedQuestStep(this, "Equip a team cape. If you already have one on, re-equip it.",
teamCape.equipped());
- chaosTemple = new ObjectStep(this, 34822, new WorldPoint(3060, 3591, 0),
+ chaosTemple = new ObjectStep(this, ObjectID.CHAOSTEMPLE_RUINED, new WorldPoint(3060, 3591, 0),
"Enter the chaos altar north of Edgeville with a chaos talisman/tiara, or enter it through the Abyss.");
chaosTemple.addIcon(ItemID.CHAOS_TALISMAN);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/barbariantraining/BarbarianTraining.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/barbariantraining/BarbarianTraining.java
index 55ab7657130..236a4060673 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/barbariantraining/BarbarianTraining.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/barbariantraining/BarbarianTraining.java
@@ -41,7 +41,6 @@
import net.runelite.client.plugins.microbot.questhelper.requirements.player.SkillRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.quest.QuestRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.runelite.RuneliteRequirement;
-import net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper;
import net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicType;
import net.runelite.client.plugins.microbot.questhelper.requirements.widget.WidgetTextRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.zone.Zone;
@@ -157,7 +156,7 @@ public Map loadSteps()
firemakingSteps.setLockingCondition(finishedFiremaking);
pyreSteps = new ConditionalStep(this, talkToOttoAboutPyre);
- pyreSteps.addStep(LogicHelper.and(sacrificedRemains), talkToOttoAfterPyre);
+ pyreSteps.addStep(and(sacrificedRemains), talkToOttoAfterPyre);
pyreSteps.addStep(and(taskedWithPyre, chewedBones.alsoCheckBank(questBank)), useLogOnPyre);
pyreSteps.addStep(and(taskedWithPyre, chewedBonesNearby), pickupChewedBones);
pyreSteps.addStep(and(taskedWithPyre, inAncientCavernArrivalRoom), enterWhirlpool);
@@ -179,14 +178,14 @@ public Map loadSteps()
spearAndHastaeSteps.setLockingCondition(finishedHasta);
ConditionalStep allSteps = new ConditionalStep(this, fishingSteps);
- allSteps.addStep(LogicHelper.nor(finishedFishing), fishingSteps);
- allSteps.addStep(LogicHelper.nor(finishedHerblore), herbloreSteps);
- allSteps.addStep(LogicHelper.nor(finishedHarpoon), harpoonSteps);
- allSteps.addStep(LogicHelper.nor(finishedSeedPlanting), seedSteps);
- allSteps.addStep(LogicHelper.nor(finishedPotSmashing), potSmashingSteps);
- allSteps.addStep(LogicHelper.nor(finishedFiremaking), firemakingSteps);
+ allSteps.addStep(nor(finishedFishing), fishingSteps);
+ allSteps.addStep(nor(finishedHerblore), herbloreSteps);
+ allSteps.addStep(nor(finishedHarpoon), harpoonSteps);
+ allSteps.addStep(nor(finishedSeedPlanting), seedSteps);
+ allSteps.addStep(nor(finishedPotSmashing), potSmashingSteps);
+ allSteps.addStep(nor(finishedFiremaking), firemakingSteps);
allSteps.addStep(nand(finishedSpear, finishedHasta), spearAndHastaeSteps);
- allSteps.addStep(LogicHelper.nor(finishedPyre), pyreSteps);
+ allSteps.addStep(nor(finishedPyre), pyreSteps);
allSteps.addDialogSteps("Let's talk about my training.", "I seek more knowledge.");
allSteps.setCheckAllChildStepsOnListenerCall(true);
@@ -667,7 +666,8 @@ public List getItemRequirements()
bow, oakLogs, tinderbox, axe,
feathers, knife,
hammer, bronzeBar.quantity(2), logs.quantity(3),
- attackPotion, roe);
+ attackPotion, roe,
+ antifireShield, combatGear);
}
@Override
@@ -676,6 +676,12 @@ public List getItemRecommended()
return Arrays.asList(gamesNecklace.quantity(5), catherbyTeleport);
}
+ @Override
+ public List getCombatRequirements()
+ {
+ return Collections.singletonList("Mithril Dragon (level 304)");
+ }
+
@Override
public List getNotes()
{
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/curseoftheemptylord/CurseOfTheEmptyLord.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/curseoftheemptylord/CurseOfTheEmptyLord.java
index fa4876ad22f..8880cc50aae 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/curseoftheemptylord/CurseOfTheEmptyLord.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/curseoftheemptylord/CurseOfTheEmptyLord.java
@@ -43,13 +43,13 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import net.runelite.client.eventbus.Subscribe;
import java.util.*;
public class CurseOfTheEmptyLord extends BasicQuestHelper
{
- private final int PATH_VARBIT = 815;
private int currentPath = 0;
//Items Required
@@ -105,7 +105,7 @@ public void onVarbitChanged(VarbitChanged varbitChanged)
{
if (currentPath == 0)
{
- int newPath = client.getVarbitValue(PATH_VARBIT);
+ int newPath = client.getVarbitValue(VarbitID.SECRET_GHOST_RANDOMISER);
if (newPath != 0)
{
currentPath = newPath;
@@ -122,26 +122,26 @@ protected void setupRequirements()
ghostspeakItems = new ItemRequirement("Ghostspeak amulet or Morytania legs 2 or better", ItemID.AMULET_OF_GHOSTSPEAK,
1, true).isNotConsumed();
ghostspeakItems.addAlternates(ItemID.MORYTANIA_LEGS_MEDIUM, ItemID.MORYTANIA_LEGS_HARD, ItemID.MORYTANIA_LEGS_ELITE);
- knife = new ItemRequirement("Knife", ItemID.KNIFE).showConditioned(new VarbitRequirement(PATH_VARBIT, 3)).isNotConsumed();
+ knife = new ItemRequirement("Knife", ItemID.KNIFE).showConditioned(new VarbitRequirement(VarbitID.SECRET_GHOST_RANDOMISER, 3)).isNotConsumed();
}
public void setupConditions()
{
- talkedToValdez = new VarbitRequirement(816, 1);
- talkedToRennard = new VarbitRequirement(817, 1);
- talkedToKharrim = new VarbitRequirement(818, 1);
- talkedToLennissa = new VarbitRequirement(819, 1);
- talkedToDhalak = new VarbitRequirement(820, 1);
- talkedToViggora = new VarbitRequirement(821, 1);
+ talkedToValdez = new VarbitRequirement(VarbitID.SECRET_GHOST1_BACKSTORY, 1);
+ talkedToRennard = new VarbitRequirement(VarbitID.SECRET_GHOST2_BACKSTORY, 1);
+ talkedToKharrim = new VarbitRequirement(VarbitID.SECRET_GHOST3_BACKSTORY, 1);
+ talkedToLennissa = new VarbitRequirement(VarbitID.SECRET_GHOST4_BACKSTORY, 1);
+ talkedToDhalak = new VarbitRequirement(VarbitID.SECRET_GHOST5_BACKSTORY, 1);
+ talkedToViggora = new VarbitRequirement(VarbitID.SECRET_GHOST6_BACKSTORY, 1);
inEdgevilleDungeon = new ZoneRequirement(edgevilleDungeon);
inRoguesCastle = new ZoneRequirement(roguesCastleFirstFloor);
inSlayerTower = new ZoneRequirement(slayerTowerFirstFloor);
inEdgevilleMonastery = new ZoneRequirement(edgevilleMonastery);
inPartyRoom = new ZoneRequirement(partyRoom);
- onPath1 = new VarbitRequirement(PATH_VARBIT, 1);
- onPath2 = new VarbitRequirement(PATH_VARBIT, 2);
- onPath3 = new VarbitRequirement(PATH_VARBIT, 3);
+ onPath1 = new VarbitRequirement(VarbitID.SECRET_GHOST_RANDOMISER, 1);
+ onPath2 = new VarbitRequirement(VarbitID.SECRET_GHOST_RANDOMISER, 2);
+ onPath3 = new VarbitRequirement(VarbitID.SECRET_GHOST_RANDOMISER, 3);
}
@Override
@@ -156,7 +156,7 @@ protected void setupZones()
public void setupSteps()
{
- int pathID = client.getVarbitValue(PATH_VARBIT);
+ int pathID = client.getVarbitValue(VarbitID.SECRET_GHOST_RANDOMISER);
talkToValdez = new NpcStep(this, NpcID.SECRET_GHOST_EXPLORER, new WorldPoint(2556, 3445, 0), "Talk to the Mysterious Ghost outside Glarial's Tomb.", ghostspeakItems, ringOfVis);
talkToValdez.addDialogStep("Tell me your story");
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/daddyshome/DaddysHome.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/daddyshome/DaddysHome.java
index 736bba75696..f13bddc1830 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/daddyshome/DaddysHome.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/daddyshome/DaddysHome.java
@@ -27,93 +27,127 @@
import net.runelite.client.plugins.microbot.questhelper.collections.ItemCollections;
import net.runelite.client.plugins.microbot.questhelper.panel.PanelDetails;
import net.runelite.client.plugins.microbot.questhelper.questhelpers.BasicQuestHelper;
-import net.runelite.client.plugins.microbot.questhelper.requirements.Requirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.conditional.Conditions;
import net.runelite.client.plugins.microbot.questhelper.requirements.item.ItemRequirement;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.and;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.or;
+import net.runelite.client.plugins.microbot.questhelper.requirements.util.Operation;
import net.runelite.client.plugins.microbot.questhelper.requirements.var.VarbitRequirement;
import net.runelite.client.plugins.microbot.questhelper.rewards.ExperienceReward;
import net.runelite.client.plugins.microbot.questhelper.rewards.ItemReward;
-import net.runelite.client.plugins.microbot.questhelper.steps.*;
+import net.runelite.client.plugins.microbot.questhelper.steps.ConditionalStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.NpcStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.ObjectStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.QuestStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.widget.WidgetHighlight;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import net.runelite.api.Skill;
import net.runelite.api.coords.WorldPoint;
+import net.runelite.api.gameval.InterfaceID;
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
-
-import java.util.*;
+import net.runelite.api.gameval.VarbitID;
public class DaddysHome extends BasicQuestHelper
{
- //Items Required
- ItemRequirement plank10, nails20, bolt5, hammer, saw, waxwoodLog3, waxwoodPlank3, bolt2,
- bolt3, nails2, nails4, plank, plank3, plank2;
-
- //Items Recommended
- ItemRequirement lumberyardTeleport, varrockTeleport3;
-
- Requirement removedChair, removedTable, removedTable2, removedStool, removedStool2, removedCampbed,
- removedCarpet, repairedCampbed, repairedCarpet, repairedStool, repairedTable, repairedChair,
- repairedStool2, repairedTable2;
-
- //NPC Steps
- DetailedQuestStep talkToMarlo, talkToYarlo, talkToYarloAgain, talkToOperator, talkToYarloOnceMore, talkToMarloToFinish;
-
- //Object/items Steps
- DetailedQuestStep removeChair, removeCarpet, removeStool, removeStool2, removeTable,
- removeTable2, removeCampbed, searchCrate, buildChair, buildCarpet, buildStool,
- buildStool2, buildTable, buildTable2, buildCampbed;
-
- @Override
- public Map loadSteps()
- {
- initializeRequirements();
- setupConditions();
- setupSteps();
- Map steps = new HashMap<>();
-
- steps.put(0, talkToMarlo);
- steps.put(1, talkToYarlo);
-
- ConditionalStep removeItems = new ConditionalStep(this, removeCampbed);
- removeItems.addStep(new Conditions(removedCampbed, removedCarpet, removedStool, removedTable, removedChair, removedStool2, removedTable2), talkToYarloAgain);
- removeItems.addStep(new Conditions(removedCampbed, removedCarpet, removedStool, removedTable, removedChair, removedStool2), removeTable2);
- removeItems.addStep(new Conditions(removedCampbed, removedCarpet, removedStool, removedTable, removedChair), removeStool2);
- removeItems.addStep(new Conditions(removedCampbed, removedCarpet, removedStool, removedTable), removeChair);
- removeItems.addStep(new Conditions(removedCampbed, removedCarpet, removedStool), removeTable);
- removeItems.addStep(new Conditions(removedCampbed, removedCarpet), removeStool);
- removeItems.addStep(removedCampbed, removeCarpet);
-
- steps.put(2, removeItems);
- steps.put(3, talkToYarloAgain);
- steps.put(4, talkToYarloAgain);
-
- ConditionalStep repairFurniture = new ConditionalStep(this, buildCarpet);
- repairFurniture.addStep(new Conditions(repairedCarpet, repairedStool, repairedTable, repairedChair, repairedStool2, repairedTable2, repairedCampbed), talkToYarloOnceMore);
- repairFurniture.addStep(new Conditions(repairedCarpet, repairedStool, repairedTable, repairedChair, repairedStool2, repairedTable2, waxwoodPlank3), buildCampbed);
- repairFurniture.addStep(new Conditions(repairedCarpet, repairedStool, repairedTable, repairedChair, repairedStool2, repairedTable2, waxwoodLog3), talkToOperator);
- repairFurniture.addStep(new Conditions(repairedCarpet, repairedStool, repairedTable, repairedChair, repairedStool2, repairedTable2), searchCrate);
- repairFurniture.addStep(new Conditions(repairedCarpet, repairedStool, repairedTable, repairedChair, repairedStool2), buildTable2);
- repairFurniture.addStep(new Conditions(repairedCarpet, repairedStool, repairedTable, repairedChair), buildStool2);
- repairFurniture.addStep(new Conditions(repairedCarpet, repairedStool, repairedTable), buildChair);
- repairFurniture.addStep(new Conditions(repairedCarpet, repairedStool), buildTable);
- repairFurniture.addStep(new Conditions(repairedCarpet), buildStool);
-
- steps.put(5, repairFurniture);
- steps.put(6, repairFurniture);
- steps.put(7, repairFurniture);
- steps.put(8, repairFurniture);
- steps.put(9, repairFurniture);
-
- steps.put(10, talkToMarloToFinish);
- steps.put(11, talkToMarloToFinish);
- steps.put(12, talkToMarloToFinish);
-
- return steps;
- }
+ // Required items
+ ItemRequirement plank10;
+ ItemRequirement nails20;
+ ItemRequirement bolt5;
+ ItemRequirement saw;
+ ItemRequirement hammer;
+
+ // Recommended items
+ ItemRequirement lumberyardTeleport;
+ ItemRequirement varrockTeleport3;
+
+ // Miscellaneous requirements
+ ItemRequirement waxwoodLog3;
+ ItemRequirement waxwoodPlank3;
+ ItemRequirement bolt2;
+ ItemRequirement bolt3;
+ ItemRequirement nails2;
+ ItemRequirement nails4;
+ ItemRequirement plank;
+ ItemRequirement plank3;
+ ItemRequirement plank2;
+
+ VarbitRequirement needToRemoveCampbed;
+ VarbitRequirement needToRemoveCarpet;
+ VarbitRequirement needToRemoveStool;
+ VarbitRequirement needToRemoveTable;
+ VarbitRequirement needToRemoveChair;
+ VarbitRequirement needToRemoveStool2;
+ VarbitRequirement needToRemoveTable2;
+ Conditions needToRemoveAnyFurniture;
+
+ VarbitRequirement needToBuildCarpet;
+ VarbitRequirement needToBuildStool;
+ VarbitRequirement needToBuildTable;
+ VarbitRequirement needToBuildChair;
+ VarbitRequirement needToBuildStool2;
+ VarbitRequirement needToBuildTable2;
+ Conditions needToBuildSimpleFurniture;
+
+ VarbitRequirement needToBuildCampbed;
+
+ // Steps
+ NpcStep talkToMarlo;
+
+ NpcStep talkToYarlo;
+
+ ObjectStep removeCampbed;
+ ObjectStep removeCarpet;
+ ObjectStep removeStool;
+ ObjectStep removeTable;
+ ObjectStep removeChair;
+ ObjectStep removeStool2;
+ ObjectStep removeTable2;
+ NpcStep talkToYarloAfterRemovingFurniture;
+ ConditionalStep removeFurniture;
+
+ ObjectStep buildCarpet;
+ ObjectStep buildStool;
+ ObjectStep buildTable;
+ ObjectStep buildChair;
+ ObjectStep buildStool2;
+ ObjectStep buildTable2;
+ ConditionalStep buildSimpleFurniture;
+
+ ObjectStep searchCrate;
+ NpcStep talkToOperator;
+ ObjectStep buildCampbed;
+
+ NpcStep talkToYarloAfterBuildingFurniture;
+
+ NpcStep talkToMarloToFinish;
@Override
protected void setupRequirements()
{
+ needToRemoveCampbed = new VarbitRequirement(VarbitID.DADDYSHOME_BED, 2, Operation.LESS);
+ needToRemoveCarpet = new VarbitRequirement(VarbitID.DADDYSHOME_CARPET, 2, Operation.LESS);
+ needToRemoveStool = new VarbitRequirement(VarbitID.DADDYSHOME_STOOL_2, 2, Operation.LESS);
+ needToRemoveTable = new VarbitRequirement(VarbitID.DADDYSHOME_TABLE_2, 2, Operation.LESS);
+ needToRemoveChair = new VarbitRequirement(VarbitID.DADDYSHOME_CHAIR, 2, Operation.LESS);
+ needToRemoveStool2 = new VarbitRequirement(VarbitID.DADDYSHOME_STOOL_1, 2, Operation.LESS);
+ needToRemoveTable2 = new VarbitRequirement(VarbitID.DADDYSHOME_TABLE_1, 2, Operation.LESS);
+ needToRemoveAnyFurniture = or(needToRemoveCampbed, needToRemoveCarpet, needToRemoveStool, needToRemoveTable, needToRemoveChair, needToRemoveStool2);
+
+ needToBuildCarpet = new VarbitRequirement(VarbitID.DADDYSHOME_CARPET, 3, Operation.LESS);
+ needToBuildStool = new VarbitRequirement(VarbitID.DADDYSHOME_STOOL_2, 3, Operation.LESS);
+ needToBuildTable = new VarbitRequirement(VarbitID.DADDYSHOME_TABLE_2, 3, Operation.LESS);
+ needToBuildChair = new VarbitRequirement(VarbitID.DADDYSHOME_CHAIR, 3, Operation.LESS);
+ needToBuildStool2 = new VarbitRequirement(VarbitID.DADDYSHOME_STOOL_1, 3, Operation.LESS);
+ needToBuildTable2 = new VarbitRequirement(VarbitID.DADDYSHOME_TABLE_1, 3, Operation.LESS);
+ needToBuildSimpleFurniture = or(needToBuildCarpet, needToBuildStool, needToBuildTable, needToBuildChair, needToBuildStool2, needToBuildTable2);
+
+ needToBuildCampbed = new VarbitRequirement(VarbitID.DADDYSHOME_BED, 3, Operation.LESS);
+
plank10 = new ItemRequirement("Plank", ItemID.WOODPLANK, 10);
bolt5 = new ItemRequirement("Bolt of cloth", ItemID.CLOTH, 5);
nails20 = new ItemRequirement("Nails (bring more in case you fail with some)", ItemCollections.NAILS, 14);
@@ -133,89 +167,140 @@ protected void setupRequirements()
varrockTeleport3 = new ItemRequirement("Varrock Teleports", ItemID.POH_TABLET_VARROCKTELEPORT, 3);
}
- public void setupConditions()
+ public void setupSteps()
{
+ talkToMarlo = new NpcStep(this, NpcID.CON_CONTRACTOR_VARROCK_1OP, new WorldPoint(3241, 3471, 0), "Talk to Marlo in north-east Varrock.");
+ talkToMarlo.addAlternateNpcs(NpcID.CON_CONTRACTOR_VARROCK_2OP);
+ talkToMarlo.addDialogSteps("What kind of favour do you want me to do?", "Tell me more about the job.", "Tell me where he lives, and I'll do the job.");
- removedCampbed = new VarbitRequirement(10568, 2);
- removedCarpet = new VarbitRequirement(10569, 2);
- removedStool = new VarbitRequirement(10564, 2);
-
- removedTable = new VarbitRequirement(10567, 2);
- removedChair = new VarbitRequirement(10565, 2);
- removedStool2 = new VarbitRequirement(10563, 2);
- removedTable2 = new VarbitRequirement(10566, 2);
+ talkToYarlo = new NpcStep(this, NpcID.DADDYSHOME_DADDY, new WorldPoint(3240, 3395, 0), "Talk to Old Man Yarlo in south-east Varrock, west of Aubury's Rune Shop.");
+
+ removeCampbed = new ObjectStep(this, ObjectID.DADDYSHOME_BED, new WorldPoint(3242, 3398, 0), "Remove the campbed.");
+ removeCarpet = new ObjectStep(this, ObjectID.DADDYSHOME_CARPET_MIDDLE, new WorldPoint(3239, 3395, 0), "Right-click remove the rotten carpet.");
+ removeStool = new ObjectStep(this, ObjectID.DADDYSHOME_STOOL_2, new WorldPoint(3239, 3394, 0), "Demolish the broken stool.");
+ removeTable = new ObjectStep(this, ObjectID.DADDYSHOME_TABLE_2, new WorldPoint(3240, 3394, 0), "Demolish the broken table.");
+ removeChair = new ObjectStep(this, ObjectID.DADDYSHOME_CHAIR, new WorldPoint(3241, 3393, 0), "Demolish the broken chair.");
+ removeStool2 = new ObjectStep(this, ObjectID.DADDYSHOME_STOOL_1, new WorldPoint(3244, 3394, 0), "Demolish the other broken stool.");
+ removeTable2 = new ObjectStep(this, ObjectID.DADDYSHOME_TABLE_1, new WorldPoint(3245, 3394, 0), "Demolish the other broken table.");
+
+ talkToYarloAfterRemovingFurniture = new NpcStep(this, NpcID.DADDYSHOME_DADDY, new WorldPoint(3240, 3395, 0), "Talk to Old Man Yarlo again after removing all the broken furniture.");
+ talkToYarloAfterRemovingFurniture.addDialogStep("Skip Yarlo's lecture. He'll offer it later if you like.");
+
+ removeFurniture = new ConditionalStep(this, removeTable2, "Remove the broken furniture in Old Man Yarlo's house.");
+ removeFurniture.addStep(needToRemoveCampbed, removeCampbed);
+ removeFurniture.addStep(needToRemoveCarpet, removeCarpet);
+ removeFurniture.addStep(needToRemoveStool, removeStool);
+ removeFurniture.addStep(needToRemoveTable, removeTable);
+ removeFurniture.addStep(needToRemoveChair, removeChair);
+ removeFurniture.addStep(needToRemoveStool2, removeStool2);
+
+ var highlightFirstOption = new WidgetHighlight(InterfaceID.PohFurnitureCreation._01);
+ buildCarpet = new ObjectStep(this, ObjectID.DADDYSHOME_CARPET_MIDDLE, new WorldPoint(3239, 3395, 0), "Right-click build the carpet.", bolt3, saw, hammer);
+ buildCarpet.addWidgetHighlight(highlightFirstOption);
+ buildStool = new ObjectStep(this, ObjectID.DADDYSHOME_STOOL_2, new WorldPoint(3239, 3394, 0), "Build the stool.", plank, nails2, saw, hammer);
+ buildStool.addWidgetHighlight(highlightFirstOption);
+ buildTable = new ObjectStep(this, ObjectID.DADDYSHOME_TABLE_2, new WorldPoint(3240, 3394, 0), "Build the table.", plank3, nails4, saw, hammer);
+ buildTable.addWidgetHighlight(highlightFirstOption);
+ buildChair = new ObjectStep(this, ObjectID.DADDYSHOME_CHAIR, new WorldPoint(3241, 3393, 0), "Build the chair.", plank2, nails2, saw, hammer);
+ buildChair.addWidgetHighlight(highlightFirstOption);
+ buildStool2 = new ObjectStep(this, ObjectID.DADDYSHOME_STOOL_1, new WorldPoint(3244, 3394, 0), "Build the other stool.", plank, nails2, saw, hammer);
+ buildStool2.addWidgetHighlight(highlightFirstOption);
+ buildTable2 = new ObjectStep(this, ObjectID.DADDYSHOME_TABLE_1, new WorldPoint(3245, 3394, 0), "Build the other table.", plank3, nails4, saw, hammer);
+ buildTable2.addWidgetHighlight(highlightFirstOption);
+
+ buildSimpleFurniture = new ConditionalStep(this, buildTable2, "Rebuild the furniture in Old Man Yarlo's house.");
+ buildSimpleFurniture.addStep(needToBuildCarpet, buildCarpet);
+ buildSimpleFurniture.addStep(needToBuildStool, buildStool);
+ buildSimpleFurniture.addStep(needToBuildTable, buildTable);
+ buildSimpleFurniture.addStep(needToBuildChair, buildChair);
+ buildSimpleFurniture.addStep(needToBuildStool2, buildStool2);
+
+ searchCrate = new ObjectStep(this, ObjectID.DADDYSHOME_CRATES, new WorldPoint(3243, 3398, 0), "Search the crates in Old Man Yarlo's house for waxwood logs.");
+
+ talkToOperator = new NpcStep(this, NpcID.POH_SAWMILL_OPP, new WorldPoint(3302, 3492, 0), "Talk to the Sawmill operator north-east of Varrock to make waxwood planks.", waxwoodLog3);
+ talkToOperator.addDialogStep("I need some waxwood planks for Old Man Yarlo.");
+ talkToOperator.addTeleport(lumberyardTeleport);
+ buildCampbed = new ObjectStep(this, ObjectID.DADDYSHOME_BED, new WorldPoint(3242, 3398, 0), "Build the waxwood bed in Old Man Yarlo's house.", waxwoodPlank3, bolt2, hammer, saw);
+ buildCampbed.addWidgetHighlight(highlightFirstOption);
+ buildCampbed.addTeleport(varrockTeleport3.quantity(1));
- repairedCampbed = new VarbitRequirement(10568, 3);
- repairedCarpet = new VarbitRequirement(10569, 3);
- repairedStool = new VarbitRequirement(10564, 3);
+ talkToYarloAfterBuildingFurniture = new NpcStep(this, NpcID.DADDYSHOME_DADDY, new WorldPoint(3240, 3395, 0), "Talk to Old Man Yarlo again after rebuilding the furniture.");
- repairedTable = new VarbitRequirement(10567, 3);
- repairedChair = new VarbitRequirement(10565, 3);
- repairedStool2 = new VarbitRequirement(10563, 3);
- repairedTable2 = new VarbitRequirement(10566, 3);
+ talkToMarloToFinish = new NpcStep(this, NpcID.CON_CONTRACTOR_VARROCK_1OP, new WorldPoint(3241, 3471, 0), "Talk to Marlo in north-east Varrock to complete the quest.");
+ talkToMarloToFinish.addAlternateNpcs(NpcID.CON_CONTRACTOR_VARROCK_2OP);
+ talkToMarloToFinish.addDialogStep("Yeah, what have you got for me?");
}
- public void setupSteps()
+ @Override
+ public Map loadSteps()
{
- talkToMarlo = new NpcStep(this, NpcID.CON_CONTRACTOR_VARROCK_1OP, new WorldPoint(3241, 3471, 0), "Talk to Marlo in north east Varrock.");
- ((NpcStep) talkToMarlo).addAlternateNpcs(NpcID.CON_CONTRACTOR_VARROCK_2OP);
- talkToMarlo.addDialogSteps("What kind of favour do you want me to do?", "Tell me more about the job.", "Tell me where he lives, and I'll do the job.");
- talkToYarlo = new NpcStep(this, NpcID.DADDYSHOME_DADDY, new WorldPoint(3240, 3395, 0), "Talk to Old Man Yarlo in south Varrock.");
- talkToYarloAgain = new NpcStep(this, NpcID.DADDYSHOME_DADDY, new WorldPoint(3240, 3395, 0), "Talk to Old Man Yarlo in south Varrock again.");
- talkToYarloAgain.addDialogStep("Skip Yarlo's lecture. He'll offer it later if you like.");
- talkToYarloOnceMore = new NpcStep(this, NpcID.DADDYSHOME_DADDY, new WorldPoint(3240, 3395, 0), "Talk to Old Man Yarlo in south Varrock.");
+ initializeRequirements();
+ setupSteps();
- talkToMarloToFinish = new NpcStep(this, NpcID.CON_CONTRACTOR_VARROCK_1OP, new WorldPoint(3241, 3471, 0), "Talk to Marlo in north east Varrock to complete the quest.");
- ((NpcStep) talkToMarloToFinish).addAlternateNpcs(NpcID.CON_CONTRACTOR_VARROCK_2OP);
- talkToMarloToFinish.addDialogStep("Yeah, what have you got for me?");
+ var steps = new HashMap();
- removeCampbed = new ObjectStep(this, ObjectID.DADDYSHOME_BED, new WorldPoint(3242, 3398, 0), "Remove the broken items in the house.");
- removeCarpet = new ObjectStep(this, ObjectID.DADDYSHOME_CARPET_MIDDLE, new WorldPoint(3239, 3395, 0), "Remove the broken items in the house.");
- removeStool = new ObjectStep(this, ObjectID.DADDYSHOME_STOOL_2, new WorldPoint(3239, 3394, 0), "Remove the broken items in the house.");
- removeTable = new ObjectStep(this, ObjectID.DADDYSHOME_TABLE_2, new WorldPoint(3240, 3394, 0), "Remove the broken items in the house.");
- removeChair = new ObjectStep(this, ObjectID.DADDYSHOME_CHAIR, new WorldPoint(3241, 3393, 0), "Remove the broken items in the house.");
- removeTable2 = new ObjectStep(this, ObjectID.DADDYSHOME_TABLE_1, new WorldPoint(3245, 3394, 0), "Remove the broken items in the house.");
- removeStool2 = new ObjectStep(this, ObjectID.DADDYSHOME_STOOL_1, new WorldPoint(3244, 3394, 0), "Remove the broken items in the house.");
+ steps.put(0, talkToMarlo);
+ steps.put(1, talkToYarlo);
- removeCampbed.addSubSteps(removeCarpet, removeStool, removeTable, removeChair, removeTable2, removeStool2);
+ var cRemoveFurniture = new ConditionalStep(this, talkToYarloAfterRemovingFurniture);
+ cRemoveFurniture.addStep(needToRemoveAnyFurniture, removeFurniture);
+ steps.put(2, cRemoveFurniture);
- searchCrate = new ObjectStep(this, ObjectID.DADDYSHOME_CRATES, new WorldPoint(3243, 3398, 0), "Search the crates in Yarlo's house for waxwood logs.");
+ steps.put(3, talkToYarloAfterRemovingFurniture);
+ steps.put(4, talkToYarloAfterRemovingFurniture);
- talkToOperator = new NpcStep(this, NpcID.POH_SAWMILL_OPP, new WorldPoint(3302, 3492, 0), "Talk to the Sawmill Operator north east of Varrock to make waxwood planks.", waxwoodLog3);
- talkToOperator.addDialogStep("I need some waxwood planks for Old Man Yarlo.");
- buildCampbed = new ObjectStep(this, ObjectID.DADDYSHOME_BED, new WorldPoint(3242, 3398, 0), "Build the waxwood bed in the house.", waxwoodPlank3, bolt2, hammer, saw);
-
- buildCarpet = new ObjectStep(this, ObjectID.DADDYSHOME_CARPET_MIDDLE, new WorldPoint(3239, 3395, 0), "Build the items in the house.", bolt3, saw, hammer);
- buildStool = new ObjectStep(this, ObjectID.DADDYSHOME_STOOL_2, new WorldPoint(3239, 3394, 0), "Build the items in the house.", plank, nails2, saw, hammer);
- buildTable = new ObjectStep(this, ObjectID.DADDYSHOME_TABLE_2, new WorldPoint(3240, 3394, 0), "Build the items in the house.", plank3, nails4, saw, hammer);
- buildChair = new ObjectStep(this, ObjectID.DADDYSHOME_CHAIR, new WorldPoint(3241, 3393, 0), "Build the items in the house.", plank2, nails2, saw, hammer);
- buildTable2 = new ObjectStep(this, ObjectID.DADDYSHOME_TABLE_1, new WorldPoint(3245, 3394, 0), "Build the items in the house.", plank3, nails4, saw, hammer);
- buildStool2 = new ObjectStep(this, ObjectID.DADDYSHOME_STOOL_1, new WorldPoint(3244, 3394, 0), "Build the items in the house.", plank, nails2, saw, hammer);
- buildCarpet.addSubSteps(buildStool, buildTable, buildChair, buildTable2, buildStool2);
+ var cRepairFurniture = new ConditionalStep(this, talkToYarloAfterBuildingFurniture);
+ cRepairFurniture.addStep(needToBuildSimpleFurniture, buildSimpleFurniture);
+ cRepairFurniture.addStep(and(needToBuildCampbed, waxwoodPlank3.alsoCheckBank(questBank)), buildCampbed);
+ cRepairFurniture.addStep(and(needToBuildCampbed, waxwoodLog3.alsoCheckBank(questBank)), talkToOperator);
+ cRepairFurniture.addStep(needToBuildCampbed, searchCrate);
+
+ steps.put(5, cRepairFurniture);
+ steps.put(6, cRepairFurniture);
+ steps.put(7, cRepairFurniture); // unreachable?
+ steps.put(8, cRepairFurniture); // unreachable?
+ steps.put(9, cRepairFurniture); // unreachable?
+
+ steps.put(10, talkToMarloToFinish);
+ steps.put(11, talkToMarloToFinish); // unreachable?
+ steps.put(12, talkToMarloToFinish);
+
+ return steps;
}
@Override
public List getItemRequirements()
{
- return Arrays.asList(plank10, nails20, bolt5, saw, hammer);
+ return List.of(
+ plank10,
+ nails20,
+ bolt5,
+ saw,
+ hammer
+ );
}
@Override
public List getItemRecommended()
{
- return Arrays.asList(lumberyardTeleport, varrockTeleport3);
+ return List.of(
+ lumberyardTeleport,
+ varrockTeleport3
+ );
}
@Override
public List getExperienceRewards()
{
- return Collections.singletonList(new ExperienceReward(Skill.CONSTRUCTION, 400));
+ return List.of(
+ new ExperienceReward(Skill.CONSTRUCTION, 400)
+ );
}
@Override
public List getItemRewards()
{
- return Arrays.asList(
+ return List.of(
new ItemReward("Planks", ItemID.WOODPLANK, 25),
new ItemReward("Oak Planks", ItemID.PLANK_OAK, 10),
new ItemReward("Mithril Nails", ItemID.NAILS_MITHRIL, 50),
@@ -223,14 +308,34 @@ public List getItemRewards()
new ItemReward("Bolt of Cloth", ItemID.CLOTH, 8),
new ItemReward("House Teleport Tablets", ItemID.POH_TABLET_TELEPORTTOHOUSE, 5),
new ItemReward("Falador Teleport Tablet", ItemID.POH_TABLET_FALADORTELEPORT, 1),
- new ItemReward("POH in Rimmington or 1,000 Coins", ItemID.COINS, 1));
+ new ItemReward("POH in Rimmington or 1,000 Coins", ItemID.COINS, 1)
+ );
}
@Override
public List getPanels()
{
- List allSteps = new ArrayList<>();
- allSteps.add(new PanelDetails("Helping Yarlo & Marlo", Arrays.asList(talkToMarlo, talkToYarlo, removeCampbed, talkToYarloAgain, buildCarpet, searchCrate, talkToOperator, buildCampbed, talkToYarloOnceMore, talkToMarloToFinish), plank10, nails20, bolt5, hammer, saw));
- return allSteps;
+ var sections = new ArrayList();
+
+ sections.add(new PanelDetails("Helping Yarlo & Marlo", List.of(
+ talkToMarlo,
+ talkToYarlo,
+ removeFurniture,
+ talkToYarloAfterRemovingFurniture,
+ buildSimpleFurniture,
+ searchCrate,
+ talkToOperator,
+ buildCampbed,
+ talkToYarloAfterBuildingFurniture,
+ talkToMarloToFinish
+ ), List.of(
+ plank10,
+ nails20,
+ bolt5,
+ hammer,
+ saw
+ )));
+
+ return sections;
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/enchantedkey/EnchantedKeyDigStep.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/enchantedkey/EnchantedKeyDigStep.java
index 39db869d834..834e7eafca1 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/enchantedkey/EnchantedKeyDigStep.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/enchantedkey/EnchantedKeyDigStep.java
@@ -38,6 +38,7 @@
import net.runelite.api.events.ChatMessage;
import net.runelite.api.events.VarbitChanged;
import net.runelite.api.gameval.ItemID;
+import net.runelite.api.gameval.VarbitID;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.game.ItemManager;
import net.runelite.client.ui.overlay.OverlayUtil;
@@ -120,7 +121,7 @@ public void onVarbitChanged(VarbitChanged varbitChanged)
public void resetState()
{
setWorldPoint(null);
- int locationStates = client.getVarbitValue(1391);
+ int locationStates = client.getVarbitValue(VarbitID.MAKINGHISTORY_LOCSTATUS);
Set locations = Arrays.stream(EnchantedKeyDigLocation.values()).filter(p -> ((locationStates >> p.getBit()) & 1) == 0)
.collect(Collectors.toSet());
if (enchantedKeySolver != null)
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/familypest/FamilyPest.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/familypest/FamilyPest.java
index 885c5bfc1b7..82db2ecd9ca 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/familypest/FamilyPest.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/familypest/FamilyPest.java
@@ -45,6 +45,7 @@
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import java.util.*;
@@ -123,9 +124,9 @@ public void setupConditions()
{
upJollyBoar = new ZoneRequirement(upstairsJollyBoar);
- talkedToCaleb = new VarbitRequirement(5348, 1);
- talkedToAvan = new VarbitRequirement(5349, 1);
- talkedToJohnathon = new VarbitRequirement(5350, 1);
+ talkedToCaleb = new VarbitRequirement(VarbitID.FAMILY_QUEST_CALEB, 1);
+ talkedToAvan = new VarbitRequirement(VarbitID.FAMILY_QUEST_AVAN, 1);
+ talkedToJohnathon = new VarbitRequirement(VarbitID.FAMILY_QUEST_JOHNATHON, 1);
}
@Override
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/hopespearswill/HopespearsWill.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/hopespearswill/HopespearsWill.java
index 3219882398d..5a3f56e05ea 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/hopespearswill/HopespearsWill.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/hopespearswill/HopespearsWill.java
@@ -38,7 +38,6 @@
import net.runelite.client.plugins.microbot.questhelper.requirements.player.SkillRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.quest.QuestRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.util.ItemSlots;
-import net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper;
import net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicType;
import net.runelite.client.plugins.microbot.questhelper.requirements.var.VarbitRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.widget.WidgetTextRequirement;
@@ -52,6 +51,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import java.util.*;
@@ -113,11 +113,11 @@ public Map loadSteps()
defeatGoblins.addStep(nor(hasStrongbonesBones), sayNameStrongbones);
ConditionalStep buryBones = new ConditionalStep(this, goToYubiusk);
- buryBones.addStep(LogicHelper.nor(snotheadBuried), burySnothead);
- buryBones.addStep(LogicHelper.nor(snailfeetBuried), burySnailfeet);
- buryBones.addStep(LogicHelper.nor(mosschinBuried), buryMosschin);
- buryBones.addStep(LogicHelper.nor(redeyesBuried), buryRedeyes);
- buryBones.addStep(LogicHelper.nor(strongbonesBuried), buryStrongbones);
+ buryBones.addStep(nor(snotheadBuried), burySnothead);
+ buryBones.addStep(nor(snailfeetBuried), burySnailfeet);
+ buryBones.addStep(nor(mosschinBuried), buryMosschin);
+ buryBones.addStep(nor(redeyesBuried), buryRedeyes);
+ buryBones.addStep(nor(strongbonesBuried), buryStrongbones);
ConditionalStep finishQuest = new ConditionalStep(this, goToGoblinCaveAfterStart);
finishQuest.addStep(new Conditions(inYubiusk, hasAllBones), buryBones);
@@ -168,7 +168,7 @@ protected void setupRequirements()
inGoblinCave = new ZoneRequirement(goblinCave);
nothingEquipped = new NoItemRequirement("No items equipped", ItemSlots.ANY_EQUIPPED);
goblinWidgetActive = new WidgetTextRequirement(739, 2, 1, "Select Your Goblin");
- isAGoblin = new VarbitRequirement(13612, 1);
+ isAGoblin = new VarbitRequirement(VarbitID.LOTG_PLAYER_IS_A_GOBLIN, 1);
inGoblinTemple = new ZoneRequirement(goblinTemple);
isInCrypt = new ZoneRequirement(crypt);
inYubiusk = new ZoneRequirement(yubiusk);
@@ -179,11 +179,11 @@ protected void setupRequirements()
redeyesAlive = new NpcRequirement("Redeyes", NpcID.LOTG_GOBLIN_SKELETON_HIGH_PRIEST4);
strongbonesAlive = new NpcRequirement("Strongbones", NpcID.LOTG_GOBLIN_SKELETON_HIGH_PRIEST5);
- snotheadBuried = new VarbitRequirement(13620, 1);
- snailfeetBuried = new VarbitRequirement(13621, 1);
- mosschinBuried = new VarbitRequirement(13622, 1);
- redeyesBuried = new VarbitRequirement(13623, 1);
- strongbonesBuried = new VarbitRequirement(13624, 1);
+ snotheadBuried = new VarbitRequirement(VarbitID.HOPESPEAR_PRIEST_1, 1);
+ snailfeetBuried = new VarbitRequirement(VarbitID.HOPESPEAR_PRIEST_2, 1);
+ mosschinBuried = new VarbitRequirement(VarbitID.HOPESPEAR_PRIEST_3, 1);
+ redeyesBuried = new VarbitRequirement(VarbitID.HOPESPEAR_PRIEST_4, 1);
+ strongbonesBuried = new VarbitRequirement(VarbitID.HOPESPEAR_PRIEST_5, 1);
hasSnotheadBones = new Conditions(LogicType.OR, snotheadBones, snotheadBuried);
hasSnailfeetBones = new Conditions(LogicType.OR, snailfeetBones, snailfeetBuried);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/lairoftarnrazorlor/TarnRoute.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/lairoftarnrazorlor/TarnRoute.java
index db538577b9d..98e3576b6bc 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/lairoftarnrazorlor/TarnRoute.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/lairoftarnrazorlor/TarnRoute.java
@@ -42,11 +42,11 @@
import net.runelite.client.plugins.microbot.questhelper.steps.ObjectStep;
import net.runelite.client.plugins.microbot.questhelper.steps.QuestStep;
import net.runelite.api.Prayer;
-import net.runelite.api.SpriteID;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.SpriteID;
import net.runelite.api.gameval.VarbitID;
import java.util.Arrays;
@@ -267,10 +267,10 @@ public void setupSteps()
searchWall2Room6 = new ObjectStep(questHelper, ObjectID.LOTR_TRAP_SPEAR_WALL_LVL1, new WorldPoint(3154, 4605, 1), "Follow the path to the east.");
goThroughRoom6 = new ObjectStep(questHelper, ObjectID.LOTR_RUINS_DOOR_28A, new WorldPoint(3176, 4598, 1), "Follow the path to the east. Avoid the walls which will occasionally stick out and knock you down, marked with a skull.");
- goThroughRoom6.addTileMarker(new WorldPoint(3162, 4600, 1), SpriteID.PLAYER_KILLER_SKULL);
- goThroughRoom6.addTileMarker(new WorldPoint(3164, 4600, 1), SpriteID.PLAYER_KILLER_SKULL);
- goThroughRoom6.addTileMarker(new WorldPoint(3171, 4600, 1), SpriteID.PLAYER_KILLER_SKULL);
- goThroughRoom6.addTileMarker(new WorldPoint(3173, 4600, 1), SpriteID.PLAYER_KILLER_SKULL);
+ goThroughRoom6.addTileMarker(new WorldPoint(3162, 4600, 1), SpriteID.HEADICONS_PK);
+ goThroughRoom6.addTileMarker(new WorldPoint(3164, 4600, 1), SpriteID.HEADICONS_PK);
+ goThroughRoom6.addTileMarker(new WorldPoint(3171, 4600, 1), SpriteID.HEADICONS_PK);
+ goThroughRoom6.addTileMarker(new WorldPoint(3173, 4600, 1), SpriteID.HEADICONS_PK);
goThroughRoom6.addSubSteps(searchWallRoom6, searchWall2Room6);
goThroughRoom7 = new ObjectStep(questHelper, ObjectID.LOTR_RUINS_STAIRS_LVL1, new WorldPoint(3193, 4598, 1), "Activate Protect from Magic and jump across the pillars. Go down the stairs.", protectFromMagic);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/skippyandthemogres/SkippyAndTheMogres.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/skippyandthemogres/SkippyAndTheMogres.java
index b6ec25093df..483b4f8f426 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/skippyandthemogres/SkippyAndTheMogres.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/skippyandthemogres/SkippyAndTheMogres.java
@@ -123,7 +123,7 @@ public List getUnlockRewards()
{
return Arrays.asList(
new UnlockReward("Ability to kill Mogres"),
- new UnlockReward("Ability to recieve Mogres as a Slayer task"));
+ new UnlockReward("Ability to receive Mogres as a Slayer task"));
}
@Override
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/thegeneralsshadow/TheGeneralsShadow.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/thegeneralsshadow/TheGeneralsShadow.java
index 88d6b5cda7d..d5796b4ee26 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/thegeneralsshadow/TheGeneralsShadow.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/thegeneralsshadow/TheGeneralsShadow.java
@@ -51,6 +51,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import java.util.*;
@@ -164,11 +165,11 @@ public void setupConditions()
inBouncerCave = new ZoneRequirement(bouncerCave);
hasNote = sinSeersNote;
- givenNote = new VarbitRequirement(3335, 2);
- talkedToGnomeScout = new VarbitRequirement(3332, 1);
- talkedToFaladorScout = new VarbitRequirement(3333, 1);
- talkedToShantayScout = new VarbitRequirement(3334, 1);
- talkedToKaramjaScout = new VarbitRequirement(3331, 1);
+ givenNote = new VarbitRequirement(VarbitID.SHADOW_MAJ_SEER, 2);
+ talkedToGnomeScout = new VarbitRequirement(VarbitID.SHADOW_MAJ_SCOUT2, 1);
+ talkedToFaladorScout = new VarbitRequirement(VarbitID.SHADOW_MAJ_SCOUT3, 1);
+ talkedToShantayScout = new VarbitRequirement(VarbitID.SHADOW_MAJ_SCOUT4, 1);
+ talkedToKaramjaScout = new VarbitRequirement(VarbitID.SHADOW_MAJ_SCOUT1, 1);
// 3336 0->2 attempted to bribe Seer
// 3335 0->1 given money to Seer
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/themagearenaii/MageArenaBossStep.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/themagearenaii/MageArenaBossStep.java
index da59db179ab..ea706a9128c 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/themagearenaii/MageArenaBossStep.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/themagearenaii/MageArenaBossStep.java
@@ -39,6 +39,7 @@
import net.runelite.api.events.ChatMessage;
import net.runelite.api.events.VarbitChanged;
import net.runelite.api.gameval.ItemID;
+import net.runelite.api.gameval.VarbitID;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.game.ItemManager;
import net.runelite.client.ui.overlay.OverlayUtil;
@@ -82,8 +83,6 @@ public class MageArenaBossStep extends DetailedQuestStep
int currentVar = 0;
- final int BOSS_MOVING_TIMER_VARBIT = 6062;
-
public MageArenaBossStep(QuestHelper questHelper, ItemRequirement staff, String bossName,
String abilityDetail, ItemRequirement... requirements)
{
@@ -151,7 +150,7 @@ else if (digLocations.size() < 1)
public void onVarbitChanged(VarbitChanged varbitChanged)
{
super.onVarbitChanged(varbitChanged);
- int newState = client.getVarbitValue(BOSS_MOVING_TIMER_VARBIT);
+ int newState = client.getVarbitValue(VarbitID.MA2_TIMER_REMAINING);
// If the position of the bosses changes, reset
if (newState > currentVar)
@@ -254,7 +253,7 @@ public void update(final String message)
public void startUp()
{
super.startUp();
- currentVar = client.getVarbitValue(BOSS_MOVING_TIMER_VARBIT);
+ currentVar = client.getVarbitValue(VarbitID.MA2_TIMER_REMAINING);
Set locations =
Arrays.stream(MageArenaSpawnLocation.values())
.collect(Collectors.toSet());
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/themagearenaii/TheMageArenaII.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/themagearenaii/TheMageArenaII.java
index 1af94ccd9af..66082620962 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/themagearenaii/TheMageArenaII.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/themagearenaii/TheMageArenaII.java
@@ -46,6 +46,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import java.util.*;
@@ -141,9 +142,9 @@ public void setupConditions()
{
inCavern = new ZoneRequirement(cavern);
- givenHand = new VarbitRequirement(6063, 1);
- givenRoots = new VarbitRequirement(6064, 1);
- givenHeart = new VarbitRequirement(6065, 1);
+ givenHand = new VarbitRequirement(VarbitID.MA2_SARADOMIN_COMPONENT, 1);
+ givenRoots = new VarbitRequirement(VarbitID.MA2_GUTHIX_COMPONENT, 1);
+ givenHeart = new VarbitRequirement(VarbitID.MA2_ZAMORAK_COMPONENT, 1);
// Handed in hand:
// 6066, 6063 0->1
// 6066 varies 0->7 (3 bits)
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/valetotems/ValeTotems.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/valetotems/ValeTotems.java
new file mode 100644
index 00000000000..411e998c0b1
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/miniquests/valetotems/ValeTotems.java
@@ -0,0 +1,333 @@
+/*
+ * Copyright (c) 2025, pajlada
+ * 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.microbot.questhelper.helpers.miniquests.valetotems;
+
+import net.runelite.client.plugins.microbot.questhelper.panel.PanelDetails;
+import net.runelite.client.plugins.microbot.questhelper.questhelpers.BasicQuestHelper;
+import net.runelite.client.plugins.microbot.questhelper.questinfo.QuestHelperQuest;
+import net.runelite.client.plugins.microbot.questhelper.requirements.Requirement;
+import net.runelite.client.plugins.microbot.questhelper.requirements.conditional.Conditions;
+import net.runelite.client.plugins.microbot.questhelper.requirements.item.ItemRequirement;
+import net.runelite.client.plugins.microbot.questhelper.requirements.player.SkillRequirement;
+import net.runelite.client.plugins.microbot.questhelper.requirements.quest.QuestRequirement;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.and;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.or;
+import net.runelite.client.plugins.microbot.questhelper.requirements.util.Operation;
+import net.runelite.client.plugins.microbot.questhelper.requirements.var.VarbitRequirement;
+import net.runelite.client.plugins.microbot.questhelper.requirements.zone.Zone;
+import net.runelite.client.plugins.microbot.questhelper.rewards.UnlockReward;
+import net.runelite.client.plugins.microbot.questhelper.steps.ConditionalStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.NpcStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.ObjectStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.QuestStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.widget.WidgetHighlight;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import net.runelite.api.QuestState;
+import net.runelite.api.Skill;
+import net.runelite.api.coords.WorldPoint;
+import net.runelite.api.gameval.ItemID;
+import net.runelite.api.gameval.NpcID;
+import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
+
+/**
+ * The quest guide for the "Vale Totems" OSRS quest
+ */
+public class ValeTotems extends BasicQuestHelper
+{
+ // Item requirements
+ ItemRequirement knife;
+ ItemRequirement oneOakLog;
+ ItemRequirement fourDecorativeItems;
+ ItemRequirement threeDecorativeItems;
+ ItemRequirement twoDecorativeItems;
+ ItemRequirement oneDecorativeItem;
+
+ // Miscellaneous requirements
+ VarbitRequirement needToBuildTotem;
+ VarbitRequirement isTotemBaseBuilt;
+
+ VarbitRequirement needToCarveAnimals;
+
+ Conditions isBuffaloNearby;
+ Conditions isJaguarNearby;
+ Conditions isEagleNearby;
+ Conditions isSnakeNearby;
+ Conditions isScorpionNearby;
+
+ Conditions missingBuffaloCarve;
+ Conditions missingJaguarCarve;
+ Conditions missingEagleCarve;
+ Conditions missingSnakeCarve;
+ Conditions missingScorpionCarve;
+
+ VarbitRequirement isDoneCarving;
+
+ VarbitRequirement needToDecorate;
+
+ VarbitRequirement oneShieldAdded;
+ VarbitRequirement twoShieldsAdded;
+ VarbitRequirement threeShieldsAdded;
+ VarbitRequirement isDoneDecorating;
+
+ // Steps
+ NpcStep startQuest;
+
+ ObjectStep buildTotemBase;
+
+ ObjectStep carveAnimalsYouSee;
+ ConditionalStep carveTotem;
+ NpcStep talkToIsadoraAfterCarvingTotem;
+ ConditionalStep decorateTotem;
+ ObjectStep decorateTotemFourShields;
+ NpcStep talkToIsadoraAfterDecoratingTotem;
+ ConditionalStep carveAndDecorateTotem;
+
+ QuestStep claimOffering;
+
+ QuestStep finishQuest;
+ NpcStep talkToIsadoraToLearnAboutCarving;
+
+ @Override
+ public Map loadSteps()
+ {
+ initializeRequirements();
+ setupSteps();
+
+ var steps = new HashMap();
+
+ steps.put(0, startQuest);
+ steps.put(10, startQuest);
+ steps.put(20, startQuest);
+ steps.put(30, carveAndDecorateTotem);
+ steps.put(40, talkToIsadoraAfterDecoratingTotem);
+ steps.put(50, claimOffering);
+ steps.put(60, finishQuest);
+
+ return steps;
+ }
+
+ @Override
+ protected void setupRequirements()
+ {
+ knife = new ItemRequirement("Knife", ItemID.KNIFE);
+ knife.setTooltip("There's a knife upstairs in the General Store south of the miniquest start point");
+ oneOakLog = new ItemRequirement("Oak log", ItemID.OAK_LOGS, 1);
+ oneOakLog.setTooltip("You can also use Willow, Maple, Yew, Magic, or Redwood logs, but it needs to match the decorative items you're bringing.");
+
+ var possibleDecorativeItems = List.of(ItemID.OAK_SHIELD, ItemID.UNSTRUNG_OAK_LONGBOW, ItemID.OAK_LONGBOW, ItemID.UNSTRUNG_OAK_SHORTBOW, ItemID.OAK_SHORTBOW);
+
+ fourDecorativeItems = new ItemRequirement("Oak shield/longbow/shortbow", possibleDecorativeItems, 4);
+ fourDecorativeItems.setTooltip("You can also use Willow, Maple, Yew, Magic, or Redwood decorative items, but it needs to match the logs you used to build the totem.");
+ threeDecorativeItems = new ItemRequirement("Oak shield/longbow/shortbow", possibleDecorativeItems, 3);
+ threeDecorativeItems.setTooltip("You can also use Willow, Maple, Yew, Magic, or Redwood decorative items, but it needs to match the logs you used to build the totem.");
+ twoDecorativeItems = new ItemRequirement("Oak shield/longbow/shortbow", possibleDecorativeItems, 2);
+ twoDecorativeItems.setTooltip("You can also use Willow, Maple, Yew, Magic, or Redwood decorative items, but it needs to match the logs you used to build the totem.");
+ oneDecorativeItem = new ItemRequirement("Oak shield/longbow/shortbow", possibleDecorativeItems, 1);
+ oneDecorativeItem.setTooltip("You can also use Willow, Maple, Yew, Magic, or Redwood decorative items, but it needs to match the logs you used to build the totem.");
+
+ needToBuildTotem = new VarbitRequirement(VarbitID.ENT_TOTEMS_BROKEN_CHAT, 1);
+ isTotemBaseBuilt = new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_BASE, 1);
+
+ isBuffaloNearby = or(
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_ANIMAL_1, 1),
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_ANIMAL_2, 1),
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_ANIMAL_3, 1)
+ );
+ isJaguarNearby = or(
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_ANIMAL_1, 2),
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_ANIMAL_2, 2),
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_ANIMAL_3, 2)
+ );
+ isEagleNearby = or(
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_ANIMAL_1, 3),
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_ANIMAL_2, 3),
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_ANIMAL_3, 3)
+ );
+ isSnakeNearby = or(
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_ANIMAL_1, 4),
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_ANIMAL_2, 4),
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_ANIMAL_3, 4)
+ );
+ isScorpionNearby = or(
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_ANIMAL_1, 5),
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_ANIMAL_2, 5),
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_ANIMAL_3, 5)
+ );
+
+ missingBuffaloCarve = and(
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_LOW, 10, Operation.NOT_EQUAL),
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_MID, 10, Operation.NOT_EQUAL),
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_TOP, 10, Operation.NOT_EQUAL)
+ );
+
+ missingJaguarCarve = and(
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_LOW, 11, Operation.NOT_EQUAL),
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_MID, 11, Operation.NOT_EQUAL),
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_TOP, 11, Operation.NOT_EQUAL)
+ );
+
+ missingEagleCarve = and(
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_LOW, 12, Operation.NOT_EQUAL),
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_MID, 12, Operation.NOT_EQUAL),
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_TOP, 12, Operation.NOT_EQUAL)
+ );
+
+ missingSnakeCarve = and(
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_LOW, 13, Operation.NOT_EQUAL),
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_MID, 13, Operation.NOT_EQUAL),
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_TOP, 13, Operation.NOT_EQUAL)
+ );
+
+ missingScorpionCarve = and(
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_LOW, 14, Operation.NOT_EQUAL),
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_MID, 14, Operation.NOT_EQUAL),
+ new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_TOP, 14, Operation.NOT_EQUAL)
+ );
+
+ isDoneCarving = new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_BASE_CARVED, 1);
+
+ needToCarveAnimals = new VarbitRequirement(VarbitID.ENT_TOTEMS_CARVE_CHAT, 1);
+ needToDecorate = new VarbitRequirement(VarbitID.ENT_TOTEMS_DECORATE_CHAT, 1);
+
+ oneShieldAdded = new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_DECORATIONS, 1);
+ twoShieldsAdded = new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_DECORATIONS, 2);
+ threeShieldsAdded = new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_DECORATIONS, 3);
+ isDoneDecorating = new VarbitRequirement(VarbitID.ENT_TOTEMS_SITE_1_DECORATIONS, 4);
+ }
+
+ public void setupSteps()
+ {
+ startQuest = new NpcStep(this, new int[]{NpcID.ENT_TOTEMS_INTRO_RANULPH, NpcID.ENT_TOTEMS_INTRO_RANULPH_1OP, NpcID.ENT_TOTEMS_INTRO_RANULPH_2OP, NpcID.ENT_TOTEMS_INTRO_RANULPH_CS,}, new WorldPoint(1365, 3366, 0), "Talk to Ranulph in the west part of Auburnvale to start the quest.");
+ startQuest.addDialogStep("Yes.");
+
+ buildTotemBase = new ObjectStep(this, ObjectID.ENT_TOTEMS_BASE_NONE, new WorldPoint(1370, 3375, 0), "Build the totem site.", knife, oneOakLog);
+
+ talkToIsadoraToLearnAboutCarving = new NpcStep(this, NpcID.ENT_TOTEMS_INTRO_CHILD_VIS, new WorldPoint(1366, 3369, 0), "Talk to Isadora to learn about carving.");
+ talkToIsadoraAfterCarvingTotem = new NpcStep(this, NpcID.ENT_TOTEMS_INTRO_CHILD_VIS, new WorldPoint(1366, 3369, 0), "Return to Isadora after carving the spirit animals into the totem.");
+
+ var carveBuffalo = new ObjectStep(this, ObjectID.ENT_TOTEMS_SITE_1_BASE, new WorldPoint(1370, 3375, 0), "Carve a Buffalo into the totem base.");
+ carveBuffalo.addWidgetHighlight(WidgetHighlight.createMultiskillByName("Buffalo"));
+
+ var carveJaguar = new ObjectStep(this, ObjectID.ENT_TOTEMS_SITE_1_BASE, new WorldPoint(1370, 3375, 0), "Carve a Jaguar into the totem base.");
+ carveJaguar.addWidgetHighlight(WidgetHighlight.createMultiskillByName("Jaguar"));
+
+ var carveEagle = new ObjectStep(this, ObjectID.ENT_TOTEMS_SITE_1_BASE, new WorldPoint(1370, 3375, 0), "Carve a Eagle into the totem base.");
+ carveEagle.addWidgetHighlight(WidgetHighlight.createMultiskillByName("Eagle"));
+
+ var carveSnake = new ObjectStep(this, ObjectID.ENT_TOTEMS_SITE_1_BASE, new WorldPoint(1370, 3375, 0), "Carve a Snake into the totem base.");
+ carveSnake.addWidgetHighlight(WidgetHighlight.createMultiskillByName("Snake"));
+
+ var carveScorpion = new ObjectStep(this, ObjectID.ENT_TOTEMS_SITE_1_BASE, new WorldPoint(1370, 3375, 0), "Carve a Scorpion into the totem base.");
+ carveScorpion.addWidgetHighlight(WidgetHighlight.createMultiskillByName("Scorpion"));
+
+ // fallback step in case our detection fails
+ carveAnimalsYouSee = new ObjectStep(this, ObjectID.ENT_TOTEMS_SITE_1_BASE, new WorldPoint(1370, 3375, 0), "Carve spirit animals you see into the totem.");
+ carveAnimalsYouSee.addSubSteps(carveBuffalo, carveJaguar, carveEagle, carveSnake, carveScorpion);
+
+ carveTotem = new ConditionalStep(this, carveAnimalsYouSee);
+ carveTotem.addStep(and(isBuffaloNearby, missingBuffaloCarve), carveBuffalo);
+ carveTotem.addStep(and(isJaguarNearby, missingJaguarCarve), carveJaguar);
+ carveTotem.addStep(and(isEagleNearby, missingEagleCarve), carveEagle);
+ carveTotem.addStep(and(isSnakeNearby, missingSnakeCarve), carveSnake);
+ carveTotem.addStep(and(isScorpionNearby, missingScorpionCarve), carveScorpion);
+
+ var decorateTotemOneShield = new ObjectStep(this, ObjectID.ENT_TOTEMS_SITE_1_BASE, new WorldPoint(1370, 3375, 0), "Decorate the totem with one decorative item (shield, longbow, or shortbow) of the same wood type you used to build/carve the totem.", oneDecorativeItem);
+ var decorateTotemTwoShields = new ObjectStep(this, ObjectID.ENT_TOTEMS_SITE_1_BASE, new WorldPoint(1370, 3375, 0), "Decorate the totem with two decorative items (shield, longbow, or shortbow) of the same wood type you used to build/carve the totem.", twoDecorativeItems);
+ var decorateTotemThreeShields = new ObjectStep(this, ObjectID.ENT_TOTEMS_SITE_1_BASE, new WorldPoint(1370, 3375, 0), "Decorate the totem with three decorative items (shield, longbow, or shortbow) of the same wood type you used to build/carve the totem.", threeDecorativeItems);
+ decorateTotemFourShields = new ObjectStep(this, ObjectID.ENT_TOTEMS_SITE_1_BASE, new WorldPoint(1370, 3375, 0), "Decorate the totem with four decorative items (shield, longbow, or shortbow) of the same wood type you used to build/carve the totem.", fourDecorativeItems);
+ decorateTotemFourShields.addSubSteps(decorateTotemOneShield, decorateTotemTwoShields, decorateTotemThreeShields);
+ talkToIsadoraAfterDecoratingTotem = new NpcStep(this, NpcID.ENT_TOTEMS_INTRO_CHILD_VIS, new WorldPoint(1366, 3369, 0), "Return to Isadora to talk after decorating the totem.");
+ decorateTotem = new ConditionalStep(this, decorateTotemFourShields);
+ decorateTotem.addStep(oneShieldAdded, decorateTotemThreeShields);
+ decorateTotem.addStep(twoShieldsAdded, decorateTotemTwoShields);
+ decorateTotem.addStep(threeShieldsAdded, decorateTotemOneShield);
+
+ carveAndDecorateTotem = new ConditionalStep(this, startQuest);
+ carveAndDecorateTotem.addStep(isDoneDecorating, talkToIsadoraAfterDecoratingTotem);
+ carveAndDecorateTotem.addStep(needToDecorate, decorateTotem);
+ carveAndDecorateTotem.addStep(isDoneCarving, talkToIsadoraAfterCarvingTotem);
+ carveAndDecorateTotem.addStep(needToCarveAnimals, carveTotem);
+ carveAndDecorateTotem.addStep(isTotemBaseBuilt, talkToIsadoraToLearnAboutCarving);
+ carveAndDecorateTotem.addStep(needToBuildTotem, buildTotemBase);
+
+ claimOffering = new ObjectStep(this, ObjectID.ENT_TOTEMS_OFFERINGS_B, new WorldPoint(1370, 3374, 0), "Claim the offering the Ent left next to your totem.");
+ finishQuest = new NpcStep(this, NpcID.ENT_TOTEMS_INTRO_CHILD_VIS, new WorldPoint(1366, 3369, 0), "Return to Isadora to finish the quest.");
+ }
+
+ @Override
+ public List getItemRequirements()
+ {
+ return List.of(
+ knife,
+ oneOakLog,
+ fourDecorativeItems
+ );
+ }
+
+ @Override
+ public List getGeneralRequirements()
+ {
+ return List.of(
+ new QuestRequirement(QuestHelperQuest.CHILDREN_OF_THE_SUN, QuestState.FINISHED),
+ new SkillRequirement(Skill.FLETCHING, 20)
+ );
+ }
+
+ @Override
+ public List getUnlockRewards()
+ {
+ return List.of(
+ new UnlockReward("Unlocks the Auburnvale fletching minigame")
+ );
+ }
+
+ @Override
+ public List getPanels()
+ {
+ var panels = new ArrayList();
+
+ panels.add(new PanelDetails("Repair the totem", List.of(
+ startQuest,
+ buildTotemBase,
+ talkToIsadoraToLearnAboutCarving,
+ carveAnimalsYouSee,
+ talkToIsadoraAfterCarvingTotem,
+ decorateTotemFourShields,
+ talkToIsadoraAfterDecoratingTotem,
+ claimOffering,
+ finishQuest
+ ), List.of(
+ knife,
+ oneOakLog,
+ fourDecorativeItems
+ )));
+
+ return panels;
+ }
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/allneededitems/AllNeededItems.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/allneededitems/AllNeededItems.java
index f6786e5f4f3..568f13f0e1b 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/allneededitems/AllNeededItems.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/allneededitems/AllNeededItems.java
@@ -30,7 +30,7 @@
import net.runelite.client.plugins.microbot.questhelper.requirements.item.ItemRequirement;
import net.runelite.client.plugins.microbot.questhelper.steps.DetailedQuestStep;
import net.runelite.client.plugins.microbot.questhelper.steps.QuestStep;
-import net.runelite.api.SpriteID;
+import net.runelite.api.gameval.SpriteID;
import java.util.*;
@@ -49,7 +49,7 @@ public QuestStep loadStep()
" need without running this helper if you activate it in the Quest Helper settings.", new ArrayList<>(reqs.values()));
step1.hideRequirements = true;
step1.considerBankForItemHighlight = true;
- step1.iconToUseForNeededItems = SpriteID.TAB_QUESTS;
+ step1.iconToUseForNeededItems = SpriteID.SideiconsInterface.QUESTS;
step1.setBackgroundWorldTooltipText("Highlighted due to the config setting 'Highlight missing items' in Quest Helper.");
return step1;
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/FarmingHandler.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/FarmingHandler.java
index ec9f23dad18..ca5117cb143 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/FarmingHandler.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/FarmingHandler.java
@@ -25,7 +25,7 @@
package net.runelite.client.plugins.microbot.questhelper.helpers.mischelpers.farmruns;
import net.runelite.api.Client;
-import net.runelite.api.Varbits;
+import net.runelite.api.gameval.VarbitID;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.plugins.timetracking.TimeTrackingConfig;
import net.runelite.client.plugins.timetracking.farming.Produce;
@@ -99,7 +99,7 @@ public CropState predictPatch(FarmingPatch patch, String profile)
int stages = state.getStages();
int tickrate = state.getTickRate();
- boolean botanist = client.getVarbitValue(Varbits.LEAGUE_RELIC_5) == 1;
+ boolean botanist = client.getVarbitValue(VarbitID.LEAGUE_RELIC_SELECTION_4) == 1;
if (botanist)
{
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/FarmingPatch.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/FarmingPatch.java
index 01c49e4e82b..9d635f7c69c 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/FarmingPatch.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/FarmingPatch.java
@@ -53,22 +53,22 @@ public class FarmingPatch
@Getter
private final Shape patchArea;
- FarmingPatch(String name, @Varbit int varbit, PatchImplementation implementation, WorldPoint location)
+ public FarmingPatch(String name, @Varbit int varbit, PatchImplementation implementation, WorldPoint location)
{
this(name, varbit, implementation, location, new Polygon(), -1);
}
- FarmingPatch(String name, @Varbit int varbit, PatchImplementation implementation, WorldPoint location, Shape patchArea)
+ public FarmingPatch(String name, @Varbit int varbit, PatchImplementation implementation, WorldPoint location, Shape patchArea)
{
this(name, varbit, implementation, location, patchArea, -1, -1);
}
- FarmingPatch(String name, @Varbit int varbit, PatchImplementation implementation, WorldPoint location, Shape patchArea, int farmer)
+ public FarmingPatch(String name, @Varbit int varbit, PatchImplementation implementation, WorldPoint location, Shape patchArea, int farmer)
{
this(name, varbit, implementation, location, patchArea, farmer, -1);
}
- FarmingPatch(String name, @Varbit int varbit, PatchImplementation implementation, WorldPoint location, Shape patchArea, int farmer, int patchNumber)
+ public FarmingPatch(String name, @Varbit int varbit, PatchImplementation implementation, WorldPoint location, Shape patchArea, int farmer, int patchNumber)
{
this.name = name;
this.varbit = varbit;
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/FarmingRegion.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/FarmingRegion.java
index 76bd405804b..9091fa01d10 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/FarmingRegion.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/FarmingRegion.java
@@ -24,22 +24,16 @@
*/
package net.runelite.client.plugins.microbot.questhelper.helpers.mischelpers.farmruns;
-import java.util.Collections;
-import java.util.HashSet;
import lombok.Getter;
import net.runelite.api.coords.WorldPoint;
-import java.util.Set;
-import org.jetbrains.annotations.NotNull;
-
@Getter
-public class FarmingRegion implements Comparable
+public class FarmingRegion
{
private final String name;
private final int regionID;
private final boolean definite;
private final FarmingPatch[] patches;
- private final Set regionIDs;
FarmingRegion(String name, int regionID, boolean definite, FarmingPatch... patches)
{
@@ -47,56 +41,21 @@ public class FarmingRegion implements Comparable
this.regionID = regionID;
this.definite = definite;
this.patches = patches;
- this.regionIDs = Set.of(regionID);
for (FarmingPatch p : patches)
{
p.setRegion(this);
}
}
- FarmingRegion(String name, int regionID, boolean definite, Set regionIDs, FarmingPatch... patches)
- {
- this.name = name;
- this.regionID = regionID;
- this.definite = definite;
- this.patches = patches;
-
- Set allRegionIds = new HashSet<>(regionIDs);
- allRegionIds.add(regionID);
- this.regionIDs = Collections.unmodifiableSet(allRegionIds);
-
- for (FarmingPatch p : patches)
- {
- p.setRegion(this);
- }
- }
-
- /**
- * Check if the given WorldPoint is within this farming region
- * Checks if the point's regionID is in this region's regionIDs set
- *
- * @param loc The WorldPoint to check
- * @return true if the point is within this farming region
- */
public boolean isInBounds(WorldPoint loc)
{
- return regionIDs.contains(loc.getRegionID());
+ return true;
}
@Override
public String toString()
{
- String sb = "FarmingRegion{name='" + name + '\'' +
- ", regionID=" + regionID +
- ", definite=" + definite +
- ", patches=" + patches.length +
- '}';
- return sb;
+ return name;
}
+}
- @Override
- public int compareTo(@NotNull FarmingRegion o)
- {
- return Integer.compare(regionID, o.getRegionID());
- }
-}
\ No newline at end of file
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/FarmingUtils.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/FarmingUtils.java
index 53ce93e3ff6..71b8dcf22f2 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/FarmingUtils.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/FarmingUtils.java
@@ -30,7 +30,7 @@
import java.util.ArrayList;
import java.util.List;
import net.runelite.api.Client;
-import net.runelite.api.ItemID;
+import net.runelite.api.gameval.ItemID;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.game.ItemManager;
import net.runelite.client.util.Text;
@@ -170,9 +170,11 @@ default ItemRequirement getProtectionItemRequirement(ItemManager itemManager)
public enum TreeSapling implements PlantableItem
{
- OAK(ItemID.OAK_SAPLING, ItemID.TOMATOES5, 1), WILLOW(ItemID.WILLOW_SAPLING, ItemID.APPLES5, 1),
- MAPLE(ItemID.MAPLE_SAPLING, ItemID.ORANGES5, 1), YEW(ItemID.YEW_SAPLING, ItemID.CACTUS_SPINE, 10),
- MAGIC(ItemID.MAGIC_SAPLING, ItemID.COCONUT, 25);
+ OAK(ItemID.PLANTPOT_OAK_SAPLING, ItemID.BASKET_TOMATO_5, 1),
+ WILLOW(ItemID.PLANTPOT_WILLOW_SAPLING, ItemID.BASKET_APPLE_5, 1),
+ MAPLE(ItemID.PLANTPOT_MAPLE_SAPLING, ItemID.BASKET_ORANGE_5, 1),
+ YEW(ItemID.PLANTPOT_YEW_SAPLING, ItemID.CACTUS_SPINE, 10),
+ MAGIC(ItemID.PLANTPOT_MAGIC_TREE_SAPLING, ItemID.COCONUT, 25);
final int treeSaplingID;
final int protectionItemId;
@@ -218,10 +220,14 @@ public ConfigEnum getDefault()
public enum FruitTreeSapling implements PlantableItem
{
- APPLE(ItemID.APPLE_SAPLING, ItemID.SWEETCORN, 9), BANANA(ItemID.BANANA_SAPLING, ItemID.APPLES5, 4),
- ORANGE(ItemID.ORANGE_SAPLING, ItemID.STRAWBERRIES5, 3), CURRY(ItemID.CURRY_SAPLING, ItemID.BANANAS5, 5),
- PINEAPPLE(ItemID.PINEAPPLE_SAPLING, ItemID.WATERMELON, 10), PAPAYA(ItemID.PAPAYA_SAPLING, ItemID.PINEAPPLE, 10),
- PALM(ItemID.PALM_SAPLING, ItemID.PAPAYA_FRUIT, 15), DRAGONFRUIT(ItemID.DRAGONFRUIT_SAPLING, ItemID.COCONUT, 15);
+ APPLE(ItemID.PLANTPOT_APPLE_SAPLING, ItemID.SWEETCORN, 9),
+ BANANA(ItemID.PLANTPOT_BANANA_SAPLING, ItemID.BASKET_APPLE_5, 4),
+ ORANGE(ItemID.PLANTPOT_ORANGE_SAPLING, ItemID.BASKET_STRAWBERRY_5, 3),
+ CURRY(ItemID.PLANTPOT_CURRY_SAPLING, ItemID.BASKET_BANANA_5, 5),
+ PINEAPPLE(ItemID.PLANTPOT_PINEAPPLE_SAPLING, ItemID.WATERMELON, 10),
+ PAPAYA(ItemID.PLANTPOT_PAPAYA_SAPLING, ItemID.PINEAPPLE, 10),
+ PALM(ItemID.PLANTPOT_PALM_SAPLING, ItemID.PAPAYA, 15),
+ DRAGONFRUIT(ItemID.PLANTPOT_DRAGONFRUIT_SAPLING, ItemID.COCONUT, 15);
final int fruitTreeSaplingId;
final int protectionItemId;
@@ -267,8 +273,8 @@ public ConfigEnum getDefault()
public enum HardwoodTreeSapling implements PlantableItem
{
- TEAK(ItemID.TEAK_SAPLING, ItemID.LIMPWURT_ROOT, 15),
- MAHOGANY(ItemID.MAHOGANY_SAPLING, ItemID.YANILLIAN_HOPS, 25);
+ TEAK(ItemID.PLANTPOT_TEAK_SAPLING, ItemID.LIMPWURT_ROOT, 15),
+ MAHOGANY(ItemID.PLANTPOT_MAHOGANY_SAPLING, ItemID.YANILLIAN_HOPS, 25);
final int hardwoodTreeSaplingId;
final int protectionItemId;
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/FarmingWorld.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/FarmingWorld.java
index 16b508decbf..b12ef26b41f 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/FarmingWorld.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/FarmingWorld.java
@@ -29,13 +29,13 @@
import com.google.common.collect.Multimap;
import com.google.common.collect.Multimaps;
import com.google.inject.Singleton;
-import java.awt.Polygon;
import lombok.Getter;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.VarbitID;
import net.runelite.client.plugins.timetracking.Tab;
+import java.awt.*;
import java.util.*;
import java.util.stream.Collectors;
@@ -49,9 +49,9 @@ public class FarmingWorld
private Map> tabs = new HashMap<>();
private final Comparator tabSorter = Comparator
- .comparing(FarmingPatch::getImplementation)
- .thenComparing((FarmingPatch p) -> p.getRegion().getName())
- .thenComparing(FarmingPatch::getName);
+ .comparing(FarmingPatch::getImplementation)
+ .thenComparing((FarmingPatch p) -> p.getRegion().getName())
+ .thenComparing(FarmingPatch::getName);
@Getter
private final FarmingRegion farmingGuildRegion;
@@ -60,120 +60,116 @@ public class FarmingWorld
{
// Some of these patches get updated in multiple regions.
// It may be worth it to add a specialization for these patches
- add(new FarmingRegion("Al Kharid", 13106, false, Set.of(13105, 13362),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.CACTUS, new WorldPoint(3317, 3203, 0),
- new Polygon(
- new int[]{3315, 3315, 3316, 3316},
- new int[]{3202, 3203, 3203, 3202},
- 4
- ),
- NpcID.FARMING_GARDENER_CACTUS)
- ));
-
- add(new FarmingRegion("Aldarin", 5421, false, Set.of(5165, 5166, 5422, 5677, 5678),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.HOPS, new WorldPoint(1366, 2941, 0),
- new Polygon(
- new int[]{1363, 1363, 1366, 1366},
- new int[]{2937, 2940, 2940, 2937},
- 4
- ),
- NpcID.FARMING_GARDENER_HOPS_5)
- ));
-
- add(new FarmingRegion("Ardougne", 10290, false, Set.of(10546),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.BUSH, new WorldPoint(2616, 3226, 0),
- new Polygon(
- new int[]{2617, 2617, 2618, 2618},
- new int[]{3225, 3226, 3226, 3225},
- 4
- ),
- NpcID.FARMING_GARDENER_BUSH_4)
- ));
+ add(new FarmingRegion("Al Kharid", 13106, false,
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.CACTUS, new WorldPoint(3317, 3203, 0), new Polygon(
+ new int[]{3315, 3315, 3316, 3316},
+ new int[]{3202, 3203, 3203, 3202},
+ 4
+ ), NpcID.FARMING_GARDENER_CACTUS)
+ ), 13362, 13105);
+
+ add(new FarmingRegion("Aldarin", 5421, false,
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.HOPS, new WorldPoint(1366, 2941, 0),
+ new Polygon(
+ new int[]{1363, 1363, 1366, 1366},
+ new int[]{2937, 2940, 2940, 2937},
+ 4
+ ), NpcID.FARMING_GARDENER_HOPS_5)
+ ), 5165, 5166, 5422, 5677, 5678);
+
+ add(new FarmingRegion("Ardougne", 10290, false,
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.BUSH, new WorldPoint(2616, 3226, 0),
+ new Polygon(
+ new int[]{2617, 2617, 2618, 2618},
+ new int[]{3225, 3226, 3226, 3225},
+ 4
+ ), NpcID.FARMING_GARDENER_BUSH_4)
+ ), 10546);
add(new FarmingRegion("Ardougne", 10548, false,
- new FarmingPatch("North", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.ALLOTMENT, new WorldPoint(2672, 3379, 0),
- new Polygon(
- new int[]{2662, 2662, 2671, 2671, 2663, 2663},
- new int[]{3377, 3379, 3379, 3378, 3378, 3377},
- 6
- ),
- NpcID.KRAGEN, 0),
- new FarmingPatch("South", VarbitID.FARMING_TRANSMIT_B, PatchImplementation.ALLOTMENT, new WorldPoint(2672, 3371, 0),
- new Polygon(
- new int[]{2662, 2662, 2663, 2663, 2671, 2671},
- new int[]{3370, 3372, 3372, 3371, 3371, 3370},
- 6
- ),
- NpcID.KRAGEN, 1),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_C, PatchImplementation.FLOWER, new WorldPoint(2668, 3375, 0),
- new Polygon(
- new int[]{2666, 2666, 2667, 2667},
- new int[]{3374, 3375, 3375, 3374},
- 4)
- ),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_D, PatchImplementation.HERB, new WorldPoint(2672, 3375, 0),
- new Polygon(
- new int[]{2670, 2670, 2671, 2671},
- new int[]{3374, 3375, 3375, 3374},
- 4
- )),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_E, PatchImplementation.COMPOST, new WorldPoint(2662, 3375, 0))
- ));
-
- add(new FarmingRegion("Avium Savannah", 6702, true, Set.of(6446),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.HARDWOOD_TREE, new WorldPoint(1685, 2971, 0),
- new Polygon(
- new int[]{1686, 1686, 1688, 1688},
- new int[]{2971, 2973, 2973, 2971},
- 4
- ),
- NpcID.FROG_QUEST_MARCELLUS)
- ));
-
- add(new FarmingRegion("Brimhaven", 11058, false, Set.of(11057),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.FRUIT_TREE, new WorldPoint(2766, 3213, 0),
- new Polygon(
- new int[]{2764, 2764, 2765, 2765},
- new int[]{3212, 3213, 3213, 3212},
- 4
- ),
- NpcID.GARTH),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_B, PatchImplementation.SPIRIT_TREE, new WorldPoint(2800, 3202, 0),
- new Polygon(
- new int[]{2801, 2801, 2803, 2803},
- new int[]{3202, 3204, 3204, 3202},
- 4
- ),
- NpcID.FARMING_GARDENER_SPIRIT_TREE_3)
- ));
-
- add(new FarmingRegion("Catherby", 11062, false, Set.of(11061, 11318, 11317),
- new FarmingPatch("North", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.ALLOTMENT, new WorldPoint(2814, 3466, 0),
- new Polygon(
- new int[]{2805, 2805, 2814, 2814, 2806, 2806},
- new int[]{3466, 3468, 3468, 3467, 3467, 3466},
- 6
- ),
- NpcID.DANTAERA, 0),
- new FarmingPatch("South", VarbitID.FARMING_TRANSMIT_B, PatchImplementation.ALLOTMENT, new WorldPoint(2815, 3460, 0),
- new Polygon(
- new int[]{2805, 2805, 2806, 2806, 2814, 2814},
- new int[]{3459, 3461, 3461, 3460, 3460, 3459},
- 6
- ),
- NpcID.DANTAERA, 1),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_C, PatchImplementation.FLOWER, new WorldPoint(2810, 3465, 0),
- new Polygon(
- new int[]{2809, 2809, 2810, 2810},
- new int[]{3463, 3464, 3464, 3463},
- 4
- )),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_D, PatchImplementation.HERB, new WorldPoint(2815, 3464, 0),
- new Polygon(
- new int[]{2813, 2813, 2814, 2814},
- new int[]{3463, 3464, 3464, 3463},
- 4
- )),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_E, PatchImplementation.COMPOST, new WorldPoint(2805, 3464, 0))
+ new FarmingPatch("North", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.ALLOTMENT, new WorldPoint(2672, 3379, 0),
+ new Polygon(
+ new int[]{2662, 2662, 2671, 2671, 2663, 2663},
+ new int[]{3377, 3379, 3379, 3378, 3378, 3377},
+ 6
+ ),
+ NpcID.KRAGEN, 0),
+ new FarmingPatch("South", VarbitID.FARMING_TRANSMIT_B, PatchImplementation.ALLOTMENT, new WorldPoint(2672, 3371, 0),
+ new Polygon(
+ new int[]{2662, 2662, 2663, 2663, 2671, 2671},
+ new int[]{3370, 3372, 3372, 3371, 3371, 3370},
+ 6
+ ),
+ NpcID.KRAGEN, 1),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_C, PatchImplementation.FLOWER, new WorldPoint(2668, 3375, 0),
+ new Polygon(
+ new int[]{2666, 2666, 2667, 2667},
+ new int[]{3374, 3375, 3375, 3374},
+ 4)
+ ),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_D, PatchImplementation.HERB, new WorldPoint(2672, 3375, 0),
+ new Polygon(
+ new int[]{2670, 2670, 2671, 2671},
+ new int[]{3374, 3375, 3375, 3374},
+ 4
+ )),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_E, PatchImplementation.COMPOST, new WorldPoint(2662, 3375, 0))
+ ));
+
+ add(new FarmingRegion("Avium Savannah", 6702, true,
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.HARDWOOD_TREE, new WorldPoint(1685, 2971, 0),
+ new Polygon(
+ new int[]{1686, 1686, 1688, 1688},
+ new int[]{2971, 2973, 2973, 2971},
+ 4
+ ),
+ NpcID.FROG_QUEST_MARCELLUS)
+ ), 6446);
+
+ add(new FarmingRegion("Brimhaven", 11058, false,
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.FRUIT_TREE, new WorldPoint(2766, 3213, 0),
+ new Polygon(
+ new int[]{2764, 2764, 2765, 2765},
+ new int[]{3212, 3213, 3213, 3212},
+ 4
+ ),
+ NpcID.GARTH),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_B, PatchImplementation.SPIRIT_TREE, new WorldPoint(2800, 3202, 0),
+ new Polygon(
+ new int[]{2801, 2801, 2803, 2803},
+ new int[]{3202, 3204, 3204, 3202},
+ 4
+ ),
+ NpcID.FARMING_GARDENER_SPIRIT_TREE_3)
+ ), 11057);
+
+ add(new FarmingRegion("Catherby", 11062, false,
+ new FarmingPatch("North", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.ALLOTMENT, new WorldPoint(2814, 3466, 0),
+ new Polygon(
+ new int[]{2805, 2805, 2814, 2814, 2806, 2806},
+ new int[]{3466, 3468, 3468, 3467, 3467, 3466},
+ 6
+ ),
+ NpcID.DANTAERA, 0),
+ new FarmingPatch("South", VarbitID.FARMING_TRANSMIT_B, PatchImplementation.ALLOTMENT, new WorldPoint(2815, 3460, 0),
+ new Polygon(
+ new int[]{2805, 2805, 2806, 2806, 2814, 2814},
+ new int[]{3459, 3461, 3461, 3460, 3460, 3459},
+ 6
+ ),
+ NpcID.DANTAERA, 1),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_C, PatchImplementation.FLOWER, new WorldPoint(2810, 3465, 0),
+ new Polygon(
+ new int[]{2809, 2809, 2810, 2810},
+ new int[]{3463, 3464, 3464, 3463},
+ 4
+ )),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_D, PatchImplementation.HERB, new WorldPoint(2815, 3464, 0),
+ new Polygon(
+ new int[]{2813, 2813, 2814, 2814},
+ new int[]{3463, 3464, 3464, 3463},
+ 4
+ )),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_E, PatchImplementation.COMPOST, new WorldPoint(2805, 3464, 0))
)
{
@Override
@@ -186,15 +182,15 @@ public boolean isInBounds(WorldPoint loc)
}
return true;
}
- });
+ }, 11061, 11318, 11317);
add(new FarmingRegion("Catherby", 11317, false,
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.FRUIT_TREE, new WorldPoint(2860, 3432, 0),
- new Polygon(
- new int[]{2860, 2860, 2861, 2861},
- new int[]{3433, 3434, 3434, 3433},
- 4
- ),
- NpcID.FARMING_GARDENER_FRUIT_4)
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.FRUIT_TREE, new WorldPoint(2860, 3432, 0),
+ new Polygon(
+ new int[]{2860, 2860, 2861, 2861},
+ new int[]{3433, 3434, 3434, 3433},
+ 4
+ ),
+ NpcID.FARMING_GARDENER_FRUIT_4)
)
{
//The fruit tree patch is always sent when upstairs in 11317
@@ -205,119 +201,120 @@ public boolean isInBounds(WorldPoint loc)
}
});
- add(new FarmingRegion("Civitas illa Fortis", 6192, false, Set.of(6447, 6448, 6449, 6191, 6193),
- new FarmingPatch("North", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.ALLOTMENT, new WorldPoint(1586, 3102, 0),
- new Polygon(
- new int[]{1581, 1581, 1585, 1585, 1582, 1582},
- new int[]{3098, 3103, 3103, 3102, 3102, 3098},
- 6
- ),
- NpcID.FORTIS_GARDENER, 0),
- new FarmingPatch("South", VarbitID.FARMING_TRANSMIT_B, PatchImplementation.ALLOTMENT, new WorldPoint(1591, 3098, 0),
- new Polygon(
- new int[]{1585, 1585, 1589, 1589, 1590, 1590},
- new int[]{3094, 3095, 3095, 3098, 3098, 3094},
- 6
- ),
- NpcID.FORTIS_GARDENER, 1),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_C, PatchImplementation.FLOWER, new WorldPoint(1587, 3099, 0),
- new Polygon(
- new int[]{1585, 1585, 1586, 1586},
- new int[]{3098, 3099, 3099, 3098},
- 4
- )),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_D, PatchImplementation.HERB, new WorldPoint(1581, 3094, 0),
- new Polygon(
- new int[]{1581, 1581, 1582, 1582},
- new int[]{3094, 3095, 3095, 3094},
- 4
- )),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_E, PatchImplementation.COMPOST, new WorldPoint(1587, 3103, 0))
- ));
+ add(new FarmingRegion("Civitas illa Fortis", 6192, false,
+ new FarmingPatch("North", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.ALLOTMENT, new WorldPoint(1586, 3102, 0),
+ new Polygon(
+ new int[]{1581, 1581, 1585, 1585, 1582, 1582},
+ new int[]{3098, 3103, 3103, 3102, 3102, 3098},
+ 6
+ ),
+ NpcID.FORTIS_GARDENER, 0),
+ new FarmingPatch("South", VarbitID.FARMING_TRANSMIT_B, PatchImplementation.ALLOTMENT, new WorldPoint(1591, 3098, 0),
+ new Polygon(
+ new int[]{1585, 1585, 1589, 1589, 1590, 1590},
+ new int[]{3094, 3095, 3095, 3098, 3098, 3094},
+ 6
+ ),
+ NpcID.FORTIS_GARDENER, 1),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_C, PatchImplementation.FLOWER, new WorldPoint(1587, 3099, 0),
+ new Polygon(
+ new int[]{1585, 1585, 1586, 1586},
+ new int[]{3098, 3099, 3099, 3098},
+ 4
+ )),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_D, PatchImplementation.HERB, new WorldPoint(1581, 3094, 0),
+ new Polygon(
+ new int[]{1581, 1581, 1582, 1582},
+ new int[]{3094, 3095, 3095, 3094},
+ 4
+ )),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_E, PatchImplementation.COMPOST, new WorldPoint(1587, 3103, 0))
+ ), 6447, 6448, 6449, 6191, 6193);
add(new FarmingRegion("Champions' Guild", 12596, true,
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.BUSH, new WorldPoint(3181, 3356, 0),
- new Polygon(
- new int[]{3181, 3181, 3182, 3182},
- new int[]{3357, 3358, 3358, 3357},
- 4
- ),
- NpcID.FARMING_GARDENER_BUSH_1)
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.BUSH, new WorldPoint(3181, 3356, 0),
+ new Polygon(
+ new int[]{3181, 3181, 3182, 3182},
+ new int[]{3357, 3358, 3358, 3357},
+ 4
+ ),
+ NpcID.FARMING_GARDENER_BUSH_1)
));
add(new FarmingRegion("Draynor Manor", 12340, false,
- new FarmingPatch("Belladonna", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.BELLADONNA, new WorldPoint(3088, 3355, 0),
- new Polygon(
- new int[]{3086, 3086, 3087, 3087},
- new int[]{3354, 3355, 3355, 3354},
- 4
- ))
- ));
-
- add(new FarmingRegion("Entrana", 11060, false, Set.of(11316),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.HOPS, new WorldPoint(2812, 3334, 0),
- new Polygon(
- new int[]{2809, 2809, 2812, 2812},
- new int[]{3335, 3338, 3338, 3335},
- 4
- ),
- NpcID.FRANCIS)
- ));
+ new FarmingPatch("Belladonna", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.BELLADONNA, new WorldPoint(3088, 3355, 0),
+ new Polygon(
+ new int[]{3086, 3086, 3087, 3087},
+ new int[]{3354, 3355, 3355, 3354},
+ 4
+ ))
+ ));
+
+ add(new FarmingRegion("Entrana", 11060, false,
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.HOPS, new WorldPoint(2812, 3334, 0),
+ new Polygon(
+ new int[]{2809, 2809, 2812, 2812},
+ new int[]{3335, 3338, 3338, 3335},
+ 4
+ ),
+ NpcID.FRANCIS)
+ ), 11316);
add(new FarmingRegion("Etceteria", 10300, false,
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.BUSH, new WorldPoint(2592, 3862, 0),
- new Polygon(
- new int[]{2591, 2591, 2592, 2592},
- new int[]{3863, 3864, 3864, 3863},
- 4
- ),
- NpcID.FARMING_GARDENER_BUSH_3),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_B, PatchImplementation.SPIRIT_TREE, new WorldPoint(2613, 3856, 0),
- new Polygon(
- new int[]{2612, 2612, 2614, 2614},
- new int[]{3857, 3859, 3859, 3857},
- 4
- ),
- NpcID.FARMING_GARDENER_SPIRIT_TREE_2)
- ));
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.BUSH, new WorldPoint(2592, 3862, 0),
+ new Polygon(
+ new int[]{2591, 2591, 2592, 2592},
+ new int[]{3863, 3864, 3864, 3863},
+ 4
+ ),
+ NpcID.FARMING_GARDENER_BUSH_3),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_B, PatchImplementation.SPIRIT_TREE, new WorldPoint(2613, 3856, 0),
+ new Polygon(
+ new int[]{2612, 2612, 2614, 2614},
+ new int[]{3857, 3859, 3859, 3857},
+ 4
+ ),
+ NpcID.FARMING_GARDENER_SPIRIT_TREE_2)
+ ));
+
+ add(new FarmingRegion("Falador", 11828, false,
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.TREE, new WorldPoint(3004, 3371, 0),
+ new Polygon(
+ new int[]{3003, 3003, 3005, 3005},
+ new int[]{3372, 3374, 3374, 3372},
+ 4
+ ),
+ NpcID.FARMING_GARDENER_TREE_2)
+ ), 12084);
- add(new FarmingRegion("Falador", 11828, false, Set.of(12084),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.TREE, new WorldPoint(3004, 3371, 0),
- new Polygon(
- new int[]{3003, 3003, 3005, 3005},
- new int[]{3372, 3374, 3374, 3372},
- 4
- ),
- NpcID.FARMING_GARDENER_TREE_2)
- ));
add(new FarmingRegion("Falador", 12083, false,
- new FarmingPatch("North West", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.ALLOTMENT, new WorldPoint(3052, 3307, 0),
- new Polygon(
- new int[]{3050, 3050, 3054, 3054, 3051, 3051},
- new int[]{3307, 3312, 3312, 3311, 3311, 3307},
- 6
- ),
- NpcID.ELSTAN, 0),
- new FarmingPatch("South East", VarbitID.FARMING_TRANSMIT_B, PatchImplementation.ALLOTMENT, new WorldPoint(3055, 3305, 0),
- new Polygon(
- new int[]{3055, 3055, 3058, 3058, 3059, 3059},
- new int[]{3303, 3304, 3304, 3308, 3308, 3303},
- 6
- ),
- NpcID.ELSTAN, 1),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_C, PatchImplementation.FLOWER, new WorldPoint(3053, 3307, 0),
- new Polygon(
- new int[]{3054, 3054, 3055, 3055},
- new int[]{3307, 3308, 3308, 3307},
- 4
- )),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_D, PatchImplementation.HERB, new WorldPoint(3057, 3311, 0),
- new Polygon(
- new int[]{3058, 3058, 3059, 3059},
- new int[]{3311, 3312, 3312, 3311},
- 4
- )),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_E, PatchImplementation.COMPOST, new WorldPoint(3056, 3311, 0))
+ new FarmingPatch("North West", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.ALLOTMENT, new WorldPoint(3052, 3307, 0),
+ new Polygon(
+ new int[]{3050, 3050, 3054, 3054, 3051, 3051},
+ new int[]{3307, 3312, 3312, 3311, 3311, 3307},
+ 6
+ ),
+ NpcID.ELSTAN, 0),
+ new FarmingPatch("South East", VarbitID.FARMING_TRANSMIT_B, PatchImplementation.ALLOTMENT, new WorldPoint(3055, 3305, 0),
+ new Polygon(
+ new int[]{3055, 3055, 3058, 3058, 3059, 3059},
+ new int[]{3303, 3304, 3304, 3308, 3308, 3303},
+ 6
+ ),
+ NpcID.ELSTAN, 1),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_C, PatchImplementation.FLOWER, new WorldPoint(3053, 3307, 0),
+ new Polygon(
+ new int[]{3054, 3054, 3055, 3055},
+ new int[]{3307, 3308, 3308, 3307},
+ 4
+ )),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_D, PatchImplementation.HERB, new WorldPoint(3057, 3311, 0),
+ new Polygon(
+ new int[]{3058, 3058, 3059, 3059},
+ new int[]{3311, 3312, 3312, 3311},
+ 4
+ )),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_E, PatchImplementation.COMPOST, new WorldPoint(3056, 3311, 0))
)
{
@Override
@@ -328,28 +325,28 @@ public boolean isInBounds(WorldPoint loc)
}
});
- add(new FarmingRegion("Fossil Island", 14651, false, Set.of(14907, 14908, 15164, 14652, 14906, 14650, 15162, 15163),
- new FarmingPatch("East", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.HARDWOOD_TREE, new WorldPoint(3713, 3835, 0),
- new Polygon(
- new int[]{3714, 3714, 3716, 3716},
- new int[]{3834, 3836, 3836, 3834},
- 4
- ),
- NpcID.FOSSIL_SQUIRREL_GARDENER1),
- new FarmingPatch("Middle", VarbitID.FARMING_TRANSMIT_B, PatchImplementation.HARDWOOD_TREE, new WorldPoint(3708, 3835, 0),
- new Polygon(
- new int[]{3707, 3707, 3709, 3709},
- new int[]{3832, 3834, 3834, 3832},
- 4
- ),
- NpcID.FOSSIL_SQUIRREL_GARDENER2),
- new FarmingPatch("West", VarbitID.FARMING_TRANSMIT_C, PatchImplementation.HARDWOOD_TREE, new WorldPoint(3701, 3836, 0),
- new Polygon(
- new int[]{3701, 3701, 3703, 3703},
- new int[]{3836, 3838, 3838, 3836},
- 4
- ),
- NpcID.FOSSIL_SQUIRREL_GARDENER3)
+ add(new FarmingRegion("Fossil Island", 14651, false,
+ new FarmingPatch("East", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.HARDWOOD_TREE, new WorldPoint(3713, 3835, 0),
+ new Polygon(
+ new int[]{3714, 3714, 3716, 3716},
+ new int[]{3834, 3836, 3836, 3834},
+ 4
+ ),
+ NpcID.FOSSIL_SQUIRREL_GARDENER1),
+ new FarmingPatch("Middle", VarbitID.FARMING_TRANSMIT_B, PatchImplementation.HARDWOOD_TREE, new WorldPoint(3708, 3835, 0),
+ new Polygon(
+ new int[]{3707, 3707, 3709, 3709},
+ new int[]{3832, 3834, 3834, 3832},
+ 4
+ ),
+ NpcID.FOSSIL_SQUIRREL_GARDENER2),
+ new FarmingPatch("West", VarbitID.FARMING_TRANSMIT_C, PatchImplementation.HARDWOOD_TREE, new WorldPoint(3701, 3836, 0),
+ new Polygon(
+ new int[]{3701, 3701, 3703, 3703},
+ new int[]{3836, 3838, 3838, 3836},
+ 4
+ ),
+ NpcID.FOSSIL_SQUIRREL_GARDENER3)
)
{
@Override
@@ -366,194 +363,200 @@ public boolean isInBounds(WorldPoint loc)
//East and west ladders to rope bridge
if ((loc.getX() == 3729 || loc.getX() == 3728 || loc.getX() == 3747 || loc.getX() == 3746)
- && loc.getY() <= 3832 && loc.getY() >= 3830)
+ && loc.getY() <= 3832 && loc.getY() >= 3830)
{
return false;
}
return loc.getPlane() == 0;
}
- });
+ }, 14907, 14908, 15164, 14652, 14906, 14650, 15162, 15163);
add(new FarmingRegion("Seaweed", 15008, false,
- new FarmingPatch("North", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.SEAWEED, new WorldPoint(3733, 10272, 1),
- new Polygon(
- new int[]{3733, 3733, 3734, 3734},
- new int[]{10273, 10274, 10274, 10273},
- 4
- ),
- NpcID.FOSSIL_GARDENER_UNDERWATER, 0),
- new FarmingPatch("South", VarbitID.FARMING_TRANSMIT_B, PatchImplementation.SEAWEED, new WorldPoint(3733, 10269, 1),
- new Polygon(
- new int[]{3733, 3733, 3734, 3734},
- new int[]{10267, 10268, 10268, 10267},
- 4
- ),
- NpcID.FOSSIL_GARDENER_UNDERWATER, 1)
- ));
-
- add(new FarmingRegion("Gnome Stronghold", 9781, true, Set.of(9782, 9526, 9525),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.TREE, new WorldPoint(2437, 3417, 0),
- new Polygon(
- new int[]{2437, 2437, 2435, 2435},
- new int[]{3416, 3414, 3414, 3416},
- 4
- ),
- NpcID.FARMING_GARDENER_TREE_GNOME),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_B, PatchImplementation.FRUIT_TREE, new WorldPoint(2475, 3447, 0),
- new Polygon(
- new int[]{2475, 2475, 2476, 2476},
- new int[]{3445, 3446, 3446, 3445},
- 4
- ),
- NpcID.FARMING_GARDENER_FRUIT_1)
- ));
+ new FarmingPatch("North", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.SEAWEED, new WorldPoint(3733, 10272, 1),
+ new Polygon(
+ new int[]{3733, 3733, 3734, 3734},
+ new int[]{10273, 10274, 10274, 10273},
+ 4
+ ),
+ NpcID.FOSSIL_GARDENER_UNDERWATER, 0),
+ new FarmingPatch("South", VarbitID.FARMING_TRANSMIT_B, PatchImplementation.SEAWEED, new WorldPoint(3733, 10269, 1),
+ new Polygon(
+ new int[]{3733, 3733, 3734, 3734},
+ new int[]{10267, 10268, 10268, 10267},
+ 4
+ ),
+ NpcID.FOSSIL_GARDENER_UNDERWATER, 1)
+ ));
+
+ add(new FarmingRegion("Gnome Stronghold", 9781, true,
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.TREE, new WorldPoint(2437, 3417, 0),
+ new Polygon(
+ new int[]{2437, 2437, 2435, 2435},
+ new int[]{3416, 3414, 3414, 3416},
+ 4
+ ),
+ NpcID.FARMING_GARDENER_TREE_GNOME),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_B, PatchImplementation.FRUIT_TREE, new WorldPoint(2475, 3447, 0),
+ new Polygon(
+ new int[]{2475, 2475, 2476, 2476},
+ new int[]{3445, 3446, 3446, 3445},
+ 4
+ ),
+ NpcID.FARMING_GARDENER_FRUIT_1)
+ ), 9782, 9526, 9525);
add(new FarmingRegion("Harmony", 15148, false,
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.ALLOTMENT, new WorldPoint(3795, 2838, 0),
- new Polygon(
- new int[]{3794, 3794},
- new int[]{2833, 2838},
- 2
- )),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_B, PatchImplementation.HERB, new WorldPoint(3790, 3839, 0),
- new Polygon(
- new int[]{3789, 3789, 3790, 3790},
- new int[]{2837, 2838, 2838, 2837},
- 4
- ))
- ));
-
- add(new FarmingRegion("Kourend", 6967, false, Set.of(6711),
- new FarmingPatch("North East", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.ALLOTMENT, new WorldPoint(1739, 3553, 0),
- new Polygon(
- new int[]{1733, 1733, 1739, 1739, 1738, 1738},
- new int[]{3558, 3559, 3559, 3554, 3554, 3558},
- 6
- ),
- NpcID.HOSIDIUS_ALLOTMENT_GARDENER, 0),
- new FarmingPatch("South West", VarbitID.FARMING_TRANSMIT_B, PatchImplementation.ALLOTMENT, new WorldPoint(1735, 3552, 0),
- new Polygon(
- new int[]{1730, 1730, 1731, 1731, 1735, 1735},
- new int[]{3550, 3555, 3555, 3551, 3551, 3550},
- 6
- ),
- NpcID.HOSIDIUS_ALLOTMENT_GARDENER, 1),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_C, PatchImplementation.FLOWER, new WorldPoint(1735, 3553, 0),
- new Polygon(
- new int[]{1734, 1734, 1735, 1734},
- new int[]{3554, 3555, 3555, 1734},
- 4
- )),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_D, PatchImplementation.HERB, new WorldPoint(1739, 3552, 0),
- new Polygon(
- new int[]{1738, 1738, 1739, 1739},
- new int[]{3550, 3551, 3551, 3550},
- 4
- )),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_E, PatchImplementation.COMPOST, new WorldPoint(1730, 3557, 0)),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_F, PatchImplementation.SPIRIT_TREE, new WorldPoint(1695, 3543, 0),
- new Polygon(
- new int[]{1692, 1692, 1694, 1694},
- new int[]{3541, 3543, 3543, 3541},
- 4
- ),
- NpcID.FARMING_GARDENER_SPIRIT_TREE_4)
- ));
-
- /*
- Not implemented
- */
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.ALLOTMENT, new WorldPoint(3795, 2838, 0),
+ new Polygon(
+ new int[]{3794, 3794},
+ new int[]{2833, 2838},
+ 2
+ )),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_B, PatchImplementation.HERB, new WorldPoint(3790, 3839, 0),
+ new Polygon(
+ new int[]{3789, 3789, 3790, 3790},
+ new int[]{2837, 2838, 2838, 2837},
+ 4
+ ))
+ ));
+
+ add(new FarmingRegion("Kourend", 6967, false,
+ new FarmingPatch("North East", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.ALLOTMENT, new WorldPoint(1739, 3553, 0),
+ new Polygon(
+ new int[]{1733, 1733, 1739, 1739, 1738, 1738},
+ new int[]{3558, 3559, 3559, 3554, 3554, 3558},
+ 6
+ ),
+ NpcID.HOSIDIUS_ALLOTMENT_GARDENER, 0),
+ new FarmingPatch("South West", VarbitID.FARMING_TRANSMIT_B, PatchImplementation.ALLOTMENT, new WorldPoint(1735, 3552, 0),
+ new Polygon(
+ new int[]{1730, 1730, 1731, 1731, 1735, 1735},
+ new int[]{3550, 3555, 3555, 3551, 3551, 3550},
+ 6
+ ),
+ NpcID.HOSIDIUS_ALLOTMENT_GARDENER, 1),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_C, PatchImplementation.FLOWER, new WorldPoint(1735, 3553, 0),
+ new Polygon(
+ new int[]{1734, 1734, 1735, 1734},
+ new int[]{3554, 3555, 3555, 1734},
+ 4
+ )),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_D, PatchImplementation.HERB, new WorldPoint(1739, 3552, 0),
+ new Polygon(
+ new int[]{1738, 1738, 1739, 1739},
+ new int[]{3550, 3551, 3551, 3550},
+ 4
+ )),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_E, PatchImplementation.COMPOST, new WorldPoint(1730, 3557, 0)),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_F, PatchImplementation.SPIRIT_TREE, new WorldPoint(1695, 3543, 0),
+ new Polygon(
+ new int[]{1692, 1692, 1694, 1694},
+ new int[]{3541, 3543, 3543, 3541},
+ 4
+ ),
+ NpcID.FARMING_GARDENER_SPIRIT_TREE_4)
+ ), 6711);
add(new FarmingRegion("Kourend", 7223, false,
- new FarmingPatch("East 1", VarbitID.FARMING_TRANSMIT_A1, PatchImplementation.GRAPES, new WorldPoint(-1, -1, 0)),
- new FarmingPatch("East 2", VarbitID.FARMING_TRANSMIT_A2, PatchImplementation.GRAPES, new WorldPoint(-1, -1, 0)),
- new FarmingPatch("East 3", VarbitID.FARMING_TRANSMIT_B1, PatchImplementation.GRAPES, new WorldPoint(-1, -1, 0)),
- new FarmingPatch("East 4", VarbitID.FARMING_TRANSMIT_B2, PatchImplementation.GRAPES, new WorldPoint(-1, -1, 0)),
- new FarmingPatch("East 5", VarbitID.FARMING_TRANSMIT_C1, PatchImplementation.GRAPES, new WorldPoint(-1, -1, 0)),
- new FarmingPatch("East 6", VarbitID.FARMING_TRANSMIT_C2, PatchImplementation.GRAPES, new WorldPoint(-1, -1, 0)),
- new FarmingPatch("West 1", VarbitID.FARMING_TRANSMIT_D1, PatchImplementation.GRAPES, new WorldPoint(-1, -1, 0)),
- new FarmingPatch("West 2", VarbitID.FARMING_TRANSMIT_D2, PatchImplementation.GRAPES, new WorldPoint(-1, -1, 0)),
- new FarmingPatch("West 3", VarbitID.FARMING_TRANSMIT_E1, PatchImplementation.GRAPES, new WorldPoint(-1, -1, 0)),
- new FarmingPatch("West 4", VarbitID.FARMING_TRANSMIT_E2, PatchImplementation.GRAPES, new WorldPoint(-1, -1, 0)),
- new FarmingPatch("West 5", VarbitID.FARMING_TRANSMIT_F1, PatchImplementation.GRAPES, new WorldPoint(-1, -1, 0)),
- new FarmingPatch("West 6", VarbitID.FARMING_TRANSMIT_F2, PatchImplementation.GRAPES, new WorldPoint(-1, -1, 0))
- ));
-
- add(new FarmingRegion("Lletya", 9265, false, Set.of(11103),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.FRUIT_TREE, new WorldPoint(2345, 3162, 0),
- new Polygon(
- new int[]{2346, 2346, 2347, 2347},
- new int[]{3161, 3162, 3162, 3161},
- 4
- ),
- NpcID.FARMING_GARDENER_FRUIT_TREE_5)
- ));
+ new FarmingPatch("East 1", VarbitID.FARMING_TRANSMIT_A1, PatchImplementation.GRAPES, new WorldPoint(-1, -1, 0)),
+ new FarmingPatch("East 2", VarbitID.FARMING_TRANSMIT_A2, PatchImplementation.GRAPES, new WorldPoint(-1, -1, 0)),
+ new FarmingPatch("East 3", VarbitID.FARMING_TRANSMIT_B1, PatchImplementation.GRAPES, new WorldPoint(-1, -1, 0)),
+ new FarmingPatch("East 4", VarbitID.FARMING_TRANSMIT_B2, PatchImplementation.GRAPES, new WorldPoint(-1, -1, 0)),
+ new FarmingPatch("East 5", VarbitID.FARMING_TRANSMIT_C1, PatchImplementation.GRAPES, new WorldPoint(-1, -1, 0)),
+ new FarmingPatch("East 6", VarbitID.FARMING_TRANSMIT_C2, PatchImplementation.GRAPES, new WorldPoint(-1, -1, 0)),
+ new FarmingPatch("West 1", VarbitID.FARMING_TRANSMIT_D1, PatchImplementation.GRAPES, new WorldPoint(-1, -1, 0)),
+ new FarmingPatch("West 2", VarbitID.FARMING_TRANSMIT_D2, PatchImplementation.GRAPES, new WorldPoint(-1, -1, 0)),
+ new FarmingPatch("West 3", VarbitID.FARMING_TRANSMIT_E1, PatchImplementation.GRAPES, new WorldPoint(-1, -1, 0)),
+ new FarmingPatch("West 4", VarbitID.FARMING_TRANSMIT_E2, PatchImplementation.GRAPES, new WorldPoint(-1, -1, 0)),
+ new FarmingPatch("West 5", VarbitID.FARMING_TRANSMIT_F1, PatchImplementation.GRAPES, new WorldPoint(-1, -1, 0)),
+ new FarmingPatch("West 6", VarbitID.FARMING_TRANSMIT_F2, PatchImplementation.GRAPES, new WorldPoint(-1, -1, 0))
+ ));
+
+ add(new FarmingRegion("Lletya", 9265, false,
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.FRUIT_TREE, new WorldPoint(2345, 3162, 0),
+ new Polygon(
+ new int[]{2346, 2346, 2347, 2347},
+ new int[]{3161, 3162, 3162, 3161},
+ 4
+ ),
+ NpcID.FARMING_GARDENER_FRUIT_TREE_5)
+ ), 11103);
add(new FarmingRegion("Lumbridge", 12851, false,
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.HOPS, new WorldPoint(3232, 3317, 0),
- new Polygon(
- new int[]{3227, 3227, 3231, 3231},
- new int[]{3313, 3317, 3317, 3313},
- 4
- ),
- NpcID.FARMING_GARDENER_HOPS_3)
- ));
- add(new FarmingRegion("Lumbridge", 12594, false, Set.of(12850),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.TREE, new WorldPoint(3195, 3230, 0),
- new Polygon(
- new int[]{3192, 3192, 3194, 3194},
- new int[]{3230, 3232, 3232, 3230},
- 4
- ),
- NpcID.FARMING_GARDENER_TREE_4)
- ));
-
- add(new FarmingRegion("Morytania", 13622, false, Set.of(13878),
- new FarmingPatch("Mushroom", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.MUSHROOM, new WorldPoint(3451, 3474, 0),
- new Polygon(
- new int[]{3451, 3451, 3452, 3452},
- new int[]{3472, 3473, 3473, 3472},
- 4
- ))
- ));
- add(new FarmingRegion("Morytania", 14391, false, Set.of(14390),
- new FarmingPatch("North West", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.ALLOTMENT, new WorldPoint(3597, 3524, 0),
- new Polygon(
- new int[]{3597, 3597, 3601, 3601, 3598, 3598},
- new int[]{3525, 3530, 3530, 3529, 3529, 3525},
- 6
- ),
- NpcID.LYRA, 0),
- new FarmingPatch("South East", VarbitID.FARMING_TRANSMIT_B, PatchImplementation.ALLOTMENT, new WorldPoint(3601, 3522, 0),
- new Polygon(
- new int[]{3602, 3602, 3605, 3605, 3606, 3606},
- new int[]{3521, 3522, 3522, 3526, 3526, 3521},
- 6
- ),
- NpcID.LYRA, 1),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_C, PatchImplementation.FLOWER, new WorldPoint(3601, 3524, 0),
- new Polygon(
- new int[]{3601, 3601, 3602, 3602},
- new int[]{3225, 3226, 3226, 3225},
- 4
- )
- ),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_D, PatchImplementation.HERB, new WorldPoint(3605, 3528, 0),
- new Polygon(
- new int[]{3605, 3605, 3606, 3606},
- new int[]{3529, 3530, 3530, 3529},
- 4
- )),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_E, PatchImplementation.COMPOST, new WorldPoint(3609, 3522, 0))
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.HOPS, new WorldPoint(3232, 3317, 0),
+ new Polygon(
+ new int[]{3227, 3227, 3231, 3231},
+ new int[]{3313, 3317, 3317, 3313},
+ 4
+ ),
+ NpcID.FARMING_GARDENER_HOPS_3)
+ ));
+ add(new FarmingRegion("Lumbridge", 12594, false,
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.TREE, new WorldPoint(3195, 3230, 0),
+ new Polygon(
+ new int[]{3192, 3192, 3194, 3194},
+ new int[]{3230, 3232, 3232, 3230},
+ 4
+ ),
+ NpcID.FARMING_GARDENER_TREE_4)
+ ), 12850);
+
+ add(new FarmingRegion("Morytania", 13622, false,
+ new FarmingPatch("Mushroom", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.MUSHROOM, new WorldPoint(3451, 3474, 0),
+ new Polygon(
+ new int[]{3451, 3451, 3452, 3452},
+ new int[]{3472, 3473, 3473, 3472},
+ 4
+ ))
+ ), 13878);
+ add(new FarmingRegion("Morytania", 14391, false,
+ new FarmingPatch("North West", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.ALLOTMENT, new WorldPoint(3597, 3524, 0),
+ new Polygon(
+ new int[]{3597, 3597, 3601, 3601, 3598, 3598},
+ new int[]{3525, 3530, 3530, 3529, 3529, 3525},
+ 6
+ ),
+ NpcID.LYRA, 0),
+ new FarmingPatch("South East", VarbitID.FARMING_TRANSMIT_B, PatchImplementation.ALLOTMENT, new WorldPoint(3601, 3522, 0),
+ new Polygon(
+ new int[]{3602, 3602, 3605, 3605, 3606, 3606},
+ new int[]{3521, 3522, 3522, 3526, 3526, 3521},
+ 6
+ ),
+ NpcID.LYRA, 1),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_C, PatchImplementation.FLOWER, new WorldPoint(3601, 3524, 0),
+ new Polygon(
+ new int[]{3601, 3601, 3602, 3602},
+ new int[]{3225, 3226, 3226, 3225},
+ 4
+ )
+ ),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_D, PatchImplementation.HERB, new WorldPoint(3605, 3528, 0),
+ new Polygon(
+ new int[]{3605, 3605, 3606, 3606},
+ new int[]{3529, 3530, 3530, 3529},
+ 4
+ )),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_E, PatchImplementation.COMPOST, new WorldPoint(3609, 3522, 0))
+ ), 14390);
+
+ add(new FarmingRegion("Nemus Retreat", 5427, false,
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.TREE, new WorldPoint(1365, 3319, 0),
+ new Polygon(
+ new int[]{1365, 1365, 1367, 1367},
+ new int[]{3320, 3322, 3322, 3320},
+ 4
+ ),
+ NpcID.FARMING_GARDENER_TREE_7)
));
- add(new FarmingRegion("Port Sarim", 12082, false, Set.of(12083),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.SPIRIT_TREE, new WorldPoint(3059, 3257, 0),
- new Polygon(
- new int[]{3059, 3059, 3061, 3061},
- new int[]{3257, 3259, 3259, 3257},
- 4
- ),
- NpcID.FARMING_GARDENER_SPIRIT_TREE_1)
+ add(new FarmingRegion("Port Sarim", 12082, false,
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.SPIRIT_TREE, new WorldPoint(3059, 3257, 0),
+ new Polygon(
+ new int[]{3059, 3059, 3061, 3061},
+ new int[]{3257, 3259, 3259, 3257},
+ 4
+ ),
+ NpcID.FARMING_GARDENER_SPIRIT_TREE_1)
)
{
@Override
@@ -561,221 +564,222 @@ public boolean isInBounds(WorldPoint loc)
{
return loc.getY() < 3272;
}
- });
-
- add(new FarmingRegion("Rimmington", 11570, false, Set.of(11826),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.BUSH, new WorldPoint(2940, 3223, 0),
- new Polygon(
- new int[]{2940, 2940, 2941, 2941},
- new int[]{3221, 3222, 3222, 3221},
- 4
- ),
- NpcID.FARMING_GARDENER_BUSH_2)
- ));
-
- add(new FarmingRegion("Seers' Village", 10551, false, Set.of(10550),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.HOPS, new WorldPoint(2669, 3522, 0),
- new Polygon(
- new int[]{2664, 2664, 2669, 2669},
- new int[]{3523, 3528, 3528, 3523},
- 4
- ),
- NpcID.FARMING_GARDENER_HOPS_4)
- ));
+ }, 12083);
+
+ add(new FarmingRegion("Rimmington", 11570, false,
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.BUSH, new WorldPoint(2940, 3223, 0),
+ new Polygon(
+ new int[]{2940, 2940, 2941, 2941},
+ new int[]{3221, 3222, 3222, 3221},
+ 4
+ ),
+ NpcID.FARMING_GARDENER_BUSH_2)
+ ), 11826);
+
+ add(new FarmingRegion("Seers' Village", 10551, false,
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.HOPS, new WorldPoint(2669, 3522, 0),
+ new Polygon(
+ new int[]{2664, 2664, 2669, 2669},
+ new int[]{3523, 3528, 3528, 3523},
+ 4
+ ),
+ NpcID.FARMING_GARDENER_HOPS_4)
+ ), 10550);
add(new FarmingRegion("Tai Bwo Wannai", 11056, false,
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.CALQUAT, new WorldPoint(2796, 3103, 0),
- new Polygon(
- new int[]{2795, 2795, 2797, 2797},
- new int[]{3100, 3102, 3102, 3100},
- 4
- ),
- NpcID.FARMING_GARDENER_CALQUAT)
- ));
-
- add(new FarmingRegion("Taverley", 11573, false, Set.of(11829),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.TREE, new WorldPoint(2936, 3440, 0),
- new Polygon(
- new int[]{2935, 2935, 2937, 2937},
- new int[]{3437, 3439, 3439, 3437},
- 4
- ),
- NpcID.FARMING_GARDENER_TREE_1)
- ));
-
- add(new FarmingRegion("Tree Gnome Village", 9777, true, Set.of(10033),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.FRUIT_TREE, new WorldPoint(2488, 3180, 0),
- new Polygon(
- new int[]{2489, 2489, 2490, 2490},
- new int[]{3179, 3180, 3180, 3179},
- 4
- ),
- NpcID.FARMING_GARDENER_FRUIT_2)
- ));
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.CALQUAT, new WorldPoint(2796, 3103, 0),
+ new Polygon(
+ new int[]{2795, 2795, 2797, 2797},
+ new int[]{3100, 3102, 3102, 3100},
+ 4
+ ),
+ NpcID.FARMING_GARDENER_CALQUAT)
+ ));
+
+ add(new FarmingRegion("Taverley", 11573, false,
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.TREE, new WorldPoint(2936, 3440, 0),
+ new Polygon(
+ new int[]{2935, 2935, 2937, 2937},
+ new int[]{3437, 3439, 3439, 3437},
+ 4
+ ),
+ NpcID.FARMING_GARDENER_TREE_1)
+ ), 11829);
+
+ add(new FarmingRegion("Tree Gnome Village", 9777, true,
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.FRUIT_TREE, new WorldPoint(2488, 3180, 0),
+ new Polygon(
+ new int[]{2489, 2489, 2490, 2490},
+ new int[]{3179, 3180, 3180, 3179},
+ 4
+ ),
+ NpcID.FARMING_GARDENER_FRUIT_2)
+ ), 10033);
add(new FarmingRegion("Troll Stronghold", 11321, true,
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.HERB, new WorldPoint(2827, 3693, 0),
- new Polygon(
- new int[]{2826, 2826, 2827, 2827},
- new int[]{3694, 3695, 3695, 3694},
- 4
- ))
- ));
-
- add(new FarmingRegion("Varrock", 12854, false, Set.of(12853),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.TREE, new WorldPoint(3229, 3457, 0),
- new Polygon(
- new int[]{3228, 3228, 3230, 3230},
- new int[]{3458, 3460, 3460, 3458},
- 4
- ),
- NpcID.FARMING_GARDENER_TREE_3_02)
- ));
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.HERB, new WorldPoint(2827, 3693, 0),
+ new Polygon(
+ new int[]{2826, 2826, 2827, 2827},
+ new int[]{3694, 3695, 3695, 3694},
+ 4
+ ))
+ ));
+
+ add(new FarmingRegion("Varrock", 12854, false,
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.TREE, new WorldPoint(3229, 3457, 0),
+ new Polygon(
+ new int[]{3228, 3228, 3230, 3230},
+ new int[]{3458, 3460, 3460, 3458},
+ 4
+ ),
+ NpcID.FARMING_GARDENER_TREE_3_02)
+ ), 12853);
add(new FarmingRegion("Yanille", 10288, false,
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.HOPS, new WorldPoint(2573, 3106, 0),
- new Polygon(
- new int[]{2574, 2574, 2577, 2577},
- new int[]{3103, 3106, 3106, 3103},
- 4
- ),
- NpcID.FARMING_GARDENER_HOPS_1)
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.HOPS, new WorldPoint(2573, 3106, 0),
+ new Polygon(
+ new int[]{2574, 2574, 2577, 2577},
+ new int[]{3103, 3106, 3106, 3103},
+ 4
+ ),
+ NpcID.FARMING_GARDENER_HOPS_1)
));
add(new FarmingRegion("Weiss", 11325, false,
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.HERB, new WorldPoint(2849, 3933, 0),
- new Polygon(
- new int[]{2848, 2848, 2849, 2849},
- new int[]{3934, 3935, 3935, 3934},
- 4
- ))
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.HERB, new WorldPoint(2849, 3933, 0),
+ new Polygon(
+ new int[]{2848, 2848, 2849, 2849},
+ new int[]{3934, 3935, 3935, 3934},
+ 4
+ ))
));
add(new FarmingRegion("Farming Guild", 5021, true,
- new FarmingPatch("Hespori", VarbitID.FARMING_TRANSMIT_J, PatchImplementation.HESPORI, new WorldPoint(1246, 10085, 0),
- new Polygon(
- new int[]{1246, 1248, 1248, 1246},
- new int[]{10086, 10088, 10088, 10086},
- 4
- ))
+ new FarmingPatch("Hespori", VarbitID.FARMING_TRANSMIT_J, PatchImplementation.HESPORI, new WorldPoint(1246, 10085, 0),
+ new Polygon(
+ new int[]{1246, 1248, 1248, 1246},
+ new int[]{10086, 10088, 10088, 10086},
+ 4
+ ))
));
//Full 3x3 region area centered on farming guild
- add(farmingGuildRegion = new FarmingRegion("Farming Guild", 4922, true, Set.of(5177, 5178, 5179, 4921, 4923, 4665, 4666, 4667),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_G, PatchImplementation.TREE, new WorldPoint(1233, 3734, 0),
- new Polygon(
- new int[]{1231, 1231, 1233, 1233},
- new int[]{3735, 3737, 3737, 3735},
- 4
- ),
- NpcID.FARMING_GARDENER_FARMGUILD_T2),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_E, PatchImplementation.HERB, new WorldPoint(1238, 3728, 0),
- new Polygon(
- new int[]{1238, 1238, 1239, 1239},
- new int[]{3726, 3727, 3727, 3726},
- 4
- )),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_B, PatchImplementation.BUSH, new WorldPoint(1261, 3732, 0),
- new Polygon(
- new int[]{1260, 1260, 1261, 1261},
- new int[]{3733, 3734, 3734, 3733},
- 4
- ),
- NpcID.FARMING_GARDENER_FARMGUILD_T1, 3),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_H, PatchImplementation.FLOWER, new WorldPoint(1261, 3727, 0),
- new Polygon(
- new int[]{1260, 1260, 1261, 1261},
- new int[]{3725, 3726, 3726, 3725},
- 4
- )),
- new FarmingPatch("North", VarbitID.FARMING_TRANSMIT_C, PatchImplementation.ALLOTMENT, new WorldPoint(1266, 3732, 0),
- new Polygon(
- new int[]{1267, 1267, 1268, 1268, 1272, 1272},
- new int[]{3732, 3736, 3736, 3733, 3733, 3732},
- 6
- ),
- NpcID.FARMING_GARDENER_FARMGUILD_T1, 1),
- new FarmingPatch("South", VarbitID.FARMING_TRANSMIT_D, PatchImplementation.ALLOTMENT, new WorldPoint(1266, 3727, 0),
- new Polygon(
- new int[]{1267, 1267, 1272, 1272, 1268, 1268},
- new int[]{3723, 3727, 3727, 3726, 3726, 3723},
- 6
- ),
- NpcID.FARMING_GARDENER_FARMGUILD_T1, 2),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_N, PatchImplementation.BIG_COMPOST, new WorldPoint(1271, 3729, 0)),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_F, PatchImplementation.CACTUS, new WorldPoint(1264, 3746, 0),
- new Polygon(
- new int[]{1264, 1264, 1265, 1265},
- new int[]{3747, 3748, 3748, 3747},
- 4
- ),
- NpcID.FARMING_GARDENER_FARMGUILD_T1, 0),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.SPIRIT_TREE, new WorldPoint(1251, 3749, 0),
- new Polygon(
- new int[]{1252, 1252, 1254, 1254},
- new int[]{3749, 3751, 3751, 3749},
- 4
- ),
- NpcID.FARMING_GARDENER_SPIRIT_TREE_5),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_K, PatchImplementation.FRUIT_TREE, new WorldPoint(1243, 3757, 0),
- new Polygon(
- new int[]{1242, 1242, 1243, 1243},
- new int[]{3758, 3759, 3758, 3758},
- 4
- ),
- NpcID.FARMING_GARDENER_FARMGUILD_T3),
- new FarmingPatch("Anima", VarbitID.FARMING_TRANSMIT_M, PatchImplementation.ANIMA, new WorldPoint(1233, 3725, 0),
- new Polygon(
- new int[]{1231, 1231, 1233, 1233},
- new int[]{3722, 3724, 3724, 3722},
- 4
- )),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_L, PatchImplementation.CELASTRUS, new WorldPoint(1245, 3752, 0),
- new Polygon(
- new int[]{1243, 1243, 1245, 1245},
- new int[]{3749, 3751, 3751, 3749},
- 4
- ),
- NpcID.FARMING_GARDENER_FARMGUILD_CELASTRUS),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_I, PatchImplementation.REDWOOD, new WorldPoint(1233, 3752, 0),
- new Polygon(
- new int[]{1225, 1225, 1232, 1232},
- new int[]{3751, 3758, 3758, 3751},
- 4
- ),
- NpcID.FARMING_GARDENER_FARMGUILD_REDWOOD)
- ));
+ add(farmingGuildRegion = new FarmingRegion("Farming Guild", 4922, true,
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_G, PatchImplementation.TREE, new WorldPoint(1233, 3734, 0),
+ new Polygon(
+ new int[]{1231, 1231, 1233, 1233},
+ new int[]{3735, 3737, 3737, 3735},
+ 4
+ ),
+ NpcID.FARMING_GARDENER_FARMGUILD_T2),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_E, PatchImplementation.HERB, new WorldPoint(1238, 3728, 0),
+ new Polygon(
+ new int[]{1238, 1238, 1239, 1239},
+ new int[]{3726, 3727, 3727, 3726},
+ 4
+ )),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_B, PatchImplementation.BUSH, new WorldPoint(1261, 3732, 0),
+ new Polygon(
+ new int[]{1260, 1260, 1261, 1261},
+ new int[]{3733, 3734, 3734, 3733},
+ 4
+ ),
+ NpcID.FARMING_GARDENER_FARMGUILD_T1, 3),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_H, PatchImplementation.FLOWER, new WorldPoint(1261, 3727, 0),
+ new Polygon(
+ new int[]{1260, 1260, 1261, 1261},
+ new int[]{3725, 3726, 3726, 3725},
+ 4
+ )),
+ new FarmingPatch("North", VarbitID.FARMING_TRANSMIT_C, PatchImplementation.ALLOTMENT, new WorldPoint(1266, 3732, 0),
+ new Polygon(
+ new int[]{1267, 1267, 1268, 1268, 1272, 1272},
+ new int[]{3732, 3736, 3736, 3733, 3733, 3732},
+ 6
+ ),
+ NpcID.FARMING_GARDENER_FARMGUILD_T1, 1),
+ new FarmingPatch("South", VarbitID.FARMING_TRANSMIT_D, PatchImplementation.ALLOTMENT, new WorldPoint(1266, 3727, 0),
+ new Polygon(
+ new int[]{1267, 1267, 1272, 1272, 1268, 1268},
+ new int[]{3723, 3727, 3727, 3726, 3726, 3723},
+ 6
+ ),
+ NpcID.FARMING_GARDENER_FARMGUILD_T1, 2),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_N, PatchImplementation.BIG_COMPOST, new WorldPoint(1271, 3729, 0)),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_F, PatchImplementation.CACTUS, new WorldPoint(1264, 3746, 0),
+ new Polygon(
+ new int[]{1264, 1264, 1265, 1265},
+ new int[]{3747, 3748, 3748, 3747},
+ 4
+ ),
+ NpcID.FARMING_GARDENER_FARMGUILD_T1, 0),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.SPIRIT_TREE, new WorldPoint(1251, 3749, 0),
+ new Polygon(
+ new int[]{1252, 1252, 1254, 1254},
+ new int[]{3749, 3751, 3751, 3749},
+ 4
+ ),
+ NpcID.FARMING_GARDENER_SPIRIT_TREE_5),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_K, PatchImplementation.FRUIT_TREE, new WorldPoint(1243, 3757, 0),
+ new Polygon(
+ new int[]{1242, 1242, 1243, 1243},
+ new int[]{3758, 3759, 3758, 3758},
+ 4
+ ),
+ NpcID.FARMING_GARDENER_FARMGUILD_T3),
+ new FarmingPatch("Anima", VarbitID.FARMING_TRANSMIT_M, PatchImplementation.ANIMA, new WorldPoint(1233, 3725, 0),
+ new Polygon(
+ new int[]{1231, 1231, 1233, 1233},
+ new int[]{3722, 3724, 3724, 3722},
+ 4
+ )),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_L, PatchImplementation.CELASTRUS, new WorldPoint(1245, 3752, 0),
+ new Polygon(
+ new int[]{1243, 1243, 1245, 1245},
+ new int[]{3749, 3751, 3751, 3749},
+ 4
+ ),
+ NpcID.FARMING_GARDENER_FARMGUILD_CELASTRUS),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_I, PatchImplementation.REDWOOD, new WorldPoint(1233, 3752, 0),
+ new Polygon(
+ new int[]{1225, 1225, 1232, 1232},
+ new int[]{3751, 3758, 3758, 3751},
+ 4
+ ),
+ NpcID.FARMING_GARDENER_FARMGUILD_REDWOOD)
+ ), 5177, 5178, 5179, 4921, 4923, 4665, 4666, 4667);
//All of Prifddinas, and all of Prifddinas Underground
- add(new FarmingRegion("Prifddinas", 13151, false, Set.of(12895, 12894, 13150, 12994, 12993, 12737, 12738, 12126, 12127, 13250),
- new FarmingPatch("North", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.ALLOTMENT, new WorldPoint(3293, 6105, 0),
- new Polygon(
- new int[]{3288, 3288, 3293, 3293, 3289, 3289},
- new int[]{6101, 6104, 6104, 6103, 6103, 6101},
- 6
- ),
- NpcID.PRIF_GARDENER, 0),
- new FarmingPatch("South", VarbitID.FARMING_TRANSMIT_B, PatchImplementation.ALLOTMENT, new WorldPoint(3294, 6096, 0),
- new Polygon(
- new int[]{3288, 3288, 3289, 3289, 3293, 3293},
- new int[]{6095, 6098, 6098, 6096, 6096, 6095},
- 6
- ),
- NpcID.PRIF_GARDENER, 1),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_C, PatchImplementation.FLOWER, new WorldPoint(3294, 6100, 0),
- new Polygon(
- new int[]{3292, 3292, 3293, 3293},
- new int[]{6099, 6100, 6100, 6099},
- 4
- )),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_E, PatchImplementation.CRYSTAL_TREE, new WorldPoint(3291, 6117, 0),
- new Polygon(
- new int[]{3291, 3291, 3292, 3292},
- new int[]{6118, 6119, 6119, 6118},
- 4
- )),
- new FarmingPatch("", VarbitID.FARMING_TRANSMIT_D, PatchImplementation.COMPOST, new WorldPoint(3288, 6100, 0))
- ));
+ add(new FarmingRegion("Prifddinas", 13151, false,
+ new FarmingPatch("North", VarbitID.FARMING_TRANSMIT_A, PatchImplementation.ALLOTMENT, new WorldPoint(3293, 6105, 0),
+ new Polygon(
+ new int[]{3288, 3288, 3293, 3293, 3289, 3289},
+ new int[]{6101, 6104, 6104, 6103, 6103, 6101},
+ 6
+ ),
+ NpcID.PRIF_GARDENER, 0),
+ new FarmingPatch("South", VarbitID.FARMING_TRANSMIT_B, PatchImplementation.ALLOTMENT, new WorldPoint(3294, 6096, 0),
+ new Polygon(
+ new int[]{3288, 3288, 3289, 3289, 3293, 3293},
+ new int[]{6095, 6098, 6098, 6096, 6096, 6095},
+ 6
+ ),
+ NpcID.PRIF_GARDENER, 1),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_C, PatchImplementation.FLOWER, new WorldPoint(3294, 6100, 0),
+ new Polygon(
+ new int[]{3292, 3292, 3293, 3293},
+ new int[]{6099, 6100, 6100, 6099},
+ 4
+ )),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_E, PatchImplementation.CRYSTAL_TREE, new WorldPoint(3291, 6117, 0),
+ new Polygon(
+ new int[]{3291, 3291, 3292, 3292},
+ new int[]{6118, 6119, 6119, 6118},
+ 4
+ )),
+ new FarmingPatch("", VarbitID.FARMING_TRANSMIT_D, PatchImplementation.COMPOST, new WorldPoint(3288, 6100, 0))
+ ), 12895, 12894, 13150,
+ /* Underground */ 12994, 12993, 12737, 12738, 12126, 12127, 13250);
// Finalize
this.regions = Multimaps.unmodifiableMultimap(this.regions);
@@ -787,25 +791,25 @@ public boolean isInBounds(WorldPoint loc)
this.tabs = Collections.unmodifiableMap(umtabs);
}
- private void add(FarmingRegion r)
+ private void add(FarmingRegion r, int... extraRegions)
{
regions.put(r.getRegionID(), r);
- for (int er : r.getRegionIDs())
+ for (int er : extraRegions)
{
regions.put(er, r);
}
for (FarmingPatch p : r.getPatches())
{
tabs
- .computeIfAbsent(p.getImplementation().getTab(), k -> new TreeSet<>(tabSorter))
- .add(p);
+ .computeIfAbsent(p.getImplementation().getTab(), k -> new TreeSet<>(tabSorter))
+ .add(p);
}
}
Collection getRegionsForLocation(WorldPoint location)
{
return this.regions.get(location.getRegionID()).stream()
- .filter(region -> region.isInBounds(location))
- .collect(Collectors.toSet());
+ .filter(region -> region.isInBounds(location))
+ .collect(Collectors.toSet());
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/HerbRun.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/HerbRun.java
index 626945c67d8..ff682773477 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/HerbRun.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/HerbRun.java
@@ -26,12 +26,12 @@
import net.runelite.client.plugins.microbot.questhelper.QuestHelperConfig;
import net.runelite.client.plugins.microbot.questhelper.collections.ItemCollections;
+import net.runelite.client.plugins.microbot.questhelper.config.ConfigKeys;
import net.runelite.client.plugins.microbot.questhelper.panel.PanelDetails;
import net.runelite.client.plugins.microbot.questhelper.questhelpers.ComplexStateQuestHelper;
import net.runelite.client.plugins.microbot.questhelper.questinfo.HelperConfig;
import net.runelite.client.plugins.microbot.questhelper.questinfo.QuestHelperQuest;
import net.runelite.client.plugins.microbot.questhelper.requirements.ManualRequirement;
-import net.runelite.client.plugins.microbot.questhelper.requirements.Requirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.conditional.Conditions;
import net.runelite.client.plugins.microbot.questhelper.requirements.item.ItemRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.item.ItemRequirements;
@@ -40,13 +40,9 @@
import net.runelite.client.plugins.microbot.questhelper.requirements.runelite.RuneliteRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicType;
import net.runelite.client.plugins.microbot.questhelper.requirements.var.VarbitRequirement;
-import net.runelite.client.plugins.microbot.questhelper.steps.ConditionalStep;
-import net.runelite.client.plugins.microbot.questhelper.steps.DetailedQuestStep;
-import net.runelite.client.plugins.microbot.questhelper.steps.ObjectStep;
-import net.runelite.client.plugins.microbot.questhelper.steps.QuestStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.*;
import net.runelite.api.QuestState;
import net.runelite.api.Skill;
-import net.runelite.api.Varbits;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.events.GameTick;
import net.runelite.api.gameval.ItemID;
@@ -60,30 +56,110 @@
import javax.inject.Inject;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.nor;
+
public class HerbRun extends ComplexStateQuestHelper
{
- // TODO: Updating setId and setName in ItemRequirement
@Inject
private FarmingWorld farmingWorld;
private FarmingHandler farmingHandler;
- DetailedQuestStep waitForHerbs, ardougnePatch, catherbyPatch, faladorPatch, farmingGuildPatch, harmonyPatch, morytaniaPatch, trollStrongholdPatch, weissPatch, hosidiusPatch, varlamorePatch;
-
- DetailedQuestStep ardougnePlant, catherbyPlant, faladorPlant, farmingGuildPlant, harmonyPlant, morytaniaPlant, trollStrongholdPlant, weissPlant, hosidiusPlant, varlamorePlant;
- ItemRequirement spade, dibber, rake, seed, compost;
- ItemRequirement ectophial, magicSec, explorerRing2, ardyCloak2, xericsTalisman, catherbyTeleport, trollheimTeleport, icyBasalt, stonyBasalt, farmingGuildTeleport, hosidiusHouseTeleport, hunterWhistle;
- ItemRequirement gracefulHood, gracefulTop, gracefulLegs, gracefulGloves, gracefulBoots, gracefulCape, gracefulOutfit;
- ItemRequirement farmingHat, farmingTop, farmingLegs, farmingBoots, farmersOutfit;
-
- Requirement accessToHarmony, accessToWeiss, accessToTrollStronghold, accessToFarmingGuildPatch, accessToVarlamore;
-
- ManualRequirement ardougneEmpty, catherbyEmpty, faladorEmpty, farmingGuildEmpty, harmonyEmpty, morytaniaEmpty, trollStrongholdEmpty, weissEmpty, hosidiusEmpty, varlamoreEmpty;
- ManualRequirement ardougneReady, catherbyReady, faladorReady, farmingGuildReady, harmonyReady, morytaniaReady, trollStrongholdReady, weissReady, hosidiusReady, varlamoreReady;
-
- private enum Seed {
+ // Required items
+ ItemRequirement spade;
+ ItemRequirement dibber;
+ ItemRequirement rake;
+ ItemRequirement seed;
+
+ // Recommended items
+ ItemRequirement compost;
+ ItemRequirement ectophial;
+ ItemRequirement magicSec;
+ ItemRequirement explorerRing2;
+ ItemRequirement ardyCloak2;
+ ItemRequirement xericsTalisman;
+ ItemRequirement catherbyTeleport;
+ ItemRequirement trollheimTeleport;
+ ItemRequirement icyBasalt;
+ ItemRequirement stonyBasalt;
+ ItemRequirement farmingGuildTeleport;
+ ItemRequirement hosidiusHouseTeleport;
+ ItemRequirement hunterWhistle;
+ ItemRequirement harmonyTeleport;
+ ItemRequirement gracefulHood;
+ ItemRequirement gracefulTop;
+ ItemRequirement gracefulLegs;
+ ItemRequirement gracefulGloves;
+ ItemRequirement gracefulBoots;
+ ItemRequirement gracefulCape;
+ ItemRequirement gracefulOutfit;
+ ItemRequirement farmingHat;
+ ItemRequirement farmingTop;
+ ItemRequirement farmingLegs;
+ ItemRequirement farmingBoots;
+ ItemRequirement farmersOutfit;
+
+ // Miscellaneous requirements
+ QuestRequirement accessToHarmony;
+ QuestRequirement accessToWeiss;
+ QuestRequirement accessToTrollStronghold;
+ SkillRequirement accessToFarmingGuildPatch;
+ QuestRequirement accessToVarlamore;
+ RuneliteRequirement unlockedBarbarianPlanting;
+
+ ManualRequirement ardougneEmpty;
+ ManualRequirement catherbyEmpty;
+ ManualRequirement faladorEmpty;
+ ManualRequirement farmingGuildEmpty;
+ ManualRequirement harmonyEmpty;
+ ManualRequirement morytaniaEmpty;
+ ManualRequirement trollStrongholdEmpty;
+ ManualRequirement weissEmpty;
+ ManualRequirement hosidiusEmpty;
+ ManualRequirement varlamoreEmpty;
+ ManualRequirement ardougneReady;
+ ManualRequirement catherbyReady;
+ ManualRequirement faladorReady;
+ ManualRequirement farmingGuildReady;
+ ManualRequirement harmonyReady;
+ ManualRequirement morytaniaReady;
+ ManualRequirement trollStrongholdReady;
+ ManualRequirement weissReady;
+ ManualRequirement hosidiusReady;
+ ManualRequirement varlamoreReady;
+
+ // Steps
+ ReorderableConditionalStep steps;
+ DetailedQuestStep waitForHerbs;
+ ObjectStep ardougnePatch;
+ ObjectStep catherbyPatch;
+ ObjectStep faladorPatch;
+ ObjectStep farmingGuildPatch;
+ ObjectStep harmonyPatch;
+ ObjectStep morytaniaPatch;
+ ObjectStep trollStrongholdPatch;
+ ObjectStep weissPatch;
+ ObjectStep hosidiusPatch;
+ ObjectStep varlamorePatch;
+ ObjectStep ardougnePlant;
+ ObjectStep catherbyPlant;
+ ObjectStep faladorPlant;
+ ObjectStep farmingGuildPlant;
+ ObjectStep harmonyPlant;
+ ObjectStep morytaniaPlant;
+ ObjectStep trollStrongholdPlant;
+ ObjectStep weissPlant;
+ ObjectStep hosidiusPlant;
+ ObjectStep varlamorePlant;
+
+ // Sidebar panels
+ List allSteps;
+
+ private enum Seed
+ {
GUAM(ItemID.GUAM_SEED), MARRENTILL(ItemID.MARRENTILL_SEED), TARROMIN(ItemID.TARROMIN_SEED), HARRALANDER(ItemID.HARRALANDER_SEED),
RANARR(ItemID.RANARR_SEED), TOADFLAX(ItemID.TOADFLAX_SEED), IRIT(ItemID.IRIT_SEED), AVANTOE(ItemID.AVANTOE_SEED), KWUARM(ItemID.KWUARM_SEED),
SNAPDRAGON(ItemID.SNAPDRAGON_SEED), HUASCA(ItemID.HUASCA_SEED), CADANTINE(ItemID.CADANTINE_SEED), LATANDYME(ItemID.LANTADYME_SEED),
@@ -97,58 +173,18 @@ private enum Seed {
}
}
- private enum GracefulOrFarming {
+ private enum GracefulOrFarming
+ {
NONE(),
GRACEFUL(),
- FARMING();
+ FARMING()
}
private final String HERB_SEEDS = "herbSeeds";
private final String GRACEFUL_OR_FARMING = "gracefulOrFarming";
@Override
- public QuestStep loadStep()
- {
- farmingHandler = new FarmingHandler(client, configManager);
- initializeRequirements();
- setupConditions();
- setupSteps();
-
- ConditionalStep steps = new ConditionalStep(this, waitForHerbs, spade, dibber, rake, seed, magicSec, farmersOutfit, gracefulOutfit);
- steps.addStep(faladorReady, faladorPatch);
- steps.addStep(faladorEmpty, faladorPlant);
-
- steps.addStep(ardougneReady, ardougnePatch);
- steps.addStep(ardougneEmpty, ardougnePlant);
-
- steps.addStep(catherbyReady, catherbyPatch);
- steps.addStep(catherbyEmpty, catherbyPlant);
-
- steps.addStep(morytaniaReady, morytaniaPatch);
- steps.addStep(morytaniaEmpty, morytaniaPlant);
-
- steps.addStep(hosidiusReady, hosidiusPatch);
- steps.addStep(hosidiusEmpty, hosidiusPlant);
-
- steps.addStep(new Conditions(accessToTrollStronghold, trollStrongholdReady), trollStrongholdPatch);
- steps.addStep(new Conditions(accessToTrollStronghold, trollStrongholdEmpty), trollStrongholdPlant);
-
- steps.addStep(new Conditions(accessToWeiss, weissReady), weissPatch);
- steps.addStep(new Conditions(accessToWeiss, weissEmpty), weissPlant);
-
- steps.addStep(new Conditions(accessToFarmingGuildPatch, farmingGuildReady), farmingGuildPatch);
- steps.addStep(new Conditions(accessToFarmingGuildPatch, farmingGuildEmpty), farmingGuildPlant);
-
- steps.addStep(new Conditions(accessToHarmony, harmonyReady), harmonyPatch);
- steps.addStep(new Conditions(accessToHarmony, harmonyEmpty), harmonyPlant);
-
- steps.addStep(new Conditions(accessToVarlamore, varlamoreReady), varlamorePatch);
- steps.addStep(new Conditions(accessToVarlamore, varlamoreEmpty), varlamorePlant);
-
- return steps;
- }
-
- public void setupConditions()
+ protected void setupRequirements()
{
ardougneReady = new ManualRequirement();
catherbyReady = new ManualRequirement();
@@ -171,11 +207,7 @@ public void setupConditions()
weissEmpty = new ManualRequirement();
hosidiusEmpty = new ManualRequirement();
varlamoreEmpty = new ManualRequirement();
- }
- @Override
- protected void setupRequirements()
- {
accessToFarmingGuildPatch = new SkillRequirement(Skill.FARMING, 65);
accessToHarmony = new QuestRequirement(QuestHelperQuest.MORYTANIA_ELITE, QuestState.FINISHED);
@@ -183,13 +215,15 @@ protected void setupRequirements()
accessToTrollStronghold = new QuestRequirement(QuestHelperQuest.MY_ARMS_BIG_ADVENTURE, QuestState.FINISHED);
accessToVarlamore = new QuestRequirement(QuestHelperQuest.CHILDREN_OF_THE_SUN, QuestState.FINISHED);
+ unlockedBarbarianPlanting = new RuneliteRequirement(configManager, ConfigKeys.BARBARIAN_TRAINING_FINISHED_SEED_PLANTING.getKey());
+
spade = new ItemRequirement("Spade", ItemID.SPADE);
- dibber = new ItemRequirement("Seed dibber", ItemID.DIBBER);
+ dibber = new ItemRequirement("Seed dibber", ItemID.DIBBER).hideConditioned(unlockedBarbarianPlanting);
rake = new ItemRequirement("Rake", ItemID.RAKE).hideConditioned(new VarbitRequirement(VarbitID.FARMING_BLOCKWEEDS, 2));
seed = new ItemRequirement("Seeds of your choice", ItemID.GUAM_SEED);
- String seedName = configManager.getRSProfileConfiguration(QuestHelperConfig.QUEST_BACKGROUND_GROUP, HERB_SEEDS);
+ var seedName = configManager.getRSProfileConfiguration(QuestHelperConfig.QUEST_BACKGROUND_GROUP, HERB_SEEDS);
if (seedName != null)
{
@@ -219,17 +253,17 @@ protected void setupRequirements()
hosidiusHouseTeleport = new ItemRequirement("Teleport to Hosidius House", ItemID.NZONE_TELETAB_KOUREND);
hosidiusHouseTeleport.addAlternates(ItemID.XERIC_TALISMAN);
- ItemRequirement catherbyRunes = new ItemRequirements("Catherby teleport runes", new ItemRequirement("Law rune",
- ItemID.LAWRUNE), new ItemRequirement("Air rune", ItemID.AIRRUNE, 5));
- ItemRequirement catherbyTablet = new ItemRequirement("Catherby tablet", ItemID.LUNAR_TABLET_CATHERBY_TELEPORT);
+ var catherbyRunes = new ItemRequirements("Catherby teleport runes", new ItemRequirement("Law rune",
+ ItemID.LAWRUNE), new ItemRequirement("Air rune", ItemID.AIRRUNE, 5));
+ var catherbyTablet = new ItemRequirement("Catherby tablet", ItemID.LUNAR_TABLET_CATHERBY_TELEPORT);
catherbyTeleport = new ItemRequirements(LogicType.OR, "Catherby teleport", catherbyRunes, catherbyTablet);
- ItemRequirement trollheimRunes = new ItemRequirements("Trollheim teleport runes", new ItemRequirement("Law rune",
- ItemID.LAWRUNE, 2), new ItemRequirement("Fire rune", ItemID.FIRERUNE, 2));
- ItemRequirement trollheimTablet = new ItemRequirement("Trollheim tablet", ItemID.NZONE_TELETAB_TROLLHEIM);
+ var trollheimRunes = new ItemRequirements("Trollheim teleport runes", new ItemRequirement("Law rune",
+ ItemID.LAWRUNE, 2), new ItemRequirement("Fire rune", ItemID.FIRERUNE, 2));
+ var trollheimTablet = new ItemRequirement("Trollheim tablet", ItemID.NZONE_TELETAB_TROLLHEIM);
trollheimTeleport = new ItemRequirements(LogicType.OR, "Trollheim teleport", trollheimRunes, trollheimTablet)
- .hideConditioned(new QuestRequirement(QuestHelperQuest.MAKING_FRIENDS_WITH_MY_ARM, QuestState.FINISHED));
+ .hideConditioned(new QuestRequirement(QuestHelperQuest.MAKING_FRIENDS_WITH_MY_ARM, QuestState.FINISHED));
icyBasalt = new ItemRequirement("Icy basalt", ItemID.WEISS_TELEPORT_BASALT).showConditioned(new QuestRequirement(QuestHelperQuest.MAKING_FRIENDS_WITH_MY_ARM, QuestState.FINISHED));
stonyBasalt = new ItemRequirement("Stony basalt", ItemID.STRONGHOLD_TELEPORT_BASALT).showConditioned(new QuestRequirement(QuestHelperQuest.MAKING_FRIENDS_WITH_MY_ARM, QuestState.FINISHED));
@@ -239,55 +273,57 @@ protected void setupRequirements()
farmingGuildTeleport.addAlternates(ItemCollections.SKILLS_NECKLACES);
farmingGuildTeleport.addAlternates(ItemCollections.FAIRY_STAFF);
+ harmonyTeleport = new ItemRequirement("Harmony Teleport", ItemID.TELETAB_HARMONY);
+
hunterWhistle = new ItemRequirement("Quetzal whistle", ItemID.HG_QUETZALWHISTLE_PERFECTED).showConditioned(accessToVarlamore);
hunterWhistle.addAlternates(ItemID.HG_QUETZALWHISTLE_BASIC);
hunterWhistle.addAlternates(ItemID.HG_QUETZALWHISTLE_ENHANCED);
gracefulHood = new ItemRequirement(
- "Graceful hood", ItemCollections.GRACEFUL_HOOD, 1 ,true).isNotConsumed();
+ "Graceful hood", ItemCollections.GRACEFUL_HOOD, 1, true).isNotConsumed();
gracefulTop = new ItemRequirement(
- "Graceful top", ItemCollections.GRACEFUL_TOP, 1, true).isNotConsumed();
+ "Graceful top", ItemCollections.GRACEFUL_TOP, 1, true).isNotConsumed();
gracefulLegs = new ItemRequirement(
- "Graceful legs", ItemCollections.GRACEFUL_LEGS, 1, true).isNotConsumed();
+ "Graceful legs", ItemCollections.GRACEFUL_LEGS, 1, true).isNotConsumed();
gracefulCape = new ItemRequirement(
- "Graceful cape", ItemCollections.GRACEFUL_CAPE, 1, true).isNotConsumed();
+ "Graceful cape", ItemCollections.GRACEFUL_CAPE, 1, true).isNotConsumed();
gracefulGloves = new ItemRequirement(
- "Graceful gloves", ItemCollections.GRACEFUL_GLOVES, 1, true).isNotConsumed();
+ "Graceful gloves", ItemCollections.GRACEFUL_GLOVES, 1, true).isNotConsumed();
gracefulBoots = new ItemRequirement(
- "Graceful boots", ItemCollections.GRACEFUL_BOOTS, 1, true).isNotConsumed();
+ "Graceful boots", ItemCollections.GRACEFUL_BOOTS, 1, true).isNotConsumed();
gracefulBoots.addAlternates(ItemID.IKOV_BOOTSOFLIGHTNESS);
gracefulOutfit = new ItemRequirements(
- "Graceful outfit (equipped)",
- gracefulHood, gracefulTop, gracefulLegs, gracefulGloves, gracefulBoots, gracefulCape
+ "Graceful outfit (equipped)",
+ gracefulHood, gracefulTop, gracefulLegs, gracefulGloves, gracefulBoots, gracefulCape
).isNotConsumed().showConditioned(new RuneliteRequirement(configManager, GRACEFUL_OR_FARMING, GracefulOrFarming.GRACEFUL.name()));
farmingHat = new ItemRequirement(
- "Farmer's strawhat", ItemID.TITHE_REWARD_HAT_MALE, 1 ,true).isNotConsumed();
+ "Farmer's strawhat", ItemID.TITHE_REWARD_HAT_MALE, 1, true).isNotConsumed();
farmingHat.addAlternates(ItemID.TITHE_REWARD_HAT_FEMALE, ItemID.TITHE_REWARD_HAT_MALE_DUMMY, ItemID.TITHE_REWARD_HAT_FEMALE_DUMMY);
farmingTop = new ItemRequirement(
- "Farmer's top", ItemID.TITHE_REWARD_TORSO_MALE, 1, true).isNotConsumed();
+ "Farmer's top", ItemID.TITHE_REWARD_TORSO_MALE, 1, true).isNotConsumed();
farmingTop.addAlternates(ItemID.TITHE_REWARD_TORSO_FEMALE);
farmingLegs = new ItemRequirement(
- "Farmer's boro trousers", ItemID.TITHE_REWARD_LEGS_MALE, 1, true).isNotConsumed();
+ "Farmer's boro trousers", ItemID.TITHE_REWARD_LEGS_MALE, 1, true).isNotConsumed();
farmingLegs.addAlternates(ItemID.TITHE_REWARD_LEGS_FEMALE);
farmingBoots = new ItemRequirement(
- "Graceful cape", ItemID.TITHE_REWARD_FEET_MALE, 1, true).isNotConsumed();
+ "Graceful cape", ItemID.TITHE_REWARD_FEET_MALE, 1, true).isNotConsumed();
farmingBoots.addAlternates(ItemID.TITHE_REWARD_FEET_FEMALE);
farmersOutfit = new ItemRequirements(
- "Farmer's outfit (equipped)",
- farmingHat, farmingTop, farmingLegs, farmingBoots
+ "Farmer's outfit (equipped)",
+ farmingHat, farmingTop, farmingLegs, farmingBoots
).isNotConsumed().showConditioned(new RuneliteRequirement(configManager, GRACEFUL_OR_FARMING, GracefulOrFarming.FARMING.name()));
}
@@ -308,7 +344,7 @@ public void setupSteps()
morytaniaPatch = new ObjectStep(this, ObjectID.FARMING_HERB_PATCH_4, new WorldPoint(3605, 3529, 0), "Harvest your herbs from the Morytania patch.", ectophial);
trollStrongholdPatch = new ObjectStep(this, ObjectID.MYARM_HERBPATCH, new WorldPoint(2826, 3694, 0), "Harvest your herbs from the Troll Stronghold patch.",
- trollheimTeleport, stonyBasalt);
+ trollheimTeleport, stonyBasalt);
trollStrongholdPatch.conditionToHideInSidebar(new Conditions(LogicType.NOR, accessToTrollStronghold));
weissPatch = new ObjectStep(this, ObjectID.MY2ARM_HERBPATCH, new WorldPoint(2848, 3934, 0), "Harvest your herbs from the Weiss patch.", icyBasalt);
weissPatch.conditionToHideInSidebar(new Conditions(LogicType.NOR, accessToWeiss));
@@ -330,7 +366,7 @@ public void setupSteps()
hosidiusPlant = new ObjectStep(this, ObjectID.FARMING_HERB_PATCH_6, new WorldPoint(1738, 3550, 0), "Plant your seeds into the Hosidius patch.", hosidiusHouseTeleport);
hosidiusPlant.addIcon(ItemID.RANARR_SEED);
- hosidiusPlant.addSubSteps(hosidiusPlant);
+ hosidiusPatch.addSubSteps(hosidiusPlant);
farmingGuildPlant = new ObjectStep(this, ObjectID.FARMING_HERB_PATCH_7, new WorldPoint(1238, 3726, 0), "Plant your seeds into the Farming Guild patch.", farmingGuildTeleport);
farmingGuildPlant.conditionToHideInSidebar(new Conditions(LogicType.NOR, accessToFarmingGuildPatch));
@@ -347,7 +383,7 @@ public void setupSteps()
morytaniaPatch.addSubSteps(morytaniaPlant);
trollStrongholdPlant = new ObjectStep(this, ObjectID.MYARM_HERBPATCH, new WorldPoint(2826, 3694, 0), "Plant your seeds into the Troll Stronghold patch.",
- trollheimTeleport, stonyBasalt);
+ trollheimTeleport, stonyBasalt);
trollStrongholdPlant.conditionToHideInSidebar(new Conditions(LogicType.NOR, accessToTrollStronghold));
trollStrongholdPlant.addIcon(ItemID.RANARR_SEED);
trollStrongholdPatch.addSubSteps(trollStrongholdPlant);
@@ -363,6 +399,48 @@ public void setupSteps()
varlamorePatch.addSubSteps(varlamorePlant);
}
+ @Override
+ public QuestStep loadStep()
+ {
+ farmingHandler = new FarmingHandler(client, configManager);
+ initializeRequirements();
+ setupSteps();
+ prepopulateSidebarPanels();
+
+ steps = new ReorderableConditionalStep(this, waitForHerbs, spade, dibber, rake, seed, magicSec, farmersOutfit, gracefulOutfit);
+ steps.addStep(faladorReady, faladorPatch);
+ steps.addStep(faladorEmpty, faladorPlant);
+
+ steps.addStep(ardougneReady, ardougnePatch);
+ steps.addStep(ardougneEmpty, ardougnePlant);
+
+ steps.addStep(catherbyReady, catherbyPatch);
+ steps.addStep(catherbyEmpty, catherbyPlant);
+
+ steps.addStep(morytaniaReady, morytaniaPatch);
+ steps.addStep(morytaniaEmpty, morytaniaPlant);
+
+ steps.addStep(hosidiusReady, hosidiusPatch);
+ steps.addStep(hosidiusEmpty, hosidiusPlant);
+
+ steps.addStep(new Conditions(accessToTrollStronghold, trollStrongholdReady), trollStrongholdPatch);
+ steps.addStep(new Conditions(accessToTrollStronghold, trollStrongholdEmpty), trollStrongholdPlant);
+
+ steps.addStep(new Conditions(accessToWeiss, weissReady), weissPatch);
+ steps.addStep(new Conditions(accessToWeiss, weissEmpty), weissPlant);
+
+ steps.addStep(new Conditions(accessToFarmingGuildPatch, farmingGuildReady), farmingGuildPatch);
+ steps.addStep(new Conditions(accessToFarmingGuildPatch, farmingGuildEmpty), farmingGuildPlant);
+
+ steps.addStep(new Conditions(accessToHarmony, harmonyReady), harmonyPatch);
+ steps.addStep(new Conditions(accessToHarmony, harmonyEmpty), harmonyPlant);
+
+ steps.addStep(new Conditions(accessToVarlamore, varlamoreReady), varlamorePatch);
+ steps.addStep(new Conditions(accessToVarlamore, varlamoreEmpty), varlamorePlant);
+
+ return steps;
+ }
+
@Subscribe
public void onConfigChanged(ConfigChanged event)
{
@@ -379,8 +457,7 @@ public void onConfigChanged(ConfigChanged event)
seed.setId(selectedSeed.seedID);
seed.setName(Text.titleCase(selectedSeed) + " seed");
questHelperPlugin.refreshBank();
- }
- catch (IllegalArgumentException err)
+ } catch (IllegalArgumentException err)
{
questHelperPlugin.getConfigManager().setConfiguration(QuestHelperConfig.QUEST_BACKGROUND_GROUP, HERB_SEEDS, Seed.GUAM);
}
@@ -423,7 +500,7 @@ public void onGameTick(GameTick event)
case "Farming Guild":
farmingGuildReady.setShouldPass(isHarvestable);
farmingGuildEmpty.setShouldPass(isPlantable);
- if(!accessToFarmingGuildPatch.check(client))
+ if (!accessToFarmingGuildPatch.check(client))
{
seedsNeeded--;
}
@@ -447,7 +524,7 @@ public void onGameTick(GameTick event)
case "Troll Stronghold":
trollStrongholdReady.setShouldPass(isHarvestable);
trollStrongholdEmpty.setShouldPass(isPlantable);
- if(!accessToTrollStronghold.check(client))
+ if (!accessToTrollStronghold.check(client))
{
seedsNeeded--;
}
@@ -455,7 +532,7 @@ public void onGameTick(GameTick event)
case "Weiss":
weissReady.setShouldPass(isHarvestable);
weissEmpty.setShouldPass(isPlantable);
- if(!accessToWeiss.check(client))
+ if (!accessToWeiss.check(client))
{
seedsNeeded--;
}
@@ -463,7 +540,7 @@ public void onGameTick(GameTick event)
case "Civitas illa Fortis":
varlamoreReady.setShouldPass(isHarvestable);
varlamoreEmpty.setShouldPass(isPlantable);
- if(!accessToVarlamore.check(client))
+ if (!accessToVarlamore.check(client))
{
seedsNeeded--;
}
@@ -483,7 +560,8 @@ public List getItemRequirements()
@Override
public List getItemRecommended()
{
- return Arrays.asList(compost, ectophial, magicSec, explorerRing2, ardyCloak2, xericsTalisman, hosidiusHouseTeleport, catherbyTeleport, trollheimTeleport, icyBasalt, stonyBasalt, farmingGuildTeleport, hunterWhistle, gracefulOutfit, farmersOutfit);
+ return Arrays.asList(compost, ectophial, magicSec, explorerRing2, ardyCloak2, xericsTalisman, hosidiusHouseTeleport, catherbyTeleport,
+ trollheimTeleport, icyBasalt, stonyBasalt, farmingGuildTeleport, hunterWhistle, harmonyTeleport, gracefulOutfit, farmersOutfit);
}
@Override
@@ -494,14 +572,24 @@ public List getConfigs()
return Arrays.asList(seedsConfig, outfitConfig);
}
+ private void prepopulateSidebarPanels()
+ {
+ allSteps = new ArrayList<>();
+ allSteps.add(new PanelDetails("Farming Guild", Collections.singletonList(farmingGuildPatch)).withId(0));
+ allSteps.add(new PanelDetails("Falador", Collections.singletonList(faladorPatch)).withId(1));
+ allSteps.add(new PanelDetails("Ardougne", Collections.singletonList(ardougnePatch)).withId(2));
+ allSteps.add(new PanelDetails("Catherby", Collections.singletonList(catherbyPatch)).withId(3));
+ allSteps.add(new PanelDetails("Morytania", Collections.singletonList(morytaniaPatch)).withId(4));
+ allSteps.add(new PanelDetails("Hosidius", Collections.singletonList(hosidiusPatch)).withId(5));
+ allSteps.add(new PanelDetails("Varlamore", Collections.singletonList(varlamorePatch)).withId(6));
+ allSteps.add(new PanelDetails("Troll Stronghold", Collections.singletonList(trollStrongholdPatch)).withId(7));
+ allSteps.add(new PanelDetails("Weiss", Collections.singletonList(weissPatch)).withId(8));
+ allSteps.add(new PanelDetails("Harmony Island", Collections.singletonList(harmonyPatch)).withId(9).withHideCondition(nor(accessToHarmony)));
+ }
+
@Override
public List getPanels()
{
- List allSteps = new ArrayList<>();
- allSteps.add(new PanelDetails("Farm run", Arrays.asList(faladorPatch, ardougnePatch, catherbyPatch, morytaniaPatch, hosidiusPatch,
- trollStrongholdPatch, weissPatch, farmingGuildPatch, harmonyPatch, varlamorePatch), Arrays.asList(spade, dibber, rake, seed, magicSec),
- Arrays.asList(compost, ectophial, explorerRing2, ardyCloak2, xericsTalisman, catherbyTeleport, trollheimTeleport, icyBasalt, stonyBasalt, farmingGuildTeleport, hunterWhistle, gracefulOutfit, farmersOutfit)));
-
return allSteps;
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/PatchImplementation.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/PatchImplementation.java
index 7adf89fc00b..c880df851a7 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/PatchImplementation.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/PatchImplementation.java
@@ -2278,7 +2278,7 @@ PatchState forVarbitValue(int value)
if (value == 20)
{
// Spirit Tree[Travel,Talk-to,Inspect,Guide,Clear] 8355
- return new PatchState(Produce.SPIRIT_TREE, CropState.HARVESTABLE, 12);
+ return new PatchState(Produce.SPIRIT_TREE, CropState.GROWING, 12);
}
if (value >= 21 && value <= 31)
{
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/TreeRun.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/TreeRun.java
index f8e4b6adb29..6c78b35125e 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/TreeRun.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/farmruns/TreeRun.java
@@ -89,16 +89,17 @@ public class TreeRun extends ComplexStateQuestHelper
// Trees
DetailedQuestStep farmingGuildTreePatchCheckHealth, lumbridgeTreePatchCheckHealth, faladorTreePatchCheckHealth, taverleyTreePatchCheckHealth, varrockTreePatchCheckHealth,
- gnomeStrongholdTreePatchCheckHealth;
+ gnomeStrongholdTreePatchCheckHealth, nemusRetreatTreePatchCheckHealth;
DetailedQuestStep farmingGuildTreePatchPlant, lumbridgeTreePatchPlant, faladorTreePatchPlant, taverleyTreePatchPlant,
- varrockTreePatchPlant, gnomeStrongholdTreePatchPlant;
+ varrockTreePatchPlant, gnomeStrongholdTreePatchPlant, nemusRetreatTreePatchPlant;
DetailedQuestStep lumbridgeTreePatchClear, faladorTreePatchClear, taverleyTreePatchClear, varrockTreePatchClear,
- gnomeStrongholdTreePatchClear, farmingGuildTreePatchClear;
+ gnomeStrongholdTreePatchClear, farmingGuildTreePatchClear, nemusRetreatTreePatchClear;
DetailedQuestStep lumbridgeTreePatchDig, faladorTreePatchDig, taverleyTreePatchDig, varrockTreePatchDig,
- gnomeStrongholdTreePatchDig, farmingGuildTreePatchDig;
+ gnomeStrongholdTreePatchDig, farmingGuildTreePatchDig, nemusRetreatTreePatchDig;
- DetailedQuestStep farmingGuildTreePayForProtection, lumbridgeTreeProtect, faladorTreeProtect, taverleyTreeProtect, varrockTreeProtect, strongholdTreeProtect;
+ DetailedQuestStep farmingGuildTreePayForProtection, lumbridgeTreeProtect, faladorTreeProtect, taverleyTreeProtect,
+ varrockTreeProtect, strongholdTreeProtect, nemusRetreatTreeProtect;
// Fruit Trees
DetailedQuestStep farmingGuildFruitTreePatchCheckHealth, gnomeStrongholdFruitTreePatchCheckHealth, gnomeVillageFruitTreePatchCheckHealth,
@@ -129,7 +130,7 @@ public class TreeRun extends ComplexStateQuestHelper
// Teleport Items
// TODO: Add these...
- ItemRequirement farmingGuildTeleport, crystalTeleport, catherbyTeleport, varrockTeleport, lumbridgeTeleport, faladorTeleport, fossilIslandTeleport;
+ ItemRequirement farmingGuildTeleport, crystalTeleport, catherbyTeleport, varrockTeleport, lumbridgeTeleport, faladorTeleport, fossilIslandTeleport, nemusRetreatTeleport;
// Graceful Set
ItemRequirement gracefulHood, gracefulTop, gracefulLegs, gracefulGloves, gracefulBoots, gracefulCape, gracefulOutfit;
@@ -138,18 +139,18 @@ public class TreeRun extends ComplexStateQuestHelper
ItemRequirement farmingHat, farmingTop, farmingLegs, farmingBoots, farmersOutfit;
// Access Requirements
- Requirement accessToFarmingGuildTreePatch, accessToFarmingGuildFruitTreePatch, accessToLletya, accessToFossilIsland, accessToSavannah;
+ Requirement accessToFarmingGuildTreePatch, accessToFarmingGuildFruitTreePatch, accessToLletya, accessToFossilIsland, accessToSavannah, accessToVarlamore;
Requirement payingForRemoval, payingForProtection, usingCompostorNothing;
- PatchStates faladorStates, lumbridgeStates, farmingGuildTreeStates, taverleyStates, varrockStates, gnomeStrongholdTreeStates;
+ PatchStates faladorStates, lumbridgeStates, farmingGuildTreeStates, taverleyStates, varrockStates, gnomeStrongholdTreeStates, nemusRetreatStates;
PatchStates gnomeStrongholdFruitStates, gnomeVillageStates, brimhavenStates, catherbyStates, lletyaStates, farmingGuildFruitStates;
PatchStates eastHardwoodStates, middleHardwoodStates, westHardwoodStates, savannahStates;
ConditionalStep farmingGuildStep, lumbridgeStep, varrockStep, faladorStep, taverleyStep, strongholdStep, villageStep, lletyaStep,
- catherbyStep, brimhavenStep, fossilIslandStep, savannahStep;
+ catherbyStep, brimhavenStep, fossilIslandStep, savannahStep, nemusRetreatStep;
private final String PAY_OR_CUT = "payOrCutTree";
private final String PAY_OR_COMPOST = "payOrCompostTree";
@@ -305,6 +306,15 @@ public QuestStep loadStep()
steps.addStep(and(accessToSavannah, nor(savannahStates.getIsGrowing())), savannahStep.withId(11));
+ nemusRetreatStep = new ConditionalStep(this, nemusRetreatTreePatchCheckHealth);
+ nemusRetreatStep.addStep(nemusRetreatStates.getIsUnchecked(), nemusRetreatTreePatchCheckHealth);
+ nemusRetreatStep.addStep(nemusRetreatStates.getIsEmpty(), nemusRetreatTreePatchPlant);
+ nemusRetreatStep.addStep(nemusRetreatStates.getIsHarvestable(), nemusRetreatTreePatchClear);
+ nemusRetreatStep.addStep(nemusRetreatStates.getIsStump(), nemusRetreatTreePatchDig);
+ nemusRetreatStep.addStep(nor(usingCompostorNothing, nemusRetreatStates.getIsProtected()), nemusRetreatTreeProtect);
+
+ steps.addStep(and(accessToVarlamore, nor(nemusRetreatStates.getIsGrowing())), nemusRetreatStep.withId(12));
+
return steps;
}
@@ -323,6 +333,7 @@ private void setupConditions()
new SkillRequirement(Skill.FARMING, 85)
);
accessToSavannah = new QuestRequirement(QuestHelperQuest.THE_RIBBITING_TALE_OF_A_LILY_PAD_LABOUR_DISPUTE, QuestState.FINISHED);
+ accessToVarlamore = new QuestRequirement(QuestHelperQuest.CHILDREN_OF_THE_SUN, QuestState.FINISHED);
// Trees
lumbridgeStates = new PatchStates("Lumbridge");
@@ -331,6 +342,7 @@ private void setupConditions()
varrockStates = new PatchStates("Varrock");
gnomeStrongholdTreeStates = new PatchStates("Gnome Stronghold");
farmingGuildTreeStates = new PatchStates("Farming Guild", accessToFarmingGuildTreePatch);
+ nemusRetreatStates = new PatchStates("Nemus Retreat", accessToVarlamore);
// Fruit trees
catherbyStates = new PatchStates("Catherby");
@@ -403,7 +415,8 @@ public void setupRequirements()
faladorTeleport = new ItemRequirement("Falador teleport", ItemCollections.RING_OF_WEALTHS);
faladorTeleport.addAlternates(ItemID.POH_TABLET_FALADORTELEPORT);
fossilIslandTeleport = new ItemRequirement("Teleport to Fossil Island", ItemCollections.DIGSITE_PENDANTS);
-
+ nemusRetreatTeleport = new ItemRequirement("Nemus Retreat Teleport", ItemID.PENDANT_OF_ATES);
+ nemusRetreatTeleport.addAlternates(ItemCollections.FAIRY_STAFF);
// Graceful and Farming Outfit
gracefulHood = new ItemRequirement(
@@ -483,6 +496,10 @@ private void setupSteps()
"Speak to Rosie to clear the patch.");
farmingGuildTreePatchClear.addDialogSteps("Would you chop my tree down for me?","I can't be bothered - I'd rather pay you to do it.", "Here's 200 Coins - chop my tree down please.", "Yes.");
+ nemusRetreatTreePatchClear = new NpcStep(this, NpcID.FARMING_GARDENER_TREE_7, new WorldPoint(1367, 3322, 0),
+ "Speak to Aub to clear the patch.");
+ nemusRetreatTreePatchClear.addDialogSteps("Would you chop my tree down for me?","I can't be bothered - I'd rather pay you to do it.", "Here's 200 Coins - chop my tree down please.", "Yes.");
+
lumbridgeTreeProtect = new NpcStep(this, NpcID.FARMING_GARDENER_TREE_4, new WorldPoint(3193, 3231, 0),
"Speak to Fayeth to protect the patch.");
lumbridgeTreeProtect.addDialogSteps("Would you chop my tree down for me?","I can't be bothered - I'd rather pay you to do it.", "Here's 200 Coins - chop my tree down please.", "Yes.");
@@ -507,6 +524,10 @@ private void setupSteps()
"Speak to Rosie to protect the patch.");
farmingGuildTreePayForProtection.addDialogSteps("Would you chop my tree down for me?","I can't be bothered - I'd rather pay you to do it.", "Here's 200 Coins - chop my tree down please.", "Yes.");
+ nemusRetreatTreeProtect = new NpcStep(this, NpcID.FARMING_GARDENER_TREE_7, new WorldPoint(1367, 3322, 0),
+ "Speak to Aub to protect the patch.");
+ nemusRetreatTreeProtect.addDialogSteps("Would you chop my tree down for me?","I can't be bothered - I'd rather pay you to do it.", "Here's 200 Coins - chop my tree down please.", "Yes.");
+
// Tree Patch Steps
lumbridgeTreePatchCheckHealth = new ObjectStep(this, ObjectID.FARMING_TREE_PATCH_4, new WorldPoint(3193, 3231, 0),
"Check the health of the tree planted in Lumbridge.");
@@ -530,6 +551,11 @@ private void setupSteps()
farmingGuildTreePatchCheckHealth.conditionToHideInSidebar(new Conditions(LogicType.NOR, accessToFarmingGuildTreePatch));
farmingGuildTreePatchCheckHealth.addTeleport(farmingGuildTeleport);
+ nemusRetreatTreePatchCheckHealth = new ObjectStep(this, ObjectID.FARMING_TREE_PATCH_7, new WorldPoint(1367, 3322, 0),
+ "Check the health of the tree planted at the Nemus Retreat");
+ nemusRetreatTreePatchCheckHealth.conditionToHideInSidebar(new Conditions(LogicType.NOR, accessToVarlamore));
+ nemusRetreatTreePatchCheckHealth.addTeleport(nemusRetreatTeleport);
+
// Tree Plant Steps
lumbridgeTreePatchPlant = new ObjectStep(this, ObjectID.FARMING_TREE_PATCH_4, new WorldPoint(3193, 3231, 0),
"Plant your sapling in the Lumbridge patch.", treeSapling);
@@ -562,6 +588,12 @@ private void setupSteps()
farmingGuildTreePatchPlant.addIcon(treeSapling.getId());
farmingGuildTreePatchCheckHealth.addSubSteps(farmingGuildTreePatchPlant);
+ nemusRetreatTreePatchPlant = new ObjectStep(this, ObjectID.FARMING_TREE_PATCH_7, new WorldPoint(1367, 3322, 0),
+ "Plant your sapling in the Nemus Retreat tree patch.", treeSapling);
+ nemusRetreatTreePatchPlant.conditionToHideInSidebar(new Conditions(LogicType.NOR, accessToVarlamore));
+ nemusRetreatTreePatchPlant.addIcon(treeSapling.getId());
+ nemusRetreatTreePatchCheckHealth.addSubSteps(nemusRetreatTreePatchPlant);
+
// Dig
lumbridgeTreePatchDig = new ObjectStep(this, ObjectID.FARMING_TREE_PATCH_4, new WorldPoint(3193, 3231, 0),
"Dig up the tree stump in Lumbridge.");
@@ -575,13 +607,16 @@ private void setupSteps()
"Dig up the tree stump in the Tree Gnome Stronghold.");
farmingGuildTreePatchDig = new ObjectStep(this, ObjectID.FARMING_TREE_PATCH_6, new WorldPoint(1232, 3736, 0),
"Dig up the tree stump in the Farming Guild tree patch.");
+ nemusRetreatTreePatchDig = new ObjectStep(this, ObjectID.FARMING_TREE_PATCH_7, new WorldPoint(1367, 3322, 0),
+ "Dig up the tree stump in the Nemus Retreat tree patch.");
faladorTreePatchClear.addSubSteps(faladorTreePatchDig, faladorTreeProtect);
taverleyTreePatchClear.addSubSteps(taverleyTreePatchDig, taverleyTreeProtect);
varrockTreePatchClear.addSubSteps(varrockTreePatchDig, varrockTreeProtect);
gnomeStrongholdTreePatchClear.addSubSteps(gnomeStrongholdTreePatchDig, strongholdTreeProtect);
lumbridgeTreePatchClear.addSubSteps(lumbridgeTreePatchDig, lumbridgeTreeProtect);
- farmingGuildTreePatchClear.addSubSteps(farmingGuildTreePatchDig, farmingGuildTreePatchDig);
+ farmingGuildTreePatchClear.addSubSteps(farmingGuildTreePatchDig, farmingGuildTreePayForProtection);
+ nemusRetreatTreePatchClear.addSubSteps(nemusRetreatTreePatchDig, nemusRetreatTreeProtect);
// Fruit Tree Steps
gnomeStrongholdFruitTreePatchCheckHealth = new ObjectStep(this, ObjectID.FARMING_FRUIT_TREE_PATCH_1, new WorldPoint(2476, 3446, 0),
@@ -786,7 +821,7 @@ public void onGameTick(GameTick event)
allProtectionItemFruitTree.setQuantity(protectionItemFruitTree.getQuantity());
allProtectionItemHardwood.setQuantity(protectionItemHardwood.getQuantity());
handleTreePatches(PatchImplementation.TREE,
- List.of(farmingGuildTreeStates, varrockStates, faladorStates, taverleyStates, lumbridgeStates, gnomeStrongholdTreeStates),
+ List.of(farmingGuildTreeStates, varrockStates, faladorStates, taverleyStates, lumbridgeStates, gnomeStrongholdTreeStates, nemusRetreatStates),
farmingWorld.getTabs().get(Tab.TREE), allTreeSaplings, allProtectionItemTree);
handleTreePatches(PatchImplementation.FRUIT_TREE,
List.of(farmingGuildFruitStates, brimhavenStates, catherbyStates, gnomeStrongholdFruitStates, gnomeVillageStates, lletyaStates),
@@ -949,6 +984,11 @@ public List getPanels()
PanelDetails savannahPanel = new PanelDetails("Avium Savannah", Arrays.asList(savannahCheckHealth, savannahClear, savannahPlant)).withId(11);
savannahPanel.setLockingStep(savannahStep);
allSteps.add(savannahPanel);
+
+ PanelDetails nemusRetreatPanel = new PanelDetails("Nemus Retreat", Arrays.asList(nemusRetreatTreePatchCheckHealth, nemusRetreatTreePatchClear, nemusRetreatTreePatchPlant)).withId(12);
+ nemusRetreatPanel.setLockingStep(nemusRetreatStep);
+ allSteps.add(nemusRetreatPanel);
+
return allSteps;
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/knightswaves/KnightWaves.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/knightswaves/KnightWaves.java
index 63eb3625ab9..6ab3754e78b 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/knightswaves/KnightWaves.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/knightswaves/KnightWaves.java
@@ -43,11 +43,12 @@
import net.runelite.client.plugins.microbot.questhelper.steps.QuestStep;
import net.runelite.api.QuestState;
import net.runelite.api.Skill;
-import net.runelite.api.SpriteID;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.SpriteID;
+import net.runelite.api.gameval.VarbitID;
import java.util.*;
@@ -103,7 +104,7 @@ protected void setupRequirements()
food = new ItemRequirement("Food", ItemCollections.GOOD_EATING_FOOD, 25);
potions = new ItemRequirement("Attack and strength potions for boost", -1, -1);
- talkedToSquire = new VarbitRequirement(3908, 1);
+ talkedToSquire = new VarbitRequirement(VarbitID.KR_WAVE_INSTR, 1);
}
public void setupSteps()
@@ -135,7 +136,7 @@ public void setupSteps()
NpcID.KR_CAM_KAY, NpcID.KR_CAM_KAY_JAIL, NpcID.KR_KNIGHT7,
NpcID.KR_CAM_LANCELOT, NpcID.KR_KNIGHT8);
((NpcStep) killKnights).addSafeSpots(new WorldPoint(2752, 3511, 2));
- ((NpcStep) killKnights).addTileMarker(new WorldPoint(2753, 3510, 2), SpriteID.MAP_ICON_HELMET_SHOP);
+ ((NpcStep) killKnights).addTileMarker(new WorldPoint(2753, 3510, 2), SpriteID.Mapfunction.HELMET_SHOP);
killKnightsSteps = new ConditionalStep(this, goToFloor1, "Defeat the 8 Knights of the Round Table in the room" +
" on top of Camelot. It's recommended to flinch the knights on one of the dummies around the room, and " +
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/strongholdofsecurity/StrongholdOfSecurity.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/strongholdofsecurity/StrongholdOfSecurity.java
index 11318f981a1..c32c524cda8 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/strongholdofsecurity/StrongholdOfSecurity.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/mischelpers/strongholdofsecurity/StrongholdOfSecurity.java
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2023, Okke234
+ * Copyright (c) 2025, pajlada
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -28,39 +29,33 @@
import net.runelite.client.plugins.microbot.questhelper.panel.PanelDetails;
import net.runelite.client.plugins.microbot.questhelper.questhelpers.BasicQuestHelper;
import net.runelite.client.plugins.microbot.questhelper.requirements.Requirement;
-import net.runelite.client.plugins.microbot.questhelper.requirements.conditional.Conditions;
import net.runelite.client.plugins.microbot.questhelper.requirements.item.ItemRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.player.CombatLevelRequirement;
-import net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicType;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.and;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.or;
import net.runelite.client.plugins.microbot.questhelper.requirements.var.VarbitRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.zone.Zone;
import net.runelite.client.plugins.microbot.questhelper.requirements.zone.ZoneRequirement;
import net.runelite.client.plugins.microbot.questhelper.rewards.ItemReward;
import net.runelite.client.plugins.microbot.questhelper.rewards.UnlockReward;
-import net.runelite.client.plugins.microbot.questhelper.steps.*;
+import net.runelite.client.plugins.microbot.questhelper.steps.ConditionalStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.DetailedQuestStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.NpcStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.ObjectStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.QuestStep;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
-
-import java.util.*;
+import net.runelite.api.gameval.VarbitID;
public class StrongholdOfSecurity extends BasicQuestHelper
{
- Requirement canSkipWar, canSkipFamine, canSkipPestilence,
- notUsedCountCheck, nearCountCheck, inFloorWar, inFloorFamine, inFloorPestilence, inFloorDeath,
- inStartRoomWar, inStartRoomFamine, inStartRoomPestilence,
- notFlap, notSlap, notIdea, notStamp, hasFlap, hasSlap, hasIdea, hasStamp;
-
- ItemRequirement food;
- Zone countCheck, floorWar, floorFamine, floorPestilence, floorDeath, startRoomWar, startRoomFamine, startRoomPestilence;
-
- QuestStep talkToCountCheck, enterStronghold, usePortalWar, usePortalFamine, usePortalPestilence;
-
- DetailedQuestStep openChestWar, openChestFamine, openChestPestilence, openChestDeath,
- enterFloorFamine, enterFloorPestilence, enterFloorDeath;
-
- String[] answers = {
+ static final String[] CORRECT_ANSWERS = {
"No.",
"Me.",
"Nobody.",
@@ -82,67 +77,95 @@ public class StrongholdOfSecurity extends BasicQuestHelper
"Don't share your information and report the player.",
"Set up two-factor authentication with my email provider.",
"No, you should never allow anyone to level your account.",
+ "No, you should never allow anyone to use your account.",
"Authenticator and two-step login on my registered email.",
"No way! You'll just take my gold for your own! Reported!",
"Don't type in my password backwards and report the player.",
"Don't give them the information and send an 'Abuse report'.",
"Don't tell them anything and click the 'Report Abuse' button.",
"Politely tell them no and then use the 'Report Abuse' button.",
+ "Politely tell them no, then use the 'Report Abuse' button.",
"Don't give out your password to anyone. Not even close friends.",
"Do not visit the website and report the player who messaged you.",
"Report the stream as a scam. Real Jagex streams have a 'verified' mark.",
- "Two-factor authentication on yuor account and your registered email.",
- "Nope, you're tricking me into going somewhere dangerous."
+ "Two-factor authentication on your account and your registered email.",
+ "Nope, you're tricking me into going somewhere dangerous.",
+ "It's never used on other websites or accounts.",
};
- int[] cbLevels = {26, 51, 76};
+ static final int CB_LEVEL_SKIP_WAR = 26;
+ static final int CB_LEVEL_SKIP_FAMINE = 51;
+ static final int CB_LEVEL_SKIP_PESTILENCE = 76;
- @Override
- public Map loadSteps()
- {
- initializeRequirements();
- setupConditions();
- setupSteps();
- Map steps = new HashMap<>();
-
- ConditionalStep goEnterStronghold = new ConditionalStep(this, enterStronghold);
- goEnterStronghold.addStep(new Conditions(nearCountCheck, notUsedCountCheck), talkToCountCheck);
- goEnterStronghold.addStep(new Conditions(new Conditions(LogicType.OR, canSkipWar, hasFlap),
- inFloorWar, inStartRoomWar), usePortalWar);
- goEnterStronghold.addStep(new Conditions(notFlap, inFloorWar), openChestWar);
- goEnterStronghold.addStep(new Conditions(notStamp, inFloorWar), enterFloorFamine);
-
- goEnterStronghold.addStep(new Conditions(new Conditions(LogicType.OR, canSkipFamine, hasSlap),
- inFloorFamine, inStartRoomFamine), usePortalFamine);
- goEnterStronghold.addStep(new Conditions(notSlap, inFloorFamine), openChestFamine);
- goEnterStronghold.addStep(new Conditions(notStamp, inFloorFamine), enterFloorPestilence);
-
- goEnterStronghold.addStep(new Conditions(new Conditions(LogicType.OR, canSkipPestilence, hasIdea),
- inFloorPestilence, inStartRoomPestilence), usePortalPestilence);
- goEnterStronghold.addStep(new Conditions(notIdea, inFloorPestilence), openChestPestilence);
- goEnterStronghold.addStep(new Conditions(notStamp, inFloorPestilence), enterFloorDeath);
-
- goEnterStronghold.addStep(new Conditions(notStamp, inFloorDeath), openChestDeath);
+ // Recommended items
+ ItemRequirement food;
- //TODO: Highlight warning confirmation when climbing down ladder
- //TODO: Auto start when entering or when teleporting with Count Check?
+ // Miscellaneous requirements
+ Requirement canSkipWar;
+ Requirement canSkipFamine;
+ Requirement canSkipPestilence;
+ Requirement notUsedCountCheck;
+ Requirement nearCountCheck;
+ Requirement inFloorWar;
+ Requirement inFloorFamine;
+ Requirement inFloorPestilence;
+ Requirement inFloorDeath;
+ Requirement inStartRoomWar;
+ Requirement inStartRoomFamine;
+ Requirement inStartRoomPestilence;
+ Requirement notFlap;
+ Requirement notSlap;
+ Requirement notIdea;
+ Requirement notStamp;
+ Requirement hasFlap;
+ Requirement hasSlap;
+ Requirement hasIdea;
+ Requirement hasStamp;
+
+ // Zones
+ Zone countCheck;
+ Zone floorWar;
+ Zone floorFamine;
+ Zone floorPestilence;
+ Zone floorDeath;
+ Zone startRoomWar;
+ Zone startRoomFamine;
+ Zone startRoomPestilence;
+
+ // Steps
+ QuestStep talkToCountCheck;
+ QuestStep enterStronghold;
+ QuestStep usePortalWar;
+ QuestStep usePortalFamine;
+ QuestStep usePortalPestilence;
+ DetailedQuestStep openChestWar;
+ DetailedQuestStep openChestFamine;
+ DetailedQuestStep openChestPestilence;
+ DetailedQuestStep openChestDeath;
+ DetailedQuestStep enterFloorFamine;
+ DetailedQuestStep enterFloorPestilence;
+ DetailedQuestStep enterFloorDeath;
- steps.put(0, goEnterStronghold);
+ @Override
+ protected void setupZones()
+ {
+ countCheck = new Zone(new WorldPoint(3120, 3275, 0), new WorldPoint(3267, 3135, 0));
+ floorWar = new Zone(new WorldPoint(1855, 5248, 0), new WorldPoint(1920, 5184, 0));
+ floorFamine = new Zone(new WorldPoint(1983, 5248, 0), new WorldPoint(2048, 5184, 0));
+ floorPestilence = new Zone(new WorldPoint(2111, 5310, 0), new WorldPoint(2176, 5248, 0));
+ floorDeath = new Zone(new WorldPoint(2304, 5248, 0), new WorldPoint(2367, 5184, 0));
+ startRoomWar = new Zone(new WorldPoint(1855, 5246, 0), new WorldPoint(1866, 5239, 0));
+ startRoomFamine = new Zone(new WorldPoint(2040, 5245, 0), new WorldPoint(2046, 5240, 0));
+ startRoomPestilence = new Zone(new WorldPoint(2117, 5258, 0), new WorldPoint(2133, 5251, 0));
- return steps;
}
@Override
protected void setupRequirements()
{
- food = new ItemRequirement("Food", ItemCollections.GOOD_EATING_FOOD, -1);
- }
-
- public void setupConditions()
- {
- canSkipWar = new CombatLevelRequirement(cbLevels[0]);
- canSkipFamine = new CombatLevelRequirement(cbLevels[1]);
- canSkipPestilence = new CombatLevelRequirement(cbLevels[2]);
+ canSkipWar = new CombatLevelRequirement(CB_LEVEL_SKIP_WAR);
+ canSkipFamine = new CombatLevelRequirement(CB_LEVEL_SKIP_FAMINE);
+ canSkipPestilence = new CombatLevelRequirement(CB_LEVEL_SKIP_PESTILENCE);
nearCountCheck = new ZoneRequirement(countCheck);
inFloorWar = new ZoneRequirement(floorWar);
@@ -153,34 +176,22 @@ public void setupConditions()
inStartRoomFamine = new ZoneRequirement(startRoomFamine);
inStartRoomPestilence = new ZoneRequirement(startRoomPestilence);
- notUsedCountCheck = new VarbitRequirement(5371, 0);
- notFlap = new VarbitRequirement(2309, 0);
- notSlap = new VarbitRequirement(2310, 0);
- notIdea = new VarbitRequirement(2311, 0);
- notStamp = new VarbitRequirement(2312, 0);
- hasFlap = new VarbitRequirement(2309, 1);
- hasSlap = new VarbitRequirement(2310, 1);
- hasIdea = new VarbitRequirement(2311, 1);
- hasStamp = new VarbitRequirement(2312, 1);
- }
-
- @Override
- protected void setupZones()
- {
- countCheck = new Zone(new WorldPoint(3120, 3275, 0), new WorldPoint(3267, 3135, 0));
- floorWar = new Zone(new WorldPoint(1855, 5248, 0), new WorldPoint(1920, 5184, 0));
- floorFamine = new Zone(new WorldPoint(1983, 5248, 0), new WorldPoint(2048, 5184, 0));
- floorPestilence = new Zone(new WorldPoint(2111, 5310, 0), new WorldPoint(2176, 5248, 0));
- floorDeath = new Zone(new WorldPoint(2304, 5248, 0), new WorldPoint(2367, 5184, 0));
- startRoomWar = new Zone(new WorldPoint(1855, 5246, 0), new WorldPoint(1866, 5239, 0));
- startRoomFamine = new Zone(new WorldPoint(2040, 5245, 0), new WorldPoint(2046, 5240, 0));
- startRoomPestilence = new Zone(new WorldPoint(2117, 5258, 0), new WorldPoint(2133, 5251, 0));
+ notUsedCountCheck = new VarbitRequirement(VarbitID.SOS_TELEPORTED_BY_COUNT, 0);
+ notFlap = new VarbitRequirement(VarbitID.SOS_EMOTE_FLAP, 0);
+ notSlap = new VarbitRequirement(VarbitID.SOS_EMOTE_DOH, 0);
+ notIdea = new VarbitRequirement(VarbitID.SOS_EMOTE_IDEA, 0);
+ notStamp = new VarbitRequirement(VarbitID.SOS_EMOTE_STAMP, 0);
+ hasFlap = new VarbitRequirement(VarbitID.SOS_EMOTE_FLAP, 1);
+ hasSlap = new VarbitRequirement(VarbitID.SOS_EMOTE_DOH, 1);
+ hasIdea = new VarbitRequirement(VarbitID.SOS_EMOTE_IDEA, 1);
+ hasStamp = new VarbitRequirement(VarbitID.SOS_EMOTE_STAMP, 1);
+ food = new ItemRequirement("Food", ItemCollections.GOOD_EATING_FOOD, -1);
}
public void setupSteps()
{
- List pathFromStartToChest1 = Arrays.asList(
+ var pathFromStartToChest1 = List.of(
new WorldPoint(1859, 5243, 0),
new WorldPoint(1859, 5232, 0),
new WorldPoint(1864, 5227, 0),
@@ -194,7 +205,7 @@ public void setupSteps()
new WorldPoint(1905, 5228, 0)
);
- List pathFromStartToChest2 = Arrays.asList(
+ var pathFromStartToChest2 = List.of(
new WorldPoint(2042, 5245, 0),
new WorldPoint(2034, 5244, 0),
new WorldPoint(2033, 5239, 0),
@@ -215,7 +226,7 @@ public void setupSteps()
new WorldPoint(2020, 5227, 0)
);
- List pathFromStartToChest3 = Arrays.asList(
+ var pathFromStartToChest3 = List.of(
new WorldPoint(2123, 5252, 0),
new WorldPoint(2132, 5256, 0),
new WorldPoint(2132, 5261, 0),
@@ -229,7 +240,7 @@ public void setupSteps()
new WorldPoint(2147, 5291, 0)
);
- List pathFromStartToChest4 = Arrays.asList(
+ var pathFromStartToChest4 = List.of(
new WorldPoint(2358, 5215, 0),
new WorldPoint(2356, 5216, 0),
new WorldPoint(2355, 5224, 0),
@@ -251,22 +262,22 @@ public void setupSteps()
talkToCountCheck.addDialogStep("Yes");
enterStronghold = new ObjectStep(this, ObjectID.SOS_DUNG_ENT_OPEN, new WorldPoint(3081, 3420, 0),
- "Climb down the entrance to the Stronghold of Security.");
+ "Climb down the entrance to the Stronghold of Security in Barbarian Village, west of Varrock.");
enterFloorFamine = new ObjectStep(this, ObjectID.SOS_WAR_LADD_DOWN, new WorldPoint(1902, 5222, 0),
"Go to the 2nd floor of the stronghold.");
enterFloorFamine.setLinePoints(pathFromStartToChest1);
enterFloorFamine.setHideMinimapLines(true);
- enterFloorFamine.addDialogSteps(answers);
+ enterFloorFamine.addDialogSteps(CORRECT_ANSWERS);
enterFloorPestilence = new ObjectStep(this, ObjectID.SOS_FAM_LADD_DOWN, new WorldPoint(2026, 5218, 0),
"Go to the 3rd floor of the stronghold.");
enterFloorPestilence.setLinePoints(pathFromStartToChest2);
enterFloorPestilence.setHideMinimapLines(true);
- enterFloorPestilence.addDialogSteps(answers);
+ enterFloorPestilence.addDialogSteps(CORRECT_ANSWERS);
enterFloorDeath = new ObjectStep(this, ObjectID.SOS_PEST_LADD_DOWN, new WorldPoint(2148, 5284, 0),
"Go to the 4th floor of the stronghold.");
enterFloorDeath.setLinePoints(pathFromStartToChest3);
enterFloorDeath.setHideMinimapLines(true);
- enterFloorDeath.addDialogSteps(answers);
+ enterFloorDeath.addDialogSteps(CORRECT_ANSWERS);
usePortalWar = new ObjectStep(this, ObjectID.SOS_WAR_PORTAL,
new WorldPoint(1863, 5238, 0), "Enter the portal.");
@@ -279,55 +290,107 @@ public void setupSteps()
new WorldPoint(1907, 5222, 0), "Claim 2k coins and the Flap emote.");
openChestWar.setLinePoints(pathFromStartToChest1);
openChestWar.setHideMinimapLines(true);
- openChestWar.addDialogSteps(answers);
+ openChestWar.addDialogSteps(CORRECT_ANSWERS);
openChestFamine = new ObjectStep(this, ObjectID.SOS_FAM_SACK,
new WorldPoint(2021, 5216, 0), "Claim 3k coins and the Slap Head emote.");
openChestFamine.setLinePoints(pathFromStartToChest2);
openChestFamine.setHideMinimapLines(true);
- openChestFamine.addDialogSteps(answers);
+ openChestFamine.addDialogSteps(CORRECT_ANSWERS);
+ openChestFamine.addSubSteps(enterFloorFamine, usePortalWar);
openChestPestilence = new ObjectStep(this, ObjectID.SOS_PEST_CHEST,
new WorldPoint(2144, 5280, 0), "Claim 5k coins and the Idea emote.");
openChestPestilence.setLinePoints(pathFromStartToChest3);
openChestPestilence.setHideMinimapLines(true);
- openChestPestilence.addDialogSteps(answers);
+ openChestPestilence.addDialogSteps(CORRECT_ANSWERS);
+ openChestPestilence.addSubSteps(enterFloorPestilence, usePortalFamine);
openChestDeath = new ObjectStep(this, ObjectID.SOS_DEATH_PRAM,
new WorldPoint(2344, 5214, 0), "Claim Fancy boots or Fighting boots, and the Stamp emote.");
openChestDeath.setLinePoints(pathFromStartToChest4);
openChestDeath.setHideMinimapLines(true);
- openChestDeath.addDialogSteps(answers);
+ openChestDeath.addDialogSteps(CORRECT_ANSWERS);
+ openChestDeath.addSubSteps(enterFloorDeath, usePortalPestilence);
}
@Override
- public List getItemRecommended()
+ public Map loadSteps()
{
- return Collections.singletonList(food);
+ initializeRequirements();
+ setupSteps();
+
+ var steps = new HashMap();
+
+ var goEnterStronghold = new ConditionalStep(this, enterStronghold);
+ goEnterStronghold.addStep(and(nearCountCheck, notUsedCountCheck), talkToCountCheck);
+ goEnterStronghold.addStep(and(or(canSkipWar, hasFlap),
+ inFloorWar, inStartRoomWar), usePortalWar);
+ goEnterStronghold.addStep(and(notFlap, inFloorWar), openChestWar);
+ goEnterStronghold.addStep(and(notStamp, inFloorWar), enterFloorFamine);
+
+ goEnterStronghold.addStep(and(or(canSkipFamine, hasSlap),
+ inFloorFamine, inStartRoomFamine), usePortalFamine);
+ goEnterStronghold.addStep(and(notSlap, inFloorFamine), openChestFamine);
+ goEnterStronghold.addStep(and(notStamp, inFloorFamine), enterFloorPestilence);
+
+ goEnterStronghold.addStep(and(or(canSkipPestilence, hasIdea),
+ inFloorPestilence, inStartRoomPestilence), usePortalPestilence);
+ goEnterStronghold.addStep(and(notIdea, inFloorPestilence), openChestPestilence);
+ goEnterStronghold.addStep(and(notStamp, inFloorPestilence), enterFloorDeath);
+
+ goEnterStronghold.addStep(and(notStamp, inFloorDeath), openChestDeath);
+
+ //TODO: Highlight warning confirmation when climbing down ladder
+ //TODO: Auto start when entering or when teleporting with Count Check?
+
+ steps.put(0, goEnterStronghold);
+
+ return steps;
}
@Override
- public List getUnlockRewards()
+ public List getItemRecommended()
{
- return Collections.singletonList(new UnlockReward("Flap, Slap Head, Idea and Stamp emotes."));
+ return List.of(
+ food
+ );
}
public List getItemRewards()
{
- return Arrays.asList(
+ return List.of(
new ItemReward("Coins", ItemID.COINS, 10000),
- new ItemReward("Fancy or Fighting boots", ItemID.SOS_BOOTS, 1));
+ new ItemReward("Fancy or Fighting boots", ItemID.SOS_BOOTS, 1)
+ );
+ }
+
+ @Override
+ public List getUnlockRewards()
+ {
+ return List.of(
+ new UnlockReward("Flap, Slap Head, Idea and Stamp emotes.")
+ );
}
- // Maybe a little unnecessary...
@Override
public List getPanels()
{
- List allSteps = new ArrayList<>();
+ var steps = new ArrayList();
+
+ steps.add(new PanelDetails("Entering the stronghold", List.of(
+ talkToCountCheck,
+ enterStronghold
+ )));
+ steps.add(new PanelDetails("Claiming coins", List.of(
+ openChestWar,
+ openChestFamine,
+ openChestPestilence
+ )));
+ steps.add(new PanelDetails("Claiming boots", List.of(
+ openChestDeath
+ )));
- allSteps.add(new PanelDetails("Entering the stronghold", Arrays.asList(talkToCountCheck, enterStronghold)));
- allSteps.add(new PanelDetails("Claiming coins", Arrays.asList(openChestWar, openChestFamine, openChestPestilence)));
- allSteps.add(new PanelDetails("Claiming boots", Collections.singletonList(openChestDeath)));
- return allSteps;
+ return steps;
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/akingdomdivided/AKingdomDivided.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/akingdomdivided/AKingdomDivided.java
index e66a5fa4222..69c94ad223d 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/akingdomdivided/AKingdomDivided.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/akingdomdivided/AKingdomDivided.java
@@ -54,6 +54,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import java.util.*;
@@ -472,7 +473,7 @@ protected void setupRequirements()
public void setupConditions()
{
- hasTalkedToTomasLowry = new VarbitRequirement(12302, 1);
+ hasTalkedToTomasLowry = new VarbitRequirement(VarbitID.AKD_TOMAS_LIE, 1);
inArceuusLibraryHistoricalArchive = new ZoneRequirement(arceuusLibraryHistoricalArchive);
judgeOfYamaNearby = new NpcCondition(NpcID.AKD_JUDGE_OF_YAMA_COMBAT);
hasBluishKey = new ItemRequirements(bluishKey);
@@ -480,7 +481,7 @@ public void setupConditions()
inCouncillorsHouseF2 = new ZoneRequirement(councillorsHouseF2);
inCouncillorsHouseF3 = new ZoneRequirement(councillorsHouseF3);
hasReceipt = new ItemRequirements(receipt);
- hasInspectedReceipt = new VarbitRequirement(12298, 1);
+ hasInspectedReceipt = new VarbitRequirement(VarbitID.AKD_HUGHES_RECEIPT, 1);
inPanelZone = new ZoneRequirement(panelArea1, panelArea2);
assassinNearby = new NpcCondition(NpcID.AKD_SETTLEMENT_RUINS_ASSASSIN);
hasColdKey = new ItemRequirements(coldKey);
@@ -501,35 +502,35 @@ public void setupConditions()
inLookoutF2 = new ZoneRequirement(lookoutF2);
inLookoutF3 = new ZoneRequirement(lookoutF3);
inShayzienPrison = new ZoneRequirement(shayzienPrison);
- helpingPisc0 = new VarbitRequirement(12318, 0);
- helpingArceuus0 = new VarbitRequirement(12319, 0);
- helpingLova0 = new VarbitRequirement(12320, 0);
- helpingHosidius0 = new VarbitRequirement(12321, 0);
- helpingShayzien0 = new VarbitRequirement(12322, 0);
- helpingLova2 = new VarbitRequirement(12320, 2);
- helpingLova4 = new VarbitRequirement(12320, 4);
- helpingLova6 = new VarbitRequirement(12320, 6);
- helpingLova8 = new VarbitRequirement(12320, 8);
- helpingLova10 = new VarbitRequirement(12320, 10);
- helpingLova12 = new VarbitRequirement(12320, 12);
- helpingLova14 = new VarbitRequirement(12320, 14);
- helpingArceuus2 = new VarbitRequirement(12319, 2);
- helpingArceuus4 = new VarbitRequirement(12319, 4);
- helpingArceuus6 = new VarbitRequirement(12319, 6);
- helpingArceuus8 = new VarbitRequirement(12319, 8);
- helpingArceuus10 = new VarbitRequirement(12319, 10);
- helpingHosidius2 = new VarbitRequirement(12321, 2);
- helpingHosidius4 = new VarbitRequirement(12321, 4);
- helpingHosidius6 = new VarbitRequirement(12321, 6);
- helpingHosidius8 = new VarbitRequirement(12321, 8);
- helpingPisc2 = new VarbitRequirement(12318, 2);
- helpingPisc4 = new VarbitRequirement(12318, 4);
- helpingPisc6 = new VarbitRequirement(12318, 6);
- helpingPisc8 = new VarbitRequirement(12318, 8);
- helpingPisc10 = new VarbitRequirement(12318, 10);
- helpingShayzien2 = new VarbitRequirement(12322, 2);
- helpingShayzien4 = new VarbitRequirement(12322, 4);
- helpingShayzien6 = new VarbitRequirement(12322, 6);
+ helpingPisc0 = new VarbitRequirement(VarbitID.AKD_PISCARILIUS_HELPED, 0);
+ helpingArceuus0 = new VarbitRequirement(VarbitID.AKD_ARCEUUS_HELPED, 0);
+ helpingLova0 = new VarbitRequirement(VarbitID.AKD_LOVAKENGJ_HELPED, 0);
+ helpingHosidius0 = new VarbitRequirement(VarbitID.AKD_HOSIDIUS_HELPED, 0);
+ helpingShayzien0 = new VarbitRequirement(VarbitID.AKD_SHAYZIEN_HELPED, 0);
+ helpingLova2 = new VarbitRequirement(VarbitID.AKD_LOVAKENGJ_HELPED, 2);
+ helpingLova4 = new VarbitRequirement(VarbitID.AKD_LOVAKENGJ_HELPED, 4);
+ helpingLova6 = new VarbitRequirement(VarbitID.AKD_LOVAKENGJ_HELPED, 6);
+ helpingLova8 = new VarbitRequirement(VarbitID.AKD_LOVAKENGJ_HELPED, 8);
+ helpingLova10 = new VarbitRequirement(VarbitID.AKD_LOVAKENGJ_HELPED, 10);
+ helpingLova12 = new VarbitRequirement(VarbitID.AKD_LOVAKENGJ_HELPED, 12);
+ helpingLova14 = new VarbitRequirement(VarbitID.AKD_LOVAKENGJ_HELPED, 14);
+ helpingArceuus2 = new VarbitRequirement(VarbitID.AKD_ARCEUUS_HELPED, 2);
+ helpingArceuus4 = new VarbitRequirement(VarbitID.AKD_ARCEUUS_HELPED, 4);
+ helpingArceuus6 = new VarbitRequirement(VarbitID.AKD_ARCEUUS_HELPED, 6);
+ helpingArceuus8 = new VarbitRequirement(VarbitID.AKD_ARCEUUS_HELPED, 8);
+ helpingArceuus10 = new VarbitRequirement(VarbitID.AKD_ARCEUUS_HELPED, 10);
+ helpingHosidius2 = new VarbitRequirement(VarbitID.AKD_HOSIDIUS_HELPED, 2);
+ helpingHosidius4 = new VarbitRequirement(VarbitID.AKD_HOSIDIUS_HELPED, 4);
+ helpingHosidius6 = new VarbitRequirement(VarbitID.AKD_HOSIDIUS_HELPED, 6);
+ helpingHosidius8 = new VarbitRequirement(VarbitID.AKD_HOSIDIUS_HELPED, 8);
+ helpingPisc2 = new VarbitRequirement(VarbitID.AKD_PISCARILIUS_HELPED, 2);
+ helpingPisc4 = new VarbitRequirement(VarbitID.AKD_PISCARILIUS_HELPED, 4);
+ helpingPisc6 = new VarbitRequirement(VarbitID.AKD_PISCARILIUS_HELPED, 6);
+ helpingPisc8 = new VarbitRequirement(VarbitID.AKD_PISCARILIUS_HELPED, 8);
+ helpingPisc10 = new VarbitRequirement(VarbitID.AKD_PISCARILIUS_HELPED, 10);
+ helpingShayzien2 = new VarbitRequirement(VarbitID.AKD_SHAYZIEN_HELPED, 2);
+ helpingShayzien4 = new VarbitRequirement(VarbitID.AKD_SHAYZIEN_HELPED, 4);
+ helpingShayzien6 = new VarbitRequirement(VarbitID.AKD_SHAYZIEN_HELPED, 6);
inMountKaruulm = new ZoneRequirement(mountKaruulm);
hasSulphurPotion = new ItemRequirements(sulphurPotion);
barbarianWarlordNearby = new NpcCondition(NpcID.AKD_BARBARIAN_WARLORD);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/akingdomdivided/StatuePuzzle.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/akingdomdivided/StatuePuzzle.java
index 94e02b416a2..63686dbc531 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/akingdomdivided/StatuePuzzle.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/akingdomdivided/StatuePuzzle.java
@@ -39,6 +39,7 @@
import net.runelite.api.events.GameTick;
import net.runelite.api.gameval.InterfaceID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import net.runelite.api.widgets.Widget;
import net.runelite.client.eventbus.Subscribe;
@@ -197,10 +198,10 @@ public void setupConditions()
{
inLeglessFaunF1 = new ZoneRequirement(leglessFaunF1);
statueStates = new Requirement[]{
- new VarbitRequirement(12306, 0),
- new VarbitRequirement(12307, 0),
- new VarbitRequirement(12308, 0),
- new VarbitRequirement(12309, 0)
+ new VarbitRequirement(VarbitID.AKD_PISCARILIUS_STATUE_1, 0),
+ new VarbitRequirement(VarbitID.AKD_PISCARILIUS_STATUE_2, 0),
+ new VarbitRequirement(VarbitID.AKD_PISCARILIUS_STATUE_3, 0),
+ new VarbitRequirement(VarbitID.AKD_PISCARILIUS_STATUE_4, 0)
};
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/anothersliceofham/AnotherSliceOfHam.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/anothersliceofham/AnotherSliceOfHam.java
index 367059bb5fc..5ec622022ac 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/anothersliceofham/AnotherSliceOfHam.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/anothersliceofham/AnotherSliceOfHam.java
@@ -220,12 +220,12 @@ public void setupConditions()
dug5 = new VarbitRequirement(VarbitID.SLICE_ARTIFACT_5, 1, Operation.GREATER_EQUAL);
dug6 = new VarbitRequirement(VarbitID.SLICE_ARTIFACT_6, 1, Operation.GREATER_EQUAL);
- handedIn1 = new VarbitRequirement(3551, 2);
- handedIn2 = new VarbitRequirement(3552, 2);
- handedIn3 = new VarbitRequirement(3553, 2);
- handedIn4 = new VarbitRequirement(3554, 2);
- handedIn5 = new VarbitRequirement(3555, 2);
- handedIn6 = new VarbitRequirement(3556, 2);
+ handedIn1 = new VarbitRequirement(VarbitID.SLICE_ARTIFACT_1, 2);
+ handedIn2 = new VarbitRequirement(VarbitID.SLICE_ARTIFACT_2, 2);
+ handedIn3 = new VarbitRequirement(VarbitID.SLICE_ARTIFACT_3, 2);
+ handedIn4 = new VarbitRequirement(VarbitID.SLICE_ARTIFACT_4, 2);
+ handedIn5 = new VarbitRequirement(VarbitID.SLICE_ARTIFACT_5, 2);
+ handedIn6 = new VarbitRequirement(VarbitID.SLICE_ARTIFACT_6, 2);
cleaned1 = new Conditions(LogicType.OR, handedIn1, armourShard);
cleaned2 = new Conditions(LogicType.OR, handedIn2, shieldFragment);
@@ -236,12 +236,12 @@ public void setupConditions()
cleanedAll = new Conditions(cleaned1, cleaned2, cleaned3, cleaned4, cleaned5, cleaned6);
- zanikFollowing = new Conditions(LogicType.OR, new VarbitRequirement(3557, 0),
+ zanikFollowing = new Conditions(LogicType.OR, new VarbitRequirement(VarbitID.SLICE_ZANIK_AT_DIG, 0),
new NpcInteractingRequirement(NpcID.SLICE_ZANIK_FOLLOWER));
// 3564 = 1, searjents etc
- atCrate = new VarbitRequirement(3558, 1);
+ atCrate = new VarbitRequirement(VarbitID.SLICE_HIDING, 1);
guardsPassed = new NpcCondition(NpcID.SLICE_HAM_GUARD, new WorldPoint(2397, 5551, 0));
guardEngaged = new Conditions(LogicType.OR,
new NpcInteractingWithNpcRequirement(NpcID.SLICE_SERGEANT_MOSSFISTS, "Guard"),
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/aporcineofinterest/APorcineOfInterest.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/aporcineofinterest/APorcineOfInterest.java
index c8734b17ddc..9deed8869ec 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/aporcineofinterest/APorcineOfInterest.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/aporcineofinterest/APorcineOfInterest.java
@@ -101,7 +101,7 @@ protected void setupRequirements()
rope.setHighlightInInventory(true);
slashItem = new ItemRequirement("A knife or slash weapon", ItemID.KNIFE).isNotConsumed();
- slashItem.setTooltip("Except abyssal whip, abyssal tentacle, or dragon claws.");
+ slashItem.setTooltip("Except abyssal whip, abyssal tentacle, noxious halberd, or dragon claws.");
reinforcedGoggles = new ItemRequirement("Reinforced goggles", ItemID.SLAYER_REINFORCED_GOGGLES, 1, true).isNotConsumed();
reinforcedGoggles.setTooltip("You can get another pair from Spria");
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/asoulsbane/ASoulsBane.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/asoulsbane/ASoulsBane.java
index 39266a979f1..c1628783625 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/asoulsbane/ASoulsBane.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/asoulsbane/ASoulsBane.java
@@ -46,6 +46,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import java.util.*;
@@ -146,12 +147,12 @@ protected void setupRequirements()
public void setupConditions()
{
- ropeUsed = new VarbitRequirement(2032, 1);
+ ropeUsed = new VarbitRequirement(VarbitID.SOULBANE_RIFTROPE_PRES, 1);
hasWeapon = new ItemRequirements(LogicType.OR, "", angerBattleaxe, angerMace, angerSpear, angerSword);
- hasSword = new VarbitRequirement(2029, 1);
- hasSpear = new VarbitRequirement(2029, 2);
- hasMace = new VarbitRequirement(2029, 3);
- hasBattleaxe = new VarbitRequirement(2029, 4);
+ hasSword = new VarbitRequirement(VarbitID.SOULBANE_ANGER_WEAPONMULTI, 1);
+ hasSpear = new VarbitRequirement(VarbitID.SOULBANE_ANGER_WEAPONMULTI, 2);
+ hasMace = new VarbitRequirement(VarbitID.SOULBANE_ANGER_WEAPONMULTI, 3);
+ hasBattleaxe = new VarbitRequirement(VarbitID.SOULBANE_ANGER_WEAPONMULTI, 4);
inAngerRoom = new ZoneRequirement(rageRoom);
inFearRoom = new ZoneRequirement(fearRoom);
@@ -160,16 +161,16 @@ public void setupConditions()
inHopeRoom = new ZoneRequirement(hopeRoom);
inTolnaRoom = new ZoneRequirement(tolnaRoom);
- watchedTolnaLeavingCutscene = new VarbitRequirement(2560, 1);
+ watchedTolnaLeavingCutscene = new VarbitRequirement(VarbitID.SOULBANE_WATCHEDCUTSCENE, 1);
- inHole0 = new VarbitRequirement(2012, 0);
- inHole1 = new VarbitRequirement(2012, 1);
- inHole2 = new VarbitRequirement(2012, 2);
- inHole3 = new VarbitRequirement(2012, 3);
- inHole4 = new VarbitRequirement(2012, 4);
- inHole5 = new VarbitRequirement(2012, 5);
+ inHole0 = new VarbitRequirement(VarbitID.SOULBANE_FEAR_ENEMYDOOR, 0);
+ inHole1 = new VarbitRequirement(VarbitID.SOULBANE_FEAR_ENEMYDOOR, 1);
+ inHole2 = new VarbitRequirement(VarbitID.SOULBANE_FEAR_ENEMYDOOR, 2);
+ inHole3 = new VarbitRequirement(VarbitID.SOULBANE_FEAR_ENEMYDOOR, 3);
+ inHole4 = new VarbitRequirement(VarbitID.SOULBANE_FEAR_ENEMYDOOR, 4);
+ inHole5 = new VarbitRequirement(VarbitID.SOULBANE_FEAR_ENEMYDOOR, 5);
- reaperNearby = new VarbitRequirement(2035, 1);
+ reaperNearby = new VarbitRequirement(VarbitID.SOULBANE_FEAR_MONSPRES, 1);
}
@Override
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/atailoftwocats/ATailOfTwoCats.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/atailoftwocats/ATailOfTwoCats.java
index 58a860c7493..e5f243f36e4 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/atailoftwocats/ATailOfTwoCats.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/atailoftwocats/ATailOfTwoCats.java
@@ -167,15 +167,15 @@ public void setupConditions()
{
bobNearby = new NpcRequirement("Bob nearby", NpcID.DEATH_GROWNCAT_BLACK_VIS);
- rakedPatch = new VarbitRequirement(1033, 3);
+ rakedPatch = new VarbitRequirement(VarbitID.TWOCATS_CHORES_TIDYGARDEN, 3);
plantedSeed = new VarbitRequirement(VarbitID.TWOCATS_CHORES_TIDYGARDEN, 4, Operation.GREATER_EQUAL);
- grownPotatoes = new VarbitRequirement(1033, 8);
- madeBed = new VarbitRequirement(1029, 1);
- placedLogs = new VarbitRequirement(1030, 1);
- litLogs = new VarbitRequirement(1030, 2);
- placedCake = new VarbitRequirement(1031, 3);
- placedMilk = new VarbitRequirement(1031, 4);
- usedShears = new VarbitRequirement(1032, 8);
+ grownPotatoes = new VarbitRequirement(VarbitID.TWOCATS_CHORES_TIDYGARDEN, 8);
+ madeBed = new VarbitRequirement(VarbitID.TWOCATS_CHORES_TIDYHOUSE, 1);
+ placedLogs = new VarbitRequirement(VarbitID.TWOCATS_CHORES_WARMHUMAN, 1);
+ litLogs = new VarbitRequirement(VarbitID.TWOCATS_CHORES_WARMHUMAN, 2);
+ placedCake = new VarbitRequirement(VarbitID.TWOCATS_CHORES_FEEDHUMAN, 3);
+ placedMilk = new VarbitRequirement(VarbitID.TWOCATS_CHORES_FEEDHUMAN, 4);
+ usedShears = new VarbitRequirement(VarbitID.TWOCATS_CHORES_TIDYHUMAN, 8);
}
public void setupSteps()
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/atfirstlight/AtFirstLight.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/atfirstlight/AtFirstLight.java
index 6063bf7c5f1..5b5f9991b98 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/atfirstlight/AtFirstLight.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/atfirstlight/AtFirstLight.java
@@ -47,6 +47,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import java.util.*;
@@ -188,14 +189,14 @@ protected void setupRequirements()
private void setupConditions()
{
inGuild = new ZoneRequirement(guild);
- gotMouse = new VarbitRequirement(9843, 1);
- usedMouse = new VarbitRequirement(9839, 1);
- checkedBed = new VarbitRequirement(9837, 1);
+ gotMouse = new VarbitRequirement(VarbitID.AFL_MOUSETAKEN, 1);
+ usedMouse = new VarbitRequirement(VarbitID.AFL_CATDISTRACT, 1);
+ checkedBed = new VarbitRequirement(VarbitID.AFL_BEDCHECK, 1);
// 9842 0->1, received pelt once
- equipmentUsable = new VarbitRequirement(9840, 1);
- repairedEquipment = new VarbitRequirement(9840, 2);
- handedInReport = new VarbitRequirement(9836, 1);
+ equipmentUsable = new VarbitRequirement(VarbitID.AFL_HOUSETRAPPED, 1);
+ repairedEquipment = new VarbitRequirement(VarbitID.AFL_HOUSETRAPPED, 2);
+ handedInReport = new VarbitRequirement(VarbitID.AFL_REPORT, 1);
foxsReport = new ItemRequirement("Fox's report", ItemID.AFL_REPORT).hideConditioned(handedInReport);
hadReport = or(foxsReport, handedInReport);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/belowicemountain/BelowIceMountain.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/belowicemountain/BelowIceMountain.java
index 04b1900be91..031d004f24e 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/belowicemountain/BelowIceMountain.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/belowicemountain/BelowIceMountain.java
@@ -45,17 +45,12 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import java.util.*;
public class BelowIceMountain extends BasicQuestHelper
{
- // varbit 12065 tracks checkal line?
- // varbit 12062 -> 1 after learning flex
- private static final int VARBIT_CHECKAL_LINE = 12065;
- private static final int VARBIT_MARLEY_LINE = 12064;
- private static final int VARBIT_BURNTOF_LINE = 12066;
-
//Items Required
ItemRequirement cookedMeat, bread, knife, coins, knifeHighlight, breadHighlight, steakSandwich,
beerHighlight;
@@ -149,21 +144,21 @@ protected void setupRequirements()
public void setupConditions()
{
- needFlex = new VarbitRequirement(VARBIT_CHECKAL_LINE, 5);
- leftFlexBeforeLearning = new VarbitRequirement(VARBIT_CHECKAL_LINE, 10);
- haveFlex = new VarbitRequirement(VARBIT_CHECKAL_LINE, 15);
- recruitedCheckal = new VarbitRequirement(VARBIT_CHECKAL_LINE, 40);
+ needFlex = new VarbitRequirement(VarbitID.BIM_CHECKAL, 5);
+ leftFlexBeforeLearning = new VarbitRequirement(VarbitID.BIM_CHECKAL, 10);
+ haveFlex = new VarbitRequirement(VarbitID.BIM_CHECKAL, 15);
+ recruitedCheckal = new VarbitRequirement(VarbitID.BIM_CHECKAL, 40);
- needRecipe = new VarbitRequirement(VARBIT_MARLEY_LINE, 5);
- haveRecipe = new VarbitRequirement(VARBIT_MARLEY_LINE, 10);
+ needRecipe = new VarbitRequirement(VarbitID.BIM_MARLEY, 5);
+ haveRecipe = new VarbitRequirement(VarbitID.BIM_MARLEY, 10);
haveIngredients = new ItemRequirements(cookedMeat, bread, knife);
- fedMarley = new VarbitRequirement(VARBIT_MARLEY_LINE, 35);
- recruitedMarley = new VarbitRequirement(VARBIT_MARLEY_LINE, 40);
+ fedMarley = new VarbitRequirement(VarbitID.BIM_MARLEY, 35);
+ recruitedMarley = new VarbitRequirement(VarbitID.BIM_MARLEY, 40);
- needBeer = new VarbitRequirement(VARBIT_BURNTOF_LINE, 5);
- gaveBeer = new VarbitRequirement(VARBIT_BURNTOF_LINE, 10);
- needRPS = new VarbitRequirement(VARBIT_BURNTOF_LINE, 15);
- recruitedBurntof = new VarbitRequirement(VARBIT_BURNTOF_LINE, 40);
+ needBeer = new VarbitRequirement(VarbitID.BIM_BURNTOF, 5);
+ gaveBeer = new VarbitRequirement(VarbitID.BIM_BURNTOF, 10);
+ needRPS = new VarbitRequirement(VarbitID.BIM_BURNTOF, 15);
+ recruitedBurntof = new VarbitRequirement(VarbitID.BIM_BURNTOF, 40);
inDungeon = new NpcRequirement("Ancient Guardian", 10654);
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/beneathcursedsands/BeneathCursedSands.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/beneathcursedsands/BeneathCursedSands.java
index 7b36aedc0ea..98ab41b096c 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/beneathcursedsands/BeneathCursedSands.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/beneathcursedsands/BeneathCursedSands.java
@@ -343,7 +343,7 @@ public void setupConditions()
hasReadStoneTablet = new VarbitRequirement(VarbitID.BCS_FOUND_MOULD, 2, Operation.GREATER_EQUAL);
isRotatingScarab = new WidgetModelRequirement(750, 3, -1);
- scarabRotatedDownwards = new VarbitRequirement(13849, 15);
+ scarabRotatedDownwards = new VarbitRequirement(VarbitID.BCS_EMBLEM_ROTATION, 15);
scarabRotationQuickestRight = new VarbitRequirement(VarbitID.BCS_EMBLEM_ROTATION, 15, Operation.GREATER_EQUAL);
firstLeverPulled = new ObjectCondition(ObjectID.BCS_TOMB_LEVER_ON, new WorldPoint(3439, 9225, 0));
@@ -352,14 +352,14 @@ public void setupConditions()
shouldDestroyShadowRift = new NpcCondition(NpcID.BCS_CHAMPION_RIFT);
inChemistryPuzzle = new WidgetModelRequirement(751, 3, -1);
- chemistryValveLeftStepZero = new VarbitRequirement(13863, 0);
- chemistryValveLeftStepOne = new VarbitRequirement(13863, 3);
- chemistryValveLeftStepTwo = new VarbitRequirement(13863, 6);
- chemistryValveLeftStepThree = new VarbitRequirement(13863, 9);
- chemistryValveMiddleAtMaximum = new VarbitRequirement(13864, 45);
- chemistryValveMiddleNearMax = new VarbitRequirement(13864, 42);
- chemistryValveRightAtMaximum = new VarbitRequirement(13865, 45);
- chemistryValveRightNearMax = new VarbitRequirement(13865, 42);
+ chemistryValveLeftStepZero = new VarbitRequirement(VarbitID.BCS_BURNER_1, 0);
+ chemistryValveLeftStepOne = new VarbitRequirement(VarbitID.BCS_BURNER_1, 3);
+ chemistryValveLeftStepTwo = new VarbitRequirement(VarbitID.BCS_BURNER_1, 6);
+ chemistryValveLeftStepThree = new VarbitRequirement(VarbitID.BCS_BURNER_1, 9);
+ chemistryValveMiddleAtMaximum = new VarbitRequirement(VarbitID.BCS_BURNER_2, 45);
+ chemistryValveMiddleNearMax = new VarbitRequirement(VarbitID.BCS_BURNER_2, 42);
+ chemistryValveRightAtMaximum = new VarbitRequirement(VarbitID.BCS_BURNER_3, 45);
+ chemistryValveRightNearMax = new VarbitRequirement(VarbitID.BCS_BURNER_3, 42);
shouldFightMenaphiteShadow = new NpcCondition(NpcID.BCS_MENAPHITE_AKH_SHADOW);
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/beneathcursedsands/TombRiddle.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/beneathcursedsands/TombRiddle.java
index ec3f327401c..9685ae86a35 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/beneathcursedsands/TombRiddle.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/beneathcursedsands/TombRiddle.java
@@ -14,6 +14,7 @@
import net.runelite.api.gameval.InterfaceID;
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import net.runelite.api.widgets.Widget;
import net.runelite.client.eventbus.EventBus;
import net.runelite.client.eventbus.Subscribe;
@@ -93,10 +94,10 @@ protected void updateSteps()
return;
}
- int currentNorthernEmblem = client.getVarbitValue(13862);
- int currentCentreNorthEmblem = client.getVarbitValue(13861);
- int currentCentreSouthEmblem = client.getVarbitValue(13860);
- int currentSouthernEmblem = client.getVarbitValue(13859);
+ int currentNorthernEmblem = client.getVarbitValue(VarbitID.BCS_URN_4);
+ int currentCentreNorthEmblem = client.getVarbitValue(VarbitID.BCS_URN_3);
+ int currentCentreSouthEmblem = client.getVarbitValue(VarbitID.BCS_URN_2);
+ int currentSouthernEmblem = client.getVarbitValue(VarbitID.BCS_URN_1);
if (currentNorthernEmblem != northernEmblem)
{
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/betweenarock/BetweenARock.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/betweenarock/BetweenARock.java
index c06dc596e2c..7ae78ddcd02 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/betweenarock/BetweenARock.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/betweenarock/BetweenARock.java
@@ -50,6 +50,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import java.util.*;
@@ -250,10 +251,10 @@ public void setupConditions()
inDwarvenMine = new ZoneRequirement(dwarvenMine);
inKhorvakRoom = new ZoneRequirement(khorvakRoom);
- hasUsedGoldBar = new VarbitRequirement(301, 1);
- shotGoldCannonball = new VarbitRequirement(313, 1);
+ hasUsedGoldBar = new VarbitRequirement(VarbitID.DWARFROCK_GOLD_CANNONBALL, 1);
+ shotGoldCannonball = new VarbitRequirement(VarbitID.DWARFROCK_FIRED_GOLD_CANNONBALL, 1);
hasCannonball = new Conditions(LogicType.OR, goldCannonball, shotGoldCannonball);
- hasSolvedSchematic = new VarbitRequirement(305, 1);
+ hasSolvedSchematic = new VarbitRequirement(VarbitID.DWARFROCK_SCHEMATICS_SOLVED, 1);
inRealm = new ZoneRequirement(realm);
avatarNearby = new Conditions(LogicType.OR, new NpcCondition(NpcID.DWARF_ROCK_AVATAR_MAGE), new NpcCondition(NpcID.DWARF_ROCK_AVATAR_MAGE_GREEN),
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/biohazard/Biohazard.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/biohazard/Biohazard.java
index 5a9a8ffaef5..599a40d6947 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/biohazard/Biohazard.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/biohazard/Biohazard.java
@@ -31,139 +31,184 @@
import net.runelite.client.plugins.microbot.questhelper.questinfo.QuestHelperQuest;
import net.runelite.client.plugins.microbot.questhelper.requirements.Requirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.conditional.Conditions;
-import net.runelite.client.plugins.microbot.questhelper.requirements.conditional.ObjectCondition;
import net.runelite.client.plugins.microbot.questhelper.requirements.item.ItemRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.item.ItemRequirements;
import net.runelite.client.plugins.microbot.questhelper.requirements.quest.QuestRequirement;
-import net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicType;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.and;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.not;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.or;
+import net.runelite.client.plugins.microbot.questhelper.requirements.var.VarbitRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.zone.Zone;
import net.runelite.client.plugins.microbot.questhelper.requirements.zone.ZoneRequirement;
import net.runelite.client.plugins.microbot.questhelper.rewards.ExperienceReward;
import net.runelite.client.plugins.microbot.questhelper.rewards.QuestPointReward;
-import net.runelite.client.plugins.microbot.questhelper.steps.*;
+import net.runelite.client.plugins.microbot.questhelper.rewards.UnlockReward;
+import net.runelite.client.plugins.microbot.questhelper.steps.ConditionalStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.DetailedQuestStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.ItemStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.NpcStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.ObjectStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.QuestStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.widget.WidgetHighlight;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import net.runelite.api.QuestState;
import net.runelite.api.Skill;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
-
-import java.util.*;
+import net.runelite.api.gameval.VarbitID;
public class Biohazard extends BasicQuestHelper
{
- //Items Required
- ItemRequirement gasMask, birdFeed, birdCage, rottenApple, medicalGown, key, distillator, plagueSample, ethenea, liquidHoney, sulphuricBroline,
- touchPaper, priestGownTop, priestGownBottom, priestGownBottomEquipped, priestGownTopEquipped, medicalGownEquipped,
- birdCageHighlighted;
-
- //Items Recommended
- ItemRequirement teleportVarrock, teleportArdougne, teleportRimmington, coins;
-
- Requirement inMournerBackyard, inWestArdougne, inMournerBuilding, upstairsInMournerBuilding, inVarrockSouthEast,
- hasPriestSet, isUpstairsArdougneCastle, hasChemicals;
-
- QuestStep talkToElena, talkToJerico, getBirdFeed, getBirdFeed2, getPigeonCage, investigateWatchtower, clickPigeonCage, talkToOmartAgain,
- talkToOmartToReturnToWest, talkToKilron, enterBackyardOfHeadquarters, pickupRottenApple, useRottenAppleOnCauldron, searchSarahsCupboard,
- searchSarahsCupboard2, enterMournerHeadquarters, goUpstairsInMournerBuilding, killMourner, searchCrateForDistillator,
- goBackDownstairsInMournersHeadquarters, talkToElenaWithDistillator, talkToTheChemist, goToVarrock, vinciVarrock, chancyVarrock, hopsVarrock,
- talkToAsyff, talkToGuidor, returnToElenaAfterSampling, informTheKing, informTheKingGoUpstairs;
-
+ // Required items
+ ItemRequirement gasMask;
+
+ // Recommended items
+ ItemRequirement teleportVarrock;
+ ItemRequirement teleportArdougne;
+ ItemRequirement teleportRimmington;
+ ItemRequirement coins;
+
+ // Mid-quest requirements
+ ItemRequirement birdFeed;
+ ItemRequirement birdCage;
+ ItemRequirement rottenApple;
+ ItemRequirement medicalGown;
+ ItemRequirement key;
+ ItemRequirement distillator;
+ ItemRequirement plagueSample;
+ ItemRequirement ethenea;
+ ItemRequirement liquidHoney;
+ ItemRequirement sulphuricBroline;
+ ItemRequirement touchPaper;
+ ItemRequirement coinsForPriestSet;
+ ItemRequirement priestGownTop;
+ ItemRequirement priestGownBottom;
+ ItemRequirement priestGownBottomEquipped;
+ ItemRequirement priestGownTopEquipped;
+ ItemRequirement medicalGownEquipped;
+ ItemRequirement birdCageHighlighted;
+
+ // Zones
+ Zone westArdougne1;
+ Zone westArdougne2;
+ Zone westArdougne3;
+ Zone mournerBackyard;
+ Zone mournerBuilding1;
+ Zone mournerBuilding2;
+ Zone mournersBuildingUpstairs;
+ Zone varrockSouthEast;
+ Zone upstairsArdougneCastle;
+
+ // Miscellaneous requirements
+ ZoneRequirement inWestArdougne;
+ ZoneRequirement inMournerBackyard;
+
+ ZoneRequirement inMournerBuilding;
+ ZoneRequirement upstairsInMournerBuilding;
+
+ ZoneRequirement inVarrockSouthEast;
+ ZoneRequirement isUpstairsArdougneCastle;
+
+ VarbitRequirement hasNotReceivedFreePriestGownSet;
+ ItemRequirements hasPriestSet;
+ Conditions hasChemicals;
+
+ // Steps
+ NpcStep talkToElena;
+
+ NpcStep talkToJerico;
+
+ ObjectStep getBirdFeed;
+ ItemStep getPigeonCage;
+ ObjectStep investigateWatchtower;
+
+ DetailedQuestStep clickPigeonCage;
+
+ NpcStep talkToOmartToEnterWestArdougne;
+
+ NpcStep talkToKilron;
+ ObjectStep enterBackyardOfHeadquarters;
+ ItemStep pickupRottenApple;
+ DetailedQuestStep useRottenAppleOnCauldron;
+
+ ObjectStep exitBackyardOfHeadquarters;
+ ObjectStep searchSarahsCupboard;
+ ObjectStep enterMournerHeadquarters;
+ ObjectStep goUpstairsInMournerBuilding;
+ NpcStep killMourner;
+ ObjectStep searchCrateForDistillator;
+
+ ObjectStep goBackDownstairsInMournersHeadquarters;
+ NpcStep talkToElenaWithDistillator;
+
+ NpcStep talkToTheChemist;
+
+ DetailedQuestStep goToVarrock;
GiveIngredientsToHelpersStep giveChemicals;
+ NpcStep vinciVarrock;
+ NpcStep chancyVarrock;
+ NpcStep hopsVarrock;
+ NpcStep talkToAsyff;
+ NpcStep talkToAsyffBuy;
+ NpcStep talkToGuidor;
+
+ NpcStep returnToElenaAfterSampling;
- //Zones
- Zone westArdougne1, westArdougne2, westArdougne3, mournerBackyard, mournerBuilding1, mournerBuilding2, mournersBuildingUpstairs, varrockSouthEast, upstairsArdougneCastle;
+ NpcStep informTheKing;
+ ObjectStep informTheKingGoUpstairs;
@Override
- public Map loadSteps()
+ protected void setupZones()
{
- initializeRequirements();
- setupConditions();
- setupSteps();
- Map steps = new HashMap<>();
-
- steps.put(0, talkToElena);
-
- steps.put(1, talkToJerico);
-
- ConditionalStep prepareADistraction = new ConditionalStep(this, getBirdFeed);
- prepareADistraction.addStep(new Conditions(birdCage, birdFeed), investigateWatchtower);
- prepareADistraction.addStep(birdFeed, getPigeonCage);
- prepareADistraction.addStep(new ObjectCondition(ObjectID.JERICOSCUPBOARDOPEN), getBirdFeed2);
- steps.put(2, prepareADistraction);
-
- ConditionalStep causeADistraction = new ConditionalStep(this, getPigeonCage);
- causeADistraction.addStep(birdCage, clickPigeonCage);
- steps.put(3, causeADistraction);
-
- steps.put(4, talkToOmartAgain);
-
- ConditionalStep poisonFood = new ConditionalStep(this, talkToOmartToReturnToWest);
- poisonFood.addStep(new Conditions(inMournerBackyard, rottenApple), useRottenAppleOnCauldron);
- poisonFood.addStep(inMournerBackyard, pickupRottenApple);
- poisonFood.addStep(inWestArdougne, enterBackyardOfHeadquarters);
-
- steps.put(5, poisonFood);
-
- ConditionalStep infiltrateMourners = new ConditionalStep(this, talkToOmartToReturnToWest);
- infiltrateMourners.addStep(new Conditions(key, upstairsInMournerBuilding), searchCrateForDistillator);
- infiltrateMourners.addStep(upstairsInMournerBuilding, killMourner);
- infiltrateMourners.addStep(inMournerBuilding, goUpstairsInMournerBuilding);
- infiltrateMourners.addStep(new Conditions(inWestArdougne, medicalGown), enterMournerHeadquarters);
- infiltrateMourners.addStep(new Conditions(inWestArdougne, new ObjectCondition(ObjectID.BIONURSESCUPBOARDOPEN)), searchSarahsCupboard2);
- infiltrateMourners.addStep(inWestArdougne, searchSarahsCupboard);
-
- steps.put(6, infiltrateMourners);
-
- ConditionalStep returnToElenaWithDistillator = new ConditionalStep(this, talkToOmartToReturnToWest);
- returnToElenaWithDistillator.addStep(new Conditions(upstairsInMournerBuilding, distillator), goBackDownstairsInMournersHeadquarters);
- returnToElenaWithDistillator.addStep(new Conditions(distillator, inWestArdougne), talkToKilron);
- returnToElenaWithDistillator.addStep(distillator, talkToElenaWithDistillator);
-
- returnToElenaWithDistillator.addStep(new Conditions(key, upstairsInMournerBuilding), searchCrateForDistillator);
- returnToElenaWithDistillator.addStep(upstairsInMournerBuilding, killMourner);
- returnToElenaWithDistillator.addStep(inMournerBuilding, goUpstairsInMournerBuilding);
- returnToElenaWithDistillator.addStep(new Conditions(inWestArdougne, medicalGown), enterMournerHeadquarters);
- returnToElenaWithDistillator.addStep(new Conditions(inWestArdougne, new ObjectCondition(ObjectID.BIONURSESCUPBOARDOPEN)), searchSarahsCupboard2);
- returnToElenaWithDistillator.addStep(inWestArdougne, searchSarahsCupboard);
-
- steps.put(7, returnToElenaWithDistillator);
-
- steps.put(10, talkToTheChemist);
-
- ConditionalStep smuggleInChemicals = new ConditionalStep(this, goToVarrock);
- smuggleInChemicals.addStep(new Conditions(inVarrockSouthEast, liquidHoney, ethenea, sulphuricBroline, hasPriestSet), talkToGuidor);
- smuggleInChemicals.addStep(new Conditions(inVarrockSouthEast, liquidHoney, ethenea, sulphuricBroline), talkToAsyff);
- smuggleInChemicals.addStep(new Conditions(inVarrockSouthEast, liquidHoney, ethenea), hopsVarrock);
- smuggleInChemicals.addStep(new Conditions(inVarrockSouthEast, liquidHoney), vinciVarrock);
- smuggleInChemicals.addStep(inVarrockSouthEast, chancyVarrock);
- smuggleInChemicals.addStep(hasChemicals, giveChemicals);
-
- steps.put(12, smuggleInChemicals);
-
- steps.put(14, returnToElenaAfterSampling);
-
- ConditionalStep talkToTheKing = new ConditionalStep(this, informTheKingGoUpstairs);
- talkToTheKing.addStep(isUpstairsArdougneCastle, informTheKing);
-
- steps.put(15, talkToTheKing);
- // Finishing gives: 72: 0->17, 71: 0->4117, 70: 0->1
- return steps;
+ mournerBackyard = new Zone(new WorldPoint(2542, 3328, 0), new WorldPoint(2555, 3333, 0));
+ westArdougne1 = new Zone(new WorldPoint(2460, 3279, 0), new WorldPoint(2556, 3334, 2));
+ westArdougne2 = new Zone(new WorldPoint(2434, 3305, 0), new WorldPoint(2464, 3323, 2));
+ westArdougne3 = new Zone(new WorldPoint(2510, 3265, 0), new WorldPoint(2556, 3280, 2));
+ mournerBuilding1 = new Zone(new WorldPoint(2547, 3321, 0), new WorldPoint(2555, 3327, 0));
+ mournerBuilding2 = new Zone(new WorldPoint(2542, 3324, 0), new WorldPoint(2546, 3327, 0));
+ mournersBuildingUpstairs = new Zone(new WorldPoint(2542, 3321, 1), new WorldPoint(2555, 3327, 1));
+ varrockSouthEast = new Zone(new WorldPoint(3265, 3376, 0), new WorldPoint(3287, 3407, 1));
+ upstairsArdougneCastle = new Zone(new WorldPoint(2570, 3283, 1), new WorldPoint(2590, 3310, 1));
}
@Override
protected void setupRequirements()
{
+ inWestArdougne = new ZoneRequirement(westArdougne1, westArdougne2, westArdougne3);
+ inMournerBackyard = new ZoneRequirement(mournerBackyard);
+
+ inMournerBuilding = new ZoneRequirement(mournerBuilding1, mournerBuilding2);
+ upstairsInMournerBuilding = new ZoneRequirement(mournersBuildingUpstairs);
+
+ inVarrockSouthEast = new ZoneRequirement(varrockSouthEast);
+ isUpstairsArdougneCastle = new ZoneRequirement(upstairsArdougneCastle);
+
gasMask = new ItemRequirement("Gas mask", ItemID.GASMASK, 1, true).isNotConsumed();
gasMask.setTooltip("You can get another from the cupboard in Edmond's house west of Elena's house.");
- birdCage = new ItemRequirement("Pigeon cage", ItemID.PIGEONS);
- birdCageHighlighted = new ItemRequirement("Pigeon cage", ItemID.PIGEONS);
- birdCageHighlighted.setHighlightInInventory(true);
+
+ teleportVarrock = new ItemRequirement("Teleport to Varrock", ItemID.POH_TABLET_VARROCKTELEPORT);
+ teleportArdougne = new ItemRequirement("Teleport to Ardougne", ItemID.POH_TABLET_ARDOUGNETELEPORT, 3);
+ teleportRimmington = new ItemRequirement("Teleport to Rimmington", ItemID.NZONE_TELETAB_RIMMINGTON);
+ coins = new ItemRequirement("Coins", ItemCollections.COINS, 30);
+ coins.setTooltip("For travelling from Ardougne to Rimmington.");
+
+ coinsForPriestSet = new ItemRequirement("Coins", ItemCollections.COINS, 12);
+ coinsForPriestSet.setTooltip("For buying the Priest Gown set");
+
birdFeed = new ItemRequirement("Bird feed", ItemID.BIRDFEED);
+ birdCage = new ItemRequirement("Pigeon cage", ItemID.PIGEONS);
+ birdCageHighlighted = birdCage.highlighted();
+
rottenApple = new ItemRequirement("Rotten apple", ItemID.ROTTENAPPLES);
rottenApple.setHighlightInInventory(true);
medicalGown = new ItemRequirement("Medical gown", ItemID.DOCTOR_GOWN).isNotConsumed();
- medicalGownEquipped = new ItemRequirement("Medical gown", ItemID.DOCTOR_GOWN, 1, true);
+ medicalGownEquipped = medicalGown.equipped();
key = new ItemRequirement("Key", ItemID.MOURNERKEYTW);
distillator = new ItemRequirement("Distillator", ItemID.DISTILLATOR);
plagueSample = new ItemRequirement("Plague sample", ItemID.PLAGUESAMPLE);
@@ -176,42 +221,17 @@ protected void setupRequirements()
sulphuricBroline.setTooltip("You can get another from Elena in East Ardougne.");
touchPaper = new ItemRequirement("Touch paper", ItemID.TOUCH_PAPER);
touchPaper.setTooltip("You can get more from the Chemist in Rimmington.");
+
priestGownBottom = new ItemRequirement("Priest gown (bottom)", ItemID.PRIEST_ROBE).isNotConsumed();
priestGownTop = new ItemRequirement("Priest gown (top)", ItemID.PRIEST_GOWN).isNotConsumed();
priestGownBottomEquipped = priestGownBottom.equipped();
priestGownTopEquipped = priestGownTop.equipped();
- teleportVarrock = new ItemRequirement("Teleport to Varrock", ItemID.POH_TABLET_VARROCKTELEPORT);
- teleportArdougne = new ItemRequirement("Teleport to Ardougne", ItemID.POH_TABLET_ARDOUGNETELEPORT, 3);
- teleportRimmington = new ItemRequirement("Teleport to Rimmington", ItemID.NZONE_TELETAB_RIMMINGTON);
- coins = new ItemRequirement("Coins", ItemCollections.COINS, 30);
- }
- @Override
- protected void setupZones()
- {
- mournerBackyard = new Zone(new WorldPoint(2542, 3328, 0), new WorldPoint(2555, 3333, 0));
- westArdougne1 = new Zone(new WorldPoint(2460, 3279, 0), new WorldPoint(2556, 3334, 2));
- westArdougne2 = new Zone(new WorldPoint(2434, 3305, 0), new WorldPoint(2464, 3323, 2));
- westArdougne3 = new Zone(new WorldPoint(2510, 3265, 0), new WorldPoint(2556, 3280, 2));
- mournerBuilding1 = new Zone(new WorldPoint(2547, 3321, 0), new WorldPoint(2555, 3327, 0));
- mournerBuilding2 = new Zone(new WorldPoint(2542, 3324, 0), new WorldPoint(2546, 3327, 0));
- mournersBuildingUpstairs = new Zone(new WorldPoint(2542, 3321, 1), new WorldPoint(2555, 3327, 1));
- varrockSouthEast = new Zone(new WorldPoint(3265, 3376, 0), new WorldPoint(3287, 3407, 1));
- upstairsArdougneCastle = new Zone(new WorldPoint(2570, 3283, 1), new WorldPoint(2590, 3310, 1));
- }
+ hasChemicals = or(ethenea, liquidHoney, sulphuricBroline);
- public void setupConditions()
- {
- inWestArdougne = new ZoneRequirement(westArdougne1, westArdougne2, westArdougne3);
- inMournerBackyard = new ZoneRequirement(mournerBackyard);
+ hasNotReceivedFreePriestGownSet = new VarbitRequirement(VarbitID.BIOHAZARD_FREE_CLOTHES, 0);
- inMournerBuilding = new ZoneRequirement(mournerBuilding1, mournerBuilding2);
- upstairsInMournerBuilding = new ZoneRequirement(mournersBuildingUpstairs);
-
- hasChemicals = new Conditions(LogicType.OR, ethenea, liquidHoney, sulphuricBroline);
- inVarrockSouthEast = new ZoneRequirement(varrockSouthEast);
hasPriestSet = new ItemRequirements(priestGownBottom, priestGownTop);
- isUpstairsArdougneCastle = new ZoneRequirement(upstairsArdougneCastle);
}
public void setupSteps()
@@ -221,45 +241,42 @@ public void setupSteps()
talkToJerico = new NpcStep(this, NpcID.JERICO, new WorldPoint(2612, 3324, 0), "Talk to Jerico in his house south of the northern Ardougne bank");
- getBirdFeed = new ObjectStep(this, ObjectID.JERICOSCUPBOARDSHUT, new WorldPoint(2612, 3326, 0), "Get birdfeed from the cupboard in Jerico's house.");
- getBirdFeed2 = new ObjectStep(this, ObjectID.JERICOSCUPBOARDOPEN, new WorldPoint(2612, 3326, 0), "Get birdfeed from the cupboard in Jerico's house.");
-
- getBirdFeed.addSubSteps(getBirdFeed2);
+ getBirdFeed = new ObjectStep(this, ObjectID.JERICOSCUPBOARDSHUT, new WorldPoint(2612, 3326, 0), "Get bird feed from the cupboard in Jerico's house.");
+ getBirdFeed.addAlternateObjects(ObjectID.JERICOSCUPBOARDOPEN);
- getPigeonCage = new DetailedQuestStep(this, new WorldPoint(2618, 3325, 0), "Get a pigeon cage from behind Jerico's house.", birdCage, birdFeed);
+ getPigeonCage = new ItemStep(this, new WorldPoint(2618, 3325, 0), "Get a pigeon cage from behind Jerico's house.", birdCage);
investigateWatchtower = new ObjectStep(this, ObjectID.BIOWATCHTOWER_OP, new WorldPoint(2562, 3301, 0), "Investigate the watchtower near the entrance to West Ardougne.", birdFeed, birdCage);
clickPigeonCage = new DetailedQuestStep(this, new WorldPoint(2562, 3300, 0), "Open the Pigeon cage next to the watchtower.", birdCageHighlighted);
- talkToOmartAgain = new NpcStep(this, NpcID.OMART_VIS, new WorldPoint(2559, 3266, 0), "Talk to Omart to enter West Ardougne.", gasMask);
- talkToOmartAgain.addDialogStep("Okay, lets do it.");
- talkToOmartToReturnToWest = new NpcStep(this, NpcID.OMART_VIS, new WorldPoint(2559, 3266, 0), "Talk to Omart to return to West Ardougne");
- talkToOmartToReturnToWest.addDialogStep("Okay, lets do it.");
- talkToOmartAgain.addSubSteps(talkToOmartToReturnToWest);
+ talkToOmartToEnterWestArdougne = new NpcStep(this, NpcID.OMART_VIS, new WorldPoint(2559, 3266, 0), "Talk to Omart, south of the watchtower, to enter West Ardougne.", gasMask);
+ talkToOmartToEnterWestArdougne.addDialogStep("Okay, lets do it.");
+ talkToOmartToEnterWestArdougne.addDialogStep("Okay, let's do it.");
enterBackyardOfHeadquarters = new ObjectStep(this, ObjectID.MOURNERSTEWFENCE, new WorldPoint(2541, 3331, 0), "Squeeze through the fence to enter the Mourner's Headquarters yard in the north east of West Ardougne.");
- pickupRottenApple = new DetailedQuestStep(this, new WorldPoint(2549, 3332, 0), "Pick up the rotten apple in the yard.", rottenApple);
+ pickupRottenApple = new ItemStep(this, new WorldPoint(2549, 3332, 0), "Pick up the rotten apple in the yard.", rottenApple);
useRottenAppleOnCauldron = new ObjectStep(this, ObjectID.MOURNERCAULDRON, new WorldPoint(2543, 3332, 0), "Use the rotten apple on the cauldron.", rottenApple);
useRottenAppleOnCauldron.addIcon(ItemID.ROTTENAPPLES);
- searchSarahsCupboard = new ObjectStep(this, ObjectID.BIONURSESCUPBOARDSHUT, new WorldPoint(2518, 3276, 0), "Search the cupboard in Sarah's house south-west of the West Ardougne church.");
- searchSarahsCupboard2 = new ObjectStep(this, ObjectID.BIONURSESCUPBOARDOPEN, new WorldPoint(2518, 3276, 0), "Search the cupboard in Sarah's house south-west of the West Ardougne church.");
- searchSarahsCupboard.addSubSteps(searchSarahsCupboard2);
+ exitBackyardOfHeadquarters = new ObjectStep(this, ObjectID.MOURNERSTEWFENCE, new WorldPoint(2541, 3331, 0), "Search the cupboard in Sarah's house south-west of the West Ardougne church for a disguise.");
+ searchSarahsCupboard = new ObjectStep(this, ObjectID.BIONURSESCUPBOARDSHUT, new WorldPoint(2518, 3276, 0), "Search the cupboard in Sarah's house south-west of the West Ardougne church for a disguise.");
+ searchSarahsCupboard.addAlternateObjects(ObjectID.BIONURSESCUPBOARDOPEN);
+ searchSarahsCupboard.addSubSteps(exitBackyardOfHeadquarters);
enterMournerHeadquarters = new ObjectStep(this, ObjectID.MOURNERSTEWDOOR, new WorldPoint(2551, 3320, 0), "Enter the Mourners' Headquarters whilst wearing the medical gown.", medicalGownEquipped);
- goUpstairsInMournerBuilding = new ObjectStep(this, ObjectID.SPIRALSTAIRS, new WorldPoint(2543, 3325, 0), "Go upstairs and kill the mourner there.");
+ goUpstairsInMournerBuilding = new ObjectStep(this, ObjectID.SPIRALSTAIRS, new WorldPoint(2543, 3325, 0), "Go upstairs and kill the mourner.");
killMourner = new NpcStep(this, NpcID.MOURNERSTEW2_VIS, new WorldPoint(2549, 3325, 1), "Kill the mourner here for a key to the caged area.");
goUpstairsInMournerBuilding.addSubSteps(killMourner);
searchCrateForDistillator = new ObjectStep(this, ObjectID.MOURNERCRATEUP, new WorldPoint(2554, 3327, 1), "Search the crate in the caged area for Elena's Distillator.");
- goBackDownstairsInMournersHeadquarters = new ObjectStep(this, ObjectID.SPIRALSTAIRSTOP, new WorldPoint(2543, 3325, 1), "Return to Elena. Go back downstairs or teleport out.");
+ goBackDownstairsInMournersHeadquarters = new ObjectStep(this, ObjectID.SPIRALSTAIRSTOP, new WorldPoint(2543, 3325, 1), "Return to Elena. Go back downstairs or teleport out.", distillator);
- talkToKilron = new NpcStep(this, NpcID.KILRON_VIS, new WorldPoint(2556, 3266, 0), "Return to Elena. Talk to Kilron to return back to East Ardougne.");
+ talkToKilron = new NpcStep(this, NpcID.KILRON_VIS, new WorldPoint(2556, 3266, 0), "Return to Elena. Talk to Kilron south-east of the West Ardougne church to return back to East Ardougne.", distillator);
talkToKilron.addDialogStep("Yes I do.");
- talkToElenaWithDistillator = new NpcStep(this, NpcID.ELENA2_VIS, new WorldPoint(2592, 3336, 0), "Return to Elena.");
+ talkToElenaWithDistillator = new NpcStep(this, NpcID.ELENA2_VIS, new WorldPoint(2592, 3336, 0), "Return to Elena.", distillator);
talkToElenaWithDistillator.addSubSteps(goBackDownstairsInMournersHeadquarters, talkToKilron);
talkToTheChemist = new NpcStep(this, NpcID.CHEMIST, new WorldPoint(2933, 3210, 0),
@@ -275,6 +292,11 @@ public void setupSteps()
talkToAsyff = new NpcStep(this, NpcID.TAILORP, new WorldPoint(3277, 3397, 0), "Talk to Asyff to get a free priest gown. You can only get the free set once.");
talkToAsyff.addDialogStep("Do you have a spare Priest Gown?");
+ talkToAsyffBuy = new NpcStep(this, NpcID.TAILORP, new WorldPoint(3277, 3397, 0), "Talk to Asyff and buy a priest gown set.", coinsForPriestSet);
+ talkToAsyffBuy.addDialogStep("Okay, let's see what you've got then.");
+ talkToAsyffBuy.addWidgetHighlight(WidgetHighlight.createShopItemHighlight(ItemID.PRIEST_GOWN));
+ talkToAsyffBuy.addWidgetHighlight(WidgetHighlight.createShopItemHighlight(ItemID.PRIEST_ROBE));
+ talkToAsyff.addSubSteps(talkToAsyffBuy);
talkToGuidor = new NpcStep(this, NpcID.GUIDOR, new WorldPoint(3284, 3382, 0),
"Talk to Guidor in his house to the south.",
@@ -289,31 +311,106 @@ public void setupSteps()
informTheKing.addSubSteps(informTheKingGoUpstairs);
}
+ @Override
+ public Map loadSteps()
+ {
+ initializeRequirements();
+ setupSteps();
+
+ var steps = new HashMap();
+
+ steps.put(0, talkToElena);
+
+ steps.put(1, talkToJerico);
+
+ var prepareADistraction = new ConditionalStep(this, investigateWatchtower);
+ prepareADistraction.addStep(not(birdFeed), getBirdFeed);
+ prepareADistraction.addStep(not(birdCage), getPigeonCage);
+ steps.put(2, prepareADistraction);
+
+ var causeADistraction = new ConditionalStep(this, getPigeonCage);
+ causeADistraction.addStep(birdCage, clickPigeonCage);
+ steps.put(3, causeADistraction);
+
+ steps.put(4, talkToOmartToEnterWestArdougne);
+
+ var poisonFood = new ConditionalStep(this, talkToOmartToEnterWestArdougne);
+ poisonFood.addStep(and(inMournerBackyard, rottenApple), useRottenAppleOnCauldron);
+ poisonFood.addStep(inMournerBackyard, pickupRottenApple);
+ poisonFood.addStep(inWestArdougne, enterBackyardOfHeadquarters);
+
+ steps.put(5, poisonFood);
+
+ var infiltrateMourners = new ConditionalStep(this, talkToOmartToEnterWestArdougne);
+ infiltrateMourners.addStep(inMournerBackyard, exitBackyardOfHeadquarters);
+ infiltrateMourners.addStep(and(key, upstairsInMournerBuilding), searchCrateForDistillator);
+ infiltrateMourners.addStep(upstairsInMournerBuilding, killMourner);
+ infiltrateMourners.addStep(inMournerBuilding, goUpstairsInMournerBuilding);
+ infiltrateMourners.addStep(and(inWestArdougne, medicalGown), enterMournerHeadquarters);
+ infiltrateMourners.addStep(inWestArdougne, searchSarahsCupboard);
+
+ steps.put(6, infiltrateMourners);
+
+ var returnToElenaWithDistillator = new ConditionalStep(this, talkToOmartToEnterWestArdougne);
+ returnToElenaWithDistillator.addStep(and(upstairsInMournerBuilding, distillator), goBackDownstairsInMournersHeadquarters);
+ returnToElenaWithDistillator.addStep(and(distillator, inWestArdougne), talkToKilron);
+ returnToElenaWithDistillator.addStep(distillator, talkToElenaWithDistillator);
+
+ returnToElenaWithDistillator.addStep(and(key, upstairsInMournerBuilding), searchCrateForDistillator);
+ returnToElenaWithDistillator.addStep(upstairsInMournerBuilding, killMourner);
+ returnToElenaWithDistillator.addStep(inMournerBuilding, goUpstairsInMournerBuilding);
+ returnToElenaWithDistillator.addStep(and(inWestArdougne, medicalGown), enterMournerHeadquarters);
+ returnToElenaWithDistillator.addStep(inWestArdougne, searchSarahsCupboard);
+
+ steps.put(7, returnToElenaWithDistillator);
+
+ steps.put(10, talkToTheChemist);
+
+ var smuggleInChemicals = new ConditionalStep(this, goToVarrock);
+ smuggleInChemicals.addStep(and(inVarrockSouthEast, liquidHoney, ethenea, sulphuricBroline, hasPriestSet), talkToGuidor);
+ smuggleInChemicals.addStep(and(inVarrockSouthEast, liquidHoney, ethenea, sulphuricBroline, hasNotReceivedFreePriestGownSet), talkToAsyff);
+ smuggleInChemicals.addStep(and(inVarrockSouthEast, liquidHoney, ethenea, sulphuricBroline), talkToAsyffBuy);
+ smuggleInChemicals.addStep(and(inVarrockSouthEast, liquidHoney, ethenea), hopsVarrock);
+ smuggleInChemicals.addStep(and(inVarrockSouthEast, liquidHoney), vinciVarrock);
+ smuggleInChemicals.addStep(inVarrockSouthEast, chancyVarrock);
+ smuggleInChemicals.addStep(hasChemicals, giveChemicals);
+ steps.put(12, smuggleInChemicals);
+
+ steps.put(14, returnToElenaAfterSampling);
+
+ var talkToTheKing = new ConditionalStep(this, informTheKingGoUpstairs);
+ talkToTheKing.addStep(isUpstairsArdougneCastle, informTheKing);
+
+ steps.put(15, talkToTheKing);
+
+ return steps;
+ }
+
@Override
public List getCombatRequirements()
{
- ArrayList reqs = new ArrayList<>();
- reqs.add("Mourner (level 13)");
- return reqs;
+ return List.of(
+ "Mourner (level 13)"
+ );
}
@Override
public List getItemRequirements()
{
- ArrayList reqs = new ArrayList<>();
- reqs.add(gasMask);
- return reqs;
+ return List.of(
+ gasMask
+ );
}
@Override
public List getItemRecommended()
{
- ArrayList reqs = new ArrayList<>();
- reqs.add(teleportArdougne);
- reqs.add(teleportRimmington);
- reqs.add(teleportVarrock);
- reqs.add(coins);
- return reqs;
+ return List.of(
+ teleportArdougne,
+ teleportRimmington,
+ teleportVarrock,
+ coins
+ );
}
@Override
@@ -325,27 +422,62 @@ public QuestPointReward getQuestPointReward()
@Override
public List getExperienceRewards()
{
- return Collections.singletonList(new ExperienceReward(Skill.THIEVING, 1250));
+ return List.of(
+ new ExperienceReward(Skill.THIEVING, 1250)
+ );
+ }
+
+ @Override
+ public List getUnlockRewards()
+ {
+ return List.of(
+ new UnlockReward("Full West Ardougne Access"),
+ new UnlockReward("Combat Training Camp Access")
+ );
}
@Override
public List getPanels()
{
- List allSteps = new ArrayList<>();
- allSteps.add(new PanelDetails("Start the quest", Collections.singletonList(talkToElena), gasMask));
- allSteps.add(new PanelDetails("Getting back into West Ardougne",
- Arrays.asList(talkToJerico, getBirdFeed, getPigeonCage, investigateWatchtower, clickPigeonCage, talkToOmartAgain)));
- allSteps.add(new PanelDetails("Getting the Distillator",
- enterBackyardOfHeadquarters, pickupRottenApple, useRottenAppleOnCauldron, searchSarahsCupboard,
- enterMournerHeadquarters, goUpstairsInMournerBuilding, searchCrateForDistillator, talkToElenaWithDistillator));
+ List sections = new ArrayList<>();
+
+ sections.add(new PanelDetails("Start the quest", List.of(
+ talkToElena
+ ), List.of(
+ gasMask
+ )));
+
+ sections.add(new PanelDetails("Getting back into West Ardougne", List.of(
+ talkToJerico,
+ getBirdFeed,
+ getPigeonCage,
+ investigateWatchtower,
+ clickPigeonCage,
+ talkToOmartToEnterWestArdougne
+ )));
+
+ sections.add(new PanelDetails("Getting the Distillator", List.of(
+ enterBackyardOfHeadquarters,
+ pickupRottenApple,
+ useRottenAppleOnCauldron,
+ searchSarahsCupboard,
+ enterMournerHeadquarters,
+ goUpstairsInMournerBuilding,
+ searchCrateForDistillator,
+ talkToElenaWithDistillator
+ )));
List testingSteps = QuestUtil.toArrayList(talkToTheChemist);
testingSteps.addAll(giveChemicals.getDisplaySteps());
testingSteps.addAll(Arrays.asList(goToVarrock, talkToAsyff, talkToGuidor));
- allSteps.add(new PanelDetails("Testing the plague sample", testingSteps, plagueSample, liquidHoney, ethenea, sulphuricBroline, touchPaper));
+ sections.add(new PanelDetails("Testing the plague sample", testingSteps, plagueSample, liquidHoney, ethenea, sulphuricBroline, touchPaper));
+
+ sections.add(new PanelDetails("Revealing the truth", List.of(
+ returnToElenaAfterSampling,
+ informTheKing
+ )));
- allSteps.add(new PanelDetails("Revealing the truth", returnToElenaAfterSampling, informTheKing));
- return allSteps;
+ return sections;
}
@Override
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/bonevoyage/BoneVoyage.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/bonevoyage/BoneVoyage.java
index 5c6eefca4df..90b3cefaca5 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/bonevoyage/BoneVoyage.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/bonevoyage/BoneVoyage.java
@@ -279,9 +279,8 @@ public List getItemRecommended()
@Override
public List getGeneralRequirements()
{
- final int KUDOS_VARBIT = 3637;
ArrayList req = new ArrayList<>();
- req.add(new VarbitRequirement(KUDOS_VARBIT, Operation.GREATER_EQUAL, 100, "100 Kudos"));
+ req.add(new VarbitRequirement(VarbitID.VM_KUDOS, Operation.GREATER_EQUAL, 100, "100 Kudos"));
req.add(new QuestRequirement(QuestHelperQuest.THE_DIG_SITE, QuestState.FINISHED));
return req;
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/cabinfever/CabinFever.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/cabinfever/CabinFever.java
index fc811f4e24e..d153697408b 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/cabinfever/CabinFever.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/cabinfever/CabinFever.java
@@ -49,6 +49,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import java.util.*;
@@ -411,38 +412,38 @@ public void setupConditions()
onEnemySail = new ZoneRequirement(enemySail);
onEnemyBoat = new ZoneRequirement(enemyBoatF0, enemyBoatF1, enemyBoatF2, enemySail);
- hasSetSail = new VarbitRequirement(1741, 1);
+ hasSetSail = new VarbitRequirement(VarbitID.FEVER_CANNON, 1);
- addedFuse = new VarbitRequirement(1756, 2);
+ addedFuse = new VarbitRequirement(VarbitID.FEVER_GUNPOWDER_BARREL, 2);
hasFuseOrAdded = new Conditions(LogicType.OR, fuse1, addedFuse);
- explodedBarrel = new VarbitRequirement(1756, 1);
+ explodedBarrel = new VarbitRequirement(VarbitID.FEVER_GUNPOWDER_BARREL, 1);
// 1740 1 if swinging
- planked1 = new VarbitRequirement(1751, 1);
- planked2 = new VarbitRequirement(1757, 1);
- planked3 = new VarbitRequirement(1758, 1);
- pasted1 = new VarbitRequirement(1751, 2);
- pasted2 = new VarbitRequirement(1757, 2);
- pasted3 = new VarbitRequirement(1758, 2);
+ planked1 = new VarbitRequirement(VarbitID.FEVER_HOLE_1, 1);
+ planked2 = new VarbitRequirement(VarbitID.FEVER_HOLE_2, 1);
+ planked3 = new VarbitRequirement(VarbitID.FEVER_HOLE_3, 1);
+ pasted1 = new VarbitRequirement(VarbitID.FEVER_HOLE_1, 2);
+ pasted2 = new VarbitRequirement(VarbitID.FEVER_HOLE_2, 2);
+ pasted3 = new VarbitRequirement(VarbitID.FEVER_HOLE_3, 2);
- hasPlanked1 = new VarbitRequirement(1759, 1);
- hasPlanked2 = new VarbitRequirement(1759, 2);
- hasPlanked3 = new VarbitRequirement(1759, 3);
+ hasPlanked1 = new VarbitRequirement(VarbitID.FEVER_HOLES_PATCHED, 1);
+ hasPlanked2 = new VarbitRequirement(VarbitID.FEVER_HOLES_PATCHED, 2);
+ hasPlanked3 = new VarbitRequirement(VarbitID.FEVER_HOLES_PATCHED, 3);
- hasRepaired1 = new VarbitRequirement(1760, 1);
- hasRepaired2 = new VarbitRequirement(1760, 2);
- hasRepaired3 = new VarbitRequirement(1760, 3);
+ hasRepaired1 = new VarbitRequirement(VarbitID.FEVER_HOLES_PROOFED, 1);
+ hasRepaired2 = new VarbitRequirement(VarbitID.FEVER_HOLES_PROOFED, 2);
+ hasRepaired3 = new VarbitRequirement(VarbitID.FEVER_HOLES_PROOFED, 3);
- lootedAll = new Conditions(new VarbitRequirement(1753, 1), new VarbitRequirement(1754, 1), new VarbitRequirement(1755, 1));
+ lootedAll = new Conditions(new VarbitRequirement(VarbitID.FEVER_CRATE, 1), new VarbitRequirement(VarbitID.FEVER_CHEST, 1), new VarbitRequirement(VarbitID.FEVER_BARREL, 1));
- cannonBroken = new VarbitRequirement(1741, 1);
- addedPowder = new VarbitRequirement(1742, 1);
- usedRamrod = new VarbitRequirement(1743, 1);
- usedCanister = new VarbitRequirement(1744, 2);
- usedBalls = new VarbitRequirement(1744, 1);
- usedFuse = new VarbitRequirement(1741, 3);
- firedCannon = new VarbitRequirement(1746, 1);
+ cannonBroken = new VarbitRequirement(VarbitID.FEVER_CANNON, 1);
+ addedPowder = new VarbitRequirement(VarbitID.FEVER_CANNON_POWDER, 1);
+ usedRamrod = new VarbitRequirement(VarbitID.FEVER_CANNON_TAMP, 1);
+ usedCanister = new VarbitRequirement(VarbitID.FEVER_CANNON_AMMO, 2);
+ usedBalls = new VarbitRequirement(VarbitID.FEVER_CANNON_AMMO, 1);
+ usedFuse = new VarbitRequirement(VarbitID.FEVER_CANNON, 3);
+ firedCannon = new VarbitRequirement(VarbitID.FEVER_CANNON_CLEAN, 1);
// SHOTS CAN FAIL
@@ -452,7 +453,7 @@ public void setupConditions()
// Third succesful shot:
// 1750 2->3
- canisterInWrong = new VarbitRequirement(1747, 1);
+ canisterInWrong = new VarbitRequirement(VarbitID.FEVER_CANNON_GONNA_BLOW, 1);
// 1752 = num plunder stashed
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/childrenofthesun/ChildrenOfTheSun.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/childrenofthesun/ChildrenOfTheSun.java
index 9c28e33328c..8b1e3003ad0 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/childrenofthesun/ChildrenOfTheSun.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/childrenofthesun/ChildrenOfTheSun.java
@@ -27,94 +27,94 @@
import net.runelite.client.plugins.microbot.questhelper.panel.PanelDetails;
import net.runelite.client.plugins.microbot.questhelper.questhelpers.BasicQuestHelper;
import net.runelite.client.plugins.microbot.questhelper.requirements.Requirement;
-import net.runelite.client.plugins.microbot.questhelper.requirements.item.ItemRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.npc.NpcRequirement;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.and;
import net.runelite.client.plugins.microbot.questhelper.requirements.var.VarbitRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.zone.Zone;
import net.runelite.client.plugins.microbot.questhelper.requirements.zone.ZoneRequirement;
import net.runelite.client.plugins.microbot.questhelper.rewards.QuestPointReward;
import net.runelite.client.plugins.microbot.questhelper.rewards.UnlockReward;
-import net.runelite.client.plugins.microbot.questhelper.steps.*;
+import net.runelite.client.plugins.microbot.questhelper.steps.ConditionalStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.DetailedQuestStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.MultiNpcStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.NpcStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.ObjectStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.PuzzleWrapperStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.QuestStep;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
-
-import java.util.*;
-
-import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.and;
+import net.runelite.api.gameval.VarbitID;
public class ChildrenOfTheSun extends BasicQuestHelper
{
- DetailedQuestStep talkToAlina, followGuard, attemptToEnterHouse, talkToTobyn,
- reportBackToTobyn, goUpVarrockF0ToF1, goUpVarrockF1toF2, finishQuest;
-
- PuzzleWrapperStep followGuardPuzzleWrapper, markGuard1, markGuard2, markGuard3, markGuard4, unmarkWrongGuard1, unmarkWrongGuard2, unmarkWrongGuard3, unmarkWrongGuard4,
- unmarkWrongGuard5, unmarkWrongGuard6;
+ final int GUARD_1_CHANGE_VARBIT = VarbitID.VMQ1_GUARD_1;
+ final int GUARD_2_CHANGE_VARBIT = VarbitID.VMQ1_GUARD_2;
+ final int GUARD_3_CHANGE_VARBIT = VarbitID.VMQ1_GUARD_3;
+ final int GUARD_4_CHANGE_VARBIT = VarbitID.VMQ1_GUARD_4;
+ final int WRONG_GUARD_1_CHANGE_VARBIT = VarbitID.VMQ1_GUARD_5;
+ final int WRONG_GUARD_2_CHANGE_VARBIT = VarbitID.VMQ1_GUARD_6;
+ final int WRONG_GUARD_3_CHANGE_VARBIT = VarbitID.VMQ1_GUARD_7;
+ final int WRONG_GUARD_4_CHANGE_VARBIT = VarbitID.VMQ1_GUARD_8;
+ final int WRONG_GUARD_5_CHANGE_VARBIT = VarbitID.VMQ1_GUARD_9;
+ final int WRONG_GUARD_6_CHANGE_VARBIT = VarbitID.VMQ1_GUARD_10;
- Zone castleF1, castleF2;
+ // Zones
+ Zone castleF1;
+ Zone castleF2;
- Requirement isFollowing, markedGuard1, markedGuard2, markedGuard3, markedGuard4, markedWrongGuard1,
- markedWrongGuard2, markedWrongGuard3, markedWrongGuard4, markedWrongGuard5, markedWrongGuard6, inCastleF1, inCastleF2;
+ // Miscellaneous requirements
+ Requirement isFollowing;
+ Requirement markedGuard1;
+ Requirement markedGuard2;
+ Requirement markedGuard3;
+ Requirement markedGuard4;
+ Requirement markedWrongGuard1;
+ Requirement markedWrongGuard2;
+ Requirement markedWrongGuard3;
+ Requirement markedWrongGuard4;
+ Requirement markedWrongGuard5;
+ Requirement markedWrongGuard6;
+ Requirement inCastleF1;
+ Requirement inCastleF2;
- final int GUARD_1_CHANGE_VARBIT = 9633;
- final int GUARD_2_CHANGE_VARBIT = 9634;
- final int GUARD_3_CHANGE_VARBIT = 9635;
- final int GUARD_4_CHANGE_VARBIT = 9636;
- final int WRONG_GUARD_1_CHANGE_VARBIT = 9637;
- final int WRONG_GUARD_2_CHANGE_VARBIT = 9640;
- final int WRONG_GUARD_3_CHANGE_VARBIT = 9641;
- final int WRONG_GUARD_4_CHANGE_VARBIT = 9642;
- final int WRONG_GUARD_5_CHANGE_VARBIT = 9643;
- final int WRONG_GUARD_6_CHANGE_VARBIT = 9644;
+ // Steps
+ DetailedQuestStep talkToAlina;
+ DetailedQuestStep followGuard;
+ DetailedQuestStep attemptToEnterHouse;
+ DetailedQuestStep talkToTobyn;
+ DetailedQuestStep reportBackToTobyn;
+ DetailedQuestStep goUpVarrockF0ToF1;
+ DetailedQuestStep goUpVarrockF1toF2;
+ DetailedQuestStep finishQuest;
+ PuzzleWrapperStep followGuardPuzzleWrapper;
+ PuzzleWrapperStep markGuard1;
+ PuzzleWrapperStep markGuard2;
+ PuzzleWrapperStep markGuard3;
+ PuzzleWrapperStep markGuard4;
+ PuzzleWrapperStep unmarkOneOfTheGuards;
+ PuzzleWrapperStep unmarkWrongGuard1;
+ PuzzleWrapperStep unmarkWrongGuard2;
+ PuzzleWrapperStep unmarkWrongGuard3;
+ PuzzleWrapperStep unmarkWrongGuard4;
+ PuzzleWrapperStep unmarkWrongGuard5;
+ PuzzleWrapperStep unmarkWrongGuard6;
@Override
- public Map loadSteps()
+ protected void setupZones()
{
- initializeRequirements();
- setupConditions();
- setupSteps();
- Map steps = new HashMap<>();
-
- // Before start, 9646 0->1, talked a bit to Alina
- steps.put(0, talkToAlina);
- steps.put(2, talkToAlina);
- steps.put(4, talkToAlina);
- ConditionalStep goFollowGuard = new ConditionalStep(this, talkToAlina);
- goFollowGuard.addStep(isFollowing, followGuardPuzzleWrapper);
- steps.put(6, goFollowGuard);
- steps.put(8, attemptToEnterHouse);
- steps.put(10, talkToTobyn);
- ConditionalStep markGuards = new ConditionalStep(this, markGuard1);
- markGuards.addStep(markedWrongGuard1, unmarkWrongGuard1);
- markGuards.addStep(markedWrongGuard2, unmarkWrongGuard2);
- markGuards.addStep(markedWrongGuard3, unmarkWrongGuard3);
- markGuards.addStep(markedWrongGuard4, unmarkWrongGuard4);
- markGuards.addStep(markedWrongGuard5, unmarkWrongGuard5);
- markGuards.addStep(markedWrongGuard6, unmarkWrongGuard6);
- markGuards.addStep(and(markedGuard1, markedGuard2, markedGuard3, markedGuard4), reportBackToTobyn);
- markGuards.addStep(and(markedGuard1, markedGuard2, markedGuard4), markGuard3);
- markGuards.addStep(and(markedGuard1, markedGuard2), markGuard4);
- markGuards.addStep(markedGuard1, markGuard2);
- steps.put(12, markGuards);
- steps.put(14, reportBackToTobyn);
- ConditionalStep goFinishQuest = new ConditionalStep(this, goUpVarrockF0ToF1);
- goFinishQuest.addStep(inCastleF2, finishQuest);
- goFinishQuest.addStep(inCastleF1, goUpVarrockF1toF2);
- steps.put(16, goFinishQuest);
- steps.put(18, goFinishQuest);
- steps.put(20, goFinishQuest);
- steps.put(22, goFinishQuest);
- return steps;
+ castleF1 = new Zone(new WorldPoint(3199, 3465, 1), new WorldPoint(3227, 3500, 1));
+ castleF2 = new Zone(new WorldPoint(3199, 3465, 2), new WorldPoint(3227, 3500, 2));
}
@Override
protected void setupRequirements()
- {
-
- }
-
- public void setupConditions()
{
isFollowing = new NpcRequirement("Guard", NpcID.VMQ1_BAG_GUARD);
markedGuard1 = new VarbitRequirement(GUARD_1_CHANGE_VARBIT, 2);
@@ -129,8 +129,6 @@ public void setupConditions()
markedWrongGuard5 = new VarbitRequirement(WRONG_GUARD_5_CHANGE_VARBIT, 2);
markedWrongGuard6 = new VarbitRequirement(WRONG_GUARD_6_CHANGE_VARBIT, 2);
- castleF1 = new Zone(new WorldPoint(3199, 3465, 1), new WorldPoint(3227, 3500, 1));
- castleF2 = new Zone(new WorldPoint(3199, 3465, 2), new WorldPoint(3227, 3500, 2));
inCastleF1 = new ZoneRequirement(castleF1);
inCastleF2 = new ZoneRequirement(castleF2);
}
@@ -173,17 +171,17 @@ public void setupSteps()
);
followGuardPuzzleWrapper = new PuzzleWrapperStep(this, followGuard, "Follow the guard, keeping out of sight whilst also not letting them get too far away.");
- final int BASE_GUARD_ID = 6923;
+ final int BASE_GUARD_ID = NpcID.VMQ1_GUARD_1;
attemptToEnterHouse = new ObjectStep(this, ObjectID.VMQ1_BANDIT_DOOR, new WorldPoint(3259, 3400, 0),
"Attempt to enter the house in the south-east of Varrock, north of the Zamorak Temple, and watch the cutscene.");
talkToTobyn = new NpcStep(this, NpcID.VMQ1_GUARD_SERGEANT_VIS, new WorldPoint(3211, 3437, 0), "Talk to Sergeant Tobyn in Varrock Square.");
markGuard1 = new PuzzleWrapperStep(this,
new MultiNpcStep(this, NpcID.VMQ1_GUARD_1_UNMARKED, new WorldPoint(3208, 3422, 0),
- "Mark the guard outside Aris's tent.", GUARD_1_CHANGE_VARBIT, BASE_GUARD_ID),
+ "Mark the guard outside Aris's tent.", GUARD_1_CHANGE_VARBIT, BASE_GUARD_ID),
"Mark the suspect guards.");
markGuard2 = new PuzzleWrapperStep(this,
new MultiNpcStep(this, NpcID.VMQ1_GUARD_2_UNMARKED, new WorldPoint(3221, 3430, 0),
- "Mark the guard south east of Benny's news stand, who isn't wearing a helmet and has long hair.", GUARD_1_CHANGE_VARBIT, BASE_GUARD_ID),
+ "Mark the guard south east of Benny's news stand, who isn't wearing a helmet and has long hair.", GUARD_1_CHANGE_VARBIT, BASE_GUARD_ID),
"Mark the suspect guards.").withNoHelpHiddenInSidebar(true);
markGuard3 = new PuzzleWrapperStep(this,
new MultiNpcStep(this, NpcID.VMQ1_GUARD_3_UNMARKED, new WorldPoint(3246, 3429, 0),
@@ -194,31 +192,44 @@ public void setupSteps()
"Mark the guard leaning on the north wall of Lowe's Archery Emporium, east of the square.", GUARD_1_CHANGE_VARBIT, BASE_GUARD_ID),
"Mark the suspect guards.").withNoHelpHiddenInSidebar(true);
+ var realUnmarkOneOfTheGuards = new DetailedQuestStep(this, "One of the guards is incorrectly marked, unmark the one as indicated by the overlay.");
+
unmarkWrongGuard1 = new PuzzleWrapperStep(this,
new MultiNpcStep(this, NpcID.VMQ1_GUARD_5_MARKED, new WorldPoint(3227, 3424, 0),
- "Unmark the guard east of ELiza.", GUARD_1_CHANGE_VARBIT, BASE_GUARD_ID),
+ "Unmark the guard east of Eliza.", GUARD_1_CHANGE_VARBIT, BASE_GUARD_ID),
"Mark the suspect guards.");
unmarkWrongGuard2 = new PuzzleWrapperStep(this,
new MultiNpcStep(this, NpcID.VMQ1_GUARD_6_MARKED, new WorldPoint(3218, 3424, 0),
- "Unmark the guard next to Eliza.", GUARD_1_CHANGE_VARBIT, BASE_GUARD_ID),
+ "Unmark the guard next to Eliza.", GUARD_1_CHANGE_VARBIT, BASE_GUARD_ID),
"Mark the suspect guards.");
unmarkWrongGuard3 = new PuzzleWrapperStep(this,
new MultiNpcStep(this, NpcID.VMQ1_GUARD_7_MARKED, new WorldPoint(3230, 3430, 0),
- "Unmark the guard roaming south of Horvik.", GUARD_1_CHANGE_VARBIT, BASE_GUARD_ID),
+ "Unmark the guard roaming south of Horvik.", GUARD_1_CHANGE_VARBIT, BASE_GUARD_ID),
"Mark the suspect guards.");
unmarkWrongGuard4 = new PuzzleWrapperStep(this,
new MultiNpcStep(this, NpcID.VMQ1_GUARD_8_MARKED, new WorldPoint(3206, 3431, 0),
- "Unmark the guard outside Zaff's Superior Staffs.", GUARD_1_CHANGE_VARBIT, BASE_GUARD_ID),
+ "Unmark the guard outside Zaff's Superior Staffs.", GUARD_1_CHANGE_VARBIT, BASE_GUARD_ID),
"Mark the suspect guards.");
unmarkWrongGuard5 = new PuzzleWrapperStep(this,
new MultiNpcStep(this, NpcID.VMQ1_GUARD_9_MARKED, new WorldPoint(3239, 3433, 0),
- "Unmark the guard next to the small fountain east of Horvik.", GUARD_1_CHANGE_VARBIT, BASE_GUARD_ID),
+ "Unmark the guard next to the small fountain east of Horvik.", GUARD_1_CHANGE_VARBIT, BASE_GUARD_ID),
"Mark the suspect guards.");
unmarkWrongGuard6 = new PuzzleWrapperStep(this,
new MultiNpcStep(this, NpcID.VMQ1_GUARD_10_MARKED, new WorldPoint(3218, 3433, 0),
- "Unmark the guard next to Baraek.", GUARD_1_CHANGE_VARBIT, BASE_GUARD_ID),
+ "Unmark the guard next to Baraek.", GUARD_1_CHANGE_VARBIT, BASE_GUARD_ID),
"Mark the suspect guards.");
+ realUnmarkOneOfTheGuards.addSubSteps(
+ unmarkWrongGuard1,
+ unmarkWrongGuard2,
+ unmarkWrongGuard3,
+ unmarkWrongGuard4,
+ unmarkWrongGuard5,
+ unmarkWrongGuard6
+ );
+
+ unmarkOneOfTheGuards = realUnmarkOneOfTheGuards.puzzleWrapStep(true);
+
reportBackToTobyn = new NpcStep(this, NpcID.VMQ1_GUARD_SERGEANT_VIS, new WorldPoint(3211, 3437, 0),
"Report back to Sergeant Tobyn.");
goUpVarrockF0ToF1 = new ObjectStep(this, ObjectID.FAI_VARROCK_STAIRS_TALLER_NEW_FIX, new WorldPoint(3212, 3474, 0),
@@ -228,18 +239,64 @@ public void setupSteps()
finishQuest = new NpcStep(this, NpcID.VMQ1_GUARD_SERGEANT_VIS, new WorldPoint(3202, 3473, 2),
"Talk to Tobyn on the Varrock Castle's roof to finish the quest.");
finishQuest.addSubSteps(goUpVarrockF1toF2, goUpVarrockF0ToF1);
- }
- @Override
- public List getItemRequirements()
- {
- return null;
+ // Upon finishing the quest:
+ // [2025-08-05T22:15:32Z 385] varbit VMQ1_QUESTCOMPLETE_TYPE (9645) 0 -> 2
+ // [2025-08-05T22:15:32Z 385] varbit VMQ2_FIRST_TRAVEL (9652) 0 -> 1
+ //
+ // When talking to Regulus Cento after finishing the quest:
+ // [2025-08-06T09:20:25Z 306] varbit VMQ2_FIRST_TRAVEL (9652) 1 -> 2
+ // Dialogue option is: "Let's do it!"
+ //
+ // After traveling:
+ // [2025-08-06T09:21:47Z 442] varbit VARLAMORE_VISITED (9650) 0 -> 1
+ // [2025-08-06T09:21:47Z 442] varbit VMQ2_FIRST_TRAVEL (9652) 2 -> 3
+ //
+ // When landing, you're put in a conversation with Regulus.
+ // When finishing that conversation:
+ // [2025-08-06T09:22:54Z 554] varbit VMQ2_FIRST_TRAVEL (9652) 3 -> 4
+
}
@Override
- public List getItemRecommended()
+ public Map loadSteps()
{
- return null;
+ initializeRequirements();
+ setupSteps();
+
+ var steps = new HashMap();
+
+ // Before start, 9646 0->1, talked a bit to Alina
+ steps.put(0, talkToAlina);
+ steps.put(2, talkToAlina);
+ steps.put(4, talkToAlina);
+ var goFollowGuard = new ConditionalStep(this, talkToAlina);
+ goFollowGuard.addStep(isFollowing, followGuardPuzzleWrapper);
+ steps.put(6, goFollowGuard);
+ steps.put(8, attemptToEnterHouse);
+ steps.put(10, talkToTobyn);
+ var markGuards = new ConditionalStep(this, markGuard1);
+ markGuards.addStep(markedWrongGuard1, unmarkWrongGuard1);
+ markGuards.addStep(markedWrongGuard2, unmarkWrongGuard2);
+ markGuards.addStep(markedWrongGuard3, unmarkWrongGuard3);
+ markGuards.addStep(markedWrongGuard4, unmarkWrongGuard4);
+ markGuards.addStep(markedWrongGuard5, unmarkWrongGuard5);
+ markGuards.addStep(markedWrongGuard6, unmarkWrongGuard6);
+ markGuards.addStep(and(markedGuard1, markedGuard2, markedGuard3, markedGuard4), reportBackToTobyn);
+ markGuards.addStep(and(markedGuard1, markedGuard2, markedGuard4), markGuard3);
+ markGuards.addStep(and(markedGuard1, markedGuard2), markGuard4);
+ markGuards.addStep(markedGuard1, markGuard2);
+ steps.put(12, markGuards);
+ steps.put(14, reportBackToTobyn);
+ var goFinishQuest = new ConditionalStep(this, goUpVarrockF0ToF1);
+ goFinishQuest.addStep(inCastleF2, finishQuest);
+ goFinishQuest.addStep(inCastleF1, goUpVarrockF1toF2);
+ steps.put(16, goFinishQuest);
+ steps.put(18, goFinishQuest);
+ steps.put(20, goFinishQuest);
+ steps.put(22, goFinishQuest);
+
+ return steps;
}
@Override
@@ -259,9 +316,22 @@ public List getUnlockRewards()
@Override
public List getPanels()
{
- List allSteps = new ArrayList<>();
- allSteps.add(new PanelDetails("Intrigue", Arrays.asList(talkToAlina, followGuardPuzzleWrapper,
- attemptToEnterHouse, talkToTobyn, markGuard1, markGuard2, markGuard4, markGuard3, reportBackToTobyn, finishQuest)));
+ var allSteps = new ArrayList();
+
+ allSteps.add(new PanelDetails("Intrigue", List.of(
+ talkToAlina,
+ followGuardPuzzleWrapper,
+ attemptToEnterHouse,
+ talkToTobyn,
+ markGuard1,
+ markGuard2,
+ markGuard4,
+ markGuard3,
+ unmarkOneOfTheGuards,
+ reportBackToTobyn,
+ finishQuest
+ )));
+
return allSteps;
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/clientofkourend/ClientOfKourend.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/clientofkourend/ClientOfKourend.java
index c0feee85135..b235536b897 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/clientofkourend/ClientOfKourend.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/clientofkourend/ClientOfKourend.java
@@ -29,98 +29,83 @@
import net.runelite.client.plugins.microbot.questhelper.questhelpers.BasicQuestHelper;
import net.runelite.client.plugins.microbot.questhelper.questinfo.QuestHelperQuest;
import net.runelite.client.plugins.microbot.questhelper.requirements.Requirement;
-import net.runelite.client.plugins.microbot.questhelper.requirements.conditional.Conditions;
import net.runelite.client.plugins.microbot.questhelper.requirements.item.ItemRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.quest.QuestRequirement;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.and;
import net.runelite.client.plugins.microbot.questhelper.requirements.var.VarbitRequirement;
import net.runelite.client.plugins.microbot.questhelper.rewards.ItemReward;
import net.runelite.client.plugins.microbot.questhelper.rewards.QuestPointReward;
+import net.runelite.client.plugins.microbot.questhelper.rewards.UnlockReward;
import net.runelite.client.plugins.microbot.questhelper.steps.ConditionalStep;
import net.runelite.client.plugins.microbot.questhelper.steps.DetailedQuestStep;
import net.runelite.client.plugins.microbot.questhelper.steps.NpcStep;
import net.runelite.client.plugins.microbot.questhelper.steps.QuestStep;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import net.runelite.api.QuestState;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
-
-import java.util.*;
+import net.runelite.api.gameval.VarbitID;
public class ClientOfKourend extends BasicQuestHelper
{
- //Items Required
+ // Required items
ItemRequirement feather;
-
- //Items Recommended
- ItemRequirement gamesNecklace;
-
- //Other items used
- ItemRequirement enchantedScroll, enchantedQuill, mysteriousOrb;
-
- Requirement talkedToLeenz, talkedToHorace, talkedToJennifer, talkedToMunty, talkedToRegath;
-
- QuestStep talkToVeos, useFeatherOnScroll, talkToLeenz, talkToHorace, talkToJennifer, talkToMunty, talkToRegath, returnToVeos, goToAltar, finishQuest;
-
- @Override
- public Map loadSteps()
- {
- initializeRequirements();
- setupConditions();
- setupSteps();
- Map steps = new HashMap<>();
-
- steps.put(0, talkToVeos);
-
- ConditionalStep makeEnchantedQuill = new ConditionalStep(this, talkToVeos);
- makeEnchantedQuill.addStep(new Conditions(enchantedQuill, talkedToLeenz, talkedToRegath, talkedToMunty, talkedToJennifer), talkToHorace);
- makeEnchantedQuill.addStep(new Conditions(enchantedQuill, talkedToLeenz, talkedToRegath, talkedToMunty), talkToJennifer);
- makeEnchantedQuill.addStep(new Conditions(enchantedQuill, talkedToLeenz, talkedToRegath), talkToMunty);
- makeEnchantedQuill.addStep(new Conditions(enchantedQuill, talkedToLeenz), talkToRegath);
- makeEnchantedQuill.addStep(new Conditions(enchantedQuill), talkToLeenz);
- makeEnchantedQuill.addStep(enchantedScroll, useFeatherOnScroll);
- steps.put(1, makeEnchantedQuill);
-
- steps.put(2, returnToVeos);
- ConditionalStep takeOrbToAltar = new ConditionalStep(this, returnToVeos);
- takeOrbToAltar.addStep(mysteriousOrb, goToAltar);
+ // Recommended items
+ ItemRequirement gamesNecklace;
+ ItemRequirement coinsForMinecart;
- steps.put(3, returnToVeos);
+ // Miscellaneus requirements
+ ItemRequirement enchantedScroll;
+ ItemRequirement enchantedQuill;
+ ItemRequirement mysteriousOrb;
+ VarbitRequirement talkedToLeenz;
+ VarbitRequirement talkedToHorace;
+ VarbitRequirement talkedToJennifer;
+ VarbitRequirement talkedToMunty;
+ VarbitRequirement talkedToRegath;
- steps.put(4, takeOrbToAltar);
+ // Steps
+ QuestStep talkToVeos;
+ QuestStep useFeatherOnScroll;
+ QuestStep talkToLeenz;
+ QuestStep talkToHorace;
+ QuestStep talkToJennifer;
+ QuestStep talkToMunty;
+ QuestStep talkToRegath;
+ QuestStep returnToVeos;
+ QuestStep goToAltar;
+ QuestStep finishQuest;
- steps.put(5, finishQuest);
- steps.put(6, finishQuest);
-
- return steps;
- }
@Override
protected void setupRequirements()
{
+ talkedToLeenz = new VarbitRequirement(VarbitID.VEOS_PISCARILIUS, 1);
+ talkedToRegath = new VarbitRequirement(VarbitID.VEOS_ARCEUUS, 1);
+ talkedToMunty = new VarbitRequirement(VarbitID.VEOS_LOVAKENGJ, 1);
+ talkedToJennifer = new VarbitRequirement(VarbitID.VEOS_SHAYZIEN, 1);
+ talkedToHorace = new VarbitRequirement(VarbitID.VEOS_HOSIDIUS, 1);
+
feather = new ItemRequirement("Feather", ItemID.FEATHER);
feather.setTooltip("Can be purchased from Gerrant's Fishy Business in Port Sarim.");
feather.addAlternates(ItemID.HUNTING_POLAR_FEATHER, ItemID.HUNTING_WOODLAND_FEATHER, ItemID.HUNTING_JUNGLE_FEATHER, ItemID.HUNTING_DESERT_FEATHER,
ItemID.HUNTING_EAGLE_FEATHER, ItemID.HUNTING_STRIPY_BIRD_FEATHER);
feather.setHighlightInInventory(true);
gamesNecklace = new ItemRequirement("Games necklace", ItemCollections.GAMES_NECKLACES);
+ coinsForMinecart = new ItemRequirement("Coins", ItemCollections.COINS, 100);
+ coinsForMinecart.setTooltip("For travel with the Lovakengj Minecart Network.");
enchantedScroll = new ItemRequirement("Enchanted scroll", ItemID.VEOS_SCROLL);
- enchantedScroll.setHighlightInInventory(true);
mysteriousOrb = new ItemRequirement("Mysterious orb", ItemID.VEOS_ORB);
mysteriousOrb.setHighlightInInventory(true);
enchantedQuill = new ItemRequirement("Enchanted quill", ItemID.VEOS_QUILL);
}
- public void setupConditions()
- {
- talkedToLeenz = new VarbitRequirement(5620, 1);
- talkedToRegath = new VarbitRequirement(5621, 1);
- talkedToMunty = new VarbitRequirement(5622, 1);
- talkedToJennifer = new VarbitRequirement(5623, 1);
- talkedToHorace = new VarbitRequirement(5624, 1);
- }
-
public void setupSteps()
{
talkToVeos = new NpcStep(this, NpcID.VEOS_VIS_AMULET, new WorldPoint(1824, 3690, 0),
@@ -130,54 +115,92 @@ public void setupSteps()
talkToVeos.addDialogStep("Have you got any quests for me?");
talkToVeos.addDialogStep("Let's talk about your client...");
talkToVeos.addDialogStep("I've lost something you've given me.");
+ talkToVeos.addDialogStep("Yes.");
- useFeatherOnScroll = new DetailedQuestStep(this, "Use a feather on the Enchanted Scroll.", feather, enchantedScroll);
+ useFeatherOnScroll = new DetailedQuestStep(this, "Use a feather on the Enchanted Scroll.", feather, enchantedScroll.highlighted());
- talkToLeenz = new NpcStep(this, NpcID.PISCARILIUS_GENERALSTORE_KEEPER, new WorldPoint(1807, 3726, 0), "Talk to Leenz in Port Piscarilius general store.", enchantedQuill);
+ talkToLeenz = new NpcStep(this, NpcID.PISCARILIUS_GENERALSTORE_KEEPER, new WorldPoint(1807, 3726, 0), "Talk to Leenz in Port Piscarilius general store.", enchantedScroll, enchantedQuill);
talkToLeenz.addDialogStep("Can I ask you about Port Piscarilius?");
talkToLeenz.addDialogStep("What is there to do in Port Piscarilius?");
- talkToHorace = new NpcStep(this, NpcID.HOSIDIUS_GENERALSTORE, new WorldPoint(1774, 3589, 0), "Talk to Horace in the Hosidius general store.", enchantedQuill);
+ talkToHorace = new NpcStep(this, NpcID.HOSIDIUS_GENERALSTORE, new WorldPoint(1774, 3589, 0), "Talk to Horace in the Hosidius general store. You can take the Lovakengj Minecart Network to Hosidius South.", enchantedScroll, enchantedQuill);
talkToHorace.addDialogStep("Can I ask you about Hosidius?");
talkToHorace.addDialogStep("What is there to do in Hosidius?");
- talkToJennifer = new NpcStep(this, NpcID.SHAYZIEN_GENERALSTORE, new WorldPoint(1518, 3586, 0), "Talk to Jennifer in Shayzien general store.", enchantedQuill);
+ talkToJennifer = new NpcStep(this, NpcID.SHAYZIEN_GENERALSTORE, new WorldPoint(1518, 3586, 0), "Talk to Jennifer in Shayzien general store. You can run west towards the bank and use the Lovakengj Minecart Network to Shayzien East.", enchantedScroll, enchantedQuill);
talkToJennifer.addDialogStep("Can I ask you about Shayzien?");
talkToJennifer.addDialogStep("What is there to do in Shayzien?");
- talkToMunty = new NpcStep(this, NpcID.LOVAKENGJ_GENERALSTORE, new WorldPoint(1551, 3752, 0), "Talk to Munty in Lovakengj general store.", enchantedQuill);
+ talkToMunty = new NpcStep(this, NpcID.LOVAKENGJ_GENERALSTORE, new WorldPoint(1551, 3752, 0), "Talk to Munty in Lovakengj general store. You can run south towards Kingstown and use the Lovakengj Minecart Network to Lovakengj.", enchantedScroll, enchantedQuill);
talkToMunty.addDialogStep("Can I ask you about Lovakengj?");
talkToMunty.addDialogStep("What is there to do in Lovakengj?");
- talkToRegath = new NpcStep(this, NpcID.ARCEUUS_GENERALSTORE, new WorldPoint(1720, 3724, 0), "Talk to Regath in Arceuus general store.", enchantedQuill);
+ talkToRegath = new NpcStep(this, NpcID.ARCEUUS_GENERALSTORE, new WorldPoint(1720, 3724, 0), "Talk to Regath in Arceuus general store.", enchantedScroll, enchantedQuill);
talkToRegath.addDialogStep("Can I ask you about Arceuus?");
talkToRegath.addDialogStep("What is there to do in Arceuus?");
returnToVeos = new NpcStep(this, NpcID.VEOS_VIS_AMULET, new WorldPoint(1824, 3690, 0), "Return to Veos on Piscarilius docks.");
returnToVeos.addDialogStep("Let's talk about your client...");
returnToVeos.addDialogStep("I've lost something you've given me.");
- goToAltar = new DetailedQuestStep(this, new WorldPoint(1712, 3883, 0), "Activate the mysterious orb at the Dark Altar. You can either run there through Arceuus, teleport to Wintertodt with the Games Necklace and run south, or teleport straight there on the Arceuus spellbook.", mysteriousOrb);
+ goToAltar = new DetailedQuestStep(this, new WorldPoint(1712, 3883, 0), "Activate the mysterious orb at the Dark Altar. You can either run there through Arceuus, teleport to Wintertodt with the Games Necklace and run south, teleport straight there on the Arceuus spellbook, or use the Lovakengj Minecart Network to travel to Arceuus.", mysteriousOrb);
- finishQuest = new NpcStep(this, NpcID.VEOS_VIS_AMULET, new WorldPoint(1824, 3690, 0), "Return to Veos on Piscarilius docks.");
+ finishQuest = new NpcStep(this, NpcID.VEOS_VIS_AMULET, new WorldPoint(1824, 3690, 0), "Return to Veos on Piscarilius docks. You can take the Lovakengj Minecart Network from Arceuus to Port Piscarilius and run south-east.");
finishQuest.addDialogStep("Let's talk about your client...");
}
@Override
- public List getItemRequirements()
+ public Map loadSteps()
+ {
+ initializeRequirements();
+ setupSteps();
+
+ var steps = new HashMap();
+
+ steps.put(0, talkToVeos);
+
+ var makeEnchantedQuill = new ConditionalStep(this, talkToVeos);
+ makeEnchantedQuill.addStep(and(enchantedScroll, enchantedQuill, talkedToLeenz, talkedToRegath, talkedToMunty, talkedToJennifer), talkToHorace);
+ makeEnchantedQuill.addStep(and(enchantedScroll, enchantedQuill, talkedToLeenz, talkedToRegath, talkedToMunty), talkToJennifer);
+ makeEnchantedQuill.addStep(and(enchantedScroll, enchantedQuill, talkedToLeenz, talkedToRegath), talkToMunty);
+ makeEnchantedQuill.addStep(and(enchantedScroll, enchantedQuill, talkedToLeenz), talkToRegath);
+ makeEnchantedQuill.addStep(and(enchantedScroll, enchantedQuill), talkToLeenz);
+ makeEnchantedQuill.addStep(enchantedScroll, useFeatherOnScroll);
+ steps.put(1, makeEnchantedQuill);
+
+ steps.put(2, returnToVeos);
+
+ var takeOrbToAltar = new ConditionalStep(this, returnToVeos);
+ takeOrbToAltar.addStep(mysteriousOrb, goToAltar);
+
+ steps.put(3, returnToVeos);
+
+ steps.put(4, takeOrbToAltar);
+
+ steps.put(5, finishQuest);
+ steps.put(6, finishQuest);
+
+ return steps;
+ }
+
+ @Override
+ public List getGeneralRequirements()
{
- ArrayList reqs = new ArrayList<>();
- reqs.add(feather);
- return reqs;
+ return List.of(
+ new QuestRequirement(QuestHelperQuest.X_MARKS_THE_SPOT, QuestState.FINISHED)
+ );
}
-
+
@Override
- public List getItemRecommended()
+ public List getItemRequirements()
{
- return Arrays.asList(gamesNecklace);
+ return List.of(
+ feather
+ );
}
-
+
@Override
- public List getGeneralRequirements()
+ public List getItemRecommended()
{
- List reqs = new ArrayList<>();
- reqs.add(new QuestRequirement(QuestHelperQuest.X_MARKS_THE_SPOT, QuestState.FINISHED));
- return reqs;
+ return List.of(
+ gamesNecklace,
+ coinsForMinecart
+ );
}
@Override
@@ -189,19 +212,46 @@ public QuestPointReward getQuestPointReward()
@Override
public List getItemRewards()
{
- return Arrays.asList(
- new ItemReward("500 Experience Lamps (Any Skill)", ItemID.THOSF_REWARD_LAMP, 2), //4447 Placeholder until confirmed.
- new ItemReward("Kharedst's Memoirs", ItemID.VEOS_KHAREDSTS_MEMOIRS, 1));
+ return List.of(
+ new ItemReward("500 Experience Lamps (Any Skill)", ItemID.THOSF_REWARD_LAMP, 2), //4447 Placeholder until confirmed.
+ new ItemReward("Kharedst's Memoirs", ItemID.VEOS_KHAREDSTS_MEMOIRS, 1)
+ );
+ }
+
+ @Override
+ public List getUnlockRewards()
+ {
+ return List.of(
+ new UnlockReward("Ability to use the Kourend Castle Teleport spell")
+ );
}
@Override
public List getPanels()
{
- List allSteps = new ArrayList<>();
+ var sections = new ArrayList();
+
+ sections.add(new PanelDetails("Starting off", List.of(
+ talkToVeos,
+ useFeatherOnScroll
+ ), List.of(
+ feather
+ )));
+
+ sections.add(new PanelDetails("Learn about Kourend", List.of(
+ talkToLeenz,
+ talkToRegath,
+ talkToMunty,
+ talkToJennifer,
+ talkToHorace,
+ returnToVeos
+ )));
+
+ sections.add(new PanelDetails("The Dark Altar", List.of(
+ goToAltar,
+ finishQuest
+ )));
- allSteps.add(new PanelDetails("Starting off", Arrays.asList(talkToVeos, useFeatherOnScroll), feather));
- allSteps.add(new PanelDetails("Learn about Kourend", Arrays.asList(talkToLeenz, talkToRegath, talkToMunty, talkToJennifer, talkToHorace, returnToVeos)));
- allSteps.add(new PanelDetails("The Dark Altar", Arrays.asList(goToAltar, finishQuest)));
- return allSteps;
+ return sections;
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/clocktower/ClockTower.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/clocktower/ClockTower.java
index b0afaea4ad9..2ff138277c3 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/clocktower/ClockTower.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/clocktower/ClockTower.java
@@ -34,6 +34,10 @@
import net.runelite.client.plugins.microbot.questhelper.requirements.conditional.Conditions;
import net.runelite.client.plugins.microbot.questhelper.requirements.conditional.ObjectCondition;
import net.runelite.client.plugins.microbot.questhelper.requirements.item.ItemRequirement;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.and;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.nor;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.not;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.or;
import net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicType;
import net.runelite.client.plugins.microbot.questhelper.requirements.var.VarplayerRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.widget.WidgetTextRequirement;
@@ -41,116 +45,119 @@
import net.runelite.client.plugins.microbot.questhelper.requirements.zone.ZoneRequirement;
import net.runelite.client.plugins.microbot.questhelper.rewards.ItemReward;
import net.runelite.client.plugins.microbot.questhelper.rewards.QuestPointReward;
-import net.runelite.client.plugins.microbot.questhelper.steps.*;
+import net.runelite.client.plugins.microbot.questhelper.steps.ConditionalStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.DetailedQuestStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.ItemStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.NpcStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.ObjectStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.QuestStep;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.gameval.InterfaceID;
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
-import java.util.*;
-
public class ClockTower extends BasicQuestHelper
{
- ItemRequirement bucketOfWater, noteAboutWater, staminaPotions, ardougneCloak, redCog, blueCog, blackCog, whiteCog, ratPoison;
-
- Zone basement, firstFloor, secondFloor, groundFloor, secretPath, secretPath2, secretPath3, secretPath4,
- secretPath5, secretPath6, cell;
-
- Requirement inBasement, inGroundFloor, inFirstFloor, inSecondFloor, inSecretPath, inCell, startedQuestDuringSession,
- synced, firstLeverDown, pulledFirstLeverUp, secondLeverUp, poisonedRats, placedRedCog, placedBlueCog, placedWhiteCog,
- placedBlackCog;
-
- QuestStep talkToKojo, syncStep;
-
- QuestStep enterBasement, pickUpRedCog, climbToGroundFloorFromBasement, redCogOnRedSpindle;
-
- QuestStep goToLadderCedric, pushWall, climbCellLadder, pickUpBlueCog, climbToFirstFloor, blueCogOnBlueSpindle;
-
- QuestStep climbFromFirstFloorToGround, pickupBlackCog, blackCogOnBlackSpindle;
-
- QuestStep northWesternDoor, pickUpRatPoison, pullFirstLever, ratPoisonFood, westernGate, pickUpWhiteCog, climbWhiteLadder,
- climbToSecondFloor, whiteCogOnWhiteSpindle, climbFromSecondFloorToFirst;
-
- QuestStep kojoReward;
-
- ConditionalStep getRedCog, getBlueCog, getBlackCog, getWhiteCog;
-
- ConditionalStep goToBasementForRed, goToBasementForBlue, goToBasementForBlack, goToBasementForWhite,
- goToFirstFloorWithBlueCog, goToGroundFloorWithRedCog, goToBasementWithBlackCog, goToSecondFloorWithWhiteCog,
- goFinishQuest;
-
-
- @Override
- public Map loadSteps()
- {
- initializeRequirements();
- setupConditions();
- setupSteps();
-
- Map steps = new HashMap<>();
-
- ConditionalStep goStart = new ConditionalStep(this, talkToKojo);
- // This is so we can lock the startedQuestDuringSession to true, so we don't need to ask to sync after
- goStart.addStep(startedQuestDuringSession, talkToKojo);
-
- steps.put(0, talkToKojo);
-
- getRedCog = new ConditionalStep(this, goToBasementForRed);
- getRedCog.addStep(redCog, goToGroundFloorWithRedCog);
- getRedCog.addStep(inBasement, pickUpRedCog);
-
- getBlueCog = new ConditionalStep(this, goToBasementForBlue);
- getBlueCog.addStep(blueCog, goToFirstFloorWithBlueCog);
- getBlueCog.addStep(inCell, pickUpBlueCog);
- getBlueCog.addStep(inSecretPath, pushWall);
-
- getBlackCog = new ConditionalStep(this, goToBasementForBlack);
- getBlackCog.addStep(blackCog, goToBasementWithBlackCog);
- getBlackCog.addStep(inBasement, pickupBlackCog);
-
- getWhiteCog = new ConditionalStep(this, goToBasementForWhite);
- getWhiteCog.addStep(new Conditions(whiteCog, inBasement), climbWhiteLadder);
- getWhiteCog.addStep(new Conditions(whiteCog), goToSecondFloorWithWhiteCog);
- getWhiteCog.addStep(new Conditions(inBasement, pulledFirstLeverUp, poisonedRats), pickUpWhiteCog);
- getWhiteCog.addStep(new Conditions(inBasement, ratPoison, pulledFirstLeverUp), ratPoisonFood);
- getWhiteCog.addStep(new Conditions(inBasement, ratPoison), pullFirstLever);
- getWhiteCog.addStep(inBasement, pickUpRatPoison);
-
- ConditionalStep doQuest = new ConditionalStep(this, syncStep);
- doQuest.addStep(new Conditions(placedRedCog, placedBlueCog, placedBlackCog, placedWhiteCog, synced), goFinishQuest);
- doQuest.addStep(new Conditions(placedRedCog, placedBlueCog, placedBlackCog, synced), getWhiteCog);
- doQuest.addStep(new Conditions(placedRedCog, placedBlueCog, synced), getBlackCog);
- doQuest.addStep(new Conditions(placedRedCog, synced), getBlueCog);
- doQuest.addStep(synced, getRedCog);
- steps.put(1, doQuest);
- steps.put(2, doQuest);
- steps.put(3, doQuest);
- steps.put(4, doQuest);
- steps.put(5, goFinishQuest);
- steps.put(6, goFinishQuest);
- steps.put(7, goFinishQuest);
-
- return steps;
- }
-
- @Override
- protected void setupRequirements()
- {
- bucketOfWater = new ItemRequirement("Bucket of Water or a pair of ice gloves or smiths gloves(i)", ItemID.BUCKET_WATER);
- bucketOfWater.addAlternates(ItemID.ICE_GLOVES, ItemID.SMITHING_UNIFORM_GLOVES_ICE);
- bucketOfWater.setTooltip("There is a bucket spawn next to the well east of the Clocktower. You can fill it on" +
- " the well");
- noteAboutWater = new ItemRequirement("There's a bucket and a well and just next to brother cedric for the black cog", -1, -1);
- staminaPotions = new ItemRequirement("Stamina Potions", ItemCollections.STAMINA_POTIONS);
- ardougneCloak = new ItemRequirement("Ardougne Cloak to teleport to monastery", ItemID.ARDY_CAPE_EASY);
- ardougneCloak.addAlternates(ItemID.ARDY_CAPE_MEDIUM, ItemID.ARDY_CAPE_HARD, ItemID.ARDY_CAPE_ELITE);
- redCog = new ItemRequirement("Red Cog", ItemID.REDCOG);
- blueCog = new ItemRequirement("Blue Cog", ItemID.BLUECOG);
- whiteCog = new ItemRequirement("White Cog", ItemID.WHITECOG);
- blackCog = new ItemRequirement("Black Cog", ItemID.BLACKCOG);
- ratPoison = new ItemRequirement("Rat Poison", ItemID.RAT_POISON);
- }
+ // Required items
+ ItemRequirement bucketOfWater;
+
+ // Recommended items
+ ItemRequirement staminaPotions;
+ ItemRequirement ardougneCloak;
+
+ // Zones
+ Zone basement;
+ Zone firstFloor;
+ Zone secondFloor;
+ Zone groundFloor;
+ Zone secretPath;
+ Zone secretPath2;
+ Zone secretPath3;
+ Zone secretPath4;
+ Zone secretPath5;
+ Zone secretPath6;
+ Zone cell;
+
+ // Miscellaneous requirements
+ ItemRequirement emptyBucket;
+ ItemRequirement noteAboutWater;
+ ItemRequirement redCog;
+ ItemRequirement blueCog;
+ ItemRequirement blackCog;
+ ItemRequirement whiteCog;
+ ItemRequirement ratPoison;
+
+ ZoneRequirement inBasement;
+ ZoneRequirement inGroundFloor;
+ ZoneRequirement inFirstFloor;
+ ZoneRequirement inSecondFloor;
+ ZoneRequirement inSecretPath;
+ ZoneRequirement inCell;
+ Requirement startedQuestDuringSession;
+ Requirement synced;
+ ObjectCondition firstLeverDown;
+ ObjectCondition pulledFirstLeverUp;
+ ObjectCondition secondLeverUp;
+ ChatMessageRequirement poisonedRats;
+ Requirement placedRedCog;
+ Requirement placedBlueCog;
+ Requirement placedWhiteCog;
+ Requirement placedBlackCog;
+
+ // Steps
+ NpcStep talkToKojo;
+ QuestStep syncStep;
+
+ ObjectStep enterBasement;
+ DetailedQuestStep pickUpRedCog;
+ ObjectStep climbToGroundFloorFromBasement;
+ ObjectStep redCogOnRedSpindle;
+
+ ItemStep getBucket;
+ ObjectStep fillBucket;
+ ObjectStep goToLadderCedric;
+ ObjectStep pushWall;
+ ObjectStep climbCellLadder;
+ DetailedQuestStep pickUpBlueCog;
+ ObjectStep climbToFirstFloor;
+ ObjectStep blueCogOnBlueSpindle;
+
+ ObjectStep climbFromFirstFloorToGround;
+ DetailedQuestStep pickupBlackCog;
+ ObjectStep blackCogOnBlackSpindle;
+
+ ObjectStep northWesternDoor;
+ DetailedQuestStep pickUpRatPoison;
+ ObjectStep pullFirstLever;
+ ObjectStep ratPoisonFood;
+ ObjectStep westernGate;
+ DetailedQuestStep pickUpWhiteCog;
+ ObjectStep climbWhiteLadder;
+ ObjectStep climbToSecondFloor;
+ ObjectStep whiteCogOnWhiteSpindle;
+ ObjectStep climbFromSecondFloorToFirst;
+
+ NpcStep finishQuest;
+
+ ConditionalStep getRedCog;
+ ConditionalStep getBlueCog;
+ ConditionalStep getBlackCog;
+ ConditionalStep getWhiteCog;
+
+ ConditionalStep goToBasementForRed;
+ ConditionalStep goToBasementForBlue;
+ ConditionalStep goToBasementForBlack;
+ ConditionalStep goToBasementForWhite;
+ ConditionalStep goToFirstFloorWithBlueCog;
+ ConditionalStep goToGroundFloorWithRedCog;
+ ConditionalStep goToBasementWithBlackCog;
+ ConditionalStep goToSecondFloorWithWhiteCog;
+ ConditionalStep goFinishQuest;
@Override
protected void setupZones()
@@ -168,7 +175,8 @@ protected void setupZones()
cell = new Zone(new WorldPoint(2571, 9630, 0), new WorldPoint(2575, 9633, 0));
}
- public void setupConditions()
+ @Override
+ protected void setupRequirements()
{
inSecondFloor = new ZoneRequirement(secondFloor);
inFirstFloor = new ZoneRequirement(firstFloor);
@@ -205,13 +213,29 @@ public void setupConditions()
new WidgetTextRequirement(InterfaceID.Questjournal.TEXTLAYER, true, "I have successfully placed the White Cog on its spindle"),
new ChatMessageRequirement(inSecondFloor, "The cog fits perfectly.")
);
+
+ bucketOfWater = new ItemRequirement("Bucket of Water or a pair of ice gloves or smiths gloves(i)", ItemID.BUCKET_WATER);
+ bucketOfWater.addAlternates(ItemID.ICE_GLOVES, ItemID.SMITHING_UNIFORM_GLOVES_ICE);
+ bucketOfWater.setTooltip("There is a bucket spawn next to the well east of the Clock Tower. You can fill it on the well");
+
+ emptyBucket = new ItemRequirement("Bucket", ItemID.BUCKET_EMPTY);
+
+ noteAboutWater = new ItemRequirement("There's a bucket and a well and just next to brother cedric for the black cog", -1, -1);
+ staminaPotions = new ItemRequirement("Stamina Potions", ItemCollections.STAMINA_POTIONS);
+ ardougneCloak = new ItemRequirement("Ardougne Cloak to teleport to monastery", ItemID.ARDY_CAPE_EASY);
+ ardougneCloak.addAlternates(ItemID.ARDY_CAPE_MEDIUM, ItemID.ARDY_CAPE_HARD, ItemID.ARDY_CAPE_ELITE);
+ redCog = new ItemRequirement("Red Cog", ItemID.REDCOG);
+ blueCog = new ItemRequirement("Blue Cog", ItemID.BLUECOG);
+ whiteCog = new ItemRequirement("White Cog", ItemID.WHITECOG);
+ blackCog = new ItemRequirement("Black Cog", ItemID.BLACKCOG);
+ ratPoison = new ItemRequirement("Rat Poison", ItemID.RAT_POISON);
}
public void setupSteps()
{
// TODO: Need to determine to what degree PuzzleWrapperStep should be used in this quest
- talkToKojo = new NpcStep(this, NpcID.BROTHER_KOJO, new WorldPoint(2570, 3245, 0), "Talk to Brother Kojo at the clock tower.");
- talkToKojo.addDialogStep("OK old monk, what can I do?");
+ talkToKojo = new NpcStep(this, NpcID.BROTHER_KOJO, new WorldPoint(2570, 3245, 0), "Talk to Brother Kojo in the Clock Tower to start the quest.");
+ talkToKojo.addDialogStep("Yes.");
syncStep = new DetailedQuestStep(this, "Open your Quest Journal to sync your current state.");
@@ -221,24 +245,26 @@ public void setupSteps()
"Use the red cog on the red spindle.", redCog.highlighted());
redCogOnRedSpindle.addIcon(ItemID.REDCOG);
+ getBucket = new ItemStep(this, new WorldPoint(2616, 3255, 0), "Get the bucket next to Brother Cedric, north of the monastery, and fill it up on the well next to it for the Black cog step. If you have other plans for the black cog, you can ignore this step by going down the nearby ladder.", emptyBucket);
+ fillBucket = new ObjectStep(this, ObjectID.WELL, new WorldPoint(2612, 3254, 0), "Get the bucket next to Brother Cedric, north of the monastery, and fill it up on the well next to it for the Black cog step. If you have other plans for the black cog, you can ignore this step by going down the nearby ladder.", emptyBucket);
+
+ getBucket.addSubSteps(fillBucket);
+
goToLadderCedric = new ObjectStep(this, ObjectID.LADDER_CELLAR, new WorldPoint(2621, 3261, 0), "");
- pushWall = new ObjectStep(this, ObjectID.SECRETDOOR2, new WorldPoint(2575, 9631, 0), "Follow the tunnel and " +
- "push the wall at the end.");
+ pushWall = new ObjectStep(this, ObjectID.SECRETDOOR2, new WorldPoint(2575, 9631, 0), "Follow the tunnel and push the wall at the end.");
pickUpBlueCog = new DetailedQuestStep(this, new WorldPoint(2574, 9633, 0), "Pick up the blue cog.", blueCog);
climbCellLadder = new ObjectStep(this, ObjectID.LADDER_FROM_CELLAR, new WorldPoint(2572, 9631, 0), "");
blueCogOnBlueSpindle = new ObjectStep(this, ObjectID.BROKECLOCKPOLE_BLUE, new WorldPoint(2569, 3240, 1),
"Use the blue cog on the blue spindle.", blueCog.highlighted());
blueCogOnBlueSpindle.addIcon(ItemID.BLUECOG);
- pickupBlackCog = new DetailedQuestStep(this, new WorldPoint(2613, 9639, 0), "Enter the north east door, and " +
- "pick up the black cog with a bucket of water, alternatively you can equip ice gloves or smith gloves(i).", bucketOfWater, blackCog);
+ pickupBlackCog = new DetailedQuestStep(this, new WorldPoint(2613, 9639, 0), "Enter the north east door, and pick up the black cog with a bucket of water, alternatively you can equip ice gloves or smith gloves(i).", bucketOfWater, blackCog);
blackCogOnBlackSpindle = new ObjectStep(this, ObjectID.BROKECLOCKPOLE_BLACK, new WorldPoint(2570, 9642, 0),
"", blackCog.highlighted());
blackCogOnBlackSpindle.addIcon(ItemID.BLACKCOG);
northWesternDoor = new ObjectStep(this, ObjectID.POORDOOR, new WorldPoint(2575, 9651, 0), "Go through the north-western door.");
- pickUpRatPoison = new DetailedQuestStep(this, new WorldPoint(2564, 9662, 0), "Pick up the rat poison in the " +
- "north west of the dungeon.", ratPoison);
+ pickUpRatPoison = new DetailedQuestStep(this, new WorldPoint(2564, 9662, 0), "Pick up the rat poison in the north west of the dungeon.", ratPoison);
pullFirstLever = new ObjectStep(this, ObjectID.CTLEVERA, new WorldPoint(2591, 9661, 0),
"Pull the marked lever up.");
ratPoisonFood = new ObjectStep(this, ObjectID.CTFOODTROUGH, new WorldPoint(2587, 9654, 0),
@@ -250,7 +276,6 @@ public void setupSteps()
whiteCogOnWhiteSpindle = new ObjectStep(this, ObjectID.BROKECLOCKPOLE_WHITE, new WorldPoint(2567, 3241, 2),
"", whiteCog.highlighted());
whiteCogOnWhiteSpindle.addIcon(ItemID.WHITECOG);
- kojoReward = new NpcStep(this, NpcID.BROTHER_KOJO, new WorldPoint(2570, 3245, 0), "Talk to Brother Kojo for your reward.");
enterBasement = new ObjectStep(this, ObjectID.LADDER_CELLAR, new WorldPoint(2566, 3242, 0), "");
climbFromFirstFloorToGround = new ObjectStep(this, ObjectID.SPIRALSTAIRSMIDDLE, new WorldPoint(2573, 3241, 1), "");
@@ -262,80 +287,136 @@ public void setupSteps()
climbToSecondFloor = new ObjectStep(this, ObjectID.SPIRALSTAIRSMIDDLE, new WorldPoint(2573, 3241, 1), "");
climbToSecondFloor.addDialogStep("Climb up the stairs.");
- ConditionalStep goToBasementSteps = new ConditionalStep(this, enterBasement);
+ var goToBasementSteps = new ConditionalStep(this, enterBasement);
goToBasementSteps.addStep(inSecondFloor, climbFromSecondFloorToFirst);
goToBasementSteps.addStep(inFirstFloor, climbFromFirstFloorToGround);
- goToBasementSteps.addStep(new Conditions(LogicType.OR, inSecretPath, inCell), climbCellLadder);
+ goToBasementSteps.addStep(or(inSecretPath, inCell), climbCellLadder);
- ConditionalStep goToCellSteps = new ConditionalStep(this, goToLadderCedric);
+ var goToCellSteps = new ConditionalStep(this, goToLadderCedric);
goToCellSteps.addStep(inBasement, climbToGroundFloorFromBasement);
goToCellSteps.addStep(inSecondFloor, climbFromSecondFloorToFirst);
goToCellSteps.addStep(inFirstFloor, climbFromFirstFloorToGround);
- ConditionalStep goToGroundFloor = new ConditionalStep(this, new DetailedQuestStep(this, ""));
- goToGroundFloor.addStep(new Conditions(LogicType.OR, inSecretPath, inCell), climbCellLadder);
+ var goToGroundFloor = new ConditionalStep(this, new DetailedQuestStep(this, ""));
+ goToGroundFloor.addStep(or(inSecretPath, inCell), climbCellLadder);
goToGroundFloor.addStep(inBasement, climbToGroundFloorFromBasement);
goToGroundFloor.addStep(inSecondFloor, climbFromSecondFloorToFirst);
goToGroundFloor.addStep(inFirstFloor, climbFromFirstFloorToGround);
- ConditionalStep goToFirstFloor = new ConditionalStep(this, climbToFirstFloor);
- goToFirstFloor.addStep(new Conditions(LogicType.OR, inSecretPath, inCell), climbCellLadder);
+ var goToFirstFloor = new ConditionalStep(this, climbToFirstFloor);
+ goToFirstFloor.addStep(or(inSecretPath, inCell), climbCellLadder);
goToFirstFloor.addStep(inBasement, climbToGroundFloorFromBasement);
goToFirstFloor.addStep(inSecondFloor, climbFromSecondFloorToFirst);
- ConditionalStep goToSecondFloor = new ConditionalStep(this, climbToFirstFloor);
- goToSecondFloor.addStep(new Conditions(LogicType.OR, inSecretPath, inCell), climbCellLadder);
+ var goToSecondFloor = new ConditionalStep(this, climbToFirstFloor);
+ goToSecondFloor.addStep(or(inSecretPath, inCell), climbCellLadder);
goToSecondFloor.addStep(inBasement, climbToGroundFloorFromBasement);
goToSecondFloor.addStep(inFirstFloor, climbToSecondFloor);
- goToBasementForRed = new ConditionalStep(this, goToBasementSteps, "Enter the clocktower's basement for the " +
- "red cog.");
- goToBasementForBlue = new ConditionalStep(this, goToCellSteps, "Climb down the ladder to the east of the " +
- "Clocktower, next to Brother Cedric.");
- goToBasementForWhite = new ConditionalStep(this, goToBasementSteps, "Enter the clocktower's basement for the " +
- "white cog.");
- goToBasementForBlack = new ConditionalStep(this, goToBasementSteps, "Enter the clocktower's basement for the " +
- "black cog.");
-
- goToFirstFloorWithBlueCog = new ConditionalStep(this, goToFirstFloor,
- "Place the blue cog on the peg on the first floor.");
+ goToBasementForRed = new ConditionalStep(this, goToBasementSteps, "Enter the Clock Tower basement for the red cog.");
+ goToBasementForBlue = new ConditionalStep(this, goToCellSteps, "Climb down the ladder to the east of the Clock Tower, next to Brother Cedric.");
+ goToBasementForWhite = new ConditionalStep(this, goToBasementSteps, "Enter the Clock Tower basement for the white cog.");
+ goToBasementForBlack = new ConditionalStep(this, goToBasementSteps, "Enter the Clock Tower basement for the black cog.", bucketOfWater);
+
+ goToFirstFloorWithBlueCog = new ConditionalStep(this, goToFirstFloor, "Place the blue cog on the peg on the first floor.");
goToFirstFloorWithBlueCog.addStep(inFirstFloor, blueCogOnBlueSpindle);
goToGroundFloorWithRedCog = goToGroundFloor.copy();
goToGroundFloorWithRedCog.setText("Place the red cog on the peg on the ground floor.");
goToGroundFloorWithRedCog.addStep(null, redCogOnRedSpindle);
- goToBasementWithBlackCog = new ConditionalStep(this, goToBasementSteps,
- "Place the black cog on the peg in the basement.");
- goToBasementWithBlackCog.addStep(new Conditions(inBasement, new Conditions(LogicType.NOR, inSecretPath, inCell)),
+ goToBasementWithBlackCog = new ConditionalStep(this, goToBasementSteps, "Place the black cog on the peg in the basement.");
+ goToBasementWithBlackCog.addStep(and(inBasement, nor(inSecretPath, inCell)),
blackCogOnBlackSpindle);
- goToSecondFloorWithWhiteCog = new ConditionalStep(this, goToSecondFloor,
- "Place the white cog on the peg on the second floor.");
+ goToSecondFloorWithWhiteCog = new ConditionalStep(this, goToSecondFloor, "Place the white cog on the peg on the second floor.");
goToSecondFloorWithWhiteCog.addStep(inSecondFloor, whiteCogOnWhiteSpindle);
goToSecondFloorWithWhiteCog.addSubSteps(climbWhiteLadder);
+ finishQuest = new NpcStep(this, NpcID.BROTHER_KOJO, new WorldPoint(2570, 3245, 0), "");
+
goFinishQuest = goToGroundFloor.copy();
- goFinishQuest.setText("Talk to Kojo for your reward.");
- goFinishQuest.addStep(null, kojoReward);
+ goFinishQuest.setText("Talk to Brother Kojo in the Clock Tower for your reward.");
+ goFinishQuest.addStep(null, finishQuest);
+ }
+
+ @Override
+ public Map loadSteps()
+ {
+ initializeRequirements();
+ setupSteps();
+
+ var steps = new HashMap();
+
+ var goStart = new ConditionalStep(this, talkToKojo);
+ // This is so we can lock the startedQuestDuringSession to true, so we don't need to ask to sync after
+ goStart.addStep(startedQuestDuringSession, talkToKojo);
+
+ steps.put(0, talkToKojo);
+
+ getRedCog = new ConditionalStep(this, goToBasementForRed);
+ getRedCog.addStep(redCog, goToGroundFloorWithRedCog);
+ getRedCog.addStep(inBasement, pickUpRedCog);
+
+ getBlueCog = new ConditionalStep(this, goToBasementForBlue);
+ getBlueCog.addStep(blueCog, goToFirstFloorWithBlueCog);
+ getBlueCog.addStep(inCell, pickUpBlueCog);
+ getBlueCog.addStep(inSecretPath, pushWall);
+ getBlueCog.addStep(and(not(bucketOfWater), emptyBucket, not(placedBlackCog)), fillBucket);
+ getBlueCog.addStep(and(not(bucketOfWater), not(placedBlackCog)), getBucket);
+
+ getBlackCog = new ConditionalStep(this, goToBasementForBlack);
+ getBlackCog.addStep(blackCog, goToBasementWithBlackCog);
+ getBlackCog.addStep(inBasement, pickupBlackCog);
+
+ getWhiteCog = new ConditionalStep(this, goToBasementForWhite);
+ getWhiteCog.addStep(and(whiteCog, inBasement), climbWhiteLadder);
+ getWhiteCog.addStep(and(whiteCog), goToSecondFloorWithWhiteCog);
+ getWhiteCog.addStep(and(inBasement, pulledFirstLeverUp, poisonedRats), pickUpWhiteCog);
+ getWhiteCog.addStep(and(inBasement, ratPoison, pulledFirstLeverUp), ratPoisonFood);
+ getWhiteCog.addStep(and(inBasement, ratPoison), pullFirstLever);
+ getWhiteCog.addStep(inBasement, pickUpRatPoison);
+
+ var doQuest = new ConditionalStep(this, syncStep);
+ doQuest.addStep(and(placedRedCog, placedBlueCog, placedBlackCog, placedWhiteCog, synced), goFinishQuest);
+ doQuest.addStep(and(placedRedCog, placedBlueCog, placedBlackCog, synced), getWhiteCog);
+ doQuest.addStep(and(placedRedCog, placedBlueCog, synced), getBlackCog);
+ doQuest.addStep(and(placedRedCog, synced), getBlueCog);
+ doQuest.addStep(synced, getRedCog);
+ steps.put(1, doQuest);
+ steps.put(2, doQuest);
+ steps.put(3, doQuest);
+ steps.put(4, doQuest);
+ steps.put(5, goFinishQuest);
+ steps.put(6, goFinishQuest);
+ steps.put(7, goFinishQuest);
+
+ return steps;
}
@Override
public List getItemRequirements()
{
- return Collections.singletonList(bucketOfWater);
+ return List.of(
+ bucketOfWater
+ );
}
- @Override
- public List getItemRecommended()
- {
- return Arrays.asList(staminaPotions, ardougneCloak);
- }
+ @Override
+ public List getItemRecommended()
+ {
+ return List.of(
+ staminaPotions,
+ ardougneCloak
+ );
+ }
@Override
public List getCombatRequirements()
{
- return Collections.singletonList("Able to survive a hit or 2 from an Ogre (level 53)");
+ return List.of(
+ "Able to survive a hit or 2 from an Ogre (level 53)"
+ );
}
@Override
@@ -347,36 +428,59 @@ public QuestPointReward getQuestPointReward()
@Override
public List getItemRewards()
{
- return Collections.singletonList(new ItemReward("Coins", ItemID.COINS, 500));
+ return List.of(
+ new ItemReward("Coins", ItemID.COINS, 500)
+ );
}
@Override
public List getPanels()
{
- ArrayList allSteps = new ArrayList<>();
-
- PanelDetails gettingStarted = new PanelDetails("Getting Started", new ArrayList<>(Collections.singletonList(talkToKojo)));
- allSteps.add(gettingStarted);
-
- PanelDetails redCog = new PanelDetails("Obtaining the red cog", new ArrayList<>(Arrays.asList(goToBasementForRed,
- pickUpRedCog, goToGroundFloorWithRedCog)));
- allSteps.add(redCog);
- PanelDetails blueCog = new PanelDetails("Obtaining the blue cog",
- new ArrayList<>(Arrays.asList(goToBasementForBlue, pushWall, pickUpBlueCog, goToFirstFloorWithBlueCog)),
- noteAboutWater);
- allSteps.add(blueCog);
- PanelDetails blackCog = new PanelDetails("Obtaining the black cog",
- new ArrayList<>(Arrays.asList(goToBasementForBlack, pickupBlackCog, goToBasementWithBlackCog)),
- bucketOfWater);
- allSteps.add(blackCog);
- PanelDetails whiteCog = new PanelDetails("Obtaining the white cog",
- new ArrayList<>(Arrays.asList(goToBasementForWhite, pickUpRatPoison, pullFirstLever,
- ratPoisonFood, westernGate, pickUpWhiteCog, goToSecondFloorWithWhiteCog)));
- allSteps.add(whiteCog);
- PanelDetails finishingOff = new PanelDetails("Finishing off",
- new ArrayList<>(Collections.singletonList(goFinishQuest)));
- allSteps.add(finishingOff);
-
- return allSteps;
+ var sections = new ArrayList();
+
+ sections.add(new PanelDetails("Getting Started", List.of(
+ talkToKojo,
+ syncStep
+ )));
+
+ sections.add(new PanelDetails("Obtaining the red cog", List.of(
+ goToBasementForRed,
+ pickUpRedCog,
+ goToGroundFloorWithRedCog
+ )));
+
+ sections.add(new PanelDetails("Obtaining the blue cog", List.of(
+ getBucket,
+ goToBasementForBlue,
+ pushWall,
+ pickUpBlueCog,
+ goToFirstFloorWithBlueCog
+ ), List.of(
+ noteAboutWater
+ )));
+
+ sections.add(new PanelDetails("Obtaining the black cog", List.of(
+ goToBasementForBlack,
+ pickupBlackCog,
+ goToBasementWithBlackCog
+ ), List.of(
+ bucketOfWater
+ )));
+
+ sections.add(new PanelDetails("Obtaining the white cog", List.of(
+ goToBasementForWhite,
+ pickUpRatPoison,
+ pullFirstLever,
+ ratPoisonFood,
+ westernGate,
+ pickUpWhiteCog,
+ goToSecondFloorWithWhiteCog
+ )));
+
+ sections.add(new PanelDetails("Finishing off", List.of(
+ goFinishQuest
+ )));
+
+ return sections;
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/coldwar/ColdWar.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/coldwar/ColdWar.java
index e3ad3fe090a..ce54b25dd75 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/coldwar/ColdWar.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/coldwar/ColdWar.java
@@ -240,13 +240,13 @@ protected void setupZones()
public void setupConditions()
{
isOnIceberg = new ZoneRequirement(onIceberg);
- birdHideBuilt = new VarbitRequirement(3294, 1);
+ birdHideBuilt = new VarbitRequirement(VarbitID.PENG_MULTI_HIDE, 1);
tableNearby = new Conditions(LogicType.OR,
new ObjectCondition(ObjectID.POH_CLOCKMAKING_3),
new ObjectCondition(ObjectID.POH_CLOCKMAKING_4));
- isPenguin = new VarbitRequirement(3306, 1);
+ isPenguin = new VarbitRequirement(VarbitID.PENG_TRANSMOG, 1);
isInPenguinPen = new ZoneRequirement(inPenguinPen, inPenguinPen2);
- isEmoting = new VarbitRequirement(3308, 1);
+ isEmoting = new VarbitRequirement(VarbitID.PENG_DOING_GREETING, 1);
isAtZoo = new ZoneRequirement(atZoo);
isAtLumbridgeSheepFarm = new ZoneRequirement(atLumbridgeSheepFarm);
isInAgilityStart = new ZoneRequirement(inAgilityStart);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/cooksassistant/CooksAssistant.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/cooksassistant/CooksAssistant.java
index 005813cdf04..30c33d4aabf 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/cooksassistant/CooksAssistant.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/cooksassistant/CooksAssistant.java
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2019, Trevor
+ * Copyright (c) 2025, pajlada
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -27,112 +28,128 @@
import net.runelite.client.plugins.microbot.questhelper.collections.ItemCollections;
import net.runelite.client.plugins.microbot.questhelper.panel.PanelDetails;
import net.runelite.client.plugins.microbot.questhelper.questhelpers.BasicQuestHelper;
-import net.runelite.client.plugins.microbot.questhelper.requirements.Requirement;
-import net.runelite.client.plugins.microbot.questhelper.requirements.conditional.Conditions;
import net.runelite.client.plugins.microbot.questhelper.requirements.item.ItemRequirement;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.and;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.nor;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.or;
+import net.runelite.client.plugins.microbot.questhelper.requirements.npc.DialogRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.var.VarbitRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.zone.Zone;
import net.runelite.client.plugins.microbot.questhelper.requirements.zone.ZoneRequirement;
import net.runelite.client.plugins.microbot.questhelper.rewards.ExperienceReward;
import net.runelite.client.plugins.microbot.questhelper.rewards.QuestPointReward;
import net.runelite.client.plugins.microbot.questhelper.rewards.UnlockReward;
-import net.runelite.client.plugins.microbot.questhelper.steps.*;
+import net.runelite.client.plugins.microbot.questhelper.steps.ConditionalStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.ItemStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.NpcStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.ObjectStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.QuestStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.widget.WidgetHighlight;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import net.runelite.api.Skill;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
-
-import java.util.*;
+import net.runelite.api.gameval.VarbitID;
public class CooksAssistant extends BasicQuestHelper
{
- //Items Required
- ItemRequirement egg, milk, flour, bucket, pot, coins, grain;
+ // Required items
+ ItemRequirement egg;
+ ItemRequirement milk;
+ ItemRequirement flour;
+ ItemRequirement bucket;
+ ItemRequirement pot;
+ ItemRequirement coins;
+ ItemRequirement grain;
- Requirement controlsUsed;
+ // Zones
+ Zone millSecond;
+ Zone millThird;
- QuestStep getEgg, getWheat, milkCow, climbLadderOne, climbLadderTwoUp, climbLadderTwoDown, climbLadderThree, fillHopper,
- operateControls, collectFlour, finishQuest;
+ // Miscellaneous requirements
+ DialogRequirement hasTurnedInMilk;
+ DialogRequirement hasTurnedInFlour;
+ DialogRequirement hasTurnedInEgg;
+ DialogRequirement hasTurnedInEverything;
- NpcStep getPot, getBucket;
+ VarbitRequirement controlsUsed;
- Zone millSecond, millThird;
+ ZoneRequirement inMillSecond;
+ ZoneRequirement inMillThird;
- Requirement inMillSecond, inMillThird;
+ // Steps
+ NpcStep getBucket;
+ NpcStep getPot;
+ ObjectStep milkCow;
+ ItemStep getEgg;
+ ObjectStep getWheat;
+ ObjectStep climbLadderOne;
+ ObjectStep fillHopper;
+ ObjectStep operateControls;
+ ObjectStep climbLadderThree;
+ ObjectStep collectFlour;
+ ObjectStep climbLadderTwoUp;
+ ObjectStep climbLadderTwoDown;
+ NpcStep finishQuest;
@Override
- public Map loadSteps()
+ protected void setupZones()
{
- initializeRequirements();
- setupConditions();
- setupSteps();
-
- Map steps = new HashMap<>();
- ConditionalStep doQuest = new ConditionalStep(this, getBucket);
- doQuest.addStep(new Conditions(milk, flour, egg), finishQuest);
- doQuest.addStep(new Conditions(milk, pot, egg, controlsUsed, inMillThird), climbLadderThree);
- doQuest.addStep(new Conditions(milk, pot, egg, controlsUsed, inMillSecond), climbLadderTwoDown);
- doQuest.addStep(new Conditions(milk, pot, egg, controlsUsed), collectFlour);
- doQuest.addStep(new Conditions(milk, pot, egg, grain, inMillThird), fillHopper);
- doQuest.addStep(new Conditions(milk, pot, egg, inMillThird), operateControls);
- doQuest.addStep(new Conditions(milk, pot, egg, grain, inMillSecond), climbLadderTwoUp);
- doQuest.addStep(new Conditions(milk, pot, egg, grain), climbLadderOne);
- doQuest.addStep(new Conditions(milk, pot, egg), getWheat);
- doQuest.addStep(new Conditions(milk, pot), getEgg);
- doQuest.addStep(new Conditions(bucket, pot), milkCow);
- doQuest.addStep(bucket, getPot);
-
- steps.put(0, doQuest);
- steps.put(1, doQuest);
-
- return steps;
+ millSecond = new Zone(new WorldPoint(3162, 3311, 1), new WorldPoint(3171, 3302, 1));
+ millThird = new Zone(new WorldPoint(3162, 3311, 2), new WorldPoint(3171, 3302, 2));
}
@Override
protected void setupRequirements()
{
+ hasTurnedInMilk = new DialogRequirement("Here's a bucket of milk.");
+ hasTurnedInFlour = new DialogRequirement("Here's a pot of flour.");
+ hasTurnedInEgg = new DialogRequirement("Here's a fresh egg.");
+ hasTurnedInEverything = new DialogRequirement("You've brought me everything I need! I am saved!");
+
egg = new ItemRequirement("Egg", ItemID.EGG);
+ egg.setConditionToHide(or(hasTurnedInEgg, hasTurnedInEverything));
egg.canBeObtainedDuringQuest();
milk = new ItemRequirement("Bucket of milk", ItemID.BUCKET_MILK);
+ milk.setConditionToHide(or(hasTurnedInMilk, hasTurnedInEverything));
milk.canBeObtainedDuringQuest();
flour = new ItemRequirement("Pot of flour", ItemID.POT_FLOUR);
+ flour.setConditionToHide(or(hasTurnedInFlour, hasTurnedInEverything));
flour.canBeObtainedDuringQuest();
bucket = new ItemRequirement("Bucket", ItemID.BUCKET_EMPTY);
pot = new ItemRequirement("Pot", ItemID.POT_EMPTY);
- coins = new ItemRequirement("Coins", ItemCollections.COINS);
+ coins = new ItemRequirement("Coins", ItemCollections.COINS, 3);
coins.setTooltip("Necessary if you do not have a pot / bucket");
grain = new ItemRequirement("Grain", ItemID.GRAIN);
- controlsUsed = new VarbitRequirement(4920, 1);
- }
+ controlsUsed = new VarbitRequirement(VarbitID.MILL_FLOUR, 1);
- @Override
- protected void setupZones()
- {
- millSecond = new Zone(new WorldPoint(3162, 3311, 1), new WorldPoint(3171, 3302, 1));
- millThird = new Zone(new WorldPoint(3162, 3311, 2), new WorldPoint(3171, 3302, 2));
- }
-
- public void setupConditions()
- {
inMillSecond = new ZoneRequirement(millSecond);
inMillThird = new ZoneRequirement(millThird);
}
public void setupSteps()
{
+ var lumbridgeShopkeepers = new int[]{
+ NpcID.GENERALSHOPKEEPER1,
+ NpcID.GENERALASSISTANT1,
+ };
+
+ getBucket = new NpcStep(this, lumbridgeShopkeepers, new WorldPoint(3212, 3246, 0),
+ "Purchase a bucket from the Lumbridge General Store.", coins.quantity(2));
+ getBucket.addWidgetHighlight(WidgetHighlight.createShopItemHighlight(ItemID.BUCKET_EMPTY));
+
+ getPot = new NpcStep(this, lumbridgeShopkeepers, new WorldPoint(3212, 3246, 0),
+ "Purchase a pot from the Lumbridge General Store.", coins.quantity(1));
+ getPot.addWidgetHighlight(WidgetHighlight.createShopItemHighlight(ItemID.POT_EMPTY));
+
getEgg = new ItemStep(this, new WorldPoint(3177, 3296, 0),
"Grab an egg from the farm north of Lumbridge.", egg);
- getBucket = new NpcStep(this, NpcID.GENERALSHOPKEEPER1, new WorldPoint(3212, 3246, 0),
- "Purchase a bucket from the Lumbridge General Store.", coins.quantity(3));
- getBucket.addWidgetHighlightWithItemIdRequirement(300, 16, ItemID.BUCKET_EMPTY, true);
- getBucket.addAlternateNpcs(NpcID.GENERALASSISTANT1);
- getPot = new NpcStep(this, NpcID.GENERALSHOPKEEPER1, new WorldPoint(3212, 3246, 0),
- "Purchase a pot from the Lumbridge General Store.", coins.quantity(3));
- getPot.addAlternateNpcs(NpcID.GENERALASSISTANT1);
- milkCow = new ObjectStep(this, ObjectID.FAT_COW, new WorldPoint(3254, 3272, 0),
- "Milk the cow north-east of Lumbridge.", bucket);
getWheat = new ObjectStep(this, ObjectID.FAI_VARROCK_WHEAT_CORNER, new WorldPoint(3161, 3292, 0),
"Pick some wheat north of Lumbridge.");
climbLadderOne = new ObjectStep(this, ObjectID.QIP_COOK_LADDER, new WorldPoint(3164, 3307, 0),
@@ -155,26 +172,67 @@ public void setupSteps()
collectFlour = new ObjectStep(this, ObjectID.MILLBASE_FLOUR, new WorldPoint(3166, 3306, 0),
"Collect the flour in the bin.", pot.highlighted());
collectFlour.addIcon(ItemID.POT_EMPTY);
- finishQuest = new NpcStep(this, NpcID.POH_SERVANT_COOK_WOMAN, new WorldPoint(3206, 3214, 0),
+
+ milkCow = new ObjectStep(this, ObjectID.FAT_COW, new WorldPoint(3172, 3317, 0),
+ "Milk the dairy cow north of Lumbridge.", bucket);
+
+ finishQuest = new NpcStep(this, NpcID.COOK, new WorldPoint(3206, 3214, 0),
"Give the Cook in Lumbridge Castle's kitchen the required items to finish the quest.",
egg, milk, flour);
+ finishQuest.addAlternateNpcs(NpcID.POH_SERVANT_COOK_WOMAN);
finishQuest.addDialogSteps("What's wrong?", "Can I help?", "Yes.");
}
+ @Override
+ public Map loadSteps()
+ {
+ initializeRequirements();
+ setupSteps();
+
+ var steps = new HashMap();
+
+
+ var getFlour = new ConditionalStep(this, getPot);
+ getFlour.addStep(and(pot, controlsUsed, inMillThird), climbLadderThree);
+ getFlour.addStep(and(pot, controlsUsed, inMillSecond), climbLadderTwoDown);
+ getFlour.addStep(and(pot, controlsUsed), collectFlour);
+ getFlour.addStep(and(pot, grain, inMillThird), fillHopper);
+ getFlour.addStep(and(pot, inMillThird), operateControls);
+ getFlour.addStep(and(pot, grain, inMillSecond), climbLadderTwoUp);
+ getFlour.addStep(and(pot, grain), climbLadderOne);
+ getFlour.addStep(and(pot), getWheat);
+
+ var doQuest = new ConditionalStep(this, finishQuest);
+ doQuest.addStep(hasTurnedInEverything, finishQuest);
+ doQuest.addStep(nor(milk, bucket, hasTurnedInMilk), getBucket);
+ doQuest.addStep(nor(flour, pot, hasTurnedInFlour), getPot);
+ doQuest.addStep(nor(egg, hasTurnedInEgg), getEgg);
+ doQuest.addStep(nor(flour, hasTurnedInFlour), getFlour);
+ doQuest.addStep(nor(milk, hasTurnedInMilk), milkCow);
+
+ steps.put(0, doQuest);
+ steps.put(1, doQuest);
+
+ return steps;
+ }
+
+
@Override
public List getItemRequirements()
{
- ArrayList reqs = new ArrayList<>();
- reqs.add(egg);
- reqs.add(flour);
- reqs.add(milk);
- return reqs;
+ return List.of(
+ egg,
+ flour,
+ milk
+ );
}
@Override
public List getItemRecommended()
{
- return Collections.singletonList(coins);
+ return List.of(
+ coins
+ );
}
@Override
@@ -186,26 +244,60 @@ public QuestPointReward getQuestPointReward()
@Override
public List getExperienceRewards()
{
- return Collections.singletonList(new ExperienceReward(Skill.COOKING, 300));
+ return List.of(
+ new ExperienceReward(Skill.COOKING, 300)
+ );
}
@Override
public List getUnlockRewards()
{
- return Collections.singletonList(new UnlockReward("Permission to use The Cook's range."));
+ return List.of(
+ new UnlockReward("Permission to use The Cook's range.")
+ );
}
@Override
public List getPanels()
{
- List allSteps = new ArrayList<>();
- allSteps.add(new PanelDetails("Starting off", Arrays.asList(getBucket, getPot), coins.quantity(3)));
- allSteps.add(new PanelDetails("Getting the Milk", Collections.singletonList(milkCow), bucket));
- allSteps.add(new PanelDetails("Getting the Egg", Collections.singletonList(getEgg)));
- allSteps.add(new PanelDetails("Getting the Flour", Arrays.asList(getWheat, climbLadderOne, fillHopper,
- operateControls, climbLadderThree, collectFlour), pot));
- allSteps.add(new PanelDetails("Finishing up", Collections.singletonList(finishQuest), egg, flour, milk));
-
- return allSteps;
+ var steps = new ArrayList();
+
+ steps.add(new PanelDetails("Starting off", List.of(
+ getBucket,
+ getPot
+ ), List.of(
+ coins
+ )));
+
+ steps.add(new PanelDetails("Getting the Egg", List.of(
+ getEgg
+ )));
+
+ steps.add(new PanelDetails("Getting the Flour", List.of(
+ getWheat,
+ climbLadderOne,
+ fillHopper,
+ operateControls,
+ climbLadderThree,
+ collectFlour
+ ), List.of(
+ pot
+ )));
+
+ steps.add(new PanelDetails("Getting the Milk", List.of(
+ milkCow
+ ), List.of(
+ bucket
+ )));
+
+ steps.add(new PanelDetails("Finishing up", List.of(
+ finishQuest
+ ), List.of(
+ egg,
+ flour,
+ milk
+ )));
+
+ return steps;
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/creatureoffenkenstrain/CreatureOfFenkenstrain.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/creatureoffenkenstrain/CreatureOfFenkenstrain.java
index 7bdd85c071d..4fdea31910f 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/creatureoffenkenstrain/CreatureOfFenkenstrain.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/creatureoffenkenstrain/CreatureOfFenkenstrain.java
@@ -51,6 +51,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import java.util.*;
@@ -198,15 +199,15 @@ public void setupConditions()
inCanifisBar = new ZoneRequirement(barZone);
inCastleFloor0 = new ZoneRequirement(castleZoneFloor0);
inCastleFloor1 = new ZoneRequirement(castleZoneFloor1);
- putStarOnGrave = new VarbitRequirement(192, 1);
+ putStarOnGrave = new VarbitRequirement(VarbitID.FENK_COFFIN, 1);
hasMarbleAmulet = new Conditions(LogicType.OR, marbleAmulet, putStarOnGrave);
hasObsidianAmulet = new Conditions(LogicType.OR, obsidianAmulet, putStarOnGrave);
hasStarAmulet = new Conditions(LogicType.OR, starAmulet, putStarOnGrave);
- followingGardenerForHead = new VarbitRequirement(185, 1);
+ followingGardenerForHead = new VarbitRequirement(VarbitID.FENK_GARDENER_DIRECTIONS, 1);
hasDecapitatedHeadWithBrain = new Conditions(LogicType.OR,
decapitatedHeadWithBrain,
- new VarbitRequirement(189, 1)
+ new VarbitRequirement(VarbitID.FENK_HEAD, 1)
);
inExperiementCave = new ZoneRequirement(experimentCave);
@@ -214,29 +215,29 @@ public void setupConditions()
hasCavernKey = new Conditions(LogicType.OR,
cavernKey,
- new VarbitRequirement(199, 1)
+ new VarbitRequirement(VarbitID.FENK_UNLOCKED_CAVERN, 1)
);
keyNearby = new ItemOnTileRequirement(cavernKey);
hasTorso = new Conditions(LogicType.OR,
torso,
- new VarbitRequirement(188, 1)
+ new VarbitRequirement(VarbitID.FENK_TORSO, 1)
);
hasLegs = new Conditions(LogicType.OR,
legs,
- new VarbitRequirement(187, 1)
+ new VarbitRequirement(VarbitID.FENK_LEGS, 1)
);
hasArm = new Conditions(LogicType.OR,
arms,
- new VarbitRequirement(186, 1)
+ new VarbitRequirement(VarbitID.FENK_ARMS, 1)
);
// Needle given, 190 = 1
// Thread given, 191 0->5
- usedShedKey = new VarbitRequirement(200, 1);
+ usedShedKey = new VarbitRequirement(VarbitID.FENK_UNLOCKED_SHED, 1);
inCastleTower = new ZoneRequirement(castleTower);
- usedTowerKey = new VarbitRequirement(198, 1);
+ usedTowerKey = new VarbitRequirement(VarbitID.FENK_UNLOCKED_TOWER, 1);
inMonsterTower = new ZoneRequirement(monsterTower);
}
@@ -271,7 +272,7 @@ public void setupSteps()
"Go back to the ground floor.");
talkToGardenerForHead = new NpcStep(this, NpcID.FENK_GARDENER, new WorldPoint(3548, 3562, 0),
- "Talk to the Gardener Ghost.", ghostSpeakAmulet.equipped());
+ "Talk to the Gardener Ghost while wearing your Ghostspeak amulet.", ghostSpeakAmulet.equipped());
talkToGardenerForHead.addDialogStep("What happened to your head?");
goToHeadGrave = new DigStep(this, new WorldPoint(3608, 3490, 0),
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/darknessofhallowvale/DarknessOfHallowvale.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/darknessofhallowvale/DarknessOfHallowvale.java
index afaed7485ed..da1e26a2e14 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/darknessofhallowvale/DarknessOfHallowvale.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/darknessofhallowvale/DarknessOfHallowvale.java
@@ -268,12 +268,12 @@ public void setupConditions()
inVanstromFight = new Conditions(onDrakanWalls, new InInstanceRequirement());
inLab = new ZoneRequirement(lab);
- pushedBoat = new VarbitRequirement(2587, 1);
- knockedDownBoard = new VarbitRequirement(2589, 1);
+ pushedBoat = new VarbitRequirement(VarbitID.MYQ3_SEA_BOAT_VISIBLE, 1);
+ knockedDownBoard = new VarbitRequirement(VarbitID.MYQ3_WALL_FLOORBOARDS_DOWN, 1);
- pathDoorOpen = new VarbitRequirement(2578, 1);
+ pathDoorOpen = new VarbitRequirement(VarbitID.MYQ3_AGIL_GHETTO_LOCKED_DOOR, 1);
- fixedLadder = new VarbitRequirement(2598, 2);
+ fixedLadder = new VarbitRequirement(VarbitID.MYQ3_AGIL_LADDERTOP_WALL, 2);
wallPressed = new VarbitRequirement(VarbitID.MYQ3_HIDEOUT_TRAPDOOR, 1, Operation.GREATER_EQUAL);
searchedRockySurface = new Conditions(true, new WidgetTextRequirement(229, 1, "a mechanical click."));
@@ -282,11 +282,11 @@ public void setupConditions()
cutPortrait = new VarbitRequirement(VarbitID.MYQ3_STATUE_KEY_PAINTING_STATE, 1, Operation.GREATER_EQUAL);
- handedInSketches = new VarbitRequirement(2575, 1);
- tapestryCut = new VarbitRequirement(2594, 1);
- keyPlaced = new VarbitRequirement(2596, 1);
+ handedInSketches = new VarbitRequirement(VarbitID.MYQ3_SKETCHES_GIVEN, 1);
+ tapestryCut = new VarbitRequirement(VarbitID.MYQ3_TAPESTRY_STATE, 1);
+ keyPlaced = new VarbitRequirement(VarbitID.MYQ3_STATUE_STATE, 1);
- searchedRuneCase = new VarbitRequirement(2584, 1);
+ searchedRuneCase = new VarbitRequirement(VarbitID.MYQ3_RUNECASE_SEARCHED, 1);
hasTeleGrabRunesOrSearchedCase = new Conditions(LogicType.OR, searchedRuneCase, new ItemRequirements(lawRune, airRune));
// Repaired boat, 2585 = 1
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deathontheisle/DeathOnTheIsle.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deathontheisle/DeathOnTheIsle.java
index 86efc717ba6..11d230e48c6 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deathontheisle/DeathOnTheIsle.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deathontheisle/DeathOnTheIsle.java
@@ -307,11 +307,11 @@ protected void setupRequirements()
drinkingFlask = new ItemRequirement("Drinking flask", ItemID.DOTI_FLASK);
shippingContract = new ItemRequirement("Shipping contract", ItemID.DOTI_CONTRACT);
- handedOverCluesToGuards = new VarbitRequirement(11233, 1);
+ handedOverCluesToGuards = new VarbitRequirement(VarbitID.DOTI_GIVEN_ITEMS, 1);
/// Zones
inButlerCostumeHouse = new ZoneRequirement(butlerCostumeHouse1, butlerCostumeHouse2, butlerCostumeHouse3, butlerCostumeHouse4);
- inVilla = new VarbitRequirement(14283, 5);
+ inVilla = new VarbitRequirement(VarbitID.HOLDING_INVENTORY_LOCATION, 5);
aroundVilla = new ZoneRequirement(villaOutsideTheatre1, villaOutsideTheatre2);
outsideVillaByLooseRocks = new ZoneRequirement(
villaPlatueOnTheWayToTheatre
@@ -323,46 +323,46 @@ protected void setupRequirements()
inTheatreCellar = new ZoneRequirement(theatreCellar);
/// States
- introducedYourselfToConstantinius = new VarbitRequirement(11214, 1);
- introducedYourselfToCozyac = new VarbitRequirement(11212, 1);
- introducedYourselfToPavo = new VarbitRequirement(11213, 1);
- introducedYourselfToXocotla = new VarbitRequirement(11211, 1);
-
- investigatedJug = new VarbitRequirement(11218, 1);
- investigatedSmallBoxInSouthRoom = new VarbitRequirement(11221, 1);
- investigatedBrokenStoolInSouthRoom = new VarbitRequirement(11222, 1);
- investigatedWineStorageInEastRoom = new VarbitRequirement(11220, 1);
- investigatedBrokenPotteryInEastRoom = new VarbitRequirement(11219, 1);
- investigatedLiviusInEastRoom = new VarbitRequirement(11223, 1);
-
- investigatedConstantinius = new VarbitRequirement(11227, 1);
- investigatedCozyac = new VarbitRequirement(11225, 1);
- investigatedPavo = new VarbitRequirement(11226, 1);
- investigatedXocotla = new VarbitRequirement(11224, 1);
- interrogatedPatziAndAdala = new VarbitRequirement(11234, 1);
-
- // pickpocketedAdala = new VarbitRequirement(11228, 1);
- // pickpocketedCozyac = new VarbitRequirement(11216, 1);
- // pickpocketedPavo = new VarbitRequirement(11217, 1);
- // pickpocketedXocotla = new VarbitRequirement(11215, 1);
-
- inspectedWineLabels = new VarbitRequirement(11236, 1);
- inspectedThreateningNote = new VarbitRequirement(11237, 1);
- inspectedDrinkingFlask = new VarbitRequirement(11235, 1);
- inspectedShippingContract = new VarbitRequirement(11238, 1);
-
- interrogatedConstantiniusAgain = new VarbitRequirement(11244, 1);
- interrogatedXocotlaAgain = new VarbitRequirement(11245, 1);
- interrogatedCozyacAgain = new VarbitRequirement(11243, 1);
- interrogatedPavoAgain = new VarbitRequirement(11246, 1);
-
- talkedtoGuardsAtTheatre = new VarbitRequirement(11249, 1);
-
- searchedCrateNextToStairs = new VarbitRequirement(11251, 1);
- searchedBookshelf = new VarbitRequirement(11250, 1);
- searchedCostumeRack = new VarbitRequirement(11252, 1);
-
- trapSprung = new VarbitRequirement(11258, 2);
+ introducedYourselfToConstantinius = new VarbitRequirement(VarbitID.DOTI_MET_CONSTANTINIUS, 1);
+ introducedYourselfToCozyac = new VarbitRequirement(VarbitID.DOTI_MET_COZYAC, 1);
+ introducedYourselfToPavo = new VarbitRequirement(VarbitID.DOTI_MET_PAVO, 1);
+ introducedYourselfToXocotla = new VarbitRequirement(VarbitID.DOTI_MET_XOCOTLA, 1);
+
+ investigatedJug = new VarbitRequirement(VarbitID.DOTI_CLUE1, 1);
+ investigatedSmallBoxInSouthRoom = new VarbitRequirement(VarbitID.DOTI_CLUE4, 1);
+ investigatedBrokenStoolInSouthRoom = new VarbitRequirement(VarbitID.DOTI_CLUE5, 1);
+ investigatedWineStorageInEastRoom = new VarbitRequirement(VarbitID.DOTI_CLUE3, 1);
+ investigatedBrokenPotteryInEastRoom = new VarbitRequirement(VarbitID.DOTI_CLUE2, 1);
+ investigatedLiviusInEastRoom = new VarbitRequirement(VarbitID.DOTI_BODYCHECK, 1);
+
+ investigatedConstantinius = new VarbitRequirement(VarbitID.DOTI_INVESTIGATED_CONSTANTINIUS, 1);
+ investigatedCozyac = new VarbitRequirement(VarbitID.DOTI_INVESTIGATED_COZYAC, 1);
+ investigatedPavo = new VarbitRequirement(VarbitID.DOTI_INVESTIGATED_PAVO, 1);
+ investigatedXocotla = new VarbitRequirement(VarbitID.DOTI_INVESTIGATED_XOCOTLA, 1);
+ interrogatedPatziAndAdala = new VarbitRequirement(VarbitID.DOTI_INVESTIGATED_PATZI, 1);
+
+ // pickpocketedAdala = new VarbitRequirement(VarbitID.DOTI_PICKPOCKET_ADALA, 1);
+ // pickpocketedCozyac = new VarbitRequirement(VarbitID.DOTI_PICKPOCKET_COZYAC, 1);
+ // pickpocketedPavo = new VarbitRequirement(VarbitID.DOTI_PICKPOCKET_PAVO, 1);
+ // pickpocketedXocotla = new VarbitRequirement(VarbitID.DOTI_PICKPOCKET_XOCOTLA, 1);
+
+ inspectedWineLabels = new VarbitRequirement(VarbitID.DOTI_INVESTIGATED_LABELS, 1);
+ inspectedThreateningNote = new VarbitRequirement(VarbitID.DOTI_INVESTIGATED_LETTER, 1);
+ inspectedDrinkingFlask = new VarbitRequirement(VarbitID.DOTI_INVESTIGATED_FLASK, 1);
+ inspectedShippingContract = new VarbitRequirement(VarbitID.DOTI_INVESTIGATED_CONTRACT, 1);
+
+ interrogatedConstantiniusAgain = new VarbitRequirement(VarbitID.DOTI_QUESTIONED_CONSTANTINIUS, 1);
+ interrogatedXocotlaAgain = new VarbitRequirement(VarbitID.DOTI_QUESTIONED_XOCOTLA, 1);
+ interrogatedCozyacAgain = new VarbitRequirement(VarbitID.DOTI_QUESTIONED_COZYAC, 1);
+ interrogatedPavoAgain = new VarbitRequirement(VarbitID.DOTI_QUESTIONED_PAVO, 1);
+
+ talkedtoGuardsAtTheatre = new VarbitRequirement(VarbitID.DOTI_BACKSTAGE_INTRO, 1);
+
+ searchedCrateNextToStairs = new VarbitRequirement(VarbitID.DOTI_POISON_CLUE, 1);
+ searchedBookshelf = new VarbitRequirement(VarbitID.DOTI_BOOKSHELF_CLUE, 1);
+ searchedCostumeRack = new VarbitRequirement(VarbitID.DOTI_CLOTHING_CLUE, 1);
+
+ trapSprung = new VarbitRequirement(VarbitID.DOTI_FINAL_FIGHT, 2);
trapFailed = new VarbitRequirement(VarbitID.DOTI_FINAL_FIGHT, 3, Operation.GREATER_EQUAL);
naiatliDowned = new VarbitRequirement(VarbitID.DOTI_FINAL_FIGHT, 6, Operation.GREATER_EQUAL);
}
@@ -582,22 +582,22 @@ public void setupSteps()
var talkToCostumerAboutActors = talkToCostumerAgain.copy();
talkToCostumerAboutActors.addDialogStep("What can you tell me about the actors?");
talkToCostumerAgain.addSubSteps(talkToCostumerAboutActors);
- var talkedAboutActors = new VarbitRequirement(11253, 1);
+ var talkedAboutActors = new VarbitRequirement(VarbitID.DOTI_ACTORS_CHAT, 1);
var talkToCostumerAboutPoison = talkToCostumerAgain.copy();
talkToCostumerAboutPoison.addDialogStep("What's the crate of poison for?");
talkToCostumerAgain.addSubSteps(talkToCostumerAboutPoison);
- var talkedAboutPoison = new VarbitRequirement(11255, 1);
+ var talkedAboutPoison = new VarbitRequirement(VarbitID.DOTI_POISON_CHAT, 1);
var talkToCostumerAboutStainedCostume = talkToCostumerAgain.copy();
talkToCostumerAboutStainedCostume.addDialogStep("It seems one of the costumes has a stain on it.");
talkToCostumerAgain.addSubSteps(talkToCostumerAboutStainedCostume);
- var talkedAboutStainedCostume = new VarbitRequirement(11256, 1);
+ var talkedAboutStainedCostume = new VarbitRequirement(VarbitID.DOTI_CLOTHING_CHAT, 1);
var talkToCostumerAboutHiddenPassage = talkToCostumerAgain.copy();
talkToCostumerAboutHiddenPassage.addDialogStep("Did you know there was a hidden passage in here?");
talkToCostumerAgain.addSubSteps(talkToCostumerAboutHiddenPassage);
- // var talkedAboutHiddenPassage = new VarbitRequirement(11254, 1);
+ // var talkedAboutHiddenPassage = new VarbitRequirement(VarbitID.DOTI_BOOKSHELF_CHAT, 1);
investigateTheatreCellar = new ConditionalStep(this, talkToCostumerAboutHiddenPassage);
investigateTheatreCellar.addStep(not(inVilla), returnToButlerAndHeadInside);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deathtothedorgeshuun/DeathToTheDorgeshuun.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deathtothedorgeshuun/DeathToTheDorgeshuun.java
index ccbf0c639f3..5201ed0f257 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deathtothedorgeshuun/DeathToTheDorgeshuun.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deathtothedorgeshuun/DeathToTheDorgeshuun.java
@@ -51,6 +51,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import net.runelite.api.gameval.VarPlayerID;
import java.util.*;
@@ -252,33 +253,33 @@ public void setupConditions()
inMill = new ZoneRequirement(mill1, mill2);
- talkedToDuke = new VarbitRequirement(2259, 1);
- talkedToAereck = new VarbitRequirement(2260, 1);
- talkedToGoblins = new VarbitRequirement(2261, 1);
- talkedToWoman = new VarbitRequirement(2262, 1);
- goneOutside = new VarbitRequirement(2263, 1);
+ talkedToDuke = new VarbitRequirement(VarbitID.DTTD_TOUR_DUKE, 1);
+ talkedToAereck = new VarbitRequirement(VarbitID.DTTD_TOUR_PRIEST, 1);
+ talkedToGoblins = new VarbitRequirement(VarbitID.DTTD_TOUR_GOBLINS, 1);
+ talkedToWoman = new VarbitRequirement(VarbitID.DTTD_TOUR_CITIZENS, 1);
+ goneOutside = new VarbitRequirement(VarbitID.DTTD_TOUR_SUN, 1);
zanikIsFollowing = new VarplayerRequirement(VarPlayerID.FOLLOWER_NPC, List.of(NpcID.DTTD_ZANIK_FOLLOWER, NpcID.DTTD_ZANIK_FOLLOWER_HAM), 16);
- talkedToShopkeeper = new VarbitRequirement(2265, 1);
- heardSpeaker = new VarbitRequirement(2268, 1);
- talkedToJohn = new VarbitRequirement(2269, 1);
+ talkedToShopkeeper = new VarbitRequirement(VarbitID.DTTD_TOUR_SHOP, 1);
+ heardSpeaker = new VarbitRequirement(VarbitID.DTTD_TOUR_HAM_DEACON, 1);
+ talkedToJohn = new VarbitRequirement(VarbitID.DTTD_TOUR_HAM_JOHANHUS, 1);
- killedGuard1 = new VarbitRequirement(2275, 1);
- killedGuard2 = new VarbitRequirement(2277, 1);
- killedGuard3 = new VarbitRequirement(2278, 1);
- killedGuard4 = new VarbitRequirement(2280, 1);
- killedGuard5 = new VarbitRequirement(2282, 1);
+ killedGuard1 = new VarbitRequirement(VarbitID.DTTD_GUARD_1_DEAD, 1);
+ killedGuard2 = new VarbitRequirement(VarbitID.DTTD_GUARD_2_DEAD, 1);
+ killedGuard3 = new VarbitRequirement(VarbitID.DTTD_GUARD_3_DEAD, 1);
+ killedGuard4 = new VarbitRequirement(VarbitID.DTTD_GUARD_4_DEAD, 1);
+ killedGuard5 = new VarbitRequirement(VarbitID.DTTD_GUARD_5_DEAD, 1);
isDisguisedZanikFollowing = new NpcInteractingRequirement(NpcID.DTTD_ZANIK_FOLLOWER_HAM);
zanikWaitingFor4 = new Conditions(new Conditions(LogicType.NOR, isDisguisedZanikFollowing), new NpcCondition(NpcID.DTTD_ZANIK_FOLLOWER_HAM, new Zone(new WorldPoint(2575, 5195, 0), new WorldPoint(2576, 5195, 0))));
zanikWaitingFor5 = new Conditions(new Conditions(LogicType.NOR, isDisguisedZanikFollowing), new NpcCondition(NpcID.DTTD_ZANIK_FOLLOWER_HAM, new Zone(new WorldPoint(2577, 5199, 0), new WorldPoint(2577, 5200, 0))));
- zanikPickedUp = new VarbitRequirement(2271, 0);
+ zanikPickedUp = new VarbitRequirement(VarbitID.DTTD_ZANIK_CORPSE, 0);
- ropeAddedToHole = new VarbitRequirement(279, 1);
- minedRocks = new VarbitRequirement(538, 1);
+ ropeAddedToHole = new VarbitRequirement(VarbitID.SWAMP_CAVES_ROPED_ENTRANCE, 1);
+ minedRocks = new VarbitRequirement(VarbitID.LOST_TRIBE_HOLE_2_DUG, 1);
- killedGuards = new VarbitRequirement(2283, 3);
+ killedGuards = new VarbitRequirement(VarbitID.DTTD_MILL_GUARDS_DEAD, 3);
}
public void setupSteps()
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/defenderofvarrock/DefenderOfVarrock.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/defenderofvarrock/DefenderOfVarrock.java
index 646a2e11595..d68ef380415 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/defenderofvarrock/DefenderOfVarrock.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/defenderofvarrock/DefenderOfVarrock.java
@@ -35,7 +35,6 @@
import net.runelite.client.plugins.microbot.questhelper.requirements.item.TeleportItemRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.player.SkillRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.quest.QuestRequirement;
-import net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper;
import net.runelite.client.plugins.microbot.questhelper.requirements.util.Operation;
import net.runelite.client.plugins.microbot.questhelper.requirements.var.VarbitRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.var.VarplayerRequirement;
@@ -93,13 +92,13 @@ public Map loadSteps()
steps.put(2, talkToElias);
ConditionalStep searchWithElias = new ConditionalStep(this, inspectTrapdoor);
- searchWithElias.addStep(LogicHelper.nor(inspectedPlant1), inspectPlant);
- searchWithElias.addStep(LogicHelper.nor(inspectedRock1), inspectRock);
- searchWithElias.addStep(LogicHelper.nor(inspectedPlant2), inspectPlant2);
- searchWithElias.addStep(LogicHelper.nor(inspectedBush1), inspectBush1);
- searchWithElias.addStep(LogicHelper.nor(inspectedBush2), inspectBush2);
- searchWithElias.addStep(LogicHelper.nor(inspectedBush3), inspectBush3);
- searchWithElias.addStep(LogicHelper.nor(inspectedTrapdoor), inspectTrapdoor);
+ searchWithElias.addStep(nor(inspectedPlant1), inspectPlant);
+ searchWithElias.addStep(nor(inspectedRock1), inspectRock);
+ searchWithElias.addStep(nor(inspectedPlant2), inspectPlant2);
+ searchWithElias.addStep(nor(inspectedBush1), inspectBush1);
+ searchWithElias.addStep(nor(inspectedBush2), inspectBush2);
+ searchWithElias.addStep(nor(inspectedBush3), inspectBush3);
+ searchWithElias.addStep(nor(inspectedTrapdoor), inspectTrapdoor);
ConditionalStep findBase = new ConditionalStep(this, talkToElias);
findBase.addStep(eliasFollowing, searchWithElias);
@@ -186,22 +185,22 @@ public Map loadSteps()
// 9667 = page of census
ConditionalStep talkToCandidates = new ConditionalStep(this, talkToHalen);
- talkToCandidates.addStep(and(LogicHelper.nor(talkedToRoald), inVarrockInvasion), talkToRoald);
- talkToCandidates.addStep(LogicHelper.nor(talkedToRoald), talkToRoaldOutsideInstance);
+ talkToCandidates.addStep(and(nor(talkedToRoald), inVarrockInvasion), talkToRoald);
+ talkToCandidates.addStep(nor(talkedToRoald), talkToRoaldOutsideInstance);
- talkToCandidates.addStep(and(LogicHelper.nor(talkedToAeonisig), inVarrockInvasion), talkToAeonisig);
- talkToCandidates.addStep(LogicHelper.nor(talkedToAeonisig), talkToAeonisigOutsideInstance);
+ talkToCandidates.addStep(and(nor(talkedToAeonisig), inVarrockInvasion), talkToAeonisig);
+ talkToCandidates.addStep(nor(talkedToAeonisig), talkToAeonisigOutsideInstance);
- talkToCandidates.addStep(and(LogicHelper.nor(talkedToPrysin), inVarrockInvasion), talkToPrysin);
- talkToCandidates.addStep(LogicHelper.nor(talkedToPrysin), talkToPrysinOutsideInstance);
+ talkToCandidates.addStep(and(nor(talkedToPrysin), inVarrockInvasion), talkToPrysin);
+ talkToCandidates.addStep(nor(talkedToPrysin), talkToPrysinOutsideInstance);
- talkToCandidates.addStep(and(LogicHelper.nor(talkedToRomeo), inVarrockInvasion), talkToRomeoFromInstance);
- talkToCandidates.addStep(LogicHelper.nor(talkedToRomeo), talkToRomeo);
+ talkToCandidates.addStep(and(nor(talkedToRomeo), inVarrockInvasion), talkToRomeoFromInstance);
+ talkToCandidates.addStep(nor(talkedToRomeo), talkToRomeo);
- talkToCandidates.addStep(and(LogicHelper.nor(talkedToHorvik), inVarrockInvasion), talkToHorvikFromInstance);
- talkToCandidates.addStep(LogicHelper.nor(talkedToHorvik), talkToHorvik);
+ talkToCandidates.addStep(and(nor(talkedToHorvik), inVarrockInvasion), talkToHorvikFromInstance);
+ talkToCandidates.addStep(nor(talkedToHorvik), talkToHorvik);
- talkToCandidates.addStep(and(LogicHelper.nor(talkedToHalen), inVarrockInvasion), talkToHalenFromInstance);
+ talkToCandidates.addStep(and(nor(talkedToHalen), inVarrockInvasion), talkToHalenFromInstance);
steps.put(46, talkToCandidates);
ConditionalStep goTalkToDim = new ConditionalStep(this, talkToDimintheis);
@@ -261,13 +260,13 @@ public void setupConditions()
// 9655 4->6
// 9659 0->1
- inspectedPlant1 = new VarbitRequirement(9659, 1);
- inspectedRock1 = new VarbitRequirement(9660, 1);
- inspectedPlant2 = new VarbitRequirement(9661, 1);
- inspectedBush1 = new VarbitRequirement(9662, 1);
- inspectedBush2 = new VarbitRequirement(9663, 1);
- inspectedBush3 = new VarbitRequirement(9664, 1);
- inspectedTrapdoor = new VarbitRequirement(9665, 1);
+ inspectedPlant1 = new VarbitRequirement(VarbitID.DOV_HUNTING_TRAIL_1, 1);
+ inspectedRock1 = new VarbitRequirement(VarbitID.DOV_HUNTING_TRAIL_2, 1);
+ inspectedPlant2 = new VarbitRequirement(VarbitID.DOV_HUNTING_TRAIL_3, 1);
+ inspectedBush1 = new VarbitRequirement(VarbitID.DOV_HUNTING_TRAIL_4, 1);
+ inspectedBush2 = new VarbitRequirement(VarbitID.DOV_HUNTING_TRAIL_5, 1);
+ inspectedBush3 = new VarbitRequirement(VarbitID.DOV_HUNTING_TRAIL_6, 1);
+ inspectedTrapdoor = new VarbitRequirement(VarbitID.SETTINGS_DISABLE_TOOLTIP_IN_INTERFACE, 1);
inDungeon = new ZoneRequirement(new Zone(14151));
redMistNearby = new ObjectCondition(ObjectID.DOV_RED_MIST);
@@ -279,13 +278,13 @@ public void setupConditions()
inCastleF1Invasion = new ZoneRequirement(castleF1Invasion);
inCastleF2Invasion = new ZoneRequirement(castleF2Invasion);
- talkedToRoald = new VarbitRequirement(9669, 1);
- talkedToAeonisig = new VarbitRequirement(9670, 1);
- talkedToPrysin = new VarbitRequirement(9671, 1);
- talkedToHorvik = new VarbitRequirement(9672, 1);
- talkedToRomeo = new VarbitRequirement(9673, 1);
+ talkedToRoald = new VarbitRequirement(VarbitID.DOV_SHIELD_ROALD, 1);
+ talkedToAeonisig = new VarbitRequirement(VarbitID.DOV_SHIELD_AEONISIG, 1);
+ talkedToPrysin = new VarbitRequirement(VarbitID.DOV_SHIELD_PRYSIN, 1);
+ talkedToHorvik = new VarbitRequirement(VarbitID.DOV_SHIELD_HORVIK, 1);
+ talkedToRomeo = new VarbitRequirement(VarbitID.DOV_SHIELD_ROMEO, 1);
// NOTE: Missing 74/75?
- talkedToHalen = new VarbitRequirement(9676, 1);
+ talkedToHalen = new VarbitRequirement(VarbitID.DOV_SHIELD_HAIG, 1);
givenShield = new VarbitRequirement(VarbitID.DOV, 50, Operation.GREATER_EQUAL);
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/demonslayer/DemonSlayer.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/demonslayer/DemonSlayer.java
index aa68bec0a35..3cb2d378ff2 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/demonslayer/DemonSlayer.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/demonslayer/DemonSlayer.java
@@ -43,6 +43,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import java.util.*;
@@ -148,11 +149,11 @@ public void setupConditions()
inVarrockSewer = new ZoneRequirement(varrockSewer);
inTowerFloor1 = new ZoneRequirement(towerFloor1);
// 2568 going to 2 means you've taken the key, thus the key won't be there to be picked up should the key be deleted
- hasPouredWaterIntoDrain = new VarbitRequirement(2568, 1);
- obtainedSilverlight = new VarbitRequirement(2567, 1);
+ hasPouredWaterIntoDrain = new VarbitRequirement(VarbitID.DELRITH_DRAIN_KEY, 1);
+ obtainedSilverlight = new VarbitRequirement(VarbitID.DELRITH_SILVERLIGHT_CASE, 1);
delrithNearby = new NpcCondition(NpcID.DELRITH);
delrithWeakenedNearby = new NpcCondition(NpcID.DELRITH_WEAKENED);
- inInstance = new VarbitRequirement(2569, 1);
+ inInstance = new VarbitRequirement(VarbitID.DELRITH_SEEN_SUMMONING_CUTSCENE, 1);
}
@Override
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deserttreasure/DesertTreasure.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deserttreasure/DesertTreasure.java
index 32901db71fe..6bf30876cfc 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deserttreasure/DesertTreasure.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deserttreasure/DesertTreasure.java
@@ -202,11 +202,11 @@ protected void setupRequirements()
{
coins650 = new ItemRequirement("Coins", ItemCollections.COINS, 650);
magicLogs12 = new ItemRequirement("Magic logs (can be noted)", ItemID.MAGIC_LOGS, 12);
- magicLogs12.addAlternates(NullItemID.NULL_1514);
+ magicLogs12.addAlternates(ItemID.Cert.MAGIC_LOGS);
steelBars6 = new ItemRequirement("Steel bar (can be noted)", ItemID.STEEL_BAR, 6);
- steelBars6.addAlternates(NullItemID.NULL_2354);
+ steelBars6.addAlternates(ItemID.Cert.STEEL_BAR);
moltenGlass6 = new ItemRequirement("Molten glass (can be noted)", ItemID.MOLTEN_GLASS, 6);
- moltenGlass6.addAlternates(NullItemID.NULL_1776);
+ moltenGlass6.addAlternates(ItemID.Cert.MOLTEN_GLASS);
ashes = new ItemRequirement("Ashes", ItemID.ASHES);
charcoal = new ItemRequirement("Charcoal", ItemID.CHARCOAL);
bloodRune = new ItemRequirement("Blood rune", ItemID.BLOODRUNE);
@@ -344,22 +344,22 @@ protected void setupZones()
public void setupConditions()
{
// Given all items, 392 = 1;
- killedDamis = new VarbitRequirement(383, 5);
+ killedDamis = new VarbitRequirement(VarbitID.FD_SHADOWWARRIOR_QUEST, 5);
hadSmokeDiamond = new Conditions(true, smokeDiamond);
gotIceDiamond = new Conditions(true, iceDiamond);
- gotBloodDiamond = new VarbitRequirement(373, 4);
+ gotBloodDiamond = new VarbitRequirement(VarbitID.FDVW_SUBQUEST, 4);
inSmokeDungeon = new ZoneRequirement(smokeDungeon);
inFareedRoom = new ZoneRequirement(fareedRoom);
- litTorch1 = new VarbitRequirement(360, 1);
- litTorch2 = new VarbitRequirement(361, 1);
- litTorch3 = new VarbitRequirement(363, 1);
- litTorch4 = new VarbitRequirement(362, 1);
- unlockedFareedDoor = new VarbitRequirement(386, 1);
- killedFareed = new VarbitRequirement(376, 1);
- talkedToRasolo = new VarbitRequirement(383, 2);
+ litTorch1 = new VarbitRequirement(VarbitID.FD_TORCH_COUNT1, 1);
+ litTorch2 = new VarbitRequirement(VarbitID.FD_TORCH_COUNT2, 1);
+ litTorch3 = new VarbitRequirement(VarbitID.FD_TORCH_COUNT4, 1);
+ litTorch4 = new VarbitRequirement(VarbitID.FD_TORCH_COUNT3, 1);
+ unlockedFareedDoor = new VarbitRequirement(VarbitID.FD_FIREWARGATE, 1);
+ killedFareed = new VarbitRequirement(VarbitID.FD_KILLED_FIREWARRIOR, 1);
+ talkedToRasolo = new VarbitRequirement(VarbitID.FD_SHADOWWARRIOR_QUEST, 2);
gotRing = new VarbitRequirement(VarbitID.FD_SHADOWWARRIOR_QUEST, 3, Operation.GREATER_EQUAL);
- unlockedCrossChest = new VarbitRequirement(384, 1);
+ unlockedCrossChest = new VarbitRequirement(VarbitID.FD_BANDITCHEST_DISARMED, 1);
inShadowDungeon = new ZoneRequirement(shadowDungeon);
@@ -367,35 +367,35 @@ public void setupConditions()
damis2Nearby = new NpcInteractingRequirement(NpcID.FD_DAMIS_TOUGHER);
// 385 0->1, in Damis spawn area?
- talkedToMalak = new VarbitRequirement(373, 1);
- askedAboutKillingDessous = new VarbitRequirement(373, 2);
+ talkedToMalak = new VarbitRequirement(VarbitID.FDVW_SUBQUEST, 1);
+ askedAboutKillingDessous = new VarbitRequirement(VarbitID.FDVW_SUBQUEST, 2);
inDraynorSewer = new ZoneRequirement(draynorSewer);
dessousNearby = new NpcCondition(NpcID.BLOODDIAMOND_VAMPIREWARRIOR);
- killedDessous = new VarbitRequirement(373, 3);
+ killedDessous = new VarbitRequirement(VarbitID.FDVW_SUBQUEST, 3);
- gaveCake = new VarbitRequirement(382, 1);
+ gaveCake = new VarbitRequirement(VarbitID.FD_ICEWARRIOR_SUBQUEST, 1);
talkedToTrollChild = new VarbitRequirement(VarbitID.FD_ICEWARRIOR_SUBQUEST, 2, Operation.GREATER_EQUAL);
// Killed kamil also results in 377 0->1
killedKamil = new VarbitRequirement(VarbitID.FD_ICEWARRIOR_SUBQUEST, 3, Operation.GREATER_EQUAL);
- freedTrolls = new VarbitRequirement(382, 4);
- gotIceDiamond = new VarbitRequirement(382, 5);
+ freedTrolls = new VarbitRequirement(VarbitID.FD_ICEWARRIOR_SUBQUEST, 4);
+ gotIceDiamond = new VarbitRequirement(VarbitID.FD_ICEWARRIOR_SUBQUEST, 5);
- killedTrolls = new VarbitRequirement(378, 5);
+ killedTrolls = new VarbitRequirement(VarbitID.FD_ICEWARRIOR_TROLLSKILLED, 5);
inTrollArea = new ZoneRequirement(trollArea);
inPath = new ZoneRequirement(path1, path2);
onIcePath = new ZoneRequirement(icePath);
onIceBridge = new ZoneRequirement(iceBridge);
- smashedIce1 = new VarbitRequirement(380, 1);
+ smashedIce1 = new VarbitRequirement(VarbitID.FD_ICEWARRIOR_DADFREE, 1);
- placedSmoke = new VarbitRequirement(387, 1);
- placedShadow = new VarbitRequirement(388, 1);
- placedIce = new VarbitRequirement(389, 1);
- placedBlood = new VarbitRequirement(390, 1);
+ placedSmoke = new VarbitRequirement(VarbitID.FD_COLUMN_FIRE, 1);
+ placedShadow = new VarbitRequirement(VarbitID.FD_COLUMN_SHADOW, 1);
+ placedIce = new VarbitRequirement(VarbitID.FD_COLUMN_ICE, 1);
+ placedBlood = new VarbitRequirement(VarbitID.FD_COLUMN_BLOOD, 1);
inFloor1 = new ZoneRequirement(floor1);
inFloor2 = new ZoneRequirement(floor2);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deserttreasureii/DesertTreasureII.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deserttreasureii/DesertTreasureII.java
index 078746c6a70..621262fca34 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deserttreasureii/DesertTreasureII.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deserttreasureii/DesertTreasureII.java
@@ -427,28 +427,28 @@ public void setupConditions()
inGolemRoom = new ZoneRequirement(golemRoom);
inFinalRoom = new ZoneRequirement(finalRoom);
- inspectedPlaque = new VarbitRequirement(15105, 1);
- inspectedStatueNE = new VarbitRequirement(15106, 1);
- inspectedStatueSE = new VarbitRequirement(15107, 1);
- inspectedStatueSW = new VarbitRequirement(15108, 1);
- inspectedStatueNW = new VarbitRequirement(15109, 1);
+ inspectedPlaque = new VarbitRequirement(VarbitID.DT2_VAULT_PLAQUE, 1);
+ inspectedStatueNE = new VarbitRequirement(VarbitID.DT2_VAULT_STATUE_VARDORVIS, 1);
+ inspectedStatueSE = new VarbitRequirement(VarbitID.DT2_VAULT_STATUE_PERSERIYA, 1);
+ inspectedStatueSW = new VarbitRequirement(VarbitID.DT2_VAULT_STATUE_SUCELLUS, 1);
+ inspectedStatueNW = new VarbitRequirement(VarbitID.DT2_VAULT_STATUE_WHISPERER, 1);
// 12139 0->1 (cutscene specific ID)
// VarPlayer 3575 3840 -> 7936
inspectedGolem = new VarbitRequirement(QuestVarbits.QUEST_DESERT_TREASURE_II.getId(), 30,
Operation.GREATER_EQUAL);
// TODO: FIX CHECK FOR INSPECTED ALTAR, THOUGHT IT WAS 15111 BUT IT WASN'T
- inspectedAltar = new VarbitRequirement(15109, 1);
+ inspectedAltar = new VarbitRequirement(VarbitID.DT2_VAULT_STATUE_WHISPERER, 1);
// CAST BLOOD BARRAGE
// 15116 0->4
// 15119 0->1
- smokeBeenCast = new VarbitRequirement(15117, 1);
- shadowBeenCast = new VarbitRequirement(15118, 1);
- bloodBeenCast = new VarbitRequirement(15119, 1);
- iceBeenCast = new VarbitRequirement(15120, 1);
+ smokeBeenCast = new VarbitRequirement(VarbitID.DT2_WAR_ROOM_SMOKE_TOTEM, 1);
+ shadowBeenCast = new VarbitRequirement(VarbitID.DT2_WAR_ROOM_SHADOW_TOTEM, 1);
+ bloodBeenCast = new VarbitRequirement(VarbitID.DT2_WAR_ROOM_BLOOD_TOTEM, 1);
+ iceBeenCast = new VarbitRequirement(VarbitID.DT2_WAR_ROOM_ICE_TOTEM, 1);
- castAllSpells = new VarbitRequirement(15116, 15);
+ castAllSpells = new VarbitRequirement(VarbitID.DT2_WAR_ROOM_ALTAR, 15);
inPuzzle = new WidgetTextRequirement(838, 10, "One cell per row!");
@@ -521,10 +521,10 @@ public void setupConditions()
// 14862 86->88
// 15129 0->1
- cellUnlocked = new VarbitRequirement(15124, 1);
+ cellUnlocked = new VarbitRequirement(VarbitID.DT2_HIDEOUT_GATE_UNLOCKED, 1);
// Left cell, 88->90
- itemsRetrieved = new VarbitRequirement(14283, 0);
+ itemsRetrieved = new VarbitRequirement(VarbitID.HOLDING_INVENTORY_LOCATION, 0);
// Stranger cutscene
// 4606 0->3
// 12139 0->1
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deserttreasureii/PerseriyaSteps.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deserttreasureii/PerseriyaSteps.java
index 6c7317db9d6..419bf9c8b98 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deserttreasureii/PerseriyaSteps.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deserttreasureii/PerseriyaSteps.java
@@ -38,7 +38,6 @@
import net.runelite.client.plugins.microbot.questhelper.requirements.player.PrayerRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.player.SpellbookRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.util.ItemSlots;
-import net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper;
import net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicType;
import net.runelite.client.plugins.microbot.questhelper.requirements.util.Operation;
import net.runelite.client.plugins.microbot.questhelper.requirements.util.Spellbook;
@@ -47,11 +46,11 @@
import net.runelite.client.plugins.microbot.questhelper.requirements.zone.ZoneRequirement;
import net.runelite.client.plugins.microbot.questhelper.steps.*;
import net.runelite.api.Prayer;
-import net.runelite.api.SpriteID;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.SpriteID;
import net.runelite.api.gameval.VarbitID;
import java.util.Arrays;
@@ -63,8 +62,6 @@ public class PerseriyaSteps extends ConditionalStep
{
ItemRequirement eyeTeleport, facemask;
- final int PERSERIYA_VARBIT = 15128;
-
DetailedQuestStep enterWizardBasement, enterPortalToTempleOfTheEye, killDemons, hopOverSteppingStone, talkToPersten, enterPassage1,
enterPathfinderRoom;
@@ -375,11 +372,11 @@ protected void setupConditions()
// 13095 0->100
// 5934 0->1->2->3->4???
- defeatedDemons = new VarbitRequirement(PERSERIYA_VARBIT, 8, Operation.GREATER_EQUAL);
+ defeatedDemons = new VarbitRequirement(VarbitID.DT2_SCAR, 8, Operation.GREATER_EQUAL);
- attemptedToBoardBoat = new VarbitRequirement(PERSERIYA_VARBIT, 10, Operation.GREATER_EQUAL);
+ attemptedToBoardBoat = new VarbitRequirement(VarbitID.DT2_SCAR, 10, Operation.GREATER_EQUAL);
// 12139 1->0 after boat attempt
- talkedToPersten = new VarbitRequirement(PERSERIYA_VARBIT, 14, Operation.GREATER_EQUAL);
+ talkedToPersten = new VarbitRequirement(VarbitID.DT2_SCAR, 14, Operation.GREATER_EQUAL);
// In room 1
// 15128 14->16
@@ -394,12 +391,12 @@ protected void setupConditions()
onPath5 = new ZoneRequirement(path5);
onPath6 = new ZoneRequirement(path6);
- destroyedTether = new VarbitRequirement(15258, 1);
+ destroyedTether = new VarbitRequirement(VarbitID.DT2_SCAR_MAZE_CHALLENGE_1_DONE, 1);
isNearCatalystRoom = new ZoneRequirement(nearCatalystRoom1, nearCatalystRoom2);
inCatalystRoom = new ZoneRequirement(catalystRoom);
- completedCatalystRoom = new VarbitRequirement(15259, 1);
+ completedCatalystRoom = new VarbitRequirement(VarbitID.DT2_SCAR_MAZE_CHALLENGE_2_DONE, 1);
isNearGrowthRoom = new ZoneRequirement(nearGrowth1, nearGrowth2);
// On login to main area, 12164 0->1
// 13989 0->1
@@ -428,24 +425,24 @@ protected void setupConditions()
// 202
inGrowthRoom = new ZoneRequirement(growthRoom);
- repairedGrowths = new VarbitRequirement(15210, 4);
- solvedGrowthRoom = new VarbitRequirement(15260, 1);
+ repairedGrowths = new VarbitRequirement(VarbitID.DT2_SCAR_MAZE_LIGHTS, 4);
+ solvedGrowthRoom = new VarbitRequirement(VarbitID.DT2_SCAR_MAZE_CHALLENGE_3_DONE, 1);
// Entered boat room, 15261 0->1
inBoatRoom1 = new ZoneRequirement(boatRoom1);
// TODO: Verify if order is random for this stuff, and thus variable needs to consider some shift based on area?h
haveReadTablet = new Conditions(LogicType.OR,
- new VarbitRequirement(PERSERIYA_VARBIT, 18),
- new VarbitRequirement(PERSERIYA_VARBIT, 26),
- new VarbitRequirement(PERSERIYA_VARBIT, 34)
+ new VarbitRequirement(VarbitID.DT2_SCAR, 18),
+ new VarbitRequirement(VarbitID.DT2_SCAR, 26),
+ new VarbitRequirement(VarbitID.DT2_SCAR, 34)
);
// 18->20, burned ship
// 15128 20->22, talked to Persten
// Attempted to enter room 2, 22->24
- completedRoom1 = new VarbitRequirement(PERSERIYA_VARBIT, 20, Operation.GREATER_EQUAL);
- talkedToPerstenAfterRoom1 = new VarbitRequirement(PERSERIYA_VARBIT, 22, Operation.GREATER_EQUAL);
+ completedRoom1 = new VarbitRequirement(VarbitID.DT2_SCAR, 20, Operation.GREATER_EQUAL);
+ talkedToPerstenAfterRoom1 = new VarbitRequirement(VarbitID.DT2_SCAR, 22, Operation.GREATER_EQUAL);
// Room 2
inAxonRoom = new ZoneRequirement(axonRoom1, axonRoom2, axonRoom3);
@@ -456,7 +453,7 @@ protected void setupConditions()
waterAxonPresent = new NpcRequirement(NpcID.DT2_SCAR_MAZE_3_PATHING_NPC, "Abyssal Axon (Water)");
fireAxonPresent = new NpcRequirement(NpcID.DT2_SCAR_MAZE_3_PATHING_NPC, "Abyssal Axon (Fire)");
natureAxonPresent = new NpcRequirement(NpcID.DT2_SCAR_MAZE_3_PATHING_NPC, "Abyssal Axon (Nature)");
- completedAxonRoom = new VarbitRequirement(15258, 1);
+ completedAxonRoom = new VarbitRequirement(VarbitID.DT2_SCAR_MAZE_CHALLENGE_1_DONE, 1);
nothingInHands = and(new NoItemRequirement("Weapon", ItemSlots.WEAPON),
new NoItemRequirement("Shield", ItemSlots.SHIELD));
@@ -472,14 +469,14 @@ protected void setupConditions()
dustNerveBroken = new ObjectCondition(ObjectID.DT2_SCAR_MAZE_3_COMBINATION_ENDING_DUST, new WorldPoint(1784, 6433, 0));
steamNerveBroken = new ObjectCondition(ObjectID.DT2_SCAR_MAZE_3_COMBINATION_ENDING_STEAM, new WorldPoint(1783, 6430, 0));
- completedNerveRoom = new VarbitRequirement(15259, 1);
+ completedNerveRoom = new VarbitRequirement(VarbitID.DT2_SCAR_MAZE_CHALLENGE_2_DONE, 1);
inNervePassage = new ZoneRequirement(nervePassage);
impsNearby = new NpcRequirement("Scarred imp", NpcID.DT2_SCAR_MAZE_3_LINK_NPC);
- completedSummoningRoom = new VarbitRequirement(15260, 1);
+ completedSummoningRoom = new VarbitRequirement(VarbitID.DT2_SCAR_MAZE_CHALLENGE_3_DONE, 1);
// Entered boat room, 15261 0->1. Seems to indicate 'teleport to boat room if they leave'
- shouldReadTablet1 = new VarbitRequirement(PERSERIYA_VARBIT, 16);
- shouldReadTablet2 = new VarbitRequirement(PERSERIYA_VARBIT, 24);
- shouldReadTablet3 = new VarbitRequirement(PERSERIYA_VARBIT, 32);
+ shouldReadTablet1 = new VarbitRequirement(VarbitID.DT2_SCAR, 16);
+ shouldReadTablet2 = new VarbitRequirement(VarbitID.DT2_SCAR, 24);
+ shouldReadTablet3 = new VarbitRequirement(VarbitID.DT2_SCAR, 32);
// 15128 26->28 burnt second boat
// 15260 1->0
// 15259 1->0
@@ -487,8 +484,8 @@ protected void setupConditions()
// 15261 0->1
// PERSTEN 2 = 28
- completedRoom2 = new VarbitRequirement(PERSERIYA_VARBIT, 28, Operation.GREATER_EQUAL);
- talkedToPerstenAfterRoom2 = new VarbitRequirement(PERSERIYA_VARBIT, 30, Operation.GREATER_EQUAL);
+ completedRoom2 = new VarbitRequirement(VarbitID.DT2_SCAR, 28, Operation.GREATER_EQUAL);
+ talkedToPerstenAfterRoom2 = new VarbitRequirement(VarbitID.DT2_SCAR, 30, Operation.GREATER_EQUAL);
// ENTER ROOM 3
// 15212 0->1
@@ -513,18 +510,18 @@ protected void setupConditions()
inLeechRoom = new ZoneRequirement(leechRoom);
inBoatRoom3 = new ZoneRequirement(boatRoom3);
- solvedMemoryRoom = new VarbitRequirement(15258, 1);
- solvedTreeRoom = new VarbitRequirement(15260, 1);
- solvedLeechRoom = new VarbitRequirement(15259, 1);
+ solvedMemoryRoom = new VarbitRequirement(VarbitID.DT2_SCAR_MAZE_CHALLENGE_1_DONE, 1);
+ solvedTreeRoom = new VarbitRequirement(VarbitID.DT2_SCAR_MAZE_CHALLENGE_3_DONE, 1);
+ solvedLeechRoom = new VarbitRequirement(VarbitID.DT2_SCAR_MAZE_CHALLENGE_2_DONE, 1);
protectFromMagic = new PrayerRequirement("Protect from Magic", Prayer.PROTECT_FROM_MAGIC);
inSwRoom3 = new ZoneRequirement(swRoom3P1, swRoom3P2, swRoom3P3, swRoom3P4, swRoom3P5);
- repairedGrowthRoom3 = new VarbitRequirement(15210, 4);
- repairedCrimsonVeins = new VarbitRequirement(15219, 3);
+ repairedGrowthRoom3 = new VarbitRequirement(VarbitID.DT2_SCAR_MAZE_LIGHTS, 4);
+ repairedCrimsonVeins = new VarbitRequirement(VarbitID.DT2_SCAR_MAZE_2_RED_BLOOD_COUNT, 3);
- completedRoom3 = new VarbitRequirement(PERSERIYA_VARBIT, 36, Operation.GREATER_EQUAL);
+ completedRoom3 = new VarbitRequirement(VarbitID.DT2_SCAR, 36, Operation.GREATER_EQUAL);
- readyToFightLeviathan = new VarbitRequirement(PERSERIYA_VARBIT, 38, Operation.GREATER_EQUAL);
+ readyToFightLeviathan = new VarbitRequirement(VarbitID.DT2_SCAR, 38, Operation.GREATER_EQUAL);
inLeviathanArea = new ZoneRequirement(leviathanArea);
// Killed leviathan
@@ -534,10 +531,10 @@ protected void setupConditions()
// 1683 12215->-1
// 12401 1->0 (healthbar?)
- defeatedLeviathan = new VarbitRequirement(PERSERIYA_VARBIT, 42, Operation.GREATER_EQUAL);
+ defeatedLeviathan = new VarbitRequirement(VarbitID.DT2_SCAR, 42, Operation.GREATER_EQUAL);
inNELeviathanArea = new ZoneRequirement(neLeviathanArea);
- perstenAtShip = new VarbitRequirement(PERSERIYA_VARBIT, 44, Operation.GREATER_EQUAL);
- perstenLeft = new VarbitRequirement(PERSERIYA_VARBIT, 46, Operation.GREATER_EQUAL);
+ perstenAtShip = new VarbitRequirement(VarbitID.DT2_SCAR, 44, Operation.GREATER_EQUAL);
+ perstenLeft = new VarbitRequirement(VarbitID.DT2_SCAR, 46, Operation.GREATER_EQUAL);
// Searched debris
// 15128 46->48
@@ -550,7 +547,7 @@ protected void setupConditions()
// Obtain medallion again, resets
// Seemed to cap at 10
- foundPerseriyasMedallion = new VarbitRequirement(PERSERIYA_VARBIT, 48, Operation.GREATER_EQUAL);
+ foundPerseriyasMedallion = new VarbitRequirement(VarbitID.DT2_SCAR, 48, Operation.GREATER_EQUAL);
}
protected void setupSteps()
@@ -621,7 +618,7 @@ protected void setupSteps()
DetailedQuestStep doPath1RealStep = new DetailedQuestStep(getQuestHelper(), new WorldPoint(2197, 6444, 0),
"Move the nearest pathfinder from the north, and follow it within a 3x3 area until the next pathfinder.");
- doPath1RealStep.addTileMarker(new WorldPoint(2195, 6451, 0), SpriteID.RS2_SWORD_POINTED_LEFT);
+ doPath1RealStep.addTileMarker(new WorldPoint(2195, 6451, 0), SpriteID.Sworddecor.LEFT);
doPath1RealStep.setLinePoints(Arrays.asList(
new WorldPoint(2195, 6450, 0),
new WorldPoint(2195, 6444, 0),
@@ -632,7 +629,7 @@ protected void setupSteps()
DetailedQuestStep doPath2RealStep = new DetailedQuestStep(getQuestHelper(), new WorldPoint(2202, 6442, 0),
"Move the next pathfinder from the west, and step off when safe to the south pathfinder.");
- doPath2RealStep.addTileMarker(new WorldPoint(2197, 6444, 0), SpriteID.RS2_SWORD_POINTED_LEFT);
+ doPath2RealStep.addTileMarker(new WorldPoint(2197, 6444, 0), SpriteID.Sworddecor.LEFT);
doPath2RealStep.setLinePoints(Arrays.asList(
new WorldPoint(2199, 6444, 0),
new WorldPoint(2202, 6444, 0),
@@ -643,7 +640,7 @@ protected void setupSteps()
DetailedQuestStep doPath3RealStep = new DetailedQuestStep(getQuestHelper(), new WorldPoint(2198, 6438, 0),
"Move the next pathbreaker from the north, and step off when safe to the west pathbreaker.");
- doPath3RealStep.addTileMarker(new WorldPoint(2202, 6442, 0), SpriteID.RS2_SWORD_POINTED_LEFT);
+ doPath3RealStep.addTileMarker(new WorldPoint(2202, 6442, 0), SpriteID.Sworddecor.LEFT);
doPath3RealStep.setLinePoints(Arrays.asList(
new WorldPoint(2202, 6440, 0),
new WorldPoint(2201, 6439, 0),
@@ -654,7 +651,7 @@ protected void setupSteps()
DetailedQuestStep doPath4RealStep = new DetailedQuestStep(getQuestHelper(), new WorldPoint(2196, 6435, 0),
"Move the next pathbreaker from the west, and step off when safe to the south-west pathbreaker.");
- doPath4RealStep.addTileMarker(new WorldPoint(2198, 6438, 0), SpriteID.RS2_SWORD_POINTED_LEFT);
+ doPath4RealStep.addTileMarker(new WorldPoint(2198, 6438, 0), SpriteID.Sworddecor.LEFT);
doPath4RealStep.setLinePoints(Arrays.asList(
new WorldPoint(2197, 6438, 0),
new WorldPoint(2196, 6435, 0)
@@ -663,7 +660,7 @@ protected void setupSteps()
DetailedQuestStep doPath5RealStep = new DetailedQuestStep(getQuestHelper(), new WorldPoint(2207, 6436, 0),
"Move the next pathbreaker from the east, and step off when safe to the east pathbreaker.");
- doPath5RealStep.addTileMarker(new WorldPoint(2196, 6435, 0), SpriteID.RS2_SWORD_POINTED_LEFT);
+ doPath5RealStep.addTileMarker(new WorldPoint(2196, 6435, 0), SpriteID.Sworddecor.LEFT);
doPath5RealStep.setLinePoints(Arrays.asList(
new WorldPoint(2196, 6435, 0),
new WorldPoint(2207, 6436, 0)
@@ -672,7 +669,7 @@ protected void setupSteps()
DetailedQuestStep doPath6RealStep = new ObjectStep(getQuestHelper(), ObjectID.DT2_SCAR_MAZE_ELECTRIC_FINISH, new WorldPoint(2210, 6433, 0),
"Move the next pathbreaker from the south, and step off to destroy the abyssal tether.");
- doPath6RealStep.addTileMarker(new WorldPoint(2207, 6436, 0), SpriteID.RS2_SWORD_POINTED_LEFT);
+ doPath6RealStep.addTileMarker(new WorldPoint(2207, 6436, 0), SpriteID.Sworddecor.LEFT);
doPath6RealStep.setLinePoints(Arrays.asList(
new WorldPoint(2207, 6436, 0),
new WorldPoint(2207, 6433, 0),
@@ -736,7 +733,7 @@ protected void setupSteps()
// [9816, 9672, 9777]
NpcStep hitCosmicAxonRealStep = new NpcStep(getQuestHelper(), NpcID.DT2_SCAR_MAZE_3_PATHING_NPC, "Abyssal Axon (Cosmic)", new WorldPoint(1743, 6421, 0),
"Hit the Cosmic Axon towards the Cosmic terminal. Avoid the lightning strikes.");
- hitCosmicAxonRealStep.addTileMarker(new WorldPoint(1746, 6414, 0), SpriteID.QUESTS_PAGE_ICON_BLUE_QUESTS);
+ hitCosmicAxonRealStep.addTileMarker(new WorldPoint(1746, 6414, 0), SpriteID.AchievementDiaryIcons.BLUE_QUESTS);
hitCosmicAxonRealStep.setLinePoints(Arrays.asList(
// Cosmic Axon
new WorldPoint(1749, 6419, 0),
@@ -748,7 +745,7 @@ protected void setupSteps()
// [553, 573, 542]
NpcStep hitFireAxonRealStep = new NpcStep(getQuestHelper(), NpcID.DT2_SCAR_MAZE_3_PATHING_NPC, "Abyssal Axon (Fire)", new WorldPoint(1743, 6421, 0),
"Hit the Fire Axon towards the Fire terminal. Avoid the lightning strikes.");
- hitFireAxonRealStep.addTileMarker(new WorldPoint(1748, 6426, 0), SpriteID.QUESTS_PAGE_ICON_BLUE_QUESTS);
+ hitFireAxonRealStep.addTileMarker(new WorldPoint(1748, 6426, 0), SpriteID.AchievementDiaryIcons.BLUE_QUESTS);
hitFireAxonRealStep.setLinePoints(Arrays.asList(
new WorldPoint(1744, 6413, 0),
new WorldPoint(1744, 6421, 0),
@@ -763,7 +760,7 @@ protected void setupSteps()
// [20013, 19904, 20126]
NpcStep hitNatureAxonRealStep = new NpcStep(getQuestHelper(), NpcID.DT2_SCAR_MAZE_3_PATHING_NPC, "Abyssal Axon (Nature)", new WorldPoint(1743, 6421, 0),
"Hit the Nature Axon towards the Nature terminal. Avoid the lightning strikes.");
- hitNatureAxonRealStep.addTileMarker(new WorldPoint(1733, 6426, 0), SpriteID.QUESTS_PAGE_ICON_BLUE_QUESTS);
+ hitNatureAxonRealStep.addTileMarker(new WorldPoint(1733, 6426, 0), SpriteID.AchievementDiaryIcons.BLUE_QUESTS);
hitNatureAxonRealStep.setLinePoints(Arrays.asList(
new WorldPoint(1743, 6424, 0),
new WorldPoint(1740, 6424, 0),
@@ -776,7 +773,7 @@ protected void setupSteps()
// [-25047, -25024, -25058]
NpcStep hitWaterAxonRealStep = new NpcStep(getQuestHelper(), NpcID.DT2_SCAR_MAZE_3_PATHING_NPC, "Abyssal Axon (Water)", new WorldPoint(1743, 6421, 0),
"Hit the Water Axon towards the Water terminal. Avoid the lightning strikes.");
- hitWaterAxonRealStep.addTileMarker(new WorldPoint(1736, 6414, 0), SpriteID.QUESTS_PAGE_ICON_BLUE_QUESTS);
+ hitWaterAxonRealStep.addTileMarker(new WorldPoint(1736, 6414, 0), SpriteID.AchievementDiaryIcons.BLUE_QUESTS);
hitWaterAxonRealStep.setLinePoints(Arrays.asList(
new WorldPoint(1735, 6422, 0),
new WorldPoint(1743, 6422, 0),
@@ -827,17 +824,17 @@ protected void setupSteps()
repairNerve.addStep(and(lavaNerveBroken, lavaNerve), repairLavaNerve);
repairNerve.addStep(and(lavaNerveBroken, fireNerve, earthNerve), makeLavaNerve);
repairNerve.addStep(and(lavaNerveBroken, fireNerve), getEarthNerve);
- repairNerve.addStep(LogicHelper.and(lavaNerveBroken), getFireNerve);
+ repairNerve.addStep(and(lavaNerveBroken), getFireNerve);
repairNerve.addStep(and(dustNerveBroken, dustNerve), repairDustNerve);
repairNerve.addStep(and(dustNerveBroken, airNerve, earthNerve), makeDustNerve);
repairNerve.addStep(and(dustNerveBroken, airNerve), getEarthNerve);
- repairNerve.addStep(LogicHelper.and(dustNerveBroken), getAirNerve);
+ repairNerve.addStep(and(dustNerveBroken), getAirNerve);
repairNerve.addStep(and(smokeNerveBroken, smokeNerve), repairSmokeNerve);
repairNerve.addStep(and(smokeNerveBroken, fireNerve, airNerve), makeSmokeNerve);
repairNerve.addStep(and(smokeNerveBroken, fireNerve), getAirNerve);
- repairNerve.addStep(LogicHelper.and(smokeNerveBroken), getFireNerve);
+ repairNerve.addStep(and(smokeNerveBroken), getFireNerve);
repairNerve.addStep(and(steamNerve), repairSteamNerve);
repairNerve.addStep(and(waterNerve, fireNerve), makeSteamNerve);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deserttreasureii/SucellusSteps.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deserttreasureii/SucellusSteps.java
index 69c3dc66ba6..8cdb45d52a5 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deserttreasureii/SucellusSteps.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deserttreasureii/SucellusSteps.java
@@ -32,7 +32,6 @@
import net.runelite.client.plugins.microbot.questhelper.requirements.Requirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.item.ItemOnTileRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.item.ItemRequirement;
-import net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper;
import net.runelite.client.plugins.microbot.questhelper.requirements.util.Operation;
import net.runelite.client.plugins.microbot.questhelper.requirements.var.VarbitRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.widget.WidgetTextRequirement;
@@ -91,9 +90,9 @@ public SucellusSteps(QuestHelper questHelper, QuestStep defaultStep)
addStep(and(oddKeyDoorUnlocked, or(inDukeBossArena, inDukeEntrance)), talkToAssassinAfterDuke);
addStep(and(oddKey, or(inDukeBossArena, inDukeEntrance)), enterRoomWestOfDuke);
addStep(and(inDukeEntrance, killedDuke), retrieveKeyFromDoor);
- addStep(LogicHelper.and(oddKeyNearby), pickUpOddKey);
- addStep(LogicHelper.and(inDukeBossArena), defeatDuke);
- addStep(LogicHelper.and(inDukeEntrance), enterDukeBossArea);
+ addStep(and(oddKeyNearby), pickUpOddKey);
+ addStep(and(inDukeBossArena), defeatDuke);
+ addStep(and(inDukeEntrance), enterDukeBossArea);
addStep(and(inPrisonF2, dukeArenaUnlocked), enterDukeArena);
addStep(and(inPrisonF2, defeatedJhallan), talkToAssassinAfterJhallanFight);
addStep(and(inPrisonF2, inJhallanFight), survive3Mins);
@@ -272,7 +271,7 @@ protected void setupConditions()
gotGear = new VarbitRequirement(VarbitID.DT2_GHORROCK, 50, Operation.GREATER_EQUAL);
talkedToAssassinWithGear = new VarbitRequirement(VarbitID.DT2_GHORROCK, 52, Operation.GREATER_EQUAL);
- unlockedSECrevice = new VarbitRequirement(15177, 1);
+ unlockedSECrevice = new VarbitRequirement(VarbitID.DT2_GHORROCK_SHORTCUT_1, 1);
inJhallanFight = new VarbitRequirement(VarbitID.DT2_GHORROCK, 54, Operation.GREATER_EQUAL);
defeatedJhallan = new VarbitRequirement(VarbitID.DT2_GHORROCK, 56, Operation.GREATER_EQUAL);
@@ -288,7 +287,7 @@ protected void setupConditions()
// Global state 70->72
oddKeyNearby = new ItemOnTileRequirement(oddKey);
- oddKeyDoorUnlocked = new VarbitRequirement(15179, 1);
+ oddKeyDoorUnlocked = new VarbitRequirement(VarbitID.DT2_GHORROCK_ASYLUM_GATE, 1);
talkedToAssassinAfterDuke = new VarbitRequirement(VarbitID.DT2_GHORROCK, 66, Operation.GREATER_EQUAL);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deserttreasureii/VardorvisSteps.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deserttreasureii/VardorvisSteps.java
index 3a217ec3e51..12acb7918c1 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deserttreasureii/VardorvisSteps.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deserttreasureii/VardorvisSteps.java
@@ -67,7 +67,7 @@ public class VardorvisSteps extends ConditionalStep
inAnyStranglewood, inVardorvisArea, unlockedShortcut, defeatedVardorvis, templeKeyNearby, kasondeAggressive, givenKasondeKey, defeatedKasonde,
kasondeRevealedMedallion, gotVardorvisMedallion, inVault;
ItemRequirement potionNote, strangePotion, freezes, berry, herb, unfinishedSerum, serumWithHerb, stranglerSerum, templeKey,
- vardorvisMedallion;
+ vardorvisMedallion, food;
Zone stranglewood, towerDefenseRoom, stranglewoodPyramidRoom, vardorvisArea, vault;
QuestBank questBank;
@@ -139,6 +139,7 @@ protected void setupItemRequirements()
potionNote = new ItemRequirement("Potion note", ItemID.DT2_KASONDE_NOTE);
strangePotion = new ItemRequirement("Strange potion", ItemID.DT2_KASONDE_POTION);
+ food = new ItemRequirement("Bring high healing food to tank the infected.", -1);
freezes = new ItemRequirement("Freezing spells STRONGLY recommended + reasonable mage accuracy", -1);
berry = new ItemRequirement("Argian berries", ItemID.DT2_STRANGLEWOOD_BERRIES);
berry.setTooltip("You can get another from the south-west corner of The Stranglewood");
@@ -193,10 +194,10 @@ protected void setupConditions()
toldAboutHerbAndBerry = new VarbitRequirement(VarbitID.DT2_STRANGLEWOOD, 24, Operation.GREATER_EQUAL);
// 15136 0->2 taken herb
// 15125 24->26, herb taken
- herbTaken = new VarbitRequirement(15136, 2);
+ herbTaken = new VarbitRequirement(VarbitID.DT2_STRANGLEWOOD_INGREDIENT_1, 2);
// 15125 26->28, picked berry
// 15137, 0->1 berry taken
- berryTaken = new VarbitRequirement(15137, 1);
+ berryTaken = new VarbitRequirement(VarbitID.DT2_STRANGLEWOOD_INGREDIENT_2, 1);
// 15125 28->30->32 when entering pyramid
inStranglewoodPyramidRoom = new ZoneRequirement(stranglewoodPyramidRoom);
@@ -249,6 +250,7 @@ protected void setupSteps()
defendKasonde = new DetailedQuestStep(getQuestHelper(), "Defend Kasonde! Read the sidebar for more details.");
defendKasonde.addRecommended(freezes);
+ defendKasonde.addRecommended(food);
defendKasondeSidebar.addSubSteps(defendKasonde);
// TODO: Get actual coordinate and ladder ID!
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deserttreasureii/WhispererSteps.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deserttreasureii/WhispererSteps.java
index 308ebbe29c3..12199953d69 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deserttreasureii/WhispererSteps.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deserttreasureii/WhispererSteps.java
@@ -37,7 +37,6 @@
import net.runelite.client.plugins.microbot.questhelper.requirements.location.TileIsLoadedRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.player.FreeInventorySlotRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.runelite.RuneliteRequirement;
-import net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper;
import net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicType;
import net.runelite.client.plugins.microbot.questhelper.requirements.util.Operation;
import net.runelite.client.plugins.microbot.questhelper.requirements.var.VarbitRequirement;
@@ -137,7 +136,7 @@ public WhispererSteps(QuestHelper questHelper, QuestStep defaultStep, QuestBank
lockedDoorSteps.addStep(and(inEastShadowRealm, blueShadowKey), activateBlackstoneFragment3);
lockedDoorSteps.addStep(and(inLassarShadowRealm, basicShadowTorchSchematic), activateBlackstoneFragment);
lockedDoorSteps.addStep(and(basicShadowTorchSchematic), bringKetlaTheBasicTorchSchematic);
- lockedDoorSteps.addStep(and(inFurnaceHouse, LogicHelper.nor(givenTorchSchematic)), takeShadowTorchSchematic);
+ lockedDoorSteps.addStep(and(inFurnaceHouse, nor(givenTorchSchematic)), takeShadowTorchSchematic);
lockedDoorSteps.addStep(and(inLassarShadowRealm, hadPurpleKey, blockerPlacedAtDoor), unlockDoor);
lockedDoorSteps.addStep(and(hadPurpleKey, blockerPlacedAtDoor), enterSciencePuddle);
lockedDoorSteps.addStep(and(hadPurpleKey, blockerNearby), retrieveShadowBlocker);
@@ -145,12 +144,12 @@ public WhispererSteps(QuestHelper questHelper, QuestStep defaultStep, QuestBank
lockedDoorSteps.addStep(and(hadPurpleKey, shadowBlocker, inStartingRoom), useTeleporterToScienceDistrict);
lockedDoorSteps.addStep(and(hadPurpleKey, shadowBlocker), placeBlockerInFurnaceBuilding);
lockedDoorSteps.addStep(and(hadPurpleKey, inStartingRoom), useTeleporterToKetla);
- lockedDoorSteps.addStep(LogicHelper.and(hadPurpleKey), claimShadowBlocker);
+ lockedDoorSteps.addStep(and(hadPurpleKey), claimShadowBlocker);
ConditionalStep blueKeySteps = new ConditionalStep(getQuestHelper(), claimRevitalisingIdol);
blueKeySteps.addStep(and(inLassarShadowRealm, destroyedTentacles2), activateBlackstoneFragment3);
blueKeySteps.addStep(and(inLassar, destroyedTentacles2), getBlueShadowKeyRealRealm);
- blueKeySteps.addStep(LogicHelper.and(inLassarShadowRealm), destroyTentacles2);
+ blueKeySteps.addStep(and(inLassarShadowRealm), destroyTentacles2);
blueKeySteps.addStep(and(idolPlaced, basicShadowTorch), enterResidentialPuddleAgain);
blueKeySteps.addStep(and(idolNearby, basicShadowTorch, activatedTeleporter7), pickUpIdol);
blueKeySteps.addStep(and(revitalisingIdol, basicShadowTorch, activatedTeleporter7), placeIdol);
@@ -183,7 +182,7 @@ public WhispererSteps(QuestHelper questHelper, QuestStep defaultStep, QuestBank
ConditionalStep getPerfectedSchematicSteps = new ConditionalStep(getQuestHelper(), placeBlockerWhiteChest);
getPerfectedSchematicSteps.addStep(and(inLassarShadowRealm, braziersLit), openFinalChest);
getPerfectedSchematicSteps.addStep(and(inLassarShadowRealm, lowSanity, idolShadowRealmFullNearby), restoreSanity);
- getPerfectedSchematicSteps.addStep(LogicHelper.and(inLassarShadowRealm), lightBraziers);
+ getPerfectedSchematicSteps.addStep(and(inLassarShadowRealm), lightBraziers);
getPerfectedSchematicSteps.addStep(and(placedBlockerWhiteChest, placedAnimaWhiteChest, placedIdolWhiteChest), enterPlazaPuddle2);
getPerfectedSchematicSteps.addStep(and(placedBlockerWhiteChest, placedAnimaWhiteChest), placeIdolWhiteChest);
getPerfectedSchematicSteps.addStep(placedBlockerWhiteChest, placeAnimaWhiteChest);
@@ -191,7 +190,7 @@ public WhispererSteps(QuestHelper questHelper, QuestStep defaultStep, QuestBank
ConditionalStep silentChoirSteps = new ConditionalStep(getQuestHelper(), enterPuddleNearPub);
silentChoirSteps.addStep(and(inPubShadowRealm, touchedPubRemnant), activateBlackstoneFragment8);
- silentChoirSteps.addStep(LogicHelper.and(inDrainF0), inspectPillar);
+ silentChoirSteps.addStep(and(inDrainF0), inspectPillar);
silentChoirSteps.addStep(and(inDrainF1, iconUsed), goDownDrainLadder);
silentChoirSteps.addStep(and(inDrainF1, strangeIcon), useIconInDrain);
silentChoirSteps.addStep(and(inLassar, touchedPubRemnant, or(strangeIcon, iconUsed)), enterDrain);
@@ -225,7 +224,7 @@ public WhispererSteps(QuestHelper questHelper, QuestStep defaultStep, QuestBank
addStep(and(inLassar, unlockedPerfectShadowTorch), claimPerfectShadowTorch); // NOTE: I was not told to do this
addStep(and(inCamdozaal, unlockedPerfectShadowTorch), descendDownRopeFight);
- addStep(LogicHelper.and(unlockedPerfectShadowTorch), enterRuinsOfCamdozaalFight);
+ addStep(and(unlockedPerfectShadowTorch), enterRuinsOfCamdozaalFight);
addStep(and(inLassar, escapedVision), talkToKetlaAfterVision);
addStep(inVision, talkToMe);
@@ -268,7 +267,7 @@ public WhispererSteps(QuestHelper questHelper, QuestStep defaultStep, QuestBank
addStep(and(inLassar, activatedTeleporter1, activatedTeleporter2, activatedTeleporter3), takeShadowBlockerSchematic);
addStep(and(inLassar, activatedTeleporter1, activatedTeleporter2), activateTeleporter3);
addStep(and(inLassar, activatedTeleporter1), activateTeleporter2);
- addStep(LogicHelper.and(inLassar), activateTeleporter1);
+ addStep(and(inLassar), activateTeleporter1);
addStep(and(inCamdozaal, ropeAttached), descendDownRope);
addStep(and(inCamdozaal, talkedToPrescott, veryLongRope), attachRope);
addStep(and(inCamdozaal, talkedToRamarno), talkToPrescott);
@@ -373,34 +372,32 @@ protected void setupConditions()
inResidentialDistrict = new ZoneRequirement(residentialDistrict);
inEastShadowRealm = new ZoneRequirement(eastShadowRealm);
- int WHISPERER_VARBIT = 15126;
-
// Varbit is for learning about the area from the previous quest
talkedToRamarno = new VarbitRequirement(VarbitID.CAMDOZAAL_RAMARNO_INTRO, 2, Operation.GREATER_EQUAL);
- talkedToPrescott = new VarbitRequirement(WHISPERER_VARBIT, 4, Operation.GREATER_EQUAL);
- ropeAttached = new VarbitRequirement(WHISPERER_VARBIT, 6, Operation.GREATER_EQUAL);
+ talkedToPrescott = new VarbitRequirement(VarbitID.DT2_LASSAR, 4, Operation.GREATER_EQUAL);
+ ropeAttached = new VarbitRequirement(VarbitID.DT2_LASSAR, 6, Operation.GREATER_EQUAL);
// Entered undercity:
// 15064 0->100
// 15126 6->8
// 14862 78->80
// varplayer 3575 36691712 -> 36699904
- activatedTeleporter1 = new VarbitRequirement(15088, 1);
- activatedTeleporter2 = new VarbitRequirement(15089, 1);
- activatedTeleporter3 = new VarbitRequirement(15091, 1);
- activatedTeleporter4 = new VarbitRequirement(15092, 1);
- activatedTeleporter5 = new VarbitRequirement(15093, 1);
- activatedTeleporter6 = new VarbitRequirement(15090, 1);
- activatedTeleporter7 = new VarbitRequirement(15094, 1);
+ activatedTeleporter1 = new VarbitRequirement(VarbitID.DT2_LASSAR_TELEPORTER_PALACE, 1);
+ activatedTeleporter2 = new VarbitRequirement(VarbitID.DT2_LASSAR_TELEPORTER_PLAZA, 1);
+ activatedTeleporter3 = new VarbitRequirement(VarbitID.DT2_LASSAR_TELEPORTER_SCIENCE_NORTH, 1);
+ activatedTeleporter4 = new VarbitRequirement(VarbitID.DT2_LASSAR_TELEPORTER_SCIENCE_SOUTH, 1);
+ activatedTeleporter5 = new VarbitRequirement(VarbitID.DT2_LASSAR_TELEPORTER_RESIDENTIAL_WEST, 1);
+ activatedTeleporter6 = new VarbitRequirement(VarbitID.DT2_LASSAR_TELEPORTER_CATHEDRAL, 1);
+ activatedTeleporter7 = new VarbitRequirement(VarbitID.DT2_LASSAR_TELEPORTER_RESIDENTIAL_EAST, 1);
- passedOutAtCathedral = new VarbitRequirement(WHISPERER_VARBIT, 10, Operation.GREATER_EQUAL);
+ passedOutAtCathedral = new VarbitRequirement(VarbitID.DT2_LASSAR, 10, Operation.GREATER_EQUAL);
// 10->12, ketla wants to see the ring
// 12->14, fragment is now safe
// 14->16, tried to give me fragment
- finishedTalkingToKetla = new VarbitRequirement(WHISPERER_VARBIT, 16, Operation.GREATER_EQUAL);
- givenShadowBlockerSchematic = new VarbitRequirement(15082, 1);
+ finishedTalkingToKetla = new VarbitRequirement(VarbitID.DT2_LASSAR, 16, Operation.GREATER_EQUAL);
+ givenShadowBlockerSchematic = new VarbitRequirement(VarbitID.DT2_LASSAR_SHADOW_BLOCKER_SCHEMATIC, 1);
// Entered science puddle
// 15162 0->1 (probably just 'is in shadow realm'?)
// 15163 0->3->13->14->15->16->17...100, ticks up to 100
@@ -460,7 +457,7 @@ protected void setupConditions()
// 15126 18->20
// Unsure when 16->18 happened
- givenTorchSchematic = new VarbitRequirement(15085, 1);
+ givenTorchSchematic = new VarbitRequirement(VarbitID.DT2_LASSAR_SHADOW_TORCH_T1_SCHEMATIC, 1);
ObjectCondition realWorldTentacleExists = new ObjectCondition(ObjectID.DT2_LASSAR_BARRIER_NORMAL_T1,
new Zone(new WorldPoint(2673, 6413, 0),
@@ -484,7 +481,7 @@ protected void setupConditions()
realWorldTentacleExists)
);
- givenIdolSchematic = new VarbitRequirement(15083, 1);
+ givenIdolSchematic = new VarbitRequirement(VarbitID.DT2_LASSAR_REVITALISING_IDOL_SCHEMATIC, 1);
idolPlaced = new ObjectCondition(ObjectID.DT2_LASSAR_REVITALISING_IDOL_NORMAL,
new Zone(new WorldPoint(2685, 6414, 0), new WorldPoint(2700, 6427, 0)));
@@ -537,7 +534,7 @@ protected void setupConditions()
// Picked up superior schematics
// 15126 20->22
- givenSuperiorTorchSchematic = new VarbitRequirement(15086, 1);
+ givenSuperiorTorchSchematic = new VarbitRequirement(VarbitID.DT2_LASSAR_SHADOW_TORCH_T2_SCHEMATIC, 1);
// 22->24
destroyedTentacles3 = new Conditions(
@@ -547,7 +544,7 @@ protected void setupConditions()
// Anima portal real world block:
// 48207, new W(2578, y=6398, 0) Shadow Realm: ObjectID.DT2_LASSAR_BARRIER_SHADOW_T2
- givenAnimaPortalSchematic = new VarbitRequirement(15084, 1);
+ givenAnimaPortalSchematic = new VarbitRequirement(VarbitID.DT2_LASSAR_ANIMA_PORTAL_SCHEMATIC, 1);
/* Tentacle 4 */
Conditions withinRangeOfTentacle4 = new Conditions(
@@ -602,13 +599,13 @@ protected void setupConditions()
));
// Schematic got
- obtainedPerfectedSchematic = new VarbitRequirement(WHISPERER_VARBIT, 26, Operation.GREATER_EQUAL);
+ obtainedPerfectedSchematic = new VarbitRequirement(VarbitID.DT2_LASSAR, 26, Operation.GREATER_EQUAL);
// 15126 24->26
- perfectSchematicGiven = new VarbitRequirement(WHISPERER_VARBIT, 28, Operation.GREATER_EQUAL);
+ perfectSchematicGiven = new VarbitRequirement(VarbitID.DT2_LASSAR, 28, Operation.GREATER_EQUAL);
- learntAboutSilentChoir = new VarbitRequirement(WHISPERER_VARBIT, 30, Operation.GREATER_EQUAL);
+ learntAboutSilentChoir = new VarbitRequirement(VarbitID.DT2_LASSAR, 30, Operation.GREATER_EQUAL);
- touchedPubRemnant = new VarbitRequirement(WHISPERER_VARBIT, 32, Operation.GREATER_EQUAL);
+ touchedPubRemnant = new VarbitRequirement(VarbitID.DT2_LASSAR, 32, Operation.GREATER_EQUAL);
/* Tentacle 5 */
Conditions withinRangeOfTentacle5 = new Conditions(
@@ -694,13 +691,13 @@ protected void setupConditions()
// 32->34, maybe when made idol?
- iconUsed = new VarbitRequirement(WHISPERER_VARBIT, 36, Operation.GREATER_EQUAL);
+ iconUsed = new VarbitRequirement(VarbitID.DT2_LASSAR, 36, Operation.GREATER_EQUAL);
// animation 2757, fade-in
- escapedVision = new VarbitRequirement(WHISPERER_VARBIT, 38, Operation.GREATER_EQUAL);
+ escapedVision = new VarbitRequirement(VarbitID.DT2_LASSAR, 38, Operation.GREATER_EQUAL);
// 38->40, unlocked shadow torch
- unlockedPerfectShadowTorch = new VarbitRequirement(15087, 1);
+ unlockedPerfectShadowTorch = new VarbitRequirement(VarbitID.DT2_LASSAR_SHADOW_TORCH_T3_SCHEMATIC, 1);
Conditions withinRangeOfCathedralTentacle = new Conditions(
or(
@@ -724,7 +721,7 @@ protected void setupConditions()
);
// 14862 80->82
- enteredCathedral = new VarbitRequirement(WHISPERER_VARBIT, 42, Operation.GREATER_EQUAL);
+ enteredCathedral = new VarbitRequirement(VarbitID.DT2_LASSAR, 42, Operation.GREATER_EQUAL);
// Killed Whisperer:
// 15064 0->100 (insanity?)
@@ -732,7 +729,7 @@ protected void setupConditions()
// 15126 42->44
// 14862 82->84
//
- killedWhisperer = new VarbitRequirement(WHISPERER_VARBIT, 44, Operation.GREATER_EQUAL);
+ killedWhisperer = new VarbitRequirement(VarbitID.DT2_LASSAR, 44, Operation.GREATER_EQUAL);
// Obtained medallion
// 15126 44->46
// 14862 84->86
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deviousminds/DeviousMinds.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deviousminds/DeviousMinds.java
index 7100b81635a..6e675842bfa 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deviousminds/DeviousMinds.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/deviousminds/DeviousMinds.java
@@ -112,9 +112,9 @@ public Map loadSteps()
protected void setupRequirements()
{
//Recommended
- fallyTele = new ItemRequirement("Falador Teleports", ItemID.POH_TABLET_FALADORTELEPORT);
- lumberTele = new ItemRequirement("Lumberyard Teleports", ItemID.TELEPORTSCROLL_LUMBERYARD);
- glory = new ItemRequirement("Amulet of Glory", ItemCollections.AMULET_OF_GLORIES);
+ fallyTele = new ItemRequirement("Falador Teleports", ItemID.POH_TABLET_FALADORTELEPORT, 2);
+ lumberTele = new ItemRequirement("Lumberyard Teleports", ItemID.TELEPORTSCROLL_LUMBERYARD, 3);
+ glory = new ItemRequirement("Amulet of Glory (Teleports to Port Sarim and Edgeville)", ItemCollections.AMULET_OF_GLORIES);
//Required
mith2h = new ItemRequirement("Mithril 2h Sword", ItemID.MITHRIL_2H_SWORD);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/dragonslayer/DragonSlayer.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/dragonslayer/DragonSlayer.java
index cc31d5e3835..d5e7af0effb 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/dragonslayer/DragonSlayer.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/dragonslayer/DragonSlayer.java
@@ -48,6 +48,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import net.runelite.api.gameval.VarPlayerID;
import java.util.*;
@@ -286,7 +287,7 @@ public void setupConditions()
askedAboutShip = new VarplayerRequirement(VarPlayerID.DRAGONQUESTVAR, false, 14);
askedAboutShield = new VarplayerRequirement(VarPlayerID.DRAGONQUESTVAR, false, 15);
askedAllQuestions = new Conditions(askedAboutShip, askedAboutShield, askedAboutMelzar, askedAboutThalzar, askedAboutLozar);
- askedOracleAboutMap = new VarbitRequirement(1832, 1);
+ askedOracleAboutMap = new VarbitRequirement(VarbitID.DRAGONSLAYER_SECRET_TOLD, 1);
inDwarvenMines = new ZoneRequirement(dwarvenMines);
silkUsed = new VarplayerRequirement(VarPlayerID.DRAGONQUESTVAR, true, 17);
unfiredBowlUsed = new VarplayerRequirement(VarPlayerID.DRAGONQUESTVAR, true, 18);
@@ -319,11 +320,11 @@ public void setupConditions()
onShipDeck = new ZoneRequirement(shipDeck);
inShipHull = new ZoneRequirement(shipHull);
- hasBoughtBoat = new VarplayerRequirement(176, 3);
+ hasBoughtBoat = new VarplayerRequirement(VarPlayerID.DRAGONQUEST, 3);
- hasRepairedHullOnce = new VarbitRequirement(1835, 1);
- hasRepairedHullTwice = new VarbitRequirement(1836, 1);
- fullyRepairedHull = new VarbitRequirement(1837, 1);
+ hasRepairedHullOnce = new VarbitRequirement(VarbitID.DRAGONSLAYER_SHIP_ONETHIRD_FIXED, 1);
+ hasRepairedHullTwice = new VarbitRequirement(VarbitID.DRAGONSLAYER_SHIP_TWOTHIRD_FIXED, 1);
+ fullyRepairedHull = new VarbitRequirement(VarbitID.DRAGONSLAYER_SHIP_FULLYFIXED, 1);
onCrandorSurface = new ZoneRequirement(crandorSurface);
inCrandorUnderground = new ZoneRequirement(crandorUnderground);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/dragonslayerii/DragonSlayerII.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/dragonslayerii/DragonSlayerII.java
index 802fbf18baf..1f69bafc3d0 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/dragonslayerii/DragonSlayerII.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/dragonslayerii/DragonSlayerII.java
@@ -626,43 +626,43 @@ public void setupConditions()
emptyInv24 = new FreeInventorySlotRequirement(24);
- hadMap1 = new Conditions(LogicType.OR, map1, new VarbitRequirement(6116, 1));
- hadMap2 = new Conditions(LogicType.OR, map2, new VarbitRequirement(6117, 1));
- hadMap3 = new Conditions(LogicType.OR, map3, new VarbitRequirement(6118, 1));
- hadMap4 = new Conditions(LogicType.OR, map4, new VarbitRequirement(6119, 1));
- hadMap5 = new Conditions(LogicType.OR, map5, new VarbitRequirement(6120, 1));
+ hadMap1 = new Conditions(LogicType.OR, map1, new VarbitRequirement(VarbitID.FOSSIL_MAP_PIECE_A1, 1));
+ hadMap2 = new Conditions(LogicType.OR, map2, new VarbitRequirement(VarbitID.FOSSIL_MAP_PIECE_A3, 1));
+ hadMap3 = new Conditions(LogicType.OR, map3, new VarbitRequirement(VarbitID.FOSSIL_MAP_PIECE_A4, 1));
+ hadMap4 = new Conditions(LogicType.OR, map4, new VarbitRequirement(VarbitID.FOSSIL_MAP_PIECE_A6, 1));
+ hadMap5 = new Conditions(LogicType.OR, map5, new VarbitRequirement(VarbitID.FOSSIL_MAP_PIECE_B1, 1));
hadChest1MapPieces = new Conditions(hadMap1, hadMap2, hadMap3, hadMap4, hadMap5);
- hadMap6 = new Conditions(LogicType.OR, map6, new VarbitRequirement(6121, 1));
- hadMap7 = new Conditions(LogicType.OR, map7, new VarbitRequirement(6122, 1));
- hadMap8 = new Conditions(LogicType.OR, map8, new VarbitRequirement(6123, 1));
+ hadMap6 = new Conditions(LogicType.OR, map6, new VarbitRequirement(VarbitID.FOSSIL_MAP_PIECE_B2, 1));
+ hadMap7 = new Conditions(LogicType.OR, map7, new VarbitRequirement(VarbitID.FOSSIL_MAP_PIECE_B4, 1));
+ hadMap8 = new Conditions(LogicType.OR, map8, new VarbitRequirement(VarbitID.FOSSIL_MAP_PIECE_B5, 1));
hadChest2MapPieces = new Conditions(hadMap6, hadMap7, hadMap8);
- hadMap9 = new Conditions(LogicType.OR, map9, new VarbitRequirement(6124, 1));
- hadMap10 = new Conditions(LogicType.OR, map10, new VarbitRequirement(6125, 1));
- hadMap11 = new Conditions(LogicType.OR, map11, new VarbitRequirement(6126, 1));
- hadMap12 = new Conditions(LogicType.OR, map12, new VarbitRequirement(6127, 1));
+ hadMap9 = new Conditions(LogicType.OR, map9, new VarbitRequirement(VarbitID.FOSSIL_MAP_PIECE_C1, 1));
+ hadMap10 = new Conditions(LogicType.OR, map10, new VarbitRequirement(VarbitID.FOSSIL_MAP_PIECE_C3, 1));
+ hadMap11 = new Conditions(LogicType.OR, map11, new VarbitRequirement(VarbitID.FOSSIL_MAP_PIECE_C4, 1));
+ hadMap12 = new Conditions(LogicType.OR, map12, new VarbitRequirement(VarbitID.FOSSIL_MAP_PIECE_C5, 1));
hadFungiMapPieces = new Conditions(hadMap9, hadMap10, hadMap11, hadMap12);
- hadMap13 = new Conditions(LogicType.OR, map13, new VarbitRequirement(6128, 1));
- hadMap14 = new Conditions(LogicType.OR, map14, new VarbitRequirement(6129, 1));
- hadMap15 = new Conditions(LogicType.OR, map15, new VarbitRequirement(6130, 1));
- hadMap16 = new Conditions(LogicType.OR, map16, new VarbitRequirement(6131, 1));
- hadMap17 = new Conditions(LogicType.OR, map17, new VarbitRequirement(6132, 1));
- hadMap18 = new Conditions(LogicType.OR, map18, new VarbitRequirement(6133, 1));
- hadMap19 = new Conditions(LogicType.OR, map19, new VarbitRequirement(6134, 1));
+ hadMap13 = new Conditions(LogicType.OR, map13, new VarbitRequirement(VarbitID.FOSSIL_MAP_PIECE_D2, 1));
+ hadMap14 = new Conditions(LogicType.OR, map14, new VarbitRequirement(VarbitID.FOSSIL_MAP_PIECE_D4, 1));
+ hadMap15 = new Conditions(LogicType.OR, map15, new VarbitRequirement(VarbitID.FOSSIL_MAP_PIECE_D5, 1));
+ hadMap16 = new Conditions(LogicType.OR, map16, new VarbitRequirement(VarbitID.FOSSIL_MAP_PIECE_D6, 1));
+ hadMap17 = new Conditions(LogicType.OR, map17, new VarbitRequirement(VarbitID.FOSSIL_MAP_PIECE_E1, 1));
+ hadMap18 = new Conditions(LogicType.OR, map18, new VarbitRequirement(VarbitID.FOSSIL_MAP_PIECE_E2, 1));
+ hadMap19 = new Conditions(LogicType.OR, map19, new VarbitRequirement(VarbitID.FOSSIL_MAP_PIECE_E3, 1));
hadBriarMapPieces = new Conditions(hadMap13, hadMap14, hadMap15, hadMap16, hadMap17, hadMap18, hadMap19);
- hadMap20 = new Conditions(LogicType.OR, map20, new VarbitRequirement(6135, 1));
- hadMap21 = new Conditions(LogicType.OR, map21, new VarbitRequirement(6136, 1));
- hadMap22 = new Conditions(LogicType.OR, map22, new VarbitRequirement(6137, 1));
- hadMap23 = new Conditions(LogicType.OR, map23, new VarbitRequirement(6138, 1));
- hadMap24 = new Conditions(LogicType.OR, map24, new VarbitRequirement(6138, 1));
+ hadMap20 = new Conditions(LogicType.OR, map20, new VarbitRequirement(VarbitID.FOSSIL_MAP_PIECE_E5, 1));
+ hadMap21 = new Conditions(LogicType.OR, map21, new VarbitRequirement(VarbitID.FOSSIL_MAP_PIECE_F2, 1));
+ hadMap22 = new Conditions(LogicType.OR, map22, new VarbitRequirement(VarbitID.FOSSIL_MAP_PIECE_F4, 1));
+ hadMap23 = new Conditions(LogicType.OR, map23, new VarbitRequirement(VarbitID.FOSSIL_MAP_PIECE_F5, 1));
+ hadMap24 = new Conditions(LogicType.OR, map24, new VarbitRequirement(VarbitID.FOSSIL_MAP_PIECE_F5, 1));
hadMushtreeMapPieces = new Conditions(hadMap20, hadMap21, hadMap22, hadMap23, hadMap24);
inMapPuzzle = new WidgetModelRequirement(305, 1, 35060);
- litBrazier = new VarbitRequirement(2430, 1);
+ litBrazier = new VarbitRequirement(VarbitID.LUNAR_BRAZIER_LIT, 1);
hasTheKourendKeyPiece = new VarbitRequirement(VarbitID.DS2_ZEAH, 35, Operation.GREATER_EQUAL);
hasTheKaramjaKeyPiece = new VarbitRequirement(VarbitID.DS2_KARAM, 20, Operation.GREATER_EQUAL);
@@ -702,11 +702,11 @@ public void setupConditions()
// West dragon lit, 6109 = 1
// North dragon lit, 6110 = 1
// East dragon lit, 6111 = 1
- litFurnace = new Conditions(new VarbitRequirement(6109, 1), new VarbitRequirement(6110, 1), new VarbitRequirement(6111, 1));
+ litFurnace = new Conditions(new VarbitRequirement(VarbitID.DS2_DRAGON_HEAD_WEST, 1), new VarbitRequirement(VarbitID.DS2_DRAGON_HEAD_NORTH, 1), new VarbitRequirement(VarbitID.DS2_DRAGON_HEAD_EAST, 1));
- recruitedBrundt = new VarbitRequirement(6114, 1);
- recruitedAmik = new VarbitRequirement(6115, 1);
- recruitedLathas = new VarbitRequirement(6113, 1);
+ recruitedBrundt = new VarbitRequirement(VarbitID.DS2_BRUNDT, 1);
+ recruitedAmik = new VarbitRequirement(VarbitID.DS2_AMIK, 1);
+ recruitedLathas = new VarbitRequirement(VarbitID.DS2_LATHAS, 1);
}
public void setupSteps()
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/dreammentor/DreamMentor.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/dreammentor/DreamMentor.java
index 0298592c0bf..f44e6092f5a 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/dreammentor/DreamMentor.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/dreammentor/DreamMentor.java
@@ -230,11 +230,11 @@ public void setupConditions()
lookingAtBank = new WidgetTextRequirement(260, 41, "Cyrisus's Bank");
gotItems = new CyrisusBankConditional();
- cyrisusDressed = new VarbitRequirement(3623, 100);
+ cyrisusDressed = new VarbitRequirement(VarbitID.DREAM_ARMAMENT, 100);
- litBrazier = new VarbitRequirement(2430, 1);
+ litBrazier = new VarbitRequirement(VarbitID.LUNAR_BRAZIER_LIT, 1);
- unlockedDream = new VarbitRequirement(3625, 1);
+ unlockedDream = new VarbitRequirement(VarbitID.DREAM_CUTSCENE_SEEN, 1);
inadaquacyNearby = new NpcCondition(NpcID.DREAM_INADEQUACY);
everlastingNearby = new NpcCondition(NpcID.DREAM_EVERLASTING);
untouchableNearby = new NpcCondition(NpcID.DREAM_UNTOUCHABLE);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/dwarfcannon/DwarfCannon.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/dwarfcannon/DwarfCannon.java
index c376a56f05b..8c2869f0d92 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/dwarfcannon/DwarfCannon.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/dwarfcannon/DwarfCannon.java
@@ -1,98 +1,147 @@
+/*
+ * Copyright (c) 2020, Zoinkwiz
+ * Copyright (c) 2025, pajlada
+ * 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.microbot.questhelper.helpers.quests.dwarfcannon;
import net.runelite.client.plugins.microbot.questhelper.collections.ItemCollections;
import net.runelite.client.plugins.microbot.questhelper.panel.PanelDetails;
import net.runelite.client.plugins.microbot.questhelper.questhelpers.BasicQuestHelper;
-import net.runelite.client.plugins.microbot.questhelper.requirements.Requirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.conditional.Conditions;
import net.runelite.client.plugins.microbot.questhelper.requirements.item.ItemRequirement;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.and;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.not;
import net.runelite.client.plugins.microbot.questhelper.requirements.var.VarbitRequirement;
+import net.runelite.client.plugins.microbot.questhelper.requirements.widget.WidgetPresenceRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.zone.Zone;
import net.runelite.client.plugins.microbot.questhelper.requirements.zone.ZoneRequirement;
import net.runelite.client.plugins.microbot.questhelper.rewards.ExperienceReward;
import net.runelite.client.plugins.microbot.questhelper.rewards.QuestPointReward;
import net.runelite.client.plugins.microbot.questhelper.rewards.UnlockReward;
-import net.runelite.client.plugins.microbot.questhelper.steps.*;
+import net.runelite.client.plugins.microbot.questhelper.steps.ConditionalStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.NpcStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.ObjectStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.PuzzleWrapperStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.QuestStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.WidgetStep;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import net.runelite.api.Skill;
import net.runelite.api.coords.WorldPoint;
+import net.runelite.api.gameval.InterfaceID;
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
-
-import java.util.*;
+import net.runelite.api.gameval.VarbitID;
public class DwarfCannon extends BasicQuestHelper
{
- //Items Recommended
- ItemRequirement staminas, teleToAsg, teleToKand;
-
- //Items Required
- ItemRequirement hammer, railing, dwarfRemains, toolkit, cannonballMould, nulodionsNotes;
-
- Requirement upTower1, upTower2, inCave, bar1, bar2, bar3, bar4, bar5, bar6, nearLawgof, springFixed, safetyFixed, cannonFixed;
-
- QuestStep talkToCaptainLawgof, talkToCaptainLawgof2, gotoTower, goToTower2, talkToCaptainLawgof3, gotoCave, inspectRailings1, inspectRailings2,
- inspectRailings3, inspectRailings4, inspectRailings5, inspectRailings6, getRemainsStep, downTower, downTower2, searchCrates,
- talkToCaptainLawgof4, useToolkit, talkToCaptainLawgof5, talkToNulodion, talkToCaptainLawgof6;
-
- //Zones
- Zone cave, tower1, tower2, lawgofArea;
+ // Required items
+ ItemRequirement hammer;
+
+ // Recommended items
+ ItemRequirement staminas;
+ ItemRequirement teleToAsg;
+ ItemRequirement teleToKand;
+
+ // Zones
+ Zone cave;
+ Zone tower1;
+ Zone tower2;
+
+ // Miscellaneous requirements
+ ItemRequirement railing;
+ ItemRequirement dwarfRemains;
+ ItemRequirement toolkit;
+ ItemRequirement cannonballMould;
+ ItemRequirement nulodionsNotes;
+
+ ZoneRequirement upTower1;
+ ZoneRequirement upTower2;
+ ZoneRequirement inCave;
+ VarbitRequirement bar1;
+ VarbitRequirement bar2;
+ VarbitRequirement bar3;
+ VarbitRequirement bar4;
+ VarbitRequirement bar5;
+ VarbitRequirement bar6;
+ Conditions allBarsFixed;
+
+ WidgetPresenceRequirement isPuzzleOpen;
+ VarbitRequirement toothedToolSelected;
+ VarbitRequirement pliersSelected;
+ VarbitRequirement hookSelected;
+ VarbitRequirement springFixed;
+ VarbitRequirement safetyFixed;
+
+ // Steps
+ NpcStep talkToCaptainLawgof;
+
+ NpcStep getRailings;
+ ObjectStep inspectRailings1;
+ ObjectStep inspectRailings2;
+ ObjectStep inspectRailings3;
+ ObjectStep inspectRailings4;
+ ObjectStep inspectRailings5;
+ ObjectStep inspectRailings6;
+ ConditionalStep cInspectRailings;
+ NpcStep talkToCaptainLawgof2;
+
+ ObjectStep gotoTower;
+ ObjectStep goToTower2;
+ NpcStep talkToCaptainLawgof3;
+ ObjectStep getRemainsStep;
+ ObjectStep downTower;
+ ObjectStep downTower2;
+
+ ObjectStep gotoCave;
+ ObjectStep searchCrates;
+ ObjectStep exitCave;
+ NpcStep talkToCaptainLawgof4;
+
+ PuzzleWrapperStep pwFixMulticannon;
+ NpcStep talkToCaptainLawgof5;
+
+ NpcStep talkToNulodion;
+ NpcStep talkToCaptainLawgof6;
@Override
- public Map loadSteps()
+ protected void setupZones()
{
- initializeRequirements();
- setupConditions();
- setupSteps();
- Map steps = new HashMap<>();
-
- //Start
- steps.put(0, talkToCaptainLawgof);
-
- //Repair Bars
- ConditionalStep fixedRailings = new ConditionalStep(this, inspectRailings1);
- fixedRailings.addStep(new Conditions(bar6), talkToCaptainLawgof2);
- fixedRailings.addStep(new Conditions(hammer, railing, bar5), inspectRailings6);
- fixedRailings.addStep(new Conditions(hammer, railing, bar4), inspectRailings5);
- fixedRailings.addStep(new Conditions(hammer, railing, bar3), inspectRailings4);
- fixedRailings.addStep(new Conditions(hammer, railing, bar2), inspectRailings3);
- fixedRailings.addStep(new Conditions(hammer, railing, bar1), inspectRailings2);
-
- steps.put(1, fixedRailings);
-
- //Go to tower, get remains, come back
- ConditionalStep getRemains = new ConditionalStep(this, gotoTower);
- getRemains.addStep(new Conditions(dwarfRemains, nearLawgof), talkToCaptainLawgof3);
- getRemains.addStep(new Conditions(dwarfRemains, upTower1), downTower2);
- getRemains.addStep(new Conditions(dwarfRemains, upTower2), downTower);
- getRemains.addStep(upTower2, getRemainsStep);
- getRemains.addStep(upTower1, goToTower2);
- steps.put(2, getRemains);
- steps.put(3, getRemains);
-
- //Go to the cave, find Lollk, return and fix cannon
- ConditionalStep findLollk = new ConditionalStep(this, gotoCave);
- findLollk.addStep(inCave, searchCrates);
- steps.put(4, findLollk);
- steps.put(5, findLollk);
-
- steps.put(6, talkToCaptainLawgof4);
-
- steps.put(7, useToolkit);
- steps.put(8, talkToCaptainLawgof5);
-
- //Ammo mould and back
- ConditionalStep captainLawgofFinal = new ConditionalStep(this, talkToNulodion);
- captainLawgofFinal.addStep(new Conditions(nulodionsNotes, cannonballMould), talkToCaptainLawgof6);
- steps.put(9, captainLawgofFinal);
- steps.put(10, captainLawgofFinal);
-
- return steps;
+ cave = new Zone(new WorldPoint(2557, 9790, 0), new WorldPoint(2624, 9859, 0));
+ tower1 = new Zone(new WorldPoint(2568, 3439, 1), new WorldPoint(2572, 3445, 1));
+ tower2 = new Zone(new WorldPoint(2566, 3445, 2), new WorldPoint(2572, 3441, 2));
}
@Override
protected void setupRequirements()
{
+ hammer = new ItemRequirement("Hammer", ItemCollections.HAMMER).isNotConsumed().canBeObtainedDuringQuest();
+ hammer.setTooltip("Can be found in the small building east of Captain Lawgof.");
+
staminas = new ItemRequirement("Stamina Potions", ItemCollections.STAMINA_POTIONS);
teleToAsg = new ItemRequirement("Teleport to Falador, Amulet of Glory, or Combat Bracelet",
ItemID.POH_TABLET_FALADORTELEPORT);
@@ -103,65 +152,64 @@ protected void setupRequirements()
teleToKand.addAlternates(ItemCollections.SKILLS_NECKLACES);
teleToKand.addAlternates(ItemID.POH_TABLET_ARDOUGNETELEPORT);
- hammer = new ItemRequirement("Hammer", ItemCollections.HAMMER).isNotConsumed();
railing = new ItemRequirement("Railing", ItemID.MCANNONRAILING1_OBJ);
railing.setTooltip("You can get more from Captain Lawgof");
toolkit = new ItemRequirement("Toolkit", ItemID.MCANNONTOOLKIT);
toolkit.setHighlightInInventory(true);
dwarfRemains = new ItemRequirement("Dwarf Remains", ItemID.MCANNONREMAINS);
- cannonballMould = new ItemRequirement("Cannonball Mould", ItemID.AMMO_MOULD);
- nulodionsNotes = new ItemRequirement("Nulodion's Notes", ItemID.NULODIONS_NOTES);
- }
+ cannonballMould = new ItemRequirement("Ammo mould", ItemID.AMMO_MOULD);
+ nulodionsNotes = new ItemRequirement("Nulodion's notes", ItemID.NULODIONS_NOTES);
+
+ bar1 = new VarbitRequirement(VarbitID.MCANNON_RAILING1_FIXED, 1);
+ bar2 = new VarbitRequirement(VarbitID.MCANNON_RAILING2_FIXED, 1);
+ bar3 = new VarbitRequirement(VarbitID.MCANNON_RAILING3_FIXED, 1);
+ bar4 = new VarbitRequirement(VarbitID.MCANNON_RAILING4_FIXED, 1);
+ bar5 = new VarbitRequirement(VarbitID.MCANNON_RAILING5_FIXED, 1);
+ bar6 = new VarbitRequirement(VarbitID.MCANNON_RAILING6_FIXED, 1);
+
+ allBarsFixed = and(bar1, bar2, bar3, bar4, bar5, bar6);
+
+ isPuzzleOpen = new WidgetPresenceRequirement(InterfaceID.McannonInterface.ROOT_RECT0);
+
+ toothedToolSelected = new VarbitRequirement(VarbitID.MCANNONMULTI_TOOL1, 1);
+ pliersSelected = new VarbitRequirement(VarbitID.MCANNONMULTI_TOOL2, 1);
+ hookSelected = new VarbitRequirement(VarbitID.MCANNONMULTI_TOOL3, 1);
+
+ springFixed = new VarbitRequirement(VarbitID.MCANNON_SPRING_SET, 1);
+ safetyFixed = new VarbitRequirement(VarbitID.MCANNON_SAFETY_ON, 1);
- public void setupConditions()
- {
- //Varbits
- bar1 = new VarbitRequirement(2240, 1);
- bar2 = new VarbitRequirement(2241, 1);
- bar3 = new VarbitRequirement(2242, 1);
- bar4 = new VarbitRequirement(2243, 1);
- bar5 = new VarbitRequirement(2244, 1);
- bar6 = new VarbitRequirement(2245, 1);
- //All Complete varbit 2246
-
- springFixed = new VarbitRequirement(2239, 1);
- safetyFixed = new VarbitRequirement(2238, 1);
- cannonFixed = new VarbitRequirement(2235, 1);
-
- //Zones
upTower1 = new ZoneRequirement(tower1);
upTower2 = new ZoneRequirement(tower2);
inCave = new ZoneRequirement(cave);
- nearLawgof = new ZoneRequirement(lawgofArea);
-
- }
-
- @Override
- protected void setupZones()
- {
- cave = new Zone(new WorldPoint(2557, 9790, 0), new WorldPoint(2624, 9859, 0));
- tower1 = new Zone(new WorldPoint(2568, 3439, 1), new WorldPoint(2572, 3445, 1));
- tower2 = new Zone(new WorldPoint(2566, 3445, 2), new WorldPoint(2572, 3441, 2));
- lawgofArea = new Zone(new WorldPoint(2551, 3477, 0), new WorldPoint(2595, 3434, 0));
}
public void setupSteps()
{
talkToCaptainLawgof = new NpcStep(this, NpcID.LAWGOF2, new WorldPoint(2567, 3460, 0), "Talk to Captain Lawgof near the Coal Truck Mining Site (north of Fishing Guild, West of McGrubor's Wood).");
- talkToCaptainLawgof.addDialogStep("Sure, I'd be honoured to join.");
-
- //Fix the 6 bent railings, these railings don't have different IDs from the normal railings
- inspectRailings1 = new ObjectStep(this, ObjectID.MCANNON_RAILING1_MULTILOC, new WorldPoint(2555, 3479, 0), "Inspect the 6 damaged railings around the camp to fix them.", hammer, railing);
- inspectRailings2 = new ObjectStep(this, ObjectID.MCANNON_RAILING2_MULTILOC, new WorldPoint(2557, 3468, 0), "Inspect the railings to fix them.", hammer, railing);
- inspectRailings3 = new ObjectStep(this, ObjectID.MCANNON_RAILING3_MULTILOC, new WorldPoint(2559, 3458, 0), "Inspect the railings to fix them.", hammer, railing);
- inspectRailings4 = new ObjectStep(this, ObjectID.MCANNON_RAILING4_MULTILOC, new WorldPoint(2563, 3457, 0), "Inspect the railings to fix them.", hammer, railing);
- inspectRailings5 = new ObjectStep(this, ObjectID.MCANNON_RAILING5_MULTILOC, new WorldPoint(2573, 3457, 0), "Inspect the railings to fix them.", hammer, railing);
- inspectRailings6 = new ObjectStep(this, ObjectID.MCANNON_RAILING6_MULTILOC, new WorldPoint(2577, 3457, 0), "Inspect the railings to fix them.", hammer, railing);
- inspectRailings1.addSubSteps(inspectRailings2, inspectRailings3, inspectRailings4, inspectRailings5, inspectRailings6);
+ talkToCaptainLawgof.addDialogStep("Yes.");
+
+ // Fix the 6 bent railings, these railings don't have different IDs from the normal railings
+ getRailings = new NpcStep(this, NpcID.LAWGOF2, new WorldPoint(2567, 3460, 0), "Talk to Captain Lawgof to get more railings.", hammer, railing);
+
+ inspectRailings1 = new ObjectStep(this, ObjectID.MCANNON_RAILING1_MULTILOC, new WorldPoint(2555, 3479, 0), "", hammer, railing);
+ inspectRailings2 = new ObjectStep(this, ObjectID.MCANNON_RAILING2_MULTILOC, new WorldPoint(2557, 3468, 0), "", hammer, railing);
+ inspectRailings3 = new ObjectStep(this, ObjectID.MCANNON_RAILING3_MULTILOC, new WorldPoint(2559, 3458, 0), "", hammer, railing);
+ inspectRailings4 = new ObjectStep(this, ObjectID.MCANNON_RAILING4_MULTILOC, new WorldPoint(2563, 3457, 0), "", hammer, railing);
+ inspectRailings5 = new ObjectStep(this, ObjectID.MCANNON_RAILING5_MULTILOC, new WorldPoint(2573, 3457, 0), "", hammer, railing);
+ inspectRailings6 = new ObjectStep(this, ObjectID.MCANNON_RAILING6_MULTILOC, new WorldPoint(2577, 3457, 0), "", hammer, railing);
+
+ cInspectRailings = new ConditionalStep(this, getRailings, "Inspect the six damaged railings around the camp to fix them.");
+ cInspectRailings.addStep(and(railing, not(bar1)), inspectRailings1);
+ cInspectRailings.addStep(and(railing, not(bar2)), inspectRailings2);
+ cInspectRailings.addStep(and(railing, not(bar3)), inspectRailings3);
+ cInspectRailings.addStep(and(railing, not(bar4)), inspectRailings4);
+ cInspectRailings.addStep(and(railing, not(bar5)), inspectRailings5);
+ cInspectRailings.addStep(and(railing, not(bar6)), inspectRailings6);
//Get dwarf remains
- talkToCaptainLawgof2 = new NpcStep(this, NpcID.LAWGOF2, new WorldPoint(2567, 3460, 0), "Talk to Captain Lawgof again. Make sure to complete the entire dialogue.");
- gotoTower = new ObjectStep(this, ObjectID.LADDER, new WorldPoint(2570, 3441, 0), "Go to the top floor of the tower south of Captain Lawgof and get the remains there.");
+ talkToCaptainLawgof2 = new NpcStep(this, NpcID.LAWGOF2, new WorldPoint(2567, 3460, 0), "Talk to Captain Lawgof after repairing the damaged railings.");
+
+ gotoTower = new ObjectStep(this, ObjectID.LADDER, new WorldPoint(2570, 3441, 0), "Go to the top floor of the tower, south of Captain Lawgof, and get the remains there.");
goToTower2 = new ObjectStep(this, ObjectID.MCANNONLADDER, new WorldPoint(2570, 3443, 1), "Go up the second ladder.");
getRemainsStep = new ObjectStep(this, ObjectID.MCANNONREMAINS_MULTILOC, new WorldPoint(2567, 3444, 2), "Get the dwarf remains at the top of the tower.");
@@ -172,35 +220,110 @@ public void setupSteps()
talkToCaptainLawgof3 = new NpcStep(this, NpcID.LAWGOF2, new WorldPoint(2567, 3460, 0), "Return the remains to Captain Lawgof.");
talkToCaptainLawgof3.addSubSteps(downTower, downTower2);
- //Cave
- gotoCave = new ObjectStep(this, ObjectID.MCANNONCAVE, new WorldPoint(2624, 3393, 0), "Go to the cave entrance east of the Fishing Guild door.");
+ // Find Lollk in the goblin cave
+ gotoCave = new ObjectStep(this, ObjectID.MCANNONCAVE, new WorldPoint(2622, 3392, 0), "Enter the goblin cave, east of the Fishing Guild entrance.");
searchCrates = new ObjectStep(this, ObjectID.MCANNONCRATEBOY, new WorldPoint(2571, 9850, 0), "Search the crates in the north west corner to find Lollk.");
+ exitCave = new ObjectStep(this, ObjectID.MCANMUDPILE, new WorldPoint(2621, 9796, 0), "Exit the goblin cave and return to Captain Lawgof.");
talkToCaptainLawgof4 = new NpcStep(this, NpcID.LAWGOF2, new WorldPoint(2567, 3460, 0), "Return to Captain Lawgof.");
talkToCaptainLawgof4.addDialogStep("Okay, I'll see what I can do.");
+ talkToCaptainLawgof4.addSubSteps(exitCave);
+
+ // Fix cannon
+ var actuallyUseToolkit = new ObjectStep(this, ObjectID.MCANNON_CANNON_MULTILOC, new WorldPoint(2563, 3462, 0), "", toolkit.highlighted());
+ actuallyUseToolkit.addIcon(ItemID.MCANNONTOOLKIT);
+
+ var clickHook = new WidgetStep(this, "Click the hook and use it on the spring.", InterfaceID.McannonInterface.MCANNON_TOOL3);
+ var clickSpring = new WidgetStep(this, "Click the hook and use it on the spring.", InterfaceID.McannonInterface.MCANNON_SPRING);
+
+ var clickPliers = new WidgetStep(this, "Click the pliers and use it on the safety switch at the bottom.", InterfaceID.McannonInterface.MCANNON_TOOL2);
+ var clickSafety = new WidgetStep(this, "Click the pliers and use it on the safety switch at the bottom.", InterfaceID.McannonInterface.MCANNON_SAFETY);
+
+ var clickToothedTool = new WidgetStep(this, "Click the toothed tool and use it on the gear at the bottom.", InterfaceID.McannonInterface.MCANNON_TOOL1);
+ var clickGear = new WidgetStep(this, "Click the toothed tool and use it on the gear at the bottom.", InterfaceID.McannonInterface.MCANNON_GEAR);
- //Fix cannon
- // TODO: Update this to highlight widgets as you progress, indicating what tool to use on what
- useToolkit = new PuzzleWrapperStep(this,
- new ObjectStep(this, ObjectID.MCANNON_CANNON_MULTILOC, new WorldPoint(2563, 3462, 0),
- "Use the toolkit on the broken multicannon. Use the right tool on the spring, the middle tool on the Safety switch, and the left tool on the gear."),
- new ObjectStep(this, ObjectID.MCANNON_CANNON_MULTILOC, new WorldPoint(2563, 3462, 0), "Use the toolkit on the broken multicannon."));
- useToolkit.addIcon(ItemID.MCANNONTOOLKIT);
- talkToCaptainLawgof5 = new NpcStep(this, NpcID.LAWGOF2, new WorldPoint(2567, 3460, 0), "Talk to Captain Lawgof (There will be a short pause in dialogue. Both need to be completed.).");
+ var fixCannon = new ConditionalStep(this, actuallyUseToolkit, "Use the toolkit on the broken multicannon, then use the highlighted tool on the highlighted part to fix it.");
+ fixCannon.addStep(and(isPuzzleOpen, safetyFixed, springFixed, toothedToolSelected), clickGear);
+ fixCannon.addStep(and(isPuzzleOpen, safetyFixed, springFixed), clickToothedTool);
+ fixCannon.addStep(and(isPuzzleOpen, not(safetyFixed), pliersSelected), clickSafety);
+ fixCannon.addStep(and(isPuzzleOpen, not(springFixed), hookSelected), clickSpring);
+ fixCannon.addStep(and(isPuzzleOpen, not(safetyFixed)), clickPliers);
+ fixCannon.addStep(and(isPuzzleOpen, not(springFixed)), clickHook);
+
+ pwFixMulticannon = fixCannon.puzzleWrapStepWithDefaultText("Use the toolkit on the broken multicannon.");
+ pwFixMulticannon.addIcon(ItemID.MCANNONTOOLKIT);
+ talkToCaptainLawgof5 = new NpcStep(this, NpcID.LAWGOF2, new WorldPoint(2567, 3460, 0), "Talk to Captain Lawgof after repairing the multicannon.");
talkToCaptainLawgof5.addDialogStep("Okay then, just for you!");
- //Cannonball mould
- talkToNulodion = new NpcStep(this, NpcID.NULODION, new WorldPoint(3012, 3453, 0), "Go talk to Nulodion at the Dwarven Black Guard camp (north-east of Falador, South of Ice Mountain).");
- talkToCaptainLawgof6 = new NpcStep(this, NpcID.LAWGOF2, new WorldPoint(2567, 3460, 0), "Finally, return to Captain Lawgof with the ammo mould and Nulodion's Notes.", nulodionsNotes, cannonballMould);
+ // Get notes & mould from Nulodion
+ talkToNulodion = new NpcStep(this, NpcID.NULODION, new WorldPoint(3012, 3453, 0), "Talk to Nulodion at the Dwarven Black Guard camp, south of Ice Mountain.");
+ talkToCaptainLawgof6 = new NpcStep(this, NpcID.LAWGOF2, new WorldPoint(2567, 3460, 0), "Return to Captain Lawgof with the ammo mould and Nulodion's Notes.", nulodionsNotes, cannonballMould);
+ }
+
+ @Override
+ public Map loadSteps()
+ {
+ initializeRequirements();
+ setupSteps();
+
+ var steps = new HashMap();
+
+ // Start
+ steps.put(0, talkToCaptainLawgof);
+
+ // Repair damaged railings
+ var fixRailings = new ConditionalStep(this, cInspectRailings);
+ fixRailings.addStep(allBarsFixed, talkToCaptainLawgof2);
+ fixRailings.addStep(not(railing), getRailings);
+ steps.put(1, fixRailings);
+
+ // Go to tower, get remains, come back
+ var getRemains = new ConditionalStep(this, gotoTower);
+ getRemains.addStep(and(dwarfRemains, upTower1), downTower2);
+ getRemains.addStep(and(dwarfRemains, upTower2), downTower);
+ getRemains.addStep(dwarfRemains, talkToCaptainLawgof3);
+ getRemains.addStep(upTower2, getRemainsStep);
+ getRemains.addStep(upTower1, goToTower2);
+ steps.put(2, getRemains);
+ steps.put(3, getRemains);
+
+ //Go to the cave, find Lollk, return and fix cannon
+ var findLollk = new ConditionalStep(this, gotoCave);
+ findLollk.addStep(inCave, searchCrates);
+ steps.put(4, findLollk);
+ steps.put(5, findLollk);
+
+ var step6 = new ConditionalStep(this, talkToCaptainLawgof4);
+ step6.addStep(inCave, exitCave);
+ steps.put(6, step6);
+
+ steps.put(7, pwFixMulticannon);
+ steps.put(8, talkToCaptainLawgof5);
+
+ // Ammo mould and back
+ var captainLawgofFinal = new ConditionalStep(this, talkToNulodion);
+ captainLawgofFinal.addStep(and(nulodionsNotes, cannonballMould), talkToCaptainLawgof6);
+ steps.put(9, captainLawgofFinal);
+ steps.put(10, captainLawgofFinal);
+
+ return steps;
+ }
+
+ @Override
+ public List getItemRequirements()
+ {
+ return List.of(
+ hammer
+ );
}
@Override
public List getItemRecommended()
{
- ArrayList reqs = new ArrayList<>();
- reqs.add(staminas);
- reqs.add(teleToAsg);
- reqs.add(teleToKand);
- return reqs;
+ return List.of(
+ staminas,
+ teleToAsg,
+ teleToKand
+ );
}
@Override
@@ -212,25 +335,52 @@ public QuestPointReward getQuestPointReward()
@Override
public List getExperienceRewards()
{
- return Collections.singletonList(new ExperienceReward(Skill.CRAFTING, 750));
+ return List.of(
+ new ExperienceReward(Skill.CRAFTING, 750)
+ );
}
@Override
public List getUnlockRewards()
{
- return Arrays.asList(
- new UnlockReward("Ability to purchase and use the Dwarf Multicannon."),
- new UnlockReward("Ability to make cannonballs."));
+ return List.of(
+ new UnlockReward("Ability to purchase and use the Dwarf Multicannon."),
+ new UnlockReward("Ability to make cannonballs.")
+ );
}
@Override
public List getPanels()
{
- List allSteps = new ArrayList<>();
- allSteps.add(new PanelDetails("Starting off", Collections.singletonList(talkToCaptainLawgof)));
- allSteps.add(new PanelDetails("Repair and Retrieval", Arrays.asList(inspectRailings1, talkToCaptainLawgof2, gotoTower, talkToCaptainLawgof3)));
- allSteps.add(new PanelDetails("Find Lollk and Fix Cannon", Arrays.asList(gotoCave, searchCrates, talkToCaptainLawgof4, useToolkit, talkToCaptainLawgof5)));
- allSteps.add(new PanelDetails("Get Ammo Mould", Arrays.asList(talkToNulodion, talkToCaptainLawgof6)));
- return allSteps;
+ var sections = new ArrayList();
+
+ sections.add(new PanelDetails("Starting off", List.of(
+ talkToCaptainLawgof
+ )));
+
+ sections.add(new PanelDetails("Repair and Retrieval", List.of(
+ getRailings,
+ cInspectRailings,
+ talkToCaptainLawgof2,
+ gotoTower,
+ talkToCaptainLawgof3
+ ), List.of(
+ hammer
+ )));
+
+ sections.add(new PanelDetails("Finding the lad", List.of(
+ gotoCave,
+ searchCrates,
+ talkToCaptainLawgof4,
+ pwFixMulticannon,
+ talkToCaptainLawgof5
+ )));
+
+ sections.add(new PanelDetails("Get Ammo Mould", List.of(
+ talkToNulodion,
+ talkToCaptainLawgof6
+ )));
+
+ return sections;
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/eadgarsruse/EadgarsRuse.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/eadgarsruse/EadgarsRuse.java
index 01cba1f2947..368da68aa6b 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/eadgarsruse/EadgarsRuse.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/eadgarsruse/EadgarsRuse.java
@@ -50,6 +50,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import java.util.*;
@@ -337,7 +338,7 @@ public void setupConditions()
onMountainPath = new ZoneRequirement(mountainPath1, mountainPath2, mountainPath3, mountainPath4, mountainPath5);
inTrollArea1 = new ZoneRequirement(trollArea1);
inPrison = new ZoneRequirement(prison);
- freedEadgar = new VarbitRequirement(0, 1);
+ freedEadgar = new VarbitRequirement(VarbitID.TROLL_FREED_EADGAR, 1);
hasCellKey2 = cellKey2;
inStrongholdFloor1 = new ZoneRequirement(strongholdFloor1);
inStrongholdFloor2 = new ZoneRequirement(strongholdFloor2);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/eaglespeak/EaglesPeak.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/eaglespeak/EaglesPeak.java
index c2468155580..943ca9da5f7 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/eaglespeak/EaglesPeak.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/eaglespeak/EaglesPeak.java
@@ -46,6 +46,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import java.util.*;
@@ -223,34 +224,34 @@ public void setupConditions()
bronzeRoomPedestalUp = new ObjectCondition(ObjectID.EAGLEPEAK_NET_TRAP_ACTIVE);
bronzeRoomPedestalLowered = new ObjectCondition(ObjectID.EAGLEPEAK_DUNGEON_PEDESTAL_PUZZLE3);
inMainCavern = new ZoneRequirement(inMainCave);
- spokenToNickolaus = new VarbitRequirement(3110, 3);
- spokenOnceToAsyff = new VarbitRequirement(3110, 4);
- spokenTwiceToAsyff = new VarbitRequirement(3110, 5);
- winch1NotDone = new VarbitRequirement(3101, 0);
- winch2NotDone = new VarbitRequirement(3102, 0);
- winch3NotDone = new VarbitRequirement(3103, 0);
- winch4NotDone = new VarbitRequirement(3104, 0);
- hasSolvedBronze = new VarbitRequirement(3105, 0);
- hasInspectedSilverPedestal = new VarbitRequirement(3099, 1);
- hasInspectedRocks1 = new VarbitRequirement(3099, 2);
- hasInspectedRocks2 = new VarbitRequirement(3099, 3);
- hasInspectedOpening = new VarbitRequirement(3099, 4);
- threatenedKebbit = new VarbitRequirement(3099, 5);
+ spokenToNickolaus = new VarbitRequirement(VarbitID.EAGLEPEAK_NICKOLAUS_CHAT, 3);
+ spokenOnceToAsyff = new VarbitRequirement(VarbitID.EAGLEPEAK_NICKOLAUS_CHAT, 4);
+ spokenTwiceToAsyff = new VarbitRequirement(VarbitID.EAGLEPEAK_NICKOLAUS_CHAT, 5);
+ winch1NotDone = new VarbitRequirement(VarbitID.EAGLEPEAK_PUZZLE3_WINCH1, 0);
+ winch2NotDone = new VarbitRequirement(VarbitID.EAGLEPEAK_PUZZLE3_WINCH2, 0);
+ winch3NotDone = new VarbitRequirement(VarbitID.EAGLEPEAK_PUZZLE3_WINCH3, 0);
+ winch4NotDone = new VarbitRequirement(VarbitID.EAGLEPEAK_PUZZLE3_WINCH4, 0);
+ hasSolvedBronze = new VarbitRequirement(VarbitID.EAGLEPEAK_PUZZLE3_NETTRAP, 0);
+ hasInspectedSilverPedestal = new VarbitRequirement(VarbitID.EAGLEPEAK_PUZZLE2_TRACKING, 1);
+ hasInspectedRocks1 = new VarbitRequirement(VarbitID.EAGLEPEAK_PUZZLE2_TRACKING, 2);
+ hasInspectedRocks2 = new VarbitRequirement(VarbitID.EAGLEPEAK_PUZZLE2_TRACKING, 3);
+ hasInspectedOpening = new VarbitRequirement(VarbitID.EAGLEPEAK_PUZZLE2_TRACKING, 4);
+ threatenedKebbit = new VarbitRequirement(VarbitID.EAGLEPEAK_PUZZLE2_TRACKING, 5);
inSilverRoom = new ZoneRequirement(inSilverRoomZone);
inGoldRoom = new ZoneRequirement(inGoldRoomZone1, inGoldRoomZone2);
- lever1OriginalPosition = new VarbitRequirement(3092, 0);
- lever1Pulled = new VarbitRequirement(3092, 1);
- lever2Pulled = new VarbitRequirement(3093, 1);
- lever3Pulled = new VarbitRequirement(3090, 1);
- lever4Pulled = new VarbitRequirement(3091, 1);
- bird1Moved = new VarbitRequirement(3098, 1);
- bird2Moved = new VarbitRequirement(3097, 1);
- bird3Moved = new VarbitRequirement(3095, 1);
- bird4Moved = new VarbitRequirement(3094, 1);
- bird5Moved = new VarbitRequirement(3096, 1);
- hasInsertedBronzeFeather = new VarbitRequirement(3108, 1);
- hasInsertedSilverFeather = new VarbitRequirement(3099, 6);
- hasInsertedGoldFeather = new VarbitRequirement(3107, 1);
+ lever1OriginalPosition = new VarbitRequirement(VarbitID.EAGLEPEAK_PUZZLE1_GATE3, 0);
+ lever1Pulled = new VarbitRequirement(VarbitID.EAGLEPEAK_PUZZLE1_GATE3, 1);
+ lever2Pulled = new VarbitRequirement(VarbitID.EAGLEPEAK_PUZZLE1_GATE4, 1);
+ lever3Pulled = new VarbitRequirement(VarbitID.EAGLEPEAK_PUZZLE1_GATE1, 1);
+ lever4Pulled = new VarbitRequirement(VarbitID.EAGLEPEAK_PUZZLE1_GATE2, 1);
+ bird1Moved = new VarbitRequirement(VarbitID.EAGLEPEAK_PUZZLE1_MECHBIRD5, 1);
+ bird2Moved = new VarbitRequirement(VarbitID.EAGLEPEAK_PUZZLE1_MECHBIRD4, 1);
+ bird3Moved = new VarbitRequirement(VarbitID.EAGLEPEAK_PUZZLE1_MECHBIRD2, 1);
+ bird4Moved = new VarbitRequirement(VarbitID.EAGLEPEAK_PUZZLE1_MECHBIRD1, 1);
+ bird5Moved = new VarbitRequirement(VarbitID.EAGLEPEAK_PUZZLE1_MECHBIRD3, 1);
+ hasInsertedBronzeFeather = new VarbitRequirement(VarbitID.EAGLEPEAK_EAGLEDOOR_FEATHER3, 1);
+ hasInsertedSilverFeather = new VarbitRequirement(VarbitID.EAGLEPEAK_PUZZLE2_TRACKING, 6);
+ hasInsertedGoldFeather = new VarbitRequirement(VarbitID.EAGLEPEAK_EAGLEDOOR_FEATHER1, 1);
silverFeatherNearby = new ItemOnTileRequirement(silverFeather);
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/elementalworkshopi/ElementalWorkshopI.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/elementalworkshopi/ElementalWorkshopI.java
index 2c4a0142ddb..837e251b2fc 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/elementalworkshopi/ElementalWorkshopI.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/elementalworkshopi/ElementalWorkshopI.java
@@ -52,6 +52,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import net.runelite.api.gameval.VarPlayerID;
import java.util.ArrayList;
@@ -137,8 +138,9 @@ protected void setupRequirements()
knife.setHighlightInInventory(true);
pickaxe = new ItemRequirement("Any pickaxe", ItemCollections.PICKAXES).isNotConsumed();
needle = new ItemRequirement("Needle", ItemID.NEEDLE).isNotConsumed();
- needle.setTooltip("You can obtain this during the quest");
+ needle.setTooltip("Costume needle cannot be used as a substitute. You can obtain this during the quest");
thread = new ItemRequirement("Thread", ItemID.THREAD);
+ thread.setTooltip("Costume needle cannot be used as a substitute.");
leather = new ItemRequirement("Leather", ItemID.LEATHER);
leather.setTooltip("You can obtain this during the quest");
@@ -220,19 +222,19 @@ public void setupConditions()
inStairwell = new ZoneRequirement(stairwell);
inWorkshop = new ZoneRequirement(workshop);
- hasSlashedBook = new VarbitRequirement(2057, 1);
+ hasSlashedBook = new VarbitRequirement(VarbitID.ELEMENTAL_WORKSHOP_KEY, 1);
hasReadBook = new VarplayerRequirement(VarPlayerID.ELEMENTAL_WORKSHOP_BITS, true, 1);
enteredWall = new VarplayerRequirement(VarPlayerID.ELEMENTAL_WORKSHOP_BITS, true, 15);
- foundLeather = new VarbitRequirement(2066, 1);
- turnedValve1 = new VarbitRequirement(2059, 1);
- turnedValve2 = new VarbitRequirement(2058, 1);
- solvedWater = new VarbitRequirement(2060, 1);
+ foundLeather = new VarbitRequirement(VarbitID.ELEMENTAL_WORKSHOP_LEATHER, 1);
+ turnedValve1 = new VarbitRequirement(VarbitID.ELEMENTAL_WORKSHOP_GATE2, 1);
+ turnedValve2 = new VarbitRequirement(VarbitID.ELEMENTAL_WORKSHOP_GATE1, 1);
+ solvedWater = new VarbitRequirement(VarbitID.ELEMENTAL_WORKSHOP_SWITCH, 1);
hasLeatherOrSearched = new Conditions(LogicType.OR, foundLeather, leather);
- solvedAir = new VarbitRequirement(2063, 1);
- fixedBellow = new VarbitRequirement(2061, 1);
+ solvedAir = new VarbitRequirement(VarbitID.ELEMENTAL_WORKSHOP_BELLOWS_SWITCH, 1);
+ fixedBellow = new VarbitRequirement(VarbitID.ELEMENTAL_WORKSHOP_BELLOWS, 1);
- solvedFire = new VarbitRequirement(2062, 1);
+ solvedFire = new VarbitRequirement(VarbitID.ELEMENTAL_WORKSHOP_FIRE, 1);
elementalOreNearby = new ItemOnTileRequirement(elementalOre);
earthNearby = new NpcCondition(NpcID.ELEM1_QIP_EARTH_ELEMENTAL_ROCK_VERSION);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/elementalworkshopii/ElementalWorkshopII.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/elementalworkshopii/ElementalWorkshopII.java
index 3ac4bc5e576..303cb7a12fe 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/elementalworkshopii/ElementalWorkshopII.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/elementalworkshopii/ElementalWorkshopII.java
@@ -324,41 +324,41 @@ public void setupConditions()
inPipePuzzle = new WidgetModelRequirement(262, 37, 18794);
sortedPipes = new Conditions(
new Conditions(LogicType.OR,
- new VarbitRequirement(2646, 5),
- new VarbitRequirement(2647, 5),
- new VarbitRequirement(2648, 5)
+ new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_EARTH_PIPE_1_STATE, 5),
+ new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_EARTH_PIPE_2_STATE, 5),
+ new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_EARTH_PIPE_3_STATE, 5)
),
new Conditions(LogicType.OR,
- new VarbitRequirement(2646, 6),
- new VarbitRequirement(2647, 6),
- new VarbitRequirement(2648, 6)
+ new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_EARTH_PIPE_1_STATE, 6),
+ new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_EARTH_PIPE_2_STATE, 6),
+ new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_EARTH_PIPE_3_STATE, 6)
),
new Conditions(LogicType.OR,
- new VarbitRequirement(2646, 13),
- new VarbitRequirement(2647, 13),
- new VarbitRequirement(2648, 13)
+ new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_EARTH_PIPE_1_STATE, 13),
+ new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_EARTH_PIPE_2_STATE, 13),
+ new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_EARTH_PIPE_3_STATE, 13)
)
);
- repairedPipe = new VarbitRequirement(2650, 1);
+ repairedPipe = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_WATER_STATE, 1);
hasSmallCog = new Conditions(LogicType.OR,
smallCog,
- new VarbitRequirement(2655, 1),
- new VarbitRequirement(2656, 1),
- new VarbitRequirement(2657, 1)
+ new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_AIR_COG1, 1),
+ new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_AIR_COG2, 1),
+ new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_AIR_COG3, 1)
);
hasMediumCog = new Conditions(LogicType.OR,
mediumCog,
- new VarbitRequirement(2655, 2),
- new VarbitRequirement(2656, 2),
- new VarbitRequirement(2657, 2)
+ new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_AIR_COG1, 2),
+ new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_AIR_COG2, 2),
+ new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_AIR_COG3, 2)
);
hasLargeCog = new Conditions(LogicType.OR,
largeCog,
- new VarbitRequirement(2655, 3),
- new VarbitRequirement(2656, 3),
- new VarbitRequirement(2657, 3)
+ new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_AIR_COG1, 3),
+ new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_AIR_COG2, 3),
+ new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_AIR_COG3, 3)
);
hasPipe = new Conditions(LogicType.OR,
repairedPipe,
@@ -367,9 +367,9 @@ public void setupConditions()
hasCogsAndPipe = new Conditions(hasSmallCog, hasMediumCog, hasLargeCog, hasPipe);
- smallCogPlaced = new VarbitRequirement(2655, 1);
- mediumCogPlaced = new VarbitRequirement(2656, 2);
- largeCogPlaced = new VarbitRequirement(2657, 3);
+ smallCogPlaced = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_AIR_COG1, 1);
+ mediumCogPlaced = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_AIR_COG2, 2);
+ largeCogPlaced = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_AIR_COG3, 3);
// This potentially relates to varbit 2664
// Small cog in crate 18614
@@ -377,41 +377,41 @@ public void setupConditions()
// Medium cog in crate 18616
// Pipe in crate 18617
- placedBar = new VarbitRequirement(2643, 1);
- barHotOnJig = new VarbitRequirement(2643, 2);
- flatHotBarOnJig = new VarbitRequirement(2643, 3);
- coolFlatBarOnJig = new VarbitRequirement(2643, 4);
- airCoolFlatBarOnJig = new VarbitRequirement(2643, 5);
- craneLowered = new VarbitRequirement(2645, 1);
- craneRaised = new VarbitRequirement(2645, 0);
- craneHoldingBar = new VarbitRequirement(2644, 2);
- craneAboveLava = new VarbitRequirement(2645, 2);
- craneInLava = new VarbitRequirement(2645, 3);
- barOutsideLava = new VarbitRequirement(2642, 0);
- barUnderPress = new VarbitRequirement(2642, 1);
- barOutsideTank = new VarbitRequirement(2642, 2);
- barInTunnel = new VarbitRequirement(2642, 3);
- craneHoldingHotBar = new VarbitRequirement(2644, 3);
-
- tankClosed = new VarbitRequirement(2653, 0);
- tankOpen = new VarbitRequirement(2653, 1);
- grabberOut = new VarbitRequirement(2653, 2);
- grabberInWithHotFlatBarDoorOpen = new VarbitRequirement(2653, 4);
- grabberInWithHotFlatBarDoorClosed = new VarbitRequirement(2653, 3);
- grabberOutWithHotFlatBarDoorOpen = new VarbitRequirement(2653, 5);
- grabberInWithCoolFlatBarDoorClosed = new VarbitRequirement(2653, 6);
- grabberInWithCoolFlatBarDoorOpened = new VarbitRequirement(2653, 7);
- grabberOutWithCoolFlatBar = new VarbitRequirement(2653, 8);
- waterInOpen = new VarbitRequirement(2651, 1);
- waterInClosed = new VarbitRequirement(2651, 0);
- waterOutClosed = new VarbitRequirement(2652, 0);
- waterOutOpen = new VarbitRequirement(2652, 1);
- waterInTank = new VarbitRequirement(2654, 1);
- fanOff = new VarbitRequirement(2660, 0);
- fanOn = new VarbitRequirement(2660, 1);
-
- primedBarPlaced = new VarbitRequirement(2662, 1);
- mindBarPlaced = new VarbitRequirement(2662, 2);
+ placedBar = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_JIG_STATE, 1);
+ barHotOnJig = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_JIG_STATE, 2);
+ flatHotBarOnJig = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_JIG_STATE, 3);
+ coolFlatBarOnJig = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_JIG_STATE, 4);
+ airCoolFlatBarOnJig = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_JIG_STATE, 5);
+ craneLowered = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_FIRE_POS, 1);
+ craneRaised = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_FIRE_POS, 0);
+ craneHoldingBar = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_FIRE_STATE, 2);
+ craneAboveLava = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_FIRE_POS, 2);
+ craneInLava = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_FIRE_POS, 3);
+ barOutsideLava = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_JIG_POS, 0);
+ barUnderPress = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_JIG_POS, 1);
+ barOutsideTank = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_JIG_POS, 2);
+ barInTunnel = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_JIG_POS, 3);
+ craneHoldingHotBar = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_FIRE_STATE, 3);
+
+ tankClosed = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_WATER_DOOR, 0);
+ tankOpen = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_WATER_DOOR, 1);
+ grabberOut = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_WATER_DOOR, 2);
+ grabberInWithHotFlatBarDoorOpen = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_WATER_DOOR, 4);
+ grabberInWithHotFlatBarDoorClosed = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_WATER_DOOR, 3);
+ grabberOutWithHotFlatBarDoorOpen = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_WATER_DOOR, 5);
+ grabberInWithCoolFlatBarDoorClosed = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_WATER_DOOR, 6);
+ grabberInWithCoolFlatBarDoorOpened = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_WATER_DOOR, 7);
+ grabberOutWithCoolFlatBar = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_WATER_DOOR, 8);
+ waterInOpen = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_WATER_VALVE_1, 1);
+ waterInClosed = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_WATER_VALVE_1, 0);
+ waterOutClosed = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_WATER_VALVE_2, 0);
+ waterOutOpen = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_WATER_VALVE_2, 1);
+ waterInTank = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_WATER_LEVEL, 1);
+ fanOff = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_AIR_FAN_STATE, 0);
+ fanOn = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_AIR_FAN_STATE, 1);
+
+ primedBarPlaced = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_MIND_JIG, 1);
+ mindBarPlaced = new VarbitRequirement(VarbitID.ELEMENTAL_QUEST_2_MIND_JIG, 2);
}
public void setupSteps()
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/enakhraslament/EnakhrasLament.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/enakhraslament/EnakhrasLament.java
index 2ad7f0d5977..e637dc28686 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/enakhraslament/EnakhrasLament.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/enakhraslament/EnakhrasLament.java
@@ -55,123 +55,163 @@
public class EnakhrasLament extends BasicQuestHelper
{
- //Items Required
- ItemRequirement pickaxe, chiselHighlighted, sandstone32, sandstone20, base, body, head, granite2, granite, leftArm, rightArm, leftLeg,
- rightLeg, kSigil, rSigil, mSigil, zSigil, softClay, camelMould, camelHead, breadOrCake, fireSpellRunes, airSpellRunes,
- mapleLog, log, oakLog, willowLog, coal, candle, air2, chaos, earth2, sandstone5, tinderbox, crumbleUndeadRunes, sandstone52,
- airStaff, airRuneOrStaff, earthRuneOrStaff, earthStaff;
-
+ // Required items
+ ItemRequirement pickaxe;
+ ItemRequirement chiselHighlighted;
+ ItemRequirement sandstone32;
+ ItemRequirement sandstone20;
+ ItemRequirement granite2;
+ ItemRequirement granite;
+ ItemRequirement softClay;
+ ItemRequirement breadOrCake;
+ ItemRequirement fireSpellRunes;
+ ItemRequirement airSpellRunes;
+ ItemRequirement mapleLog;
+ ItemRequirement log;
+ ItemRequirement oakLog;
+ ItemRequirement willowLog;
+ ItemRequirement coal;
+ ItemRequirement candle;
+ ItemRequirement air2;
+ ItemRequirement chaos;
+ ItemRequirement earth2;
+ ItemRequirement sandstone5;
+ ItemRequirement tinderbox;
+ ItemRequirement crumbleUndeadRunes;
+ ItemRequirement sandstone52;
+ ItemRequirement airStaff;
+ ItemRequirement airRuneOrStaff;
+ ItemRequirement earthRuneOrStaff;
+ ItemRequirement earthStaff;
+
+ // Mid-quest requirements
+ ItemRequirement base;
+ ItemRequirement body;
+ ItemRequirement head;
+ ItemRequirement leftArm;
+ ItemRequirement rightArm;
+ ItemRequirement leftLeg;
+ ItemRequirement rightLeg;
+ ItemRequirement kSigil;
+ ItemRequirement rSigil;
+ ItemRequirement mSigil;
+ ItemRequirement zSigil;
+ ItemRequirement camelMould;
+ ItemRequirement camelHead;
+
+ // Miscellaneous requirements
SpellbookRequirement onNormals;
-
- Requirement hasPlacedBase, hasTalkedToLazimAfterBase, hasPlacedBody, chiseledStatue, canChooseHead, inTempleEntranceRoom,
- inTempleGroundFloor, startedTemple, gottenLimbs, openedDoor1, openedDoor2, openedDoor3, openedDoor4, mPlaced, kPlaced,
- rPlaced, zPlaced, goneUpstairs, hasGottenRightArm, hasGottenRightLeg, inCentreRoom, inPuzzleFloor,
- fedBread, meltedFountain, cleanedFurnace, litBraziers, litLog, litOak, litWillow, litMaple, litCandle, litCoal, inNorthPuzzleRoom,
- inTopRoom, inLastRoom, wallNeedsChisel, finishedWall, protectFromMelee;
-
- DetailedQuestStep talkToLazim, bringLazim32Sandstone, useChiselOn32Sandstone, placeBase, bringLazim20Sandstone,
- useChiselOn20Sandstone, placeBody, talkToLazimToChooseHead, getGranite, craftHead, talkToLazimAboutBody,
- chiselStatue, giveLazimHead, talkToLazimInTemple, enterTemple, enterTempleDownLadder, cutOffLimb, takeM,
- talkToLazimForHead, enterDoor1, enterDoor2, enterDoor3, enterDoor4, enterKDoor, enterRDoor, enterMDoor, enterZDoor,
- takeZ, takeK, takeR, useStoneHeadOnPedestal, useSoftClayOnPedestal, useChiselOnGranite, goUpToPuzzles, useBread, castAirSpell,
- castFireSpell, useMapleLog, useOakLog, useLog, useWillowLog, useCoal, useCandle, passBarrier, goUpFromPuzzleRoom, castCrumbleUndead,
- goDownToFinalRoom, protectThenTalk, repairWall, useChiselOnWall, talkToAkthankos;
-
- //Zones
- Zone templeEntranceRoom, templeGroundFloor, centreRoom, puzzleFloor, northPuzzleRoom, topRoom, lastRoom;
+ VarbitRequirement hasPlacedBase;
+ VarbitRequirement hasTalkedToLazimAfterBase;
+ VarbitRequirement hasPlacedBody;
+ VarbitRequirement chiseledStatue;
+ VarbitRequirement canChooseHead;
+ ZoneRequirement inTempleEntranceRoom;
+ ZoneRequirement inTempleGroundFloor;
+ VarbitRequirement startedTemple;
+ VarbitRequirement gottenLimbs;
+ VarbitRequirement openedDoor1;
+ VarbitRequirement openedDoor2;
+ VarbitRequirement openedDoor3;
+ VarbitRequirement openedDoor4;
+ VarbitRequirement mPlaced;
+ VarbitRequirement kPlaced;
+ VarbitRequirement rPlaced;
+ VarbitRequirement zPlaced;
+ VarbitRequirement goneUpstairs;
+ VarbitRequirement hasGottenRightArm;
+ VarbitRequirement hasGottenRightLeg;
+ ZoneRequirement inCentreRoom;
+ ZoneRequirement inPuzzleFloor;
+ VarbitRequirement fedBread;
+ VarbitRequirement meltedFountain;
+ VarbitRequirement cleanedFurnace;
+ VarbitRequirement litBraziers;
+ VarbitRequirement litLog;
+ VarbitRequirement litOak;
+ VarbitRequirement litWillow;
+ VarbitRequirement litMaple;
+ VarbitRequirement litCandle;
+ VarbitRequirement litCoal;
+ ZoneRequirement inNorthPuzzleRoom;
+ ZoneRequirement inTopRoom;
+ ZoneRequirement inLastRoom;
+ VarbitRequirement wallNeedsChisel;
+ VarbitRequirement finishedWall;
+ PrayerRequirement protectFromMelee;
+
+ // Steps
+ NpcStep talkToLazim;
+ NpcStep bringLazim32Sandstone;
+ DetailedQuestStep useChiselOn32Sandstone;
+ ObjectStep placeBase;
+ NpcStep bringLazim20Sandstone;
+ DetailedQuestStep useChiselOn20Sandstone;
+ ObjectStep placeBody;
+ NpcStep talkToLazimToChooseHead;
+ NpcStep getGranite;
+ DetailedQuestStep craftHead;
+ NpcStep talkToLazimAboutBody;
+ DetailedQuestStep chiselStatue;
+ NpcStep giveLazimHead;
+ NpcStep talkToLazimInTemple;
+ ObjectStep enterTemple;
+ ObjectStep enterTempleDownLadder;
+ ObjectStep cutOffLimb;
+ ObjectStep takeM;
+ NpcStep talkToLazimForHead;
+ ObjectStep enterDoor1;
+ ObjectStep enterDoor2;
+ ObjectStep enterDoor3;
+ ObjectStep enterDoor4;
+ ObjectStep enterKDoor;
+ ObjectStep enterRDoor;
+ ObjectStep enterMDoor;
+ ObjectStep enterZDoor;
+ ObjectStep takeZ;
+ ObjectStep takeK;
+ ObjectStep takeR;
+ ObjectStep useStoneHeadOnPedestal;
+ ObjectStep useSoftClayOnPedestal;
+ DetailedQuestStep useChiselOnGranite;
+ ObjectStep goUpToPuzzles;
+ NpcStep useBread;
+ NpcStep castAirSpell;
+ NpcStep castFireSpell;
+ ObjectStep useMapleLog;
+ ObjectStep useOakLog;
+ ObjectStep useLog;
+ ObjectStep useWillowLog;
+ ObjectStep useCoal;
+ ObjectStep useCandle;
+ ObjectStep passBarrier;
+ ObjectStep goUpFromPuzzleRoom;
+ NpcStep castCrumbleUndead;
+ ObjectStep goDownToFinalRoom;
+ NpcStep protectThenTalk;
+ ObjectStep repairWall;
+ ObjectStep useChiselOnWall;
+ NpcStep talkToAkthankos;
+
+ // Zones
+ Zone templeEntranceRoom;
+ Zone templeGroundFloor;
+ Zone centreRoom;
+ Zone puzzleFloor;
+ Zone northPuzzleRoom;
+ Zone topRoom;
+ Zone lastRoom;
@Override
- public Map loadSteps()
+ protected void setupZones()
{
- initializeRequirements();
- setupConditions();
- setupSteps();
- Map steps = new HashMap<>();
-
- steps.put(0, talkToLazim);
-
- ConditionalStep makeAndPlaceBase = new ConditionalStep(this, bringLazim32Sandstone);
- makeAndPlaceBase.addStep(new Conditions(head, granite), giveLazimHead);
- makeAndPlaceBase.addStep(new Conditions(granite2, canChooseHead), craftHead);
- makeAndPlaceBase.addStep(canChooseHead, getGranite);
- makeAndPlaceBase.addStep(chiseledStatue, talkToLazimToChooseHead);
- makeAndPlaceBase.addStep(hasPlacedBody, chiselStatue);
- makeAndPlaceBase.addStep(body, placeBody);
- makeAndPlaceBase.addStep(sandstone20, useChiselOn20Sandstone);
- makeAndPlaceBase.addStep(hasTalkedToLazimAfterBase, bringLazim20Sandstone);
- makeAndPlaceBase.addStep(hasPlacedBase, talkToLazimAboutBody);
- makeAndPlaceBase.addStep(base, placeBase);
- makeAndPlaceBase.addStep(sandstone32, useChiselOn32Sandstone);
-
- steps.put(10, makeAndPlaceBase);
-
- ConditionalStep exploreBottomLayer = new ConditionalStep(this, enterTemple);
- exploreBottomLayer.addStep(new Conditions(camelHead, inPuzzleFloor), useStoneHeadOnPedestal);
- exploreBottomLayer.addStep(camelMould, useChiselOnGranite);
- exploreBottomLayer.addStep(inPuzzleFloor, useSoftClayOnPedestal);
- exploreBottomLayer.addStep(new Conditions(gottenLimbs, inTempleGroundFloor, openedDoor1, openedDoor2, openedDoor3, openedDoor4), goUpToPuzzles);
- exploreBottomLayer.addStep(new Conditions(gottenLimbs, inTempleGroundFloor, openedDoor1, openedDoor2, openedDoor3, rSigil), enterDoor4);
- exploreBottomLayer.addStep(new Conditions(gottenLimbs, inTempleGroundFloor, openedDoor1, openedDoor2, openedDoor3), takeR);
- exploreBottomLayer.addStep(new Conditions(gottenLimbs, inTempleGroundFloor, openedDoor1, openedDoor2, kSigil), enterDoor3);
- exploreBottomLayer.addStep(new Conditions(gottenLimbs, inTempleGroundFloor, openedDoor1, openedDoor2), takeK);
- // It's possible to skip the rest of this, but it skips some of the quest story and leaves doors locked after you finish, so this encourages players to explore
- exploreBottomLayer.addStep(new Conditions(gottenLimbs, inTempleGroundFloor, openedDoor1, zSigil), enterDoor2);
- exploreBottomLayer.addStep(new Conditions(gottenLimbs, inTempleGroundFloor, openedDoor1), takeZ);
- exploreBottomLayer.addStep(new Conditions(gottenLimbs, inTempleGroundFloor, mSigil), enterDoor1);
- exploreBottomLayer.addStep(new Conditions(gottenLimbs, inTempleGroundFloor), takeM);
- exploreBottomLayer.addStep(new Conditions(startedTemple, inTempleGroundFloor), cutOffLimb);
- exploreBottomLayer.addStep(inTempleGroundFloor, talkToLazimInTemple);
- exploreBottomLayer.addStep(inTempleEntranceRoom, enterTempleDownLadder);
-
- steps.put(20, exploreBottomLayer);
-
- ConditionalStep puzzles = new ConditionalStep(this, enterTemple);
- puzzles.addStep(new Conditions(fedBread, inPuzzleFloor, meltedFountain, cleanedFurnace, litLog, litOak, litWillow, litMaple, litCandle), useCoal);
- puzzles.addStep(new Conditions(fedBread, inPuzzleFloor, meltedFountain, cleanedFurnace, litLog, litOak, litWillow, litMaple), useCandle);
- puzzles.addStep(new Conditions(fedBread, inPuzzleFloor, meltedFountain, cleanedFurnace, litLog, litOak, litWillow), useMapleLog);
- puzzles.addStep(new Conditions(fedBread, inPuzzleFloor, meltedFountain, cleanedFurnace, litLog, litOak), useWillowLog);
- puzzles.addStep(new Conditions(fedBread, inPuzzleFloor, meltedFountain, cleanedFurnace, litLog), useOakLog);
- puzzles.addStep(new Conditions(fedBread, inPuzzleFloor, meltedFountain, cleanedFurnace), useLog);
- puzzles.addStep(new Conditions(fedBread, inPuzzleFloor, meltedFountain), castAirSpell);
- puzzles.addStep(new Conditions(fedBread, inPuzzleFloor), castFireSpell);
- puzzles.addStep(inPuzzleFloor, useBread);
- puzzles.addStep(inTempleGroundFloor, goUpToPuzzles);
- puzzles.addStep(inTempleEntranceRoom, enterTempleDownLadder);
-
- steps.put(30, puzzles);
-
- ConditionalStep topFloorPuzzle = new ConditionalStep(this, enterTemple);
- topFloorPuzzle.addStep(inTopRoom, castCrumbleUndead);
- topFloorPuzzle.addStep(inNorthPuzzleRoom, goUpFromPuzzleRoom);
- topFloorPuzzle.addStep(inPuzzleFloor, passBarrier);
- topFloorPuzzle.addStep(inTempleGroundFloor, goUpToPuzzles);
- topFloorPuzzle.addStep(inTempleEntranceRoom, enterTempleDownLadder);
-
- steps.put(40, topFloorPuzzle);
-
- ConditionalStep protectMeleePuzzle = new ConditionalStep(this, enterTemple);
- protectMeleePuzzle.addStep(inLastRoom, protectThenTalk);
- protectMeleePuzzle.addStep(inTopRoom, goDownToFinalRoom);
- protectMeleePuzzle.addStep(inNorthPuzzleRoom, goUpFromPuzzleRoom);
- protectMeleePuzzle.addStep(inPuzzleFloor, passBarrier);
- protectMeleePuzzle.addStep(inTempleGroundFloor, goUpToPuzzles);
- protectMeleePuzzle.addStep(inTempleEntranceRoom, enterTempleDownLadder);
-
- steps.put(50, protectMeleePuzzle);
-
- ConditionalStep repairWallForAkthankos = new ConditionalStep(this, enterTemple);
- repairWallForAkthankos.addStep(new Conditions(inLastRoom, wallNeedsChisel), useChiselOnWall);
- repairWallForAkthankos.addStep(new Conditions(inLastRoom, finishedWall), talkToAkthankos);
- repairWallForAkthankos.addStep(inLastRoom, repairWall);
- repairWallForAkthankos.addStep(inTopRoom, goDownToFinalRoom);
- repairWallForAkthankos.addStep(inNorthPuzzleRoom, goUpFromPuzzleRoom);
- repairWallForAkthankos.addStep(inPuzzleFloor, passBarrier);
- repairWallForAkthankos.addStep(inTempleGroundFloor, goUpToPuzzles);
- repairWallForAkthankos.addStep(inTempleEntranceRoom, enterTempleDownLadder);
-
- steps.put(60, repairWallForAkthankos);
-
- return steps;
+ templeEntranceRoom = new Zone(new WorldPoint(3124, 9328, 1), new WorldPoint(3128, 9330, 1));
+ templeGroundFloor = new Zone(new WorldPoint(3074, 9282, 0), new WorldPoint(3133, 9341, 0));
+ centreRoom = new Zone(new WorldPoint(3098, 9306, 0), new WorldPoint(3110, 9318, 0));
+ puzzleFloor = new Zone(new WorldPoint(3086, 9305, 1), new WorldPoint(3121, 9326, 1));
+ northPuzzleRoom = new Zone(new WorldPoint(2095, 9319, 1), new WorldPoint(3112, 9335, 1));
+ topRoom = new Zone(new WorldPoint(3097, 9299, 2), new WorldPoint(3113, 9334, 2));
+ lastRoom = new Zone(new WorldPoint(3096, 9291, 1), new WorldPoint(3112, 9302, 1));
}
@Override
@@ -260,22 +300,7 @@ protected void setupRequirements()
tinderbox = new ItemRequirement("Tinderbox", ItemID.TINDERBOX).isNotConsumed();
onNormals = new SpellbookRequirement(Spellbook.NORMAL);
- }
- @Override
- protected void setupZones()
- {
- templeEntranceRoom = new Zone(new WorldPoint(3124, 9328, 1), new WorldPoint(3128, 9330, 1));
- templeGroundFloor = new Zone(new WorldPoint(3074, 9282, 0), new WorldPoint(3133, 9341, 0));
- centreRoom = new Zone(new WorldPoint(3098, 9306, 0), new WorldPoint(3110, 9318, 0));
- puzzleFloor = new Zone(new WorldPoint(3086, 9305, 1), new WorldPoint(3121, 9326, 1));
- northPuzzleRoom = new Zone(new WorldPoint(2095, 9319, 1), new WorldPoint(3112, 9335, 1));
- topRoom = new Zone(new WorldPoint(3097, 9299, 2), new WorldPoint(3113, 9334, 2));
- lastRoom = new Zone(new WorldPoint(3096, 9291, 1), new WorldPoint(3112, 9302, 1));
- }
-
- public void setupConditions()
- {
hasPlacedBase = new VarbitRequirement(VarbitID.ENAKH_STATUE_MULTIVAR, 1);
hasPlacedBody = new VarbitRequirement(VarbitID.ENAKH_STATUE_MULTIVAR, 2);
chiseledStatue = new VarbitRequirement(VarbitID.ENAKH_STATUE_MULTIVAR, 3);
@@ -327,11 +352,15 @@ public void setupConditions()
protectFromMelee = new PrayerRequirement("Protect from Melee", Prayer.PROTECT_FROM_MELEE);
}
+
public void setupSteps()
{
- talkToLazim = new NpcStep(this, NpcID.ENAKH_LAZIM, new WorldPoint(3190, 2925, 0), "Before you begin, ensure that you have enough prayer points to use Protect from Melee for around five seconds (you will need this later in the temple). Talk to Lazim in the quarry south of the Bandit Camp.", pickaxe, onNormals);
+ talkToLazim = new NpcStep(this, NpcID.ENAKH_LAZIM, new WorldPoint(3190, 2925, 0), "Before you begin, ensure that you have enough prayer points to use" +
+ " Protect from Melee for around five seconds (you will need this later in the temple). Talk to Lazim in the quarry south of the Bandit Camp.",
+ pickaxe, onNormals);
talkToLazim.addDialogSteps("Yes.", "Of course!");
- bringLazim32Sandstone = new NpcStep(this, NpcID.ENAKH_LAZIM, new WorldPoint(3190, 2925, 0), "Get 32kg of sandstone and give it to Lazim. This can be done in batches, and you can mine some nearby.");
+ bringLazim32Sandstone = new NpcStep(this, NpcID.ENAKH_LAZIM, new WorldPoint(3190, 2925, 0), "Get 32kg of sandstone and give it to Lazim. This can be " +
+ "done in batches, and you can mine some nearby.");
bringLazim32Sandstone.addDialogStep("Okay, I'll get on with it.");
bringLazim32Sandstone.addDialogStep("Yes, I have more stone.");
bringLazim32Sandstone.addDialogStep("Here's a large 10 kg block.");
@@ -343,7 +372,8 @@ public void setupSteps()
talkToLazimAboutBody = new NpcStep(this, NpcID.ENAKH_LAZIM, new WorldPoint(3190, 2925, 0), "Talk to Lazim again.");
talkToLazimAboutBody.addDialogStep("I'll do it right away!");
- bringLazim20Sandstone = new NpcStep(this, NpcID.ENAKH_LAZIM, new WorldPoint(3190, 2925, 0), "Get 20kg of sandstone and give it to Lazim. This can be done in batches, and you can mine some nearby.");
+ bringLazim20Sandstone = new NpcStep(this, NpcID.ENAKH_LAZIM, new WorldPoint(3190, 2925, 0), "Get 20kg of sandstone and give it to Lazim. This can be " +
+ "done in batches, and you can mine some nearby.");
bringLazim20Sandstone.addDialogStep("I'll do it right away!");
bringLazim20Sandstone.addDialogStep("Yes, I have more stone.");
bringLazim20Sandstone.addDialogStep("Here's a large 10 kg block.");
@@ -353,23 +383,31 @@ public void setupSteps()
useChiselOn20Sandstone = new DetailedQuestStep(this, "Use a chisel on the sandstone 20kg.", chiselHighlighted, sandstone20);
placeBody = new ObjectStep(this, ObjectID.ENAKH_STATUE_EAST_MULTILOC, new WorldPoint(3190, 2926, 0), "Place the body on the sandstone base.", body);
- talkToLazimToChooseHead = new NpcStep(this, NpcID.ENAKH_LAZIM, new WorldPoint(3190, 2925, 0), "Talk to Lazim and choose the head you'd like the statue to have.");
+ talkToLazimToChooseHead = new NpcStep(this, NpcID.ENAKH_LAZIM, new WorldPoint(3190, 2925, 0), "Talk to Lazim and choose the head you'd like the " +
+ "statue to have.");
getGranite = new NpcStep(this, NpcID.ENAKH_LAZIM, new WorldPoint(3190, 2925, 0), "Get 2 x granite (5kg). You can mine some nearby.", granite2);
// TODO: Change head highlight text based on choice
- craftHead = new DetailedQuestStep(this, "Use a chisel on a piece of granite 5kg, and choose the head you decided on to craft.", chiselHighlighted, granite);
+ craftHead = new DetailedQuestStep(this, "Use a chisel on a piece of granite 5kg, and choose the head you decided on to craft.", chiselHighlighted,
+ granite);
- chiselStatue = new ObjectStep(this, ObjectID.ENAKH_STATUE_EAST_MULTILOC, new WorldPoint(3190, 2926, 0), "Use a chisel on the headless statue.", chiselHighlighted);
+ chiselStatue = new ObjectStep(this, ObjectID.ENAKH_STATUE_EAST_MULTILOC, new WorldPoint(3190, 2926, 0), "Use a chisel on the headless statue.",
+ chiselHighlighted);
chiselStatue.addIcon(ItemID.CHISEL);
giveLazimHead = new NpcStep(this, NpcID.ENAKH_LAZIM, new WorldPoint(3190, 2925, 0), "Give Lazim the head.", head);
- enterTemple = new ObjectStep(this, ObjectID.ENAKH_SECRET_BOULDER_MULTILOC_E, new WorldPoint(3194, 2925, 0), "Enter the temple south of the Bandit's Camp.");
- enterTempleDownLadder = new ObjectStep(this, ObjectID.ENAKH_TEMPLE_LADDERDOWN, new WorldPoint(3127, 9329, 1), "Enter the temple south of the Bandit's Camp.");
+ enterTemple = new ObjectStep(this, ObjectID.ENAKH_SECRET_BOULDER_MULTILOC_E, new WorldPoint(3194, 2925, 0), "Enter the temple south of the Bandit's " +
+ "Camp.");
+ enterTempleDownLadder = new ObjectStep(this, ObjectID.ENAKH_TEMPLE_LADDERDOWN, new WorldPoint(3127, 9329, 1), "Enter the temple south of the Bandit's" +
+ " Camp.");
talkToLazimInTemple = new NpcStep(this, NpcID.ENAKH_LAZIM, new WorldPoint(3127, 9324, 0), "Talk to Lazim in the temple.");
- cutOffLimb = new ObjectStep(this, ObjectID.ENAKH_FALLEN_STATUE_EAST_MULTILOC, new WorldPoint(3130, 9326, 0), "Use a chisel on the fallen statue to get all its limbs.", chiselHighlighted);
- cutOffLimb.addDialogSteps("Remove the statue's left arm", "Remove the statue's right arm", "Remove the statue's left leg", "Remove the statue's right leg");
+ cutOffLimb = new ObjectStep(this, ObjectID.ENAKH_FALLEN_STATUE_EAST_MULTILOC, new WorldPoint(3130, 9326, 0), "Use a chisel on the fallen statue to " +
+ "get all its limbs.", chiselHighlighted);
+ cutOffLimb.addDialogSteps("Remove the statue's left arm", "Remove the statue's right arm", "Remove the statue's left leg", "Remove the statue's right" +
+ " leg");
+ cutOffLimb.addIcon(ItemID.CHISEL);
takeM = new ObjectStep(this, ObjectID.ENAKH_PEDESTAL_SIGIL_M, new WorldPoint(3128, 9319, 0), "Take the M sigil from the pedestal in the room.");
takeZ = new ObjectStep(this, ObjectID.ENAKH_PEDESTAL_SIGIL_Z, new WorldPoint(3097, 9336, 0), "Take the Z sigil from the pedestal in the north room.");
@@ -392,101 +430,199 @@ public void setupSteps()
enterMDoor = new ObjectStep(this, ObjectID.ENAKH_DOOR_M_SIGIL, new WorldPoint(3097, 9312, 0), "Enter the door with an M.", mSigil);
enterZDoor = new ObjectStep(this, ObjectID.ENAKH_DOOR_Z_SIGIL, new WorldPoint(3104, 9305, 0), "Enter the door with a Z.", zSigil);
- goUpToPuzzles = new ObjectStep(this, ObjectID.ENAKH_TEMPLE_LADDERUP, new WorldPoint(3104, 9309, 0), "Open the central room's doors using the metal letters. Go up the ladder in the central room.");
+ goUpToPuzzles = new ObjectStep(this, ObjectID.ENAKH_TEMPLE_LADDERUP, new WorldPoint(3104, 9309, 0), "Open the central room's doors using the metal " +
+ "letters. Go up the ladder in the central room.");
useSoftClayOnPedestal = new ObjectStep(this, ObjectID.ENAKH_PEDESTAL_MULTILOC, new WorldPoint(3104, 9312, 1),
"Use soft clay on the pedestal.", softClay.highlighted());
useChiselOnGranite = new DetailedQuestStep(this, "Use a chisel on granite (5kg).", granite, chiselHighlighted);
- useStoneHeadOnPedestal = new ObjectStep(this, ObjectID.ENAKH_PEDESTAL_MULTILOC, new WorldPoint(3104, 9312, 1), "Use the camel stone head on the pedestal.", camelHead);
+ useStoneHeadOnPedestal = new ObjectStep(this, ObjectID.ENAKH_PEDESTAL_MULTILOC, new WorldPoint(3104, 9312, 1), "Use the camel stone head on the " +
+ "pedestal.", camelHead);
useStoneHeadOnPedestal.addIcon(ItemID.ENAKH_STONE_HEAD_AKTHANAKOS);
- useBread = new NpcStep(this, NpcID.ENAKH_PENTYN, new WorldPoint(3091, 9324, 1), "Right-click use bread or cake on Pentyn.", breadOrCake.highlighted());
- castFireSpell = new NpcStep(this, NpcID.ENAKH_DUMMY_FOUNTAIN, new WorldPoint(3092, 9308, 1), "Cast a fire spell on the frozen fountain.", fireSpellRunes, onNormals);
- castAirSpell = new NpcStep(this, NpcID.ENAKH_DUMMY_FURNACE, new WorldPoint(3116, 9323, 1), "Cast an air spell on the furnace.", airSpellRunes, onNormals);
- useMapleLog = new ObjectStep(this, ObjectID.ENAKH_BRAZIER_4_MULTILOC, new WorldPoint(3114, 9309, 1), "Use a maple log on the north west brazier.", mapleLog);
- useMapleLog.addIcon(ItemID.MAPLE_LOGS);
+ useBread = new NpcStep(this, NpcID.ENAKH_PENTYN, new WorldPoint(3091, 9324, 1), "Right-click use bread or cake on Pentyn.", breadOrCake.highlighted());
+ castFireSpell = new NpcStep(this, NpcID.ENAKH_DUMMY_FOUNTAIN, new WorldPoint(3092, 9308, 1), "Cast a fire spell on the frozen fountain.",
+ fireSpellRunes, onNormals);
+ castAirSpell = new NpcStep(this, NpcID.ENAKH_DUMMY_FURNACE, new WorldPoint(3116, 9323, 1), "Cast an air spell on the furnace.", airSpellRunes,
+ onNormals);
+
+ // Shadow Room Puzzle
+ useLog = new ObjectStep(this, ObjectID.ENAKH_BRAZIER_1_MULTILOC, new WorldPoint(3114, 9306, 1), "Use a normal log on the south west brazier.", log);
+ useLog.addIcon(ItemID.LOGS);
useOakLog = new ObjectStep(this, ObjectID.ENAKH_BRAZIER_2_MULTILOC, new WorldPoint(3116, 9306, 1), "Use an oak log on the south brazier.", oakLog);
useOakLog.addIcon(ItemID.OAK_LOGS);
- useWillowLog = new ObjectStep(this, ObjectID.ENAKH_BRAZIER_1_MULTILOC, new WorldPoint(3114, 9306, 1), "Use a willow log on the south east brazier.", willowLog);
+ useWillowLog = new ObjectStep(this, ObjectID.ENAKH_BRAZIER_3_MULTILOC, new WorldPoint(3118, 9306, 1), "Use a willow log on the south east brazier.",
+ willowLog);
useWillowLog.addIcon(ItemID.WILLOW_LOGS);
- useLog = new ObjectStep(this, ObjectID.ENAKH_BRAZIER_3_MULTILOC, new WorldPoint(3118, 9306, 1), "Use a normal log on the south west brazier.", log);
- useLog.addIcon(ItemID.LOGS);
- useCoal = new ObjectStep(this, ObjectID.ENAKH_BRAZIER_6_MULTILOC, new WorldPoint(3118, 9309, 1), "Use coal on the north east brazier.", coal);
- useCoal.addIcon(ItemID.COAL);
+ useMapleLog = new ObjectStep(this, ObjectID.ENAKH_BRAZIER_4_MULTILOC, new WorldPoint(3114, 9309, 1), "Use a maple log on the north west brazier.",
+ mapleLog);
+ useMapleLog.addIcon(ItemID.MAPLE_LOGS);
useCandle = new ObjectStep(this, ObjectID.ENAKH_BRAZIER_5_MULTILOC, new WorldPoint(3116, 9309, 1), "Use a candle on the north brazier.", candle);
useCandle.addIcon(ItemID.UNLIT_CANDLE);
+ useCoal = new ObjectStep(this, ObjectID.ENAKH_BRAZIER_6_MULTILOC, new WorldPoint(3118, 9309, 1), "Use coal on the north east brazier.", coal);
+ useCoal.addIcon(ItemID.COAL);
passBarrier = new ObjectStep(this, ObjectID.ENAKH_MAGIC_WALL, new WorldPoint(3104, 9319, 1), "Pass through the magic barrier and go up the ladder.");
goUpFromPuzzleRoom = new ObjectStep(this, ObjectID.ENAKH_TEMPLE_LADDERUP, new WorldPoint(3104, 9332, 1), "Go up the ladder.");
passBarrier.addSubSteps(goUpFromPuzzleRoom);
- castCrumbleUndead = new NpcStep(this, NpcID.ENAKH_BONEGUARD, new WorldPoint(3104, 9307, 2), "Cast crumble undead on the Boneguard.", earth2, airRuneOrStaff, chaos, onNormals);
+ castCrumbleUndead = new NpcStep(this, NpcID.ENAKH_BONEGUARD, new WorldPoint(3104, 9307, 2), "Cast crumble undead on the Boneguard.", earth2,
+ airRuneOrStaff, chaos, onNormals);
- goDownToFinalRoom = new ObjectStep(this, ObjectID.ENAKH_TEMPLE_PILLAR_LADDER_TOP, new WorldPoint(3105, 9300, 2), "Climb down the stone ladder past the Boneguard.");
+ goDownToFinalRoom = new ObjectStep(this, ObjectID.ENAKH_TEMPLE_PILLAR_LADDER_TOP, new WorldPoint(3105, 9300, 2), "Climb down the stone ladder past " +
+ "the Boneguard.");
protectThenTalk = new NpcStep(this, NpcID.ENAKH_AKTHANAKOS_BONEGUARD, new WorldPoint(3105, 9297, 1),
"Put on Protect from Melee, then talk to the Boneguard.", protectFromMelee);
- repairWall = new ObjectStep(this, ObjectID.ENAKH_LARGEWALL_L_MULTILOC, new WorldPoint(3107, 9291, 1), "Take sandstone from the nearby rubble, and use it to repair the south wall. For each piece added, use a chisel on the wall.", sandstone5);
+ repairWall = new ObjectStep(this, ObjectID.ENAKH_LARGEWALL_L_MULTILOC, new WorldPoint(3107, 9291, 1), "Take sandstone from the nearby rubble, and use" +
+ " it to repair the south wall. For each piece added, use a chisel on the wall.", sandstone5);
repairWall.addDialogSteps("Of course, I'll help you out.", "Okay, I'll start building.");
repairWall.addIcon(ItemID.ENAKH_SANDSTONE_MEDIUM);
- useChiselOnWall = new ObjectStep(this, ObjectID.ENAKH_LARGEWALL_L_MULTILOC, new WorldPoint(3107, 9291, 1), "Use a chisel on the wall.", chiselHighlighted);
+ useChiselOnWall = new ObjectStep(this, ObjectID.ENAKH_LARGEWALL_L_MULTILOC, new WorldPoint(3107, 9291, 1), "Use a chisel on the wall.",
+ chiselHighlighted);
useChiselOnWall.addDialogSteps("Of course, I'll help you out.", "Okay, I'll start building.");
useChiselOnWall.addIcon(ItemID.CHISEL);
repairWall.addSubSteps(useChiselOnWall);
talkToAkthankos = new NpcStep(this, NpcID.ENAKH_AKTHANAKOS_BONEGUARD, new WorldPoint(3105, 9297, 1), "Talk to the Boneguard to finish the quest.");
- ((NpcStep) talkToAkthankos).addAlternateNpcs(NpcID.ENAKH_AKTHANAKOS_FREED);
+ talkToAkthankos.addAlternateNpcs(NpcID.ENAKH_AKTHANAKOS_FREED);
+
+ }
+
+ @Override
+ public Map loadSteps()
+ {
+ initializeRequirements();
+ setupSteps();
+
+ var steps = new HashMap();
+
+ steps.put(0, talkToLazim);
+
+ ConditionalStep makeAndPlaceBase = new ConditionalStep(this, bringLazim32Sandstone);
+ makeAndPlaceBase.addStep(new Conditions(head, granite), giveLazimHead);
+ makeAndPlaceBase.addStep(new Conditions(granite2, canChooseHead), craftHead);
+ makeAndPlaceBase.addStep(canChooseHead, getGranite);
+ makeAndPlaceBase.addStep(chiseledStatue, talkToLazimToChooseHead);
+ makeAndPlaceBase.addStep(hasPlacedBody, chiselStatue);
+ makeAndPlaceBase.addStep(body, placeBody);
+ makeAndPlaceBase.addStep(sandstone20, useChiselOn20Sandstone);
+ makeAndPlaceBase.addStep(hasTalkedToLazimAfterBase, bringLazim20Sandstone);
+ makeAndPlaceBase.addStep(hasPlacedBase, talkToLazimAboutBody);
+ makeAndPlaceBase.addStep(base, placeBase);
+ makeAndPlaceBase.addStep(sandstone32, useChiselOn32Sandstone);
+
+ steps.put(10, makeAndPlaceBase);
+ ConditionalStep exploreBottomLayer = new ConditionalStep(this, enterTemple);
+ exploreBottomLayer.addStep(new Conditions(camelHead, inPuzzleFloor), useStoneHeadOnPedestal);
+ exploreBottomLayer.addStep(camelMould, useChiselOnGranite);
+ exploreBottomLayer.addStep(inPuzzleFloor, useSoftClayOnPedestal);
+ exploreBottomLayer.addStep(new Conditions(gottenLimbs, inTempleGroundFloor, openedDoor1, openedDoor2, openedDoor3, openedDoor4), goUpToPuzzles);
+ exploreBottomLayer.addStep(new Conditions(gottenLimbs, inTempleGroundFloor, openedDoor1, openedDoor2, openedDoor3, rSigil), enterDoor4);
+ exploreBottomLayer.addStep(new Conditions(gottenLimbs, inTempleGroundFloor, openedDoor1, openedDoor2, openedDoor3), takeR);
+ exploreBottomLayer.addStep(new Conditions(gottenLimbs, inTempleGroundFloor, openedDoor1, openedDoor2, kSigil), enterDoor3);
+ exploreBottomLayer.addStep(new Conditions(gottenLimbs, inTempleGroundFloor, openedDoor1, openedDoor2), takeK);
+ // It's possible to skip the rest of this, but it skips some of the quest story and leaves doors locked after you finish, so this encourages players
+ // to explore
+ exploreBottomLayer.addStep(new Conditions(gottenLimbs, inTempleGroundFloor, openedDoor1, zSigil), enterDoor2);
+ exploreBottomLayer.addStep(new Conditions(gottenLimbs, inTempleGroundFloor, openedDoor1), takeZ);
+ exploreBottomLayer.addStep(new Conditions(gottenLimbs, inTempleGroundFloor, mSigil), enterDoor1);
+ exploreBottomLayer.addStep(new Conditions(gottenLimbs, inTempleGroundFloor), takeM);
+ exploreBottomLayer.addStep(new Conditions(startedTemple, inTempleGroundFloor), cutOffLimb);
+ exploreBottomLayer.addStep(inTempleGroundFloor, talkToLazimInTemple);
+ exploreBottomLayer.addStep(inTempleEntranceRoom, enterTempleDownLadder);
+
+ steps.put(20, exploreBottomLayer);
+
+ ConditionalStep puzzles = new ConditionalStep(this, enterTemple);
+ puzzles.addStep(new Conditions(fedBread, inPuzzleFloor, meltedFountain, cleanedFurnace, litLog, litOak, litWillow, litMaple, litCandle), useCoal);
+ puzzles.addStep(new Conditions(fedBread, inPuzzleFloor, meltedFountain, cleanedFurnace, litLog, litOak, litWillow, litMaple), useCandle);
+ puzzles.addStep(new Conditions(fedBread, inPuzzleFloor, meltedFountain, cleanedFurnace, litLog, litOak, litWillow), useMapleLog);
+ puzzles.addStep(new Conditions(fedBread, inPuzzleFloor, meltedFountain, cleanedFurnace, litLog, litOak), useWillowLog);
+ puzzles.addStep(new Conditions(fedBread, inPuzzleFloor, meltedFountain, cleanedFurnace, litLog), useOakLog);
+ puzzles.addStep(new Conditions(fedBread, inPuzzleFloor, meltedFountain, cleanedFurnace), useLog);
+ puzzles.addStep(new Conditions(fedBread, inPuzzleFloor, meltedFountain), castAirSpell);
+ puzzles.addStep(new Conditions(fedBread, inPuzzleFloor), castFireSpell);
+ puzzles.addStep(inPuzzleFloor, useBread);
+ puzzles.addStep(inTempleGroundFloor, goUpToPuzzles);
+ puzzles.addStep(inTempleEntranceRoom, enterTempleDownLadder);
+
+ steps.put(30, puzzles);
+
+ ConditionalStep topFloorPuzzle = new ConditionalStep(this, enterTemple);
+ topFloorPuzzle.addStep(inTopRoom, castCrumbleUndead);
+ topFloorPuzzle.addStep(inNorthPuzzleRoom, goUpFromPuzzleRoom);
+ topFloorPuzzle.addStep(inPuzzleFloor, passBarrier);
+ topFloorPuzzle.addStep(inTempleGroundFloor, goUpToPuzzles);
+ topFloorPuzzle.addStep(inTempleEntranceRoom, enterTempleDownLadder);
+
+ steps.put(40, topFloorPuzzle);
+
+ ConditionalStep protectMeleePuzzle = new ConditionalStep(this, enterTemple);
+ protectMeleePuzzle.addStep(inLastRoom, protectThenTalk);
+ protectMeleePuzzle.addStep(inTopRoom, goDownToFinalRoom);
+ protectMeleePuzzle.addStep(inNorthPuzzleRoom, goUpFromPuzzleRoom);
+ protectMeleePuzzle.addStep(inPuzzleFloor, passBarrier);
+ protectMeleePuzzle.addStep(inTempleGroundFloor, goUpToPuzzles);
+ protectMeleePuzzle.addStep(inTempleEntranceRoom, enterTempleDownLadder);
+
+ steps.put(50, protectMeleePuzzle);
+
+ ConditionalStep repairWallForAkthankos = new ConditionalStep(this, enterTemple);
+ repairWallForAkthankos.addStep(new Conditions(inLastRoom, wallNeedsChisel), useChiselOnWall);
+ repairWallForAkthankos.addStep(new Conditions(inLastRoom, finishedWall), talkToAkthankos);
+ repairWallForAkthankos.addStep(inLastRoom, repairWall);
+ repairWallForAkthankos.addStep(inTopRoom, goDownToFinalRoom);
+ repairWallForAkthankos.addStep(inNorthPuzzleRoom, goUpFromPuzzleRoom);
+ repairWallForAkthankos.addStep(inPuzzleFloor, passBarrier);
+ repairWallForAkthankos.addStep(inTempleGroundFloor, goUpToPuzzles);
+ repairWallForAkthankos.addStep(inTempleEntranceRoom, enterTempleDownLadder);
+
+ steps.put(60, repairWallForAkthankos);
+
+ return steps;
}
@Override
public List getItemRequirements()
{
- ArrayList reqs = new ArrayList<>();
- reqs.add(pickaxe);
- reqs.add(chiselHighlighted);
- reqs.add(softClay);
- reqs.add(breadOrCake);
- reqs.add(tinderbox);
- reqs.add(log);
- reqs.add(oakLog);
- reqs.add(willowLog);
- reqs.add(mapleLog);
- reqs.add(candle);
- reqs.add(coal);
- reqs.add(fireSpellRunes);
- reqs.add(airSpellRunes);
- reqs.add(crumbleUndeadRunes);
- int miningLevel = client.getRealSkillLevel(Skill.MINING);
- if (miningLevel < 45)
- {
- reqs.add(granite2);
- }
- if (miningLevel < 35)
- {
- reqs.add(sandstone52);
- }
- return reqs;
+ return List.of(
+ pickaxe,
+ chiselHighlighted,
+ softClay,
+ breadOrCake,
+ tinderbox,
+ log,
+ oakLog,
+ willowLog,
+ mapleLog,
+ candle,
+ coal,
+ fireSpellRunes,
+ airSpellRunes,
+ crumbleUndeadRunes,
+ granite2.hideConditioned(new SkillRequirement(Skill.MINING, 45)),
+ sandstone52.hideConditioned(new SkillRequirement(Skill.MINING, 35))
+ );
}
@Override
public List getGeneralRecommended()
{
- ArrayList req = new ArrayList<>();
- req.add(onNormals);
- return req;
+ return List.of(onNormals);
}
@Override
public List getGeneralRequirements()
{
- ArrayList req = new ArrayList<>();
- req.add(new SkillRequirement(Skill.CRAFTING, 50));
- req.add(new SkillRequirement(Skill.FIREMAKING, 45, true));
- req.add(new SkillRequirement(Skill.PRAYER, 43));
- req.add(new SkillRequirement(Skill.MAGIC, 39));
- return req;
+ return List.of(
+ new SkillRequirement(Skill.CRAFTING, 50),
+ new SkillRequirement(Skill.FIREMAKING, 45, true),
+ new SkillRequirement(Skill.PRAYER, 43),
+ new SkillRequirement(Skill.MAGIC, 39)
+ );
}
@Override
@@ -498,31 +634,50 @@ public QuestPointReward getQuestPointReward()
@Override
public List getExperienceRewards()
{
- return Arrays.asList(
- new ExperienceReward(Skill.CRAFTING, 7000),
- new ExperienceReward(Skill.MINING, 7000),
- new ExperienceReward(Skill.FIREMAKING, 7000),
- new ExperienceReward(Skill.MAGIC, 7000));
+ return List.of(
+ new ExperienceReward(Skill.CRAFTING, 7000),
+ new ExperienceReward(Skill.MINING, 7000),
+ new ExperienceReward(Skill.FIREMAKING, 7000),
+ new ExperienceReward(Skill.MAGIC, 7000)
+ );
}
@Override
public List getItemRewards()
{
- return Collections.singletonList(new ItemReward("Akthanakos's Camulet", ItemID.CAMULET, 1));
+ return List.of(
+ new ItemReward("Akthanakos's Camulet", ItemID.CAMULET, 1)
+ );
}
@Override
public List getPanels()
{
- List allSteps = new ArrayList<>();
- allSteps.add(new PanelDetails("Starting off", Collections.singletonList(talkToLazim)));
- allSteps.add(new PanelDetails("Craft a statue", Arrays.asList(bringLazim32Sandstone, useChiselOn32Sandstone, placeBase, talkToLazimAboutBody,
- bringLazim20Sandstone, useChiselOn20Sandstone, placeBody, chiselStatue, talkToLazimToChooseHead, getGranite, craftHead, giveLazimHead),
- pickaxe, chiselHighlighted, softClay, breadOrCake, tinderbox, log, oakLog, willowLog, mapleLog, candle, coal, fireSpellRunes, airSpellRunes, earth2, air2, chaos));
- allSteps.add(new PanelDetails("Explore the ground floor", Arrays.asList(talkToLazimInTemple, cutOffLimb, takeM, enterDoor1, enterDoor2, enterMDoor, goUpToPuzzles)));
- allSteps.add(new PanelDetails("Solve the puzzles", Arrays.asList(useSoftClayOnPedestal, useChiselOnGranite, useStoneHeadOnPedestal, useBread, castFireSpell, castAirSpell,
- useLog, useOakLog, useWillowLog, useMapleLog, useCandle, useCoal)));
- allSteps.add(new PanelDetails("Free Akthankos", Arrays.asList(passBarrier, goUpFromPuzzleRoom, castCrumbleUndead, goDownToFinalRoom, protectThenTalk, repairWall, talkToAkthankos)));
+ var allSteps = new ArrayList();
+
+ allSteps.add(new PanelDetails("Starting off", List.of(
+ talkToLazim
+ )));
+
+ allSteps.add(new PanelDetails("Craft a statue", List.of(
+ bringLazim32Sandstone, useChiselOn32Sandstone, placeBase, talkToLazimAboutBody, bringLazim20Sandstone,
+ useChiselOn20Sandstone, placeBody, chiselStatue, talkToLazimToChooseHead, getGranite, craftHead, giveLazimHead
+ ), List.of(pickaxe, chiselHighlighted, softClay, breadOrCake, tinderbox, log, oakLog, willowLog, mapleLog, candle, coal, fireSpellRunes,
+ airSpellRunes, earth2, air2, chaos
+ )));
+
+ allSteps.add(new PanelDetails("Explore the ground floor", List.of(
+ talkToLazimInTemple, cutOffLimb, takeM, enterDoor1, enterDoor2, enterMDoor, goUpToPuzzles
+ )));
+
+ allSteps.add(new PanelDetails("Solve the puzzles", List.of(
+ useSoftClayOnPedestal, useChiselOnGranite, useStoneHeadOnPedestal, useBread, castFireSpell, castAirSpell,
+ useLog, useOakLog, useWillowLog, useMapleLog, useCandle, useCoal
+ )));
+
+ allSteps.add(new PanelDetails("Free Akthankos", List.of(
+ passBarrier, goUpFromPuzzleRoom, castCrumbleUndead, goDownToFinalRoom, protectThenTalk, repairWall, talkToAkthankos
+ )));
return allSteps;
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/enlightenedjourney/BalloonFlightStep.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/enlightenedjourney/BalloonFlightStep.java
index f2cf4255912..a5186881d73 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/enlightenedjourney/BalloonFlightStep.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/enlightenedjourney/BalloonFlightStep.java
@@ -35,6 +35,7 @@
import net.runelite.api.events.GameTick;
import net.runelite.api.events.VarbitChanged;
import net.runelite.api.gameval.NpcID;
+import net.runelite.api.gameval.VarbitID;
import net.runelite.client.eventbus.Subscribe;
import java.util.Arrays;
@@ -92,9 +93,9 @@ protected void updateSteps()
return;
}
- int section = client.getVarbitValue(2884);
- int xPos = client.getVarbitValue(2882);
- int yPos = client.getVarbitValue(2883);
+ int section = client.getVarbitValue(VarbitID.ZEP_IF_CURRENT_MAP);
+ int xPos = client.getVarbitValue(VarbitID.ZEP_IF_SCREEN_DIST);
+ int yPos = client.getVarbitValue(VarbitID.ZEP_IF_BALLOON_HEIGHT);
if (sections.get(section) == null) return;
// If we've gone to next section before updating the pos, return
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/enlightenedjourney/EnlightenedJourney.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/enlightenedjourney/EnlightenedJourney.java
index fd0ac32ee90..823408f9057 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/enlightenedjourney/EnlightenedJourney.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/enlightenedjourney/EnlightenedJourney.java
@@ -47,6 +47,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import java.util.*;
@@ -153,7 +154,7 @@ public void setupConditions()
onEntrana = new ZoneRequirement(entrana);
hasSandbags = new Conditions(LogicType.OR,
- new VarbitRequirement(2875, 1),
+ new VarbitRequirement(VarbitID.ZEP_SANDBAGS, 1),
sandbag8);
flying = new WidgetTextRequirement(471, 1, "Balloon Controls");
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/enlightenedjourney/GiveAugusteItems.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/enlightenedjourney/GiveAugusteItems.java
index f62af3cafd1..b73e49cb8ed 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/enlightenedjourney/GiveAugusteItems.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/enlightenedjourney/GiveAugusteItems.java
@@ -33,6 +33,7 @@
import net.runelite.api.events.GameTick;
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
+import net.runelite.api.gameval.VarbitID;
import net.runelite.client.eventbus.Subscribe;
public class GiveAugusteItems extends NpcStep
@@ -54,11 +55,11 @@ public GiveAugusteItems(QuestHelper questHelper)
super(questHelper, NpcID.ZEP_PICCARD, new WorldPoint(2809, 3354, 0),
"Give Auguste the sandbags, silk, dyes, and bowl.", sandbag8, silk10, redDye, yellowDye, bowl);
- givenRedDye = new VarbitRequirement(2873, 1);
- givenYellowDye = new VarbitRequirement(2874, 1); // 2879 = 1 as well, maybe both dyes done
- givenSandbags = new VarbitRequirement(2875, 1);
- givenSilk = new VarbitRequirement(2876, 1);
- givenBowl = new VarbitRequirement(2877, 1);
+ givenRedDye = new VarbitRequirement(VarbitID.ZEP_RDYE, 1);
+ givenYellowDye = new VarbitRequirement(VarbitID.ZEP_YDYE, 1); // 2879 = 1 as well, maybe both dyes done
+ givenSandbags = new VarbitRequirement(VarbitID.ZEP_SANDBAGS, 1);
+ givenSilk = new VarbitRequirement(VarbitID.ZEP_SILK, 1);
+ givenBowl = new VarbitRequirement(VarbitID.ZEP_LOGS, 1);
}
@Subscribe
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/enlightenedjourney/TaverleyBalloonFlight.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/enlightenedjourney/TaverleyBalloonFlight.java
index 3206b100304..a6b404b9432 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/enlightenedjourney/TaverleyBalloonFlight.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/enlightenedjourney/TaverleyBalloonFlight.java
@@ -29,6 +29,7 @@
import net.runelite.client.plugins.microbot.questhelper.steps.QuestStep;
import net.runelite.client.plugins.microbot.questhelper.steps.WidgetStep;
import net.runelite.api.events.VarbitChanged;
+import net.runelite.api.gameval.VarbitID;
import java.util.ArrayList;
import java.util.Arrays;
@@ -153,9 +154,9 @@ public void onVarbitChanged(VarbitChanged varbitChanged)
protected void updateSteps()
{
- int section = client.getVarbitValue(2884) - 1;
- int xPos = client.getVarbitValue(2882);
- int yPos = client.getVarbitValue(2883);
+ int section = client.getVarbitValue(VarbitID.ZEP_IF_CURRENT_MAP) - 1;
+ int xPos = client.getVarbitValue(VarbitID.ZEP_IF_SCREEN_DIST);
+ int yPos = client.getVarbitValue(VarbitID.ZEP_IF_BALLOON_HEIGHT);
// If we've gone to next section before updating the pos, return
if (sections.get(section).size() <= xPos + 1)
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/entertheabyss/EnterTheAbyss.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/entertheabyss/EnterTheAbyss.java
index 43054a7ac47..43057442c17 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/entertheabyss/EnterTheAbyss.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/entertheabyss/EnterTheAbyss.java
@@ -49,6 +49,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import java.util.*;
@@ -118,11 +119,11 @@ public void setupConditions()
{
inWizardBasement = new ZoneRequirement(wizardBasement);
- teleportedFromWizardsTower = new VarbitRequirement(2314, 1);
- teleportedFromVarrock = new VarbitRequirement(2315, 1);
- teleportedFromArdougne = new VarbitRequirement(2316, 1);
- teleportedFromDistentor = new VarbitRequirement(2317, 1);
- teleportedFromGnome = new VarbitRequirement(2318, 1);
+ teleportedFromWizardsTower = new VarbitRequirement(VarbitID.RCU_ESSENCESPOT_WIZARDSTOWER, 1);
+ teleportedFromVarrock = new VarbitRequirement(VarbitID.RCU_ESSENCESPOT_AUBURY, 1);
+ teleportedFromArdougne = new VarbitRequirement(VarbitID.RCU_ESSENCESPOT_CROMPERTY, 1);
+ teleportedFromDistentor = new VarbitRequirement(VarbitID.RCU_ESSENCESPOT_BRIMSTAIL, 1);
+ teleportedFromGnome = new VarbitRequirement(VarbitID.RCU_ESSENCESPOT_WIZARDSGUILD, 1);
}
public void setupSteps()
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/ernestthechicken/ErnestTheChicken.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/ernestthechicken/ErnestTheChicken.java
index ecc5eb571c8..abcaa16ffe1 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/ernestthechicken/ErnestTheChicken.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/ernestthechicken/ErnestTheChicken.java
@@ -43,6 +43,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import java.util.*;
@@ -158,18 +159,18 @@ public void setupConditions()
inGroundFloor = new ZoneRequirement(manorGround1, secretRoom, manorGround3);
inSecretRoom = new ZoneRequirement(secretRoom);
killedFish = new ChatMessageRequirement("... then die and float to the surface.");
- isLeverADown = new VarbitRequirement(1788, 1);
- isLeverBDown = new VarbitRequirement(1789, 1);
- isLeverCDown = new VarbitRequirement(1790, 1);
- isLeverDDown = new VarbitRequirement(1791, 1);
- isLeverEDown = new VarbitRequirement(1792, 1);
- isLeverFDown = new VarbitRequirement(1793, 1);
- isLeverAUp = new VarbitRequirement(1788, 0);
- isLeverBUp = new VarbitRequirement(1789, 0);
- isLeverCUp = new VarbitRequirement(1790, 0);
- isLeverDUp = new VarbitRequirement(1791, 0);
- isLeverEUp = new VarbitRequirement(1792, 0);
- isLeverFUp = new VarbitRequirement(1793, 0);
+ isLeverADown = new VarbitRequirement(VarbitID.ERNESTLEVER_A, 1);
+ isLeverBDown = new VarbitRequirement(VarbitID.ERNESTLEVER_B, 1);
+ isLeverCDown = new VarbitRequirement(VarbitID.ERNESTLEVER_C, 1);
+ isLeverDDown = new VarbitRequirement(VarbitID.ERNESTLEVER_D, 1);
+ isLeverEDown = new VarbitRequirement(VarbitID.ERNESTLEVER_E, 1);
+ isLeverFDown = new VarbitRequirement(VarbitID.ERNESTLEVER_F, 1);
+ isLeverAUp = new VarbitRequirement(VarbitID.ERNESTLEVER_A, 0);
+ isLeverBUp = new VarbitRequirement(VarbitID.ERNESTLEVER_B, 0);
+ isLeverCUp = new VarbitRequirement(VarbitID.ERNESTLEVER_C, 0);
+ isLeverDUp = new VarbitRequirement(VarbitID.ERNESTLEVER_D, 0);
+ isLeverEUp = new VarbitRequirement(VarbitID.ERNESTLEVER_E, 0);
+ isLeverFUp = new VarbitRequirement(VarbitID.ERNESTLEVER_F, 0);
inBasement = new ZoneRequirement(basement);
inRoomCD = new ZoneRequirement(roomCD);
inEmptyRoom = new ZoneRequirement(emptyRoom);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/fairytaleii/FairytaleII.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/fairytaleii/FairytaleII.java
index ae99053d107..98c58c2ec3d 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/fairytaleii/FairytaleII.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/fairytaleii/FairytaleII.java
@@ -53,6 +53,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import java.util.*;
@@ -214,9 +215,9 @@ public void setupConditions()
// 2328 0->1
// 2329 0->2
- hasReadSign = new VarbitRequirement(2338, 4);
+ hasReadSign = new VarbitRequirement(VarbitID.FAIRY2_SIGN_READ, 4);
- hasInvestigatedCertificate = new VarbitRequirement(2336, 1);
+ hasInvestigatedCertificate = new VarbitRequirement(VarbitID.FAIRY2_CERTIFICUTE_EXAMINED, 1);
talkedToGodfather = new VarbitRequirement(QuestVarbits.QUEST_FAIRYTALE_II_CURE_A_QUEEN.getId(), 40, Operation.GREATER_EQUAL);
addedFlowerCorrectly = new VarbitRequirement(QuestVarbits.QUEST_FAIRYTALE_II_CURE_A_QUEEN.getId(), 72, Operation.GREATER_EQUAL);
@@ -225,7 +226,7 @@ public void setupConditions()
// 2334?
starflowerNearby = new NpcCondition(NpcID.FAIRY2_STARFLOWER_FULLGROWN);
- pickedStarFlower = new VarbitRequirement(2330, 1);
+ pickedStarFlower = new VarbitRequirement(VarbitID.FAIRYRING_COSMIC_PLANE, 1);
clawNearby = new ItemOnTileRequirement(gorakClaw);
// 2327 1->2 when searched for certificate
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/fightarena/FightArena.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/fightarena/FightArena.java
index 407447983d4..4376f9b050a 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/fightarena/FightArena.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/fightarena/FightArena.java
@@ -29,10 +29,10 @@
import net.runelite.client.plugins.microbot.questhelper.panel.PanelDetails;
import net.runelite.client.plugins.microbot.questhelper.questhelpers.BasicQuestHelper;
import net.runelite.client.plugins.microbot.questhelper.requirements.Requirement;
-import net.runelite.client.plugins.microbot.questhelper.requirements.conditional.Conditions;
import net.runelite.client.plugins.microbot.questhelper.requirements.conditional.NpcCondition;
import net.runelite.client.plugins.microbot.questhelper.requirements.item.ItemRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.item.ItemRequirements;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.and;
import net.runelite.client.plugins.microbot.questhelper.requirements.zone.Zone;
import net.runelite.client.plugins.microbot.questhelper.requirements.zone.ZoneRequirement;
import net.runelite.client.plugins.microbot.questhelper.rewards.ExperienceReward;
@@ -42,178 +42,224 @@
import net.runelite.client.plugins.microbot.questhelper.steps.NpcStep;
import net.runelite.client.plugins.microbot.questhelper.steps.ObjectStep;
import net.runelite.client.plugins.microbot.questhelper.steps.QuestStep;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import net.runelite.api.Skill;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
-import java.util.*;
-
public class FightArena extends BasicQuestHelper
{
- //Items Required
- ItemRequirement coins, khazardHelmet, khazardPlatebody, khazardHelmetEquipped, khazardPlatebodyEquipped, khaliBrew, cellKeys;
+ // Required items
+ ItemRequirement coins;
- //Items Recommended
+ // Recommended items
ItemRequirement combatGear;
- Requirement hasKhazardArmour, inArena, inArenaWithOgre, inArenaWithScorpion, inArenaWithBouncer, inCell;
-
- QuestStep startQuest, searchChest, talkToGuard, buyKhaliBrew, giveKhaliBrew, getCellKeys, openCell, talkToSammy, killOgre,
- talkToKhazard, talkToHengrad, talkToSammyForScorpion, killScorpion, talkToSammyForBouncer, killBouncer, leaveArena, endQuest;
-
- //Zones
- Zone arena1, cell;
-
- @Override
- public Map loadSteps()
- {
- initializeRequirements();
- setupConditions();
- setupSteps();
-
- Map steps = new HashMap<>();
- steps.put(0, startQuest);
- steps.put(1, searchChest);
-
- ConditionalStep talkToGuardSteps = new ConditionalStep(this, searchChest);
- talkToGuardSteps.addStep(hasKhazardArmour, talkToGuard);
- steps.put(2, talkToGuardSteps);
-
- ConditionalStep giveKhaliBrewSteps = new ConditionalStep(this, searchChest);
- giveKhaliBrewSteps.addStep(new Conditions(hasKhazardArmour, khaliBrew), giveKhaliBrew);
- giveKhaliBrewSteps.addStep(new Conditions(hasKhazardArmour), buyKhaliBrew);
- steps.put(3, giveKhaliBrewSteps);
+ // Zones
+ Zone arena1;
+ Zone cell;
- ConditionalStep openCellSteps = new ConditionalStep(this, searchChest);
- // You don't need Khazard armour to open the cell, but unless zones are added for the prison, keep the armour
- // requirement in case you leave the prison and lose the armour
- openCellSteps.addStep(new Conditions(hasKhazardArmour, cellKeys), openCell);
- openCellSteps.addStep(new Conditions(hasKhazardArmour), getCellKeys);
- steps.put(4, openCellSteps);
- steps.put(5, openCellSteps);
+ // Miscellaneous requirements
+ ItemRequirement khazardHelmet;
+ ItemRequirement khazardPlatebody;
+ ItemRequirement khazardHelmetEquipped;
+ ItemRequirement khazardPlatebodyEquipped;
+ ItemRequirement khaliBrew;
+ ItemRequirement cellKeys;
- ConditionalStep killOgreSteps = new ConditionalStep(this, talkToSammy);
- killOgreSteps.addStep(new Conditions(inArenaWithOgre), killOgre);
- steps.put(6, killOgreSteps);
+ Requirement hasKhazardArmour;
+ Requirement inArena;
+ Requirement inArenaWithOgre;
+ Requirement inArenaWithScorpion;
+ Requirement inArenaWithBouncer;
+ Requirement inCell;
- steps.put(7, talkToKhazard); // Step not actually seen, 6->8 when kill Ogre
- steps.put(8, talkToKhazard);
+ // Steps
+ NpcStep startQuest;
+ ObjectStep searchChest;
+ NpcStep talkToGuard;
+ NpcStep buyKhaliBrew;
+ NpcStep giveKhaliBrew;
+ NpcStep getCellKeys;
+ ObjectStep openCell;
+ NpcStep talkToSammy;
+ NpcStep killOgre;
+ NpcStep talkToKhazard;
+ NpcStep talkToHengrad;
+ NpcStep talkToSammyForScorpion;
+ NpcStep killScorpion;
+ NpcStep talkToSammyForBouncer;
+ NpcStep killBouncer;
+ ObjectStep leaveArena;
+ NpcStep endQuest;
- ConditionalStep inPrisonAndKillScorpionSteps = new ConditionalStep(this, talkToSammyForScorpion);
- inPrisonAndKillScorpionSteps.addStep(inCell, talkToHengrad);
- inPrisonAndKillScorpionSteps.addStep(new Conditions(inArenaWithScorpion), killScorpion);
- steps.put(9, inPrisonAndKillScorpionSteps);
- ConditionalStep killBouncerSteps = new ConditionalStep(this, talkToSammyForBouncer);
- killBouncerSteps.addStep(new Conditions(inArenaWithBouncer), killBouncer);
- steps.put(10, killBouncerSteps);
-
- ConditionalStep endQuestSteps = new ConditionalStep(this, endQuest);
- endQuestSteps.addStep(inArena, leaveArena);
- steps.put(11, endQuestSteps);
- steps.put(12, endQuestSteps);
- steps.put(13, endQuestSteps);
- steps.put(14, endQuestSteps);
-
- return steps;
+ @Override
+ protected void setupZones()
+ {
+ arena1 = new Zone(new WorldPoint(2583, 3152, 0), new WorldPoint(2606, 3170, 0));
+ cell = new Zone(new WorldPoint(2597, 3142, 0), new WorldPoint(2601, 3144, 0));
}
@Override
protected void setupRequirements()
{
+ inCell = new ZoneRequirement(cell);
+ inArena = new ZoneRequirement(arena1);
+ inArenaWithOgre = and(inArena, new NpcCondition(NpcID.ARENA_OGRE, arena1));
+ inArenaWithScorpion = and(inArena, new NpcCondition(NpcID.ARENA_SCORPION, arena1));
+ inArenaWithBouncer = and(inArena, new NpcCondition(NpcID.ARENA_BOUNCER, arena1));
+
coins = new ItemRequirement("Coins", ItemCollections.COINS, 5);
+
+ combatGear = new ItemRequirement("Combat equipment and food (magic/ranged if you want to safe spot)", -1, -1).isNotConsumed();
+ combatGear.setDisplayItemId(BankSlotIcons.getCombatGear());
+
khazardHelmet = new ItemRequirement("Khazard helmet", ItemID.KHAZARD_HELMET);
khazardPlatebody = new ItemRequirement("Khazard armour", ItemID.KHAZARD_PLATEMAIL);
- khazardHelmetEquipped = new ItemRequirement("Khazard helmet", ItemID.KHAZARD_HELMET, 1, true);
- khazardPlatebodyEquipped = new ItemRequirement("Khazard armour", ItemID.KHAZARD_PLATEMAIL, 1, true);
+ khazardHelmetEquipped = khazardHelmet.equipped();
+ khazardPlatebodyEquipped = khazardPlatebody.equipped();
khaliBrew = new ItemRequirement("Khali brew", ItemID.KHALI_BREW);
cellKeys = new ItemRequirement("Khazard cell keys", ItemID.KHAZARD_CELLKEYS);
cellKeys.setHighlightInInventory(true);
- combatGear = new ItemRequirement("Combat equipment and food (magic/ranged if you want to safe spot)", -1, -1).isNotConsumed();
- combatGear.setDisplayItemId(BankSlotIcons.getCombatGear());
- }
-
- @Override
- protected void setupZones()
- {
- arena1 = new Zone(new WorldPoint(2583, 3152, 0), new WorldPoint(2606, 3170, 0));
- cell = new Zone(new WorldPoint(2597, 3142, 0), new WorldPoint(2601, 3144, 0));
- }
- public void setupConditions()
- {
hasKhazardArmour = new ItemRequirements(khazardHelmet, khazardPlatebody);
- inCell = new ZoneRequirement(cell);
- inArena = new ZoneRequirement(arena1);
- inArenaWithOgre = new Conditions(inArena, new NpcCondition(NpcID.ARENA_OGRE, arena1));
- inArenaWithScorpion = new Conditions(inArena, new NpcCondition(NpcID.ARENA_SCORPION, arena1));
- inArenaWithBouncer = new Conditions(inArena, new NpcCondition(NpcID.ARENA_BOUNCER, arena1));
}
public void setupSteps()
{
- startQuest = new NpcStep(this, NpcID.LADY_SERVIL_VIS, new WorldPoint(2565, 3199, 0),
- "Talk to Lady Servil, west-southwest of the Monastery south of Ardougne.");
- startQuest.addDialogStep(2, "Can I help you?");
+ startQuest = new NpcStep(this, NpcID.LADY_SERVIL_VIS, new WorldPoint(2565, 3199, 0), "Talk to Lady Servil, west-southwest of the Monastery south of Ardougne.");
+ startQuest.addDialogStep("Yes.");
+
searchChest = new ObjectStep(this, ObjectID.ARENA_GUARD_CHEST_SHUT, new WorldPoint(2613, 3189, 0), "Search the chest to the east for some Khazard armour.");
- ((ObjectStep) searchChest).addAlternateObjects(ObjectID.ARENA_GUARD_CHEST_OPEN);
- talkToGuard = new NpcStep(this, NpcID.ARENA_GUARD2, new WorldPoint(2615, 3143, 0),
- "Equip Khazard armour, talk to the Khazard Guard in the southeast of the prison.", khazardHelmetEquipped, khazardPlatebodyEquipped);
- buyKhaliBrew = new NpcStep(this, NpcID.KHAZARD_BARMAN, new WorldPoint(2567, 3140, 0),
- "Buy Khali brew for 5 coins from the nearby bar to the west.", coins);
- buyKhaliBrew.addDialogStep(2, "I'd like a Khali brew please.");
- giveKhaliBrew = new NpcStep(this, NpcID.ARENA_GUARD2, new WorldPoint(2615, 3143, 0),
- "Take the brew back to the Khazard Guard.", khazardHelmetEquipped, khazardPlatebodyEquipped, khaliBrew);
+ searchChest.addAlternateObjects(ObjectID.ARENA_GUARD_CHEST_OPEN);
+
+ talkToGuard = new NpcStep(this, NpcID.ARENA_GUARD2, new WorldPoint(2615, 3143, 0), "Equip Khazard armour, talk to the Khazard Guard in the southeast of the prison.", khazardHelmetEquipped, khazardPlatebodyEquipped);
+
+ buyKhaliBrew = new NpcStep(this, NpcID.KHAZARD_BARMAN, new WorldPoint(2567, 3140, 0), "Buy Khali brew from the nearby bar to the west for 5 coins.", coins);
+ buyKhaliBrew.addDialogStep("I'd like a Khali Brew please.");
+
+ giveKhaliBrew = new NpcStep(this, NpcID.ARENA_GUARD2, new WorldPoint(2615, 3143, 0), "Take the brew back to the Khazard Guard.", khazardHelmetEquipped, khazardPlatebodyEquipped, khaliBrew);
+
getCellKeys = new NpcStep(this, NpcID.ARENA_GUARD2, new WorldPoint(2615, 3143, 0),
"Get another set of keys from the Khazard Guard", khazardHelmetEquipped, khazardPlatebodyEquipped);
openCell = new ObjectStep(this, ObjectID.ARENA_JEREMYDOOR, new WorldPoint(2617, 3167, 0),
"Get ready to fight the monsters (all safespottable), starting with Khazard Ogre (level 63). Use the keys on Sammy's cell door to free him.", combatGear, cellKeys);
openCell.addIcon(ItemID.KHAZARD_CELLKEYS);
talkToSammy = new NpcStep(this, NpcID.SAMMY_SERVIL_VIS_NOOP, new WorldPoint(2602, 3153, 0), "Talk to Sammy, then fight the ogre.");
- killOgre = new NpcStep(this, NpcID.ARENA_OGRE, new WorldPoint(2601, 3163, 0),
- "Kill the Ogre. You can lure it behind a skeleton to safespot it.", combatGear);
+
+ killOgre = new NpcStep(this, NpcID.ARENA_OGRE, new WorldPoint(2601, 3163, 0), "Kill the Ogre. You can lure it behind a skeleton to safespot it.", combatGear);
killOgre.addSubSteps(talkToSammy);
+ killOgre.addSafeSpots(new WorldPoint(2598, 3162, 0));
+
talkToKhazard = new NpcStep(this, NpcID.SHADOW_MAJ_KHAZARD, new WorldPoint(2605, 3153, 0), "Talk to General Khazard.");
talkToHengrad = new NpcStep(this, NpcID.HENGRAD, new WorldPoint(2599, 3143, 0),
"Talk to Hengrad.");
talkToHengrad.addSubSteps(talkToKhazard);
+
talkToSammyForScorpion = new NpcStep(this, NpcID.SAMMY_SERVIL_VIS_NOOP, new WorldPoint(2602, 3153, 0), "Talk to Sammy, then fight the scorpion.");
+
killScorpion = new NpcStep(this, NpcID.ARENA_SCORPION, new WorldPoint(2601, 3163, 0),
"Kill the Scorpion. You can lure it behind a skeleton to safespot it.", combatGear);
+ killScorpion.addSafeSpots(new WorldPoint(2598, 3162, 0));
killScorpion.addSubSteps(talkToSammyForScorpion);
+
talkToSammyForBouncer = new NpcStep(this, NpcID.SAMMY_SERVIL_VIS_NOOP, new WorldPoint(2602, 3153, 0), "Talk to Sammy, then fight Bouncer.");
- killBouncer = new NpcStep(this, NpcID.ARENA_BOUNCER, new WorldPoint(2601, 3163, 0),
- "Kill Bouncer. You can lure it behind a skeleton to safespot it. Warning: After Bouncer is killed, you will be unable to re-enter the arena.", combatGear);
+
+ killBouncer = new NpcStep(this, NpcID.ARENA_BOUNCER, new WorldPoint(2601, 3163, 0), "Kill Bouncer. You can lure it behind a skeleton to safespot it. Warning: After Bouncer is killed, you will be unable to re-enter the arena.", combatGear);
+ killBouncer.addSafeSpots(new WorldPoint(2598, 3162, 0));
killBouncer.addSubSteps(talkToSammyForBouncer);
- leaveArena = new ObjectStep(this, ObjectID.FIGHTARENA_DOOR2, new WorldPoint(2606, 3152, 0),
- "Exit the arena (can ignore General Khazard). Warning: You will be unable to re-enter the arena.");
+
+ leaveArena = new ObjectStep(this, ObjectID.FIGHTARENA_DOOR2, new WorldPoint(2606, 3152, 0), "Exit the arena (can ignore General Khazard). Warning: You will be unable to re-enter the arena.");
+ leaveArena.addDialogStep("Yes.");
+
endQuest = new NpcStep(this, NpcID.LADY_SERVIL_VIS, new WorldPoint(2565, 3199, 0),
"Go back to Lady Servil to end the quest.");
}
+ @Override
+ public Map loadSteps()
+ {
+ initializeRequirements();
+ setupSteps();
+
+ Map steps = new HashMap<>();
+ steps.put(0, startQuest);
+ steps.put(1, searchChest);
+
+ var talkToGuardSteps = new ConditionalStep(this, searchChest);
+ talkToGuardSteps.addStep(hasKhazardArmour, talkToGuard);
+ steps.put(2, talkToGuardSteps);
+
+ var giveKhaliBrewSteps = new ConditionalStep(this, searchChest);
+ giveKhaliBrewSteps.addStep(and(hasKhazardArmour, khaliBrew), giveKhaliBrew);
+ giveKhaliBrewSteps.addStep(hasKhazardArmour, buyKhaliBrew);
+ steps.put(3, giveKhaliBrewSteps);
+
+ var openCellSteps = new ConditionalStep(this, searchChest);
+ // You don't need Khazard armour to open the cell, but unless zones are added for the prison, keep the armour
+ // requirement in case you leave the prison and lose the armour
+ openCellSteps.addStep(and(hasKhazardArmour, cellKeys), openCell);
+ openCellSteps.addStep(hasKhazardArmour, getCellKeys);
+ steps.put(4, openCellSteps);
+ steps.put(5, openCellSteps);
+
+ var killOgreSteps = new ConditionalStep(this, talkToSammy);
+ killOgreSteps.addStep(inArenaWithOgre, killOgre);
+ steps.put(6, killOgreSteps);
+
+ steps.put(7, talkToKhazard); // Step not actually seen, 6->8 when kill Ogre
+ steps.put(8, talkToKhazard);
+
+ var inPrisonAndKillScorpionSteps = new ConditionalStep(this, talkToSammyForScorpion);
+ inPrisonAndKillScorpionSteps.addStep(inCell, talkToHengrad);
+ inPrisonAndKillScorpionSteps.addStep(inArenaWithScorpion, killScorpion);
+ steps.put(9, inPrisonAndKillScorpionSteps);
+
+ var killBouncerSteps = new ConditionalStep(this, talkToSammyForBouncer);
+ killBouncerSteps.addStep(inArenaWithBouncer, killBouncer);
+ steps.put(10, killBouncerSteps);
+
+ var endQuestSteps = new ConditionalStep(this, endQuest);
+ endQuestSteps.addStep(inArena, leaveArena);
+ steps.put(11, endQuestSteps);
+ steps.put(12, endQuestSteps);
+ steps.put(13, endQuestSteps);
+ steps.put(14, endQuestSteps);
+
+ return steps;
+ }
+
@Override
public List getItemRequirements()
{
- return Collections.singletonList(coins);
+ return List.of(
+ coins
+ );
}
@Override
public List getItemRecommended()
{
- return Collections.singletonList(combatGear);
+ return List.of(
+ combatGear
+ );
}
@Override
public List getCombatRequirements()
{
- ArrayList reqs = new ArrayList<>();
- reqs.add("Khazard Scorpion (level 44) (safespottable)");
- reqs.add("Khazard Ogre (level 63) (safespottable)");
- reqs.add("Bouncer (level 137) (safespottable)");
- reqs.add("General Khazard (level 142) (safespottable) (optional)");
- return reqs;
+ return List.of(
+ "Khazard Scorpion (level 44) (safespottable)",
+ "Khazard Ogre (level 63) (safespottable)",
+ "Bouncer (level 137) (safespottable)",
+ "General Khazard (level 142) (safespottable) (optional)"
+ );
}
@Override
@@ -225,26 +271,52 @@ public QuestPointReward getQuestPointReward()
@Override
public List getExperienceRewards()
{
- return Arrays.asList(
- new ExperienceReward(Skill.ATTACK, 12175),
- new ExperienceReward(Skill.THIEVING, 2175));
+ return List.of(
+ new ExperienceReward(Skill.ATTACK, 12175),
+ new ExperienceReward(Skill.THIEVING, 2175)
+ );
}
@Override
public List getItemRewards()
{
- return Arrays.asList(
- new ItemReward("Coins", ItemID.COINS, 1000),
- new ItemReward("Khazard Armor", ItemID.KHAZARD_PLATEMAIL, 1));
+ return List.of(
+ new ItemReward("Coins", ItemID.COINS, 1000),
+ new ItemReward("Khazard Armor", ItemID.KHAZARD_PLATEMAIL, 1)
+ );
}
@Override
public List getPanels()
{
- List allSteps = new ArrayList<>();
- allSteps.add(new PanelDetails("Start quest", Arrays.asList(startQuest, searchChest, talkToGuard, buyKhaliBrew, giveKhaliBrew), coins));
- allSteps.add(new PanelDetails("Fight!", Arrays.asList(getCellKeys, openCell, killOgre, talkToHengrad, killScorpion, killBouncer), combatGear));
- allSteps.add(new PanelDetails("Finish quest", Arrays.asList(leaveArena, endQuest)));
- return allSteps;
+ var sections = new ArrayList();
+
+ sections.add(new PanelDetails("Start quest", List.of(
+ startQuest,
+ searchChest,
+ talkToGuard,
+ buyKhaliBrew,
+ giveKhaliBrew
+ ), List.of(
+ coins
+ )));
+
+ sections.add(new PanelDetails("Fight!", List.of(
+ getCellKeys,
+ openCell,
+ killOgre,
+ talkToHengrad,
+ killScorpion,
+ killBouncer
+ ), List.of(
+ combatGear
+ )));
+
+ sections.add(new PanelDetails("Finish quest", List.of(
+ leaveArena,
+ endQuest
+ )));
+
+ return sections;
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/fishingcontest/FishingContest.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/fishingcontest/FishingContest.java
index 3e1d4c0bf5a..1b47c2b9814 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/fishingcontest/FishingContest.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/fishingcontest/FishingContest.java
@@ -37,7 +37,6 @@
import net.runelite.client.plugins.microbot.questhelper.requirements.item.ItemRequirements;
import net.runelite.client.plugins.microbot.questhelper.requirements.player.SkillRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.quest.QuestRequirement;
-import net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper;
import net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicType;
import net.runelite.client.plugins.microbot.questhelper.requirements.var.VarbitRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.zone.Zone;
@@ -55,6 +54,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import java.util.*;
@@ -213,9 +213,9 @@ public void setupConditions()
notInWoods = new Conditions(LogicType.NOR, inWoods);
// 2051 0->1 also set for garlic in pipe
- hasPutGarlicInPipe = new VarbitRequirement(2054, 1);
- needsGarlic = and(LogicHelper.nor(hasPutGarlicInPipe), new ItemRequirements(LogicType.NOR, "", garlic));
- hasEverything = new Conditions(LogicHelper.nor(needsGarlic), redVineWorm, fishingRod);
+ hasPutGarlicInPipe = new VarbitRequirement(VarbitID.FISHINGCOMPO_STRANGER, 1);
+ needsGarlic = and(nor(hasPutGarlicInPipe), new ItemRequirements(LogicType.NOR, "", garlic));
+ hasEverything = new Conditions(nor(needsGarlic), redVineWorm, fishingRod);
enteredContestArea = new Conditions(hasEverything, onContestGrounds);
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/forgettabletale/ForgettableTale.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/forgettabletale/ForgettableTale.java
index d70a69b1d04..3c6629d3029 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/forgettabletale/ForgettableTale.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/forgettabletale/ForgettableTale.java
@@ -420,11 +420,11 @@ public void setupConditions()
// Part way through veldeban dialog, told about drunken dwarf:
// 824 = 1
- givenBeerToDrunkenDwarf = new VarbitRequirement(838, 1);
- rowdyDwarfMadeRequest = new VarbitRequirement(829, 1);
- gotRowdySeed = new VarbitRequirement(826, 1);
- gotGaussSeed = new VarbitRequirement(827, 1);
- gotKhorvakSeed = new VarbitRequirement(828, 1);
+ givenBeerToDrunkenDwarf = new VarbitRequirement(VarbitID.FORGET_BEER_GIVEN, 1);
+ rowdyDwarfMadeRequest = new VarbitRequirement(VarbitID.FORGET_SEED2_TOLD, 1);
+ gotRowdySeed = new VarbitRequirement(VarbitID.FORGET_SEED2_GIVEN, 1);
+ gotGaussSeed = new VarbitRequirement(VarbitID.FORGET_SEED3_GIVEN, 1);
+ gotKhorvakSeed = new VarbitRequirement(VarbitID.FORGET_SEED4_GIVEN, 1);
// 830 = 1, talked a bit to gauss
// 831 = 1, asked about seed from khorvak
@@ -440,13 +440,13 @@ public void setupConditions()
keldaBrewed = new VarbitRequirement(VarbitID.BREWING_VAT_VARBIT_1, 71, Operation.GREATER_EQUAL);
keldaInBarrel = new VarbitRequirement(VarbitID.BREWING_BARREL_VARBIT_1, 3, Operation.GREATER_EQUAL);
- inPurple = new VarbitRequirement(578, 1); // Purple Pewter
- inYellow = new VarbitRequirement(578, 2); // Yellow Fortune
- inBlue = new VarbitRequirement(578, 3); // Blue Opal
- inGreen = new VarbitRequirement(578, 4); // Green Gem
- inWhite = new VarbitRequirement(578, 5); // White Chisel
- inSilver = new VarbitRequirement(578, 6); // Silver Cog
- inBrown = new VarbitRequirement(578, 7); // Brown Engine
+ inPurple = new VarbitRequirement(VarbitID.GIANTDWARF_CURRENT_COMPANY, 1); // Purple Pewter
+ inYellow = new VarbitRequirement(VarbitID.GIANTDWARF_CURRENT_COMPANY, 2); // Yellow Fortune
+ inBlue = new VarbitRequirement(VarbitID.GIANTDWARF_CURRENT_COMPANY, 3); // Blue Opal
+ inGreen = new VarbitRequirement(VarbitID.GIANTDWARF_CURRENT_COMPANY, 4); // Green Gem
+ inWhite = new VarbitRequirement(VarbitID.GIANTDWARF_CURRENT_COMPANY, 5); // White Chisel
+ inSilver = new VarbitRequirement(VarbitID.GIANTDWARF_CURRENT_COMPANY, 6); // Silver Cog
+ inBrown = new VarbitRequirement(VarbitID.GIANTDWARF_CURRENT_COMPANY, 7); // Brown Engine
handsFree = new NoItemRequirement("No weapon equipped", ItemSlots.WEAPON);
shieldFree = new NoItemRequirement("No shield equipped", ItemSlots.SHIELD);
@@ -456,76 +456,76 @@ public void setupConditions()
// 863 = 1, Searched box
//
- searchedBox1 = new VarbitRequirement(863, 1);
+ searchedBox1 = new VarbitRequirement(VarbitID.FORGET_START_EMPTIED, 1);
// 862, 861 are number of green/yellow
inPuzzle = new WidgetTextRequirement(248, 53, "Ok");
- donePuzzle1P1 = new VarbitRequirement(842, 2);
- donePuzzle1P2 = new VarbitRequirement(844, 1);
- searchedPuzzle1Box = new VarbitRequirement(864, 1);
+ donePuzzle1P1 = new VarbitRequirement(VarbitID.FORGET_IF1, 2);
+ donePuzzle1P2 = new VarbitRequirement(VarbitID.FORGET_IF3, 1);
+ searchedPuzzle1Box = new VarbitRequirement(VarbitID.FORGET_BOX1_EMPTIED, 1);
// Puzzle 2
- donePuzzle2P1 = new VarbitRequirement(842, 1);
- donePuzzle2P2 = new VarbitRequirement(843, 2);
- donePuzzle2P3 = new VarbitRequirement(846, 1);
- searchedPuzzle258Box = new VarbitRequirement(865, 1);
+ donePuzzle2P1 = new VarbitRequirement(VarbitID.FORGET_IF1, 1);
+ donePuzzle2P2 = new VarbitRequirement(VarbitID.FORGET_IF2, 2);
+ donePuzzle2P3 = new VarbitRequirement(VarbitID.FORGET_IF5, 1);
+ searchedPuzzle258Box = new VarbitRequirement(VarbitID.FORGET_BOX2_EMPTIED, 1);
// Puzzle 3
- donePuzzle3P1 = new VarbitRequirement(842, 2);
- donePuzzle3P2 = new VarbitRequirement(844, 2);
- donePuzzle3P3 = new VarbitRequirement(847, 1);
- donePuzzle3P4 = new VarbitRequirement(848, 1);
+ donePuzzle3P1 = new VarbitRequirement(VarbitID.FORGET_IF1, 2);
+ donePuzzle3P2 = new VarbitRequirement(VarbitID.FORGET_IF3, 2);
+ donePuzzle3P3 = new VarbitRequirement(VarbitID.FORGET_IF6, 1);
+ donePuzzle3P4 = new VarbitRequirement(VarbitID.FORGET_IF7, 1);
// Puzzle 4
inRoom2PuzzleWidget = new WidgetTextRequirement(244, 73, "Ok");
- donePuzzle4P1 = new VarbitRequirement(842, 1);
- donePuzzle4P2 = new VarbitRequirement(843, 2);
- donePuzzle4P3 = new VarbitRequirement(846, 2);
- searchedPuzzle147Box = new VarbitRequirement(864, 1);
+ donePuzzle4P1 = new VarbitRequirement(VarbitID.FORGET_IF1, 1);
+ donePuzzle4P2 = new VarbitRequirement(VarbitID.FORGET_IF2, 2);
+ donePuzzle4P3 = new VarbitRequirement(VarbitID.FORGET_IF5, 2);
+ searchedPuzzle147Box = new VarbitRequirement(VarbitID.FORGET_BOX1_EMPTIED, 1);
// Puzzle 5
- donePuzzle5P1 = new VarbitRequirement(842, 2);
- donePuzzle5P2 = new VarbitRequirement(844, 2);
- donePuzzle5P3 = new VarbitRequirement(847, 1);
- donePuzzle5P4 = new VarbitRequirement(852, 1);
+ donePuzzle5P1 = new VarbitRequirement(VarbitID.FORGET_IF1, 2);
+ donePuzzle5P2 = new VarbitRequirement(VarbitID.FORGET_IF3, 2);
+ donePuzzle5P3 = new VarbitRequirement(VarbitID.FORGET_IF6, 1);
+ donePuzzle5P4 = new VarbitRequirement(VarbitID.FORGET_IF11, 1);
inPuzzle5Room = new ZoneRequirement(puzzle5Room);
// Puzzle 6
- donePuzzle6P1 = new VarbitRequirement(842, 1);
- donePuzzle6P2 = new VarbitRequirement(843, 1);
- donePuzzle6P3 = new VarbitRequirement(845, 2);
- donePuzzle6P4 = new VarbitRequirement(851, 1);
- donePuzzle6P5 = new VarbitRequirement(853, 2);
+ donePuzzle6P1 = new VarbitRequirement(VarbitID.FORGET_IF1, 1);
+ donePuzzle6P2 = new VarbitRequirement(VarbitID.FORGET_IF2, 1);
+ donePuzzle6P3 = new VarbitRequirement(VarbitID.FORGET_IF4, 2);
+ donePuzzle6P4 = new VarbitRequirement(VarbitID.FORGET_IF10, 1);
+ donePuzzle6P5 = new VarbitRequirement(VarbitID.FORGET_IF12, 2);
inLibrary = new ZoneRequirement(library);
- readBook = new VarbitRequirement(833, 1);
- readCrate1 = new VarbitRequirement(834, 1);
- readCrate2 = new VarbitRequirement(835, 1);
+ readBook = new VarbitRequirement(VarbitID.FORGET_ROOM2_BOOKCASE, 1);
+ readCrate1 = new VarbitRequirement(VarbitID.FORGET_ROOM2_PAPER1, 1);
+ readCrate2 = new VarbitRequirement(VarbitID.FORGET_ROOM2_PAPER2, 1);
// Puzzle 7
inRoom3PuzzleWidget = new WidgetTextRequirement(247, 108, "Ok");
- donePuzzle7P1 = new VarbitRequirement(842, 1);
- donePuzzle7P2 = new VarbitRequirement(843, 1);
- donePuzzle7P3 = new VarbitRequirement(845, 2);
- donePuzzle7P4 = new VarbitRequirement(847, 2);
+ donePuzzle7P1 = new VarbitRequirement(VarbitID.FORGET_IF1, 1);
+ donePuzzle7P2 = new VarbitRequirement(VarbitID.FORGET_IF2, 1);
+ donePuzzle7P3 = new VarbitRequirement(VarbitID.FORGET_IF4, 2);
+ donePuzzle7P4 = new VarbitRequirement(VarbitID.FORGET_IF6, 2);
// Puzzle 8
- donePuzzle8P1 = new VarbitRequirement(842, 2);
- donePuzzle8P2 = new VarbitRequirement(844, 2);
- donePuzzle8P3 = new VarbitRequirement(846, 2);
- donePuzzle8P4 = new VarbitRequirement(848, 1);
- donePuzzle8P5 = new VarbitRequirement(850, 1);
- donePuzzle8P6 = new VarbitRequirement(853, 1);
+ donePuzzle8P1 = new VarbitRequirement(VarbitID.FORGET_IF1, 2);
+ donePuzzle8P2 = new VarbitRequirement(VarbitID.FORGET_IF3, 2);
+ donePuzzle8P3 = new VarbitRequirement(VarbitID.FORGET_IF5, 2);
+ donePuzzle8P4 = new VarbitRequirement(VarbitID.FORGET_IF7, 1);
+ donePuzzle8P5 = new VarbitRequirement(VarbitID.FORGET_IF9, 1);
+ donePuzzle8P6 = new VarbitRequirement(VarbitID.FORGET_IF12, 1);
// Puzzle 9
- donePuzzle9P1 = new VarbitRequirement(842, 1);
- donePuzzle9P2 = new VarbitRequirement(843, 1);
- donePuzzle9P3 = new VarbitRequirement(845, 2);
- donePuzzle9P4 = new VarbitRequirement(847, 1);
- donePuzzle9P5 = new VarbitRequirement(849, 2);
- donePuzzle9P6 = new VarbitRequirement(852, 1);
- donePuzzle9P7 = new VarbitRequirement(855, 2);
- donePuzzle9P8 = new VarbitRequirement(858, 2);
+ donePuzzle9P1 = new VarbitRequirement(VarbitID.FORGET_IF1, 1);
+ donePuzzle9P2 = new VarbitRequirement(VarbitID.FORGET_IF2, 1);
+ donePuzzle9P3 = new VarbitRequirement(VarbitID.FORGET_IF4, 2);
+ donePuzzle9P4 = new VarbitRequirement(VarbitID.FORGET_IF6, 1);
+ donePuzzle9P5 = new VarbitRequirement(VarbitID.FORGET_IF8, 2);
+ donePuzzle9P6 = new VarbitRequirement(VarbitID.FORGET_IF11, 1);
+ donePuzzle9P7 = new VarbitRequirement(VarbitID.FORGET_IF14, 2);
+ donePuzzle9P8 = new VarbitRequirement(VarbitID.FORGET_IF17, 2);
}
public void setupSteps()
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/gardenoftranquility/GardenOfTranquillity.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/gardenoftranquility/GardenOfTranquillity.java
index 7ffb5f1422c..8a33e111406 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/gardenoftranquility/GardenOfTranquillity.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/gardenoftranquility/GardenOfTranquillity.java
@@ -286,27 +286,27 @@ protected void setupRequirements()
public void setupConditions()
{
- talkedToElstan = new VarbitRequirement(967, 1);
+ talkedToElstan = new VarbitRequirement(VarbitID.GARDEN_ELSTAN_VARBIT, 1);
plantedMarigold = new VarbitRequirement(VarbitID.GARDEN_ELSTAN_VARBIT, 2, Operation.GREATER_EQUAL);
- harvestedMarigold = new VarbitRequirement(967, 3);
- givenMarigold = new VarbitRequirement(967, 4);
+ harvestedMarigold = new VarbitRequirement(VarbitID.GARDEN_ELSTAN_VARBIT, 3);
+ givenMarigold = new VarbitRequirement(VarbitID.GARDEN_ELSTAN_VARBIT, 4);
- talkedToLyra = new VarbitRequirement(968, 1);
+ talkedToLyra = new VarbitRequirement(VarbitID.GARDEN_LYRA_VARBIT, 1);
plantedOnions = new Conditions(LogicType.OR,
- new VarbitRequirement(969, 1), // West patch
- new VarbitRequirement(970, 1)); // East patch
+ new VarbitRequirement(VarbitID.GARDEN_PATCH_7_VARBIT, 1), // West patch
+ new VarbitRequirement(VarbitID.GARDEN_PATCH_8_VARBIT, 1)); // East patch
// Planted onion, 4771 3->13
onionsGrown = new VarbitRequirement(VarbitID.GARDEN_LYRA_VARBIT, 2, Operation.GREATER_EQUAL);
- talkedToLyraAgain = new VarbitRequirement(968, 3);
- talkedToKragen = new VarbitRequirement(971, 1);
+ talkedToLyraAgain = new VarbitRequirement(VarbitID.GARDEN_LYRA_VARBIT, 3);
+ talkedToKragen = new VarbitRequirement(VarbitID.GARDEN_KRAGEN_VARBIT, 1);
plantedCabbages = new Conditions(LogicType.OR,
- new VarbitRequirement(974, 1), // North patch
- new VarbitRequirement(975, 1)); // South patch
+ new VarbitRequirement(VarbitID.GARDEN_PATCH_5_VARBIT, 1), // North patch
+ new VarbitRequirement(VarbitID.GARDEN_PATCH_6_VARBIT, 1)); // South patch
cabbagesGrown = new VarbitRequirement(VarbitID.GARDEN_KRAGEN_VARBIT, 2, Operation.GREATER_EQUAL);
- talkedToKragenAgain = new VarbitRequirement(971, 3);
+ talkedToKragenAgain = new VarbitRequirement(VarbitID.GARDEN_KRAGEN_VARBIT, 3);
- talkedToDantaera = new VarbitRequirement(976, 1);
- cutShoot = new VarbitRequirement(976, 2);
+ talkedToDantaera = new VarbitRequirement(VarbitID.GARDEN_DANTAERA_VARBIT, 1);
+ cutShoot = new VarbitRequirement(VarbitID.GARDEN_DANTAERA_VARBIT, 2);
hasPlantedShoot = new Conditions(whiteTreePot);
hasWateredShoot = new Conditions(LogicType.OR,
new VarbitRequirement(VarbitID.GARDEN_WHITE_TREE_VARBIT, 4, Operation.GREATER_EQUAL),
@@ -314,12 +314,12 @@ public void setupConditions()
whitetreeSapling);
talkedToAlthric = new VarbitRequirement(VarbitID.GARDEN_ALTHRIC_VARBIT, 1, Operation.GREATER_EQUAL);
- ringInWell = new VarbitRequirement(966, 1);
+ ringInWell = new VarbitRequirement(VarbitID.GARDEN_RING_IN_WELL_VARBIT, 1);
canPickRoses = new Conditions(LogicType.OR,
new VarbitRequirement(VarbitID.GARDEN_ALTHRIC_VARBIT, 2, Operation.GREATER_EQUAL),
ringInWell
);
- ringNotInWell = new VarbitRequirement(966, 0);
+ ringNotInWell = new VarbitRequirement(VarbitID.GARDEN_RING_IN_WELL_VARBIT, 0);
hasRedRoseSeed = new Conditions(LogicType.OR,
redRoseSeed,
@@ -335,17 +335,17 @@ public void setupConditions()
);
hasRoseSeeds = new Conditions(hasRedRoseSeed, hasWhiteRoseSeed, hasPinkRoseSeed);
- talkedToBernald = new VarbitRequirement(988, 1);
- usedCureOnVines = new VarbitRequirement(988, 2);
- talkedToAlain = new VarbitRequirement(988, 3);
- curedVine = new VarbitRequirement(988, 4);
+ talkedToBernald = new VarbitRequirement(VarbitID.GARDEN_BERNALD_VARBIT, 1);
+ usedCureOnVines = new VarbitRequirement(VarbitID.GARDEN_BERNALD_VARBIT, 2);
+ talkedToAlain = new VarbitRequirement(VarbitID.GARDEN_BERNALD_VARBIT, 3);
+ curedVine = new VarbitRequirement(VarbitID.GARDEN_BERNALD_VARBIT, 4);
hasShards = runeShards;
hasDust = runeDust;
hasEnhancedCure = magicPlantCure;
- gotVineSeeds = new VarbitRequirement(988, 5);
+ gotVineSeeds = new VarbitRequirement(VarbitID.GARDEN_BERNALD_VARBIT, 5);
- notAddedCompost1 = new VarbitRequirement(984, 0);
- notAddedCompost2 = new VarbitRequirement(986, 0);
+ notAddedCompost1 = new VarbitRequirement(VarbitID.GARDEN_ORCHIDS_PINK_VARBIT, 0);
+ notAddedCompost2 = new VarbitRequirement(VarbitID.GARDEN_ORCHIDS_YELLOW_VARBIT, 0);
notPlantedDelphinium = new VarbitRequirement(VarbitID.GARDEN_DELPHINIUMS_VARBIT, 3, Operation.LESS_EQUAL);
notPlantedYellowOrchid = new VarbitRequirement(VarbitID.GARDEN_ORCHIDS_YELLOW_VARBIT, 1, Operation.LESS_EQUAL);
notPlantedPinkOrchid = new VarbitRequirement(VarbitID.GARDEN_ORCHIDS_PINK_VARBIT, 1, Operation.LESS_EQUAL);
@@ -363,11 +363,11 @@ public void setupConditions()
trolley,
new NpcCondition(NpcID.GARDEN_TROLLEY_SARADOMIN));
- lumbridgeStatueOnTrolley = new VarbitRequirement(965, 2);
- faladorStatueOnTrolley = new VarbitRequirement(965, 1);
+ lumbridgeStatueOnTrolley = new VarbitRequirement(VarbitID.GARDEN_TROLLEY_VARBIT, 2);
+ faladorStatueOnTrolley = new VarbitRequirement(VarbitID.GARDEN_TROLLEY_VARBIT, 1);
- placedLumbridgeStatue = new VarbitRequirement(964, 2);
- placedFaladorStatue = new VarbitRequirement(963, 2);
+ placedLumbridgeStatue = new VarbitRequirement(VarbitID.GARDEN_KING_STATUE_VARBIT, 2);
+ placedFaladorStatue = new VarbitRequirement(VarbitID.GARDEN_SARADOMIN_STATUE_VARBIT, 2);
}
public void setupSteps()
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/gertrudescat/GertrudesCat.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/gertrudescat/GertrudesCat.java
index d7d7657e7d1..27dfc073545 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/gertrudescat/GertrudesCat.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/gertrudescat/GertrudesCat.java
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2020, Patyfatycake
+ * Copyright (c) 2025, pajlada
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -27,226 +28,209 @@
import net.runelite.client.plugins.microbot.questhelper.collections.ItemCollections;
import net.runelite.client.plugins.microbot.questhelper.panel.PanelDetails;
import net.runelite.client.plugins.microbot.questhelper.questhelpers.BasicQuestHelper;
+import net.runelite.client.plugins.microbot.questhelper.questinfo.QuestHelperQuest;
import net.runelite.client.plugins.microbot.questhelper.requirements.Requirement;
-import net.runelite.client.plugins.microbot.questhelper.requirements.conditional.Conditions;
import net.runelite.client.plugins.microbot.questhelper.requirements.item.ItemRequirement;
-import net.runelite.client.plugins.microbot.questhelper.requirements.item.ItemRequirements;
-import net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicType;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.and;
+import net.runelite.client.plugins.microbot.questhelper.requirements.quest.QuestRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.zone.Zone;
import net.runelite.client.plugins.microbot.questhelper.requirements.zone.ZoneRequirement;
import net.runelite.client.plugins.microbot.questhelper.rewards.ExperienceReward;
import net.runelite.client.plugins.microbot.questhelper.rewards.ItemReward;
import net.runelite.client.plugins.microbot.questhelper.rewards.QuestPointReward;
import net.runelite.client.plugins.microbot.questhelper.rewards.UnlockReward;
-import net.runelite.client.plugins.microbot.questhelper.steps.*;
+import net.runelite.client.plugins.microbot.questhelper.steps.ConditionalStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.DetailedQuestStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.NpcStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.ObjectStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.QuestStep;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import net.runelite.api.Skill;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
-import java.util.*;
-
public class GertrudesCat extends BasicQuestHelper
{
- //Items Required
- ItemRequirement bucketOfMilk, coins, seasonedSardine, sardine, doogleLeaves, milkHighlighted,
- seasonedSardineHighlighted, kittenHighlighted;
+ // Required items
+ ItemRequirement bucketOfMilk;
+ ItemRequirement coins;
+ ItemRequirement sardineHighlighted;
- ItemRequirement lumberyardTeleport, varrockTeleport;
+ // Miscellaneous requirements
+ ItemRequirement seasonedSardine;
+ ItemRequirement doogleLeaves;
+ ItemRequirement doogleLeavesHighlighted;
+ ItemRequirement bucketOfMilkHighlighted;
+ ItemRequirement seasonedSardineHighlighted;
+ ItemRequirement kitten;
+ ItemRequirement kittenHighlighted;
- QuestStep talkToGertrude, talkToChildren, gertrudesCat, gertrudesCat2, searchNearbyCrates,
- giveKittenToFluffy, finishQuest;
+ ZoneRequirement isUpstairsLumberyard;
- QuestStep pickupDoogle, makeSeasonedSardine;
+ QuestRequirement hasGivenFluffsMilkAndSardine;
- ConditionalStep giveMilkToCatSteps, giveSardineToCat;
+ ItemRequirement lumberyardTeleport;
+ ItemRequirement varrockTeleport;
- Requirement isUpstairsLumberyard, hasFluffsKitten;
+ // Steps
+ NpcStep talkToGertrude;
- @Override
- public Map loadSteps()
- {
- initializeRequirements();
- setupConditions();
+ DetailedQuestStep pickupDoogle;
+ DetailedQuestStep makeSeasonedSardine;
+ NpcStep talkToChildren;
- return getSteps();
- }
+ ObjectStep climbLadder;
+ QuestStep gertrudesCat;
+ ConditionalStep cGiveMilkToCat;
- private Map getSteps()
- {
- Map steps = new HashMap<>();
+ ObjectStep climbLadder2;
+ NpcStep gertrudesCat2;
+ ConditionalStep cGiveSardineToCat;
- steps.put(0, talkToGertrude = getTalkToGertrude());
+ ObjectStep climbDownLadderStep;
+ ObjectStep climbUpLadderStep;
+ NpcStep searchNearbyCrates;
+ NpcStep giveKittenToFluffy;
- talkToChildren = getTalkToChildren();
+ NpcStep finishQuest;
- ConditionalStep conditionalTalkToChildren = new ConditionalStep(this, pickupDoogle);
- conditionalTalkToChildren.addStep(new ItemRequirements(LogicType.AND, "", sardine, doogleLeaves), makeSeasonedSardine);
- conditionalTalkToChildren.addStep(seasonedSardine, talkToChildren);
- steps.put(1, conditionalTalkToChildren);
+ @Override
+ protected void setupZones()
+ {
+ Zone zone = new Zone(new WorldPoint(3306, 3507, 12), new WorldPoint(3312, 3513, 1));
- steps.put(2, giveMilkToCatSteps = getGiveMilkToCat());
- steps.put(3, giveSardineToCat = getFeedCat());
- steps.put(4, findFluffsKitten());
- steps.put(5, finishQuest = returnToGertrude());
- return steps;
+ isUpstairsLumberyard = new ZoneRequirement(zone);
}
- private NpcStep returnToGertrude()
+ @Override
+ protected void setupRequirements()
{
- return new NpcStep(this, NpcID.GERTRUDE_QUEST,
- new WorldPoint(3148, 3413, 0), "Return to Gertrude to complete the quest.");
- }
+ hasGivenFluffsMilkAndSardine = new QuestRequirement(QuestHelperQuest.GERTRUDES_CAT, 4);
- private QuestStep findFluffsKitten()
- {
- //Need to find to ways to hide arrow
- searchNearbyCrates = new NpcStep(this, NpcID.KITTENS_MEW, new WorldPoint(3306, 3505, 0),
- "Search for a kitten in the crates in the Lumberyard.", true);
- ((NpcStep)(searchNearbyCrates)).setHideWorldArrow(true);
- ObjectStep climbDownLadderStep = goDownLadderStep();
- ObjectStep climbUpLadderStep = getClimbLadder();
- ArrayList fluffsKittenRequirement = new ArrayList<>();
- fluffsKittenRequirement.add(new ItemRequirement("Fluffs' Kitten", ItemID.GERTRUDEKITTENS));
- climbUpLadderStep.addItemRequirements(fluffsKittenRequirement);
- Conditions hasFluffsKittenUpstairs = new Conditions(hasFluffsKitten, isUpstairsLumberyard);
-
- kittenHighlighted = new ItemRequirement("Fluffs' Kitten", ItemID.GERTRUDEKITTENS);
- kittenHighlighted.setHighlightInInventory(true);
-
- giveKittenToFluffy = getGertrudesCat(kittenHighlighted);
- giveKittenToFluffy.setText("Return the kitten to Gertrude's cat.");
- giveKittenToFluffy.addIcon(ItemID.GERTRUDEKITTENS);
+ bucketOfMilk = new ItemRequirement("Bucket of milk", ItemID.BUCKET_MILK).hideConditioned(hasGivenFluffsMilkAndSardine);
+ bucketOfMilkHighlighted = bucketOfMilk.highlighted();
- ConditionalStep conditionalKitten = new ConditionalStep(this, searchNearbyCrates);
- conditionalKitten.addStep(hasFluffsKittenUpstairs, giveKittenToFluffy);
- conditionalKitten.addStep(hasFluffsKitten, climbUpLadderStep);
- conditionalKitten.addStep(isUpstairsLumberyard, climbDownLadderStep);
+ coins = new ItemRequirement("Coins", ItemCollections.COINS, 100);
- searchNearbyCrates.addSubSteps(climbDownLadderStep);
- giveKittenToFluffy.addSubSteps(climbUpLadderStep);
+ sardineHighlighted = new ItemRequirement("Raw Sardine", ItemID.RAW_SARDINE).highlighted().hideConditioned(hasGivenFluffsMilkAndSardine);
- return conditionalKitten;
- }
+ seasonedSardine = new ItemRequirement("Seasoned Sardine", ItemID.SEASONED_SARDINE).hideConditioned(hasGivenFluffsMilkAndSardine);
+ seasonedSardine.setTooltip("Can be created by using a sardine on Doogle leaves(South of Gertrudes House)");
+ seasonedSardineHighlighted = seasonedSardine.highlighted();
- private ObjectStep goDownLadderStep()
- {
- return new ObjectStep(this, ObjectID.FAI_VARROCK_LADDERTOP, new WorldPoint(3310, 3509, 1),
- "Climb down ladder in the Lumberyard.");
+ doogleLeaves = new ItemRequirement("Doogle Leaves", ItemID.DOOGLELEAVES);
+ doogleLeavesHighlighted = doogleLeaves.highlighted();
+
+ kitten = new ItemRequirement("Fluffs' Kitten", ItemID.GERTRUDEKITTENS);
+ kittenHighlighted = kitten.highlighted();
+
+ // Teleport recommendations
+ lumberyardTeleport = new ItemRequirement("Lumberyard teleport", ItemID.TELEPORTSCROLL_LUMBERYARD);
+ varrockTeleport = new ItemRequirement("Varrock teleports", ItemID.POH_TABLET_VARROCKTELEPORT, 2);
}
- private ConditionalStep getFeedCat()
+ public void setupSteps()
{
- gertrudesCat2 = getGertrudesCat(seasonedSardineHighlighted);
- gertrudesCat2.addIcon(ItemID.SEASONED_SARDINE);
-
- ObjectStep climbLadder = new ObjectStep(this, ObjectID.FAI_VARROCK_LADDER,
- new WorldPoint(3310, 3509, 0), "Climb up the ladder in the Lumberyard.", seasonedSardine);
+ talkToGertrude = new NpcStep(this, NpcID.GERTRUDE_QUEST, new WorldPoint(3148, 3413, 0), "Talk to Gertrude west of Varrock to start the quest.");
+ talkToGertrude.addDialogStep("Yes.");
- ConditionalStep lumberyard = new ConditionalStep(this, climbLadder, "Use a seasoned sardine on Gertrude's cat upstairs in the Lumberyard north east of Varrock.");
- lumberyard.addStep(isUpstairsLumberyard, gertrudesCat2);
- gertrudesCat2.addSubSteps(climbLadder);
+ pickupDoogle = new DetailedQuestStep(this, "Pickup some Doogle Leaves south of Gertrude's house.", doogleLeaves, sardineHighlighted);
+ makeSeasonedSardine = new DetailedQuestStep(this, "Use your Doogle Leaves on the Sardine.", doogleLeavesHighlighted, sardineHighlighted);
- return lumberyard;
- }
+ talkToChildren = new NpcStep(this, NpcID.SHILOP, new WorldPoint(3222, 3435, 0), "Talk to Shilop or Wilough in the Varrock Square.", true, seasonedSardine, coins);
+ talkToChildren.addAlternateNpcs(NpcID.WILOUGH);
+ talkToChildren.addDialogSteps("What will make you tell me?", "Okay then, I'll pay.");
- private ConditionalStep getGiveMilkToCat()
- {
- gertrudesCat = getGertrudesCat(milkHighlighted);
+ gertrudesCat = new NpcStep(this, NpcID.GERTRUDESCAT, new WorldPoint(3308, 3511, 1), "", bucketOfMilkHighlighted);
gertrudesCat.addIcon(ItemID.BUCKET_MILK);
- ObjectStep climbLadder = getClimbLadder(bucketOfMilk);
+ climbLadder = new ObjectStep(this, ObjectID.FAI_VARROCK_LADDER, new WorldPoint(3310, 3509, 0), "Climb up the ladder in the Lumberyard.", bucketOfMilk);
- ConditionalStep giveMilkToCat = new ConditionalStep(this, climbLadder, "Use a bucket of milk on Gertrude's cat upstairs in the Lumberyard north east of Varrock.", seasonedSardine);
- giveMilkToCat.addStep(isUpstairsLumberyard, gertrudesCat);
+ cGiveMilkToCat = new ConditionalStep(this, climbLadder, "Use a bucket of milk on Gertrude's cat upstairs in the Lumberyard north east of Varrock.", seasonedSardine);
+ cGiveMilkToCat.addStep(isUpstairsLumberyard, gertrudesCat);
- return giveMilkToCat;
- }
+ gertrudesCat2 = new NpcStep(this, NpcID.GERTRUDESCAT, new WorldPoint(3308, 3511, 1), "", seasonedSardineHighlighted);
+ gertrudesCat2.addIcon(ItemID.SEASONED_SARDINE);
- private NpcStep getGertrudesCat(ItemRequirement... requirement)
- {
- return new NpcStep(this, NpcID.GERTRUDESCAT,
- new WorldPoint(3308, 3511, 1), "", requirement);
- }
+ climbLadder2 = new ObjectStep(this, ObjectID.FAI_VARROCK_LADDER,
+ new WorldPoint(3310, 3509, 0), "Climb up the ladder in the Lumberyard.", seasonedSardine);
- private QuestStep getTalkToChildren()
- {
- pickupDoogle = new DetailedQuestStep(this, "Pickup some Doogle Leaves south of Gertrude's house.", new ItemRequirement("Doogle Leaves", ItemID.DOOGLELEAVES), sardine);
- makeSeasonedSardine = new DetailedQuestStep(this, "Use your Doogle Leaves on the Sardine.", sardine, doogleLeaves);
+ cGiveSardineToCat = new ConditionalStep(this, climbLadder2, "Use a seasoned sardine on Gertrude's cat upstairs in the Lumberyard north east of Varrock.");
+ cGiveSardineToCat.addStep(isUpstairsLumberyard, gertrudesCat2);
- NpcStep talkToChildren = new NpcStep(this, NpcID.SHILOP,
- new WorldPoint(3222, 3435, 0), "Talk to Shilop or Wilough in the Varrock Square.", true,
- seasonedSardine, coins);
- talkToChildren.addAlternateNpcs(NpcID.WILOUGH);
- talkToChildren.addDialogSteps("What will make you tell me?", "Okay then, I'll pay.");
+ //Need to find to ways to hide arrow
+ searchNearbyCrates = new NpcStep(this, NpcID.KITTENS_MEW, new WorldPoint(3306, 3505, 0),
+ "Search different crates downstairs in the Lumberyard until you find the kitten.", true, bucketOfMilk);
+ searchNearbyCrates.setHideWorldArrow(true);
+ climbDownLadderStep = new ObjectStep(this, ObjectID.FAI_VARROCK_LADDERTOP, new WorldPoint(3310, 3509, 1), "Climb down ladder in the Lumberyard.");
+ climbUpLadderStep = new ObjectStep(this, ObjectID.FAI_VARROCK_LADDER, new WorldPoint(3310, 3509, 0), "Climb up the ladder in the Lumberyard.", kitten);
- return talkToChildren;
- }
- private QuestStep getTalkToGertrude()
- {
- NpcStep talkToGertrude = new NpcStep(this, NpcID.GERTRUDE_QUEST,
- new WorldPoint(3148, 3413, 0), "Talk to Gertrude.");
- talkToGertrude.addDialogStep("Yes.");
- return talkToGertrude;
+ giveKittenToFluffy = new NpcStep(this, NpcID.GERTRUDESCAT,
+ new WorldPoint(3308, 3511, 1), "", kittenHighlighted);
+ giveKittenToFluffy.setText("Return the kitten to Gertrude's cat.");
+ giveKittenToFluffy.addIcon(ItemID.GERTRUDEKITTENS);
+
+
+ searchNearbyCrates.addSubSteps(climbDownLadderStep);
+ giveKittenToFluffy.addSubSteps(climbUpLadderStep);
+
+ finishQuest = new NpcStep(this, NpcID.GERTRUDE_QUEST,
+ new WorldPoint(3148, 3413, 0), "Return to Gertrude east of Varrock to complete the quest.");
}
@Override
- protected void setupRequirements()
+ public Map loadSteps()
{
- bucketOfMilk = new ItemRequirement("Bucket of milk", ItemID.BUCKET_MILK);
- milkHighlighted = new ItemRequirement("Bucket of milk", ItemID.BUCKET_MILK);
- milkHighlighted.setHighlightInInventory(true);
-
- coins = new ItemRequirement("Coins", ItemCollections.COINS, 100);
+ initializeRequirements();
+ setupSteps();
- seasonedSardine = new ItemRequirement("Seasoned Sardine", ItemID.SEASONED_SARDINE);
- seasonedSardine.setTooltip("Can be created by using a sardine on Doogle leaves(South of Gertrudes House)");
+ var steps = new HashMap();
- seasonedSardineHighlighted = new ItemRequirement("Seasoned Sardine", ItemID.SEASONED_SARDINE);
- seasonedSardineHighlighted.setTooltip("Can be created by using a sardine on Doogle leaves(South of Gertrudes House)");
- seasonedSardineHighlighted.setHighlightInInventory(true);
+ steps.put(0, talkToGertrude);
- sardine = new ItemRequirement("Raw Sardine", ItemID.RAW_SARDINE);
- sardine.setHighlightInInventory(true);
- doogleLeaves = new ItemRequirement("Doogle Leaves", ItemID.DOOGLELEAVES);
- doogleLeaves.setHighlightInInventory(true);
+ var cTalkToChildren = new ConditionalStep(this, pickupDoogle);
+ cTalkToChildren.addStep(and(sardineHighlighted, doogleLeaves), makeSeasonedSardine);
+ cTalkToChildren.addStep(seasonedSardine, talkToChildren);
+ steps.put(1, cTalkToChildren);
- // Recommended items
- lumberyardTeleport = new ItemRequirement("Lumberyard teleport", ItemID.TELEPORTSCROLL_LUMBERYARD);
- varrockTeleport = new ItemRequirement("Varrock teleports", ItemID.POH_TABLET_VARROCKTELEPORT, 2);
- }
+ steps.put(2, cGiveMilkToCat);
- @Override
- protected void setupZones()
- {
- Zone zone = new Zone(new WorldPoint(3306, 3507, 12), new WorldPoint(3312, 3513, 1));
+ steps.put(3, cGiveSardineToCat);
- isUpstairsLumberyard = new ZoneRequirement(zone);
- }
+ var cFindFluffsKitten = new ConditionalStep(this, searchNearbyCrates);
+ cFindFluffsKitten.addStep(and(kitten, isUpstairsLumberyard), giveKittenToFluffy);
+ cFindFluffsKitten.addStep(kitten, climbUpLadderStep);
+ cFindFluffsKitten.addStep(isUpstairsLumberyard, climbDownLadderStep);
+ steps.put(4, cFindFluffsKitten);
- private void setupConditions()
- {
- hasFluffsKitten = new ItemRequirements(new ItemRequirement("Fluffs' kitten", ItemID.GERTRUDEKITTENS));
- }
+ steps.put(5, finishQuest);
- private ObjectStep getClimbLadder(ItemRequirement... itemRequirements)
- {
- return new ObjectStep(this, ObjectID.FAI_VARROCK_LADDER,
- new WorldPoint(3310, 3509, 0), "Climb up the ladder in the Lumberyard.", itemRequirements);
+ return steps;
}
@Override
public List getItemRequirements()
{
- return Arrays.asList(bucketOfMilk, coins, sardine);
+ return List.of(
+ bucketOfMilk,
+ coins,
+ sardineHighlighted
+ );
}
@Override
public List getItemRecommended()
{
- return Arrays.asList(varrockTeleport, lumberyardTeleport);
+ return List.of(
+ varrockTeleport,
+ lumberyardTeleport
+ );
}
@Override
@@ -258,42 +242,58 @@ public QuestPointReward getQuestPointReward()
@Override
public List getExperienceRewards()
{
- return Collections.singletonList(new ExperienceReward(Skill.COOKING, 1525));
+ return List.of(
+ new ExperienceReward(Skill.COOKING, 1525)
+ );
}
@Override
public List getItemRewards()
{
- return Arrays.asList(
- new ItemReward("A pet Kitten", ItemID.KITTENOBJECT, 1),
- new ItemReward("Chocolate Cake", ItemID.CHOCOLATE_CAKE, 1),
- new ItemReward("Stew", ItemID.STEW, 1));
+ return List.of(
+ new ItemReward("A pet Kitten", ItemID.KITTENOBJECT, 1),
+ new ItemReward("Chocolate Cake", ItemID.CHOCOLATE_CAKE, 1),
+ new ItemReward("Stew", ItemID.STEW, 1)
+ );
}
@Override
public List getUnlockRewards()
{
- return Collections.singletonList(new UnlockReward("Ability to raise kittens."));
+ return List.of(
+ new UnlockReward("Ability to raise kittens.")
+ );
}
@Override
public List getPanels()
{
- List steps = new ArrayList<>();
-
- PanelDetails startingPanel = new PanelDetails("Starting out",
- Arrays.asList(talkToGertrude, pickupDoogle, makeSeasonedSardine, talkToChildren),
- sardine, coins);
- steps.add(startingPanel);
-
- PanelDetails lumberYardPanel = new PanelDetails("The secret playground (Lumber Yard)",
- Arrays.asList(giveMilkToCatSteps, giveSardineToCat, searchNearbyCrates, giveKittenToFluffy),
- seasonedSardine, bucketOfMilk);
- steps.add(lumberYardPanel);
-
- PanelDetails finishQuestPanel = new PanelDetails("Finish the quest",
- Collections.singletonList(finishQuest));
- steps.add(finishQuestPanel);
- return steps;
+ var sections = new ArrayList();
+
+ sections.add(new PanelDetails("Starting out", List.of(
+ talkToGertrude,
+ pickupDoogle,
+ makeSeasonedSardine,
+ talkToChildren
+ ), List.of(
+ sardineHighlighted,
+ coins
+ )));
+
+ sections.add(new PanelDetails("The secret playground (Lumber Yard)", List.of(
+ cGiveMilkToCat,
+ cGiveSardineToCat,
+ searchNearbyCrates,
+ giveKittenToFluffy
+ ), List.of(
+ seasonedSardine,
+ bucketOfMilk
+ )));
+
+ sections.add(new PanelDetails("Finish the quest", List.of(
+ finishQuest
+ )));
+
+ return sections;
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/ghostsahoy/GhostsAhoy.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/ghostsahoy/GhostsAhoy.java
index 81433db8a94..24254f091ce 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/ghostsahoy/GhostsAhoy.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/ghostsahoy/GhostsAhoy.java
@@ -294,21 +294,21 @@ public void setupConditions()
hasModelShip = modelShip.alsoCheckBank(questBank);
hasRepairedShip = repairedShip.alsoCheckBank(questBank);
hasCup = cup.alsoCheckBank(questBank);
- hasBook = new Conditions(LogicType.OR, new VarbitRequirement(208, 1), book.alsoCheckBank(questBank));
- hasManual = new Conditions(LogicType.OR, new VarbitRequirement(206, 1), new VarbitRequirement(212, 8));
+ hasBook = new Conditions(LogicType.OR, new VarbitRequirement(VarbitID.AHOY_GIVEN_BOOK, 1), book.alsoCheckBank(questBank));
+ hasManual = new Conditions(LogicType.OR, new VarbitRequirement(VarbitID.AHOY_GIVEN_MANUAL, 1), new VarbitRequirement(VarbitID.AHOY_SUBQUEST_BOW, 8));
hasSheet = bedsheet.alsoCheckBank(questBank);
hasEctoSheet = ectoSheets.alsoCheckBank(questBank);
- hasMysticalRobes = new Conditions(LogicType.OR, new VarbitRequirement(207, 1), robes.alsoCheckBank(questBank));
+ hasMysticalRobes = new Conditions(LogicType.OR, new VarbitRequirement(VarbitID.AHOY_GIVEN_ROBES, 1), robes.alsoCheckBank(questBank));
hasSignedOakBow = signedOakBow.alsoCheckBank(questBank);
hasPetition = petition.alsoCheckBank(questBank);
hasSignatures = new VarbitRequirement(VarbitID.AHOY_SIGNATURECOUNTER, 11, Operation.GREATER_EQUAL);
givenPetitionToNecro = new VarbitRequirement(VarbitID.AHOY_SIGNATURECOUNTER, 31, Operation.GREATER_EQUAL);
hadChestKey = new Conditions(LogicType.OR, chestKey, new VarbitRequirement(VarbitID.AHOY_SUBQUEST_TOYBOAT, 2, Operation.GREATER_EQUAL));
unlockedChest2 = new VarbitRequirement(VarbitID.AHOY_SUBQUEST_TOYBOAT, 3, Operation.GREATER_EQUAL);
- doorUnlocked = new VarbitRequirement(213, 1);
+ doorUnlocked = new VarbitRequirement(VarbitID.AHOY_TEMPLEDOOR_UNLOCKED, 1);
lobsterNearby = new NpcCondition(NpcID.GIANT_LOBSTER);
- killedLobster = new VarbitRequirement(215, 1);
+ killedLobster = new VarbitRequirement(VarbitID.AHOY_KILLED_LOBSTER, 1);
boneKeyNearby = new ItemOnTileRequirement(boneKey);
hasBoneKey = new Conditions(LogicType.OR, boneKey, doorUnlocked);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/goblindiplomacy/GoblinDiplomacy.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/goblindiplomacy/GoblinDiplomacy.java
index ff7ec363007..899c5a3926e 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/goblindiplomacy/GoblinDiplomacy.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/goblindiplomacy/GoblinDiplomacy.java
@@ -42,6 +42,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import java.util.*;
@@ -127,9 +128,9 @@ protected void setupRequirements()
public void setupConditions()
{
isUpstairs = new ZoneRequirement(upstairs);
- hasUpstairsArmour = new VarbitRequirement(2381, 1);
- hasWestArmour = new VarbitRequirement(2380, 1);
- hasNorthArmour = new VarbitRequirement(2379, 1);
+ hasUpstairsArmour = new VarbitRequirement(VarbitID.GOBDIP_CRATE3_SEARCHED, 1);
+ hasWestArmour = new VarbitRequirement(VarbitID.GOBDIP_CRATE2_SEARCHED, 1);
+ hasNorthArmour = new VarbitRequirement(VarbitID.GOBDIP_CRATE1_SEARCHED, 1);
}
@Override
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/grimtales/GrimTales.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/grimtales/GrimTales.java
index de73799fdce..80647e67bc4 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/grimtales/GrimTales.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/grimtales/GrimTales.java
@@ -226,8 +226,8 @@ public void setupConditions()
inTowerBase = new ZoneRequirement(towerBase);
inTowerUpstairs = new ZoneRequirement(towerUpstairs);
- grimgnashAsleep = new VarbitRequirement(3717, 1);
- givenFeather = new VarbitRequirement(3719, 1);
+ grimgnashAsleep = new VarbitRequirement(VarbitID.GRIM_GRIFFIN_ASLEEP, 1);
+ givenFeather = new VarbitRequirement(VarbitID.GRIM_GIVEN_FEATHER, 1);
talkedToDrainOnce = new VarbitRequirement(VarbitID.GRIM_DWARFQUEST, 5, Operation.GREATER_EQUAL);
beardDropped = new VarbitRequirement(VarbitID.GRIM_DWARFQUEST, 10, Operation.GREATER_EQUAL);
@@ -235,17 +235,17 @@ public void setupConditions()
talkedToMiazrqa = new VarbitRequirement(VarbitID.GRIM_DWARFQUEST, 20, Operation.GREATER_EQUAL);
inPianoWidget = new WidgetModelRequirement(535, 1, 25890);
- pressed1 = new VarbitRequirement(3697, 1);
- pressed2 = new VarbitRequirement(3697, 2);
- pressed3 = new VarbitRequirement(3697, 3);
- pressed4 = new VarbitRequirement(3697, 4);
- pressed5 = new VarbitRequirement(3697, 5);
- pressed6 = new VarbitRequirement(3697, 6);
- pressed7 = new VarbitRequirement(3697, 7);
- pressed8 = new VarbitRequirement(3697, 8);
+ pressed1 = new VarbitRequirement(VarbitID.GRIM_PIANOTRACK, 1);
+ pressed2 = new VarbitRequirement(VarbitID.GRIM_PIANOTRACK, 2);
+ pressed3 = new VarbitRequirement(VarbitID.GRIM_PIANOTRACK, 3);
+ pressed4 = new VarbitRequirement(VarbitID.GRIM_PIANOTRACK, 4);
+ pressed5 = new VarbitRequirement(VarbitID.GRIM_PIANOTRACK, 5);
+ pressed6 = new VarbitRequirement(VarbitID.GRIM_PIANOTRACK, 6);
+ pressed7 = new VarbitRequirement(VarbitID.GRIM_PIANOTRACK, 7);
+ pressed8 = new VarbitRequirement(VarbitID.GRIM_PIANOTRACK, 8);
- unlockedPiano = new VarbitRequirement(3698, 1);
- searchedPiano = new VarbitRequirement(3716, 1);
+ unlockedPiano = new VarbitRequirement(VarbitID.GRIM_PIANO_USED, 1);
+ searchedPiano = new VarbitRequirement(VarbitID.GRIM_HEAD_FOUND, 1);
inMouseRoom1 = new ZoneRequirement(mouseRoom1);
inMouseRoom2 = new ZoneRequirement(mouseRoom2);
@@ -257,19 +257,19 @@ public void setupConditions()
inWrongMouse1 = new ZoneRequirement(wrongMouse1);
inWrongMouse2 = new ZoneRequirement(wrongMouse2);
- hasMiazrqasPendant = new VarbitRequirement(3721, 1);
+ hasMiazrqasPendant = new VarbitRequirement(VarbitID.GRIM_HAVE_PENDANT, 1);
- givenPendant = new VarbitRequirement(3694, 25);
+ givenPendant = new VarbitRequirement(VarbitID.GRIM_DWARFQUEST, 25);
- releasedRupert = new VarbitRequirement(3701, 1);
+ releasedRupert = new VarbitRequirement(VarbitID.GRIM_DWARF_VIS, 1);
- plantedSeed = new VarbitRequirement(3714, 1);
- wateredSeed = new VarbitRequirement(3714, 2);
+ plantedSeed = new VarbitRequirement(VarbitID.GRIM_STALK_STATE, 1);
+ wateredSeed = new VarbitRequirement(VarbitID.GRIM_STALK_STATE, 2);
onCloud = new ZoneRequirement(cloud);
- killedGlod = new VarbitRequirement(3715, 1);
+ killedGlod = new VarbitRequirement(VarbitID.GRIM_GIANT_DEAD, 1);
- usedPotion = new VarbitRequirement(3714, 3);
+ usedPotion = new VarbitRequirement(VarbitID.GRIM_STALK_STATE, 3);
}
public void setupSteps()
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/hauntedmine/HauntedMine.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/hauntedmine/HauntedMine.java
index be544306a41..fbfa2171631 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/hauntedmine/HauntedMine.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/hauntedmine/HauntedMine.java
@@ -52,6 +52,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import net.runelite.api.gameval.VarPlayerID;
import java.util.*;
@@ -223,7 +224,7 @@ protected void setupZones()
public void setupConditions()
{
- askedAboutKey = new VarbitRequirement(2397, 1);
+ askedAboutKey = new VarbitRequirement(VarbitID.HAUNTEDMINE_HEARDABOUTKEY, 1);
inLevel1North = new ZoneRequirement(level1North);
inLevel1South = new ZoneRequirement(level1South);
inLevel2South = new ZoneRequirement(level2South);
@@ -240,22 +241,22 @@ public void setupConditions()
inCrystalEntrance = new ZoneRequirement(crystalEntrance);
inCrystalOrCrystalEntranceRoom = new ZoneRequirement(crystalRoom1, crystalRoom2, crystalRoom3, crystalEntrance);
- valveOpened = new VarbitRequirement(2393, 1);
- valveOpen = new VarbitRequirement(2394, 1);
+ valveOpened = new VarbitRequirement(VarbitID.HAUNTEDMINE_LIFTPOWEREDONCE, 1);
+ valveOpen = new VarbitRequirement(VarbitID.HAUNTEDMINE_LIFTPOWEREDNOW, 1);
hasKeyOrOpenedValve = new Conditions(LogicType.OR, zealotsKey, valveOpened);
- leverAWrong = new VarbitRequirement(2385, 0);
- leverBWrong = new VarbitRequirement(2386, 0);
- leverCWrong = new VarbitRequirement(2387, 1);
- leverDWrong = new VarbitRequirement(2388, 1);
- leverEWrong = new VarbitRequirement(2389, 0);
- leverFWrong = new VarbitRequirement(2390, 0);
- leverGWrong = new VarbitRequirement(2391, 1);
- leverHWrong = new VarbitRequirement(2392, 1);
-
- fungusInCart = new VarbitRequirement(2395, 1);
- fungusOnOtherSide = new VarbitRequirement(2396, 1);
+ leverAWrong = new VarbitRequirement(VarbitID.HAUNTEDMINE_LEVER_B, 0);
+ leverBWrong = new VarbitRequirement(VarbitID.HAUNTEDMINE_LEVER_A, 0);
+ leverCWrong = new VarbitRequirement(VarbitID.HAUNTEDMINE_LEVER_C, 1);
+ leverDWrong = new VarbitRequirement(VarbitID.HAUNTEDMINE_LEVER_D, 1);
+ leverEWrong = new VarbitRequirement(VarbitID.HAUNTEDMINE_LEVER_E, 0);
+ leverFWrong = new VarbitRequirement(VarbitID.HAUNTEDMINE_LEVER_I, 0);
+ leverGWrong = new VarbitRequirement(VarbitID.HAUNTEDMINE_LEVER_J, 1);
+ leverHWrong = new VarbitRequirement(VarbitID.HAUNTEDMINE_LEVER_K, 1);
+
+ fungusInCart = new VarbitRequirement(VarbitID.HAUNTEDMINE_BEGINCART_FUNGUS, 1);
+ fungusOnOtherSide = new VarbitRequirement(VarbitID.HAUNTEDMINE_ENDCART_FUNGUS, 1);
daythNearby = new NpcHintArrowRequirement(NpcID.HAUNTEDMINE_BOSS_GHOST, NpcID.HAUNTEDMINE_BOSS_GHOST_FADED);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/hazeelcult/HazeelCult.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/hazeelcult/HazeelCult.java
index 33cdab65993..93407d1a4d1 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/hazeelcult/HazeelCult.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/hazeelcult/HazeelCult.java
@@ -29,10 +29,10 @@
import net.runelite.client.plugins.microbot.questhelper.questhelpers.BasicQuestHelper;
import net.runelite.client.plugins.microbot.questhelper.questinfo.QuestVarPlayer;
import net.runelite.client.plugins.microbot.questhelper.requirements.Requirement;
-import net.runelite.client.plugins.microbot.questhelper.requirements.conditional.Conditions;
import net.runelite.client.plugins.microbot.questhelper.requirements.item.ItemOnTileRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.item.ItemRequirement;
-import net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicType;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.and;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.or;
import net.runelite.client.plugins.microbot.questhelper.requirements.var.VarbitRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.var.VarplayerRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.zone.Zone;
@@ -40,147 +40,134 @@
import net.runelite.client.plugins.microbot.questhelper.rewards.ExperienceReward;
import net.runelite.client.plugins.microbot.questhelper.rewards.ItemReward;
import net.runelite.client.plugins.microbot.questhelper.rewards.QuestPointReward;
-import net.runelite.client.plugins.microbot.questhelper.steps.*;
+import net.runelite.client.plugins.microbot.questhelper.steps.ConditionalStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.MultiNpcStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.NpcStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.ObjectStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.QuestStep;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import net.runelite.api.Skill;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
-
-import java.util.*;
-
-import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.or;
+import net.runelite.api.gameval.VarbitID;
public class HazeelCult extends BasicQuestHelper
{
- //Items Recommended
+ // Recommended items
ItemRequirement ardougneCloak;
- ItemRequirement hazeelScroll, poison, carnilleanArmour, key, hazeelMark;
-
- Requirement inCultEntrance, inCultRoom, inManorBasement, inManorF1, inManorF2, canSearchChest,
- talkedToCerilAfterPoison, armourNearby, sidedWithCeril, receivedMark, onStep7, givenAlomoneScroll,
- givenArmour, hadArmour, butlerArrested;
-
- QuestStep talkToCeril, enterCave, talkToClivet, leaveCaveForValves;
-
- // Hazeel side
- QuestStep getPoison, leaveCaveWithPoison, enterKitchen, usePoisonOnRange, leaveKitchen, talkToCerilAfterPoison,
- enterCaveAfterPoison, talkToClivetAfterPoison, boardRaftAfterPoison, talkToAlomone, returnOnRaftAfterAlomone, leaveCaveAfterAlomone,
- enterKitchenAfterButler, searchCrateForKey, leaveKitchenWithKey, goToF1WithKey,
- climbLadderWithKey, searchChestForScroll, goF2ToF1WithScroll, goF1ToF0WithScroll, enterCaveWithScroll,
- boardRaftWithScroll, giveAlomoneScroll;
-
- // Ceril side
- QuestStep enterCaveAfterValvesForCeril, boardRaftToKill, talkToAlomoneToKill, killAlomone, retrieveArmourFromChest, returnOnRaftAfterKilling,
- leaveCaveAfterKilling, talkToJonesAfterKilling, talkToCerilAfterKilling, goUpToCupboard,
- searchCupboardForEvidence, talkToCerilToFinish;
-
- HazeelValves valveStepsCeril, valveStepsHazeel;
-
- //Zones
- Zone cultEntrance, cultRoom, manorBasement, manorF1, manorF2;
-
- ConditionalStep cerilSteps, hazeel4GoPoisonSteps;
+ // Zones
+ Zone cultEntrance;
+ Zone cultRoom;
+ Zone manorBasement;
+ Zone manorF1;
+ Zone manorF2;
+ Zone manorF2LadderRoom;
+
+ // Miscellaneous requirements
+ ItemRequirement hazeelScroll;
+ ItemRequirement poison;
+ ItemRequirement carnilleanArmour;
+ ItemRequirement key;
+ ItemRequirement hazeelMark;
+
+ ZoneRequirement inCultEntrance;
+ ZoneRequirement inCultRoom;
+ ZoneRequirement inManorBasement;
+ ZoneRequirement inManorF1;
+ ZoneRequirement inManorF2;
+ ZoneRequirement inManorF2LadderRoom;
VarbitRequirement alomoneAttackable;
+ VarbitRequirement givenAlomoneScroll;
+ VarbitRequirement givenArmour;
+ VarbitRequirement canSearchChest;
+ VarbitRequirement sidedWithCeril;
+ VarbitRequirement receivedMark;
+ VarbitRequirement talkedToCerilAfterPoison;
+ VarbitRequirement butlerArrested;
+ ItemOnTileRequirement armourNearby;
+ VarplayerRequirement onStep7;
+ Requirement hadArmour;
+
+ // Steps
+ NpcStep talkToCeril;
+ ObjectStep enterCave;
+ NpcStep talkToClivet;
+
+ // Ceril side steps
+ ObjectStep leaveCaveForValves;
+ HazeelValves valveStepsCeril;
+ ObjectStep enterCaveAfterValvesForCeril;
+ ObjectStep boardRaftToKill;
+ NpcStep talkToAlomoneToKill;
+ NpcStep killAlomone;
+ ObjectStep retrieveArmourFromChest;
+ ObjectStep returnOnRaftAfterKilling;
+ ObjectStep leaveCaveAfterKilling;
+ NpcStep talkToJonesAfterKilling;
+ NpcStep talkToCerilAfterKilling;
+ ObjectStep goUpToCupboard;
+ ObjectStep searchCupboardForEvidence;
+ NpcStep talkToCerilToFinish;
+
+ // Hazeel side steps
+ NpcStep getPoison;
+ ObjectStep leaveCaveWithPoison;
+ ObjectStep enterKitchen;
+ ObjectStep usePoisonOnRange;
+ ObjectStep leaveKitchen;
+ NpcStep talkToCerilAfterPoison;
+ HazeelValves valveStepsHazeel;
+ ObjectStep enterCaveAfterPoison;
+ NpcStep talkToClivetAfterPoison;
+ ObjectStep boardRaftAfterPoison;
+ NpcStep talkToAlomone;
+ ObjectStep returnOnRaftAfterAlomone;
+ ObjectStep leaveCaveAfterAlomone;
+ ObjectStep enterKitchenAfterButler;
+ ObjectStep searchCrateForKey;
+ ObjectStep leaveKitchenWithKey;
+ ObjectStep goToF1WithKey;
+ ObjectStep knockOnWall;
+ ObjectStep climbLadderWithKey;
+ ObjectStep searchChestForScroll;
+ ObjectStep goF2ToF1WithScroll;
+ ObjectStep knockOnWallToExit;
+ ObjectStep goF1ToF0WithScroll;
+ ObjectStep enterCaveWithScroll;
+ ObjectStep boardRaftWithScroll;
+ NpcStep giveAlomoneScroll;
@Override
- public Map loadSteps()
+ protected void setupZones()
{
- // TODO: Should the valves section implement the PuzzleWrapper?
- initializeRequirements();
- setupSteps();
- Map steps = new HashMap<>();
-
- steps.put(0, talkToCeril);
-
- // Got poison first time, 14782 0->1
- // Have poison currently (10670 0->1, back to 0 if you talk to Clivet without poison)
- // Is also for recieved the mark?
-
- ConditionalStep goTalkToClivet = new ConditionalStep(this, enterCave);
- goTalkToClivet.addStep(inCultEntrance, talkToClivet);
- steps.put(2, goTalkToClivet);
- steps.put(3, goTalkToClivet);
-
- // Help Hazeel
- hazeel4GoPoisonSteps = new ConditionalStep(this, enterKitchen);
- // 14779 0->1 when used poison on range
- hazeel4GoPoisonSteps.addStep(inManorBasement, usePoisonOnRange);
- hazeel4GoPoisonSteps.addStep(inCultEntrance, leaveCaveWithPoison);
-
- // TODO: Verify if this is needed
- ConditionalStep goTalkAfterPoison = new ConditionalStep(this, talkToCerilAfterPoison);
- goTalkAfterPoison.addStep(inManorBasement, leaveKitchen);
-
- ConditionalStep goTalkToClivetAfterPoison = new ConditionalStep(this, goTalkAfterPoison);
- // Probably don't actually need the mark but nice to ensure the player gets it
- goTalkToClivetAfterPoison.addStep(new Conditions(inCultRoom, hazeelMark.alsoCheckBank(questBank)), talkToAlomone);
- goTalkToClivetAfterPoison.addStep(new Conditions(inCultEntrance, valveStepsHazeel.solved,
- hazeelMark.alsoCheckBank(questBank)), boardRaftAfterPoison);
- goTalkToClivetAfterPoison.addStep(new Conditions(inCultEntrance, valveStepsHazeel.solved), talkToClivetAfterPoison);
- goTalkToClivetAfterPoison.addStep(valveStepsHazeel.solved, enterCaveAfterPoison);
- goTalkToClivetAfterPoison.addStep(talkedToCerilAfterPoison, valveStepsHazeel);
-
- Conditions hadScroll = new Conditions(LogicType.OR, hazeelScroll.alsoCheckBank(questBank), givenAlomoneScroll);
- ConditionalStep goGetScroll = new ConditionalStep(this, enterKitchenAfterButler);
- goGetScroll.addStep(new Conditions(inCultRoom, hadScroll), giveAlomoneScroll);
- goGetScroll.addStep(new Conditions(inCultEntrance, hadScroll), boardRaftWithScroll);
- goGetScroll.addStep(new Conditions(inManorF1, hadScroll), goF1ToF0WithScroll);
- goGetScroll.addStep(new Conditions(inManorF2, hadScroll), goF2ToF1WithScroll);
- goGetScroll.addStep(new Conditions(hadScroll), enterCaveWithScroll);
- goGetScroll.addStep(new Conditions(inManorF2, key), searchChestForScroll);
- goGetScroll.addStep(new Conditions(inManorF1, key), climbLadderWithKey);
- goGetScroll.addStep(new Conditions(inManorBasement, key), leaveKitchenWithKey);
- goGetScroll.addStep(new Conditions(key), goToF1WithKey);
- goGetScroll.addStep(inManorBasement, searchCrateForKey);
- goGetScroll.addStep(inCultEntrance, leaveCaveAfterAlomone);
- goGetScroll.addStep(inCultRoom, returnOnRaftAfterAlomone);
-
- // Ceril side
- cerilSteps = new ConditionalStep(this, valveStepsCeril);
- cerilSteps.addStep(new Conditions(onStep7, butlerArrested), talkToCerilToFinish);
- cerilSteps.addStep(new Conditions(onStep7, inManorF1), searchCupboardForEvidence);
- cerilSteps.addStep(onStep7, goUpToCupboard);
- cerilSteps.addStep(new Conditions(inCultEntrance, hadArmour), leaveCaveAfterKilling);
- cerilSteps.addStep(new Conditions(inCultRoom, hadArmour), returnOnRaftAfterKilling);
- cerilSteps.addStep(hadArmour, talkToCerilAfterKilling);
- cerilSteps.addStep(new Conditions(inCultRoom, canSearchChest), retrieveArmourFromChest);
- cerilSteps.addStep(new Conditions(inCultRoom, alomoneAttackable), killAlomone);
- cerilSteps.addStep(new Conditions(inCultRoom), talkToAlomoneToKill);
- cerilSteps.addStep(new Conditions(inCultEntrance, valveStepsCeril.solved), boardRaftToKill);
- cerilSteps.addStep(valveStepsCeril.solved, enterCaveAfterValvesForCeril);
- cerilSteps.addStep(inCultEntrance, leaveCaveForValves);
-
- // TODO: 14782 0->1 may occur to represent Hazeel
-
- // Told to make poison, 223 3->4
- // Sided with Ceril:
- // 10670 1->0 occurs,
- // 14769 0->1 and 223 3->4
- ConditionalStep step4 = new ConditionalStep(this, enterCave);
- step4.addStep(sidedWithCeril, cerilSteps);
- step4.addStep(poison, hazeel4GoPoisonSteps);
- step4.addStep(inCultEntrance, getPoison);
- steps.put(4, step4);
-
- // Assuming this can only be reached in Hazeel side, but may be wrong
- steps.put(5, goTalkToClivetAfterPoison);
-
- ConditionalStep step6And7 = new ConditionalStep(this, goGetScroll);
- step6And7.addStep(sidedWithCeril, cerilSteps);
- steps.put(6, step6And7);
- steps.put(7, step6And7);
-
- return steps;
+ cultEntrance = new Zone(new WorldPoint(2565, 9679, 0), new WorldPoint(2571, 9685, 0));
+ cultRoom = new Zone(new WorldPoint(2600, 9666, 0), new WorldPoint(2615, 9693, 0));
+ manorBasement = new Zone(new WorldPoint(2535, 9692, 0), new WorldPoint(2550, 9703, 0));
+ manorF1 = new Zone(new WorldPoint(2564, 3267, 1), new WorldPoint(2576, 3275, 1));
+ manorF2 = new Zone(new WorldPoint(2564, 3267, 2), new WorldPoint(2576, 3275, 2));
+ manorF2LadderRoom = new Zone(new WorldPoint(2573, 3271, 1), new WorldPoint(2571, 3271, 1));
}
@Override
protected void setupRequirements()
{
- givenAlomoneScroll = new VarbitRequirement(14780, 1);
- givenArmour = new VarbitRequirement(14772, 1);
+ givenAlomoneScroll = new VarbitRequirement(VarbitID.HAZEELCULT_GIVEN_SCROLL, 1);
+ givenArmour = new VarbitRequirement(VarbitID.HAZEELCULT_GIVEN_ARMOUR, 1);
+ alomoneAttackable = new VarbitRequirement(VarbitID.HAZEELCULT_ALOMONE_VIS, 1);
+ canSearchChest = new VarbitRequirement(VarbitID.HAZEELCULT_ALOMONE_VIS, 2);
+ sidedWithCeril = new VarbitRequirement(VarbitID.HAZEELCULT_CLIVET_LOCATION, 1);
+ receivedMark = new VarbitRequirement(VarbitID.HAZEELCULT_GIVEN_AMULET, 1);
+ talkedToCerilAfterPoison = new VarbitRequirement(VarbitID.HAZEELCULT_POISON_SUCCESS, 1);
+ butlerArrested = new VarbitRequirement(VarbitID.HAZEELCULT_JONES_CUTSCENE, 1);
ardougneCloak = new ItemRequirement("Ardougne cloak for Monastery teleport", ItemID.ARDY_CAPE_EASY).isNotConsumed();
ardougneCloak.addAlternates(ItemID.ARDY_CAPE_MEDIUM, ItemID.ARDY_CAPE_HARD, ItemID.ARDY_CAPE_ELITE);
@@ -197,28 +184,21 @@ protected void setupRequirements()
inManorBasement = new ZoneRequirement(manorBasement);
inManorF1 = new ZoneRequirement(manorF1);
inManorF2 = new ZoneRequirement(manorF2);
-
- alomoneAttackable = new VarbitRequirement(14770, 1);
- canSearchChest = new VarbitRequirement(14770, 2);
+ inManorF2LadderRoom = new ZoneRequirement(manorF2LadderRoom);
// Got armour, 14778 0->1
hadArmour = or(givenArmour, carnilleanArmour.alsoCheckBank(questBank));
- talkedToCerilAfterPoison = new VarbitRequirement(14775, 1);
// Talking to Ceril
// 3679 -1 -> 71
armourNearby = new ItemOnTileRequirement(carnilleanArmour);
- sidedWithCeril = new VarbitRequirement(14769, 1);
- // Mark also could be 14776
- receivedMark = new VarbitRequirement(14777, 1);
// 14779 1->2, asked to go talk to the butler
onStep7 = new VarplayerRequirement(QuestVarPlayer.QUEST_HAZEEL_CULT.getId(), 7);
// Butler found out
// 14773 1
// 14774 1
- butlerArrested = new VarbitRequirement(14773, 1);
/* Ceril var changes */
// Sided with Ceril
@@ -235,34 +215,23 @@ protected void setupRequirements()
// 14770 1->2
}
- @Override
- protected void setupZones()
- {
- cultEntrance = new Zone(new WorldPoint(2565, 9679, 0), new WorldPoint(2571, 9685, 0));
- cultRoom = new Zone(new WorldPoint(2600, 9666, 0), new WorldPoint(2615, 9693, 0));
- manorF1 = new Zone(new WorldPoint(2564, 3267, 1), new WorldPoint(2576, 3275, 1));
- manorF2 = new Zone(new WorldPoint(2564, 3267, 2), new WorldPoint(2576, 3275, 2));
- manorBasement = new Zone(new WorldPoint(2535, 9692, 0), new WorldPoint(2550, 9703, 0));
- }
-
public void setupSteps()
{
talkToCeril = new NpcStep(this, NpcID.SIR_CERIL_CARNILLEAN_VIS, new WorldPoint(2569, 3275, 0),
"Talk to Ceril Carnillean in the south west of East Ardougne.");
talkToCeril.addDialogSteps("What's wrong?", "Yes.");
+
enterCave = new ObjectStep(this, ObjectID.HAZEELCULTCAVE, new WorldPoint(2587, 3235, 0),
- "Enter the cave south east of the Clock Tower.");
+ "Enter the cave south east of the Clock Tower entrance.");
talkToClivet = new NpcStep(this, NpcID.CLIVET_HAZEEL_CULTIST_VIS, new WorldPoint(2569, 9682, 0),
"Talk to Clivet. You can choose to either side with him or with the Carnilleans.");
- talkToClivet.addDialogSteps("Alright, I've made my decision.", "I have no more questions.", "What do you mean?");
+ talkToClivet.addDialogSteps("Alright, I've made my decision.", "Actually, I have no questions.", "I have no more questions.", "What do you mean?");
talkToClivet.addDialogChange("I won't help you.", "I won't help you. (side with Ceril)");
talkToClivet.addDialogChange("Alright, how do I do it?", "Alright, how do I do it? (side with Hazeel)");
talkToClivet.addDialogChange("I'll help you.", "I'll help you. (side with Hazeel)");
leaveCaveForValves = new ObjectStep(this, ObjectID.HAZEELCULTSTAIRS, new WorldPoint(2571, 9684, 0),
"Go back to the surface.");
- valveStepsHazeel = new HazeelValves(this);
-
valveStepsCeril = new HazeelValves(this);
valveStepsCeril.addSubSteps(leaveCaveForValves);
@@ -281,6 +250,8 @@ public void setupSteps()
talkToCerilAfterPoison = new NpcStep(this, NpcID.SIR_CERIL_CARNILLEAN_VIS, new WorldPoint(2569, 3275, 0),
"Talk to Ceril Carnillean to confirm the results of the poison.");
+ valveStepsHazeel = new HazeelValves(this);
+
enterCaveAfterPoison = new ObjectStep(this, ObjectID.HAZEELCULTCAVE, new WorldPoint(2587, 3235, 0),
"Return to Clivet in the cave south of East Ardougne.");
talkToClivetAfterPoison = new NpcStep(this, NpcID.CLIVET_HAZEEL_CULTIST_VIS, new WorldPoint(2569, 9682, 0),
@@ -305,14 +276,23 @@ public void setupSteps()
"Go back upstairs from the kitchen.", key);
goToF1WithKey = new ObjectStep(this, ObjectID.CARNILLEAN_STAIRS, new WorldPoint(2569, 3269, 0),
"Go upstairs in the house.", key);
+
+ knockOnWall = new ObjectStep(this, ObjectID.CARNILLEANBOOKCASE_KNOCK, new WorldPoint(2572, 3270, 1), "Knock the wall to enter the hidden room.");
+ knockOnWall.addDialogStep("Yes.");
+
climbLadderWithKey = new ObjectStep(this, ObjectID.LADDER, new WorldPoint(2573, 3271, 1),
"Knock the wall to enter the hidden room, then climb up the ladder.", key);
climbLadderWithKey.addDialogStep("Yes.");
+ climbLadderWithKey.addSubSteps(knockOnWall);
+
searchChestForScroll = new ObjectStep(this, ObjectID.CARNILLEANSHUTCHEST, new WorldPoint(2571, 3269, 2),
"Open the chest.", key.highlighted());
searchChestForScroll.addIcon(ItemID.CARNILLEANCHESTKEY);
goF2ToF1WithScroll = new ObjectStep(this, ObjectID.LADDERTOP, new WorldPoint(2573, 3271, 2),
"Return to Alomone with the scroll.", hazeelScroll);
+
+ knockOnWallToExit = new ObjectStep(this, ObjectID.CARNILLEANBOOKCASE_KNOCK, new WorldPoint(2572, 3270, 1), "Return to Alomone with the scroll.", hazeelScroll);
+
goF1ToF0WithScroll = new ObjectStep(this, ObjectID.CARNILLEAN_STAIRSTOP, new WorldPoint(2569, 3269, 1),
"Return to Alomone with the scroll.", hazeelScroll);
enterCaveWithScroll = new ObjectStep(this, ObjectID.HAZEELCULTCAVE, new WorldPoint(2587, 3235, 0),
@@ -320,9 +300,10 @@ public void setupSteps()
boardRaftWithScroll = new ObjectStep(this, ObjectID.HAZEELSEWERRAFT, new WorldPoint(2568, 9679, 0),
"Return to Alomone with the scroll. If the raft doesn't go to Alomone, repeat the prior valve steps first.",
hazeelScroll);
+
giveAlomoneScroll = new NpcStep(this, NpcID.ALOMONE_HAZEEL_CULTIST_1OP, new WorldPoint(2607, 9673, 0),
"Return to Alomone with the scroll.", hazeelScroll);
- giveAlomoneScroll.addSubSteps(goF2ToF1WithScroll, goF1ToF0WithScroll, enterCaveWithScroll, boardRaftWithScroll);
+ giveAlomoneScroll.addSubSteps(goF2ToF1WithScroll, knockOnWallToExit, goF1ToF0WithScroll, enterCaveWithScroll, boardRaftWithScroll);
// Ceril side
enterCaveAfterValvesForCeril = new ObjectStep(this, ObjectID.HAZEELCULTCAVE, new WorldPoint(2587, 3235, 0),
@@ -357,23 +338,122 @@ public void setupSteps()
"Go upstairs in the house.");
searchCupboardForEvidence = new ObjectStep(this, ObjectID.HAZEELCBSHUT, new WorldPoint(2574, 3267, 1),
"Search the cupboard in the east room.");
- ((ObjectStep) searchCupboardForEvidence).addAlternateObjects(ObjectID.HAZEELCBOPEN);
+ searchCupboardForEvidence.addAlternateObjects(ObjectID.HAZEELCBOPEN);
searchCupboardForEvidence.addSubSteps(goUpToCupboard);
talkToCerilToFinish = new NpcStep(this, NpcID.SIR_CERIL_CARNILLEAN_VIS, new WorldPoint(2569, 3275, 0),
"Talk to Ceril to finish the quest.");
}
+ @Override
+ public Map loadSteps()
+ {
+ // TODO: Should the valves section implement the PuzzleWrapper?
+ initializeRequirements();
+ setupSteps();
+ Map steps = new HashMap<>();
+
+ steps.put(0, talkToCeril);
+
+ // Got poison first time, 14782 0->1
+ // Have poison currently (10670 0->1, back to 0 if you talk to Clivet without poison)
+ // Is also for recieved the mark?
+
+ var goTalkToClivet = new ConditionalStep(this, enterCave);
+ goTalkToClivet.addStep(inCultEntrance, talkToClivet);
+ steps.put(2, goTalkToClivet);
+ steps.put(3, goTalkToClivet);
+
+ // Help Hazeel
+ var hazeel4GoPoisonSteps = new ConditionalStep(this, enterKitchen);
+ // 14779 0->1 when used poison on range
+ hazeel4GoPoisonSteps.addStep(inManorBasement, usePoisonOnRange);
+ hazeel4GoPoisonSteps.addStep(inCultEntrance, leaveCaveWithPoison);
+
+ // TODO: Verify if this is needed
+ var goTalkAfterPoison = new ConditionalStep(this, talkToCerilAfterPoison);
+ goTalkAfterPoison.addStep(inManorBasement, leaveKitchen);
+
+ var goTalkToClivetAfterPoison = new ConditionalStep(this, goTalkAfterPoison);
+ // Probably don't actually need the mark but nice to ensure the player gets it
+ goTalkToClivetAfterPoison.addStep(and(inCultRoom, hazeelMark.alsoCheckBank(questBank)), talkToAlomone);
+ goTalkToClivetAfterPoison.addStep(and(inCultEntrance, valveStepsHazeel.solved, hazeelMark.alsoCheckBank(questBank)), boardRaftAfterPoison);
+ goTalkToClivetAfterPoison.addStep(and(inCultEntrance, valveStepsHazeel.solved), talkToClivetAfterPoison);
+ goTalkToClivetAfterPoison.addStep(valveStepsHazeel.solved, enterCaveAfterPoison);
+ goTalkToClivetAfterPoison.addStep(talkedToCerilAfterPoison, valveStepsHazeel);
+
+ var hadScroll = or(hazeelScroll.alsoCheckBank(questBank), givenAlomoneScroll);
+ var hazeelSteps = new ConditionalStep(this, enterKitchenAfterButler);
+ hazeelSteps.addStep(and(inCultRoom, hadScroll), giveAlomoneScroll);
+ hazeelSteps.addStep(and(inCultEntrance, hadScroll), boardRaftWithScroll);
+ hazeelSteps.addStep(and(inManorF1, hadScroll, inManorF2LadderRoom), knockOnWallToExit);
+ hazeelSteps.addStep(and(inManorF1, hadScroll), goF1ToF0WithScroll);
+ hazeelSteps.addStep(and(inManorF2, hadScroll), goF2ToF1WithScroll);
+ hazeelSteps.addStep(hadScroll, enterCaveWithScroll);
+ hazeelSteps.addStep(and(inManorF2, key), searchChestForScroll);
+ hazeelSteps.addStep(and(inManorF1, key, inManorF2LadderRoom), climbLadderWithKey);
+ hazeelSteps.addStep(and(inManorF1, key), knockOnWall);
+ hazeelSteps.addStep(and(inManorBasement, key), leaveKitchenWithKey);
+ hazeelSteps.addStep(key, goToF1WithKey);
+ hazeelSteps.addStep(inManorBasement, searchCrateForKey);
+ hazeelSteps.addStep(inCultEntrance, leaveCaveAfterAlomone);
+ hazeelSteps.addStep(inCultRoom, returnOnRaftAfterAlomone);
+
+ // Ceril side
+ var cerilSteps = new ConditionalStep(this, valveStepsCeril);
+ cerilSteps.addStep(and(onStep7, butlerArrested), talkToCerilToFinish);
+ cerilSteps.addStep(and(onStep7, inManorF1), searchCupboardForEvidence);
+ cerilSteps.addStep(onStep7, goUpToCupboard);
+ cerilSteps.addStep(and(inCultEntrance, hadArmour), leaveCaveAfterKilling);
+ cerilSteps.addStep(and(inCultRoom, hadArmour), returnOnRaftAfterKilling);
+ cerilSteps.addStep(hadArmour, talkToCerilAfterKilling);
+ cerilSteps.addStep(and(inCultRoom, canSearchChest), retrieveArmourFromChest);
+ cerilSteps.addStep(and(inCultRoom, alomoneAttackable), killAlomone);
+ cerilSteps.addStep(and(inCultRoom), talkToAlomoneToKill);
+ cerilSteps.addStep(and(inCultEntrance, valveStepsCeril.solved), boardRaftToKill);
+ cerilSteps.addStep(valveStepsCeril.solved, enterCaveAfterValvesForCeril);
+ cerilSteps.addStep(inCultEntrance, leaveCaveForValves);
+
+ // TODO: 14782 0->1 may occur to represent Hazeel
+
+ // Told to make poison, 223 3->4
+ // Sided with Ceril:
+ // 10670 1->0 occurs,
+ // 14769 0->1 and 223 3->4
+ var step4 = new ConditionalStep(this, enterCave);
+ step4.addStep(sidedWithCeril, cerilSteps);
+ step4.addStep(poison, hazeel4GoPoisonSteps);
+ step4.addStep(inCultEntrance, getPoison);
+ steps.put(4, step4);
+
+ // Assuming this can only be reached in Hazeel side, but may be wrong
+ steps.put(5, goTalkToClivetAfterPoison);
+
+ var step6 = new ConditionalStep(this, hazeelSteps);
+ step6.addStep(sidedWithCeril, cerilSteps);
+ steps.put(6, step6);
+
+ var step7 = new ConditionalStep(this, hazeelSteps);
+ step7.addStep(sidedWithCeril, cerilSteps);
+ steps.put(7, step7);
+
+ return steps;
+ }
+
@Override
public List getItemRecommended()
{
- return Collections.singletonList(ardougneCloak);
+ return List.of(
+ ardougneCloak
+ );
}
@Override
public List getCombatRequirements()
{
- return Collections.singletonList("Alomone (level 13) if taking Ceril's side");
+ return List.of(
+ "Alomone (level 13) if taking Ceril's side"
+ );
}
@Override
@@ -385,13 +465,15 @@ public QuestPointReward getQuestPointReward()
@Override
public List getExperienceRewards()
{
- return Collections.singletonList(new ExperienceReward(Skill.THIEVING, 1500));
+ return List.of(
+ new ExperienceReward(Skill.THIEVING, 1500)
+ );
}
@Override
public List getItemRewards()
{
- return Arrays.asList(
+ return List.of(
new ItemReward("(2,005 if siding with Ceril) Coins", ItemID.COINS, 2000),
new ItemReward("Hazeel's mark (if you sided with Hazeel)", ItemID.MARK_OF_HAZEEL),
new ItemReward("Carnillean armour (if you sided with Ceril)", ItemID.CARNILLEAN_ARMOUR)
@@ -401,31 +483,39 @@ public List getItemRewards()
@Override
public List getNotes()
{
- return Collections.singletonList("If you sided with Hazeel and are being guided to help Ceril, just click the" +
- " box in the Ceril sidebar header to switch to Hazeel");
+ return List.of(
+ "If you sided with Hazeel and are being guided to help Ceril, just click the box in the Ceril sidebar header to switch to Hazeel"
+ );
}
@Override
public List getPanels()
{
- List allSteps = new ArrayList<>();
- allSteps.add(new PanelDetails("Starting off", Arrays.asList(talkToCeril, enterCave, talkToClivet)));
+ var sections = new ArrayList();
+
+ sections.add(new PanelDetails("Starting off", List.of(
+ talkToCeril,
+ enterCave,
+ talkToClivet
+ )));
- List cerilStepsSidebar = new ArrayList<>(Collections.singletonList(leaveCaveForValves));
+ var cerilStepsSidebar = new ArrayList(Collections.singletonList(leaveCaveForValves));
cerilStepsSidebar.addAll(valveStepsCeril.getDisplaySteps());
cerilStepsSidebar.addAll(Arrays.asList(enterCaveAfterValvesForCeril, boardRaftToKill, talkToAlomoneToKill, killAlomone,
retrieveArmourFromChest, talkToCerilAfterKilling, talkToJonesAfterKilling, searchCupboardForEvidence, talkToCerilToFinish));
PanelDetails cerilPanel = new PanelDetails("Siding with Ceril", cerilStepsSidebar);
- allSteps.add(cerilPanel);
+ // TODO: add locking step to make it lockable?
+ sections.add(cerilPanel);
- List hazeelSteps = new ArrayList<>(Arrays.asList(getPoison, leaveCaveWithPoison, enterKitchen,
+ var hazeelSteps = new ArrayList(Arrays.asList(getPoison, leaveCaveWithPoison, enterKitchen,
usePoisonOnRange, leaveKitchen, talkToCerilAfterPoison));
hazeelSteps.addAll(valveStepsHazeel.getDisplaySteps());
hazeelSteps.addAll(Arrays.asList(talkToClivetAfterPoison, boardRaftAfterPoison, talkToAlomone,
searchCrateForKey, leaveKitchenWithKey, goToF1WithKey, climbLadderWithKey, searchChestForScroll,
giveAlomoneScroll));
- allSteps.add(new PanelDetails("Siding with Hazeel", hazeelSteps));
+ // TODO: add locking step to make it lockable?
+ sections.add(new PanelDetails("Siding with Hazeel", hazeelSteps));
- return allSteps;
+ return sections;
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/hazeelcult/HazeelValves.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/hazeelcult/HazeelValves.java
index 455283ae789..0d4f349edb6 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/hazeelcult/HazeelValves.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/hazeelcult/HazeelValves.java
@@ -241,6 +241,7 @@ protected void setupSteps()
turnValve1 = new ObjectStep(getQuestHelper(), ObjectID.SEWERVALVE1, new WorldPoint(2562, 3247, 0),
"Turn the valve west of the Clocktower to the right.");
turnValve1.addDialogStep("Turn it to the right.");
+ turnValve1.addSubSteps(catchState);
turnValve2 = new ObjectStep(getQuestHelper(), ObjectID.SEWERVALVE2, new WorldPoint(2572, 3263, 0),
"Turn the valve next to the Carnillean home to the right.");
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/heroesquest/HeroesQuest.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/heroesquest/HeroesQuest.java
index 6cbf9736fd4..a8a70fd1175 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/heroesquest/HeroesQuest.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/heroesquest/HeroesQuest.java
@@ -296,7 +296,7 @@ public void setupConditions()
gottenPapers = new VarplayerRequirement(VarPlayerID.HEROQUEST, 9, Operation.GREATER_EQUAL);
enteredMansion = new VarplayerRequirement(VarPlayerID.HEROQUEST, 10, Operation.GREATER_EQUAL);
talkedToGrip = new VarplayerRequirement(VarPlayerID.HEROQUEST, 11, Operation.GREATER_EQUAL);
- unlockedCandlestickBlackArm = new VarplayerRequirement(188, 12);
+ unlockedCandlestickBlackArm = new VarplayerRequirement(VarPlayerID.HEROQUEST, 12);
finishedBlackArm = new VarplayerRequirement(VarPlayerID.HEROQUEST, 13, Operation.GREATER_EQUAL);
talkedToStraven = new VarplayerRequirement(VarPlayerID.HEROQUEST, 2, Operation.GREATER_EQUAL);
talkedToAlfonse = new VarplayerRequirement(VarPlayerID.HEROQUEST, 3, Operation.GREATER_EQUAL);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/horrorfromthedeep/HorrorFromTheDeep.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/horrorfromthedeep/HorrorFromTheDeep.java
index 6e4e9b78283..2fd61bd18db 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/horrorfromthedeep/HorrorFromTheDeep.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/horrorfromthedeep/HorrorFromTheDeep.java
@@ -54,6 +54,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import java.util.*;
@@ -188,22 +189,22 @@ public void setupConditions()
inBasement = new ZoneRequirement(basement);
inDagCave = new ZoneRequirement(dagCave);
- repairedBridge1 = new VarbitRequirement(36, 1);
- repairedBridge2 = new VarbitRequirement(37, 1);
- gotKey = new VarbitRequirement(38, 1);
+ repairedBridge1 = new VarbitRequirement(VarbitID.HORRORBRIDGELEFT, 1);
+ repairedBridge2 = new VarbitRequirement(VarbitID.HORRORBRIDGERIGHT, 1);
+ gotKey = new VarbitRequirement(VarbitID.HORRORAGILITYKEY, 1);
- usedTar = new VarbitRequirement(46, 1);
- usedTinderbox = new VarbitRequirement(48, 1);
- usedGlass = new VarbitRequirement(47, 1);
+ usedTar = new VarbitRequirement(VarbitID.HORRORTAR, 1);
+ usedTinderbox = new VarbitRequirement(VarbitID.HORRORLIGHT, 1);
+ usedGlass = new VarbitRequirement(VarbitID.HORRORGLASS, 1);
- notUsedAirRune = new Conditions(LogicType.NOR, new VarbitRequirement(43, 1));
- notUsedWaterRune = new Conditions(LogicType.NOR, new VarbitRequirement(41, 1));
- notUsedEarthRune = new Conditions(LogicType.NOR, new VarbitRequirement(42, 1));
- notUsedFireRune = new Conditions(LogicType.NOR, new VarbitRequirement(40, 1));
- notUsedSword = new Conditions(LogicType.NOR, new VarbitRequirement(44, 1));
- notUsedArrow = new Conditions(LogicType.NOR, new VarbitRequirement(45, 1));
+ notUsedAirRune = new Conditions(LogicType.NOR, new VarbitRequirement(VarbitID.HORRORAIR, 1));
+ notUsedWaterRune = new Conditions(LogicType.NOR, new VarbitRequirement(VarbitID.HORRORWATER, 1));
+ notUsedEarthRune = new Conditions(LogicType.NOR, new VarbitRequirement(VarbitID.HORROREARTH, 1));
+ notUsedFireRune = new Conditions(LogicType.NOR, new VarbitRequirement(VarbitID.HORRORFIRE, 1));
+ notUsedSword = new Conditions(LogicType.NOR, new VarbitRequirement(VarbitID.HORRORSWORD, 1));
+ notUsedArrow = new Conditions(LogicType.NOR, new VarbitRequirement(VarbitID.HORRORARROW, 1));
- doorUnlocked = new VarbitRequirement(35, 1);
+ doorUnlocked = new VarbitRequirement(VarbitID.HORRORDOOR, 1);
dagannothNearby = new NpcHintArrowRequirement(NpcID.HORROR_DAGANNOTH_JR4);
motherNearby = new NpcHintArrowRequirement(NpcID.HORROR_DAGGANOTH_AIRA, NpcID.HORROR_DAGGANOTH_AIRB,
NpcID.HORROR_DAGGANOTH_AIRC, NpcID.HORROR_DAGGANOTH_AIR, NpcID.HORROR_DAGGANOTH_WATER,
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/icthlarinslittlehelper/DoorPuzzleStep.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/icthlarinslittlehelper/DoorPuzzleStep.java
index 1584be58e07..dbd7fa79a2b 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/icthlarinslittlehelper/DoorPuzzleStep.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/icthlarinslittlehelper/DoorPuzzleStep.java
@@ -29,6 +29,7 @@
import net.runelite.client.plugins.microbot.questhelper.steps.QuestStep;
import net.runelite.api.events.GameTick;
import net.runelite.api.gameval.InterfaceID;
+import net.runelite.api.gameval.VarbitID;
import net.runelite.api.widgets.Widget;
import net.runelite.client.eventbus.Subscribe;
@@ -89,10 +90,9 @@ public void onGameTick(GameTick event)
private void updateSolvedPositionState()
{
- int START_VARBIT_ID = 420;
for (int i = 0; i < 20; i++)
{
- currentState[i] = (1 + client.getVarbitValue(START_VARBIT_ID + i)) % 2;
+ currentState[i] = (1 + client.getVarbitValue(VarbitID.ICS_TILE1 + i)) % 2;
}
if (Arrays.equals(currentState, lastState))
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/icthlarinslittlehelper/IcthlarinsLittleHelper.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/icthlarinslittlehelper/IcthlarinsLittleHelper.java
index c94483d0fbc..28a7d5e2312 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/icthlarinslittlehelper/IcthlarinsLittleHelper.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/icthlarinslittlehelper/IcthlarinsLittleHelper.java
@@ -255,27 +255,27 @@ protected void setupRequirements()
public void setupConditions()
{
puzzleOpen = new WidgetModelRequirement(147, 3, 6474);
- givenToken = new VarbitRequirement(450, 1);
+ givenToken = new VarbitRequirement(VarbitID.ICS_GIVENSPHINXSTATUE, 1);
- hasHetJar = new VarbitRequirement(397, 1);
- hasCrondisJar = new VarbitRequirement(397, 4);
+ hasHetJar = new VarbitRequirement(VarbitID.ICS_LITTLE_JAR_MULTI, 1);
+ hasCrondisJar = new VarbitRequirement(VarbitID.ICS_LITTLE_JAR_MULTI, 4);
// TODO: Verify varbit values for apmeken/scarabas
- hasApmekenJar = new VarbitRequirement(397, 3);
- hasScarabasJar = new VarbitRequirement(397, 2);
+ hasApmekenJar = new VarbitRequirement(VarbitID.ICS_LITTLE_JAR_MULTI, 3);
+ hasScarabasJar = new VarbitRequirement(VarbitID.ICS_LITTLE_JAR_MULTI, 2);
killedGuardian = new VarbitRequirement(VarbitID.ICS_LITTLE_VAR, 11, Operation.GREATER_EQUAL);
// picked up het, 404 = 1
// picked up apmeken, 405 = 1
- talkedToEmbalmer = new VarbitRequirement(399, 1);
+ talkedToEmbalmer = new VarbitRequirement(VarbitID.ICS_METEMBALMER, 1);
- givenSalt = new VarbitRequirement(401, 1);
- givenSap = new VarbitRequirement(402, 1);
- givenLinen = new VarbitRequirement(403, 1);
- givenEmbalmerAllItems = new VarbitRequirement(400, 7);
+ givenSalt = new VarbitRequirement(VarbitID.ICS_GOTSALT, 1);
+ givenSap = new VarbitRequirement(VarbitID.ICS_GOTSAP, 1);
+ givenLinen = new VarbitRequirement(VarbitID.ICS_GOTLINEN, 1);
+ givenEmbalmerAllItems = new VarbitRequirement(VarbitID.ICS_LITTLE_EMBALMER_MULTI, 7);
- talkedToCarpenter = new VarbitRequirement(412, 1);
- givenCarpenterLogs = new VarbitRequirement(398, 1);
+ talkedToCarpenter = new VarbitRequirement(VarbitID.ICS_METCARPENTER, 1);
+ givenCarpenterLogs = new VarbitRequirement(VarbitID.ICS_LITTLE_CARPENTER_MULTI, 1);
possessedPriestNearby = new NpcCondition(NpcID.ICS_LITTLE_POSSESSEDPRIEST);
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/impcatcher/ImpCatcher.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/impcatcher/ImpCatcher.java
index cab9996122d..4c90a010256 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/impcatcher/ImpCatcher.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/impcatcher/ImpCatcher.java
@@ -33,50 +33,53 @@
import net.runelite.client.plugins.microbot.questhelper.rewards.ExperienceReward;
import net.runelite.client.plugins.microbot.questhelper.rewards.ItemReward;
import net.runelite.client.plugins.microbot.questhelper.rewards.QuestPointReward;
-import net.runelite.client.plugins.microbot.questhelper.steps.*;
+import net.runelite.client.plugins.microbot.questhelper.steps.ConditionalStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.DetailedQuestStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.NpcStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.ObjectStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.QuestStep;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import net.runelite.api.Skill;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
-import java.util.*;
-
public class ImpCatcher extends BasicQuestHelper
{
- //Items Required
- ItemRequirement blackBead, whiteBead, redBead, yellowBead;
-
- QuestStep moveToTower, climbTower, turnInQuest, collectBeads;
-
- Zone towerSecond, towerThird;
-
- ZoneRequirement inTowerSecond, inTowerThird;
+ // Required items
+ ItemRequirement blackBead;
+ ItemRequirement whiteBead;
+ ItemRequirement redBead;
+ ItemRequirement yellowBead;
+
+ // Zones
+ Zone towerSecond;
+ Zone towerThird;
+
+ // Miscellaneus requirements
+ ZoneRequirement inTowerSecond;
+ ZoneRequirement inTowerThird;
+
+ // Steps
+ QuestStep moveToTower;
+ QuestStep climbUpF1;
+ QuestStep turnInQuest;
+ QuestStep collectBeads;
@Override
- public Map loadSteps()
+ protected void setupZones()
{
- initializeRequirements();
- setupSteps();
-
- Map steps = new HashMap<>();
-
- ConditionalStep doQuest = new ConditionalStep(this, collectBeads);
- doQuest.addStep(new Conditions(blackBead,whiteBead,redBead,yellowBead, inTowerThird), turnInQuest);
- doQuest.addStep(new Conditions(blackBead,whiteBead,redBead,yellowBead, inTowerSecond), climbTower);
- doQuest.addStep(new Conditions(blackBead,whiteBead,redBead,yellowBead), moveToTower);
-
- steps.put(0, doQuest);
-
- steps.put(1, doQuest);
-
- return steps;
+ towerSecond = new Zone(new WorldPoint(3089, 3176, 1), new WorldPoint(3126, 3146, 1));
+ towerThird = new Zone(new WorldPoint(3089, 3176, 2), new WorldPoint(3126, 3146, 2));
}
-
-
@Override
- protected void setupRequirements() {
+ protected void setupRequirements()
+ {
blackBead = new ItemRequirement("Black bead", ItemID.BLACK_BEAD);
whiteBead = new ItemRequirement("White bead", ItemID.WHITE_BEAD);
redBead = new ItemRequirement("Red bead", ItemID.RED_BEAD);
@@ -86,13 +89,16 @@ protected void setupRequirements() {
inTowerThird = new ZoneRequirement(towerThird);
}
- public void setupSteps(){
+ public void setupSteps()
+ {
collectBeads = new DetailedQuestStep(this, "Collect one of each bead. You can kill imps for these beads, or buy them on the Grand Exchange.",
blackBead, whiteBead, redBead, yellowBead);
moveToTower = new ObjectStep(this, ObjectID.FAI_WIZTOWER_SPIRALSTAIRS, new WorldPoint(3103, 3159, 0),
"Head to the Wizards' Tower and climb up the staircase with the required beads.", blackBead, whiteBead, redBead, yellowBead);
- climbTower = new ObjectStep(this, ObjectID.FAI_WIZTOWER_SPIRALSTAIRS_MIDDLE, new WorldPoint(3103, 3159, 1),
- "Climb the staircase again.", blackBead, whiteBead, redBead, yellowBead);
+ climbUpF1 = new ObjectStep(this, ObjectID.FAI_WIZTOWER_SPIRALSTAIRS_MIDDLE, new WorldPoint(3103, 3159, 1),
+ "Head to the Wizards' Tower and climb up the staircase with the required beads.", blackBead, whiteBead, redBead, yellowBead);
+ climbUpF1.addDialogStep("Up");
+ moveToTower.addSubSteps(climbUpF1);
turnInQuest = new NpcStep(this, NpcID.WIZARD_MIZGOG_QUEST, new WorldPoint(3103, 3163, 2),
"Talk to Wizard Mizgog with the required beads to finish the quest.",
blackBead, whiteBead, redBead, yellowBead);
@@ -100,30 +106,34 @@ public void setupSteps(){
}
@Override
- protected void setupZones(){
- towerSecond = new Zone(new WorldPoint(3089, 3176, 1), new WorldPoint(3126, 3146, 1));
- towerThird = new Zone(new WorldPoint(3089, 3176, 2), new WorldPoint(3126, 3146, 2));
- }
-
- @Override
- public List getItemRequirements()
+ public Map loadSteps()
{
- ArrayList reqs = new ArrayList<>();
- reqs.add(blackBead);
- reqs.add(whiteBead);
- reqs.add(redBead);
- reqs.add(yellowBead);
+ initializeRequirements();
+ setupSteps();
+
+ var steps = new HashMap();
+
+ var doQuest = new ConditionalStep(this, collectBeads);
+ doQuest.addStep(new Conditions(blackBead, whiteBead, redBead, yellowBead, inTowerThird), turnInQuest);
+ doQuest.addStep(new Conditions(blackBead, whiteBead, redBead, yellowBead, inTowerSecond), climbUpF1);
+ doQuest.addStep(new Conditions(blackBead, whiteBead, redBead, yellowBead), moveToTower);
- return reqs;
+ steps.put(0, doQuest);
+
+ steps.put(1, doQuest);
+
+ return steps;
}
@Override
- public List getPanels()
+ public List getItemRequirements()
{
- List allSteps = new ArrayList<>();
- allSteps.add(new PanelDetails("Bring Mizgog his beads", Arrays.asList(collectBeads, moveToTower, climbTower, turnInQuest),
- blackBead, whiteBead, redBead, yellowBead));
- return allSteps;
+ return List.of(
+ blackBead,
+ whiteBead,
+ redBead,
+ yellowBead
+ );
}
@Override
@@ -135,18 +145,43 @@ public QuestPointReward getQuestPointReward()
@Override
public List getExperienceRewards()
{
- return Collections.singletonList(new ExperienceReward(Skill.MAGIC, 875));
+ return List.of(
+ new ExperienceReward(Skill.MAGIC, 875)
+ );
}
@Override
public List getItemRewards()
{
- return Collections.singletonList(new ItemReward("An Amulet of Accuracy", ItemID.AMULET_OF_ACCURACY, 1));
+ return List.of(
+ new ItemReward("An Amulet of Accuracy", ItemID.AMULET_OF_ACCURACY, 1)
+ );
}
@Override
public List getCombatRequirements()
{
- return Collections.singletonList("Imps (level 2) if you plan on collecting the beads yourself");
+ return List.of(
+ "Imps (level 2) if you plan on collecting the beads yourself"
+ );
+ }
+
+ @Override
+ public List getPanels()
+ {
+ var steps = new ArrayList();
+
+ steps.add(new PanelDetails("Bring Mizgog his beads", List.of(
+ collectBeads,
+ moveToTower,
+ turnInQuest
+ ), List.of(
+ blackBead,
+ whiteBead,
+ redBead,
+ yellowBead
+ )));
+
+ return steps;
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/inaidofthemyreque/FillBurghCrate.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/inaidofthemyreque/FillBurghCrate.java
index f97298e4eb5..f672d0ff405 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/inaidofthemyreque/FillBurghCrate.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/inaidofthemyreque/FillBurghCrate.java
@@ -30,6 +30,7 @@
import net.runelite.client.plugins.microbot.questhelper.steps.DetailedQuestStep;
import net.runelite.api.events.GameTick;
import net.runelite.api.gameval.ItemID;
+import net.runelite.api.gameval.VarbitID;
import net.runelite.client.eventbus.Subscribe;
import java.util.Arrays;
@@ -66,9 +67,9 @@ public void onGameTick(GameTick event)
protected void updateSteps()
{
- int numBronzeAxeNeeded = 10 - client.getVarbitValue(1991);
- int numSnailOrMackerelNeeded = 10 - client.getVarbitValue(1992);
- int numTinderboxNeeded = 3 - client.getVarbitValue(1993);
+ int numBronzeAxeNeeded = 10 - client.getVarbitValue(VarbitID.BURGH_AXES_CRATE);
+ int numSnailOrMackerelNeeded = 10 - client.getVarbitValue(VarbitID.BURGH_FOOD_CRATE);
+ int numTinderboxNeeded = 3 - client.getVarbitValue(VarbitID.BURGH_TINDERBOX_CRATE);
tinderbox3.setQuantity(numTinderboxNeeded);
bronzeAxe10.setQuantity(numBronzeAxeNeeded);
@@ -77,7 +78,7 @@ protected void updateSteps()
if (!decidedOnSnailOrMackerel && QuestHelperQuest.IN_AID_OF_THE_MYREQUE.getVar(client) >= 165)
{
decidedOnSnailOrMackerel = true;
- if (client.getVarbitValue(1976) == 1)
+ if (client.getVarbitValue(VarbitID.BURGH_FOOD_TYPE) == 1)
{
this.setText("Fill the crate with 3 tinderboxes, 10 bronze axes, and 10 raw mackerel.");
rawSnailsOrMackerel.setDisplayItemId(ItemID.RAW_MACKEREL);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/inaidofthemyreque/InAidOfTheMyreque.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/inaidofthemyreque/InAidOfTheMyreque.java
index 20760887288..b1ceddc008a 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/inaidofthemyreque/InAidOfTheMyreque.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/inaidofthemyreque/InAidOfTheMyreque.java
@@ -364,24 +364,24 @@ public void setupConditions()
// 1979, Cornelius is banker
- filledCrate = new VarbitRequirement(1994, 938);
- addedCoal = new VarbitRequirement(1980, 2);
- litFurnace = new VarbitRequirement(1980, 3);
+ filledCrate = new VarbitRequirement(VarbitID.BURGH_CRATE_OVERSEER, 938);
+ addedCoal = new VarbitRequirement(VarbitID.BURGH_FURNACE_FIX, 2);
+ litFurnace = new VarbitRequirement(VarbitID.BURGH_FURNACE_FIX, 3);
- talkedToGadderanks = new VarbitRequirement(1995, 1);
- talkedToJuvinates = new VarbitRequirement(1997, 1);
- talkedToWiskit = new VarbitRequirement(1996, 1);
+ talkedToGadderanks = new VarbitRequirement(VarbitID.GADDERANKS_BLOOD_TITHE_CHAT, 1);
+ talkedToJuvinates = new VarbitRequirement(VarbitID.JUVE_BLOOD_TITHE_CHAT, 1);
+ talkedToWiskit = new VarbitRequirement(VarbitID.VILLAGER_BLOOD_TITHE_CHAT, 1);
- defeatedGadderanks = new VarbitRequirement(1999, 3);
+ defeatedGadderanks = new VarbitRequirement(VarbitID.JUVINATE_DEATHS, 3);
veliafReturnedToBase = new VarbitRequirement(VarbitID.BLOOD_TITHE_VISIBLE, 3, Operation.GREATER_EQUAL);
// 2001 = 1, travelling with ivan
// 2003 = 1, Ivan has silver sickle
// 2005 0-10 for food
- libraryOpen = new VarbitRequirement(1982, 1);
+ libraryOpen = new VarbitRequirement(VarbitID.BURGH_TEMPLE_TRAPDOOR, 1);
- boardsRemoved = new VarbitRequirement(1983, 1);
+ boardsRemoved = new VarbitRequirement(VarbitID.IVANDIS_TOMB_BOARDS, 1);
// 1981 1->2 when talked to Gadderanks
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/insearchofknowledge/FeedingAimeri.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/insearchofknowledge/FeedingAimeri.java
index 98e560392b8..1c0266a0171 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/insearchofknowledge/FeedingAimeri.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/insearchofknowledge/FeedingAimeri.java
@@ -32,6 +32,7 @@
import net.runelite.api.events.GameTick;
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
+import net.runelite.api.gameval.VarbitID;
import net.runelite.client.eventbus.Subscribe;
public class FeedingAimeri extends NpcStep
@@ -54,7 +55,7 @@ public void onGameTick(GameTick event)
protected void updateSteps()
{
- int numFoodUsed = client.getVarbitValue(8393);
+ int numFoodUsed = client.getVarbitValue(VarbitID.HOSDUN_AIMERI_STATUS);
food5Highlighted.setQuantity(5 - numFoodUsed);
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/insearchofknowledge/InSearchOfKnowledge.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/insearchofknowledge/InSearchOfKnowledge.java
index d5fc9a58828..6ac52a1dbd7 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/insearchofknowledge/InSearchOfKnowledge.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/insearchofknowledge/InSearchOfKnowledge.java
@@ -43,6 +43,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import java.util.*;
@@ -138,11 +139,11 @@ protected void setupZones()
public void setupConditions()
{
inDungeon = new ZoneRequirement(dungeon);
- fedAimeri = new VarbitRequirement(8393, 5);
+ fedAimeri = new VarbitRequirement(VarbitID.HOSDUN_AIMERI_STATUS, 5);
- givenSunTome = new VarbitRequirement(8405, 1);
- givenMoonTome = new VarbitRequirement(8404, 1);
- givenTempleTome = new VarbitRequirement(8406, 1);
+ givenSunTome = new VarbitRequirement(VarbitID.HOSDUN_SUN_TOME_RETURNED, 1);
+ givenMoonTome = new VarbitRequirement(VarbitID.HOSDUN_MOON_TOME_RETURNED, 1);
+ givenTempleTome = new VarbitRequirement(VarbitID.HOSDUN_TEMPLE_TOME_RETURNED, 1);
hadTempleTome = new Conditions(true, LogicType.OR,
templeTome,
@@ -154,9 +155,9 @@ public void setupConditions()
sunTome,
givenSunTome);
- repairedSun = new VarbitRequirement(8399, 4);
- repairedMoon = new VarbitRequirement(8400, 4);
- repairedTemple = new VarbitRequirement(8401, 4);
+ repairedSun = new VarbitRequirement(VarbitID.HOSDUN_SUN_PAGES, 4);
+ repairedMoon = new VarbitRequirement(VarbitID.HOSDUN_MOON_PAGES, 4);
+ repairedTemple = new VarbitRequirement(VarbitID.HOSDUN_TEMPLE_PAGES, 4);
repairedTomes = new Conditions(repairedSun, repairedMoon, repairedTemple);
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/insearchofthemyreque/InSearchOfTheMyreque.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/insearchofthemyreque/InSearchOfTheMyreque.java
index d6d3bcade99..2c90f767d9b 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/insearchofthemyreque/InSearchOfTheMyreque.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/insearchofthemyreque/InSearchOfTheMyreque.java
@@ -214,9 +214,9 @@ protected void setupZones()
public void setupConditions()
{
hasEnoughPouch = druidPouch5;
- repairedBridge1 = new VarbitRequirement(176, 1);
- repairedBridge2 = new VarbitRequirement(177, 1);
- repairedBridge3 = new VarbitRequirement(178, 1);
+ repairedBridge1 = new VarbitRequirement(VarbitID.BRIDGERUNG1, 1);
+ repairedBridge2 = new VarbitRequirement(VarbitID.BRIDGERUNG2, 1);
+ repairedBridge3 = new VarbitRequirement(VarbitID.BRIDGERUNG3, 1);
onBridge = new ZoneRequirement(bridge);
onEntranceIsland = new ZoneRequirement(entranceIsland);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/kingsransom/KingsRansom.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/kingsransom/KingsRansom.java
index 765e159a5f7..a6431c945b8 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/kingsransom/KingsRansom.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/kingsransom/KingsRansom.java
@@ -49,6 +49,7 @@
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import java.util.*;
@@ -253,9 +254,9 @@ protected void setupZones()
public void setupConditions()
{
- hasForm = new Conditions(LogicType.OR, addressForm, new VarbitRequirement(3890, 1));
- hasScrapPaper = new Conditions(LogicType.OR, scrapPaper, new VarbitRequirement(3891, 1));
- hasBlackHelm = new Conditions(LogicType.OR, blackHelm, new VarbitRequirement(3892, 1));
+ hasForm = new Conditions(LogicType.OR, addressForm, new VarbitRequirement(VarbitID.KR_CLUE_FORM, 1));
+ hasScrapPaper = new Conditions(LogicType.OR, scrapPaper, new VarbitRequirement(VarbitID.KR_CLUE_NOTE, 1));
+ hasBlackHelm = new Conditions(LogicType.OR, blackHelm, new VarbitRequirement(VarbitID.KR_CLUE_ARMOUR, 1));
inUpstairsManor = new ZoneRequirement(upstairsManor);
inDownstairsManor = new ZoneRequirement(downstairsManor, downstairsManor2);
inTrialRoom = new ZoneRequirement(trialRoom);
@@ -267,14 +268,14 @@ public void setupConditions()
inSecretRoom = new ZoneRequirement(secretRoomFloor0);
inFortressEntrance = new ZoneRequirement(mainEntrance1, mainEntrance2, mainEntrance3, mainEntrance4);
- handlerInRoom = new VarbitRequirement(3907, 2);
- butlerInRoom = new VarbitRequirement(3907, 3);
- maidInRoom = new VarbitRequirement(3907, 5);
+ handlerInRoom = new VarbitRequirement(VarbitID.KR_COURT_WITNESS, 2);
+ butlerInRoom = new VarbitRequirement(VarbitID.KR_COURT_WITNESS, 3);
+ maidInRoom = new VarbitRequirement(VarbitID.KR_COURT_WITNESS, 5);
- askedAboutThread = new VarbitRequirement(3900, 1);
- askedAboutPoison = new VarbitRequirement(3912, 1);
- askedAboutDagger = new VarbitRequirement(3913, 1);
- askedAboutNight = new VarbitRequirement(3915, 1);
+ askedAboutThread = new VarbitRequirement(VarbitID.KR_COURT_THREAD, 1);
+ askedAboutPoison = new VarbitRequirement(VarbitID.KR_COURT_DOG_PROOF, 1);
+ askedAboutDagger = new VarbitRequirement(VarbitID.KR_COURT_BUTL_PROOF, 1);
+ askedAboutNight = new VarbitRequirement(VarbitID.KR_COURT_MAID_PROOF, 1);
inPuzzle = new WidgetModelRequirement(588, 1, 27214);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/kingsransom/LockpickPuzzle.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/kingsransom/LockpickPuzzle.java
index db29cd8ff5f..43d813205ac 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/kingsransom/LockpickPuzzle.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/kingsransom/LockpickPuzzle.java
@@ -29,6 +29,7 @@
import net.runelite.client.plugins.microbot.questhelper.steps.QuestStep;
import net.runelite.api.events.GameTick;
import net.runelite.api.gameval.InterfaceID;
+import net.runelite.api.gameval.VarbitID;
import net.runelite.api.widgets.Widget;
import net.runelite.client.eventbus.Subscribe;
@@ -36,10 +37,19 @@
public class LockpickPuzzle extends QuestStep
{
- int[] TUMBLER_ANSWERS = new int[]{3894, 3895, 3896, 3897};
+ int[] TUMBLER_ANSWERS = new int[]{
+ VarbitID.KR_TUMB1_ANS,
+ VarbitID.KR_TUMB2_ANS,
+ VarbitID.KR_TUMB3_ANS,
+ VarbitID.KR_TUMB4_ANS
+ };
int[] TUMBLER_WIDGETS = new int[]{20, 21, 22, 23};
- int[] TUMBLER_CURRENT = new int[]{3901, 3902, 3903, 3904};
- int CURRENT_TUMBLER = 3905;
+ int[] TUMBLER_CURRENT = new int[]{
+ VarbitID.KR_TUMB1_CURR_POS,
+ VarbitID.KR_TUMB2_CURR_POS,
+ VarbitID.KR_TUMB3_CURR_POS,
+ VarbitID.KR_TUMB4_CURR_POS
+ };
int UP_WIDGET = 12;
int DOWN_WIDGET = 13;
int TRY_LOCK = 14;
@@ -105,7 +115,7 @@ private void updateSolvedPositionState()
private void updateWidget(int widgetID, int currentVal, int answer)
{
- int currentTumbler = client.getVarbitValue(CURRENT_TUMBLER);
+ int currentTumbler = client.getVarbitValue(VarbitID.KR_TUMB_CURRENT);
if (currentTumbler != widgetID + 1)
{
highlightChildID = TUMBLER_WIDGETS[widgetID];
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/lunardiplomacy/BringLunarItems.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/lunardiplomacy/BringLunarItems.java
index 98e6720e33f..82c65aafe3c 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/lunardiplomacy/BringLunarItems.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/lunardiplomacy/BringLunarItems.java
@@ -9,6 +9,7 @@
import net.runelite.api.events.VarbitChanged;
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
+import net.runelite.api.gameval.VarbitID;
public class BringLunarItems extends NpcStep
{
@@ -41,14 +42,14 @@ public void setupConditions()
sealOfPassage = new ItemRequirement("Seal of passage", ItemID.LUNAR_SEAL_OF_PASSAGE);
sealOfPassage.setTooltip("You can get another from Brundt");
- handedInHelm = new VarbitRequirement(2436, 1);
- handedInCape = new VarbitRequirement(2437, 1);
- handedInAmulet = new VarbitRequirement(2438, 1);
- handedInTorso = new VarbitRequirement(2439, 1);
- handedInGloves = new VarbitRequirement(2441, 1);
- handedInBoots = new VarbitRequirement(2440, 1);
- handedInLegs = new VarbitRequirement(2442, 1);
- handedInRing = new VarbitRequirement(2443, 1);
+ handedInHelm = new VarbitRequirement(VarbitID.LUNAR_PT2_ONEIRO_GIVEN_HELM, 1);
+ handedInCape = new VarbitRequirement(VarbitID.LUNAR_PT2_ONEIRO_GIVEN_CAPE, 1);
+ handedInAmulet = new VarbitRequirement(VarbitID.LUNAR_PT2_ONEIRO_GIVEN_AMULET, 1);
+ handedInTorso = new VarbitRequirement(VarbitID.LUNAR_PT2_ONEIRO_GIVEN_TORSO, 1);
+ handedInGloves = new VarbitRequirement(VarbitID.LUNAR_PT2_ONEIRO_GIVEN_BOOTS, 1);
+ handedInBoots = new VarbitRequirement(VarbitID.LUNAR_PT2_ONEIRO_GIVEN_GLOVES, 1);
+ handedInLegs = new VarbitRequirement(VarbitID.LUNAR_PT2_ONEIRO_GIVEN_TROUSERS, 1);
+ handedInRing = new VarbitRequirement(VarbitID.LUNAR_PT2_ONEIRO_GIVEN_RING, 1);
}
@Override
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/lunardiplomacy/LunarDiplomacy.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/lunardiplomacy/LunarDiplomacy.java
index ac4bbbcb561..8faf75c80fd 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/lunardiplomacy/LunarDiplomacy.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/lunardiplomacy/LunarDiplomacy.java
@@ -498,31 +498,31 @@ public void setupConditions()
inFightArena = new ZoneRequirement(fightArena);
- revealedPillar = new VarbitRequirement(2431, 2);
- revealedCannon = new VarbitRequirement(2432, 2);
- revealedCrate = new VarbitRequirement(2433, 2);
- revealedChart = new VarbitRequirement(2434, 2);
- revealedChest = new VarbitRequirement(2435, 2);
+ revealedPillar = new VarbitRequirement(VarbitID.LUNAR_QUEST_SYMBOLPRES1, 2);
+ revealedCannon = new VarbitRequirement(VarbitID.LUNAR_QUEST_SYMBOLPRES2, 2);
+ revealedCrate = new VarbitRequirement(VarbitID.LUNAR_QUEST_SYMBOLPRES3, 2);
+ revealedChart = new VarbitRequirement(VarbitID.LUNAR_QUEST_SYMBOLPRES4, 2);
+ revealedChest = new VarbitRequirement(VarbitID.LUNAR_QUEST_SYMBOLPRES5, 2);
toothNearby = new ItemOnTileRequirement(suqahTooth);
- talkedToSelene = new VarbitRequirement(2445, 1);
- talkedToMeteora = new VarbitRequirement(2446, 1);
- talkedToRimae = new VarbitRequirement(2447, 1);
+ talkedToSelene = new VarbitRequirement(VarbitID.LUNAR_MONK_RING_INTRO, 1);
+ talkedToMeteora = new VarbitRequirement(VarbitID.LUNAR_MONK_AMULET_INTRO, 1);
+ talkedToRimae = new VarbitRequirement(VarbitID.LUNAR_MONK_TANCLOTHES_INTRO, 1);
tiaraNearby = new ItemOnTileRequirement(tiara);
- hadHelm = new Conditions(LogicType.OR, helm.alsoCheckBank(questBank), new VarbitRequirement(2436, 1));
- hadCape = new Conditions(LogicType.OR, cape.alsoCheckBank(questBank), new VarbitRequirement(2437, 1));
- hadAmulet = new Conditions(LogicType.OR, amulet.alsoCheckBank(questBank), new VarbitRequirement(2438, 1));
- hadTorso = new Conditions(LogicType.OR, torso.alsoCheckBank(questBank), new VarbitRequirement(2439, 1));
- hadGloves = new Conditions(LogicType.OR, gloves.alsoCheckBank(questBank), new VarbitRequirement(2441, 1));
- hadBoots = new Conditions(LogicType.OR, boots.alsoCheckBank(questBank), new VarbitRequirement(2440, 1));
- hadLegs = new Conditions(LogicType.OR, legs.alsoCheckBank(questBank), new VarbitRequirement(2442, 1));
- hadRing = new Conditions(LogicType.OR, ring.alsoCheckBank(questBank), new VarbitRequirement(2443, 1));
+ hadHelm = new Conditions(LogicType.OR, helm.alsoCheckBank(questBank), new VarbitRequirement(VarbitID.LUNAR_PT2_ONEIRO_GIVEN_HELM, 1));
+ hadCape = new Conditions(LogicType.OR, cape.alsoCheckBank(questBank), new VarbitRequirement(VarbitID.LUNAR_PT2_ONEIRO_GIVEN_CAPE, 1));
+ hadAmulet = new Conditions(LogicType.OR, amulet.alsoCheckBank(questBank), new VarbitRequirement(VarbitID.LUNAR_PT2_ONEIRO_GIVEN_AMULET, 1));
+ hadTorso = new Conditions(LogicType.OR, torso.alsoCheckBank(questBank), new VarbitRequirement(VarbitID.LUNAR_PT2_ONEIRO_GIVEN_TORSO, 1));
+ hadGloves = new Conditions(LogicType.OR, gloves.alsoCheckBank(questBank), new VarbitRequirement(VarbitID.LUNAR_PT2_ONEIRO_GIVEN_BOOTS, 1));
+ hadBoots = new Conditions(LogicType.OR, boots.alsoCheckBank(questBank), new VarbitRequirement(VarbitID.LUNAR_PT2_ONEIRO_GIVEN_GLOVES, 1));
+ hadLegs = new Conditions(LogicType.OR, legs.alsoCheckBank(questBank), new VarbitRequirement(VarbitID.LUNAR_PT2_ONEIRO_GIVEN_TROUSERS, 1));
+ hadRing = new Conditions(LogicType.OR, ring.alsoCheckBank(questBank), new VarbitRequirement(VarbitID.LUNAR_PT2_ONEIRO_GIVEN_RING, 1));
hadClothes = new Conditions(hadBoots, hadTorso, hadGloves, hadLegs);
- litBrazier = new VarbitRequirement(2430, 1);
+ litBrazier = new VarbitRequirement(VarbitID.LUNAR_BRAZIER_LIT, 1);
inCentreOfDream = new ZoneRequirement(centreOfDream);
inChanceDream = new ZoneRequirement(chanceDream);
@@ -532,12 +532,12 @@ public void setupConditions()
inRaceDream = new ZoneRequirement(raceDream);
inMimicDream = new ZoneRequirement(mimicDream);
- doingTreeChallenge = new VarbitRequirement(3184, 1);
- startedRaceChallenge = new VarbitRequirement(2424, 1);
+ doingTreeChallenge = new VarbitRequirement(VarbitID.LUNAR_TREE_PLAYING, 1);
+ startedRaceChallenge = new VarbitRequirement(VarbitID.LUNAR_SKILL_INTRO, 1);
- startedNumberChallenge = new VarbitRequirement(2416, 1);
+ startedNumberChallenge = new VarbitRequirement(VarbitID.LUNAR_NUM_INTRO, 1);
- needToTalkAtMiddle = new VarbitRequirement(2429, 1);
+ needToTalkAtMiddle = new VarbitRequirement(VarbitID.LUNAR_SPOKEN_CENTRE, 1);
finishedMimic = new VarbitRequirement(VarbitID.LUNAR_EMOTE_PROG, 5, Operation.GREATER_EQUAL);
finishedNumbers = new VarbitRequirement(VarbitID.LUNAR_NUM_PROG, 6, Operation.GREATER_EQUAL);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/lunardiplomacy/MemoryChallenge.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/lunardiplomacy/MemoryChallenge.java
index ec2d58d6302..ba0844af2b9 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/lunardiplomacy/MemoryChallenge.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/lunardiplomacy/MemoryChallenge.java
@@ -30,6 +30,7 @@
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.events.GameTick;
import net.runelite.api.events.VarbitChanged;
+import net.runelite.api.gameval.VarbitID;
import net.runelite.client.eventbus.Subscribe;
import java.util.ArrayList;
@@ -122,10 +123,10 @@ public void checkNextTile(int wpsPos)
private void setupPaths()
{
- int current1 = client.getVarbitValue(2412);
- int current2 = client.getVarbitValue(2413);
- int current3 = client.getVarbitValue(2414);
- int current4 = client.getVarbitValue(2415);
+ int current1 = client.getVarbitValue(VarbitID.LUNAR_FLOOR_COL_A);
+ int current2 = client.getVarbitValue(VarbitID.LUNAR_FLOOR_COL_B);
+ int current3 = client.getVarbitValue(VarbitID.LUNAR_FLOOR_COL_C);
+ int current4 = client.getVarbitValue(VarbitID.LUNAR_FLOOR_COL_D);
if (current1 == column1 &&
current2 == column2 &&
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/lunardiplomacy/MimicChallenge.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/lunardiplomacy/MimicChallenge.java
index 2229a4f0237..c6545aa5e50 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/lunardiplomacy/MimicChallenge.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/lunardiplomacy/MimicChallenge.java
@@ -30,6 +30,7 @@
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.events.VarbitChanged;
import net.runelite.api.gameval.NpcID;
+import net.runelite.api.gameval.VarbitID;
import java.util.Arrays;
import java.util.Collection;
@@ -65,13 +66,13 @@ public void onVarbitChanged(VarbitChanged varbitChanged)
@Override
protected void updateSteps()
{
- if (client.getVarbitValue(2419) == 0)
+ if (client.getVarbitValue(VarbitID.LUNAR_EMOTE_CANMIMIC) == 0)
{
startUpStep(talk);
return;
}
- switch (client.getVarbitValue(2420))
+ switch (client.getVarbitValue(VarbitID.LUNAR_EMOTE_LOC))
{
case 1:
startUpStep(cry);
@@ -96,7 +97,7 @@ protected void updateSteps()
public void chooseStepBasedOnIfTalked(QuestStep emoteStep)
{
- if (client.getVarbitValue(2419) == 1)
+ if (client.getVarbitValue(VarbitID.LUNAR_EMOTE_CANMIMIC) == 1)
{
startUpStep(emoteStep);
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/lunardiplomacy/NumberChallenge.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/lunardiplomacy/NumberChallenge.java
index f03a56be50c..68750355f85 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/lunardiplomacy/NumberChallenge.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/lunardiplomacy/NumberChallenge.java
@@ -8,6 +8,7 @@
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.events.VarbitChanged;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.VarbitID;
import java.util.Arrays;
import java.util.Collection;
@@ -60,7 +61,7 @@ public void onVarbitChanged(VarbitChanged varbitChanged)
@Override
protected void updateSteps()
{
- switch (client.getVarbitValue(2417))
+ switch (client.getVarbitValue(VarbitID.LUNAR_NUM_CURSEQ))
{
case 0:
setupStepFromState(press7, press9);
@@ -114,7 +115,7 @@ protected void updateSteps()
private void setupStepFromState(QuestStep choice1, QuestStep choice2)
{
- if (client.getVarbitValue(2421) == 0)
+ if (client.getVarbitValue(VarbitID.LUNAR_PT3_NUM_SEQ_N) == 0)
{
startUpStep(choice1);
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/makingfriendswithmyarm/MakingFriendsWithMyArm.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/makingfriendswithmyarm/MakingFriendsWithMyArm.java
index 54df5d1c38d..27ec86a5990 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/makingfriendswithmyarm/MakingFriendsWithMyArm.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/makingfriendswithmyarm/MakingFriendsWithMyArm.java
@@ -400,7 +400,7 @@ public void setupConditions()
// 2098 200 -> 205 (SWAN SONG???) when WOM dies
- pickedUpWom = new VarbitRequirement(6536, 0);
+ pickedUpWom = new VarbitRequirement(VarbitID.MY2ARM_CLIENT_COFFIN, 0);
oddMushroomDied = new VarbitRequirement(VarbitID.MY2ARM_STATUS, 150, Operation.GREATER_EQUAL);
defeatedBoss1 = new VarbitRequirement(VarbitID.MY2ARM_STATUS, 160, Operation.GREATER_EQUAL);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/makinghistory/MakingHistory.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/makinghistory/MakingHistory.java
index a1296cd9ee8..2cb99b031cd 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/makinghistory/MakingHistory.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/makinghistory/MakingHistory.java
@@ -183,18 +183,18 @@ protected void setupZones()
public void setupConditions()
{
- talkedtoBlanin = new Conditions(LogicType.OR, new VarbitRequirement(1385, 1), new VarbitRequirement(1385, 2));
+ talkedtoBlanin = new Conditions(LogicType.OR, new VarbitRequirement(VarbitID.MAKINGHISTORY_WARR_PROG, 1), new VarbitRequirement(VarbitID.MAKINGHISTORY_WARR_PROG, 2));
talkedToDron = new VarbitRequirement(VarbitID.MAKINGHISTORY_WARR_PROG, 3, Operation.GREATER_EQUAL);
- talkedToDroalak = new Conditions(LogicType.OR, new VarbitRequirement(1386, 2), new VarbitRequirement(1386, 1));
- talkedToMelina = new Conditions(LogicType.OR, new VarbitRequirement(1386, 4), new VarbitRequirement(1386, 3));
- gotScroll = new VarbitRequirement(1386, 5);
- handedInScroll = new VarbitRequirement(1386, 6);
+ talkedToDroalak = new Conditions(LogicType.OR, new VarbitRequirement(VarbitID.MAKINGHISTORY_GHOST_PROG, 2), new VarbitRequirement(VarbitID.MAKINGHISTORY_GHOST_PROG, 1));
+ talkedToMelina = new Conditions(LogicType.OR, new VarbitRequirement(VarbitID.MAKINGHISTORY_GHOST_PROG, 4), new VarbitRequirement(VarbitID.MAKINGHISTORY_GHOST_PROG, 3));
+ gotScroll = new VarbitRequirement(VarbitID.MAKINGHISTORY_GHOST_PROG, 5);
+ handedInScroll = new VarbitRequirement(VarbitID.MAKINGHISTORY_GHOST_PROG, 6);
inCastle = new ZoneRequirement(castle);
gotKey = new VarbitRequirement(VarbitID.MAKINGHISTORY_TRADER_PROG, 1, Operation.GREATER_EQUAL);
gotChest = new VarbitRequirement(VarbitID.MAKINGHISTORY_TRADER_PROG, 2, Operation.GREATER_EQUAL);
- handedInJournal = new VarbitRequirement(1384, 4);
+ handedInJournal = new VarbitRequirement(VarbitID.MAKINGHISTORY_TRADER_PROG, 4);
handedInEverything = new Conditions(handedInJournal, handedInScroll, talkedToDron);
finishedFrem = talkedToDron;
finishedGhost = new Conditions(LogicType.OR, handedInScroll, gotScroll);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/meatandgreet/MeatAndGreet.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/meatandgreet/MeatAndGreet.java
index 8b5b172095a..f0a540c7b98 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/meatandgreet/MeatAndGreet.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/meatandgreet/MeatAndGreet.java
@@ -218,7 +218,7 @@ public void setupSteps()
// enterWolfDenAndKillTheDireWolfAlpha
killDireWolfAlpha = new NpcStep(this, NpcID.MAG_DIREWOLF, "Kill the Dire Wolf Alpha. Use Protect from Melee to avoid most damage. His pups deal ranged damage.", combatGear, food);
// killed wolf: 11184 2->3
- var needToKillWolf = new VarbitRequirement(11184, 2);
+ var needToKillWolf = new VarbitRequirement(VarbitID.MAG_MEAT, 2);
var exitWolfDen = new ObjectStep(this, ObjectID.DIREWOLF_CAVE_EXIT_INSTANCE, new WorldPoint(1488, 9502, 1), "Exit the wolf den, then head back to Alba in the farmhouse west of Civitas illa Fortis.");
// 13092 0->100
// 13093 0->100
@@ -226,7 +226,7 @@ public void setupSteps()
// 13095 0->100
returnToAlba = new NpcStep(this, NpcID.MAG_ALBA, new WorldPoint(1587, 3126, 0), "Return to Alba in the farmhouse west of Civitas illa Fortis to tell them about the Dire Wolf Alpha's demise.");
returnToAlba.addSubSteps(exitWolfDen);
- var needToReturnToAlba = new VarbitRequirement(11184, 3);
+ var needToReturnToAlba = new VarbitRequirement(VarbitID.MAG_MEAT, 3);
// 11184 3->4 after returning to alba
solveSupplyChainIssues = new ConditionalStep(this, returnToAlba);
solveSupplyChainIssues.addStep(pinPadOpen, enterCodeWrapper);
@@ -309,9 +309,9 @@ public void setupSteps()
"Adjust number of spice portions to:"
);
var meatCorrect = new VarbitRequirement(VarbitID.MAG_PORTIONS_MEAT, 4, Operation.EQUAL);
- var saladCorrect = new VarbitRequirement(11186, 2);
- var spiceCorrect = new VarbitRequirement(11187, 1);
- var sauceCorrect = new VarbitRequirement(11188, 3);
+ var saladCorrect = new VarbitRequirement(VarbitID.MAG_PORTIONS_SALAD, 2);
+ var spiceCorrect = new VarbitRequirement(VarbitID.MAG_PORTIONS_SPICE, 1);
+ var sauceCorrect = new VarbitRequirement(VarbitID.MAG_PORTIONS_SAUCE, 3);
var recipeStep = new ConditionalStep(this, adjustRecipe, "Configure the kebab recipe with Emelio.");
// 11189 0->1 = received test kebab
var giveExperimentalKebabToRenata = new NpcStep(this, NpcID.MAG_RENATA_VIS, new WorldPoint(1750, 3072, 0), "Talk to Renata to have them test your test kebab.", experimentalKebab);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/misthalinmystery/MisthalinMystery.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/misthalinmystery/MisthalinMystery.java
index dfc4edfe626..414c9e5160a 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/misthalinmystery/MisthalinMystery.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/misthalinmystery/MisthalinMystery.java
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2020, Zoinkwiz
+ * Copyright (c) 2025, pajlada
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -28,6 +29,7 @@
import net.runelite.client.plugins.microbot.questhelper.questhelpers.BasicQuestHelper;
import net.runelite.client.plugins.microbot.questhelper.requirements.conditional.Conditions;
import net.runelite.client.plugins.microbot.questhelper.requirements.item.ItemRequirement;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.and;
import net.runelite.client.plugins.microbot.questhelper.requirements.util.Operation;
import net.runelite.client.plugins.microbot.questhelper.requirements.var.VarbitRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.widget.WidgetTextRequirement;
@@ -36,21 +38,35 @@
import net.runelite.client.plugins.microbot.questhelper.rewards.ExperienceReward;
import net.runelite.client.plugins.microbot.questhelper.rewards.ItemReward;
import net.runelite.client.plugins.microbot.questhelper.rewards.QuestPointReward;
-import net.runelite.client.plugins.microbot.questhelper.steps.*;
+import net.runelite.client.plugins.microbot.questhelper.steps.ConditionalStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.DetailedQuestStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.NpcStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.ObjectStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.PuzzleWrapperStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.QuestStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.WidgetStep;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import net.runelite.api.Skill;
import net.runelite.api.coords.WorldPoint;
+import net.runelite.api.gameval.InterfaceID;
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
import net.runelite.api.gameval.VarbitID;
-import java.util.*;
-
-import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.and;
-
public class MisthalinMystery extends BasicQuestHelper
{
- // Requirements
+ // Zones
+ Zone island;
+ Zone outside1;
+ Zone outside2;
+ Zone outside3;
+ Zone bossRoom;
+
+ // Miscellaneous requirements
ItemRequirement bucket;
ItemRequirement manorKey;
ItemRequirement knife;
@@ -108,18 +124,25 @@ public class MisthalinMystery extends BasicQuestHelper
ObjectStep observeThroughTree;
ObjectStep takeNote2;
DetailedQuestStep readNotes2;
+
+ PuzzleWrapperStep pwPlayPiano;
+ ConditionalStep cPlayPiano;
ObjectStep playPiano;
WidgetStep playD;
WidgetStep playE;
WidgetStep playA;
WidgetStep playDAgain;
DetailedQuestStep restartPiano;
- ObjectStep searchThePiano;
+ PuzzleWrapperStep searchThePiano;
+
ObjectStep returnOverBrokenWall;
ObjectStep openEmeraldDoor;
ObjectStep enterBandosGodswordRoomStep;
ObjectStep takeNote3;
DetailedQuestStep readNotes3;
+
+ PuzzleWrapperStep pwSolveFireplacePuzzle;
+ ConditionalStep solveFireplacePuzzle;
ObjectStep useKnifeOnFireplace;
ObjectStep searchFireplace;
WidgetStep clickSapphire;
@@ -129,7 +152,8 @@ public class MisthalinMystery extends BasicQuestHelper
WidgetStep clickOnyx;
WidgetStep clickRuby;
DetailedQuestStep restartGems;
- ObjectStep searchFireplaceForSapphireKey;
+ PuzzleWrapperStep searchFireplaceForSapphireKey;
+
ObjectStep goThroughSapphireDoor;
DetailedQuestStep reflectKnives;
ObjectStep continueThroughSapphireDoor;
@@ -139,162 +163,6 @@ public class MisthalinMystery extends BasicQuestHelper
ObjectStep leaveSapphireRoom;
NpcStep talkToMandy;
- // Zones
- Zone island;
- Zone outside1;
- Zone outside2;
- Zone outside3;
- Zone bossRoom;
-
- @Override
- public Map loadSteps()
- {
- initializeRequirements();
- setupConditions();
- setupSteps();
-
- var steps = new HashMap();
-
- steps.put(0, talkToAbigale);
-
- steps.put(5, talkToAbigale);
-
- var investigatingTheBarrel = new ConditionalStep(this, takeTheBoat);
- investigatingTheBarrel.addStep(new Conditions(onIsland, bucket), searchTheBarrel);
- investigatingTheBarrel.addStep(onIsland, takeTheBucket);
- steps.put(10, investigatingTheBarrel);
- steps.put(15, investigatingTheBarrel);
-
- var emptyTheBarrel = new ConditionalStep(this, takeTheBoat);
- emptyTheBarrel.addStep(new Conditions(onIsland, bucket), useBucketOnBarrel);
- emptyTheBarrel.addStep(onIsland, takeTheBucket);
- steps.put(20, emptyTheBarrel);
-
- var enterTheHouse = new ConditionalStep(this, takeTheBoat);
- enterTheHouse.addStep(new Conditions(onIsland, manorKey), openManorDoor);
- enterTheHouse.addStep(onIsland, searchTheBarrelForKey);
- steps.put(25, enterTheHouse);
-
- var pinkDoor = new ConditionalStep(this, takeTheBoat);
- pinkDoor.addStep(knife, tryToOpenPinkKnobDoor);
- pinkDoor.addStep(onIsland, takeKnife);
- steps.put(30, pinkDoor);
-
- var pickUpAndReadNotes1 = new ConditionalStep(this, takeTheBoat);
- pickUpAndReadNotes1.addStep(new Conditions(onIsland, notes1), readNotes1);
- pickUpAndReadNotes1.addStep(onIsland, takeNote1);
- steps.put(35, pickUpAndReadNotes1);
-
- var cutPainting = new ConditionalStep(this, takeTheBoat);
- cutPainting.addStep(new Conditions(onIsland, knife), useKnifeOnPainting);
- cutPainting.addStep(onIsland, takeKnife);
- steps.put(40, cutPainting);
-
- var enterRubyRoom = new ConditionalStep(this, takeTheBoat);
- enterRubyRoom.addStep(new Conditions(onIsland, rubyKey), goThroughRubyDoor);
- enterRubyRoom.addStep(onIsland, searchPainting);
- steps.put(45, enterRubyRoom);
-
- var lightCandles = new ConditionalStep(this, takeTheBoat);
- lightCandles.addStep(new Conditions(onIsland, tinderbox, litCandle1, litCandle2, litCandle3), lightCandle4);
- lightCandles.addStep(new Conditions(onIsland, tinderbox, litCandle1, litCandle2), lightCandle3);
- lightCandles.addStep(new Conditions(onIsland, tinderbox, litCandle1), lightCandle2);
- lightCandles.addStep(new Conditions(onIsland, tinderbox), lightCandle1);
- lightCandles.addStep(onIsland, takeTinderbox);
- steps.put(50, lightCandles);
-
- var lightFuseOnBarrel = new ConditionalStep(this, takeTheBoat);
- lightFuseOnBarrel.addStep(new Conditions(onIsland, tinderbox), lightBarrel);
- lightFuseOnBarrel.addStep(onIsland, takeTinderbox);
- steps.put(55, lightFuseOnBarrel);
- steps.put(60, leaveExplosionRoom);
-
- var goToLacey = new ConditionalStep(this, takeTheBoat);
- goToLacey.addStep(inOutsideArea, observeThroughTree);
- goToLacey.addStep(onIsland, climbWall);
- steps.put(65, goToLacey);
-
- var pickUpAndReadNotes2 = new ConditionalStep(this, takeTheBoat);
- pickUpAndReadNotes2.addStep(notes2, readNotes2);
- pickUpAndReadNotes2.addStep(inOutsideArea, takeNote2);
- pickUpAndReadNotes2.addStep(onIsland, climbWall);
- steps.put(70, pickUpAndReadNotes2);
-
- var playMusic = new ConditionalStep(this, takeTheBoat);
- playMusic.addStep(playedA, playDAgain);
- playMusic.addStep(playedE, playA);
- playMusic.addStep(playedD, playE);
- playMusic.addStep(new Conditions(playedAnyKey, inPianoWidget), restartPiano);
- playMusic.addStep(inPianoWidget, playD);
- playMusic.addStep(inOutsideArea, playPiano);
- playMusic.addStep(onIsland, climbWall);
- steps.put(75, playMusic);
-
- var openingTheEmeraldDoor = new ConditionalStep(this, takeTheBoat);
- openingTheEmeraldDoor.addStep(new Conditions(inOutsideArea, emeraldKey), returnOverBrokenWall);
- openingTheEmeraldDoor.addStep(inOutsideArea, searchThePiano);
- openingTheEmeraldDoor.addStep(new Conditions(onIsland, emeraldKey), openEmeraldDoor);
- openingTheEmeraldDoor.addStep(onIsland, climbWall);
- steps.put(80, openingTheEmeraldDoor);
-
- var enterBandosGodswordRoom = new ConditionalStep(this, takeTheBoat);
- enterBandosGodswordRoom.addStep(onIsland, enterBandosGodswordRoomStep);
- steps.put(85, enterBandosGodswordRoom);
-
- var startPuzzle3 = new ConditionalStep(this, takeTheBoat);
- startPuzzle3.addStep(new Conditions(onIsland, notes3), readNotes3);
- startPuzzle3.addStep(onIsland, takeNote3);
- steps.put(90, startPuzzle3);
-
- var openFireplace = new ConditionalStep(this, takeTheBoat);
- openFireplace.addStep(new Conditions(onIsland, knife), useKnifeOnFireplace);
- openFireplace.addStep(onIsland, takeKnife);
- steps.put(95, openFireplace);
-
- var solveFireplacePuzzle = new ConditionalStep(this, takeTheBoat);
- solveFireplacePuzzle.addStep(selectedOnyx, clickRuby);
- solveFireplacePuzzle.addStep(selectedEmerald, clickOnyx);
- solveFireplacePuzzle.addStep(selectedZenyte, clickEmerald);
- solveFireplacePuzzle.addStep(selectedDiamond, clickZenyte);
- solveFireplacePuzzle.addStep(selectedSaphire, clickDiamond);
- solveFireplacePuzzle.addStep(selectAnyGem, restartGems);
- solveFireplacePuzzle.addStep(inGemWidget, clickSapphire);
- solveFireplacePuzzle.addStep(onIsland, searchFireplace);
- steps.put(100, solveFireplacePuzzle);
-
- var openSapphireDoor = new ConditionalStep(this, takeTheBoat);
- openSapphireDoor.addStep(new Conditions(onIsland, sapphireKey), goThroughSapphireDoor);
- openSapphireDoor.addStep(onIsland, searchFireplaceForSapphireKey);
- steps.put(105, openSapphireDoor);
-
- var goDoBoss = new ConditionalStep(this, takeTheBoat);
- goDoBoss.addStep(inBossRoom, reflectKnives);
- goDoBoss.addStep(onIsland, goThroughSapphireDoor);
- steps.put(110, goDoBoss);
- steps.put(111, goDoBoss);
-
- var watchRevealCutscene = new ConditionalStep(this, takeTheBoat);
- watchRevealCutscene.addStep(inBossRoom, watchTheKillersReveal);
- watchRevealCutscene.addStep(onIsland, continueThroughSapphireDoor);
- steps.put(115, watchRevealCutscene);
-
- var goFightAbigale = new ConditionalStep(this, takeTheBoat);
- goFightAbigale.addStep(new Conditions(inBossRoom, killersKnife), fightAbigale);
- goFightAbigale.addStep(inBossRoom, pickUpKillersKnife);
- goFightAbigale.addStep(onIsland, continueThroughSapphireDoor);
- steps.put(120, goFightAbigale);
-
- var attemptToLeaveSapphireRoom = new ConditionalStep(this, takeTheBoat);
- attemptToLeaveSapphireRoom.addStep(onIsland, leaveSapphireRoom);
- steps.put(125, attemptToLeaveSapphireRoom);
-
- var finishTheQuest = new ConditionalStep(this, takeTheBoat);
- finishTheQuest.addStep(onIsland, talkToMandy);
- steps.put(130, finishTheQuest);
-
- return steps;
- }
-
@Override
protected void setupZones()
{
@@ -305,33 +173,30 @@ protected void setupZones()
bossRoom = new Zone(new WorldPoint(1619, 4825, 0), new WorldPoint(1627, 4834, 0));
}
- public void setupConditions()
+ @Override
+ protected void setupRequirements()
{
onIsland = new ZoneRequirement(island);
inOutsideArea = new ZoneRequirement(outside1, outside2, outside3);
inBossRoom = new ZoneRequirement(bossRoom);
- litCandle1 = new VarbitRequirement(4042, 1);
- litCandle2 = new VarbitRequirement(4041, 1);
- litCandle3 = new VarbitRequirement(4039, 1);
+ litCandle1 = new VarbitRequirement(VarbitID.MISTMYST_CANDLE4, 1);
+ litCandle2 = new VarbitRequirement(VarbitID.MISTMYST_CANDLE3, 1);
+ litCandle3 = new VarbitRequirement(VarbitID.MISTMYST_CANDLE1, 1);
- playedD = and(new VarbitRequirement(4044, 1), new VarbitRequirement(4049, 1));
- playedE = and(new VarbitRequirement(4045, 1), new VarbitRequirement(4049, 2));
- playedA = and(new VarbitRequirement(4046, 1), new VarbitRequirement(4049, 3));
+ playedD = and(new VarbitRequirement(VarbitID.MISTMYST_PIANO_D1, 1), new VarbitRequirement(VarbitID.MISTMYST_PIANO_ATTEMPTS, 1));
+ playedE = and(new VarbitRequirement(VarbitID.MISTMYST_PIANO_E, 1), new VarbitRequirement(VarbitID.MISTMYST_PIANO_ATTEMPTS, 2));
+ playedA = and(new VarbitRequirement(VarbitID.MISTMYST_PIANO_A, 1), new VarbitRequirement(VarbitID.MISTMYST_PIANO_ATTEMPTS, 3));
playedAnyKey = new VarbitRequirement(VarbitID.MISTMYST_PIANO_ATTEMPTS, 1, Operation.GREATER_EQUAL);
inPianoWidget = new WidgetTextRequirement(554, 20, "C");
inGemWidget = new WidgetTextRequirement(555, 1, 1, "Gemstone switch panel");
- selectedSaphire = and(new VarbitRequirement(4051, 1), new VarbitRequirement(4050, 1));
- selectedDiamond = and(new VarbitRequirement(4052, 1), new VarbitRequirement(4050, 2));
- selectedZenyte = and(new VarbitRequirement(4053, 1), new VarbitRequirement(4050, 3));
- selectedEmerald = and(new VarbitRequirement(4054, 1), new VarbitRequirement(4050, 4));
- selectedOnyx = and(new VarbitRequirement(4055, 1), new VarbitRequirement(4050, 5));
+ selectedSaphire = and(new VarbitRequirement(VarbitID.MISTMYST_SAPPHIRE_SWITCHED, 1), new VarbitRequirement(VarbitID.MISTMYST_SWITCH_ATTEMPTS, 1));
+ selectedDiamond = and(new VarbitRequirement(VarbitID.MISTMYST_DIAMOND_SWITCHED, 1), new VarbitRequirement(VarbitID.MISTMYST_SWITCH_ATTEMPTS, 2));
+ selectedZenyte = and(new VarbitRequirement(VarbitID.MISTMYST_ZENYTE_SWITCHED, 1), new VarbitRequirement(VarbitID.MISTMYST_SWITCH_ATTEMPTS, 3));
+ selectedEmerald = and(new VarbitRequirement(VarbitID.MISTMYST_EMERALD_SWITCHED, 1), new VarbitRequirement(VarbitID.MISTMYST_SWITCH_ATTEMPTS, 4));
+ selectedOnyx = and(new VarbitRequirement(VarbitID.MISTMYST_ONYX_SWITCHED, 1), new VarbitRequirement(VarbitID.MISTMYST_SWITCH_ATTEMPTS, 5));
selectAnyGem = new VarbitRequirement(VarbitID.MISTMYST_SWITCH_ATTEMPTS, 1, Operation.GREATER_EQUAL);
- }
- @Override
- protected void setupRequirements()
- {
bucket = new ItemRequirement("Bucket", ItemID.BUCKET_EMPTY);
manorKey = new ItemRequirement("Manor key", ItemID.MISTMYST_FRONTDOOR_KEY);
knife = new ItemRequirement("Knife", ItemID.KNIFE);
@@ -363,7 +228,7 @@ public void setupSteps()
tryToOpenPinkKnobDoor = new ObjectStep(this, ObjectID.MISTMYST_DOOR_REDTOPAZ, new WorldPoint(1635, 4838, 0), "Try to open the door with the pink handle.");
takeNote1 = new ObjectStep(this, ObjectID.MISTMYST_CLUE_LIBRARY, new WorldPoint(1635, 4839, 0), "Pick up the note that appeared.");
readNotes1 = new DetailedQuestStep(this, "Read the notes.", notes1.highlighted());
- useKnifeOnPainting = new ObjectStep(this, ObjectID.MISTMYST_PAINTING, new WorldPoint(1632, 4833, 0), "Use a knife on the marked painting.", knife);
+ useKnifeOnPainting = new ObjectStep(this, ObjectID.MISTMYST_PAINTING, new WorldPoint(1632, 4833, 0), "Use a knife on the marked painting.", knife.highlighted());
useKnifeOnPainting.addIcon(ItemID.KNIFE);
searchPainting = new ObjectStep(this, ObjectID.MISTMYST_PAINTING, new WorldPoint(1632, 4833, 0), "Search the painting for a ruby key.");
goThroughRubyDoor = new ObjectStep(this, ObjectID.MISTMYST_DOOR_RUBY, new WorldPoint(1640, 4828, 0), "Go through the door with the ruby handle.", rubyKey);
@@ -389,15 +254,24 @@ public void setupSteps()
takeNote2 = new ObjectStep(this, ObjectID.MISTMYST_CLUE_OUTSIDE, new WorldPoint(1632, 4850, 0), "Pick up the note that appeared by the fence.");
readNotes2 = new DetailedQuestStep(this, "Read the notes.", notes2.highlighted());
- playPiano = new ObjectStep(this, ObjectID.MISTMYST_PIANO, new WorldPoint(1647, 4842, 0), "Play the piano in the room to the south.");
- playD = new WidgetStep(this, "Play the D key.", 554, 21);
- playE = new WidgetStep(this, "Play the E key.", 554, 22);
- playA = new WidgetStep(this, "Play the A key.", 554, 25);
- playDAgain = new WidgetStep(this, "Play the D key again.", 554, 21);
+ playPiano = new ObjectStep(this, ObjectID.MISTMYST_PIANO, new WorldPoint(1647, 4841, 0), "");
+ playD = new WidgetStep(this, "Play the D key.", InterfaceID.MistmystPiano.LABEL_D1);
+ playE = new WidgetStep(this, "Play the E key.", InterfaceID.MistmystPiano.LABEL_E1);
+ playA = new WidgetStep(this, "Play the A key.", InterfaceID.MistmystPiano.LABEL_A2);
+ playDAgain = new WidgetStep(this, "Play the D key again.", InterfaceID.MistmystPiano.LABEL_D1);
restartPiano = new DetailedQuestStep(this, "Unfortunately you've played an incorrect key. Restart.");
playPiano.addSubSteps(restartPiano);
- searchThePiano = new ObjectStep(this, ObjectID.MISTMYST_PIANO, new WorldPoint(1647, 4842, 0), "Right-click search the piano for the emerald key.");
+ cPlayPiano = new ConditionalStep(this, playPiano, "Play the piano in the room to the south for the emerald key.");
+ cPlayPiano.addStep(playedA, playDAgain);
+ cPlayPiano.addStep(playedE, playA);
+ cPlayPiano.addStep(playedD, playE);
+ cPlayPiano.addStep(and(playedAnyKey, inPianoWidget), restartPiano);
+ cPlayPiano.addStep(inPianoWidget, playD);
+
+ pwPlayPiano = cPlayPiano.puzzleWrapStepWithDefaultText("Find the emerald key in the room to the south.");
+
+ searchThePiano = new ObjectStep(this, ObjectID.MISTMYST_PIANO, new WorldPoint(1647, 4842, 0), "Right-click search the piano for the emerald key.").puzzleWrapStep(true);
returnOverBrokenWall = new ObjectStep(this, ObjectID.MISTMYST_DESTRUCTABLE_WALL_CLIMBABLE, new WorldPoint(1648, 4829, 0),
"Climb back over the damaged wall into the manor.", emeraldKey);
@@ -408,13 +282,12 @@ public void setupSteps()
takeNote3 = new ObjectStep(this, ObjectID.MISTMYST_CLUE_KITCHEN, new WorldPoint(1630, 4842, 0), "Pick up the note that appeared by the door.");
readNotes3 = new DetailedQuestStep(this, "Read the notes.", notes3.highlighted());
- useKnifeOnFireplace = new ObjectStep(this, ObjectID.MISTMYST_FIREPLACE, new WorldPoint(1647, 4836, 0), "Use a knife on the unlit fireplace in the eastern room.", knife);
+ useKnifeOnFireplace = new ObjectStep(this, ObjectID.MISTMYST_FIREPLACE, new WorldPoint(1647, 4836, 0), "Use a knife on the unlit fireplace in the eastern room.", knife.highlighted());
useKnifeOnFireplace.addIcon(ItemID.KNIFE);
- searchFireplace = new ObjectStep(this, ObjectID.MISTMYST_FIREPLACE, new WorldPoint(1647, 4836, 0), "Search the fireplace.");
+ searchFireplace = new ObjectStep(this, ObjectID.MISTMYST_FIREPLACE, new WorldPoint(1647, 4836, 0), "");
restartGems = new DetailedQuestStep(this, "You've clicked a gem in the wrong order. Try restarting.");
- searchFireplace.addSubSteps(restartGems);
clickSapphire = new WidgetStep(this, "Click the sapphire.", 555, 19);
clickDiamond = new WidgetStep(this, "Click the diamond.", 555, 4);
@@ -423,7 +296,21 @@ public void setupSteps()
clickOnyx = new WidgetStep(this, "Click the onyx.", 555, 7);
clickRuby = new WidgetStep(this, "Click the ruby.", 555, 15);
- searchFireplaceForSapphireKey = new ObjectStep(this, ObjectID.MISTMYST_FIREPLACE, new WorldPoint(1647, 4836, 0), "Search the fireplace again for the sapphire key.");
+ searchFireplaceForSapphireKey = new ObjectStep(this, ObjectID.MISTMYST_FIREPLACE, new WorldPoint(1647, 4836, 0), "Search the fireplace again for the sapphire key.").puzzleWrapStep(true);
+
+ solveFireplacePuzzle = new ConditionalStep(this, takeTheBoat, "Search the fireplace and solve the puzzle for the sapphire key.");
+ solveFireplacePuzzle.addStep(selectedOnyx, clickRuby);
+ solveFireplacePuzzle.addStep(selectedEmerald, clickOnyx);
+ solveFireplacePuzzle.addStep(selectedZenyte, clickEmerald);
+ solveFireplacePuzzle.addStep(selectedDiamond, clickZenyte);
+ solveFireplacePuzzle.addStep(selectedSaphire, clickDiamond);
+ solveFireplacePuzzle.addStep(selectAnyGem, restartGems);
+ solveFireplacePuzzle.addStep(inGemWidget, clickSapphire);
+ solveFireplacePuzzle.addStep(onIsland, searchFireplace);
+
+ pwSolveFireplacePuzzle = solveFireplacePuzzle.puzzleWrapStepWithDefaultText("Find the sapphire key in the room to the east.");
+ pwSolveFireplacePuzzle.addSubSteps(searchFireplaceForSapphireKey);
+
goThroughSapphireDoor = new ObjectStep(this, ObjectID.MISTMYST_DOOR_SAPPHIRE, new WorldPoint(1628, 4829, 0),
"Go through the sapphire door.");
reflectKnives = new DetailedQuestStep(this, "This puzzle requires you to move the mirror to reflect the knives the murderer throws. You can tell which wardrobe the murderer will throw from by a black swirl that'll surround it.");
@@ -446,6 +333,140 @@ public void setupSteps()
"Talk to Mandy just outside the manor to complete the quest.");
}
+ @Override
+ public Map loadSteps()
+ {
+ initializeRequirements();
+ setupSteps();
+
+ var steps = new HashMap();
+
+ steps.put(0, talkToAbigale);
+
+ steps.put(5, talkToAbigale);
+
+ var investigatingTheBarrel = new ConditionalStep(this, takeTheBoat);
+ investigatingTheBarrel.addStep(and(onIsland, bucket), searchTheBarrel);
+ investigatingTheBarrel.addStep(onIsland, takeTheBucket);
+ steps.put(10, investigatingTheBarrel);
+ steps.put(15, investigatingTheBarrel);
+
+ var emptyTheBarrel = new ConditionalStep(this, takeTheBoat);
+ emptyTheBarrel.addStep(and(onIsland, bucket), useBucketOnBarrel);
+ emptyTheBarrel.addStep(onIsland, takeTheBucket);
+ steps.put(20, emptyTheBarrel);
+
+ var enterTheHouse = new ConditionalStep(this, takeTheBoat);
+ enterTheHouse.addStep(and(onIsland, manorKey), openManorDoor);
+ enterTheHouse.addStep(onIsland, searchTheBarrelForKey);
+ steps.put(25, enterTheHouse);
+
+ var pinkDoor = new ConditionalStep(this, takeTheBoat);
+ pinkDoor.addStep(knife, tryToOpenPinkKnobDoor);
+ pinkDoor.addStep(onIsland, takeKnife);
+ steps.put(30, pinkDoor);
+
+ var pickUpAndReadNotes1 = new ConditionalStep(this, takeTheBoat);
+ pickUpAndReadNotes1.addStep(and(onIsland, notes1), readNotes1);
+ pickUpAndReadNotes1.addStep(onIsland, takeNote1);
+ steps.put(35, pickUpAndReadNotes1);
+
+ var cutPainting = new ConditionalStep(this, takeTheBoat);
+ cutPainting.addStep(and(onIsland, knife), useKnifeOnPainting);
+ cutPainting.addStep(onIsland, takeKnife);
+ steps.put(40, cutPainting);
+
+ var enterRubyRoom = new ConditionalStep(this, takeTheBoat);
+ enterRubyRoom.addStep(and(onIsland, rubyKey), goThroughRubyDoor);
+ enterRubyRoom.addStep(onIsland, searchPainting);
+ steps.put(45, enterRubyRoom);
+
+ var lightCandles = new ConditionalStep(this, takeTheBoat);
+ lightCandles.addStep(and(onIsland, tinderbox, litCandle1, litCandle2, litCandle3), lightCandle4);
+ lightCandles.addStep(and(onIsland, tinderbox, litCandle1, litCandle2), lightCandle3);
+ lightCandles.addStep(and(onIsland, tinderbox, litCandle1), lightCandle2);
+ lightCandles.addStep(and(onIsland, tinderbox), lightCandle1);
+ lightCandles.addStep(onIsland, takeTinderbox);
+ steps.put(50, lightCandles);
+
+ var lightFuseOnBarrel = new ConditionalStep(this, takeTheBoat);
+ lightFuseOnBarrel.addStep(and(onIsland, tinderbox), lightBarrel);
+ lightFuseOnBarrel.addStep(onIsland, takeTinderbox);
+ steps.put(55, lightFuseOnBarrel);
+ steps.put(60, leaveExplosionRoom);
+
+ var goToLacey = new ConditionalStep(this, takeTheBoat);
+ goToLacey.addStep(inOutsideArea, observeThroughTree);
+ goToLacey.addStep(onIsland, climbWall);
+ steps.put(65, goToLacey);
+
+ var pickUpAndReadNotes2 = new ConditionalStep(this, takeTheBoat);
+ pickUpAndReadNotes2.addStep(notes2, readNotes2);
+ pickUpAndReadNotes2.addStep(inOutsideArea, takeNote2);
+ pickUpAndReadNotes2.addStep(onIsland, climbWall);
+ steps.put(70, pickUpAndReadNotes2);
+
+ var playMusic = new ConditionalStep(this, takeTheBoat);
+ playMusic.addStep(inOutsideArea, pwPlayPiano);
+ playMusic.addStep(onIsland, climbWall);
+ steps.put(75, playMusic);
+
+ var openingTheEmeraldDoor = new ConditionalStep(this, takeTheBoat);
+ openingTheEmeraldDoor.addStep(and(inOutsideArea, emeraldKey), returnOverBrokenWall);
+ openingTheEmeraldDoor.addStep(inOutsideArea, searchThePiano);
+ openingTheEmeraldDoor.addStep(and(onIsland, emeraldKey), openEmeraldDoor);
+ openingTheEmeraldDoor.addStep(onIsland, climbWall);
+ steps.put(80, openingTheEmeraldDoor);
+
+ var enterBandosGodswordRoom = new ConditionalStep(this, takeTheBoat);
+ enterBandosGodswordRoom.addStep(onIsland, enterBandosGodswordRoomStep);
+ steps.put(85, enterBandosGodswordRoom);
+
+ var startPuzzle3 = new ConditionalStep(this, takeTheBoat);
+ startPuzzle3.addStep(and(onIsland, notes3), readNotes3);
+ startPuzzle3.addStep(onIsland, takeNote3);
+ steps.put(90, startPuzzle3);
+
+ var openFireplace = new ConditionalStep(this, takeTheBoat);
+ openFireplace.addStep(and(onIsland, knife), useKnifeOnFireplace);
+ openFireplace.addStep(onIsland, takeKnife);
+ steps.put(95, openFireplace);
+
+ steps.put(100, pwSolveFireplacePuzzle);
+
+ var openSapphireDoor = new ConditionalStep(this, takeTheBoat);
+ openSapphireDoor.addStep(and(onIsland, sapphireKey), goThroughSapphireDoor);
+ openSapphireDoor.addStep(onIsland, searchFireplaceForSapphireKey);
+ steps.put(105, openSapphireDoor);
+
+ var goDoBoss = new ConditionalStep(this, takeTheBoat);
+ goDoBoss.addStep(inBossRoom, reflectKnives);
+ goDoBoss.addStep(onIsland, goThroughSapphireDoor);
+ steps.put(110, goDoBoss);
+ steps.put(111, goDoBoss);
+
+ var watchRevealCutscene = new ConditionalStep(this, takeTheBoat);
+ watchRevealCutscene.addStep(inBossRoom, watchTheKillersReveal);
+ watchRevealCutscene.addStep(onIsland, continueThroughSapphireDoor);
+ steps.put(115, watchRevealCutscene);
+
+ var goFightAbigale = new ConditionalStep(this, takeTheBoat);
+ goFightAbigale.addStep(and(inBossRoom, killersKnife), fightAbigale);
+ goFightAbigale.addStep(inBossRoom, pickUpKillersKnife);
+ goFightAbigale.addStep(onIsland, continueThroughSapphireDoor);
+ steps.put(120, goFightAbigale);
+
+ var attemptToLeaveSapphireRoom = new ConditionalStep(this, takeTheBoat);
+ attemptToLeaveSapphireRoom.addStep(onIsland, leaveSapphireRoom);
+ steps.put(125, attemptToLeaveSapphireRoom);
+
+ var finishTheQuest = new ConditionalStep(this, takeTheBoat);
+ finishTheQuest.addStep(onIsland, talkToMandy);
+ steps.put(130, finishTheQuest);
+
+ return steps;
+ }
+
@Override
public QuestPointReward getQuestPointReward()
{
@@ -473,17 +494,71 @@ public List getItemRewards()
@Override
public List getPanels()
{
- var allSteps = new ArrayList();
-
- allSteps.add(new PanelDetails("Talk to Abigale", Collections.singletonList(talkToAbigale)));
- allSteps.add(new PanelDetails("Enter the manor", Arrays.asList(takeTheBoat, takeTheBucket, searchTheBarrel, useBucketOnBarrel, searchTheBarrelForKey, openManorDoor)));
- allSteps.add(new PanelDetails("Solve the first puzzle", Arrays.asList(takeKnife, tryToOpenPinkKnobDoor, takeNote1, readNotes1, useKnifeOnPainting, searchPainting, goThroughRubyDoor)));
- allSteps.add(new PanelDetails("Solve the second puzzle", Arrays.asList(takeTinderbox, lightCandle1, lightBarrel, leaveExplosionRoom, climbWall)));
- allSteps.add(new PanelDetails("Solve the third puzzle", Arrays.asList(observeThroughTree, takeNote2, readNotes2, playPiano, playD, playE, playA, playDAgain, searchThePiano)));
- allSteps.add(new PanelDetails("Witness another murder", Arrays.asList(returnOverBrokenWall, openEmeraldDoor, enterBandosGodswordRoomStep)));
- allSteps.add(new PanelDetails("Solve the fourth puzzle", Arrays.asList(takeNote3, readNotes3, useKnifeOnFireplace, searchFireplace, clickSapphire, clickDiamond, clickZenyte, clickEmerald, clickOnyx, clickRuby, searchFireplaceForSapphireKey)));
- allSteps.add(new PanelDetails("Confront the killer", Arrays.asList(goThroughSapphireDoor, reflectKnives, watchTheKillersReveal, pickUpKillersKnife, fightAbigale, leaveSapphireRoom, talkToMandy)));
-
- return allSteps;
+ var steps = new ArrayList();
+
+ steps.add(new PanelDetails("Talk to Abigale", List.of(
+ talkToAbigale
+ )));
+
+ steps.add(new PanelDetails("Enter the manor", List.of(
+ takeTheBoat,
+ takeTheBucket,
+ searchTheBarrel,
+ useBucketOnBarrel,
+ searchTheBarrelForKey,
+ openManorDoor
+ )));
+
+ steps.add(new PanelDetails("Solve the first puzzle", List.of(
+ takeKnife,
+ tryToOpenPinkKnobDoor,
+ takeNote1,
+ readNotes1,
+ useKnifeOnPainting,
+ searchPainting,
+ goThroughRubyDoor
+ )));
+
+ steps.add(new PanelDetails("Solve the second puzzle", List.of(
+ takeTinderbox,
+ lightCandle1,
+ lightBarrel,
+ leaveExplosionRoom,
+ climbWall
+ )));
+
+ steps.add(new PanelDetails("Solve the third puzzle", List.of(
+ observeThroughTree,
+ takeNote2,
+ readNotes2,
+ pwPlayPiano,
+ searchThePiano
+ )));
+
+ steps.add(new PanelDetails("Witness another murder", List.of(
+ returnOverBrokenWall,
+ openEmeraldDoor,
+ enterBandosGodswordRoomStep
+ )));
+
+ steps.add(new PanelDetails("Solve the fourth puzzle", List.of(
+ takeNote3,
+ readNotes3,
+ useKnifeOnFireplace,
+ pwSolveFireplacePuzzle,
+ searchFireplaceForSapphireKey
+ )));
+
+ steps.add(new PanelDetails("Confront the killer", List.of(
+ goThroughSapphireDoor,
+ reflectKnives,
+ watchTheKillersReveal,
+ pickUpKillersKnife,
+ fightAbigale,
+ leaveSapphireRoom,
+ talkToMandy
+ )));
+
+ return steps;
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/monkeymadnessi/MonkeyMadnessI.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/monkeymadnessi/MonkeyMadnessI.java
index e1f41e132dd..2f030d47704 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/monkeymadnessi/MonkeyMadnessI.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/monkeymadnessi/MonkeyMadnessI.java
@@ -52,7 +52,6 @@
import net.runelite.client.plugins.microbot.questhelper.util.QHObjectID;
import net.runelite.api.Prayer;
import net.runelite.api.QuestState;
-import net.runelite.api.SpriteID;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.gameval.*;
@@ -420,9 +419,9 @@ public void setupConditions()
inThroneRoom = new ZoneRequirement(throne1, throne2, throne3, throne4);
inJungleDemonRoom = new ZoneRequirement(jungleDemonRoom);
- talkedToCaranock = new VarbitRequirement(122, 3);
+ talkedToCaranock = new VarbitRequirement(VarbitID.MM_CARANOCK, 3);
- reportedBackToNarnode = new VarbitRequirement(121, 7);
+ reportedBackToNarnode = new VarbitRequirement(VarbitID.MM_NARNODE, 7);
talkedToDaero = new VarbitRequirement(VarbitID.MM_DAERO, 1, Operation.GREATER_EQUAL);
@@ -581,11 +580,11 @@ public void setupSteps()
searchForDentures = new ObjectStep(this, ObjectID.MM_DENTURE_CRATE, new WorldPoint(2767, 2769, 0),
"DO NOT WALK ON THE LIGHT FLOOR. Search the stacked crates for monkey dentures.");
- searchForDentures.addTileMarker(new WorldPoint(2767, 2768, 0), SpriteID.PLAYER_KILLER_SKULL);
- searchForDentures.addTileMarker(new WorldPoint(2766, 2768, 0), SpriteID.PLAYER_KILLER_SKULL);
- searchForDentures.addTileMarker(new WorldPoint(2767, 2767, 0), SpriteID.PLAYER_KILLER_SKULL);
- searchForDentures.addTileMarker(new WorldPoint(2766, 2767, 0), SpriteID.PLAYER_KILLER_SKULL);
- searchForDentures.addTileMarker(new WorldPoint(2766, 2769, 0), SpriteID.PLAYER_KILLER_SKULL);
+ searchForDentures.addTileMarker(new WorldPoint(2767, 2768, 0), SpriteID.HEADICONS_PK);
+ searchForDentures.addTileMarker(new WorldPoint(2766, 2768, 0), SpriteID.HEADICONS_PK);
+ searchForDentures.addTileMarker(new WorldPoint(2767, 2767, 0), SpriteID.HEADICONS_PK);
+ searchForDentures.addTileMarker(new WorldPoint(2766, 2767, 0), SpriteID.HEADICONS_PK);
+ searchForDentures.addTileMarker(new WorldPoint(2766, 2769, 0), SpriteID.HEADICONS_PK);
searchForDentures.addTileMarkers(new WorldPoint(2768, 2769, 0));
searchForDentures.addDialogStep("Yes");
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/monkeymadnessii/AgilityDungeonSteps.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/monkeymadnessii/AgilityDungeonSteps.java
index 0ecc7da4833..0ba1c6e4191 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/monkeymadnessii/AgilityDungeonSteps.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/monkeymadnessii/AgilityDungeonSteps.java
@@ -39,13 +39,15 @@
import net.runelite.api.ChatMessageType;
import net.runelite.api.Player;
import net.runelite.api.Prayer;
-import net.runelite.api.SpriteID;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.events.ChatMessage;
import net.runelite.api.events.GameTick;
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.SpriteID;
+import net.runelite.api.gameval.VarbitID;
+
import net.runelite.client.eventbus.Subscribe;
import java.util.*;
@@ -129,7 +131,7 @@ public void setupConditions()
inKrukRoom = new ZoneRequirement(krukRoom);
hasBronzeKey = bronzeKey;
- openedShortcut = new VarbitRequirement(5029, 1);
+ openedShortcut = new VarbitRequirement(VarbitID.MM2_MAZE_RETURN, 1);
path1SouthIsWrongChat = new ChatMessageRequirement(
new ZoneRequirement(new Zone(new WorldPoint(2512, 9141, 1), new WorldPoint(2515, 9135, 1))),
@@ -273,8 +275,8 @@ public void setupSteps()
fightKruk = new NpcStep(getQuestHelper(), NpcID.MM2_KRUK_COMBAT, new WorldPoint(2535, 9213, 1),
"Kill Kruk. He can be flinched on a corner in the room by keeping him on a north east tile to you.");
- fightKruk.addTileMarker(new WorldPoint(2528, 9220, 1), SpriteID.RS2_SWORD_POINTED_LEFT);
- fightKruk.addTileMarker(new WorldPoint(2529, 9221, 1), SpriteID.EQUIPMENT_SLOT_SHIELD);
+ fightKruk.addTileMarker(new WorldPoint(2528, 9220, 1), SpriteID.Sworddecor.LEFT);
+ fightKruk.addTileMarker(new WorldPoint(2529, 9221, 1), SpriteID.Wornicons.SHIELD);
}
private void updateSection1Route()
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/monkeymadnessii/MM2Sabotage.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/monkeymadnessii/MM2Sabotage.java
index d25a4acf734..5e3d4b5a8a5 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/monkeymadnessii/MM2Sabotage.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/monkeymadnessii/MM2Sabotage.java
@@ -36,11 +36,12 @@
import net.runelite.client.plugins.microbot.questhelper.steps.DetailedQuestStep;
import net.runelite.client.plugins.microbot.questhelper.steps.ObjectStep;
import net.runelite.client.plugins.microbot.questhelper.steps.QuestStep;
-import net.runelite.api.SpriteID;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.events.GameTick;
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.SpriteID;
+import net.runelite.api.gameval.VarbitID;
import java.util.Arrays;
import java.util.List;
@@ -144,14 +145,14 @@ public void setupConditions()
// 10->14
// 14->46
// 46->62
- placedSatchel1 = new VarbitRequirement(5044, 1);
- placedSatchel2 = new VarbitRequirement(5042, 1);
- placedSatchel3 = new VarbitRequirement(5043, 1);
- placedSatchel4 = new VarbitRequirement(5046, 1);
- placedSatchel5 = new VarbitRequirement(5045, 1);
- placedSatchel6 = new VarbitRequirement(5041, 1);
+ placedSatchel1 = new VarbitRequirement(VarbitID.MM2_PLATFORM_TARGET_4, 1);
+ placedSatchel2 = new VarbitRequirement(VarbitID.MM2_PLATFORM_TARGET_2, 1);
+ placedSatchel3 = new VarbitRequirement(VarbitID.MM2_PLATFORM_TARGET_3, 1);
+ placedSatchel4 = new VarbitRequirement(VarbitID.MM2_PLATFORM_TARGET_6, 1);
+ placedSatchel5 = new VarbitRequirement(VarbitID.MM2_PLATFORM_TARGET_5, 1);
+ placedSatchel6 = new VarbitRequirement(VarbitID.MM2_PLATFORM_TARGET_1, 1);
- placedAllSatchels = new VarbitRequirement(5047, 63);
+ placedAllSatchels = new VarbitRequirement(VarbitID.MM2_PLATFORM_TARGETS, 63);
}
public void setupSteps()
@@ -260,8 +261,8 @@ public void setupSteps()
);
// Exclamation mark
- placeSatchel3.addTileMarker(new WorldPoint(2069, 5413, 2), SpriteID.BOUNTY_HUNTER_TARGET_WEALTH_1_VERY_LOW);
- placeSatchel3.addTileMarker(new WorldPoint(2069, 5421, 2), SpriteID.BOUNTY_HUNTER_TARGET_WEALTH_1_VERY_LOW);
+ placeSatchel3.addTileMarker(new WorldPoint(2069, 5413, 2), SpriteID.HeadiconsPkInterface.BOUNTY_HUNTER_TARGET_WEALTH_1_VERY_LOW);
+ placeSatchel3.addTileMarker(new WorldPoint(2069, 5421, 2), SpriteID.HeadiconsPkInterface.BOUNTY_HUNTER_TARGET_WEALTH_1_VERY_LOW);
placeSatchel3.setHideMinimapLines(true);
placeSatchel3.setLinePoints(pathToSatchel3);
@@ -276,8 +277,8 @@ public void setupSteps()
new WorldPoint(2066, 5431, 2),
new WorldPoint(2072, 5431, 2)
);
- goUpToSatchel4.addTileMarker(new WorldPoint(2069, 5421, 2), SpriteID.BOUNTY_HUNTER_TARGET_WEALTH_1_VERY_LOW);
- goUpToSatchel4.addTileMarker(new WorldPoint(2066, 5413, 2), SpriteID.BOUNTY_HUNTER_TARGET_WEALTH_1_VERY_LOW);
+ goUpToSatchel4.addTileMarker(new WorldPoint(2069, 5421, 2), SpriteID.HeadiconsPkInterface.BOUNTY_HUNTER_TARGET_WEALTH_1_VERY_LOW);
+ goUpToSatchel4.addTileMarker(new WorldPoint(2066, 5413, 2), SpriteID.HeadiconsPkInterface.BOUNTY_HUNTER_TARGET_WEALTH_1_VERY_LOW);
goUpToSatchel4.setHideMinimapLines(true);
placeSatchel4 = new ObjectStep(getQuestHelper(), ObjectID.MM2_TARGET_F, new WorldPoint(2096, 5393, 3), "Place a satchel on the gas cylinder to the south.", filledSatchel1Highlighted);
@@ -300,7 +301,7 @@ public void setupSteps()
new WorldPoint(2085, 5409, 3),
new WorldPoint(2067, 5407, 3)
);
- placeSatchel5.addTileMarker(new WorldPoint(2069, 5413, 3), SpriteID.BOUNTY_HUNTER_TARGET_WEALTH_1_VERY_LOW);
+ placeSatchel5.addTileMarker(new WorldPoint(2069, 5413, 3), SpriteID.HeadiconsPkInterface.BOUNTY_HUNTER_TARGET_WEALTH_1_VERY_LOW);
placeSatchel5.setHideMinimapLines(true);
placeSatchel5.addIcon(ItemID.MM2_EXPLOSIVES_SATCHEL_FULL);
goF2ToF1ForSatchel6 = new ObjectStep(getQuestHelper(), ObjectID.MM2_SHIPYARD_LADDER_TOP, new WorldPoint(2098, 5407, 3), "Go back to the bottom floor.", filledSatchel1);
@@ -313,7 +314,7 @@ public void setupSteps()
new WorldPoint(2085, 5409, 3),
new WorldPoint(2067, 5407, 3)
);
- goF2ToF1ForSatchel6.addTileMarker(new WorldPoint(2066, 5413, 3), SpriteID.BOUNTY_HUNTER_TARGET_WEALTH_1_VERY_LOW);
+ goF2ToF1ForSatchel6.addTileMarker(new WorldPoint(2066, 5413, 3), SpriteID.HeadiconsPkInterface.BOUNTY_HUNTER_TARGET_WEALTH_1_VERY_LOW);
goF1ToF0ForSatchel6 = new ObjectStep(getQuestHelper(), ObjectID.MM2_SHIPYARD_LADDER_TOP, new WorldPoint(2098, 5408, 2), "Go back to the bottom floor.", filledSatchel1);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/monkeymadnessii/MonkeyMadnessII.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/monkeymadnessii/MonkeyMadnessII.java
index f8fe2b7f8ec..c392a31ecf8 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/monkeymadnessii/MonkeyMadnessII.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/monkeymadnessii/MonkeyMadnessII.java
@@ -354,7 +354,7 @@ public void setupConditions()
foundHandkerchief = new Conditions(LogicType.OR, new VarbitRequirement(VarbitID.MM2_FOUND_HANDKERCHIEF, 2, Operation.GREATER_EQUAL), handkerchief);
talkedToAnita = new VarbitRequirement(VarbitID.MM2_ANTIAS_CLUE, 1, Operation.GREATER_EQUAL);
openedCupboard = new Conditions(true, LogicType.OR, new WidgetTextRequirement(229, 1, "You turn the statue and hear a clicking sound in the room."), new ChatMessageRequirement("You have already activated the statue."));
- foundNote = new VarbitRequirement(5028, 1);
+ foundNote = new VarbitRequirement(VarbitID.MM2_FOUND_NOTE, 1);
hasBrush = new Conditions(LogicType.OR, grapeBrush, brush);
// Read note:
@@ -369,15 +369,15 @@ public void setupConditions()
kob2Nearby = new NpcCondition(NpcID.MM2_GENERAL_KOB_COMBAT);
keef2Nearby = new NpcCondition(NpcID.MM2_CHIEFTAN_KEEF_COMBAT);
- defeatedKob = new VarbitRequirement(5035, 1);
- defeatedKeef = new VarbitRequirement(5034, 1);
+ defeatedKob = new VarbitRequirement(VarbitID.MM2_TROLL_DEFEATED, 1);
+ defeatedKeef = new VarbitRequirement(VarbitID.MM2_OGRE_DEFEATED, 1);
// Killed Kruk, 5036 0->2
- smithInLocation1 = new VarbitRequirement(5040, 1); // TODO: Get location
- smithInLocation2 = new VarbitRequirement(5040, 2); // TODO: Get location
- smithInLocation3 = new VarbitRequirement(5040, 3); // TODO: Get location
- smithInLocation4 = new VarbitRequirement(5040, 4); // Smith near rune store
+ smithInLocation1 = new VarbitRequirement(VarbitID.MM2_LE_SMITH_POS, 1); // TODO: Get location
+ smithInLocation2 = new VarbitRequirement(VarbitID.MM2_LE_SMITH_POS, 2); // TODO: Get location
+ smithInLocation3 = new VarbitRequirement(VarbitID.MM2_LE_SMITH_POS, 3); // TODO: Get location
+ smithInLocation4 = new VarbitRequirement(VarbitID.MM2_LE_SMITH_POS, 4); // Smith near rune store
smithNearby = new NpcCondition(NpcID.MM2_LE_SMITH);
@@ -395,7 +395,7 @@ public void setupConditions()
// 5068 0->1
// 5069 1->2
- killedGorillas = new VarbitRequirement(5068, 3);
+ killedGorillas = new VarbitRequirement(VarbitID.MM2_BREACH_KC, 3);
nieveFollowing = new NpcInteractingRequirement(NpcID.MM2_NIEVE_FOLLOWER);
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/monksfriend/MonksFriend.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/monksfriend/MonksFriend.java
index d169ff0390e..da62d0fa327 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/monksfriend/MonksFriend.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/monksfriend/MonksFriend.java
@@ -26,124 +26,150 @@
import net.runelite.client.plugins.microbot.questhelper.panel.PanelDetails;
import net.runelite.client.plugins.microbot.questhelper.questhelpers.BasicQuestHelper;
-import net.runelite.client.plugins.microbot.questhelper.requirements.Requirement;
-import net.runelite.client.plugins.microbot.questhelper.requirements.conditional.Conditions;
import net.runelite.client.plugins.microbot.questhelper.requirements.item.ItemRequirement;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.and;
import net.runelite.client.plugins.microbot.questhelper.requirements.zone.Zone;
import net.runelite.client.plugins.microbot.questhelper.requirements.zone.ZoneRequirement;
import net.runelite.client.plugins.microbot.questhelper.rewards.ExperienceReward;
import net.runelite.client.plugins.microbot.questhelper.rewards.ItemReward;
import net.runelite.client.plugins.microbot.questhelper.rewards.QuestPointReward;
-import net.runelite.client.plugins.microbot.questhelper.steps.*;
+import net.runelite.client.plugins.microbot.questhelper.steps.ConditionalStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.DetailedQuestStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.NpcStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.ObjectStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.QuestStep;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import net.runelite.api.Skill;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
-import java.util.*;
-
public class MonksFriend extends BasicQuestHelper
{
- //Items Required
- ItemRequirement jugOfWater, log, blanket;
+ // Required items
+ ItemRequirement jugOfWater;
+ ItemRequirement log;
- //Items Recommended
+ // Recommended items
ItemRequirement ardougneCloak;
- Requirement inDungeon;
-
- QuestStep talkToOmad, goDownLadder, grabBlanket, goUpLadder, returnToOmadWithBlanket, talkToOmadAgain, talkToCedric, talkToCedricWithJug,
- continueTalkingToCedric, talkToCedricWithLog, finishQuest;
-
- //Zones
+ // Zones
Zone dungeon;
- @Override
- public Map loadSteps()
- {
- initializeRequirements();
- setupConditions();
- setupSteps();
- Map steps = new HashMap<>();
+ // Miscellaneous requirements
+ ItemRequirement blanket;
- steps.put(0, talkToOmad);
+ ZoneRequirement inDungeon;
- ConditionalStep getBlanket = new ConditionalStep(this, goDownLadder);
- getBlanket.addStep(new Conditions(inDungeon, blanket.alsoCheckBank(questBank)), goUpLadder);
- getBlanket.addStep(blanket.alsoCheckBank(questBank), returnToOmadWithBlanket);
- getBlanket.addStep(inDungeon, grabBlanket);
-
- steps.put(10, getBlanket);
+ // Steps
+ NpcStep talkToOmad;
+ ObjectStep goDownLadder;
+ DetailedQuestStep grabBlanket;
+ ObjectStep goUpLadder;
+ NpcStep returnToOmadWithBlanket;
+ NpcStep talkToOmadAgain;
+ NpcStep talkToCedric;
+ NpcStep talkToCedricWithJug;
+ NpcStep continueTalkingToCedric;
+ NpcStep talkToCedricWithLog;
+ NpcStep finishQuest;
- steps.put(20, talkToOmadAgain);
- steps.put(30, talkToCedric);
- steps.put(40, talkToCedricWithJug);
- steps.put(50, continueTalkingToCedric);
- steps.put(60, talkToCedricWithLog);
- steps.put(70, finishQuest);
-
- return steps;
+ @Override
+ protected void setupZones()
+ {
+ dungeon = new Zone(new WorldPoint(2559, 9597, 0), new WorldPoint(2582, 9623, 0));
}
@Override
protected void setupRequirements()
{
+ inDungeon = new ZoneRequirement(dungeon);
+
log = new ItemRequirement("Logs", ItemID.LOGS);
jugOfWater = new ItemRequirement("Jug of Water", ItemID.JUG_WATER);
blanket = new ItemRequirement("Child's blanket", ItemID.CHILDS_BLANKET);
ardougneCloak = new ItemRequirement("Ardougne cloak 1 or higher for teleports to the monastery", ItemID.CERT_ARRAVCERTIFICATE).isNotConsumed();
}
- @Override
- protected void setupZones()
- {
- dungeon = new Zone(new WorldPoint(2559, 9597, 0), new WorldPoint(2582, 9623, 0));
- }
-
public void setupConditions()
{
- inDungeon = new ZoneRequirement(dungeon);
}
public void setupSteps()
{
- talkToOmad = new NpcStep(this, NpcID.BROTHER_OMAD, new WorldPoint(2607, 3211, 0), "Talk to Brother Omad in the monastery south of West Ardougne.");
+ talkToOmad = new NpcStep(this, NpcID.BROTHER_OMAD, new WorldPoint(2607, 3211, 0), "Talk to Brother Omad in the monastery south of East Ardougne.");
talkToOmad.addDialogStep("Why can't you sleep, what's wrong?");
- talkToOmad.addDialogStep("Can I help at all?");
+ talkToOmad.addDialogStep("Yes.");
+
goDownLadder = new ObjectStep(this, ObjectID.LADDER_OUTSIDE_TO_UNDERGROUND, new WorldPoint(2561, 3222, 0), "Go down the ladder in a circle of stones west of the monastery.");
grabBlanket = new DetailedQuestStep(this, new WorldPoint(2570, 9604, 0), "Pick up the Child's blanket in the room to the south.", blanket);
- goUpLadder = new ObjectStep(this, ObjectID.LADDER_FROM_CELLAR, new WorldPoint(2561, 9622, 0), "Go back up the ladder.");
- returnToOmadWithBlanket = new NpcStep(this, NpcID.BROTHER_OMAD, new WorldPoint(2607, 3211, 0), "Bring the blanket back to Brother Omad.", blanket);
+ goUpLadder = new ObjectStep(this, ObjectID.LADDER_FROM_CELLAR, new WorldPoint(2561, 9622, 0), "Go back up the ladder.", blanket);
+ returnToOmadWithBlanket = new NpcStep(this, NpcID.BROTHER_OMAD, new WorldPoint(2607, 3211, 0), "Bring the blanket back to Brother Omad in the monastery.", blanket);
+
talkToOmadAgain = new NpcStep(this, NpcID.BROTHER_OMAD, new WorldPoint(2607, 3211, 0), "Talk to Brother Omad again.");
talkToOmadAgain.addDialogStep("Is there anything else I can help with?");
talkToOmadAgain.addDialogStep("Who's Brother Cedric?");
talkToOmadAgain.addDialogStep("Where should I look?");
+
talkToCedric = new NpcStep(this, NpcID.BROTHER_CEDRIC, new WorldPoint(2614, 3258, 0), "Talk to Brother Cedric north of the monastery.");
+
talkToCedricWithJug = new NpcStep(this, NpcID.BROTHER_CEDRIC, new WorldPoint(2614, 3258, 0), "Talk to Brother Cedric again.", jugOfWater);
talkToCedricWithJug.addDialogStep("Yes, I'd be happy to!");
continueTalkingToCedric = new NpcStep(this, NpcID.BROTHER_CEDRIC, new WorldPoint(2614, 3258, 0), "Talk to Brother Cedric again.");
continueTalkingToCedric.addDialogStep("Yes, I'd be happy to!");
talkToCedricWithJug.addSubSteps(continueTalkingToCedric);
+
talkToCedricWithLog = new NpcStep(this, NpcID.BROTHER_CEDRIC, new WorldPoint(2614, 3258, 0), "Talk to Brother Cedric once again with logs.", log);
+
finishQuest = new NpcStep(this, NpcID.BROTHER_OMAD, new WorldPoint(2607, 3211, 0), "Return to Brother Omad to finish the quest.");
}
+ @Override
+ public Map loadSteps()
+ {
+ initializeRequirements();
+ setupSteps();
+
+ var steps = new HashMap();
+
+ steps.put(0, talkToOmad);
+
+ var getBlanket = new ConditionalStep(this, goDownLadder);
+ getBlanket.addStep(and(inDungeon, blanket.alsoCheckBank(questBank)), goUpLadder);
+ getBlanket.addStep(blanket.alsoCheckBank(questBank), returnToOmadWithBlanket);
+ getBlanket.addStep(inDungeon, grabBlanket);
+
+ steps.put(10, getBlanket);
+
+ steps.put(20, talkToOmadAgain);
+ steps.put(30, talkToCedric);
+ steps.put(40, talkToCedricWithJug);
+ steps.put(50, continueTalkingToCedric);
+ steps.put(60, talkToCedricWithLog);
+ steps.put(70, finishQuest);
+
+ return steps;
+ }
+
@Override
public List getItemRequirements()
{
- ArrayList reqs = new ArrayList<>();
- reqs.add(jugOfWater);
- reqs.add(log);
- return reqs;
+ return List.of(
+ jugOfWater,
+ log
+ );
}
@Override
public List getItemRecommended()
{
- ArrayList reqs = new ArrayList<>();
- reqs.add(ardougneCloak);
- return reqs;
+ return List.of(
+ ardougneCloak
+ );
}
@Override
@@ -155,23 +181,46 @@ public QuestPointReward getQuestPointReward()
@Override
public List getExperienceRewards()
{
- return Collections.singletonList(new ExperienceReward(Skill.WOODCUTTING, 2000));
+ return List.of(
+ new ExperienceReward(Skill.WOODCUTTING, 2000)
+ );
}
@Override
public List getItemRewards()
{
- return Collections.singletonList(new ItemReward("Law Runes", ItemID.LAWRUNE, 8));
+ return List.of(
+ new ItemReward("Law Runes", ItemID.LAWRUNE, 8)
+ );
}
@Override
public List getPanels()
{
- List allSteps = new ArrayList<>();
- allSteps.add(new PanelDetails("Starting off", Collections.singletonList(talkToOmad), jugOfWater, log));
- allSteps.add(new PanelDetails("Finding the blanket", Arrays.asList(goDownLadder, grabBlanket, goUpLadder, returnToOmadWithBlanket)));
- allSteps.add(new PanelDetails("Help Cedric", Arrays.asList(talkToOmadAgain, talkToCedric, talkToCedricWithJug, talkToCedricWithLog, finishQuest)));
-
- return allSteps;
+ List sections = new ArrayList<>();
+
+ sections.add(new PanelDetails("Starting off", List.of(
+ talkToOmad
+ ), List.of(
+ jugOfWater,
+ log
+ )));
+
+ sections.add(new PanelDetails("Finding the blanket", List.of(
+ goDownLadder,
+ grabBlanket,
+ goUpLadder,
+ returnToOmadWithBlanket
+ )));
+
+ sections.add(new PanelDetails("Help Cedric", List.of(
+ talkToOmadAgain,
+ talkToCedric,
+ talkToCedricWithJug,
+ talkToCedricWithLog,
+ finishQuest
+ )));
+
+ return sections;
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/mountaindaughter/MountainDaughter.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/mountaindaughter/MountainDaughter.java
index b2b99ee099c..042b974fbdc 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/mountaindaughter/MountainDaughter.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/mountaindaughter/MountainDaughter.java
@@ -43,11 +43,11 @@
import net.runelite.client.plugins.microbot.questhelper.rewards.UnlockReward;
import net.runelite.client.plugins.microbot.questhelper.steps.*;
import net.runelite.api.Skill;
-import net.runelite.api.SpriteID;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
+import net.runelite.api.gameval.SpriteID;
import net.runelite.api.gameval.VarbitID;
import java.util.*;
@@ -214,23 +214,23 @@ private void loadConditions()
onIsland3 = new Conditions(new ZoneRequirement(LAKE_ISLAND_3));
inTheCamp = new Conditions(new ZoneRequirement(CAMP_ZONE_1, CAMP_ZONE_2, CAMP_ZONE_3));
- askedAboutDiplomacy = new Conditions(new VarbitRequirement(262, 10));
- rubbedMudIntoTree = new Conditions(new VarbitRequirement(261, 1));
+ askedAboutDiplomacy = new Conditions(new VarbitRequirement(VarbitID.MDAUGHTER_RELATIONS_VAR, 10));
+ rubbedMudIntoTree = new Conditions(new VarbitRequirement(VarbitID.MDAUGHTER_MUD_VAR, 1));
VarbitRequirement askedAboutFood = new VarbitRequirement(VarbitID.MDAUGHTER_FOOD_VAR, 10, Operation.GREATER_EQUAL);
- askedAboutFoodAndDiplomacy = new Conditions(new VarbitRequirement(262, 10), askedAboutFood);
- spokenToSvidi = new Conditions(new VarbitRequirement(262, 20), askedAboutFood);
- spokenToBrundt = new Conditions(new VarbitRequirement(262, 30), askedAboutFood);
- minedRock = new Conditions(new VarbitRequirement(262, 40), askedAboutFood);
- gottenGuarantee = new Conditions(new VarbitRequirement(262, 50), askedAboutFood);
- givenGuaranteeToSvidi = new Conditions(new VarbitRequirement(262, 60), askedAboutFood);
- finishedDiplomacy = new Conditions(new VarbitRequirement(266, 1));
- finishedFood = new VarbitRequirement(263, 20);
+ askedAboutFoodAndDiplomacy = new Conditions(new VarbitRequirement(VarbitID.MDAUGHTER_RELATIONS_VAR, 10), askedAboutFood);
+ spokenToSvidi = new Conditions(new VarbitRequirement(VarbitID.MDAUGHTER_RELATIONS_VAR, 20), askedAboutFood);
+ spokenToBrundt = new Conditions(new VarbitRequirement(VarbitID.MDAUGHTER_RELATIONS_VAR, 30), askedAboutFood);
+ minedRock = new Conditions(new VarbitRequirement(VarbitID.MDAUGHTER_RELATIONS_VAR, 40), askedAboutFood);
+ gottenGuarantee = new Conditions(new VarbitRequirement(VarbitID.MDAUGHTER_RELATIONS_VAR, 50), askedAboutFood);
+ givenGuaranteeToSvidi = new Conditions(new VarbitRequirement(VarbitID.MDAUGHTER_RELATIONS_VAR, 60), askedAboutFood);
+ finishedDiplomacy = new Conditions(new VarbitRequirement(VarbitID.MDAUGHTER_HAMAL_RELATIONS_DONE, 1));
+ finishedFood = new VarbitRequirement(VarbitID.MDAUGHTER_FOOD_VAR, 20);
finishedFoodAndDiplomacy = new Conditions(finishedDiplomacy, finishedFood);
inKendalCave = new Conditions(new ZoneRequirement(KENDAL_CAVE));
fightableKendalNearby = new Conditions(new NpcHintArrowRequirement(NpcID.MDAUGHTER_BEARMAN_FIGHTER));
- hasBuried = new Conditions(new VarbitRequirement(273, 1));
+ hasBuried = new Conditions(new VarbitRequirement(VarbitID.MDAUGHTER_BURIAL_STATE, 1));
}
private void loadQuestSteps()
@@ -343,8 +343,8 @@ private void loadQuestSteps()
enterCave = new ObjectStep(this, ObjectID.MDAUGHTER_CAVEENTRANCE, new WorldPoint(2809, 3703, 0),
"Cut through the trees north east of the lake and enter the cave there. Bring combat gear.",
axe);
- ((ObjectStep) enterCave).addTileMarker(new WorldPoint(2802, 3703, 0), SpriteID.COMBAT_STYLE_AXE_CHOP);
- ((ObjectStep) enterCave).addTileMarker(new WorldPoint(2807, 3703, 0), SpriteID.COMBAT_STYLE_AXE_CHOP);
+ ((ObjectStep) enterCave).addTileMarker(new WorldPoint(2802, 3703, 0), SpriteID.Combaticons.AXE_CHOP);
+ ((ObjectStep) enterCave).addTileMarker(new WorldPoint(2807, 3703, 0), SpriteID.Combaticons.AXE_CHOP);
talkToKendal = new NpcStep(this, NpcID.MDAUGHTER_BEARMAN, new WorldPoint(2788, 10081, 0),
"Speak to the Kendal, then kill him.");
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/mourningsendparti/MourningsEndPartI.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/mourningsendparti/MourningsEndPartI.java
index bf182ba05a7..7a51cd2807f 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/mourningsendparti/MourningsEndPartI.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/mourningsendparti/MourningsEndPartI.java
@@ -294,16 +294,16 @@ public void setupConditions()
releasedGnome = new VarbitRequirement(VarbitID.MOURNING_GNOME, 7, Operation.GREATER_EQUAL);
repairedDevice = new VarbitRequirement(VarbitID.MOURNING_GNOME, 9, Operation.GREATER_EQUAL);
- learntAboutToads = new VarbitRequirement(9155, 1);
- redToadLoaded = new VarbitRequirement(804, 1);
- greenToadLoaded = new VarbitRequirement(804, 2);
- blueToadLoaded = new VarbitRequirement(804, 3);
- yellowToadLoaded = new VarbitRequirement(804, 4);
+ learntAboutToads = new VarbitRequirement(VarbitID.MOURNING_DYE_CHAT, 1);
+ redToadLoaded = new VarbitRequirement(VarbitID.MOURNING_GUN_AMMO, 1);
+ greenToadLoaded = new VarbitRequirement(VarbitID.MOURNING_GUN_AMMO, 2);
+ blueToadLoaded = new VarbitRequirement(VarbitID.MOURNING_GUN_AMMO, 3);
+ yellowToadLoaded = new VarbitRequirement(VarbitID.MOURNING_GUN_AMMO, 4);
- greenDyed = new VarbitRequirement(803, 1);
- redDyed = new VarbitRequirement(801, 1);
- yellowDyed = new VarbitRequirement(802, 1);
- blueDyed = new VarbitRequirement(800, 1);
+ greenDyed = new VarbitRequirement(VarbitID.MOURNING_SHEEP_GREEN, 1);
+ redDyed = new VarbitRequirement(VarbitID.MOURNING_SHEEP_RED, 1);
+ yellowDyed = new VarbitRequirement(VarbitID.MOURNING_SHEEP_YELLOW, 1);
+ blueDyed = new VarbitRequirement(VarbitID.MOURNING_SHEEP_BLUE, 1);
greenToadGot = new Conditions(LogicType.OR, greenToadLoaded, greenToad, greenDyed);
redToadGot = new Conditions(LogicType.OR, redToadLoaded, redToad, redDyed);
@@ -315,9 +315,9 @@ public void setupConditions()
givenRottenApple = new VarbitRequirement(VarbitID.MOURNING_ELENA, 2, Operation.GREATER_EQUAL);
receivedSieve = new VarbitRequirement(VarbitID.MOURNING_ELENA, 4, Operation.GREATER_EQUAL);
- poisoned1 = new VarbitRequirement(806, 1);
- poisoned2 = new VarbitRequirement(807, 1);
- poisoned3 = new VarbitRequirement(808, 1);
+ poisoned1 = new VarbitRequirement(VarbitID.MOURNING_FOOD_POISON1, 1);
+ poisoned2 = new VarbitRequirement(VarbitID.MOURNING_FOOD_POISON2, 1);
+ poisoned3 = new VarbitRequirement(VarbitID.MOURNING_FOOD_POISON3, 1);
twoPoisoned = new Conditions(LogicType.OR, new Conditions(poisoned1, poisoned2), new Conditions(poisoned1, poisoned3), new Conditions(poisoned2, poisoned3));
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/mourningsendpartii/MourningsEndPartII.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/mourningsendpartii/MourningsEndPartII.java
index 887f8957fe9..c3d0a31772c 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/mourningsendpartii/MourningsEndPartII.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/mourningsendpartii/MourningsEndPartII.java
@@ -499,24 +499,24 @@ public void setupConditions()
inDeathAltar = new ZoneRequirement(deathAltar);
- dispenserEmpty = new VarbitRequirement(1106, 0);
+ dispenserEmpty = new VarbitRequirement(VarbitID.MOURNING_TEMPLE_MIRRORS_RESET_TRAY, 0);
// 1108 yellow crystal in dispenser
// 1107, blue crystal in dispenser
- usedRope = new VarbitRequirement(1328, 1);
+ usedRope = new VarbitRequirement(VarbitID.MOURNING_TEMPLE_ROPE, 1);
- knowToUseCrystal = new VarbitRequirement(1104, 1);
+ knowToUseCrystal = new VarbitRequirement(VarbitID.MOURNING_ARIANWYN_TOLD, 1);
- solvedPuzzle1 = new VarbitRequirement(1113, 1);
- solvedPuzzle2 = new VarbitRequirement(1114, 1);
- solvedPuzzle3 = new VarbitRequirement(1116, 1);
- solvedPuzzle4 = new VarbitRequirement(1115, 1);
- solvedPuzzle5 = new VarbitRequirement(1117, 1);
+ solvedPuzzle1 = new VarbitRequirement(VarbitID.MOURNING_TEMPLE_PARTS_2, 1);
+ solvedPuzzle2 = new VarbitRequirement(VarbitID.MOURNING_TEMPLE_PARTS_3, 1);
+ solvedPuzzle3 = new VarbitRequirement(VarbitID.MOURNING_TEMPLE_PARTS_5, 1);
+ solvedPuzzle4 = new VarbitRequirement(VarbitID.MOURNING_TEMPLE_PARTS_4, 1);
+ solvedPuzzle5 = new VarbitRequirement(VarbitID.MOURNING_TEMPLE_PARTS_6, 1);
- enteredDeathArea = new VarbitRequirement(1330, 1);
+ enteredDeathArea = new VarbitRequirement(VarbitID.MOURNING_LIGHT_DOOR_1_C_FIRST_TIME, 1);
- receivedList = new VarbitRequirement(1327, 1);
+ receivedList = new VarbitRequirement(VarbitID.MOURNING_DWARF_STARTEDTASK, 1);
final int RED = 1;
final int YELLOW = 2;
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/murdermystery/MurderMystery.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/murdermystery/MurderMystery.java
index a0a0766a619..2d46420dabd 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/murdermystery/MurderMystery.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/helpers/quests/murdermystery/MurderMystery.java
@@ -31,6 +31,9 @@
import net.runelite.client.plugins.microbot.questhelper.requirements.item.ItemRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.npc.DialogRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.runelite.RuneliteRequirement;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.and;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.not;
+import static net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicHelper.or;
import net.runelite.client.plugins.microbot.questhelper.requirements.util.LogicType;
import net.runelite.client.plugins.microbot.questhelper.requirements.var.VarplayerRequirement;
import net.runelite.client.plugins.microbot.questhelper.requirements.widget.WidgetTextRequirement;
@@ -39,192 +42,260 @@
import net.runelite.client.plugins.microbot.questhelper.rewards.ExperienceReward;
import net.runelite.client.plugins.microbot.questhelper.rewards.ItemReward;
import net.runelite.client.plugins.microbot.questhelper.rewards.QuestPointReward;
-import net.runelite.client.plugins.microbot.questhelper.steps.*;
+import net.runelite.client.plugins.microbot.questhelper.steps.ConditionalStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.DetailedQuestStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.ItemStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.NpcStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.ObjectStep;
+import net.runelite.client.plugins.microbot.questhelper.steps.QuestStep;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import net.runelite.api.Skill;
import net.runelite.api.coords.WorldPoint;
-import net.runelite.api.events.VarbitChanged;
+import net.runelite.api.gameval.InterfaceID;
import net.runelite.api.gameval.ItemID;
import net.runelite.api.gameval.NpcID;
import net.runelite.api.gameval.ObjectID;
-import net.runelite.client.eventbus.Subscribe;
-
-import java.util.*;
+import net.runelite.api.gameval.VarPlayerID;
public class MurderMystery extends BasicQuestHelper
{
- //Items Required
- ItemRequirement pot, pungentPot, criminalsDaggerAny, criminalsDagger, criminalsDaggerFlour, criminalsThread, criminalsThread1, criminalsThread2, criminalsThread3,
- twoFlypaper, potOfFlourHighlighted, flypaper, unknownPrint, silverNecklace, silverBook, silverBookFlour, silverNecklaceFlour, annaPrint, davidPrint, killersPrint, silverNeedle,
- silverPot, silverNeedleFlour, silverPotFlour, elizabethPrint, frankPrint, criminalsDaggerHighlighted, criminalsDaggerFlourHighlighted, silverCup, silverCupFlour, silverBottle,
- silverBottleFlour, bobPrint, carolPrint;
-
- RuneliteRequirement heardAboutPoisonSalesman, talkedToPoisonSalesman, hadThread, hadPot, hadKillerPrint;
-
- Requirement annaGuilty, bobGuilty, carolGuilty, davidGuilty, elizabethGuilty, frankGuilty, hasCriminalSilverItem, isUpstairs,
- hasSuspectPrint, hasSilverItemFlour;
-
- Requirement talkedToAnna, talkedToBob, talkedToCarol, talkedToDavid, talkedToElizabeth, talkedToFrank, talkedToSuspect, pleaseWaitRequirement;
- Requirement checkedAnna, checkedBob, checkedCarol, checkedDavid, checkedElizabeth, checkedFrank, checkedSuspect;
-
+ // Required items
+ ItemRequirement pot;
+
+ // Mid-quest requirements
+ ItemRequirement pungentPot;
+ ItemRequirement criminalsDaggerAny;
+ ItemRequirement criminalsDagger;
+ ItemRequirement criminalsDaggerFlour;
+ ItemRequirement criminalsThread;
+ ItemRequirement criminalsThread1;
+ ItemRequirement criminalsThread2;
+ ItemRequirement criminalsThread3;
+ ItemRequirement twoFlypaper;
+ ItemRequirement potOfFlourHighlighted;
+ ItemRequirement flypaper;
+ ItemRequirement unknownPrint;
+ ItemRequirement silverNecklace;
+ ItemRequirement silverBook;
+ ItemRequirement silverBookFlour;
+ ItemRequirement silverNecklaceFlour;
+ ItemRequirement annaPrint;
+ ItemRequirement davidPrint;
+ ItemRequirement killersPrint;
+ ItemRequirement silverNeedle;
+ ItemRequirement silverPot;
+ ItemRequirement silverNeedleFlour;
+ ItemRequirement silverPotFlour;
+ ItemRequirement elizabethPrint;
+ ItemRequirement frankPrint;
+ ItemRequirement criminalsDaggerHighlighted;
+ ItemRequirement criminalsDaggerFlourHighlighted;
+ ItemRequirement silverCup;
+ ItemRequirement silverCupFlour;
+ ItemRequirement silverBottle;
+ ItemRequirement silverBottleFlour;
+ ItemRequirement bobPrint;
+ ItemRequirement carolPrint;
+
+ // Zones
Zone upstairs;
- QuestStep talkToGuard, talkToGossip, talkToPoisonSalesman, pickUpDagger, pickUpPungentPot, searchWindowForThread, fillPotWithFlour, useFlourOnDagger,
- collectTwoFlypaper, useFlypaperOnDagger, searchAnnasBarrel, searchDavidsBarrel, searchFranksBarrel, searchElizabethsBarrel,
- searchBobsBarrel, searchCarolsBarrel, remainingSteps, finishQuest;
-
- QuestStep useFlourOnNecklace, useFlourOnCup, useFlourOnBottle, useFlourOnBook, useFlourOnNeedle, useFlourOnPot;
- QuestStep useFlypaperOnNecklace, useFlypaperOnCup, useFlypaperOnBottle, useFlypaperOnBook, useFlypaperOnNeedle, useFlypaperOnPot;
- QuestStep collectFlypaper, fillPotWithFlourForSilver;
- QuestStep compareAnna, compareBob, compareCarol, compareDavid, compareElizabeth, compareFrank;
- QuestStep talkToAnna, talkToBob, talkToFrank, talkToDavid, talkToCarol, talkToElizabeth;
- QuestStep searchAnna, searchBob, searchCarol, searchDavid, searchElizabeth, searchFrank;
-
- ConditionalStep useFlour, searchBarrel, useFlypaper, comparePrints, talkToSuspect, searchSuspectItem;
- DetailedQuestStep useFlourSidebar, searchBarrelSidebar, useFlypaperSidebar, comparePrintsSidebar, talkToSuspectSidebar, searchSuspectItemSidebar;
+ // Miscellaneous requirements
+ RuneliteRequirement heardAboutPoisonSalesman;
+ RuneliteRequirement talkedToPoisonSalesman;
+ RuneliteRequirement talkedToPoisonSalesman2;
+ RuneliteRequirement hadThread;
+ RuneliteRequirement hadPot;
+ RuneliteRequirement hadKillerPrint;
+
+ VarplayerRequirement annaGuilty;
+ VarplayerRequirement bobGuilty;
+ VarplayerRequirement carolGuilty;
+ VarplayerRequirement davidGuilty;
+ VarplayerRequirement elizabethGuilty;
+ VarplayerRequirement frankGuilty;
+ Conditions hasCriminalSilverItem;
+ ZoneRequirement isUpstairs;
+ Requirement hasSuspectPrint;
+ Requirement hasSilverItemFlour;
+
+ Conditions talkedToAnna;
+ Conditions talkedToBob;
+ Conditions talkedToCarol;
+ Conditions talkedToDavid;
+ Conditions talkedToElizabeth;
+ Conditions talkedToFrank;
+ RuneliteRequirement talkedToSuspect;
+ WidgetTextRequirement pleaseWaitRequirement;
+
+ Requirement checkedAnna;
+ Requirement checkedBob;
+ Requirement checkedCarol;
+ Requirement checkedDavid;
+ Requirement checkedElizabeth;
+ Requirement checkedFrank;
+ Requirement checkedSuspect;
+
+ // Steps
+ QuestStep talkToGuard;
+ QuestStep talkToGossip;
+ QuestStep talkToPoisonSalesman;
+ QuestStep talkToPoisonSalesman2;
+ QuestStep pickUpDagger;
+ QuestStep pickUpPungentPot;
+ QuestStep searchWindowForThread;
+ QuestStep fillPotWithFlour;
+ QuestStep useFlourOnDagger;
+ QuestStep collectTwoFlypaper;
+ QuestStep useFlypaperOnDagger;
+ QuestStep searchAnnasBarrel;
+ QuestStep searchDavidsBarrel;
+ QuestStep searchFranksBarrel;
+ QuestStep searchElizabethsBarrel;
+ QuestStep searchBobsBarrel;
+ QuestStep searchCarolsBarrel;
+ QuestStep remainingSteps;
+ QuestStep finishQuest;
+
+ QuestStep useFlourOnNecklace;
+ QuestStep useFlourOnCup;
+ QuestStep useFlourOnBottle;
+ QuestStep useFlourOnBook;
+ QuestStep useFlourOnNeedle;
+ QuestStep useFlourOnPot;
+
+ QuestStep useFlypaperOnNecklace;
+ QuestStep useFlypaperOnCup;
+ QuestStep useFlypaperOnBottle;
+ QuestStep useFlypaperOnBook;
+ QuestStep useFlypaperOnNeedle;
+ QuestStep useFlypaperOnPot;
+
+ QuestStep collectFlypaper;
+ QuestStep fillPotWithFlourForSilver;
+
+ QuestStep compareAnna;
+ QuestStep compareBob;
+ QuestStep compareCarol;
+ QuestStep compareDavid;
+ QuestStep compareElizabeth;
+ QuestStep compareFrank;
+
+ QuestStep talkToAnna;
+ QuestStep talkToBob;
+ QuestStep talkToFrank;
+ QuestStep talkToDavid;
+ QuestStep talkToCarol;
+ QuestStep talkToElizabeth;
+
+ QuestStep searchAnna;
+ QuestStep searchBob;
+ QuestStep searchCarol;
+ QuestStep searchDavid;
+ QuestStep searchElizabeth;
+ QuestStep searchFrank;
+
+ ConditionalStep useFlour;
+ ConditionalStep searchBarrel;
+ ConditionalStep useFlypaper;
+ ConditionalStep comparePrints;
+ ConditionalStep talkToSuspect;
+ ConditionalStep searchSuspectItem;
@Override
- public Map loadSteps()
+ protected void setupZones()
{
- initializeRequirements();
- setupZone();
- setupConditions();
- setupSteps();
- Map steps = new HashMap<>();
-
- steps.put(0, talkToGuard);
+ upstairs = new Zone(new WorldPoint(2727, 3571, 1), new WorldPoint(2752, 3585, 1));
+ }
- Requirement doesntNeedMoreFlypaper = new Conditions(LogicType.OR, twoFlypaper, new Conditions(flypaper, unknownPrint));
+ @Override
+ protected void setupRequirements()
+ {
+ pot = new ItemRequirement("Pot", ItemID.POT_EMPTY);
- Conditions hadPotAndThread = new Conditions(hadThread, hadPot);
+ pungentPot = new ItemRequirement("Pungent pot", ItemID.MURDERPOT2);
- ConditionalStep checkingPrintSteps = new ConditionalStep(this, pickUpDagger);
- /* compare prints */
- checkingPrintSteps.addStep(new Conditions(unknownPrint, hasSuspectPrint), comparePrints);
- checkingPrintSteps.addStep(new Conditions(unknownPrint, hasSilverItemFlour, flypaper), useFlypaper);
- checkingPrintSteps.addStep(new Conditions(unknownPrint, hasCriminalSilverItem, flypaper, potOfFlourHighlighted), useFlour);
- checkingPrintSteps.addStep(new Conditions(unknownPrint, hasCriminalSilverItem, flypaper), fillPotWithFlourForSilver);
- checkingPrintSteps.addStep(new Conditions(unknownPrint, hasCriminalSilverItem), collectFlypaper);
- /* Unknown print */
- checkingPrintSteps.addStep(new Conditions(criminalsDaggerFlour, hasCriminalSilverItem), useFlypaperOnDagger);
- checkingPrintSteps.addStep(new Conditions(criminalsDaggerAny, hasCriminalSilverItem, potOfFlourHighlighted), useFlourOnDagger);
- checkingPrintSteps.addStep(new Conditions(criminalsDaggerAny, doesntNeedMoreFlypaper, hasCriminalSilverItem), fillPotWithFlour);
- checkingPrintSteps.addStep(new Conditions(criminalsDaggerAny, doesntNeedMoreFlypaper), searchBarrel);
- checkingPrintSteps.addStep(new Conditions(criminalsDaggerAny), collectTwoFlypaper);
-
- ConditionalStep investigating = new ConditionalStep(this, searchWindowForThread);
- investigating.addStep(new Conditions(hadPotAndThread, hadKillerPrint, checkedSuspect), finishQuest);
- investigating.addStep(new Conditions(hadPotAndThread, hadKillerPrint, talkedToSuspect), searchSuspectItem);
- investigating.addStep(new Conditions(hadPotAndThread, hadKillerPrint, talkedToPoisonSalesman), talkToSuspect);
- investigating.addStep(new Conditions(hadPotAndThread, hadKillerPrint, heardAboutPoisonSalesman), talkToPoisonSalesman);
- investigating.addStep(new Conditions(hadPotAndThread, hadKillerPrint), talkToGossip);
- investigating.addStep(hadPotAndThread, checkingPrintSteps); /* Get dagger print */
- investigating.addStep(hadThread, pickUpPungentPot);
+ criminalsDaggerAny = new ItemRequirement("Criminal's dagger", ItemID.MURDERWEAPON);
+ criminalsDaggerAny.addAlternates(ItemID.MURDERWEAPONDUST, ItemID.MURDERFINGERPRINT);
- steps.put(1, investigating);
+ criminalsDagger = new ItemRequirement("Criminal's dagger", ItemID.MURDERWEAPON);
+ criminalsDaggerHighlighted = new ItemRequirement("Criminal's dagger", ItemID.MURDERWEAPON);
+ criminalsDaggerHighlighted.setHighlightInInventory(true);
- if (client.getVarpValue(195) > 0) updateSuspect();
+ criminalsDaggerFlour = new ItemRequirement("Criminal's dagger", ItemID.MURDERWEAPONDUST);
+ criminalsDaggerFlourHighlighted = new ItemRequirement("Criminal's dagger", ItemID.MURDERWEAPONDUST);
+ criminalsDaggerFlourHighlighted.setHighlightInInventory(true);
- return steps;
- }
+ criminalsThread = new ItemRequirement("Criminal's thread", ItemID.MURDERTHREADR);
+ criminalsThread.addAlternates(ItemID.MURDERTHREADG, ItemID.MURDERTHREADB);
+ criminalsThread1 = new ItemRequirement("Criminal's thread", ItemID.MURDERTHREADR);
+ criminalsThread2 = new ItemRequirement("Criminal's thread", ItemID.MURDERTHREADG);
+ criminalsThread3 = new ItemRequirement("Criminal's thread", ItemID.MURDERTHREADB);
+ twoFlypaper = new ItemRequirement("Flypaper", ItemID.MURDERPAPER, 2);
+ flypaper = new ItemRequirement("Flypaper", ItemID.MURDERPAPER);
+ flypaper.setHighlightInInventory(true);
+ flypaper.setTooltip("You can get more from the sack in the shed on the west of the Sinclair Mansion");
+ potOfFlourHighlighted = new ItemRequirement("Pot of flour", ItemID.POT_FLOUR);
+ potOfFlourHighlighted.setHighlightInInventory(true);
+ unknownPrint = new ItemRequirement("Unknown print", ItemID.MURDERFINGERPRINT1);
- @Subscribe
- public void onVarbitChanged(VarbitChanged varbitChanged)
- {
- if (varbitChanged.getVarpId() != 195) return;
+ /* Thread 1 item */
+ bobPrint = new ItemRequirement("Bob's print", ItemID.MURDERFINGERPRINTB);
+ carolPrint = new ItemRequirement("Carol's print", ItemID.MURDERFINGERPRINTC);
+ silverCup = new ItemRequirement("Silver cup", ItemID.MURDERCUP);
+ silverCupFlour = new ItemRequirement("Silver cup", ItemID.MURDERCUPDUST);
+ silverBottle = new ItemRequirement("Silver bottle", ItemID.MURDERBOTTLE);
+ silverBottleFlour = new ItemRequirement("Silver bottle", ItemID.MURDERBOTTLEDUST);
- updateSuspect();
- }
+ /* Thread 2 items */
+ annaPrint = new ItemRequirement("Anna's print", ItemID.MURDERFINGERPRINTA);
+ davidPrint = new ItemRequirement("David's print", ItemID.MURDERFINGERPRINTD);
+ silverNecklace = new ItemRequirement("Silver necklace", ItemID.MURDERNECKLACE);
+ silverNecklaceFlour = new ItemRequirement("Silver necklace", ItemID.MURDERNECKLACEDUST);
+ silverBook = new ItemRequirement("Silver book", ItemID.MURDERBOOK);
+ silverBookFlour = new ItemRequirement("Silver book", ItemID.MURDERBOOKDUST);
- private void updateSuspect()
- {
- // 5 for me
- int suspect = client.getVarpValue(195);
- if (suspect == 1)
- {
- useFlourSidebar.getText().set(0, useFlourOnNecklace.getText().get(0));
- searchBarrelSidebar.getText().set(0, searchAnnasBarrel.getText().get(0));
- useFlypaperSidebar.getText().set(0, useFlypaperOnNecklace.getText().get(0));
- comparePrintsSidebar.getText().set(0, compareAnna.getText().get(0));
- talkToSuspectSidebar.getText().set(0, talkToAnna.getText().get(0));
- searchSuspectItemSidebar.getText().set(0, searchAnna.getText().get(0));
- }
- else if (suspect == 2)
- {
- useFlourSidebar.getText().set(0, useFlourOnCup.getText().get(0));
- searchBarrelSidebar.getText().set(0, searchBobsBarrel.getText().get(0));
- useFlypaperSidebar.getText().set(0, useFlypaperOnCup.getText().get(0));
- comparePrintsSidebar.getText().set(0, compareBob.getText().get(0));
- talkToSuspectSidebar.getText().set(0, talkToBob.getText().get(0));
- searchSuspectItemSidebar.getText().set(0, searchBob.getText().get(0));
- }
- else if (suspect == 3)
- {
- useFlourSidebar.getText().set(0, useFlourOnBottle.getText().get(0));
- searchBarrelSidebar.getText().set(0, searchCarolsBarrel.getText().get(0));
- useFlypaperSidebar.getText().set(0, useFlypaperOnBottle.getText().get(0));
- comparePrintsSidebar.getText().set(0, compareCarol.getText().get(0));
- talkToSuspectSidebar.getText().set(0, talkToCarol.getText().get(0));
- searchSuspectItemSidebar.getText().set(0, searchCarol.getText().get(0));
- }
- else if (suspect == 4)
- {
- useFlourSidebar.getText().set(0, useFlourOnBook.getText().get(0));
- searchBarrelSidebar.getText().set(0, searchDavidsBarrel.getText().get(0));
- useFlypaperSidebar.getText().set(0, useFlypaperOnBook.getText().get(0));
- comparePrintsSidebar.getText().set(0, compareDavid.getText().get(0));
- talkToSuspectSidebar.getText().set(0, talkToDavid.getText().get(0));
- searchSuspectItemSidebar.getText().set(0, searchDavid.getText().get(0));
- }
- else if (suspect == 5)
- {
- useFlourSidebar.getText().set(0, useFlourOnNeedle.getText().get(0));
- searchBarrelSidebar.getText().set(0, searchElizabethsBarrel.getText().get(0));
- useFlypaperSidebar.getText().set(0, useFlypaperOnNeedle.getText().get(0));
- comparePrintsSidebar.getText().set(0, compareElizabeth.getText().get(0));
- talkToSuspectSidebar.getText().set(0, talkToElizabeth.getText().get(0));
- searchSuspectItemSidebar.getText().set(0, searchElizabeth.getText().get(0));
- }
- else if (suspect == 6)
- {
- useFlourSidebar.getText().set(0, useFlourOnPot.getText().get(0));
- searchBarrelSidebar.getText().set(0, searchFranksBarrel.getText().get(0));
- useFlypaperSidebar.getText().set(0, useFlypaperOnPot.getText().get(0));
- comparePrintsSidebar.getText().set(0, compareFrank.getText().get(0));
- talkToSuspectSidebar.getText().set(0, talkToFrank.getText().get(0));
- searchSuspectItemSidebar.getText().set(0, searchFrank.getText().get(0));
- }
- }
+ /* Thread 3 items */
+ elizabethPrint = new ItemRequirement("Elizabeth's print", ItemID.MURDERFINGERPRINTE);
+ frankPrint = new ItemRequirement("Frank's print", ItemID.MURDERFINGERPRINTF);
+ silverNeedle = new ItemRequirement("Silver needle", ItemID.MURDERNEEDLE);
+ silverNeedleFlour = new ItemRequirement("Silver needle", ItemID.MURDERNEEDLEDUST);
+ silverPot = new ItemRequirement("Silver needle", ItemID.MURDERPOT);
+ silverPotFlour = new ItemRequirement("Silver needle", ItemID.MURDERPOTDUST);
- public void setupZone()
- {
- upstairs = new Zone(new WorldPoint(2727, 3571, 1), new WorldPoint(2752, 3585, 1));
+ killersPrint = new ItemRequirement("Killer's print", ItemID.MURDERFINGERPRINT);
}
public void setupConditions()
{
isUpstairs = new ZoneRequirement(upstairs);
- hadThread = new RuneliteRequirement(getConfigManager(), "murdermysteryhadthread", criminalsThread.alsoCheckBank(questBank));
- hadPot = new RuneliteRequirement(getConfigManager(), "murdermysteryhadpot", pungentPot.alsoCheckBank(questBank));
- heardAboutPoisonSalesman = new RuneliteRequirement(getConfigManager(), "murdermysterytalkedtogossip",
- new Conditions(true, new DialogRequirement( "Especially as I heard that the poison salesman in the Seers' village made a big sale to one of the family the other day."))
+ hadThread = new RuneliteRequirement(configManager, "murdermysteryhadthread", criminalsThread.alsoCheckBank(questBank));
+ hadPot = new RuneliteRequirement(configManager, "murdermysteryhadpot", pungentPot.alsoCheckBank(questBank));
+ heardAboutPoisonSalesman = new RuneliteRequirement(configManager, "murdermysterytalkedtogossip",
+ new Conditions(true, new DialogRequirement("Especially as I heard that the poison salesman in the Seers' village made a big sale to one of the family the other day."))
);
- talkedToPoisonSalesman = new RuneliteRequirement(getConfigManager(), "murdermysterytalkedtopoisonsalesman",
+ talkedToPoisonSalesman = new RuneliteRequirement(configManager, "murdermysterytalkedtopoisonsalesman",
new Conditions(true, LogicType.OR,
- new DialogRequirement(questHelperPlugin.getPlayerStateManager().getPlayerName(), "Uh... no, it's ok.", false),
+ new DialogRequirement(questHelperPlugin.getPlayerStateManager().getPlayerName(), "Uh... no, it's ok.", false),
new DialogRequirement("Anna, Bob, Carol, David, Elizabeth and Frank all bought a bottle! " +
- "In fact they bought the last of my supplies!")
- ));
+ "In fact they bought the last of my supplies!")
+ ));
+ talkedToPoisonSalesman2 = new RuneliteRequirement(configManager, "murdermysterytalkedtopoisonsalesmanpot",
+ new Conditions(true, new DialogRequirement("Yes... I suppose that could have happened..."))
+ );
- annaGuilty = new VarplayerRequirement(195, 1);
- bobGuilty = new VarplayerRequirement(195, 2);
- carolGuilty = new VarplayerRequirement(195, 3);
- davidGuilty = new VarplayerRequirement(195, 4);
- elizabethGuilty = new VarplayerRequirement(195, 5);
- frankGuilty = new VarplayerRequirement(195, 6);
+ annaGuilty = new VarplayerRequirement(VarPlayerID.MURDERSUS, 1);
+ bobGuilty = new VarplayerRequirement(VarPlayerID.MURDERSUS, 2);
+ carolGuilty = new VarplayerRequirement(VarPlayerID.MURDERSUS, 3);
+ davidGuilty = new VarplayerRequirement(VarPlayerID.MURDERSUS, 4);
+ elizabethGuilty = new VarplayerRequirement(VarPlayerID.MURDERSUS, 5);
+ frankGuilty = new VarplayerRequirement(VarPlayerID.MURDERSUS, 6);
- hasCriminalSilverItem = new Conditions(
- LogicType.OR,
+ hasCriminalSilverItem = or(
new Conditions(annaGuilty, silverNecklace),
new Conditions(bobGuilty, silverCup),
new Conditions(carolGuilty, silverBottle),
@@ -233,8 +304,7 @@ public void setupConditions()
new Conditions(frankGuilty, silverPot)
);
- hasSuspectPrint = new Conditions(
- LogicType.OR,
+ hasSuspectPrint = or(
new Conditions(annaGuilty, annaPrint),
new Conditions(bobGuilty, bobPrint),
new Conditions(carolGuilty, carolPrint),
@@ -243,18 +313,18 @@ public void setupConditions()
new Conditions(frankGuilty, frankPrint)
);
- hadKillerPrint = new RuneliteRequirement(getConfigManager(), "murdermysteryhadkillerprint",
+ hadKillerPrint = new RuneliteRequirement(configManager, "murdermysteryhadkillerprint",
new Conditions(killersPrint)
);
hasSilverItemFlour = new Conditions(
LogicType.OR,
- new Conditions(annaGuilty, silverNecklaceFlour),
- new Conditions(bobGuilty, silverCupFlour),
- new Conditions(carolGuilty, silverBottleFlour),
- new Conditions(davidGuilty, silverBookFlour),
- new Conditions(elizabethGuilty, silverNeedleFlour),
- new Conditions(frankGuilty, silverPotFlour)
+ and(annaGuilty, silverNecklaceFlour),
+ and(bobGuilty, silverCupFlour),
+ and(carolGuilty, silverBottleFlour),
+ and(davidGuilty, silverBookFlour),
+ and(elizabethGuilty, silverNeedleFlour),
+ and(frankGuilty, silverPotFlour)
);
// TODO: This currently can't be used as checks are on each tick, but the text change + removal can occur within a tick
@@ -284,7 +354,7 @@ public void setupConditions()
true,
new DialogRequirement("Frank", "clean that family crest", false)
);
- talkedToSuspect = new RuneliteRequirement(getConfigManager(), "murdermysterytalkedtosuspect",
+ talkedToSuspect = new RuneliteRequirement(configManager, "murdermysterytalkedtosuspect",
new Conditions(
LogicType.OR,
new Conditions(annaGuilty, talkedToAnna),
@@ -298,29 +368,29 @@ public void setupConditions()
checkedAnna = new Conditions(
true,
- new WidgetTextRequirement(229, 1, "The compost is teeming with maggots.")
+ new WidgetTextRequirement(InterfaceID.Messagebox.TEXT, "The compost is teeming with maggots.")
);
checkedBob = new Conditions(
true,
- new WidgetTextRequirement(229, 1, "The beehive buzzes with activity.")
+ new WidgetTextRequirement(InterfaceID.Messagebox.TEXT, "The beehive buzzes with activity.")
);
checkedCarol = new Conditions(
true,
- new WidgetTextRequirement(229, 1, "The drain is totally blocked.")
+ new WidgetTextRequirement(InterfaceID.Messagebox.TEXT, "The drain is totally blocked.")
);
checkedDavid = new Conditions(
true,
- new WidgetTextRequirement(229, 1, "few hundred spiders ready to hatch.")
+ new WidgetTextRequirement(InterfaceID.Messagebox.TEXT, "few hundred spiders ready to hatch.")
);
checkedElizabeth = new Conditions(
true,
- new WidgetTextRequirement(229, 1, "The fountain is swarming")
+ new WidgetTextRequirement(InterfaceID.Messagebox.TEXT, "The fountain is swarming")
);
checkedFrank = new Conditions(
true,
- new WidgetTextRequirement(229, 1, "crest but it is very dirty")
+ new WidgetTextRequirement(InterfaceID.Messagebox.TEXT, "crest but it is very dirty")
);
- checkedSuspect = new RuneliteRequirement(getConfigManager(), "murdermysterydisprovedsuspect",
+ checkedSuspect = new RuneliteRequirement(configManager, "murdermysterydisprovedsuspect",
new Conditions(
LogicType.OR,
checkedAnna,
@@ -334,71 +404,64 @@ public void setupConditions()
}
@Override
- protected void setupRequirements()
+ public Map loadSteps()
{
- pot = new ItemRequirement("Pot", ItemID.POT_EMPTY);
- pungentPot = new ItemRequirement("Pungent pot", ItemID.MURDERPOT2);
+ initializeRequirements();
+ setupConditions();
+ setupSteps();
- criminalsDaggerAny = new ItemRequirement("Criminal's dagger", ItemID.MURDERWEAPON);
- criminalsDaggerAny.addAlternates(ItemID.MURDERWEAPONDUST, ItemID.MURDERFINGERPRINT);
+ var steps = new HashMap