From faa3f03b358ef99003ed2e9a8752e500a2c5ca97 Mon Sep 17 00:00:00 2001 From: Ron Young Date: Sat, 18 Aug 2018 06:44:08 -0500 Subject: [PATCH] Fix pest control shield state checks (#4977) Closes #4974. An update for mobile broke checking the shield widgets for hidden. They never technically hide until the game is over. --- .../client/plugins/pestcontrol/Game.java | 20 ++++++++++++ .../pestcontrol/PestControlOverlay.java | 21 ++----------- .../pestcontrol/PestControlPlugin.java | 31 +++++++++++++++++++ 3 files changed, 54 insertions(+), 18 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/Game.java b/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/Game.java index 7c59b36028..0b04b687c3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/Game.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/Game.java @@ -46,6 +46,26 @@ public class Game private final PortalContext yellow = new PortalContext(YELLOW); private final PortalContext red = new PortalContext(RED); + public void fall(String color) + { + if (color.equalsIgnoreCase("purple")) + { + fall(purple); + } + else if (color.equalsIgnoreCase("red")) + { + fall(red); + } + else if (color.equalsIgnoreCase("yellow")) + { + fall(yellow); + } + else if (color.equalsIgnoreCase("blue")) + { + fall(blue); + } + } + public void fall(PortalContext portal) { if (!portal.isShielded()) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/PestControlOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/PestControlOverlay.java index 3ba5cac867..fe896fec52 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/PestControlOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/PestControlOverlay.java @@ -32,6 +32,8 @@ import java.awt.Graphics2D; import java.awt.geom.Rectangle2D; import java.util.Arrays; import javax.inject.Inject; +import lombok.AccessLevel; +import lombok.Getter; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; import net.runelite.api.NPC; @@ -55,6 +57,7 @@ public class PestControlOverlay extends Overlay private final Client client; // Pest control game + @Getter(AccessLevel.PACKAGE) private Game game; @Inject @@ -121,24 +124,6 @@ public class PestControlOverlay extends Overlay assert yellowShield != null; assert redShield != null; - // Check for fallen portals - if (purpleShield.isHidden()) - { - game.fall(purple); - } - if (blueShield.isHidden()) - { - game.fall(blue); - } - if (yellowShield.isHidden()) - { - game.fall(yellow); - } - if (redShield.isHidden()) - { - game.fall(red); - } - // Check for dead portals if (isZero(purpleHealth)) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/PestControlPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/PestControlPlugin.java index 0d0eee54b1..f919405c75 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/PestControlPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/PestControlPlugin.java @@ -24,7 +24,14 @@ */ package net.runelite.client.plugins.pestcontrol; +import com.google.common.eventbus.Subscribe; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.inject.Inject; +import net.runelite.api.ChatMessageType; +import net.runelite.api.Client; +import net.runelite.api.GameState; +import net.runelite.api.events.SetMessage; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; @@ -39,9 +46,14 @@ public class PestControlPlugin extends Plugin @Inject private OverlayManager overlayManager; + @Inject + private Client client; + @Inject private PestControlOverlay overlay; + private Pattern pattern = Pattern.compile("The ([a-z]+), [^ ]+ portal shield has dropped!", Pattern.CASE_INSENSITIVE); + @Override protected void startUp() throws Exception { @@ -53,4 +65,23 @@ public class PestControlPlugin extends Plugin { overlayManager.remove(overlay); } + + + @Subscribe + private void onSetMessage(SetMessage setMessage) + { + if (client.getGameState() != GameState.LOADING && client.getGameState() != GameState.LOGGED_IN) + { + return; + } + + if (overlay.getGame() != null && setMessage.getType() == ChatMessageType.SERVER) + { + Matcher matcher = pattern.matcher(setMessage.getValue()); + if (matcher.lookingAt()) + { + overlay.getGame().fall(matcher.group(1)); + } + } + } }