From 319d8af0b1a7d25e9ab0ff65ab84c1d4fb418f81 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Thu, 25 Oct 2018 10:19:05 +0200 Subject: [PATCH] Add support for impostors to clue scroll plugin Add support for object impostors to clue scroll plugin. Signed-off-by: Tomas Slusny --- .../plugins/cluescrolls/ClueScrollPlugin.java | 36 +++++++++++++++---- .../cluescrolls/clues/CrypticClue.java | 6 ++-- .../plugins/cluescrolls/clues/MapClue.java | 4 +-- 3 files changed, 35 insertions(+), 11 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java index 89ed66c7d9..6f7e1b74c1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java @@ -48,8 +48,10 @@ import net.runelite.api.Item; import net.runelite.api.ItemComposition; import net.runelite.api.ItemID; import net.runelite.api.NPC; +import net.runelite.api.ObjectComposition; import net.runelite.api.Scene; import net.runelite.api.Tile; +import net.runelite.api.TileObject; import net.runelite.api.coords.LocalPoint; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.ChatMessage; @@ -85,7 +87,6 @@ import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.worldmap.WorldMapPointManager; import net.runelite.client.util.ImageUtil; import net.runelite.client.util.Text; -import org.apache.commons.lang3.ArrayUtils; @PluginDescriptor( name = "Clue Scroll", @@ -104,7 +105,7 @@ public class ClueScrollPlugin extends Plugin private final List npcsToMark = new ArrayList<>(); @Getter - private GameObject[] objectsToMark; + private final List objectsToMark = new ArrayList<>(); @Getter private Item[] equippedItems; @@ -307,7 +308,7 @@ public class ClueScrollPlugin extends Plugin @Subscribe public void onGameTick(final GameTick event) { - objectsToMark = null; + objectsToMark.clear(); if (clue instanceof LocationsClueScroll) { @@ -588,10 +589,33 @@ public class ClueScrollPlugin extends Plugin final Scene scene = client.getScene(); final Tile[][][] tiles = scene.getTiles(); final Tile tile = tiles[client.getPlane()][localLocation.getSceneX()][localLocation.getSceneY()]; + objectsToMark.clear(); - objectsToMark = Arrays.stream(tile.getGameObjects()) - .filter(object -> object != null && ArrayUtils.contains(objectIds, object.getId())) - .toArray(GameObject[]::new); + for (GameObject object : tile.getGameObjects()) + { + if (object == null) + { + continue; + } + + for (int id : objectIds) + { + if (object.getId() == id) + { + objectsToMark.add(object); + continue; + } + + // Check impostors + final ObjectComposition comp = client.getObjectDefinition(object.getId()); + final ObjectComposition impostor = comp.getImpostor(); + + if (impostor != null && impostor.getId() == id) + { + objectsToMark.add(object); + } + } + } } private void checkClueNPCs(ClueScroll clue, final NPC... npcs) 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 e89c72650b..facb723008 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 @@ -29,11 +29,11 @@ import java.awt.Color; import java.awt.Graphics2D; import java.util.Set; import lombok.Getter; -import net.runelite.api.GameObject; import net.runelite.api.NPC; +import static net.runelite.api.NullObjectID.NULL_1293; import net.runelite.api.ObjectComposition; import static net.runelite.api.ObjectID.*; -import static net.runelite.api.NullObjectID.*; +import net.runelite.api.TileObject; import net.runelite.api.coords.LocalPoint; import net.runelite.api.coords.WorldPoint; import static net.runelite.client.plugins.cluescrolls.ClueScrollOverlay.TITLED_CONTENT_COLOR; @@ -409,7 +409,7 @@ public class CrypticClue extends ClueScroll implements TextClueScroll, NpcClueSc if (plugin.getObjectsToMark() != null) { - for (GameObject gameObject : plugin.getObjectsToMark()) + for (TileObject gameObject : plugin.getObjectsToMark()) { OverlayUtil.renderHoverableArea(graphics, gameObject.getClickbox(), mousePosition, CLICKBOX_FILL_COLOR, CLICKBOX_BORDER_COLOR, CLICKBOX_HOVER_BORDER_COLOR); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/MapClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/MapClue.java index 50ff46159f..414c49806d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/MapClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/MapClue.java @@ -29,7 +29,6 @@ import java.awt.Color; import java.awt.Graphics2D; import java.util.Set; import lombok.Getter; -import net.runelite.api.GameObject; import static net.runelite.api.ItemID.*; import net.runelite.api.ObjectComposition; import static net.runelite.api.ObjectID.CRATE_18506; @@ -37,6 +36,7 @@ import static net.runelite.api.ObjectID.CRATE_2620; import static net.runelite.api.ObjectID.CRATE_354; import static net.runelite.api.ObjectID.CRATE_357; import static net.runelite.api.ObjectID.CRATE_6616; +import net.runelite.api.TileObject; import net.runelite.api.coords.LocalPoint; import net.runelite.api.coords.WorldPoint; import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin; @@ -185,7 +185,7 @@ public class MapClue extends ClueScroll implements ObjectClueScroll if (plugin.getObjectsToMark() != null) { - for (GameObject gameObject : plugin.getObjectsToMark()) + for (TileObject gameObject : plugin.getObjectsToMark()) { OverlayUtil.renderHoverableArea(graphics, gameObject.getClickbox(), mousePosition, CLICKBOX_FILL_COLOR, CLICKBOX_BORDER_COLOR, CLICKBOX_HOVER_BORDER_COLOR);