From 7b6074f0f86320efe644db08b40633b362e10bfb Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 9 Nov 2021 16:16:44 -0500 Subject: [PATCH 1/2] opponent info: hide overlay if hp hud is active --- .../main/java/net/runelite/api/Varbits.java | 9 ++++++- .../opponentinfo/OpponentInfoOverlay.java | 26 ++++++++++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/runelite-api/src/main/java/net/runelite/api/Varbits.java b/runelite-api/src/main/java/net/runelite/api/Varbits.java index 7676ea3cd9..084ee4468e 100644 --- a/runelite-api/src/main/java/net/runelite/api/Varbits.java +++ b/runelite-api/src/main/java/net/runelite/api/Varbits.java @@ -624,7 +624,14 @@ public enum Varbits * 2 = popup notification only * 3 = chat and popup */ - COLLECTION_LOG_NOTIFICATION(11959); + COLLECTION_LOG_NOTIFICATION(11959), + + /** + * Show boss health overlay setting + * 0 = on + * 1 = off + */ + BOSS_HEALTH_OVERLAY(12389); /** * The raw varbit ID. diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoOverlay.java index dc9cb8c1c2..e68146e002 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoOverlay.java @@ -33,9 +33,12 @@ import java.awt.Point; import java.awt.Rectangle; import javax.inject.Inject; import net.runelite.api.Actor; +import net.runelite.api.Client; import static net.runelite.api.MenuAction.RUNELITE_OVERLAY_CONFIG; import net.runelite.api.NPC; import net.runelite.api.Player; +import net.runelite.api.VarPlayer; +import net.runelite.api.Varbits; import net.runelite.client.game.HiscoreManager; import net.runelite.client.game.NPCManager; import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE; @@ -54,6 +57,7 @@ class OpponentInfoOverlay extends OverlayPanel private static final Color HP_GREEN = new Color(0, 146, 54, 230); private static final Color HP_RED = new Color(102, 15, 16, 230); + private final Client client; private final OpponentInfoPlugin opponentInfoPlugin; private final OpponentInfoConfig opponentInfoConfig; private final HiscoreManager hiscoreManager; @@ -66,12 +70,14 @@ class OpponentInfoOverlay extends OverlayPanel @Inject private OpponentInfoOverlay( + Client client, OpponentInfoPlugin opponentInfoPlugin, OpponentInfoConfig opponentInfoConfig, HiscoreManager hiscoreManager, NPCManager npcManager) { super(opponentInfoPlugin); + this.client = client; this.opponentInfoPlugin = opponentInfoPlugin; this.opponentInfoConfig = opponentInfoConfig; this.hiscoreManager = hiscoreManager; @@ -121,7 +127,9 @@ class OpponentInfoOverlay extends OverlayPanel } } - if (opponentName == null) + // The in-game hp hud is more accurate than our overlay and duplicates all of the information on it, + // so hide ours if it is visible. + if (opponentName == null || hasHpHud(opponent)) { return null; } @@ -198,4 +206,20 @@ class OpponentInfoOverlay extends OverlayPanel return super.render(graphics); } + + /** + * Check if the hp hud is active for an opponent + * @param opponent + * @return + */ + private boolean hasHpHud(Actor opponent) + { + boolean settingEnabled = client.getVar(Varbits.BOSS_HEALTH_OVERLAY) == 0; + if (settingEnabled && opponent instanceof NPC) + { + int opponentId = client.getVar(VarPlayer.HP_HUD_NPC_ID); + return opponentId != -1 && opponentId == ((NPC) opponent).getId(); + } + return false; + } } From 8ebef03e4ded77a40f4939b6205e58fce95e6a79 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 9 Nov 2021 16:55:54 -0500 Subject: [PATCH 2/2] opponent info: use long npc name if available This name is used on the in game hd hud (eg "Baby Muttadile" instead of "Muttadile") --- .../src/main/java/net/runelite/api/ParamID.java | 4 ++++ .../plugins/opponentinfo/OpponentInfoOverlay.java | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/runelite-api/src/main/java/net/runelite/api/ParamID.java b/runelite-api/src/main/java/net/runelite/api/ParamID.java index 50d2bdf71f..d726067c5a 100644 --- a/runelite-api/src/main/java/net/runelite/api/ParamID.java +++ b/runelite-api/src/main/java/net/runelite/api/ParamID.java @@ -29,6 +29,10 @@ package net.runelite.api; */ public final class ParamID { + /** + * Long name for NPCs used in the HP hud + */ + public static final int NPC_HP_NAME = 510; /** * @see SettingID */ diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoOverlay.java index e68146e002..672ab50e16 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoOverlay.java @@ -25,6 +25,7 @@ */ package net.runelite.client.plugins.opponentinfo; +import com.google.common.base.Strings; import java.awt.Color; import java.awt.Dimension; import java.awt.FontMetrics; @@ -36,6 +37,8 @@ import net.runelite.api.Actor; import net.runelite.api.Client; import static net.runelite.api.MenuAction.RUNELITE_OVERLAY_CONFIG; import net.runelite.api.NPC; +import net.runelite.api.NPCComposition; +import net.runelite.api.ParamID; import net.runelite.api.Player; import net.runelite.api.VarPlayer; import net.runelite.api.Varbits; @@ -111,6 +114,15 @@ class OpponentInfoOverlay extends OverlayPanel lastMaxHealth = null; if (opponent instanceof NPC) { + NPCComposition composition = ((NPC) opponent).getTransformedComposition(); + if (composition != null) + { + String longName = composition.getStringValue(ParamID.NPC_HP_NAME); + if (!Strings.isNullOrEmpty(longName)) + { + opponentName = longName; + } + } lastMaxHealth = npcManager.getHealth(((NPC) opponent).getId()); } else if (opponent instanceof Player)