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 8bb9d42b3a..228a0c6101 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 @@ -204,7 +204,7 @@ public class SlayerPlugin extends Plugin private int points; private TaskCounter counter; - private int cachedXp; + private int cachedXp = -1; private Instant infoTimer; private boolean loginFlag; private List targetNames = new ArrayList<>(); @@ -217,15 +217,19 @@ public class SlayerPlugin extends Plugin overlayManager.add(targetWeaknessOverlay); overlayManager.add(targetMinimapOverlay); - if (client.getGameState() == GameState.LOGGED_IN - && config.amount() != -1 - && !config.taskName().isEmpty()) + if (client.getGameState() == GameState.LOGGED_IN) { - points = config.points(); - streak = config.streak(); - setExpeditiousChargeCount(config.expeditious()); - setSlaughterChargeCount(config.slaughter()); - clientThread.invoke(() -> setTask(config.taskName(), config.amount(), config.initialAmount(), config.taskLocation())); + cachedXp = client.getSkillExperience(SLAYER); + + if (config.amount() != -1 + && !config.taskName().isEmpty()) + { + points = config.points(); + streak = config.streak(); + setExpeditiousChargeCount(config.expeditious()); + setSlaughterChargeCount(config.slaughter()); + clientThread.invoke(() -> setTask(config.taskName(), config.amount(), config.initialAmount(), config.taskLocation())); + } } chatCommandManager.registerCommandAsync(TASK_COMMAND_STRING, this::taskLookup, this::taskSubmit); @@ -240,6 +244,7 @@ public class SlayerPlugin extends Plugin overlayManager.remove(targetMinimapOverlay); removeCounter(); highlightedTargets.clear(); + cachedXp = -1; chatCommandManager.unregisterCommand(TASK_COMMAND_STRING); } @@ -257,7 +262,7 @@ public class SlayerPlugin extends Plugin { case HOPPING: case LOGGING_IN: - cachedXp = 0; + cachedXp = -1; taskName = ""; amount = 0; loginFlag = true; @@ -528,7 +533,7 @@ public class SlayerPlugin extends Plugin return; } - if (cachedXp == 0) + if (cachedXp == -1) { // this is the initial xp sent on login cachedXp = slayerExp; 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 fb4cdabe81..4eed41d277 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 @@ -681,4 +681,26 @@ public class SlayerPluginTest verify(chatMessageManager, never()).update(any(MessageNode.class)); } + + @Test + public void testNewAccountSlayerKill() + { + 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); + + slayerPlugin.setTaskName("Bears"); + slayerPlugin.setAmount(35); + + when(client.getSkillExperience(Skill.SLAYER)).thenReturn(0); + slayerPlugin.onExperienceChanged(experienceChanged); + + when(client.getSkillExperience(Skill.SLAYER)).thenReturn(27); + slayerPlugin.onExperienceChanged(experienceChanged); + + assertEquals(34, slayerPlugin.getAmount()); + } }