diff --git a/runelite-client/src/main/java/net/runelite/client/RuntimeConfig.java b/runelite-client/src/main/java/net/runelite/client/RuntimeConfig.java index fe5f0e733d..6fafe1132a 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuntimeConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/RuntimeConfig.java @@ -43,6 +43,7 @@ public class RuntimeConfig private Map outageLinks; private Set ignoreDeadNpcs; + private Set forceDeadNpcs; public boolean showOutageMessage() { diff --git a/runelite-client/src/main/java/net/runelite/client/game/LootManager.java b/runelite-client/src/main/java/net/runelite/client/game/LootManager.java index 8550aa9320..c10acc52a2 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/LootManager.java +++ b/runelite-client/src/main/java/net/runelite/client/game/LootManager.java @@ -71,6 +71,7 @@ public class LootManager private final EventBus eventBus; private final Client client; + private final NpcUtil npcUtil; private final ListMultimap itemSpawns = ArrayListMultimap.create(); private final Set killPoints = new HashSet<>(); private WorldPoint playerLocationLastTick; @@ -80,10 +81,11 @@ public class LootManager private int delayedLootTickLimit; @Inject - private LootManager(EventBus eventBus, Client client) + private LootManager(EventBus eventBus, Client client, NpcUtil npcUtil) { this.eventBus = eventBus; this.client = client; + this.npcUtil = npcUtil; eventBus.register(this); } @@ -98,7 +100,7 @@ public class LootManager delayedLootTickLimit = 0; } - if (!npc.isDead()) + if (!npcUtil.isDying(npc)) { int id = npc.getId(); switch (id) diff --git a/runelite-client/src/main/java/net/runelite/client/game/NpcUtil.java b/runelite-client/src/main/java/net/runelite/client/game/NpcUtil.java index a147c114e4..f36466a1c6 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/NpcUtil.java +++ b/runelite-client/src/main/java/net/runelite/client/game/NpcUtil.java @@ -85,6 +85,7 @@ public class NpcUtil case NpcID.ANCIENT_ZYGOMITE: case NpcID.ROCKSLUG: case NpcID.ROCKSLUG_422: + case NpcID.GIANT_ROCKSLUG: case NpcID.DESERT_LIZARD: case NpcID.DESERT_LIZARD_460: case NpcID.DESERT_LIZARD_461: @@ -94,6 +95,12 @@ public class NpcUtil case NpcID.GROWTHLING: case NpcID.KALPHITE_QUEEN_963: // KQ's first form sometimes regenerates 1hp after reaching 0hp, thus not dying return false; + // These NPCs transform and have their `isDead()` reset to `false` despite actually being dead in these forms + case NpcID.DRAKE_8613: + case NpcID.GUARDIAN_DRAKE_10401: + case NpcID.ALCHEMICAL_HYDRA_8634: + case NpcID.NEX_11282: + return true; default: if (runtimeConfig != null) { @@ -102,6 +109,12 @@ public class NpcUtil { return false; } + + Set forceDeadNpcs = runtimeConfig.getForceDeadNpcs(); + if (forceDeadNpcs != null && forceDeadNpcs.contains(id)) + { + return true; + } } final NPCComposition npcComposition = npc.getTransformedComposition(); 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 0e6b98c907..cca16cc794 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 @@ -31,6 +31,7 @@ import net.runelite.api.NPC; import net.runelite.api.events.NpcDespawned; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.game.ItemManager; +import net.runelite.client.game.NpcUtil; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; @@ -49,6 +50,9 @@ public class BossTimersPlugin extends Plugin @Inject private ItemManager itemManager; + @Inject + private NpcUtil npcUtil; + @Override protected void shutDown() throws Exception { @@ -60,7 +64,7 @@ public class BossTimersPlugin extends Plugin { NPC npc = npcDespawned.getNpc(); - if (!npc.isDead()) + if (!npcUtil.isDying(npc)) { return; }