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 7215821734..8bb9d42b3a 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 @@ -537,12 +537,9 @@ public class SlayerPlugin extends Plugin final Task task = Task.getTask(taskName); - if (task == null) - { - return; - } - - final int taskKillExp = task.getExpectedKillExp(); + // 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 + final int taskKillExp = task != null ? task.getExpectedKillExp() : 0; // Only count exp gain as a kill if the task either has no expected exp for a kill, or if the exp gain is equal // to the expected exp gain for the task. 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 f2007e7393..fb4cdabe81 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 @@ -420,6 +420,52 @@ public class SlayerPluginTest verifyNoMoreInteractions(notifier); } + @Test + public void testCorrectlyCapturedTaskKill() + { + final Player player = mock(Player.class); + when(player.getLocalLocation()).thenReturn(new LocalPoint(0, 0)); + when(client.getLocalPlayer()).thenReturn(player); + + final ExperienceChanged experienceChanged = new ExperienceChanged(); + experienceChanged.setSkill(Skill.SLAYER); + + when(client.getSkillExperience(Skill.SLAYER)).thenReturn(100); + slayerPlugin.onExperienceChanged(experienceChanged); + + slayerPlugin.setTaskName("Dagannoth"); + slayerPlugin.setAmount(143); + + when(client.getSkillExperience(Skill.SLAYER)).thenReturn(110); + slayerPlugin.onExperienceChanged(experienceChanged); + + assertEquals(142, slayerPlugin.getAmount()); + } + + @Test + public void testIncorrectlyCapturedTaskKill() + { + final Player player = mock(Player.class); + when(player.getLocalLocation()).thenReturn(new LocalPoint(0, 0)); + when(client.getLocalPlayer()).thenReturn(player); + + final ExperienceChanged experienceChanged = new ExperienceChanged(); + experienceChanged.setSkill(Skill.SLAYER); + + when(client.getSkillExperience(Skill.SLAYER)).thenReturn(100); + slayerPlugin.onExperienceChanged(experienceChanged); + + slayerPlugin.setTaskName("Monster"); + slayerPlugin.setAmount(98); + + assert Task.getTask("Monster") == null; + + when(client.getSkillExperience(Skill.SLAYER)).thenReturn(110); + slayerPlugin.onExperienceChanged(experienceChanged); + + assertEquals(97, slayerPlugin.getAmount()); + } + @Test public void testJadTaskKill() {