From 070b0ed8932b4e69e85572935db4ef2db26891ef Mon Sep 17 00:00:00 2001 From: Scott Burns Date: Wed, 1 May 2019 20:57:59 +0200 Subject: [PATCH] Item charges update Add back the removed lsayer related items (deleted in the slayer branch) Add - Xeric talisman - Soul bearer - Chronicle --- .../main/java/net/runelite/api/GraphicID.java | 1 + .../net/runelite/api/widgets/WidgetID.java | 9 + .../net/runelite/api/widgets/WidgetInfo.java | 5 + .../plugins/itemcharges/ItemChargeConfig.java | 158 +++++++++- .../itemcharges/ItemChargeOverlay.java | 49 +++- .../plugins/itemcharges/ItemChargePlugin.java | 277 +++++++++++++++++- .../plugins/itemcharges/ItemChargeType.java | 4 +- .../plugins/itemcharges/ItemWithCharge.java | 8 +- .../plugins/itemcharges/ItemWithSlot.java | 2 + 9 files changed, 487 insertions(+), 26 deletions(-) diff --git a/runelite-api/src/main/java/net/runelite/api/GraphicID.java b/runelite-api/src/main/java/net/runelite/api/GraphicID.java index b1d2c3d00f..7f2b0e267d 100644 --- a/runelite-api/src/main/java/net/runelite/api/GraphicID.java +++ b/runelite-api/src/main/java/net/runelite/api/GraphicID.java @@ -48,4 +48,5 @@ public class GraphicID public static final int NPC_CONTACT = 728; public static final int POT_SHARE = 733; public static final int BAKE_PIE = 746; + public static final int XERIC_TELEPORT = 1612; } diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java index b1bfae34b2..3f43b97ee8 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java @@ -130,6 +130,7 @@ public class WidgetID public static final int FULLSCREEN_MAP_GROUP_ID = 165; public static final int QUESTLIST_GROUP_ID = 399; public static final int SKILLS_GROUP_ID = 320; + public static final int DIALOG_SPRITE2_ID = 11; public static final int EQUIPMENT_PAGE_GROUP_ID = 84; public static final int QUESTTAB_GROUP_ID = 629; public static final int MUSIC_GROUP_ID = 239; @@ -963,6 +964,14 @@ public class WidgetID static final int MINIQUEST_CONTAINER = 8; } + static class DialogSprite2 + { + static final int SPRITE1 = 1; + static final int TEXT = 2; + static final int SPRITE2 = 3; + static final int CONTINUE = 4; + } + static class QuestTab { static final int QUEST_TAB = 3; diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java index 09bdff4e02..895de6f1de 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java @@ -328,6 +328,11 @@ public enum WidgetInfo DIALOG_SPRITE(WidgetID.DIALOG_SPRITE_GROUP_ID, 0), DIALOG_SPRITE_SPRITE(WidgetID.DIALOG_SPRITE_GROUP_ID, WidgetID.DialogSprite.SPRITE), DIALOG_SPRITE_TEXT(WidgetID.DIALOG_SPRITE_GROUP_ID, WidgetID.DialogSprite.TEXT), + DIALOG2_SPRITE(WidgetID.DIALOG_SPRITE2_ID, 0), + DIALOG2_SPRITE_SPRITE1(WidgetID.DIALOG_SPRITE2_ID, WidgetID.DialogSprite2.SPRITE1), + DIALOG2_SPRITE_SPRITE2(WidgetID.DIALOG_SPRITE2_ID, WidgetID.DialogSprite2.SPRITE2), + DIALOG2_SPRITE_TEXT(WidgetID.DIALOG_SPRITE2_ID, WidgetID.DialogSprite2.TEXT), + DIALOG2_SPRITE_CONTINUE(WidgetID.DIALOG_SPRITE2_ID, WidgetID.DialogSprite2.CONTINUE), DIALOG_NPC(WidgetID.DIALOG_NPC_GROUP_ID, 0), DIALOG_NPC_NAME(WidgetID.DIALOG_NPC_GROUP_ID, WidgetID.DialogNPC.NAME), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeConfig.java index 275aa31d24..df98a3e738 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeConfig.java @@ -172,10 +172,10 @@ public interface ItemChargeConfig extends Config } @ConfigItem( - keyName = "showBellowCharges", - name = "Show Bellow Charges", - description = "Configures if ogre bellow item charge is shown", - position = 12 + keyName = "showBellowCharges", + name = "Show Bellow Charges", + description = "Configures if ogre bellow item charge is shown", + position = 12 ) default boolean showBellowCharges() { @@ -183,10 +183,10 @@ public interface ItemChargeConfig extends Config } @ConfigItem( - keyName = "showAbyssalBraceletCharges", - name = "Show Abyssal Bracelet Charges", - description = "Configures if abyssal bracelet item charge is shown", - position = 13 + keyName = "showAbyssalBraceletCharges", + name = "Show Abyssal Bracelet Charges", + description = "Configures if abyssal bracelet item charge is shown", + position = 13 ) default boolean showAbyssalBraceletCharges() { @@ -204,11 +204,58 @@ public interface ItemChargeConfig extends Config return false; } + @ConfigItem( + keyName = "showSlayerBracelets", + name = "Show Slayer Bracelets Charges", + description = "Configures if slayer bracelets' item charges are shown", + position = 15 + ) + default boolean showSlayerBracelets() + { + return true; + } + + @ConfigItem( + keyName = "expeditious", + name = "", + description = "", + hidden = true + ) + default int expeditious() + { + return -1; + } + + @ConfigItem( + keyName = "expeditious", + name = "", + description = "" + ) + void expeditious(int expeditious); + + @ConfigItem( + keyName = "slaughter", + name = "", + description = "", + hidden = true + ) + default int slaughter() + { + return -1; + } + + @ConfigItem( + keyName = "slaughter", + name = "", + description = "" + ) + void slaughter(int slaughter); + @ConfigItem( keyName = "showBindingNecklaceCharges", name = "Show Binding Necklace Charges", description = "Configures if binding necklace item charge is shown", - position = 15 + position = 16 ) default boolean showBindingNecklaceCharges() { @@ -237,21 +284,108 @@ public interface ItemChargeConfig extends Config keyName = "bindingNotification", name = "Binding Necklace Notification", description = "Configures if the binding necklace breaking notification is shown", - position = 16 + position = 17 ) default boolean bindingNotification() { return true; } + @ConfigItem( + keyName = "showXericTalismanCharges", + name = "Show Xeric's Talisman Charges", + description = "Configures if Xeric's Talisman item charge is shown", + position = 18 + ) + default boolean showXericTalismanCharges() + { + return false; + } + + @ConfigItem( + keyName = "xericTalisman", + name = "", + description = "", + hidden = true + ) + default int xericTalisman() + { + return -1; + } + + @ConfigItem( + keyName = "xericTalisman", + name = "", + description = "" + ) + void xericTalisman(int xericTalisman); + + @ConfigItem( + keyName = "showSoulBearerCharges", + name = "Show Soul Bearer Charges", + description = "Configures if Soul Bearer item charge is shown", + position = 19 + ) + default boolean showSoulBearerCharges() + { + return false; + } + + @ConfigItem( + keyName = "soulBearer", + name = "", + description = "", + hidden = true + ) + default int soulBearer() + { + return -1; + } + + @ConfigItem( + keyName = "soulBearer", + name = "", + description = "" + ) + void soulBearer(int soulBearer); + + @ConfigItem( + keyName = "showChronicleCharges", + name = "Show Chronicle Charges", + description = "Configures if Chronicle item charge is shown", + position = 20 + ) + default boolean showChronicleCharges() + { + return false; + } + + @ConfigItem( + keyName = "chronicle", + name = "", + description = "", + hidden = true + ) + default int chronicle() + { + return -1; + } + + @ConfigItem( + keyName = "chronicle", + name = "", + description = "" + ) + void chronicle(int chronicle); + @ConfigItem( keyName = "showInfoboxes", name = "Show Infoboxes", description = "Configures whether to show an infobox equipped charge items", - position = 17 + position = 21 ) default boolean showInfoboxes() { return false; } -} +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeOverlay.java index 5082ab2ccd..5cdb7ae66e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeOverlay.java @@ -75,6 +75,24 @@ class ItemChargeOverlay extends WidgetItemOverlay charges = config.dodgyNecklace(); } + else if (itemId == ItemID.BRACELET_OF_SLAUGHTER) + { + if (!config.showSlayerBracelets()) + { + return; + } + + charges = config.slaughter(); + } + else if (itemId == ItemID.EXPEDITIOUS_BRACELET) + { + if (!config.showSlayerBracelets()) + { + return; + } + + charges = config.expeditious(); + } else if (itemId == ItemID.BINDING_NECKLACE) { if (!config.showBindingNecklaceCharges()) @@ -84,7 +102,32 @@ class ItemChargeOverlay extends WidgetItemOverlay charges = config.bindingNecklace(); } + else if (itemId == ItemID.XERICS_TALISMAN) + { + if (!config.showXericTalismanCharges()) + { + return; + } + charges = config.xericTalisman(); + } + else if (itemId == ItemID.SOUL_BEARER) + { + if (!config.showSoulBearerCharges()) + { + return; + } + charges = config.soulBearer(); + } + else if (itemId == ItemID.CHRONICLE) + { + if (!config.showChronicleCharges()) + { + return; + } + charges = config.chronicle(); + } else + { ItemWithCharge chargeItem = ItemWithCharge.findItem(itemId); if (chargeItem == null) @@ -109,7 +152,9 @@ class ItemChargeOverlay extends WidgetItemOverlay final Rectangle bounds = itemWidget.getCanvasBounds(); final TextComponent textComponent = new TextComponent(); - textComponent.setPosition(new Point(bounds.x, bounds.y + 16)); + textComponent.setPosition(new + + Point(bounds.x, bounds.y + 16)); textComponent.setText(charges < 0 ? "?" : String.valueOf(charges)); textComponent.setColor(itemChargePlugin.getColor(charges)); textComponent.render(graphics); @@ -121,4 +166,4 @@ class ItemChargeOverlay extends WidgetItemOverlay || config.showImpCharges() || config.showWateringCanCharges() || config.showWaterskinCharges() || config.showBellowCharges() || config.showAbyssalBraceletCharges(); } -} +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java index 3a6c44a0fb..2e0e61ae8e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java @@ -34,12 +34,15 @@ import javax.inject.Inject; import net.runelite.api.ChatMessageType; import net.runelite.api.Client; import net.runelite.api.EquipmentInventorySlot; +import net.runelite.api.GraphicID; import net.runelite.api.InventoryID; import net.runelite.api.Item; import net.runelite.api.ItemContainer; import net.runelite.api.ItemID; import net.runelite.api.events.ChatMessage; import net.runelite.api.events.ConfigChanged; +import net.runelite.api.events.GameTick; +import net.runelite.api.events.GraphicChanged; import net.runelite.api.events.ItemContainerChanged; import net.runelite.api.events.ScriptCallbackEvent; import net.runelite.api.widgets.Widget; @@ -52,6 +55,7 @@ import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; +import net.runelite.client.util.Text; @PluginDescriptor( name = "Item Charges", @@ -62,18 +66,56 @@ public class ItemChargePlugin extends Plugin { private static final Pattern DODGY_CHECK_PATTERN = Pattern.compile( "Your dodgy necklace has (\\d+) charges? left\\."); + private static final Pattern SLAUGHTER_CHECK_PATTERN = Pattern.compile( + "Your bracelet of slaughter has (\\d{1,2}) charge[s]? left."); + private static final Pattern EXPEDITIOUS_CHECK_PATTERN = Pattern.compile( + "Your expeditious bracelet has (\\d{1,2}) charge[s]? left."); private static final Pattern DODGY_PROTECT_PATTERN = Pattern.compile( "Your dodgy necklace protects you\\..*It has (\\d+) charges? left\\."); + private static final Pattern SLAUGHTER_ACTIVATE_PATTERN = Pattern.compile( + "Your bracelet of slaughter prevents your slayer count decreasing. It has (\\d{1,2}) charge[s]? left."); + private static final Pattern EXPEDITIOUS_ACTIVATE_PATTERN = Pattern.compile( + "Your expeditious bracelet helps you progress your slayer (?:task )?faster. It has (\\d{1,2}) charge[s]? left."); private static final Pattern DODGY_BREAK_PATTERN = Pattern.compile( "Your dodgy necklace protects you\\..*It then crumbles to dust\\."); private static final String RING_OF_RECOIL_BREAK_MESSAGE = "Your Ring of Recoil has shattered."; - private static final Pattern BINDING_CHECK_PATTERN = Pattern.compile( - "You have ([0-9]+|one) charges? left before your Binding necklace disintegrates\\."); + private static Pattern BINDING_CHECK_PATTERN = Pattern.compile( + "You have ([0-9]+|one) charges? left before your Binding necklace disintegrates."); private static final Pattern BINDING_USED_PATTERN = Pattern.compile( "You bind the temple's power into (mud|lava|steam|dust|smoke|mist) runes\\."); private static final String BINDING_BREAK_TEXT = "Your Binding necklace has disintegrated."; + private static final Pattern XERIC_CHECK_CHARGE_PATTERN = Pattern.compile( + "talisman has (\\d+|one) charges?"); + private static final Pattern XERIC_RECHARGEWIDGET_PATTERN = Pattern.compile( + "Your talisman now has (\\d+|one) charges?\\."); + private static final Pattern XERIC_OUT_OF_CHARGES = Pattern.compile( + "Your talisman has run out of charges"); + private static final Pattern XERIC_UNCHARGE_PATTERN = Pattern.compile( + "lizard fangs? from your talisman\\."); + private static final Pattern SOULBEARER_RECHARGE_PATTERN = Pattern.compile( + "You add (\\d+|a) charges? to your soul bearer.It now has (\\d+) charges\\."); + private static final Pattern SOULBEARER_RECHARGE_PATTERN2 = Pattern.compile( + "Your soul bearer now has one charge\\."); + private static final Pattern SOULBEARER_CHECK_CHARGE_PATTERN = Pattern.compile( + "soul bearer has (\\d+|one) charges?\\."); + private static final Pattern SOULBEARER_UNCHARGE_PATTERN = Pattern.compile( + "You remove the runes from the soul bearer\\."); + private static final Pattern SOULBEARER_BANKHEADS_PATTERN = Pattern.compile( + "Your soul bearer carries the ensouled heads? to your ?bank\\. It has (\\d+|one) charges? left\\."); + private static final Pattern SOULBEARER_OUT_OF_CHARGES = Pattern.compile( + "Your soul bearer carries the ensouled heads? to (.+)\\. It has run out of charges\\."); + private static final Pattern CHRONICLE_CHECK_CHARGE_PATTERN = Pattern.compile( + "Your book has (\\d+) charges left\\."); + private static final Pattern CHRONICLE_ADD_CHARGE_PATTERN = Pattern.compile( + "You add (\\d+|a single) charges? to your book. It now has (\\d+) charges\\."); + private static final Pattern CHRONICLE_LAST_CHARGE_PATTERN = Pattern.compile( + "You have one charge left in your book\\."); + private static final Pattern CHRONICLE_OUT_OF_CHARGES_PATTERN = Pattern.compile( + "Your book has run out of charges\\."); private static final int MAX_DODGY_CHARGES = 10; + private static final int MAX_SLAUGHTER_CHARGES = 30; + private static final int MAX_EXPEDITIOUS_CHARGES = 30; private static final int MAX_BINDING_CHARGES = 16; @Inject @@ -149,6 +191,12 @@ public class ItemChargePlugin extends Plugin removeInfobox(ItemWithSlot.DODGY_NECKLACE); } + if (!config.showSlayerBracelets()) + { + removeInfobox(ItemWithSlot.BRACELET_OF_SLAUGHTER); + removeInfobox(ItemWithSlot.EXPEDITIOUS_BRACELET); + } + if (!config.showBindingNecklaceCharges()) { removeInfobox(ItemWithSlot.BINDING_NECKLACE); @@ -160,10 +208,21 @@ public class ItemChargePlugin extends Plugin { String message = event.getMessage(); Matcher dodgyCheckMatcher = DODGY_CHECK_PATTERN.matcher(message); + Matcher slaughterCheckMatcher = SLAUGHTER_CHECK_PATTERN.matcher(message); + Matcher expeditiousCheckMatcher = EXPEDITIOUS_CHECK_PATTERN.matcher(message); Matcher dodgyProtectMatcher = DODGY_PROTECT_PATTERN.matcher(message); + Matcher slaughterActivateMatcher = SLAUGHTER_ACTIVATE_PATTERN.matcher(message); + Matcher expeditiousActivateMatcher = EXPEDITIOUS_ACTIVATE_PATTERN.matcher(message); Matcher dodgyBreakMatcher = DODGY_BREAK_PATTERN.matcher(message); Matcher bindingNecklaceCheckMatcher = BINDING_CHECK_PATTERN.matcher(event.getMessage()); Matcher bindingNecklaceUsedMatcher = BINDING_USED_PATTERN.matcher(event.getMessage()); + Matcher xericRechargeMatcher = XERIC_CHECK_CHARGE_PATTERN.matcher(message); + Matcher xericOutOfChargesMatcher = XERIC_OUT_OF_CHARGES.matcher(message); + Matcher soulbearerCheckMatcher = SOULBEARER_CHECK_CHARGE_PATTERN.matcher(message); + Matcher chronicleCheckMatcher = CHRONICLE_CHECK_CHARGE_PATTERN.matcher(message); + Matcher chronicleRechargeMatcher = CHRONICLE_ADD_CHARGE_PATTERN.matcher(message); + Matcher chronicleLastChargeMatcher = CHRONICLE_LAST_CHARGE_PATTERN.matcher(message); + Matcher chronicleOutOfChargesMatcher = CHRONICLE_OUT_OF_CHARGES_PATTERN.matcher(message); if (event.getType() == ChatMessageType.GAMEMESSAGE || event.getType() == ChatMessageType.SPAM) { @@ -171,6 +230,30 @@ public class ItemChargePlugin extends Plugin { notifier.notify("Your Ring of Recoil has shattered"); } + else if (dodgyCheckMatcher.find()) + { + updateDodgyNecklaceCharges(Integer.parseInt(dodgyCheckMatcher.group(1))); + } + else if (slaughterCheckMatcher.find()) + { + updateBraceletOfSlaughterCharges(Integer.parseInt(slaughterCheckMatcher.group(1))); + } + else if (expeditiousCheckMatcher.find()) + { + updateExpeditiousCharges(Integer.parseInt(expeditiousCheckMatcher.group(1))); + } + else if (dodgyProtectMatcher.find()) + { + updateDodgyNecklaceCharges(Integer.parseInt(dodgyProtectMatcher.group(1))); + } + else if (slaughterActivateMatcher.find()) + { + updateBraceletOfSlaughterCharges(Integer.parseInt(slaughterActivateMatcher.group(1))); + } + else if (expeditiousActivateMatcher.find()) + { + updateExpeditiousCharges(Integer.parseInt(expeditiousActivateMatcher.group(1))); + } else if (dodgyBreakMatcher.find()) { if (config.dodgyNotification()) @@ -180,14 +263,6 @@ public class ItemChargePlugin extends Plugin updateDodgyNecklaceCharges(MAX_DODGY_CHARGES); } - else if (dodgyCheckMatcher.find()) - { - updateDodgyNecklaceCharges(Integer.parseInt(dodgyCheckMatcher.group(1))); - } - else if (dodgyProtectMatcher.find()) - { - updateDodgyNecklaceCharges(Integer.parseInt(dodgyProtectMatcher.group(1))); - } else if (message.contains(BINDING_BREAK_TEXT)) { if (config.bindingNotification()) @@ -214,6 +289,41 @@ public class ItemChargePlugin extends Plugin updateBindingNecklaceCharges(charges); } + else if (xericRechargeMatcher.find()) + { + final int xericCharges = xericRechargeMatcher.group(1).equals("one") ? 1 : (Integer.parseInt(xericRechargeMatcher.group(1))); + updateXericCharges(xericCharges); + } + else if (xericOutOfChargesMatcher.find()) + { + final int xericCharges = 0; + updateXericCharges(xericCharges); + } + else if (soulbearerCheckMatcher.find()) + { + final int soulbearerCharges = soulbearerCheckMatcher.group(1).equals("one") ? 1 : (Integer.parseInt(soulbearerCheckMatcher.group(1))); + updateSoulBearerCharges(soulbearerCharges); + } + else if (chronicleCheckMatcher.find()) + { + final int chronicleCharges = chronicleCheckMatcher.group(1).equals("one") ? 1 : (Integer.parseInt(chronicleCheckMatcher.group(1))); + updateChronicleCharges(chronicleCharges); + } + else if (chronicleRechargeMatcher.find()) + { + final int chronicleCharges = chronicleRechargeMatcher.group(2).equals("one") ? 1 : (Integer.parseInt(chronicleRechargeMatcher.group(2))); + updateChronicleCharges(chronicleCharges); + } + else if (chronicleLastChargeMatcher.find()) + { + final int chronicleCharges = 1; + updateChronicleCharges(chronicleCharges); + } + else if (chronicleOutOfChargesMatcher.find()) + { + final int chronicleCharges = 0; + updateChronicleCharges(chronicleCharges); + } } } @@ -242,12 +352,102 @@ public class ItemChargePlugin extends Plugin updateJewelleryInfobox(ItemWithSlot.ABYSSAL_BRACELET, items); } + if (config.showSlayerBracelets()) + { + updateJewelleryInfobox(ItemWithSlot.BRACELET_OF_SLAUGHTER, items); + updateJewelleryInfobox(ItemWithSlot.EXPEDITIOUS_BRACELET, items); + } + if (config.showBindingNecklaceCharges()) { updateJewelleryInfobox(ItemWithSlot.BINDING_NECKLACE, items); } } + @Subscribe + public void onGameTick(GameTick event) + { + Widget braceletBreakWidget = client.getWidget(WidgetInfo.DIALOG_SPRITE_TEXT); + + if (braceletBreakWidget != null) + { + String braceletText = Text.removeTags(braceletBreakWidget.getText()); //remove color and linebreaks + if (braceletText.contains("bracelet of slaughter")) + { + config.slaughter(MAX_SLAUGHTER_CHARGES); + } + else if (braceletText.contains("expeditious bracelet")) + { + config.expeditious(MAX_EXPEDITIOUS_CHARGES); + } + } + + Widget dialog1 = client.getWidget(WidgetInfo.DIALOG_SPRITE_TEXT); + Widget dialog2 = client.getWidget(WidgetInfo.DIALOG2_SPRITE_TEXT); + + if (dialog1 != null) + { + String widgetText = Text.removeTags(dialog1.getText()); + Matcher xericRechargeMatcher = XERIC_RECHARGEWIDGET_PATTERN.matcher(widgetText); + Matcher soulbearerRechargeMatcher = SOULBEARER_RECHARGE_PATTERN.matcher(widgetText); + Matcher soulbearerRecharge2Matcher = SOULBEARER_RECHARGE_PATTERN2.matcher(widgetText); + + if (xericRechargeMatcher.find()) + { + final int xericCharges = xericRechargeMatcher.group(1).equals("one") ? 1 : (Integer.parseInt(xericRechargeMatcher.group(1))); + updateXericCharges(xericCharges); + } + else if (soulbearerRechargeMatcher.find()) + { + final int soulbearerCharges = soulbearerRechargeMatcher.group(2).equals("one") ? 1 : (Integer.parseInt(soulbearerRechargeMatcher.group(2))); + updateSoulBearerCharges(soulbearerCharges); + } + else if (soulbearerRecharge2Matcher.find()) + { + final int soulbearerCharges = 1; + updateSoulBearerCharges(soulbearerCharges); + } + } + + if (dialog2 != null) + { + String widgetText = Text.removeTags(dialog2.getText()); + Matcher xericUnchargeMatcher = XERIC_UNCHARGE_PATTERN.matcher(widgetText); + Matcher soulbearerUnchargeMatcher = SOULBEARER_UNCHARGE_PATTERN.matcher(widgetText); + Matcher soulbearerBankHeadsMatcher = SOULBEARER_BANKHEADS_PATTERN.matcher(widgetText); + Matcher soulbearerOutOfCharges = SOULBEARER_OUT_OF_CHARGES.matcher(widgetText); + + if (xericUnchargeMatcher.find()) + { + final int xericCharges = 0; + updateXericCharges(xericCharges); + } + else if (soulbearerUnchargeMatcher.find() || soulbearerOutOfCharges.find()) + { + final int soulbearerCharges = 0; + updateSoulBearerCharges(soulbearerCharges); + } + else if (soulbearerBankHeadsMatcher.find()) + { + final int soulbearerCharges = soulbearerBankHeadsMatcher.group(1).equals("one") ? 1 : (Integer.parseInt(soulbearerBankHeadsMatcher.group(1))); + updateSoulBearerCharges(soulbearerCharges); + } + } + } + + @Subscribe + public void onGraphicChanged(GraphicChanged event) + { + if (event.getActor() == client.getLocalPlayer()) + { + if (client.getLocalPlayer().getGraphic() == GraphicID.XERIC_TELEPORT) + { + final int xericCharges = Math.max(config.xericTalisman() - 1, 0); + updateXericCharges(xericCharges); + } + } + } + @Subscribe private void onScriptCallbackEvent(ScriptCallbackEvent event) { @@ -280,6 +480,40 @@ public class ItemChargePlugin extends Plugin } } + private void updateBraceletOfSlaughterCharges(final int value) + { + config.slaughter(value); + + if (config.showInfoboxes() && config.showSlayerBracelets()) + { + final ItemContainer itemContainer = client.getItemContainer(InventoryID.EQUIPMENT); + + if (itemContainer == null) + { + return; + } + + updateJewelleryInfobox(ItemWithSlot.BRACELET_OF_SLAUGHTER, itemContainer.getItems()); + } + } + + private void updateExpeditiousCharges(final int value) + { + config.expeditious(value); + + if (config.showInfoboxes() && config.showSlayerBracelets()) + { + final ItemContainer itemContainer = client.getItemContainer(InventoryID.EQUIPMENT); + + if (itemContainer == null) + { + return; + } + + updateJewelleryInfobox(ItemWithSlot.EXPEDITIOUS_BRACELET, itemContainer.getItems()); + } + } + private void updateBindingNecklaceCharges(final int value) { config.bindingNecklace(value); @@ -297,6 +531,21 @@ public class ItemChargePlugin extends Plugin } } + private void updateXericCharges(int xericCharges) + { + config.xericTalisman(xericCharges); + } + + private void updateSoulBearerCharges(int soulBearerCharges) + { + config.soulBearer(soulBearerCharges); + } + + private void updateChronicleCharges(int chronicleCharges) + { + config.chronicle(chronicleCharges); + } + private void checkDestroyWidget() { final int currentTick = client.getTickCount(); @@ -355,6 +604,14 @@ public class ItemChargePlugin extends Plugin { charges = config.dodgyNecklace(); } + else if (id == ItemID.BRACELET_OF_SLAUGHTER && type == ItemWithSlot.BRACELET_OF_SLAUGHTER) + { + charges = config.slaughter(); + } + else if (id == ItemID.EXPEDITIOUS_BRACELET && type == ItemWithSlot.EXPEDITIOUS_BRACELET) + { + charges = config.expeditious(); + } else if (id == ItemID.BINDING_NECKLACE && type == ItemWithSlot.BINDING_NECKLACE) { charges = config.bindingNecklace(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeType.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeType.java index d941bf0962..8f40b8887d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeType.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeType.java @@ -34,5 +34,7 @@ enum ItemChargeType WATERCAN, WATERSKIN, DODGY_NECKLACE, + BRACELET_OF_SLAUGHTER, + EXPEDITIOUS_BRACELET, BINDING_NECKLACE -} +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithCharge.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithCharge.java index 10f905aff4..bc57642f0a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithCharge.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithCharge.java @@ -30,7 +30,13 @@ import javax.annotation.Nullable; import lombok.AllArgsConstructor; import lombok.Getter; import static net.runelite.api.ItemID.*; -import static net.runelite.client.plugins.itemcharges.ItemChargeType.*; +import static net.runelite.client.plugins.itemcharges.ItemChargeType.ABYSSAL_BRACELET; +import static net.runelite.client.plugins.itemcharges.ItemChargeType.BELLOWS; +import static net.runelite.client.plugins.itemcharges.ItemChargeType.FUNGICIDE_SPRAY; +import static net.runelite.client.plugins.itemcharges.ItemChargeType.IMPBOX; +import static net.runelite.client.plugins.itemcharges.ItemChargeType.TELEPORT; +import static net.runelite.client.plugins.itemcharges.ItemChargeType.WATERCAN; +import static net.runelite.client.plugins.itemcharges.ItemChargeType.WATERSKIN; @AllArgsConstructor @Getter diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithSlot.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithSlot.java index 4ec4aa36be..afe0276a13 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithSlot.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithSlot.java @@ -33,6 +33,8 @@ import net.runelite.api.EquipmentInventorySlot; enum ItemWithSlot { ABYSSAL_BRACELET(ItemChargeType.ABYSSAL_BRACELET, EquipmentInventorySlot.GLOVES), + BRACELET_OF_SLAUGHTER(ItemChargeType.BRACELET_OF_SLAUGHTER, EquipmentInventorySlot.GLOVES), + EXPEDITIOUS_BRACELET(ItemChargeType.EXPEDITIOUS_BRACELET, EquipmentInventorySlot.GLOVES), DODGY_NECKLACE(ItemChargeType.DODGY_NECKLACE, EquipmentInventorySlot.AMULET), BINDING_NECKLACE(ItemChargeType.BINDING_NECKLACE, EquipmentInventorySlot.AMULET), TELEPORT(ItemChargeType.TELEPORT, EquipmentInventorySlot.WEAPON, EquipmentInventorySlot.AMULET, EquipmentInventorySlot.GLOVES, EquipmentInventorySlot.RING);