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 96aaf49328..601728dd0e 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 @@ -76,16 +76,18 @@ 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( + private static final String CHAT_BRACELET_SLAUGHTER = "Your bracelet of slaughter prevents your slayer"; + private static final Pattern CHAT_BRACELET_SLAUGHTER_REGEX = Pattern.compile( + "Your bracelet of slaughter prevents your slayer count decreasing. It has (\\d{1,2}) charge[s]? left."); + private static final String CHAT_BRACELET_EXPEDITIOUS = "Your expeditious bracelet helps you progress your"; + private static final Pattern CHAT_BRACELET_EXPEDITIOUS_REGEX = Pattern.compile( + "Your expeditious bracelet helps you progress your slayer (?:task )?faster. It has (\\d{1,2}) charge[s]? left."); + private static final Pattern CHAT_BRACELET_SLAUGHTER_CHARGE_REGEX = Pattern.compile( "Your bracelet of slaughter has (\\d{1,2}) charge[s]? left."); - private static final Pattern EXPEDITIOUS_CHECK_PATTERN = Pattern.compile( + private static final Pattern CHAT_BRACELET_EXPEDITIOUS_CHARGE_REGEX = 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."; @@ -331,11 +333,7 @@ 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()); @@ -347,6 +345,10 @@ public class ItemChargePlugin extends Plugin Matcher chronicleLastChargeMatcher = CHRONICLE_LAST_CHARGE_PATTERN.matcher(message); Matcher chronicleOutOfChargesMatcher = CHRONICLE_OUT_OF_CHARGES_PATTERN.matcher(message); Matcher ringOfForgingCheckMatcher = RING_OF_FORGING_CHECK_PATTERN.matcher(message); + Matcher slaughterMatcher = CHAT_BRACELET_SLAUGHTER_REGEX.matcher(Text.removeTags(message)); + Matcher expeditiousMatcher = CHAT_BRACELET_EXPEDITIOUS_REGEX.matcher(Text.removeTags(message)); + Matcher slaughterChargeMatcher = CHAT_BRACELET_SLAUGHTER_CHARGE_REGEX.matcher(Text.removeTags(message)); + Matcher expeditiousChargeMatcher = CHAT_BRACELET_EXPEDITIOUS_CHARGE_REGEX.matcher(Text.removeTags(message)); if (event.getType() == ChatMessageType.GAMEMESSAGE || event.getType() == ChatMessageType.SPAM) { @@ -354,30 +356,30 @@ public class ItemChargePlugin extends Plugin { notifier.notify("Your Ring of Recoil has shattered"); } + else if (Text.removeTags(message).startsWith(CHAT_BRACELET_SLAUGHTER)) + { + updateBraceletOfSlaughterCharges(slaughterMatcher.find() ? Integer.parseInt(slaughterMatcher.group(1)) : MAX_SLAUGHTER_CHARGES); + } + else if (Text.removeTags(message).startsWith(CHAT_BRACELET_EXPEDITIOUS)) + { + updateExpeditiousCharges(expeditiousMatcher.find() ? Integer.parseInt(expeditiousMatcher.group(1)) : MAX_EXPEDITIOUS_CHARGES); + } + else if (slaughterChargeMatcher.find()) + { + updateBraceletOfSlaughterCharges(Integer.parseInt(slaughterChargeMatcher.group(1))); + } + else if (expeditiousChargeMatcher.find()) + { + updateExpeditiousCharges(Integer.parseInt(expeditiousChargeMatcher.group(1))); + } 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 (this.dodgyNotification) @@ -955,4 +957,4 @@ public class ItemChargePlugin extends Plugin this.chronicle = config.chronicle(); this.showSackCharges = config.showSackCharges(); } -} \ No newline at end of file +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java index 157891f502..b886982b4a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java @@ -393,8 +393,7 @@ public class SlayerPlugin extends Plugin currentTask.setPaused(true); break; case LOGGED_IN: - if (loginTick && this.amount != -1 - && !this.taskName.isEmpty()) + if (loginTick && this.amount != -1 && !this.taskName.isEmpty() && currentTask.getTaskName() == null) { setTask(this.taskName, this.amount, this.initialAmount, true, this.taskLocation, this.lastCertainAmount, false); } @@ -753,6 +752,7 @@ public class SlayerPlugin extends Plugin } final Task task = Task.getTask(taskName); + int delta = slayerExp - cachedXp; // null tasks are technically valid, it only means they arent explicitly defined in the Task enum // allow them through so that if there is a task capture failure the counter will still work @@ -762,7 +762,7 @@ public class SlayerPlugin extends Plugin // to the expected exp gain for the task. if (taskKillExp == 0 || taskKillExp == slayerExp - cachedXp) { - killedOne(); + killedOne(delta); } else { @@ -780,9 +780,7 @@ public class SlayerPlugin extends Plugin int killCount = estimateKillCount(potentialNPCs, gains); for (int i = 0; i < killCount; i++) { - killedOne(); - int delta = slayerExp - cachedXp; - currentTask.setElapsedXp(currentTask.getElapsedXp() + delta); + killedOne(delta); } } @@ -840,7 +838,7 @@ public class SlayerPlugin extends Plugin } @VisibleForTesting - private void killedOne() + private void killedOne(int delta) { if (currentTask.getAmount() == 0) { @@ -849,6 +847,7 @@ public class SlayerPlugin extends Plugin currentTask.setAmount(currentTask.getAmount() - 1); currentTask.setElapsedKills(currentTask.getElapsedKills() + 1); + currentTask.setElapsedXp(currentTask.getElapsedXp() + delta); if (doubleTroubleExtraKill()) { currentTask.setAmount(currentTask.getAmount() - 1); @@ -1208,31 +1207,13 @@ public class SlayerPlugin extends Plugin client.refreshChat(); } - void pointsLookup(ChatMessage chatMessage, String message) + private void pointsLookup(ChatMessage chatMessage, String message) { if (!this.pointsCommand) { return; } - ChatMessageType type = chatMessage.getType(); - - final String player; - if (type.equals(ChatMessageType.PRIVATECHATOUT)) - { - player = client.getLocalPlayer().getName(); - } - else - { - player = Text.removeTags(chatMessage.getName()) - .replace('\u00A0', ' '); - } - - if (Integer.toString(getPoints()) == null) - { - return; - } - String response = new ChatMessageBuilder() .append(ChatColorType.NORMAL) .append("Slayer Points: ") @@ -1313,7 +1294,7 @@ public class SlayerPlugin extends Plugin return str.substring(0, 1).toUpperCase() + str.substring(1); } - void setPoints(int points) + private void setPoints(int points) { this.points = points; this.cachedPoints = points;