From c2785628348effda93d675cb89e6d059fc163de2 Mon Sep 17 00:00:00 2001 From: Jordan Atwood Date: Tue, 11 Feb 2020 13:40:12 -0800 Subject: [PATCH] SkillChallengeClue: Highlight broken Dorgesh-kaan lamps For the skill challenge clue "Fix a magical lamp in Dorgesh-Kaan.", highlight lamps in the area which are broken. Fixes runelite/runelite#10069 Closes runelite/runelite#10117 --- .../cluescrolls/clues/SkillChallengeClue.java | 50 +++++++++++++++++-- 1 file changed, 46 insertions(+), 4 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/SkillChallengeClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/SkillChallengeClue.java index be50cbd31c..596d2ae821 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/SkillChallengeClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/SkillChallengeClue.java @@ -32,7 +32,12 @@ import net.runelite.api.EquipmentInventorySlot; import net.runelite.api.Item; import net.runelite.api.ItemID; import net.runelite.api.NPC; +import net.runelite.api.Point; +import net.runelite.api.TileObject; import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin; +import static net.runelite.client.plugins.cluescrolls.ClueScrollWorldOverlay.CLICKBOX_BORDER_COLOR; +import static net.runelite.client.plugins.cluescrolls.ClueScrollWorldOverlay.CLICKBOX_FILL_COLOR; +import static net.runelite.client.plugins.cluescrolls.ClueScrollWorldOverlay.CLICKBOX_HOVER_BORDER_COLOR; import net.runelite.client.plugins.cluescrolls.clues.item.AnyRequirementCollection; import static net.runelite.client.plugins.cluescrolls.clues.item.ItemRequirements.*; import net.runelite.client.plugins.cluescrolls.clues.item.ItemRequirement; @@ -50,7 +55,7 @@ import static net.runelite.client.plugins.cluescrolls.ClueScrollOverlay.TITLED_C import static net.runelite.client.plugins.cluescrolls.ClueScrollWorldOverlay.IMAGE_Z_OFFSET; @Getter -public class SkillChallengeClue extends ClueScroll implements NpcClueScroll +public class SkillChallengeClue extends ClueScroll implements NpcClueScroll, NamedObjectClueScroll { @AllArgsConstructor @Getter @@ -138,7 +143,7 @@ public class SkillChallengeClue extends ClueScroll implements NpcClueScroll new SkillChallengeClue("Smith a mithril 2h sword.", item(ItemID.HAMMER), xOfItem(ItemID.MITHRIL_BAR, 3)), new SkillChallengeClue("Catch a raw shark.", ANY_HARPOON), new SkillChallengeClue("Cut a yew log.", ANY_AXE), - new SkillChallengeClue("Fix a magical lamp in Dorgesh-Kaan.", item(ItemID.LIGHT_ORB)), + new SkillChallengeClue("Fix a magical lamp in Dorgesh-Kaan.", new String[] { "Broken lamp" }, new int[] { 10834, 10835 }, item(ItemID.LIGHT_ORB)), new SkillChallengeClue("Burn a yew log.", item(ItemID.YEW_LOGS), item(ItemID.TINDERBOX)), new SkillChallengeClue("Cook a swordfish", "cook a swordfish", item(ItemID.RAW_SWORDFISH)), new SkillChallengeClue("Craft multiple cosmic runes from a single essence.", item(ItemID.PURE_ESSENCE)), @@ -187,6 +192,8 @@ public class SkillChallengeClue extends ClueScroll implements NpcClueScroll private final ItemRequirement[] itemRequirements; private final SingleItemRequirement returnItem; private final boolean requireEquip; + private final String[] objectNames; + private final int[] objectRegions; @Setter private boolean challengeCompleted; @@ -201,6 +208,8 @@ public class SkillChallengeClue extends ClueScroll implements NpcClueScroll this.returnItem = returnItem; this.challengeCompleted = false; this.requireEquip = false; + this.objectNames = new String[0]; + this.objectRegions = null; } // Non-cryptic Sherlock Tasks @@ -209,20 +218,32 @@ public class SkillChallengeClue extends ClueScroll implements NpcClueScroll this(challenge, challenge.toLowerCase(), itemRequirements); } + // Non-cryptic Sherlock Tasks + private SkillChallengeClue(String challenge, String[] objectNames, int[] objectRegions, ItemRequirement ... itemRequirements) + { + this(challenge, challenge.toLowerCase(), false, objectNames, objectRegions, itemRequirements); + } + // Non-cryptic Sherlock Tasks private SkillChallengeClue(String challenge, boolean requireEquip, ItemRequirement ... itemRequirements) { - this(challenge, challenge.toLowerCase(), requireEquip, itemRequirements); + this(challenge, challenge.toLowerCase(), requireEquip, new String[0], null, itemRequirements); } // Sherlock Tasks private SkillChallengeClue(String challenge, String rawChallenge, ItemRequirement ... itemRequirements) { - this(challenge, rawChallenge, false, itemRequirements); + this(challenge, rawChallenge, false, new String[0], null, itemRequirements); } // Sherlock Tasks private SkillChallengeClue(String challenge, String rawChallenge, boolean requireEquip, ItemRequirement ... itemRequirements) + { + this(challenge, rawChallenge, requireEquip, new String[0], null, itemRequirements); + } + + // Sherlock Tasks + private SkillChallengeClue(String challenge, String rawChallenge, boolean requireEquip, String[] objectNames, int[] objectRegions, ItemRequirement ... itemRequirements) { this.type = ChallengeType.SHERLOCK; this.challenge = challenge; @@ -230,6 +251,8 @@ public class SkillChallengeClue extends ClueScroll implements NpcClueScroll this.itemRequirements = itemRequirements; this.challengeCompleted = false; this.requireEquip = requireEquip; + this.objectNames = objectNames; + this.objectRegions = objectRegions; this.returnText = "" + rawChallenge + ""; this.returnItem = null; @@ -294,6 +317,25 @@ public class SkillChallengeClue extends ClueScroll implements NpcClueScroll OverlayUtil.renderActorOverlayImage(graphics, npc, plugin.getClueScrollImage(), Color.ORANGE, IMAGE_Z_OFFSET); } } + + // Mark objects + if (!challengeCompleted && objectNames.length > 0 && plugin.getNamedObjectsToMark() != null) + { + final Point mousePosition = plugin.getClient().getMouseCanvasPosition(); + + for (final TileObject object : plugin.getNamedObjectsToMark()) + { + if (plugin.getClient().getPlane() != object.getPlane()) + { + continue; + } + + OverlayUtil.renderHoverableArea(graphics, object.getClickbox(), mousePosition, + CLICKBOX_FILL_COLOR, CLICKBOX_BORDER_COLOR, CLICKBOX_HOVER_BORDER_COLOR); + + OverlayUtil.renderImageLocation(plugin.getClient(), graphics, object.getLocalLocation(), plugin.getClueScrollImage(), IMAGE_Z_OFFSET); + } + } } private static List getRequirements(ClueScrollPlugin plugin, boolean requireEquipped, ItemRequirement ... requirements)