From 338794f8f3e0058bbabcfaca3b0993404f32f71f Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Wed, 24 Oct 2018 16:08:04 +0200 Subject: [PATCH] Fix combat brace slayer task race condition Apparently combat bracelet message is sent before XP drop is received, so task updates to correct amount and then is substracted by 1. To combat this, virtually increase amount by 1 so the xp drop will substract to correct amount. Closes #6091 Signed-off-by: Tomas Slusny --- .../net/runelite/client/plugins/slayer/SlayerPlugin.java | 8 ++++++-- .../runelite/client/plugins/slayer/SlayerPluginTest.java | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) 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 6d375102c6..d44ebb67b6 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 @@ -25,6 +25,7 @@ */ package net.runelite.client.plugins.slayer; +import com.google.common.annotations.VisibleForTesting; import com.google.common.eventbus.Subscribe; import com.google.inject.Provides; import java.awt.Color; @@ -434,7 +435,9 @@ public class SlayerPlugin extends Plugin { final int taskAmount = Integer.parseInt(bracerProgress.group(1)); setTask(taskName, taskAmount); - return; + + // Avoid race condition (combat brace message goes through first before XP drop) + amount++; } } @@ -482,7 +485,8 @@ public class SlayerPlugin extends Plugin } } - private void killedOne() + @VisibleForTesting + void killedOne() { if (amount == 0) { 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 a5bc5abc01..fdd4b39cf7 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 @@ -429,6 +429,7 @@ public class SlayerPluginTest slayerPlugin.onChatMessage(chatMessage); assertEquals("Suqahs", slayerPlugin.getTaskName()); + slayerPlugin.killedOne(); assertEquals(30, slayerPlugin.getAmount()); } }