diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/interacthighlight/InteractHighlightOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/interacthighlight/InteractHighlightOverlay.java index 0a14053e36..e401f39d9b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/interacthighlight/InteractHighlightOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/interacthighlight/InteractHighlightOverlay.java @@ -33,6 +33,7 @@ import net.runelite.api.Client; import net.runelite.api.MenuAction; import net.runelite.api.MenuEntry; import net.runelite.api.NPC; +import net.runelite.api.Point; import net.runelite.api.TileObject; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; @@ -78,8 +79,8 @@ class InteractHighlightOverlay extends Overlay return; } - MenuEntry top = menuEntries[menuEntries.length - 1]; - MenuAction menuAction = top.getType(); + MenuEntry entry = client.isMenuOpen() ? hoveredMenuEntry(menuEntries) : menuEntries[menuEntries.length - 1]; + MenuAction menuAction = entry.getType(); switch (menuAction) { @@ -90,10 +91,11 @@ class InteractHighlightOverlay extends Overlay case GAME_OBJECT_THIRD_OPTION: case GAME_OBJECT_FOURTH_OPTION: case GAME_OBJECT_FIFTH_OPTION: + case EXAMINE_OBJECT: { - int x = top.getParam0(); - int y = top.getParam1(); - int id = top.getIdentifier(); + int x = entry.getParam0(); + int y = entry.getParam1(); + int id = entry.getIdentifier(); TileObject tileObject = plugin.findTileObject(x, y, id); if (tileObject != null && config.objectShowHover() && (tileObject != plugin.getInteractedObject() || !config.objectShowInteract())) { @@ -108,8 +110,9 @@ class InteractHighlightOverlay extends Overlay case NPC_THIRD_OPTION: case NPC_FOURTH_OPTION: case NPC_FIFTH_OPTION: + case EXAMINE_NPC: { - int id = top.getIdentifier(); + int id = entry.getIdentifier(); NPC npc = plugin.findNpc(id); if (npc != null && config.npcShowHover() && (npc != plugin.getInteractedTarget() || !config.npcShowInteract())) { @@ -155,4 +158,29 @@ class InteractHighlightOverlay extends Overlay } return end; } + + private MenuEntry hoveredMenuEntry(final MenuEntry[] menuEntries) + { + final int menuX = client.getMenuX(); + final int menuY = client.getMenuY(); + final int menuWidth = client.getMenuWidth(); + final Point mousePosition = client.getMouseCanvasPosition(); + + int dy = mousePosition.getY() - menuY; + dy -= 19; // Height of Choose Option + if (dy < 0) + { + return menuEntries[menuEntries.length - 1]; + } + + int idx = dy / 15; // Height of each menu option + idx = menuEntries.length - 1 - idx; + + if (mousePosition.getX() > menuX && mousePosition.getX() < menuX + menuWidth + && idx >= 0 && idx < menuEntries.length) + { + return menuEntries[idx]; + } + return menuEntries[menuEntries.length - 1]; + } }