From e4d15f0790b74df43f583c9686c6bea087dcbbc9 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Sat, 16 Dec 2017 23:51:07 +0100 Subject: [PATCH 1/2] Fix displaying of examine price without GE value Fix displaying of : in item price when GE value is missing and only HA value is present. Signed-off-by: Tomas Slusny --- .../net/runelite/client/plugins/examine/ExaminePlugin.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java index a5074c7fff..d922f2daca 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java @@ -266,13 +266,15 @@ public class ExaminePlugin extends Plugin } message - .append(itemComposition.getName()); + .append(itemComposition.getName()) + .append(ChatColorType.NORMAL) + .append(":"); if (gePrice > 0) { message .append(ChatColorType.NORMAL) - .append(": GE average ") + .append(" GE average ") .append(ChatColorType.HIGHLIGHT) .append(String.format("%,d", gePrice)); } From 08e3282ed745b35e82c4bf1b86d6afcaffcb019a Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Sat, 16 Dec 2017 21:44:12 +0100 Subject: [PATCH 2/2] Add support for examining bank and eq items price Add support for showing bank, bank inventory and equipment item prices when examined. Signed-off-by: Tomas Slusny --- .../java/net/runelite/api/MenuAction.java | 12 +++ .../client/plugins/examine/ExaminePlugin.java | 87 +++++++++++++++---- .../client/plugins/examine/ExamineType.java | 1 + 3 files changed, 84 insertions(+), 16 deletions(-) diff --git a/runelite-api/src/main/java/net/runelite/api/MenuAction.java b/runelite-api/src/main/java/net/runelite/api/MenuAction.java index fbf7349f12..1bedea4cf6 100644 --- a/runelite-api/src/main/java/net/runelite/api/MenuAction.java +++ b/runelite-api/src/main/java/net/runelite/api/MenuAction.java @@ -28,7 +28,19 @@ public enum MenuAction { EXAMINE_OBJECT(1002), EXAMINE_NPC(1003), + /** + * Menu action triggered by examining item on ground + */ + EXAMINE_ITEM_GROUND(1004), + /** + * Menu action triggered by examining item in inventory + */ EXAMINE_ITEM(1005), + /** + * Menu action triggered by either examining item in bank, examining item + * in inventory while having bank open, or examining equipped item + */ + EXAMINE_ITEM_BANK_EQ(1007), /** * Menu action injected by runelite for its menu items */ diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java index d922f2daca..dfabe7392e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java @@ -39,9 +39,9 @@ import net.runelite.api.ChatMessageType; import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.ItemComposition; +import net.runelite.api.NPC; import net.runelite.api.widgets.Widget; -import static net.runelite.api.widgets.WidgetInfo.TO_CHILD; -import static net.runelite.api.widgets.WidgetInfo.TO_GROUP; +import net.runelite.api.widgets.WidgetInfo; import net.runelite.api.widgets.WidgetItem; import net.runelite.client.chat.ChatColor; import net.runelite.client.chat.ChatColorType; @@ -57,6 +57,8 @@ import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.http.api.examine.ExamineClient; import net.runelite.http.api.item.ItemPrice; +import static net.runelite.api.widgets.WidgetInfo.TO_CHILD; +import static net.runelite.api.widgets.WidgetInfo.TO_GROUP; /** * Submits exammine info to the api @@ -143,6 +145,10 @@ public class ExaminePlugin extends Plugin type = ExamineType.ITEM; id = event.getId(); break; + case EXAMINE_ITEM_BANK_EQ: + type = ExamineType.ITEM_BANK_EQ; + id = event.getId(); + break; case EXAMINE_OBJECT: type = ExamineType.OBJECT; id = event.getId() >>> 14; @@ -179,6 +185,9 @@ public class ExaminePlugin extends Plugin case EXAMINE_NPC: type = ExamineType.NPC; break; + case SERVER: + type = ExamineType.ITEM_BANK_EQ; + break; default: return; } @@ -200,21 +209,9 @@ public class ExaminePlugin extends Plugin log.debug("Got examine for {} {}: {}", pendingExamine.getType(), pendingExamine.getId(), event.getMessage()); - if (config.itemPrice() && pendingExamine.getType() == ExamineType.ITEM) + if (config.itemPrice()) { - // get quantity from widget - int widgetId = pendingExamine.getWidgetId(); - Widget widget = client.getWidget(TO_GROUP(widgetId), TO_CHILD(widgetId)); - - WidgetItem widgetItem = widget != null ? widget.getWidgetItem(pendingExamine.getActionParam()) : null; - int quantity = widgetItem != null ? widgetItem.getQuantity() : 1; - - ItemComposition itemComposition = itemManager.getItemComposition(pendingExamine.getId()); - - if (itemComposition != null) - { - executor.submit(() -> getItemPrice(itemComposition, quantity)); - } + findExamineItem(pendingExamine); } CacheKey key = new CacheKey(type, pendingExamine.getId()); @@ -228,6 +225,64 @@ public class ExaminePlugin extends Plugin executor.submit(() -> submitExamine(pendingExamine, event.getMessage())); } + private void findExamineItem(PendingExamine pendingExamine) + { + int quantity = 1; + int itemId = -1; + + // Get widget + int widgetId = pendingExamine.getWidgetId(); + int widgetGroup = TO_GROUP(widgetId); + int widgetChild = TO_CHILD(widgetId); + Widget widget = client.getWidget(widgetGroup, widgetChild); + + if (widget == null) + { + return; + } + + if (pendingExamine.getType() == ExamineType.ITEM) + { + WidgetItem widgetItem = widget.getWidgetItem(pendingExamine.getActionParam()); + quantity = widgetItem != null ? widgetItem.getQuantity() : 1; + itemId = pendingExamine.getId(); + } + else if (pendingExamine.getType() == ExamineType.ITEM_BANK_EQ) + { + if (WidgetInfo.EQUIPMENT.getGroupId() == widgetGroup) + { + Widget widgetItem = widget.getChild(1); + quantity = widgetItem != null ? widgetItem.getItemQuantity() : 1; + itemId = widgetItem.getItemId(); + } + else if (WidgetInfo.BANK_INVENTORY_ITEMS_CONTAINER.getGroupId() == widgetGroup) + { + Widget widgetItem = widget.getChild(pendingExamine.getActionParam()); + quantity = widgetItem != null ? widgetItem.getItemQuantity() : 1; + itemId = widgetItem.getItemId(); + } + else if (WidgetInfo.BANK_ITEM_CONTAINER.getGroupId() == widgetGroup) + { + Widget widgetItem = widget.getDynamicChildren()[pendingExamine.getActionParam()]; + quantity = widgetItem != null ? widgetItem.getItemQuantity() : 1; + itemId = widgetItem.getItemId(); + } + } + + if (itemId == -1) + { + return; + } + + final int itemQuantity = quantity; + final ItemComposition itemComposition = itemManager.getItemComposition(itemId); + + if (itemComposition != null) + { + executor.submit(() -> getItemPrice(itemComposition, itemQuantity)); + } + } + private void getItemPrice(ItemComposition itemComposition, int quantity) { // convert to unnoted id diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExamineType.java b/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExamineType.java index b784deb016..790d0f1d77 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExamineType.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExamineType.java @@ -27,6 +27,7 @@ package net.runelite.client.plugins.examine; public enum ExamineType { ITEM, + ITEM_BANK_EQ, NPC, OBJECT; }