use of net.runelite.api.queries.InventoryItemQuery in project runelite by runelite.
the class ClueScrollPlugin method checkForClues.
@Schedule(period = 600, unit = ChronoUnit.MILLIS)
public void checkForClues() {
if (client.getGameState() == GameState.LOGIN_SCREEN) {
clue = null;
return;
}
npcsToMark = null;
objectsToMark = null;
equippedItems = null;
if (clue instanceof NpcClueScroll) {
String npc = ((NpcClueScroll) clue).getNpc();
if (npc != null) {
Query query = new NPCQuery().nameContains(npc);
npcsToMark = queryRunner.runQuery(query);
}
}
if (clue instanceof ObjectClueScroll) {
int objectId = ((ObjectClueScroll) clue).getObjectId();
if (objectId != -1) {
GameObjectQuery query = new GameObjectQuery().idEquals(objectId);
objectsToMark = queryRunner.runQuery(query);
}
}
if (clue instanceof EmoteClue) {
equippedItems = new HashSet<>();
Item[] result = queryRunner.runQuery(new InventoryItemQuery(InventoryID.EQUIPMENT));
if (result != null) {
for (Item item : result) {
equippedItems.add(item.getId());
}
}
}
ClueScroll clue = findClueScroll();
if (clue == null && this.clue != null) {
// wait for WAIT_DURATION before discarding the knowledge of the player having a clue.
if (Instant.now().compareTo(clueTimeout.plus(WAIT_DURATION)) < 0) {
return;
}
}
// so the clue window doesn't have to be open.
if (clue != null) {
this.clue = clue;
this.clueTimeout = Instant.now();
}
}
use of net.runelite.api.queries.InventoryItemQuery in project runelite by runelite.
the class ClueScrollPlugin method findClueScroll.
private ClueScroll findClueScroll() {
Widget clueScrollText = client.getWidget(WidgetInfo.CLUE_SCROLL_TEXT);
if (clueScrollText != null) {
// Remove line breaks and also the rare occasion where there are double line breaks
String text = clueScrollText.getText().replaceAll("-<br>", "-").replaceAll("<br>", " ").replaceAll("[ ]+", " ").toLowerCase();
if (clue != null && clue instanceof TextClueScroll) {
if (((TextClueScroll) clue).getText().equalsIgnoreCase(text)) {
return clue;
}
}
if (text.startsWith("this anagram reveals who to speak to next:")) {
return AnagramClue.forText(text);
} else if (text.startsWith("the cipher reveals who to speak to next:")) {
return CipherClue.forText(text);
} else if (text.contains("degrees") && text.contains("minutes")) {
return coordinatesToWorldPoint(text);
} else {
CrypticClue crypticClue = CrypticClue.forText(text);
if (crypticClue != null) {
return crypticClue;
}
EmoteClue emoteClue = EmoteClue.forText(text);
if (emoteClue != null) {
return emoteClue;
}
return FairyRingClue.forText(text);
}
}
Item[] result = queryRunner.runQuery(new InventoryItemQuery(InventoryID.INVENTORY));
if (result == null) {
return null;
}
for (Item item : result) {
MapClue clue = MapClue.forItemId(item.getId());
if (clue != null) {
return clue;
}
}
return null;
}
Aggregations