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 567ef04041..384eaa41b7 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
@@ -95,6 +95,7 @@ public class SlayerPlugin extends Plugin
//NPC messages
private static final Pattern NPC_ASSIGN_MESSAGE = Pattern.compile(".*Your new task is to kill\\s*(\\d*) (.*)\\.");
+ private static final Pattern NPC_ASSIGN_BOSS_MESSAGE = Pattern.compile("^Excellent. You're now assigned to kill (.*) (\\d+) times.*Your reward point tally is (.*)\\.$");
private static final Pattern NPC_CURRENT_MESSAGE = Pattern.compile("You're still hunting (.*); you have (\\d*) to go\\..*");
//Reward UI
@@ -262,19 +263,23 @@ public class SlayerPlugin extends Plugin
if (NPCDialog != null)
{
String NPCText = Text.removeTags(NPCDialog.getText()); //remove color and linebreaks
- Matcher mAssign = NPC_ASSIGN_MESSAGE.matcher(NPCText); //number, name
- Matcher mCurrent = NPC_CURRENT_MESSAGE.matcher(NPCText); //name, number
- boolean found1 = mAssign.find();
- boolean found2 = mCurrent.find();
- if (!found1 && !found2)
+ final Matcher mAssign = NPC_ASSIGN_MESSAGE.matcher(NPCText); //number, name
+ final Matcher mAssignBoss = NPC_ASSIGN_BOSS_MESSAGE.matcher(NPCText); // name, number, points
+ final Matcher mCurrent = NPC_CURRENT_MESSAGE.matcher(NPCText); //name, number
+
+ if (mAssign.find())
{
- return;
+ setTask(mAssign.group(2), Integer.parseInt(mAssign.group(1)));
+ }
+ else if (mAssignBoss.find())
+ {
+ setTask(mAssignBoss.group(1), Integer.parseInt(mAssignBoss.group(2)));
+ points = Integer.parseInt(mAssignBoss.group(3).replaceAll(",", ""));
+ }
+ else if (mCurrent.find())
+ {
+ setTask(mCurrent.group(1), Integer.parseInt(mCurrent.group(2)));
}
-
- String taskName = found1 ? mAssign.group(2) : mCurrent.group(1);
- int amount = Integer.parseInt(found1 ? mAssign.group(1) : mCurrent.group(2));
-
- setTask(taskName, amount);
}
Widget braceletBreakWidget = client.getWidget(WidgetInfo.DIALOG_SPRITE_TEXT);
diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java
index 3d83650994..bca703dffd 100644
--- a/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java
+++ b/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java
@@ -56,6 +56,8 @@ public class SlayerPluginTest
private static final String TASK_NEW = "Your new task is to kill 231 Suqahs.";
private static final String TASK_NEW_NPC_CONTACT = "Excellent, you're doing great. Your new task is to kill
211 Suqahs.";
+ private static final String TASK_BOSS_NEW = "Excellent. You're now assigned to kill Vet'ion 3 times.
Your reward point tally is 914.";
+
private static final String TASK_EXISTING = "You're still hunting suqahs; you have 222 to go. Come
back when you've finished your task.";
private static final String REWARD_POINTS = "Reward points: 17,566";
@@ -149,6 +151,19 @@ public class SlayerPluginTest
assertEquals(211, slayerPlugin.getAmount());
}
+ @Test
+ public void testBossTask()
+ {
+ Widget npcDialog = mock(Widget.class);
+ when(npcDialog.getText()).thenReturn(TASK_BOSS_NEW);
+ when(client.getWidget(WidgetInfo.DIALOG_NPC_TEXT)).thenReturn(npcDialog);
+ slayerPlugin.onGameTick(new GameTick());
+
+ assertEquals("Vet'ion", slayerPlugin.getTaskName());
+ assertEquals(3, slayerPlugin.getAmount());
+ assertEquals(914, slayerPlugin.getPoints());
+ }
+
@Test
public void testExistingTask()
{