Merge pull request #6173 from 15987632/clue-fix2

Add support for objects to anagram clues
This commit is contained in:
Tomas Slusny
2018-10-27 20:43:24 +02:00
committed by GitHub
6 changed files with 84 additions and 16 deletions

View File

@@ -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.
*

View File

@@ -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<NPC> npcsToMark = new ArrayList<>();
@Getter
private GameObject[] objectsToMark;
private final List<TileObject> 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)

View File

@@ -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<AnagramClue> 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};
}
}

View File

@@ -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);

View File

@@ -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);

View File

@@ -29,6 +29,10 @@ import net.runelite.mapping.Import;
public interface RSObjectComposition extends ObjectComposition
{
@Import("id")
@Override
int getId();
@Import("name")
@Override
String getName();