Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.<br>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",
Expand Down Expand Up @@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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.*;
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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();

Expand Down Expand Up @@ -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)
{
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -462,7 +485,7 @@ public List<BankTabItems> getPluginBankTagItemsForSections()
return questBankManager.getBankTagService().getPluginBankTagItemsForSections(false);
}

public QuestHelper getSelectedQuest()
public @Nullable QuestHelper getSelectedQuest()
{
return questManager.getSelectedQuest();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -400,7 +402,7 @@ private void sortBankTabItems(Widget itemContainer, Widget[] containerChildren,
List<Integer> 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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -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);
}
}

Expand Down Expand Up @@ -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();
}
}
Expand All @@ -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);
}
}

Expand All @@ -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;

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -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));
}
Expand All @@ -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));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
)),

Expand Down Expand Up @@ -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(
Expand Down Expand Up @@ -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<Integer>()
.addAll(ESSENCE_HIGH.items).add(
ItemID.BLANKRUNE).build()
),

COINS(ImmutableList.of(
ItemID.COINS,
ItemID.MAGICTRAINING_COINS,
Expand Down
Loading