Merge pull request #6173 from 15987632/clue-fix2
Add support for objects to anagram clues
This commit is contained in:
@@ -29,6 +29,13 @@ package net.runelite.api;
|
|||||||
*/
|
*/
|
||||||
public interface ObjectComposition
|
public interface ObjectComposition
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Gets ID for the object.
|
||||||
|
*
|
||||||
|
* @return the object ID
|
||||||
|
*/
|
||||||
|
int getId();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the name of the object.
|
* Gets the name of the object.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -48,8 +48,10 @@ import net.runelite.api.Item;
|
|||||||
import net.runelite.api.ItemComposition;
|
import net.runelite.api.ItemComposition;
|
||||||
import net.runelite.api.ItemID;
|
import net.runelite.api.ItemID;
|
||||||
import net.runelite.api.NPC;
|
import net.runelite.api.NPC;
|
||||||
|
import net.runelite.api.ObjectComposition;
|
||||||
import net.runelite.api.Scene;
|
import net.runelite.api.Scene;
|
||||||
import net.runelite.api.Tile;
|
import net.runelite.api.Tile;
|
||||||
|
import net.runelite.api.TileObject;
|
||||||
import net.runelite.api.coords.LocalPoint;
|
import net.runelite.api.coords.LocalPoint;
|
||||||
import net.runelite.api.coords.WorldPoint;
|
import net.runelite.api.coords.WorldPoint;
|
||||||
import net.runelite.api.events.ChatMessage;
|
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.ui.overlay.worldmap.WorldMapPointManager;
|
||||||
import net.runelite.client.util.ImageUtil;
|
import net.runelite.client.util.ImageUtil;
|
||||||
import net.runelite.client.util.Text;
|
import net.runelite.client.util.Text;
|
||||||
import org.apache.commons.lang3.ArrayUtils;
|
|
||||||
|
|
||||||
@PluginDescriptor(
|
@PluginDescriptor(
|
||||||
name = "Clue Scroll",
|
name = "Clue Scroll",
|
||||||
@@ -104,7 +105,7 @@ public class ClueScrollPlugin extends Plugin
|
|||||||
private final List<NPC> npcsToMark = new ArrayList<>();
|
private final List<NPC> npcsToMark = new ArrayList<>();
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private GameObject[] objectsToMark;
|
private final List<TileObject> objectsToMark = new ArrayList<>();
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private Item[] equippedItems;
|
private Item[] equippedItems;
|
||||||
@@ -307,7 +308,7 @@ public class ClueScrollPlugin extends Plugin
|
|||||||
@Subscribe
|
@Subscribe
|
||||||
public void onGameTick(final GameTick event)
|
public void onGameTick(final GameTick event)
|
||||||
{
|
{
|
||||||
objectsToMark = null;
|
objectsToMark.clear();
|
||||||
|
|
||||||
if (clue instanceof LocationsClueScroll)
|
if (clue instanceof LocationsClueScroll)
|
||||||
{
|
{
|
||||||
@@ -588,10 +589,33 @@ public class ClueScrollPlugin extends Plugin
|
|||||||
final Scene scene = client.getScene();
|
final Scene scene = client.getScene();
|
||||||
final Tile[][][] tiles = scene.getTiles();
|
final Tile[][][] tiles = scene.getTiles();
|
||||||
final Tile tile = tiles[client.getPlane()][localLocation.getSceneX()][localLocation.getSceneY()];
|
final Tile tile = tiles[client.getPlane()][localLocation.getSceneX()][localLocation.getSceneY()];
|
||||||
|
objectsToMark.clear();
|
||||||
|
|
||||||
objectsToMark = Arrays.stream(tile.getGameObjects())
|
for (GameObject object : tile.getGameObjects())
|
||||||
.filter(object -> object != null && ArrayUtils.contains(objectIds, object.getId()))
|
{
|
||||||
.toArray(GameObject[]::new);
|
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)
|
private void checkClueNPCs(ClueScroll clue, final NPC... npcs)
|
||||||
|
|||||||
@@ -30,17 +30,22 @@ import java.awt.Graphics2D;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import net.runelite.api.NPC;
|
import net.runelite.api.NPC;
|
||||||
|
import net.runelite.api.ObjectID;
|
||||||
|
import net.runelite.api.TileObject;
|
||||||
import net.runelite.api.coords.WorldPoint;
|
import net.runelite.api.coords.WorldPoint;
|
||||||
import static net.runelite.client.plugins.cluescrolls.ClueScrollOverlay.TITLED_CONTENT_COLOR;
|
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 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.OverlayUtil;
|
||||||
import net.runelite.client.ui.overlay.components.LineComponent;
|
import net.runelite.client.ui.overlay.components.LineComponent;
|
||||||
import net.runelite.client.ui.overlay.components.PanelComponent;
|
import net.runelite.client.ui.overlay.components.PanelComponent;
|
||||||
import net.runelite.client.ui.overlay.components.TitleComponent;
|
import net.runelite.client.ui.overlay.components.TitleComponent;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
public class AnagramClue extends ClueScroll implements TextClueScroll, NpcClueScroll, LocationClueScroll
|
public class AnagramClue extends ClueScroll implements TextClueScroll, NpcClueScroll, ObjectClueScroll
|
||||||
{
|
{
|
||||||
private static final Set<AnagramClue> CLUES = ImmutableSet.of(
|
private static final Set<AnagramClue> CLUES = ImmutableSet.of(
|
||||||
new AnagramClue("A BAKER", "Baraek", new WorldPoint(3217, 3434, 0), "Varrock square", "5"),
|
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("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("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("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("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")
|
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 WorldPoint location;
|
||||||
private String area;
|
private String area;
|
||||||
private String answer;
|
private String answer;
|
||||||
|
private int objectId;
|
||||||
|
|
||||||
private AnagramClue(String text, String npc, WorldPoint location, String area)
|
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.location = location;
|
||||||
this.area = area;
|
this.area = area;
|
||||||
this.answer = answer;
|
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
|
@Override
|
||||||
@@ -198,13 +211,28 @@ public class AnagramClue extends ClueScroll implements TextClueScroll, NpcClueSc
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (plugin.getNpcsToMark() != null)
|
// Mark NPC
|
||||||
|
if (objectId == -1 && plugin.getNpcsToMark() != null)
|
||||||
{
|
{
|
||||||
for (NPC npc : plugin.getNpcsToMark())
|
for (NPC npc : plugin.getNpcsToMark())
|
||||||
{
|
{
|
||||||
OverlayUtil.renderActorOverlayImage(graphics, npc, plugin.getClueScrollImage(), Color.ORANGE, IMAGE_Z_OFFSET);
|
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)
|
public static AnagramClue forText(String text)
|
||||||
@@ -224,4 +252,9 @@ public class AnagramClue extends ClueScroll implements TextClueScroll, NpcClueSc
|
|||||||
{
|
{
|
||||||
return new String[] {npc};
|
return new String[] {npc};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int[] getObjectIds()
|
||||||
|
{
|
||||||
|
return new int[] {objectId};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -29,11 +29,11 @@ import java.awt.Color;
|
|||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import net.runelite.api.GameObject;
|
|
||||||
import net.runelite.api.NPC;
|
import net.runelite.api.NPC;
|
||||||
|
import static net.runelite.api.NullObjectID.NULL_1293;
|
||||||
import net.runelite.api.ObjectComposition;
|
import net.runelite.api.ObjectComposition;
|
||||||
import static net.runelite.api.ObjectID.*;
|
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.LocalPoint;
|
||||||
import net.runelite.api.coords.WorldPoint;
|
import net.runelite.api.coords.WorldPoint;
|
||||||
import static net.runelite.client.plugins.cluescrolls.ClueScrollOverlay.TITLED_CONTENT_COLOR;
|
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)
|
if (plugin.getObjectsToMark() != null)
|
||||||
{
|
{
|
||||||
for (GameObject gameObject : plugin.getObjectsToMark())
|
for (TileObject gameObject : plugin.getObjectsToMark())
|
||||||
{
|
{
|
||||||
OverlayUtil.renderHoverableArea(graphics, gameObject.getClickbox(), mousePosition,
|
OverlayUtil.renderHoverableArea(graphics, gameObject.getClickbox(), mousePosition,
|
||||||
CLICKBOX_FILL_COLOR, CLICKBOX_BORDER_COLOR, CLICKBOX_HOVER_BORDER_COLOR);
|
CLICKBOX_FILL_COLOR, CLICKBOX_BORDER_COLOR, CLICKBOX_HOVER_BORDER_COLOR);
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ import java.awt.Color;
|
|||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import net.runelite.api.GameObject;
|
|
||||||
import static net.runelite.api.ItemID.*;
|
import static net.runelite.api.ItemID.*;
|
||||||
import net.runelite.api.ObjectComposition;
|
import net.runelite.api.ObjectComposition;
|
||||||
import static net.runelite.api.ObjectID.CRATE_18506;
|
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_354;
|
||||||
import static net.runelite.api.ObjectID.CRATE_357;
|
import static net.runelite.api.ObjectID.CRATE_357;
|
||||||
import static net.runelite.api.ObjectID.CRATE_6616;
|
import static net.runelite.api.ObjectID.CRATE_6616;
|
||||||
|
import net.runelite.api.TileObject;
|
||||||
import net.runelite.api.coords.LocalPoint;
|
import net.runelite.api.coords.LocalPoint;
|
||||||
import net.runelite.api.coords.WorldPoint;
|
import net.runelite.api.coords.WorldPoint;
|
||||||
import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin;
|
import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin;
|
||||||
@@ -185,7 +185,7 @@ public class MapClue extends ClueScroll implements ObjectClueScroll
|
|||||||
|
|
||||||
if (plugin.getObjectsToMark() != null)
|
if (plugin.getObjectsToMark() != null)
|
||||||
{
|
{
|
||||||
for (GameObject gameObject : plugin.getObjectsToMark())
|
for (TileObject gameObject : plugin.getObjectsToMark())
|
||||||
{
|
{
|
||||||
OverlayUtil.renderHoverableArea(graphics, gameObject.getClickbox(), mousePosition,
|
OverlayUtil.renderHoverableArea(graphics, gameObject.getClickbox(), mousePosition,
|
||||||
CLICKBOX_FILL_COLOR, CLICKBOX_BORDER_COLOR, CLICKBOX_HOVER_BORDER_COLOR);
|
CLICKBOX_FILL_COLOR, CLICKBOX_BORDER_COLOR, CLICKBOX_HOVER_BORDER_COLOR);
|
||||||
|
|||||||
@@ -29,6 +29,10 @@ import net.runelite.mapping.Import;
|
|||||||
|
|
||||||
public interface RSObjectComposition extends ObjectComposition
|
public interface RSObjectComposition extends ObjectComposition
|
||||||
{
|
{
|
||||||
|
@Import("id")
|
||||||
|
@Override
|
||||||
|
int getId();
|
||||||
|
|
||||||
@Import("name")
|
@Import("name")
|
||||||
@Override
|
@Override
|
||||||
String getName();
|
String getName();
|
||||||
|
|||||||
Reference in New Issue
Block a user