From c00559ee5c0059922125775a607d2c6d9653b2b1 Mon Sep 17 00:00:00 2001 From: David Date: Sun, 2 Feb 2020 14:13:47 -0800 Subject: [PATCH] clue plugin: add light requirements to clues This commit adds a warning message to the clue scroll overlay when a player has a clue requiring a light source and does not have a light source equipped or in their inventory. It adds logic to check for the status of fire pits in areas which would remain permanently lit that way. Closes runelite/runelite#9626 Co-authored-by: David Co-authored-by: Jordan Atwood Co-authored-by: Adam --- .../main/java/net/runelite/api/Varbits.java | 11 + .../cluescrolls/ClueScrollOverlay.java | 50 ++- .../plugins/cluescrolls/clues/ClueScroll.java | 9 + .../cluescrolls/clues/CoordinateClue.java | 340 ++++++++++-------- .../cluescrolls/clues/CrypticClue.java | 8 +- .../plugins/cluescrolls/clues/EmoteClue.java | 10 +- 6 files changed, 268 insertions(+), 160 deletions(-) diff --git a/runelite-api/src/main/java/net/runelite/api/Varbits.java b/runelite-api/src/main/java/net/runelite/api/Varbits.java index a7687b9af3..2921c5ed2c 100644 --- a/runelite-api/src/main/java/net/runelite/api/Varbits.java +++ b/runelite-api/src/main/java/net/runelite/api/Varbits.java @@ -297,6 +297,17 @@ public enum Varbits PERSONAL_POINTS(5422), RAID_PARTY_SIZE(5424), + /** + * Making Friends with My Arm fire pits + * + * Expected values: + * 0 = Not built + * 1 = Built + */ + FIRE_PIT_GIANT_MOLE(6532), + FIRE_PIT_LUMBRIDGE_SWAMP(6533), + FIRE_PIT_MOS_LE_HARMLESS(6544), + /** * Theatre of Blood 1=In Party, 2=Inside/Spectator, 3=Dead Spectating */ diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollOverlay.java index c0c98b36b8..d08433c7d3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollOverlay.java @@ -1,6 +1,7 @@ /* * Copyright (c) 2016-2017, Seth * Copyright (c) 2018, Lotto + * Copyright (c) 2019, David * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -30,10 +31,14 @@ import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics2D; import javax.inject.Inject; -import static net.runelite.api.ItemID.SPADE; +import net.runelite.api.Client; +import net.runelite.api.Item; +import static net.runelite.api.ItemID.*; import static net.runelite.api.MenuAction.RUNELITE_OVERLAY_CONFIG; import net.runelite.client.plugins.cluescrolls.clues.ClueScroll; +import net.runelite.client.plugins.cluescrolls.clues.item.AnyRequirementCollection; import net.runelite.client.plugins.cluescrolls.clues.item.ItemRequirement; +import static net.runelite.client.plugins.cluescrolls.clues.item.ItemRequirements.item; import net.runelite.client.plugins.cluescrolls.clues.item.SingleItemRequirement; import net.runelite.client.ui.overlay.Overlay; import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE; @@ -46,17 +51,42 @@ import net.runelite.client.ui.overlay.components.PanelComponent; public class ClueScrollOverlay extends Overlay { private static final ItemRequirement HAS_SPADE = new SingleItemRequirement(SPADE); + private static final ItemRequirement HAS_LIGHT = new AnyRequirementCollection("Light Source", + item(LIT_TORCH), + item(LIT_CANDLE), + item(LIT_BLACK_CANDLE), + item(CANDLE_LANTERN_4531), + item(CANDLE_LANTERN_4534), // lit black candle lantern + item(OIL_LAMP_4524), + item(OIL_LANTERN_4539), + item(BULLSEYE_LANTERN_4550), + item(SAPPHIRE_LANTERN_4702), + item(EMERALD_LANTERN_9065), + item(MINING_HELMET), + item(FIREMAKING_CAPE), + item(FIREMAKING_CAPE_10659), + item(FIREMAKING_CAPET), + item(KANDARIN_HEADGEAR_1), + item(KANDARIN_HEADGEAR_2), + item(KANDARIN_HEADGEAR_3), + item(KANDARIN_HEADGEAR_4), + item(BRUMA_TORCH), + item(MAX_CAPE), + item(MAX_CAPE_13282), + item(MAX_CAPE_13342)); public static final Color TITLED_CONTENT_COLOR = new Color(190, 190, 190); private final ClueScrollPlugin plugin; private final PanelComponent panelComponent = new PanelComponent(); + private final Client client; @Inject - private ClueScrollOverlay(ClueScrollPlugin plugin) + private ClueScrollOverlay(ClueScrollPlugin plugin, Client client) { super(plugin); this.plugin = plugin; + this.client = client; setPriority(OverlayPriority.LOW); getMenuEntries().add(new OverlayMenuEntry(RUNELITE_OVERLAY_CONFIG, OPTION_CONFIGURE, "Clue Scroll overlay")); } @@ -76,15 +106,27 @@ public class ClueScrollOverlay extends Overlay clue.makeOverlayHint(panelComponent, plugin); - if (clue.isRequiresSpade() && plugin.getInventoryItems() != null) + final Item[] inventoryItems = plugin.getInventoryItems(); + final Item[] equippedItems = plugin.getEquippedItems(); + + if (clue.isRequiresSpade() && inventoryItems != null) { - if (!HAS_SPADE.fulfilledBy(plugin.getInventoryItems())) + if (!HAS_SPADE.fulfilledBy(inventoryItems)) { panelComponent.getChildren().add(LineComponent.builder().left("").build()); panelComponent.getChildren().add(LineComponent.builder().left("Requires Spade!").leftColor(Color.RED).build()); } } + if (clue.isRequiresLight() + && ((clue.getHasFirePit() == null || client.getVar(clue.getHasFirePit()) != 1) + && (inventoryItems == null || !HAS_LIGHT.fulfilledBy(inventoryItems)) + && (equippedItems == null || !HAS_LIGHT.fulfilledBy(equippedItems)))) + { + panelComponent.getChildren().add(LineComponent.builder().left("").build()); + panelComponent.getChildren().add(LineComponent.builder().left("Requires Light Source!").leftColor(Color.RED).build()); + } + return panelComponent.render(graphics); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/ClueScroll.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/ClueScroll.java index 0b6bf8f724..ea3631f14c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/ClueScroll.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/ClueScroll.java @@ -28,6 +28,7 @@ import java.awt.Graphics2D; import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; +import net.runelite.api.Varbits; import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin; import net.runelite.client.ui.overlay.components.PanelComponent; @@ -37,6 +38,14 @@ public abstract class ClueScroll @Getter(AccessLevel.PUBLIC) private boolean requiresSpade; + @Setter(AccessLevel.PROTECTED) + @Getter(AccessLevel.PUBLIC) + private boolean requiresLight; + + @Setter(AccessLevel.PROTECTED) + @Getter(AccessLevel.PUBLIC) + private Varbits hasFirePit; + public abstract void makeOverlayHint(PanelComponent panelComponent, ClueScrollPlugin plugin); public abstract void makeWorldOverlayHint(Graphics2D graphics, ClueScrollPlugin plugin); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CoordinateClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CoordinateClue.java index bc8ef25910..e485b6fe11 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CoordinateClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CoordinateClue.java @@ -27,8 +27,11 @@ package net.runelite.client.plugins.cluescrolls.clues; import com.google.common.collect.ImmutableMap; import java.awt.Color; import java.awt.Graphics2D; +import javax.annotation.Nonnull; import javax.annotation.Nullable; import lombok.Getter; +import lombok.NonNull; +import net.runelite.api.Varbits; import net.runelite.api.coords.LocalPoint; import net.runelite.api.coords.WorldPoint; import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin; @@ -40,162 +43,184 @@ import net.runelite.client.ui.overlay.components.TitleComponent; @Getter public class CoordinateClue extends ClueScroll implements TextClueScroll, LocationClueScroll { - private static final ImmutableMap CLUES = new ImmutableMap.Builder() + @Getter + private static class CoordinateClueInfo + { + private final String directions; + private final boolean lightRequired; + private final Varbits lightSource; + + private CoordinateClueInfo(@NonNull String directions) + { + this.directions = directions; + this.lightRequired = false; + this.lightSource = null; + } + + private CoordinateClueInfo(@Nonnull String directions, boolean lightRequired, Varbits lightSource) + { + this.directions = directions; + this.lightRequired = lightRequired; + this.lightSource = lightSource; + } + } + + private static final ImmutableMap CLUES = new ImmutableMap.Builder() // Medium - .put(new WorldPoint(2479, 3158, 0), "South of fruit tree patch, west of Tree Gnome Village.") - .put(new WorldPoint(2887, 3154, 0), "West of Banana plantation on Karamja.") - .put(new WorldPoint(2743, 3151, 0), "Entrance of Brimhaven dungeon.") - .put(new WorldPoint(3184, 3150, 0), "South of Lumbridge Swamp.") - .put(new WorldPoint(3217, 3177, 0), "East of Lumbridge Swamp.") - .put(new WorldPoint(3007, 3144, 0), "Near the entrance to the Asgarnian Ice Dungeon, south of Port Sarim (AIQ).") - .put(new WorldPoint(2896, 3119, 0), "Near Karambwan fishing spot (DKP).") - .put(new WorldPoint(2697, 3207, 0), "Centre of Moss Giant Island, west of Brimhaven.") - .put(new WorldPoint(2679, 3110, 0), "North of Hazelmere's house (CLS).") - .put(new WorldPoint(3510, 3074, 0), "East of Uzer (DLQ).") - .put(new WorldPoint(3160, 3251, 0), "West of trapdoor leading to H.A.M Hideout.") - .put(new WorldPoint(2643, 3252, 0), "South of Ardougne Zoo, North of Tower of Life (DJP).") - .put(new WorldPoint(2322, 3061, 0), "South-west of Castle wars (BKP).") - .put(new WorldPoint(2875, 3046, 0), "North of nature altar, north of Shilo Village (CKR).") - .put(new WorldPoint(2849, 3033, 0), "West of nature altar, north of Shilo Village (CKR).") - .put(new WorldPoint(2848, 3296, 0), "North of Crandor island.") - .put(new WorldPoint(2583, 2990, 0), "Feldip Hills, south-east of Gu'Thanoth (AKS).") - .put(new WorldPoint(3179, 3344, 0), "In the cow pen north of the Lumbridge windmill.") - .put(new WorldPoint(2383, 3370, 0), "West of the outpost") - .put(new WorldPoint(3312, 3375, 0), "North-west of Exam Centre, on the hill.") - .put(new WorldPoint(3121, 3384, 0), "North-east of Draynor Manor, near River Lum.") - .put(new WorldPoint(3430, 3388, 0), "West of Mort Myre Swamp (BKR).") - .put(new WorldPoint(2920, 3403, 0), "South-east of Taverley, near Lady of the Lake.") - .put(new WorldPoint(2594, 2899, 0), "South-east of Feldip Hills, by the crimson swifts (AKS).") - .put(new WorldPoint(2387, 3435, 0), "West of Tree Gnome Stronghold, near the pen containing terrorbirds.") - .put(new WorldPoint(2512, 3467, 0), "Baxtorian Falls (Bring rope).") - .put(new WorldPoint(2381, 3468, 0), "West of Tree Gnome Stronghold, north of the pen with terrorbirds.") - .put(new WorldPoint(3005, 3475, 0), "Ice Mountain, west of Edgeville.") - .put(new WorldPoint(2585, 3505, 0), "By the shore line north of the Coal Trucks.") - .put(new WorldPoint(3443, 3515, 0), "South of Slayer Tower (CKS).") - .put(new WorldPoint(2416, 3516, 0), "Tree Gnome Stronghold, west of Grand Tree, near swamp.") - .put(new WorldPoint(3429, 3523, 0), "South of Slayer Tower (CKS).") - .put(new WorldPoint(2363, 3531, 0), "North-east of Eagles' Peak (AKQ).") - .put(new WorldPoint(2919, 3535, 0), "East of Burthorpe pub.") - .put(new WorldPoint(3548, 3560, 0), "Inside Fenkenstrain's Castle.") - .put(new WorldPoint(1456, 3620, 0), "Graveyard west of Shayzien (DJR).") - .put(new WorldPoint(2735, 3638, 0), "East of Rellekka, north-west of Golden Apple Tree (AJR).") - .put(new WorldPoint(2681, 3653, 0), "Rellekka, in the garden of the south-east house.") - .put(new WorldPoint(2537, 3881, 0), "Miscellania (CIP).") - .put(new WorldPoint(2828, 3234, 0), "Southern coast of Crandor.") - .put(new WorldPoint(1247, 3726, 0), "Just inside the Farming Guild") - .put(new WorldPoint(3770, 3898, 0), "On the small island north-east of Fossil Island's mushroom forest.") + .put(new WorldPoint(2479, 3158, 0), new CoordinateClueInfo("South of fruit tree patch, west of Tree Gnome Village.")) + .put(new WorldPoint(2887, 3154, 0), new CoordinateClueInfo("West of Banana plantation on Karamja.")) + .put(new WorldPoint(2743, 3151, 0), new CoordinateClueInfo("Entrance of Brimhaven dungeon.")) + .put(new WorldPoint(3184, 3150, 0), new CoordinateClueInfo("South of Lumbridge Swamp.")) + .put(new WorldPoint(3217, 3177, 0), new CoordinateClueInfo("East of Lumbridge Swamp.")) + .put(new WorldPoint(3007, 3144, 0), new CoordinateClueInfo("Near the entrance to the Asgarnian Ice Dungeon, south of Port Sarim (AIQ).")) + .put(new WorldPoint(2896, 3119, 0), new CoordinateClueInfo("Near Karambwan fishing spot (DKP).")) + .put(new WorldPoint(2697, 3207, 0), new CoordinateClueInfo("Centre of Moss Giant Island, west of Brimhaven.")) + .put(new WorldPoint(2679, 3110, 0), new CoordinateClueInfo("North of Hazelmere's house (CLS).")) + .put(new WorldPoint(3510, 3074, 0), new CoordinateClueInfo("East of Uzer (DLQ).")) + .put(new WorldPoint(3160, 3251, 0), new CoordinateClueInfo("West of trapdoor leading to H.A.M Hideout.")) + .put(new WorldPoint(2643, 3252, 0), new CoordinateClueInfo("South of Ardougne Zoo, North of Tower of Life (DJP).")) + .put(new WorldPoint(2322, 3061, 0), new CoordinateClueInfo("South-west of Castle wars (BKP).")) + .put(new WorldPoint(2875, 3046, 0), new CoordinateClueInfo("North of nature altar, north of Shilo Village (CKR).")) + .put(new WorldPoint(2849, 3033, 0), new CoordinateClueInfo("West of nature altar, north of Shilo Village (CKR).")) + .put(new WorldPoint(2848, 3296, 0), new CoordinateClueInfo("North of Crandor island.")) + .put(new WorldPoint(2583, 2990, 0), new CoordinateClueInfo("Feldip Hills, south-east of Gu'Thanoth (AKS).")) + .put(new WorldPoint(3179, 3344, 0), new CoordinateClueInfo("In the cow pen north of the Lumbridge windmill.")) + .put(new WorldPoint(2383, 3370, 0), new CoordinateClueInfo("West of the outpost")) + .put(new WorldPoint(3312, 3375, 0), new CoordinateClueInfo("North-west of Exam Centre, on the hill.")) + .put(new WorldPoint(3121, 3384, 0), new CoordinateClueInfo("North-east of Draynor Manor, near River Lum.")) + .put(new WorldPoint(3430, 3388, 0), new CoordinateClueInfo("West of Mort Myre Swamp (BKR).")) + .put(new WorldPoint(2920, 3403, 0), new CoordinateClueInfo("South-east of Taverley, near Lady of the Lake.")) + .put(new WorldPoint(2594, 2899, 0), new CoordinateClueInfo("South-east of Feldip Hills, by the crimson swifts (AKS).")) + .put(new WorldPoint(2387, 3435, 0), new CoordinateClueInfo("West of Tree Gnome Stronghold, near the pen containing terrorbirds.")) + .put(new WorldPoint(2512, 3467, 0), new CoordinateClueInfo("Baxtorian Falls (Bring rope).")) + .put(new WorldPoint(2381, 3468, 0), new CoordinateClueInfo("West of Tree Gnome Stronghold, north of the pen with terrorbirds.")) + .put(new WorldPoint(3005, 3475, 0), new CoordinateClueInfo("Ice Mountain, west of Edgeville.")) + .put(new WorldPoint(2585, 3505, 0), new CoordinateClueInfo("By the shore line north of the Coal Trucks.")) + .put(new WorldPoint(3443, 3515, 0), new CoordinateClueInfo("South of Slayer Tower (CKS).")) + .put(new WorldPoint(2416, 3516, 0), new CoordinateClueInfo("Tree Gnome Stronghold, west of Grand Tree, near swamp.")) + .put(new WorldPoint(3429, 3523, 0), new CoordinateClueInfo("South of Slayer Tower (CKS).")) + .put(new WorldPoint(2363, 3531, 0), new CoordinateClueInfo("North-east of Eagles' Peak (AKQ).")) + .put(new WorldPoint(2919, 3535, 0), new CoordinateClueInfo("East of Burthorpe pub.")) + .put(new WorldPoint(3548, 3560, 0), new CoordinateClueInfo("Inside Fenkenstrain's Castle.")) + .put(new WorldPoint(1456, 3620, 0), new CoordinateClueInfo("Graveyard west of Shayzien (DJR).")) + .put(new WorldPoint(2735, 3638, 0), new CoordinateClueInfo("East of Rellekka, north-west of Golden Apple Tree (AJR).")) + .put(new WorldPoint(2681, 3653, 0), new CoordinateClueInfo("Rellekka, in the garden of the south-east house.")) + .put(new WorldPoint(2537, 3881, 0), new CoordinateClueInfo("Miscellania (CIP).")) + .put(new WorldPoint(2828, 3234, 0), new CoordinateClueInfo("Southern coast of Crandor.")) + .put(new WorldPoint(1247, 3726, 0), new CoordinateClueInfo("Just inside the Farming Guild")) + .put(new WorldPoint(3770, 3898, 0), new CoordinateClueInfo("On the small island north-east of Fossil Island's mushroom forest.")) // Hard - .put(new WorldPoint(2209, 3161, 0), "North-east of Tyras Camp (BJS).") - .put(new WorldPoint(2181, 3206, 0), "South of Iorwerth Camp.") - .put(new WorldPoint(3081, 3209, 0), "Small Island (CLP).") - .put(new WorldPoint(3399, 3246, 0), "Behind the Duel Arena.") - .put(new WorldPoint(2699, 3251, 0), "Little island (AIR).") - .put(new WorldPoint(3546, 3251, 0), "North-east of Burgh de Rott.") - .put(new WorldPoint(3544, 3256, 0), "North-east of Burgh de Rott.") - .put(new WorldPoint(2841, 3267, 0), "Crandor island.") - .put(new WorldPoint(3168, 3041, 0), "Bedabin Camp.") - .put(new WorldPoint(2542, 3031, 0), "Gu'Tanoth, may require 20gp.") - .put(new WorldPoint(2581, 3030, 0), "Gu'Tanoth island, enter cave north-west of Feldip Hills (AKS).") - .put(new WorldPoint(2961, 3024, 0), "Ship yard (DKP).") - .put(new WorldPoint(2339, 3311, 0), "East of Prifddinas on Arandar mountain pass.") - .put(new WorldPoint(3440, 3341, 0), "Nature Spirit's grotto (BIP).") - .put(new WorldPoint(2763, 2974, 0), "Cairn Isle, west of Shilo Village (CKR).") - .put(new WorldPoint(3138, 2969, 0), "West of Bandit Camp in Kharidian Desert.") - .put(new WorldPoint(2924, 2963, 0), "On the southern part of eastern Karamja.") - .put(new WorldPoint(2838, 2914, 0), "Kharazi Jungle, near water pool (CKR).") - .put(new WorldPoint(3441, 3419, 0), "Mort Myre Swamp (BKR).") - .put(new WorldPoint(2950, 2902, 0), "South-east of Kharazi Jungle.") - .put(new WorldPoint(2775, 2891, 0), "South-west of Kharazi Jungle.") - .put(new WorldPoint(3113, 3602, 0), "Wilderness. North of Edgeville (level 11).") - .put(new WorldPoint(2892, 3675, 0), "On the summit of Trollheim.") - .put(new WorldPoint(3168, 3677, 0), "Wilderness. Graveyard of Shadows.") - .put(new WorldPoint(2853, 3690, 0), "Entrance to the troll Stronghold.") - .put(new WorldPoint(3305, 3692, 0), "Wilderness. West of eastern green dragon.") - .put(new WorldPoint(3055, 3696, 0), "Wilderness. Bandit Camp.") - .put(new WorldPoint(3302, 3696, 0), "Wilderness. West of eastern green dragon.") - .put(new WorldPoint(1479, 3696, 0), "Lizardman Canyon (DJR).") - .put(new WorldPoint(2712, 3732, 0), "North-east of Rellekka (DKS).") - .put(new WorldPoint(2970, 3749, 0), "Wilderness. Forgotten Cemetery.") - .put(new WorldPoint(3094, 3764, 0), "Wilderness. Mining site north of Bandit Camp.") - .put(new WorldPoint(3311, 3769, 0), "Wilderness. North of Venenatis.") - .put(new WorldPoint(1460, 3782, 0), "Lovakengj, near burning man.") - .put(new WorldPoint(3244, 3792, 0), "Wilderness. South-east of Lava Dragon Isle by some Chaos Dwarves.") - .put(new WorldPoint(3140, 3804, 0), "Wilderness. North of Ruins.") - .put(new WorldPoint(2946, 3819, 0), "Wilderness. Chaos Temple (level 38).") - .put(new WorldPoint(3771, 3825, 0), "Fossil Island. East of Museum Camp.") - .put(new WorldPoint(3013, 3846, 0), "Wilderness. West of Lava Maze, before KBD's lair.") - .put(new WorldPoint(3058, 3884, 0), "Wilderness. Near runite ore north of Lava Maze.") - .put(new WorldPoint(3290, 3889, 0), "Wilderness. Demonic Ruins.") - .put(new WorldPoint(3770, 3897, 0), "Small Island north of Fossil Island.") - .put(new WorldPoint(2505, 3899, 0), "Small Island north-west of Miscellania (AJS).") - .put(new WorldPoint(3285, 3942, 0), "Wilderness. Rogues' Castle.") - .put(new WorldPoint(3159, 3959, 0), "Wilderness. North of Deserted Keep, west of Resource Area.") - .put(new WorldPoint(3039, 3960, 0), "Wilderness. Pirates' Hideout.") - .put(new WorldPoint(2987, 3963, 0), "Wilderness. West of Wilderness Agility Course.") - .put(new WorldPoint(3189, 3963, 0), "Wilderness. North of Resource Area, near magic axe hut.") - .put(new WorldPoint(2341, 3697, 0), "North-east of the Piscatoris Fishing Colony bank.") - .put(new WorldPoint(3143, 3774, 0), "In level 32 Wilderness, by the black chinchompa hunting area.") - .put(new WorldPoint(2992, 3941, 0), "Wilderness Agility Course, past the log balance.") + .put(new WorldPoint(2209, 3161, 0), new CoordinateClueInfo("North-east of Tyras Camp (BJS).")) + .put(new WorldPoint(2181, 3206, 0), new CoordinateClueInfo("South of Iorwerth Camp.")) + .put(new WorldPoint(3081, 3209, 0), new CoordinateClueInfo("Small Island (CLP).")) + .put(new WorldPoint(3399, 3246, 0), new CoordinateClueInfo("Behind the Duel Arena.")) + .put(new WorldPoint(2699, 3251, 0), new CoordinateClueInfo("Little island (AIR).")) + .put(new WorldPoint(3546, 3251, 0), new CoordinateClueInfo("North-east of Burgh de Rott.")) + .put(new WorldPoint(3544, 3256, 0), new CoordinateClueInfo("North-east of Burgh de Rott.")) + .put(new WorldPoint(2841, 3267, 0), new CoordinateClueInfo("Crandor island.")) + .put(new WorldPoint(3168, 3041, 0), new CoordinateClueInfo("Bedabin Camp.")) + .put(new WorldPoint(2542, 3031, 0), new CoordinateClueInfo("Gu'Tanoth, may require 20gp.")) + .put(new WorldPoint(2581, 3030, 0), new CoordinateClueInfo("Gu'Tanoth island, enter cave north-west of Feldip Hills (AKS).")) + .put(new WorldPoint(2961, 3024, 0), new CoordinateClueInfo("Ship yard (DKP).")) + .put(new WorldPoint(2339, 3311, 0), new CoordinateClueInfo("East of Prifddinas on Arandar mountain pass.")) + .put(new WorldPoint(3440, 3341, 0), new CoordinateClueInfo("Nature Spirit's grotto (BIP).")) + .put(new WorldPoint(2763, 2974, 0), new CoordinateClueInfo("Cairn Isle, west of Shilo Village (CKR).")) + .put(new WorldPoint(3138, 2969, 0), new CoordinateClueInfo("West of Bandit Camp in Kharidian Desert.")) + .put(new WorldPoint(2924, 2963, 0), new CoordinateClueInfo("On the southern part of eastern Karamja.")) + .put(new WorldPoint(2838, 2914, 0), new CoordinateClueInfo("Kharazi Jungle, near water pool (CKR).")) + .put(new WorldPoint(3441, 3419, 0), new CoordinateClueInfo("Mort Myre Swamp (BKR).")) + .put(new WorldPoint(2950, 2902, 0), new CoordinateClueInfo("South-east of Kharazi Jungle.")) + .put(new WorldPoint(2775, 2891, 0), new CoordinateClueInfo("South-west of Kharazi Jungle.")) + .put(new WorldPoint(3113, 3602, 0), new CoordinateClueInfo("Wilderness. North of Edgeville (level 11).")) + .put(new WorldPoint(2892, 3675, 0), new CoordinateClueInfo("On the summit of Trollheim.")) + .put(new WorldPoint(3168, 3677, 0), new CoordinateClueInfo("Wilderness. Graveyard of Shadows.")) + .put(new WorldPoint(2853, 3690, 0), new CoordinateClueInfo("Entrance to the troll Stronghold.")) + .put(new WorldPoint(3305, 3692, 0), new CoordinateClueInfo("Wilderness. West of eastern green dragon.")) + .put(new WorldPoint(3055, 3696, 0), new CoordinateClueInfo("Wilderness. Bandit Camp.")) + .put(new WorldPoint(3302, 3696, 0), new CoordinateClueInfo("Wilderness. West of eastern green dragon.")) + .put(new WorldPoint(1479, 3696, 0), new CoordinateClueInfo("Lizardman Canyon (DJR).")) + .put(new WorldPoint(2712, 3732, 0), new CoordinateClueInfo("North-east of Rellekka (DKS).")) + .put(new WorldPoint(2970, 3749, 0), new CoordinateClueInfo("Wilderness. Forgotten Cemetery.")) + .put(new WorldPoint(3094, 3764, 0), new CoordinateClueInfo("Wilderness. Mining site north of Bandit Camp.")) + .put(new WorldPoint(3311, 3769, 0), new CoordinateClueInfo("Wilderness. North of Venenatis.")) + .put(new WorldPoint(1460, 3782, 0), new CoordinateClueInfo("Lovakengj, near burning man.")) + .put(new WorldPoint(3244, 3792, 0), new CoordinateClueInfo("Wilderness. South-east of Lava Dragon Isle by some Chaos Dwarves.")) + .put(new WorldPoint(3140, 3804, 0), new CoordinateClueInfo("Wilderness. North of Ruins.")) + .put(new WorldPoint(2946, 3819, 0), new CoordinateClueInfo("Wilderness. Chaos Temple (level 38).")) + .put(new WorldPoint(3771, 3825, 0), new CoordinateClueInfo("Fossil Island. East of Museum Camp.")) + .put(new WorldPoint(3013, 3846, 0), new CoordinateClueInfo("Wilderness. West of Lava Maze, before KBD's lair.")) + .put(new WorldPoint(3058, 3884, 0), new CoordinateClueInfo("Wilderness. Near runite ore north of Lava Maze.")) + .put(new WorldPoint(3290, 3889, 0), new CoordinateClueInfo("Wilderness. Demonic Ruins.")) + .put(new WorldPoint(3770, 3897, 0), new CoordinateClueInfo("Small Island north of Fossil Island.")) + .put(new WorldPoint(2505, 3899, 0), new CoordinateClueInfo("Small Island north-west of Miscellania (AJS).")) + .put(new WorldPoint(3285, 3942, 0), new CoordinateClueInfo("Wilderness. Rogues' Castle.")) + .put(new WorldPoint(3159, 3959, 0), new CoordinateClueInfo("Wilderness. North of Deserted Keep, west of Resource Area.")) + .put(new WorldPoint(3039, 3960, 0), new CoordinateClueInfo("Wilderness. Pirates' Hideout.")) + .put(new WorldPoint(2987, 3963, 0), new CoordinateClueInfo("Wilderness. West of Wilderness Agility Course.")) + .put(new WorldPoint(3189, 3963, 0), new CoordinateClueInfo("Wilderness. North of Resource Area, near magic axe hut.")) + .put(new WorldPoint(2341, 3697, 0), new CoordinateClueInfo("North-east of the Piscatoris Fishing Colony bank.")) + .put(new WorldPoint(3143, 3774, 0), new CoordinateClueInfo("In level 32 Wilderness, by the black chinchompa hunting area.")) + .put(new WorldPoint(2992, 3941, 0), new CoordinateClueInfo("Wilderness Agility Course, past the log balance.")) // Elite - .put(new WorldPoint(2357, 3151, 0), "Lletya.") - .put(new WorldPoint(3587, 3180, 0), "Meiyerditch.") - .put(new WorldPoint(2820, 3078, 0), "Tai Bwo Wannai. Hardwood Grove.") - .put(new WorldPoint(3811, 3060, 0), "Small island north-east of Mos Le'Harmless.") - .put(new WorldPoint(2180, 3282, 0), "North of Iorwerth Camp.") - .put(new WorldPoint(2870, 2997, 0), "North-east of Shilo Village.") - .put(new WorldPoint(3302, 2988, 0), "On top of a cliff to the west of Pollnivneach.") - .put(new WorldPoint(2511, 2980, 0), "Just south of Gu'Tanoth, west of gnome glider.") - .put(new WorldPoint(2732, 3372, 0), "Legends' Guild.") - .put(new WorldPoint(3573, 3425, 0), "North of Dessous's tomb from Desert Treasure.") - .put(new WorldPoint(3828, 2848, 0), "East of Harmony Island.") - .put(new WorldPoint(3225, 2838, 0), "South of Desert Treasure pyramid.") - .put(new WorldPoint(1773, 3510, 0), "Ruins north of the Hosidius mine.") - .put(new WorldPoint(3822, 3562, 0), "North-east of Dragontooth Island.") - .put(new WorldPoint(3603, 3564, 0), "North of the wrecked ship, outside of Port Phasmatys.") - .put(new WorldPoint(2936, 2721, 0), "Eastern shore of Crash Island.") - .put(new WorldPoint(2697, 2705, 0), "South-west of Ape Atoll.") - .put(new WorldPoint(2778, 3678, 0), "Mountain Camp.") - .put(new WorldPoint(2827, 3740, 0), "West of the entrance to the Ice Path, where the Troll child resides.") - .put(new WorldPoint(2359, 3799, 0), "Neitiznot.") - .put(new WorldPoint(2194, 3807, 0), "Pirates' Cove.") - .put(new WorldPoint(2700, 3808, 0), "Northwestern part of the Trollweiss and Rellekka Hunter area (DKS).") - .put(new WorldPoint(3215, 3835, 0), "Wilderness. Lava Dragon Isle.") - .put(new WorldPoint(3369, 3894, 0), "Wilderness. Fountain of Rune.") - .put(new WorldPoint(2065, 3923, 0), "Outside the western wall on Lunar Isle.") - .put(new WorldPoint(3188, 3933, 0), "Wilderness. Resource Area.") - .put(new WorldPoint(2997, 3953, 0), "Wilderness. Inside Agility Training Area.") - .put(new WorldPoint(3380, 3963, 0), "Wilderness. North of Volcano.") - .put(new WorldPoint(3051, 3736, 0), "East of the Wilderness Obelisk in 28 Wilderness.") - .put(new WorldPoint(2316, 3814, 0), "West of Neitiznot, near the bridge.") - .put(new WorldPoint(2872, 3937, 0), "Weiss.") - .put(new WorldPoint(2484, 4016, 0), "Northeast corner of the Island of Stone.") + .put(new WorldPoint(2357, 3151, 0), new CoordinateClueInfo("Lletya.")) + .put(new WorldPoint(3587, 3180, 0), new CoordinateClueInfo("Meiyerditch.")) + .put(new WorldPoint(2820, 3078, 0), new CoordinateClueInfo("Tai Bwo Wannai. Hardwood Grove.")) + .put(new WorldPoint(3811, 3060, 0), new CoordinateClueInfo("Small island north-east of Mos Le'Harmless.", true, Varbits.FIRE_PIT_MOS_LE_HARMLESS)) + .put(new WorldPoint(2180, 3282, 0), new CoordinateClueInfo("North of Iorwerth Camp.")) + .put(new WorldPoint(2870, 2997, 0), new CoordinateClueInfo("North-east of Shilo Village.")) + .put(new WorldPoint(3302, 2988, 0), new CoordinateClueInfo("On top of a cliff to the west of Pollnivneach.")) + .put(new WorldPoint(2511, 2980, 0), new CoordinateClueInfo("Just south of Gu'Tanoth, west of gnome glider.")) + .put(new WorldPoint(2732, 3372, 0), new CoordinateClueInfo("Legends' Guild.")) + .put(new WorldPoint(3573, 3425, 0), new CoordinateClueInfo("North of Dessous's tomb from Desert Treasure.")) + .put(new WorldPoint(3828, 2848, 0), new CoordinateClueInfo("East of Harmony Island.")) + .put(new WorldPoint(3225, 2838, 0), new CoordinateClueInfo("South of Desert Treasure pyramid.")) + .put(new WorldPoint(1773, 3510, 0), new CoordinateClueInfo("Ruins north of the Hosidius mine.")) + .put(new WorldPoint(3822, 3562, 0), new CoordinateClueInfo("North-east of Dragontooth Island.")) + .put(new WorldPoint(3603, 3564, 0), new CoordinateClueInfo("North of the wrecked ship, outside of Port Phasmatys.")) + .put(new WorldPoint(2936, 2721, 0), new CoordinateClueInfo("Eastern shore of Crash Island.")) + .put(new WorldPoint(2697, 2705, 0), new CoordinateClueInfo("South-west of Ape Atoll.")) + .put(new WorldPoint(2778, 3678, 0), new CoordinateClueInfo("Mountain Camp.")) + .put(new WorldPoint(2827, 3740, 0), new CoordinateClueInfo("West of the entrance to the Ice Path, where the Troll child resides.")) + .put(new WorldPoint(2359, 3799, 0), new CoordinateClueInfo("Neitiznot.")) + .put(new WorldPoint(2194, 3807, 0), new CoordinateClueInfo("Pirates' Cove.")) + .put(new WorldPoint(2700, 3808, 0), new CoordinateClueInfo("Northwestern part of the Trollweiss and Rellekka Hunter area (DKS).")) + .put(new WorldPoint(3215, 3835, 0), new CoordinateClueInfo("Wilderness. Lava Dragon Isle.")) + .put(new WorldPoint(3369, 3894, 0), new CoordinateClueInfo("Wilderness. Fountain of Rune.")) + .put(new WorldPoint(2065, 3923, 0), new CoordinateClueInfo("Outside the western wall on Lunar Isle.")) + .put(new WorldPoint(3188, 3933, 0), new CoordinateClueInfo("Wilderness. Resource Area.")) + .put(new WorldPoint(2997, 3953, 0), new CoordinateClueInfo("Wilderness. Inside Agility Training Area.")) + .put(new WorldPoint(3380, 3963, 0), new CoordinateClueInfo("Wilderness. North of Volcano.")) + .put(new WorldPoint(3051, 3736, 0), new CoordinateClueInfo("East of the Wilderness Obelisk in 28 Wilderness.")) + .put(new WorldPoint(2316, 3814, 0), new CoordinateClueInfo("West of Neitiznot, near the bridge.")) + .put(new WorldPoint(2872, 3937, 0), new CoordinateClueInfo("Weiss.")) + .put(new WorldPoint(2484, 4016, 0), new CoordinateClueInfo("Northeast corner of the Island of Stone.")) // Master - .put(new WorldPoint(2178, 3209, 0), "South of Iorwerth Camp.") - .put(new WorldPoint(2155, 3100, 0), "South of Port Tyras (BJS).") - .put(new WorldPoint(2217, 3092, 0), "Poison Waste island (DLR).") - .put(new WorldPoint(3830, 3060, 0), "Small island located north-east of Mos Le'Harmless.") - .put(new WorldPoint(2834, 3271, 0), "Crandor island.") - .put(new WorldPoint(2732, 3284, 0), "Witchaven.") - .put(new WorldPoint(3622, 3320, 0), "Meiyerditch. Outside mine.") - .put(new WorldPoint(2303, 3328, 0), "East of Prifddinas.") - .put(new WorldPoint(3570, 3405, 0), "North of Dessous's tomb from Desert Treasure.") - .put(new WorldPoint(2840, 3423, 0), "Water Obelisk Island.") - .put(new WorldPoint(3604, 3564, 0), "North of the wrecked ship, outside of Port Phasmatys (ALQ).") - .put(new WorldPoint(3085, 3569, 0), "Wilderness. Obelisk of Air.") - .put(new WorldPoint(2934, 2727, 0), "Eastern shore of Crash Island.") - .put(new WorldPoint(1451, 3695, 0), "West side of Lizardman Canyon with Lizardman shaman.") - .put(new WorldPoint(2538, 3739, 0), "Waterbirth Island. Bring a pet rock and rune thrownaxe.") - .put(new WorldPoint(1698, 3792, 0), "Arceuus church.") - .put(new WorldPoint(2951, 3820, 0), "Wilderness. Chaos Temple (level 38).") - .put(new WorldPoint(2202, 3825, 0), "Pirates' Cove, between Lunar Isle and Rellekka.") - .put(new WorldPoint(1761, 3853, 0), "Arceuus essence mine (CIS).") - .put(new WorldPoint(2090, 3863, 0), "South of Lunar Isle, west of Astral altar.") - .put(new WorldPoint(1442, 3878, 0), "Sulphur Mine.") - .put(new WorldPoint(3380, 3929, 0), "Wilderness. Near Volcano.") - .put(new WorldPoint(3188, 3939, 0), "Wilderness. Resource Area.") - .put(new WorldPoint(3304, 3941, 0), "Wilderness. East of Rogues' Castle.") - .put(new WorldPoint(2994, 3961, 0), "Wilderness. Inside Agility Training Area.") - .put(new WorldPoint(1248, 3751, 0), "In the north wing of the Farming Guild.") + .put(new WorldPoint(2178, 3209, 0), new CoordinateClueInfo("South of Iorwerth Camp.")) + .put(new WorldPoint(2155, 3100, 0), new CoordinateClueInfo("South of Port Tyras (BJS).")) + .put(new WorldPoint(2217, 3092, 0), new CoordinateClueInfo("Poison Waste island (DLR).")) + .put(new WorldPoint(3830, 3060, 0), new CoordinateClueInfo("Small island located north-east of Mos Le'Harmless.", true, Varbits.FIRE_PIT_MOS_LE_HARMLESS)) + .put(new WorldPoint(2834, 3271, 0), new CoordinateClueInfo("Crandor island.")) + .put(new WorldPoint(2732, 3284, 0), new CoordinateClueInfo("Witchaven.")) + .put(new WorldPoint(3622, 3320, 0), new CoordinateClueInfo("Meiyerditch. Outside mine.")) + .put(new WorldPoint(2303, 3328, 0), new CoordinateClueInfo("East of Prifddinas.")) + .put(new WorldPoint(3570, 3405, 0), new CoordinateClueInfo("North of Dessous's tomb from Desert Treasure.")) + .put(new WorldPoint(2840, 3423, 0), new CoordinateClueInfo("Water Obelisk Island.")) + .put(new WorldPoint(3604, 3564, 0), new CoordinateClueInfo("North of the wrecked ship, outside of Port Phasmatys (ALQ).")) + .put(new WorldPoint(3085, 3569, 0), new CoordinateClueInfo("Wilderness. Obelisk of Air.")) + .put(new WorldPoint(2934, 2727, 0), new CoordinateClueInfo("Eastern shore of Crash Island.")) + .put(new WorldPoint(1451, 3695, 0), new CoordinateClueInfo("West side of Lizardman Canyon with Lizardman shaman.")) + .put(new WorldPoint(2538, 3739, 0), new CoordinateClueInfo("Waterbirth Island. Bring a pet rock and rune thrownaxe.")) + .put(new WorldPoint(1698, 3792, 0), new CoordinateClueInfo("Arceuus church.")) + .put(new WorldPoint(2951, 3820, 0), new CoordinateClueInfo("Wilderness. Chaos Temple (level 38).")) + .put(new WorldPoint(2202, 3825, 0), new CoordinateClueInfo("Pirates' Cove, between Lunar Isle and Rellekka.")) + .put(new WorldPoint(1761, 3853, 0), new CoordinateClueInfo("Arceuus essence mine (CIS).")) + .put(new WorldPoint(2090, 3863, 0), new CoordinateClueInfo("South of Lunar Isle, west of Astral altar.")) + .put(new WorldPoint(1442, 3878, 0), new CoordinateClueInfo("Sulphur Mine.")) + .put(new WorldPoint(3380, 3929, 0), new CoordinateClueInfo("Wilderness. Near Volcano.")) + .put(new WorldPoint(3188, 3939, 0), new CoordinateClueInfo("Wilderness. Resource Area.")) + .put(new WorldPoint(3304, 3941, 0), new CoordinateClueInfo("Wilderness. East of Rogues' Castle.")) + .put(new WorldPoint(2994, 3961, 0), new CoordinateClueInfo("Wilderness. Inside Agility Training Area.")) + .put(new WorldPoint(1248, 3751, 0), new CoordinateClueInfo("In the north wing of the Farming Guild.")) .build(); private final String text; @@ -211,6 +236,13 @@ public class CoordinateClue extends ClueScroll implements TextClueScroll, Locati this.text = text; this.location = location; this.mirrorLocation = mirrorLocation; + + final CoordinateClueInfo clueInfo = CLUES.get(location); + if (clueInfo != null) + { + setHasFirePit(clueInfo.getLightSource()); + setRequiresLight(clueInfo.lightRequired); + } setRequiresSpade(true); } @@ -232,12 +264,12 @@ public class CoordinateClue extends ClueScroll implements TextClueScroll, Locati { panelComponent.getChildren().add(TitleComponent.builder().text("Coordinate Clue").build()); - String solution = CLUES.get(location); + final CoordinateClueInfo solution = CLUES.get(location); if (solution != null) { panelComponent.getChildren().add(LineComponent.builder() - .left(solution) + .left(solution.getDirections()) .build()); panelComponent.getChildren().add(LineComponent.builder().build()); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java index 2714a7e345..bd1c30c01c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java @@ -134,7 +134,7 @@ public class CrypticClue extends ClueScroll implements TextClueScroll, NpcClueSc new CrypticClue("If you look closely enough, it seems that the archers have lost more than their needles.", HAYSTACK, new WorldPoint(2672, 3416, 0), "Search the haystack by the south corner of the Rangers' Guild"), new CrypticClue("Search the crate in the left-hand tower of Lumbridge Castle.", CRATE_357, new WorldPoint(3228, 3212, 1), "Located on the first floor of the southern tower at the Lumbridge Castle entrance."), new CrypticClue("'Small shoe.' Often found with rod on mushroom.", "Gnome trainer", new WorldPoint(2476, 3428, 0), "Talk to any Gnome trainer in the agility area of the Tree Gnome Stronghold."), - new CrypticClue("I live in a deserted crack collecting soles.", "Genie", new WorldPoint(3371, 9320, 0), "Enter the crack west of Nardah Rug merchant, and talk to the Genie. You'll need a light source and a rope."), + new CrypticClue("I live in a deserted crack collecting soles.", "Genie", new WorldPoint(3371, 9320, 0), "Enter the crack west of Nardah Rug merchant, and talk to the Genie. You'll need a light source and a rope.", true), new CrypticClue("46 is my number. My body is the colour of burnt orange and crawls among those with eight. Three mouths I have, yet I cannot eat. My blinking blue eye hides my grave.", new WorldPoint(3170, 3885, 0), "Sapphire respawn in the Spider's Nest, lvl 46 Wilderness. Dig under the sapphire spawn."), new CrypticClue("Green is the colour of my death as the winter-guise, I swoop towards the ground.", new WorldPoint(2780, 3783, 0), "Players need to slide down to where Trollweiss grows on Trollweiss Mountain."), new CrypticClue("Talk to a party-goer in Falador.", "Lucy", new WorldPoint(3046, 3382, 0), "Lucy is the bartender on the first floor of the party room."), @@ -348,6 +348,12 @@ public class CrypticClue extends ClueScroll implements TextClueScroll, NpcClueSc this(text, npc, -1, location, solution, ""); } + private CrypticClue(String text, String npc, WorldPoint location, String solution, boolean requiresLight) + { + this(text, npc, location, solution); + setRequiresLight(requiresLight); + } + private CrypticClue(String text, int objectId, WorldPoint location, String solution, String questionText) { this(text, null, objectId, location, solution, questionText); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/EmoteClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/EmoteClue.java index 4a2d00095c..89de1e4cbe 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/EmoteClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/EmoteClue.java @@ -40,6 +40,7 @@ import net.runelite.api.ItemID; import static net.runelite.api.ItemID.*; import net.runelite.api.Perspective; import net.runelite.api.ScriptID; +import net.runelite.api.Varbits; import net.runelite.api.coords.LocalPoint; import net.runelite.api.coords.WorldPoint; import static net.runelite.client.plugins.cluescrolls.ClueScrollOverlay.TITLED_CONTENT_COLOR; @@ -109,7 +110,7 @@ public class EmoteClue extends ClueScroll implements TextClueScroll, LocationClu new EmoteClue("Dance at the crossroads north of Draynor. Equip an iron chain body, a sapphire ring and a longbow.", "Draynor Village", CROSSROADS_NORTH_OF_DRAYNOR_VILLAGE, new WorldPoint(3109, 3294, 0), DANCE, item(IRON_CHAINBODY), item(SAPPHIRE_RING), item(LONGBOW)), new EmoteClue("Dance in the Party Room. Equip a steel full helmet, steel platebody and an iron plateskirt.", "Falador Party Room", OUTSIDE_THE_FALADOR_PARTY_ROOM, new WorldPoint(3045, 3376, 0), DANCE, item(STEEL_FULL_HELM), item(STEEL_PLATEBODY), item(IRON_PLATESKIRT)), new EmoteClue("Dance in the shack in Lumbridge Swamp. Equip a bronze dagger, iron full helmet and a gold ring.", "Lumbridge swamp", NEAR_A_SHED_IN_LUMBRIDGE_SWAMP, new WorldPoint(3203, 3169, 0), DANCE, item(BRONZE_DAGGER), item(IRON_FULL_HELM), item(GOLD_RING)), - new EmoteClue("Dance in the dark caves beneath Lumbridge Swamp. Blow a kiss before you talk to me. Equip an air staff, Bronze full helm and an amulet of power.", "Lumbridge swamp", LUMBRIDGE_SWAMP_CAVES, new WorldPoint(3168, 9571, 0), DANCE, BLOW_KISS, item(STAFF_OF_AIR), item(BRONZE_FULL_HELM), item(AMULET_OF_POWER)), + new EmoteClue("Dance in the dark caves beneath Lumbridge Swamp. Blow a kiss before you talk to me. Equip an air staff, Bronze full helm and an amulet of power.", "Lumbridge swamp caves", LUMBRIDGE_SWAMP_CAVES, new WorldPoint(3168, 9571, 0), DANCE, BLOW_KISS, Varbits.FIRE_PIT_LUMBRIDGE_SWAMP, item(STAFF_OF_AIR), item(BRONZE_FULL_HELM), item(AMULET_OF_POWER)), new EmoteClue("Dance at the cat-doored pyramid in Sophanem. Beware of double agents! Equip a ring of life, an uncharged amulet of glory and an adamant two-handed sword.", "Pyramid Of Sophanem", OUTSIDE_THE_GREAT_PYRAMID_OF_SOPHANEM, new WorldPoint(3294, 2781, 0), DANCE, item(RING_OF_LIFE), item(AMULET_OF_GLORY), item(ADAMANT_2H_SWORD)), new EmoteClue("Dance in the centre of Canifis. Bow before you talk to me. Equip a green gnome robe top, mithril plate legs and an iron two-handed sword.", "Canifis", CENTRE_OF_CANIFIS, new WorldPoint(3492, 3488, 0), DANCE, BOW, item(GREEN_ROBE_TOP), item(MITHRIL_PLATELEGS), item(IRON_2H_SWORD)), new EmoteClue("Dance in the King Black Dragon's lair. Beware of double agents! Equip a black dragonhide body, black dragonhide vambs and a black dragon mask.", "King black dragon's lair", KING_BLACK_DRAGONS_LAIR, new WorldPoint(2271, 4680, 0), DANCE, item(BLACK_DHIDE_BODY), item(BLACK_DHIDE_VAMB), item(BLACK_DRAGON_MASK)), @@ -206,6 +207,13 @@ public class EmoteClue extends ClueScroll implements TextClueScroll, LocationClu this.itemRequirements = itemRequirements; } + private EmoteClue(String text, String locationName, @Nullable STASHUnit stashUnit, WorldPoint location, Emote firstEmote, Emote secondEmote, @Nonnull Varbits firePit, @Nonnull ItemRequirement... itemRequirements) + { + this(text, locationName, stashUnit, location, firstEmote, secondEmote, itemRequirements); + setRequiresLight(true); + setHasFirePit(firePit); + } + @Override public void makeOverlayHint(PanelComponent panelComponent, ClueScrollPlugin plugin) {