From 14c37f142d8e491ca891645c669474b1442171cf Mon Sep 17 00:00:00 2001 From: Magic fTail Date: Mon, 28 May 2018 13:55:55 +0200 Subject: [PATCH 1/2] BossTimerPlugin: Find bosses based on id instead of name Use id instead of name of boss when, when finding bosses. Makes support for multi phase bosses possible if added. --- .../client/plugins/bosstimer/Boss.java | 63 ++++++++++--------- .../plugins/bosstimer/BossTimersPlugin.java | 13 ++-- 2 files changed, 40 insertions(+), 36 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/bosstimer/Boss.java b/runelite-client/src/main/java/net/runelite/client/plugins/bosstimer/Boss.java index 1a116fbd65..0bf88e89cc 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/bosstimer/Boss.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/bosstimer/Boss.java @@ -31,36 +31,37 @@ import java.util.HashMap; import java.util.Map; import lombok.extern.slf4j.Slf4j; import net.runelite.api.ItemID; +import net.runelite.api.NpcID; @Slf4j enum Boss { - GENERAL_GRAARDOR("General Graardor", 90, ChronoUnit.SECONDS, ItemID.PET_GENERAL_GRAARDOR), - KRIL_TSUTSAROTH("K'ril Tsutsaroth", 90, ChronoUnit.SECONDS, ItemID.PET_KRIL_TSUTSAROTH), - KREEARRA("Kree'arra", 90, ChronoUnit.SECONDS, ItemID.PET_KREEARRA), - COMMANDER_ZILYANA("Commander Zilyana", 90, ChronoUnit.SECONDS, ItemID.PET_ZILYANA), - CALLISTO("Callisto", 30, ChronoUnit.SECONDS, ItemID.CALLISTO_CUB), - CHAOS_ELEMENTAL("Chaos Elemental", 150, ChronoUnit.SECONDS, ItemID.PET_CHAOS_ELEMENTAL), - CHAOS_FANATIC("Chaos fanatic", 30, ChronoUnit.SECONDS, ItemID.ANCIENT_STAFF), - CRAZY_ARCHAEOLOGIST("Crazy archaeologist", 30, ChronoUnit.SECONDS, ItemID.FEDORA), - KING_BLACK_DRAGON("King Black Dragon", 10, ChronoUnit.SECONDS, ItemID.PRINCE_BLACK_DRAGON), - SCORPIA("Scorpia", 10, ChronoUnit.SECONDS, ItemID.SCORPIAS_OFFSPRING), - VENENATIS("Venenatis", 30, ChronoUnit.SECONDS, ItemID.VENENATIS_SPIDERLING), - VETION("Vet'ion Reborn", 30, ChronoUnit.SECONDS, ItemID.VETION_JR), - DAGANNOTH_PRIME("Dagannoth Prime", 90, ChronoUnit.SECONDS, ItemID.PET_DAGANNOTH_PRIME), - DAGANNOTH_REX("Dagannoth Rex", 90, ChronoUnit.SECONDS, ItemID.PET_DAGANNOTH_REX), - DAGANNOTH_SUPREME("Dagannoth Supreme", 90, ChronoUnit.SECONDS, ItemID.PET_DAGANNOTH_SUPREME), - CORPOREAL_BEAST("Corporeal Beast", 30, ChronoUnit.SECONDS, ItemID.PET_DARK_CORE), - GIANT_MOLE("Giant Mole", 10, ChronoUnit.SECONDS, ItemID.BABY_MOLE), - DERANGED_ARCHAEOLOGIST("Deranged archaeologist", 30, ChronoUnit.SECONDS, ItemID.UNIDENTIFIED_LARGE_FOSSIL), - CERBERUS("Cerberus", 10800, ChronoUnit.MILLIS, ItemID.HELLPUPPY), - THERMONUCLEAR_SMOKE_DEVIL("Thermonuclear smoke devil", 12, ChronoUnit.SECONDS, ItemID.PET_SMOKE_DEVIL), - KRAKEN("Kraken", 10800, ChronoUnit.MILLIS, ItemID.PET_KRAKEN), - KALPHITE_QUEEN("Kalphite Queen", 30, ChronoUnit.SECONDS, ItemID.KALPHITE_PRINCESS); + GENERAL_GRAARDOR(NpcID.GENERAL_GRAARDOR, 90, ChronoUnit.SECONDS, ItemID.PET_GENERAL_GRAARDOR), + KRIL_TSUTSAROTH(NpcID.KRIL_TSUTSAROTH, 90, ChronoUnit.SECONDS, ItemID.PET_KRIL_TSUTSAROTH), + KREEARRA(NpcID.KREEARRA, 90, ChronoUnit.SECONDS, ItemID.PET_KREEARRA), + COMMANDER_ZILYANA(NpcID.COMMANDER_ZILYANA, 90, ChronoUnit.SECONDS, ItemID.PET_ZILYANA), + CALLISTO(NpcID.CALLISTO, 30, ChronoUnit.SECONDS, ItemID.CALLISTO_CUB), + CHAOS_ELEMENTAL(NpcID.CHAOS_ELEMENTAL, 150, ChronoUnit.SECONDS, ItemID.PET_CHAOS_ELEMENTAL), + CHAOS_FANATIC(NpcID.CHAOS_FANATIC, 30, ChronoUnit.SECONDS, ItemID.ANCIENT_STAFF), + CRAZY_ARCHAEOLOGIST(NpcID.CRAZY_ARCHAEOLOGIST, 30, ChronoUnit.SECONDS, ItemID.FEDORA), + KING_BLACK_DRAGON(NpcID.KING_BLACK_DRAGON, 10, ChronoUnit.SECONDS, ItemID.PRINCE_BLACK_DRAGON), + SCORPIA(NpcID.SCORPIA, 10, ChronoUnit.SECONDS, ItemID.SCORPIAS_OFFSPRING), + VENENATIS(NpcID.VENENATIS, 30, ChronoUnit.SECONDS, ItemID.VENENATIS_SPIDERLING), + VETION(NpcID.VETION_REBORN, 30, ChronoUnit.SECONDS, ItemID.VETION_JR), + DAGANNOTH_PRIME(NpcID.DAGANNOTH_PRIME, 90, ChronoUnit.SECONDS, ItemID.PET_DAGANNOTH_PRIME), + DAGANNOTH_REX(NpcID.DAGANNOTH_REX, 90, ChronoUnit.SECONDS, ItemID.PET_DAGANNOTH_REX), + DAGANNOTH_SUPREME(NpcID.DAGANNOTH_SUPREME, 90, ChronoUnit.SECONDS, ItemID.PET_DAGANNOTH_SUPREME), + CORPOREAL_BEAST(NpcID.CORPOREAL_BEAST, 30, ChronoUnit.SECONDS, ItemID.PET_DARK_CORE), + GIANT_MOLE(NpcID.GIANT_MOLE, 10, ChronoUnit.SECONDS, ItemID.BABY_MOLE), + DERANGED_ARCHAEOLOGIST(NpcID.DERANGED_ARCHAEOLOGIST, 30, ChronoUnit.SECONDS, ItemID.UNIDENTIFIED_LARGE_FOSSIL), + CERBERUS(NpcID.CERBERUS, 10800, ChronoUnit.MILLIS, ItemID.HELLPUPPY), + THERMONUCLEAR_SMOKE_DEVIL(NpcID.THERMONUCLEAR_SMOKE_DEVIL, 12, ChronoUnit.SECONDS, ItemID.PET_SMOKE_DEVIL), + KRAKEN(NpcID.KRAKEN, 10800, ChronoUnit.MILLIS, ItemID.PET_KRAKEN), + KALPHITE_QUEEN(NpcID.KALPHITE_QUEEN_965, 30, ChronoUnit.SECONDS, ItemID.KALPHITE_PRINCESS); - private static final Map bosses = new HashMap<>(); + private static final Map bosses = new HashMap<>(); - private final String name; + private final int id; private final Duration spawnTime; private final int itemSpriteId; @@ -68,20 +69,20 @@ enum Boss { for (Boss boss : values()) { - bosses.put(boss.getName(), boss); + bosses.put(boss.getId(), boss); } } - private Boss(String name, long period, ChronoUnit unit, int itemSpriteId) + private Boss(int id, long period, ChronoUnit unit, int itemSpriteId) { - this.name = name; + this.id = id; this.spawnTime = Duration.of(period, unit); this.itemSpriteId = itemSpriteId; } - public String getName() + public int getId() { - return name; + return id; } public Duration getSpawnTime() @@ -94,8 +95,8 @@ enum Boss return itemSpriteId; } - public static Boss find(String name) + public static Boss find(int id) { - return bosses.get(name); + return bosses.get(id); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/bosstimer/BossTimersPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/bosstimer/BossTimersPlugin.java index d13e30c039..ba282fef21 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/bosstimer/BossTimersPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/bosstimer/BossTimersPlugin.java @@ -56,14 +56,17 @@ public class BossTimersPlugin extends Plugin @Subscribe public void onNpcDespawned(NpcDespawned npcDespawned) { - NPC actor = npcDespawned.getNpc(); + NPC npc = npcDespawned.getNpc(); - if (actor.getHealthRatio() != 0) + if (npc.getHealthRatio() != 0) { return; } - Boss boss = Boss.find(actor.getName()); + int npcId = npc.getId(); + + Boss boss = Boss.find(npcId); + if (boss == null) { return; @@ -72,10 +75,10 @@ public class BossTimersPlugin extends Plugin // remove existing timer infoBoxManager.removeIf(t -> t instanceof RespawnTimer && ((RespawnTimer) t).getBoss() == boss); - log.debug("Creating spawn timer for {} ({} seconds)", actor.getName(), boss.getSpawnTime()); + log.debug("Creating spawn timer for {} ({} seconds)", npc.getName(), boss.getSpawnTime()); RespawnTimer timer = new RespawnTimer(boss, itemManager.getImage(boss.getItemSpriteId()), this); - timer.setTooltip(boss.getName()); + timer.setTooltip(npc.getName()); infoBoxManager.addInfoBox(timer); } } From 58c5d7d15be7a696ee19a5b4ba6101a92b8cbfa0 Mon Sep 17 00:00:00 2001 From: Magic fTail Date: Tue, 29 May 2018 10:36:47 +0200 Subject: [PATCH 2/2] More accurate respawn timers Cerb, Thermy, Mole, Kraken, and Deranged Archeologists timers were based off actorDeath, making them too long --- .../net/runelite/client/plugins/bosstimer/Boss.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/bosstimer/Boss.java b/runelite-client/src/main/java/net/runelite/client/plugins/bosstimer/Boss.java index 0bf88e89cc..67e06eb567 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/bosstimer/Boss.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/bosstimer/Boss.java @@ -52,11 +52,11 @@ enum Boss DAGANNOTH_REX(NpcID.DAGANNOTH_REX, 90, ChronoUnit.SECONDS, ItemID.PET_DAGANNOTH_REX), DAGANNOTH_SUPREME(NpcID.DAGANNOTH_SUPREME, 90, ChronoUnit.SECONDS, ItemID.PET_DAGANNOTH_SUPREME), CORPOREAL_BEAST(NpcID.CORPOREAL_BEAST, 30, ChronoUnit.SECONDS, ItemID.PET_DARK_CORE), - GIANT_MOLE(NpcID.GIANT_MOLE, 10, ChronoUnit.SECONDS, ItemID.BABY_MOLE), - DERANGED_ARCHAEOLOGIST(NpcID.DERANGED_ARCHAEOLOGIST, 30, ChronoUnit.SECONDS, ItemID.UNIDENTIFIED_LARGE_FOSSIL), - CERBERUS(NpcID.CERBERUS, 10800, ChronoUnit.MILLIS, ItemID.HELLPUPPY), - THERMONUCLEAR_SMOKE_DEVIL(NpcID.THERMONUCLEAR_SMOKE_DEVIL, 12, ChronoUnit.SECONDS, ItemID.PET_SMOKE_DEVIL), - KRAKEN(NpcID.KRAKEN, 10800, ChronoUnit.MILLIS, ItemID.PET_KRAKEN), + GIANT_MOLE(NpcID.GIANT_MOLE, 9000, ChronoUnit.MILLIS, ItemID.BABY_MOLE), + DERANGED_ARCHAEOLOGIST(NpcID.DERANGED_ARCHAEOLOGIST, 29400, ChronoUnit.MILLIS, ItemID.UNIDENTIFIED_LARGE_FOSSIL), + CERBERUS(NpcID.CERBERUS, 8400, ChronoUnit.MILLIS, ItemID.HELLPUPPY), + THERMONUCLEAR_SMOKE_DEVIL(NpcID.THERMONUCLEAR_SMOKE_DEVIL, 8400, ChronoUnit.MILLIS, ItemID.PET_SMOKE_DEVIL), + KRAKEN(NpcID.KRAKEN, 8400, ChronoUnit.MILLIS, ItemID.PET_KRAKEN), KALPHITE_QUEEN(NpcID.KALPHITE_QUEEN_965, 30, ChronoUnit.SECONDS, ItemID.KALPHITE_PRINCESS); private static final Map bosses = new HashMap<>();