From b6af8dc4db08156085a85830e67b44c29c741550 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Sat, 27 Oct 2018 11:45:52 +0200 Subject: [PATCH 1/3] Export ObjectComposition ID Signed-off-by: Tomas Slusny --- .../src/main/java/net/runelite/api/ObjectComposition.java | 7 +++++++ .../main/java/net/runelite/rs/api/RSObjectComposition.java | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/runelite-api/src/main/java/net/runelite/api/ObjectComposition.java b/runelite-api/src/main/java/net/runelite/api/ObjectComposition.java index 605679244f..3b90539c19 100644 --- a/runelite-api/src/main/java/net/runelite/api/ObjectComposition.java +++ b/runelite-api/src/main/java/net/runelite/api/ObjectComposition.java @@ -29,6 +29,13 @@ package net.runelite.api; */ public interface ObjectComposition { + /** + * Gets ID for the object. + * + * @return the object ID + */ + int getId(); + /** * Gets the name of the object. * diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSObjectComposition.java b/runescape-api/src/main/java/net/runelite/rs/api/RSObjectComposition.java index 8bc8a77547..3df00175f5 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSObjectComposition.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSObjectComposition.java @@ -29,6 +29,10 @@ import net.runelite.mapping.Import; public interface RSObjectComposition extends ObjectComposition { + @Import("id") + @Override + int getId(); + @Import("name") @Override String getName(); From 319d8af0b1a7d25e9ab0ff65ab84c1d4fb418f81 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Thu, 25 Oct 2018 10:19:05 +0200 Subject: [PATCH 2/3] 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); From cd9c2252dc3efd448fdf699f976a601d100e7388 Mon Sep 17 00:00:00 2001 From: 15987632 Date: Thu, 25 Oct 2018 05:52:29 -0400 Subject: [PATCH 3/3] Add support for objects to Anagram clues Fixes #6053 --- .../cluescrolls/clues/AnagramClue.java | 43 ++++++++++++++++--- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/AnagramClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/AnagramClue.java index 93237584ff..4c4d0adcd2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/AnagramClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/AnagramClue.java @@ -30,17 +30,22 @@ import java.awt.Graphics2D; import java.util.Set; import lombok.Getter; import net.runelite.api.NPC; +import net.runelite.api.ObjectID; +import net.runelite.api.TileObject; import net.runelite.api.coords.WorldPoint; import static net.runelite.client.plugins.cluescrolls.ClueScrollOverlay.TITLED_CONTENT_COLOR; -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 static net.runelite.client.plugins.cluescrolls.ClueScrollWorldOverlay.IMAGE_Z_OFFSET; +import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin; import net.runelite.client.ui.overlay.OverlayUtil; import net.runelite.client.ui.overlay.components.LineComponent; import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.TitleComponent; @Getter -public class AnagramClue extends ClueScroll implements TextClueScroll, NpcClueScroll, LocationClueScroll +public class AnagramClue extends ClueScroll implements TextClueScroll, NpcClueScroll, ObjectClueScroll { private static final Set CLUES = ImmutableSet.of( new AnagramClue("A BAKER", "Baraek", new WorldPoint(3217, 3434, 0), "Varrock square", "5"), @@ -139,7 +144,7 @@ public class AnagramClue extends ClueScroll implements TextClueScroll, NpcClueSc new AnagramClue("UNLEASH NIGHT MIST", "Sigli the Huntsman", new WorldPoint(2660, 3654, 0), "Rellekka", "302"), new AnagramClue("VESTE", "Steve", new WorldPoint(2432, 3423, 0), "Upstairs Wyvern Area or Stronghold Slayer Cave", "2"), new AnagramClue("VEIL VEDA", "Evil Dave", new WorldPoint(3079, 9892, 0), "Doris' basement, Edgeville", "666"), - new AnagramClue("WOO AN EGG KIWI", "Awowogei", new WorldPoint(2802, 2764, 0), "Ape Atoll", "24"), + new AnagramClue("WOO AN EGG KIWI", "Awowogei", ObjectID.AWOWOGEI, new WorldPoint(2802, 2765, 0), "Ape Atoll", "24"), new AnagramClue("YAWNS GY", "Ysgawyn", new WorldPoint(2340, 3167, 0), "Lletya"), new AnagramClue("MAJORS LAVA BADS AIR", "Ambassador Alvijar", new WorldPoint(2736, 5351, 1), "Dorgesh-Kaan, NE Middle Level", "2505") ); @@ -149,6 +154,7 @@ public class AnagramClue extends ClueScroll implements TextClueScroll, NpcClueSc private WorldPoint location; private String area; private String answer; + private int objectId; private AnagramClue(String text, String npc, WorldPoint location, String area) { @@ -162,6 +168,13 @@ public class AnagramClue extends ClueScroll implements TextClueScroll, NpcClueSc this.location = location; this.area = area; this.answer = answer; + this.objectId = -1; + } + + private AnagramClue(String text, String npc, int objectId, WorldPoint location, String area, String answer) + { + this(text, npc, location, area, answer); + this.objectId = objectId; } @Override @@ -198,13 +211,28 @@ public class AnagramClue extends ClueScroll implements TextClueScroll, NpcClueSc return; } - if (plugin.getNpcsToMark() != null) + // Mark NPC + if (objectId == -1 && plugin.getNpcsToMark() != null) { for (NPC npc : plugin.getNpcsToMark()) { OverlayUtil.renderActorOverlayImage(graphics, npc, plugin.getClueScrollImage(), Color.ORANGE, IMAGE_Z_OFFSET); } } + + // Mark game object + if (objectId != -1) + { + net.runelite.api.Point mousePosition = plugin.getClient().getMouseCanvasPosition(); + + for (TileObject gameObject : plugin.getObjectsToMark()) + { + OverlayUtil.renderHoverableArea(graphics, gameObject.getClickbox(), mousePosition, + CLICKBOX_FILL_COLOR, CLICKBOX_BORDER_COLOR, CLICKBOX_HOVER_BORDER_COLOR); + + OverlayUtil.renderImageLocation(plugin.getClient(), graphics, gameObject.getLocalLocation(), plugin.getClueScrollImage(), IMAGE_Z_OFFSET); + } + } } public static AnagramClue forText(String text) @@ -224,4 +252,9 @@ public class AnagramClue extends ClueScroll implements TextClueScroll, NpcClueSc { return new String[] {npc}; } -} + + public int[] getObjectIds() + { + return new int[] {objectId}; + } +} \ No newline at end of file