From c76c10c20c1a7b6fa6cebe3c82ae07f77df0de33 Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 3 Jun 2018 16:13:18 -0400 Subject: [PATCH] death indicator: use animation to detect death It is possible the player can move after their hp reaches 0, which makes the player death event not always take place at the location of death --- .../main/java/net/runelite/api/AnimationID.java | 1 + .../deathindicator/DeathIndicatorPlugin.java | 14 +++++++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/runelite-api/src/main/java/net/runelite/api/AnimationID.java b/runelite-api/src/main/java/net/runelite/api/AnimationID.java index 8a1a5435bd..9bd54688ac 100644 --- a/runelite-api/src/main/java/net/runelite/api/AnimationID.java +++ b/runelite-api/src/main/java/net/runelite/api/AnimationID.java @@ -45,6 +45,7 @@ public final class AnimationID public static final int WOODCUTTING_3A_AXE = 7264; public static final int CONSUMING = 829; // consuming consumables public static final int FIREMAKING = 733; + public static final int DEATH = 836; public static final int COOKING_FIRE = 897; public static final int COOKING_RANGE = 896; public static final int COOKING_WINE = 7529; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/DeathIndicatorPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/DeathIndicatorPlugin.java index a14dec3129..1944ca3d9b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/DeathIndicatorPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/DeathIndicatorPlugin.java @@ -36,13 +36,15 @@ import java.util.Set; import javax.imageio.ImageIO; import javax.inject.Inject; import lombok.extern.slf4j.Slf4j; +import static net.runelite.api.AnimationID.DEATH; import net.runelite.api.Client; import net.runelite.api.GameState; +import net.runelite.api.Player; import net.runelite.api.coords.WorldPoint; +import net.runelite.api.events.AnimationChanged; import net.runelite.api.events.ConfigChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; -import net.runelite.api.events.LocalPlayerDeath; import net.runelite.client.config.ConfigManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -151,9 +153,13 @@ public class DeathIndicatorPlugin extends Plugin } @Subscribe - public void onLocalPlayerDeath(LocalPlayerDeath event) + public void onAnimationChanged(AnimationChanged animationChanged) { - if (client.isInInstancedRegion()) + Player local = client.getLocalPlayer(); + if (animationChanged.getActor() != local + || local.getAnimation() != DEATH + || client.isInInstancedRegion() + || local.getHealthRatio() != 0) { return; } @@ -304,8 +310,6 @@ public class DeathIndicatorPlugin extends Plugin config.deathLocationPlane(0); config.deathWorld(0); config.timeOfDeath(null); - - hasRespawned = false; } private void resetInfobox()