From 4139fc29fd02d62e7638c4f53afc87a63b93cd15 Mon Sep 17 00:00:00 2001 From: bjornenalfa Date: Sun, 10 Mar 2019 01:34:44 +0100 Subject: [PATCH 01/10] Add party info display to raids plugin --- .../client/plugins/raids/RaidsConfig.java | 11 ++ .../plugins/raids/RaidsPartyOverlay.java | 174 ++++++++++++++++++ .../client/plugins/raids/RaidsPlugin.java | 111 +++++++++-- 3 files changed, 279 insertions(+), 17 deletions(-) create mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsConfig.java index 2323a15a49..0b225afe43 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsConfig.java @@ -162,4 +162,15 @@ public interface RaidsConfig extends Config { return true; } + + @ConfigItem( + position = 12, + keyName = "partyDisplay", + name = "Party Info Display", + description = "Display an overlay that shows information about the current party" + ) + default boolean partyDisplay() + { + return false; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java new file mode 100644 index 0000000000..140bdc32c3 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2019, Bjornenalfa + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.plugins.raids; + +import java.awt.Dimension; +import java.awt.Graphics2D; +import java.awt.Color; +import java.util.List; +import java.util.HashSet; +import java.util.Set; +import javax.inject.Inject; + +import net.runelite.api.ClanMember; +import net.runelite.api.Client; +import static net.runelite.api.MenuAction.RUNELITE_OVERLAY_CONFIG; + +import net.runelite.api.VarPlayer; +import net.runelite.api.Varbits; +import net.runelite.client.ui.overlay.Overlay; +import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE; +import net.runelite.client.ui.overlay.OverlayMenuEntry; +import net.runelite.client.ui.overlay.OverlayPosition; +import net.runelite.client.ui.overlay.OverlayPriority; +import net.runelite.client.ui.overlay.components.LineComponent; +import net.runelite.client.ui.overlay.components.PanelComponent; + +public class RaidsPartyOverlay extends Overlay +{ + @Inject + private Client client; + + @Inject + private RaidsPlugin plugin; + + private final PanelComponent panel = new PanelComponent(); + + @Inject + private RaidsPartyOverlay(RaidsPlugin plugin) + { + super(plugin); + setPosition(OverlayPosition.TOP_RIGHT); + setPriority(OverlayPriority.HIGH); + getMenuEntries().add(new OverlayMenuEntry(RUNELITE_OVERLAY_CONFIG, OPTION_CONFIGURE, "Raids overlay")); + } + + @Override + public Dimension render(Graphics2D graphics) + { + if (!plugin.isInRaidChambers()) + { + return null; + } + + // Leaver display doesn't quite work yet + + + boolean inLobby = client.getVar(VarPlayer.IN_RAID_PARTY) != -1; // -1 if raid started + //boolean inRaid = client.getVar(Varbits.IN_RAID) == 1; // 1 while in raids + + int partySize = client.getVar(Varbits.RAID_PARTY_SIZE); + + int playerCount = client.getPlayers().size(); + + String partyCountString; + + Color countColor = Color.WHITE; + if (inLobby) { + partyCountString = String.format("%d/%d", playerCount, partySize); + if (partySize <= playerCount) { + countColor = Color.GREEN; + } else { + countColor = Color.RED; + } + } else { + // If raid has started then we compare the current party size to what it was whe + partyCountString = String.format("%d/%d", partySize, plugin.getStartPlayerCount()); + if (partySize < plugin.getStartPlayerCount()) { + countColor = Color.RED; // Somebody is missing + } + } + + panel.getChildren().clear(); + + // Show amount of people currently in raid vs total in the party + panel.getChildren().add(LineComponent.builder() + .left("Party size:") + .right(partyCountString) + .rightColor(countColor) + .build()); + + if (inLobby) { + int world = client.getWorld(); + int wrongWorldClanMembers = 0; + HashSet members = new HashSet<>(); + for (ClanMember clanMember : client.getClanMembers()) { + if (clanMember != null) { + if (clanMember.getWorld() != world) { + wrongWorldClanMembers++; + } else { + members.add(clanMember.getUsername()); + //System.out.println("Added clanmember: " + clanMember.getUsername()); + } + } + } + + // Show amount of people on the right world but not at the raids area + Color notInPartyColor = Color.GREEN; + int notInParty = Math.max(members.size() - partySize, 0); + + if (notInParty > 0) { + notInPartyColor = Color.WHITE; + } + + panel.getChildren().add(LineComponent.builder() + .left("Not in party:") + .right(String.valueOf(notInParty)) + .rightColor(notInPartyColor) + .build()); + + // Show amount of clan members that are not in the right world. + Color wrongWorldColor; + if (wrongWorldClanMembers == 0) { + wrongWorldColor = Color.GREEN; + } else { + wrongWorldColor = Color.WHITE; + } + + panel.getChildren().add(LineComponent.builder() + .left("Wrong world:") + .right(String.valueOf(wrongWorldClanMembers)) + .rightColor(wrongWorldColor) + .build()); + + } else { + Set missingPartyMembers = plugin.getMissingPartyMembers(); + if (missingPartyMembers != null && missingPartyMembers.size() > 0) { + panel.getChildren().add(LineComponent.builder() + .left("Missing players:") + .build()); + + for (String member : missingPartyMembers) { + panel.getChildren().add(LineComponent.builder() + .left(member) + .leftColor(Color.RED) + .build()); + } + } + } + + return panel.render(graphics); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java index 46570b3b5a..952701a22f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java @@ -28,27 +28,20 @@ import com.google.inject.Binder; import com.google.inject.Provides; import java.text.DecimalFormat; import java.time.Instant; -import java.util.ArrayList; -import java.util.Arrays; +import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.inject.Inject; import lombok.Getter; import lombok.extern.slf4j.Slf4j; -import net.runelite.api.ChatMessageType; -import net.runelite.api.Client; -import net.runelite.api.GameState; -import net.runelite.api.InstanceTemplates; -import net.runelite.api.NullObjectID; +import net.runelite.api.*; + import static net.runelite.api.Perspective.SCENE_SIZE; -import net.runelite.api.Point; import static net.runelite.api.SpriteID.TAB_QUESTS_BROWN_RAIDING_PARTY; -import net.runelite.api.Tile; -import net.runelite.api.VarPlayer; -import net.runelite.api.Varbits; -import net.runelite.api.events.ChatMessage; -import net.runelite.api.events.ConfigChanged; -import net.runelite.api.events.VarbitChanged; + +import net.runelite.api.events.*; +import net.runelite.api.widgets.Widget; +import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.callback.ClientThread; import net.runelite.client.chat.ChatColorType; import net.runelite.client.chat.ChatMessageBuilder; @@ -101,6 +94,9 @@ public class RaidsPlugin extends Plugin @Inject private RaidsOverlay overlay; + @Inject + private RaidsPartyOverlay partyOverlay; + @Inject private LayoutSolver layoutSolver; @@ -130,6 +126,19 @@ public class RaidsPlugin extends Plugin private RaidsTimer timer; + @Getter + private int startPlayerCount; + + private int storedVarPartySize; + + @Getter + private List partyMembers; + + private List startingPartyMembers; + + @Getter + private Set missingPartyMembers; + @Provides RaidsConfig provideConfig(ConfigManager configManager) { @@ -146,6 +155,9 @@ public class RaidsPlugin extends Plugin protected void startUp() throws Exception { overlayManager.add(overlay); + if (config.partyDisplay()) { + overlayManager.add(partyOverlay); + } updateLists(); clientThread.invokeLater(() -> checkRaidPresence(true)); } @@ -154,6 +166,9 @@ public class RaidsPlugin extends Plugin protected void shutDown() throws Exception { overlayManager.remove(overlay); + if (config.partyDisplay()) { + overlayManager.remove(partyOverlay); + } infoBoxManager.removeInfoBox(timer); inRaidChambers = false; raid = null; @@ -174,6 +189,14 @@ public class RaidsPlugin extends Plugin return; } + if (event.getKey().equals("partyDisplay")) { + if (config.partyDisplay()) { + overlayManager.add(partyOverlay); + } else { + overlayManager.remove(partyOverlay); + } + } + updateLists(); clientThread.invokeLater(() -> checkRaidPresence(true)); } @@ -182,6 +205,7 @@ public class RaidsPlugin extends Plugin public void onVarbitChanged(VarbitChanged event) { checkRaidPresence(false); + updatePartyMembers(); } @Subscribe @@ -191,10 +215,21 @@ public class RaidsPlugin extends Plugin { String message = Text.removeTags(event.getMessage()); - if (config.raidsTimer() && message.startsWith(RAID_START_MESSAGE)) + if (message.startsWith(RAID_START_MESSAGE)) { - timer = new RaidsTimer(spriteManager.getSprite(TAB_QUESTS_BROWN_RAIDING_PARTY, 0), this, Instant.now()); - infoBoxManager.addInfoBox(timer); + if (config.raidsTimer()) { + timer = new RaidsTimer(spriteManager.getSprite(TAB_QUESTS_BROWN_RAIDING_PARTY, 0), this, Instant.now()); + infoBoxManager.addInfoBox(timer); + } + if (config.partyDisplay()) { + updatePartyMembers(); + startPlayerCount = client.getVar(Varbits.RAID_PARTY_SIZE); + if (partyMembers == null) { + startingPartyMembers = new ArrayList<>(); + } else { + startingPartyMembers = new ArrayList<>(partyMembers); + } + } } if (timer != null && message.contains(LEVEL_COMPLETE_MESSAGE)) @@ -243,6 +278,48 @@ public class RaidsPlugin extends Plugin } } + private void updatePartyMembers() { + int partySize = client.getVar(Varbits.RAID_PARTY_SIZE); + if (partySize <= 0) { + partyMembers = null; + return; + } + + partyMembers = new ArrayList<>(); + try { + Widget[] widgets = client.getWidget(WidgetInfo.RAIDING_PARTY).getStaticChildren()[2].getStaticChildren()[3].getDynamicChildren(); + for (int i = 0; i < widgets.length; i++) { + if (widgets[i] != null) { + String name = widgets[i].getName(); + if (name.length() > 1) { + partyMembers.add(name.substring(name.indexOf('>') + 1, name.indexOf('<', 1))); + } + } + } + } catch (NullPointerException e) { + // Raid widget not loaded yet + } + + if (client.getVar(VarPlayer.IN_RAID_PARTY) == -1 && + (startingPartyMembers == null || startingPartyMembers.size() < partyMembers.size())) { + // If raid started and there are more people now than there were then, update + startingPartyMembers = new ArrayList<>(partyMembers); + } + + if (config.partyDisplay()) { + if (client.getVar(VarPlayer.IN_RAID_PARTY) == -1) { + // Raid started, check if anyone left + if (startingPartyMembers != null && startingPartyMembers.size() < partyMembers.size()) { + missingPartyMembers = new HashSet<>(startingPartyMembers); + for (String player : partyMembers) { + missingPartyMembers.remove(player); + } + } + } + } + + } + private void checkRaidPresence(boolean force) { if (client.getGameState() != GameState.LOGGED_IN) From a950763a92f71b11c88e13acd98a01e69ab9bc38 Mon Sep 17 00:00:00 2001 From: bjornenalfa Date: Sun, 10 Mar 2019 12:02:38 +0100 Subject: [PATCH 02/10] Better party tracking --- .../plugins/raids/RaidsPartyOverlay.java | 41 ++++--- .../client/plugins/raids/RaidsPlugin.java | 116 ++++++++++++------ 2 files changed, 105 insertions(+), 52 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java index 140bdc32c3..00d2688f09 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java @@ -32,12 +32,13 @@ import java.util.HashSet; import java.util.Set; import javax.inject.Inject; -import net.runelite.api.ClanMember; -import net.runelite.api.Client; -import static net.runelite.api.MenuAction.RUNELITE_OVERLAY_CONFIG; +import net.runelite.api.*; -import net.runelite.api.VarPlayer; -import net.runelite.api.Varbits; +import net.runelite.client.chat.ChatColorType; +import net.runelite.client.chat.ChatMessageBuilder; +import net.runelite.client.chat.QueuedMessage; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.OverlayMenuClicked; import net.runelite.client.ui.overlay.Overlay; import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE; import net.runelite.client.ui.overlay.OverlayMenuEntry; @@ -48,6 +49,9 @@ import net.runelite.client.ui.overlay.components.PanelComponent; public class RaidsPartyOverlay extends Overlay { + public static final String PARTY_OVERLAY_DEBUG = "Debug"; + public static final String PARTY_OVERLAY_RESET = "Reset missing"; + @Inject private Client client; @@ -62,7 +66,9 @@ public class RaidsPartyOverlay extends Overlay super(plugin); setPosition(OverlayPosition.TOP_RIGHT); setPriority(OverlayPriority.HIGH); - getMenuEntries().add(new OverlayMenuEntry(RUNELITE_OVERLAY_CONFIG, OPTION_CONFIGURE, "Raids overlay")); + getMenuEntries().add(new OverlayMenuEntry(MenuAction.RUNELITE_OVERLAY_CONFIG, OPTION_CONFIGURE, "Raids party overlay")); + getMenuEntries().add(new OverlayMenuEntry(MenuAction.RUNELITE_OVERLAY, PARTY_OVERLAY_DEBUG, "Raids party overlay")); + getMenuEntries().add(new OverlayMenuEntry(MenuAction.RUNELITE_OVERLAY, PARTY_OVERLAY_RESET, "Raids party overlay")); } @Override @@ -73,11 +79,12 @@ public class RaidsPartyOverlay extends Overlay return null; } - // Leaver display doesn't quite work yet - + if (client.getClanChatCount() == 0) { + // Player left clan chat + return null; + } boolean inLobby = client.getVar(VarPlayer.IN_RAID_PARTY) != -1; // -1 if raid started - //boolean inRaid = client.getVar(Varbits.IN_RAID) == 1; // 1 while in raids int partySize = client.getVar(Varbits.RAID_PARTY_SIZE); @@ -88,15 +95,16 @@ public class RaidsPartyOverlay extends Overlay Color countColor = Color.WHITE; if (inLobby) { partyCountString = String.format("%d/%d", playerCount, partySize); + // While we are in the lobby compare to players visible on the screen if (partySize <= playerCount) { countColor = Color.GREEN; } else { countColor = Color.RED; } } else { - // If raid has started then we compare the current party size to what it was whe + // If raid has started then we compare the current party size to what it was when we started partyCountString = String.format("%d/%d", partySize, plugin.getStartPlayerCount()); - if (partySize < plugin.getStartPlayerCount()) { + if (plugin.getMissingPartyMembers().size() > 0) { countColor = Color.RED; // Somebody is missing } } @@ -113,28 +121,27 @@ public class RaidsPartyOverlay extends Overlay if (inLobby) { int world = client.getWorld(); int wrongWorldClanMembers = 0; - HashSet members = new HashSet<>(); + int clanMemberCount = 0; for (ClanMember clanMember : client.getClanMembers()) { if (clanMember != null) { if (clanMember.getWorld() != world) { wrongWorldClanMembers++; } else { - members.add(clanMember.getUsername()); - //System.out.println("Added clanmember: " + clanMember.getUsername()); + clanMemberCount++; } } } // Show amount of people on the right world but not at the raids area Color notInPartyColor = Color.GREEN; - int notInParty = Math.max(members.size() - partySize, 0); + int notInParty = clanMemberCount - partySize; if (notInParty > 0) { notInPartyColor = Color.WHITE; } panel.getChildren().add(LineComponent.builder() - .left("Not in party:") + .left("Not at raids:") .right(String.valueOf(notInParty)) .rightColor(notInPartyColor) .build()); @@ -155,7 +162,7 @@ public class RaidsPartyOverlay extends Overlay } else { Set missingPartyMembers = plugin.getMissingPartyMembers(); - if (missingPartyMembers != null && missingPartyMembers.size() > 0) { + if (missingPartyMembers.size() > 0) { panel.getChildren().add(LineComponent.builder() .left("Missing players:") .build()); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java index 952701a22f..29502c52f5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java @@ -24,6 +24,7 @@ */ package net.runelite.client.plugins.raids; +import com.google.common.collect.Lists; import com.google.inject.Binder; import com.google.inject.Provides; import java.text.DecimalFormat; @@ -49,6 +50,7 @@ import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.chat.QueuedMessage; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.OverlayMenuClicked; import net.runelite.client.game.SpriteManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -56,6 +58,7 @@ import net.runelite.client.plugins.raids.solver.Layout; import net.runelite.client.plugins.raids.solver.LayoutSolver; import net.runelite.client.plugins.raids.solver.RotationSolver; import net.runelite.client.ui.overlay.OverlayManager; +import net.runelite.client.ui.overlay.OverlayMenuEntry; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.client.util.Text; @@ -129,15 +132,14 @@ public class RaidsPlugin extends Plugin @Getter private int startPlayerCount; - private int storedVarPartySize; + @Getter + private List partyMembers = new ArrayList<>(); @Getter - private List partyMembers; - - private List startingPartyMembers; + private List startingPartyMembers = new ArrayList<>(); @Getter - private Set missingPartyMembers; + private Set missingPartyMembers = new HashSet<>(); @Provides RaidsConfig provideConfig(ConfigManager configManager) @@ -205,7 +207,9 @@ public class RaidsPlugin extends Plugin public void onVarbitChanged(VarbitChanged event) { checkRaidPresence(false); - updatePartyMembers(); + if (config.partyDisplay()) { + updatePartyMembers(false); + } } @Subscribe @@ -222,13 +226,17 @@ public class RaidsPlugin extends Plugin infoBoxManager.addInfoBox(timer); } if (config.partyDisplay()) { - updatePartyMembers(); - startPlayerCount = client.getVar(Varbits.RAID_PARTY_SIZE); - if (partyMembers == null) { - startingPartyMembers = new ArrayList<>(); - } else { - startingPartyMembers = new ArrayList<>(partyMembers); - } + // Base this on visible players since party size shows people outside the lobby + // and they did not get to come on the raid + List players = client.getPlayers(); + startPlayerCount = players.size(); + + partyMembers.clear(); + startingPartyMembers.clear(); + missingPartyMembers.clear(); + + partyMembers.addAll(Lists.transform(players, Player::getName)); + startingPartyMembers.addAll(partyMembers); } } @@ -278,46 +286,84 @@ public class RaidsPlugin extends Plugin } } - private void updatePartyMembers() { + @Subscribe + public void onOverlayMenuClicked(OverlayMenuClicked event) + { + OverlayMenuEntry entry = event.getEntry(); + if (entry.getMenuAction() == MenuAction.RUNELITE_OVERLAY && + entry.getTarget().equals("Raids party overlay")) + { + switch (entry.getOption()) { + case RaidsPartyOverlay.PARTY_OVERLAY_DEBUG: + System.out.println("Starting players: "); + getPartyMembers().stream().map(player -> "* " + player).forEach(System.out::println); + System.out.println("Current players: "); + getPartyMembers().stream().map(player -> "* " + player).forEach(System.out::println); + System.out.println("Missing players: "); + getMissingPartyMembers().stream().map(player -> "* " + player).forEach(System.out::println); + break; + case RaidsPartyOverlay.PARTY_OVERLAY_RESET: + updatePartyMembers(true); + break; + default: + break; + } + } + } + + private void updatePartyMembers(boolean force) { int partySize = client.getVar(Varbits.RAID_PARTY_SIZE); if (partySize <= 0) { - partyMembers = null; return; } - partyMembers = new ArrayList<>(); - try { - Widget[] widgets = client.getWidget(WidgetInfo.RAIDING_PARTY).getStaticChildren()[2].getStaticChildren()[3].getDynamicChildren(); + if (force) { + partyMembers.clear(); + startingPartyMembers.clear(); + missingPartyMembers.clear(); + } + + if (startingPartyMembers.size() == partySize) { + // Skip update if we have a list of starting party members the same size as current party + return; + } + + // Only update while in raid + if (client.getVar(VarPlayer.IN_RAID_PARTY) == -1 || force) { + Widget[] widgets; + try { + widgets = client.getWidget(WidgetInfo.RAIDING_PARTY).getStaticChildren()[2].getStaticChildren()[3].getDynamicChildren(); + } catch (NullPointerException e) { + return; // Raid widget not (fully) loaded yet + } + + partyMembers.clear(); for (int i = 0; i < widgets.length; i++) { if (widgets[i] != null) { + // Party members names can be found as a color tagged string in every fourth(ish) of these children String name = widgets[i].getName(); if (name.length() > 1) { + // Clean away tag partyMembers.add(name.substring(name.indexOf('>') + 1, name.indexOf('<', 1))); } } } - } catch (NullPointerException e) { - // Raid widget not loaded yet - } - if (client.getVar(VarPlayer.IN_RAID_PARTY) == -1 && - (startingPartyMembers == null || startingPartyMembers.size() < partyMembers.size())) { - // If raid started and there are more people now than there were then, update - startingPartyMembers = new ArrayList<>(partyMembers); - } + // If there are more people now than there were, update starting members + if (partySize > startingPartyMembers.size()) { + missingPartyMembers.clear(); + startingPartyMembers.clear(); + startingPartyMembers.addAll(partyMembers); + } else { - if (config.partyDisplay()) { - if (client.getVar(VarPlayer.IN_RAID_PARTY) == -1) { - // Raid started, check if anyone left - if (startingPartyMembers != null && startingPartyMembers.size() < partyMembers.size()) { - missingPartyMembers = new HashSet<>(startingPartyMembers); - for (String player : partyMembers) { - missingPartyMembers.remove(player); - } + // Check if anyone left + if (startingPartyMembers.size() > partyMembers.size()) { + missingPartyMembers.clear(); + missingPartyMembers.addAll(startingPartyMembers); + missingPartyMembers.removeAll(partyMembers); } } } - } private void checkRaidPresence(boolean force) From a865079862f5a37edafc9d95256565fcc4a6a188 Mon Sep 17 00:00:00 2001 From: bjornenalfa Date: Sun, 10 Mar 2019 13:05:05 +0100 Subject: [PATCH 03/10] Fix starting party without everyone --- .../plugins/raids/RaidsPartyOverlay.java | 2 ++ .../client/plugins/raids/RaidsPlugin.java | 28 +++++++++---------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java index 00d2688f09..651d60e37d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java @@ -51,6 +51,7 @@ public class RaidsPartyOverlay extends Overlay { public static final String PARTY_OVERLAY_DEBUG = "Debug"; public static final String PARTY_OVERLAY_RESET = "Reset missing"; + public static final String PARTY_OVERLAY_REFRESH = "Refresh party"; @Inject private Client client; @@ -69,6 +70,7 @@ public class RaidsPartyOverlay extends Overlay getMenuEntries().add(new OverlayMenuEntry(MenuAction.RUNELITE_OVERLAY_CONFIG, OPTION_CONFIGURE, "Raids party overlay")); getMenuEntries().add(new OverlayMenuEntry(MenuAction.RUNELITE_OVERLAY, PARTY_OVERLAY_DEBUG, "Raids party overlay")); getMenuEntries().add(new OverlayMenuEntry(MenuAction.RUNELITE_OVERLAY, PARTY_OVERLAY_RESET, "Raids party overlay")); + getMenuEntries().add(new OverlayMenuEntry(MenuAction.RUNELITE_OVERLAY, PARTY_OVERLAY_REFRESH, "Raids party overlay")); } @Override diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java index 29502c52f5..8a9538f275 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java @@ -235,8 +235,8 @@ public class RaidsPlugin extends Plugin startingPartyMembers.clear(); missingPartyMembers.clear(); - partyMembers.addAll(Lists.transform(players, Player::getName)); - startingPartyMembers.addAll(partyMembers); + startingPartyMembers.addAll(Lists.transform(players, Player::getName)); + partyMembers.addAll(startingPartyMembers); } } @@ -296,15 +296,21 @@ public class RaidsPlugin extends Plugin switch (entry.getOption()) { case RaidsPartyOverlay.PARTY_OVERLAY_DEBUG: System.out.println("Starting players: "); - getPartyMembers().stream().map(player -> "* " + player).forEach(System.out::println); + getStartingPartyMembers().stream().map(player -> "* " + player).forEach(System.out::println); System.out.println("Current players: "); getPartyMembers().stream().map(player -> "* " + player).forEach(System.out::println); System.out.println("Missing players: "); getMissingPartyMembers().stream().map(player -> "* " + player).forEach(System.out::println); break; case RaidsPartyOverlay.PARTY_OVERLAY_RESET: + startingPartyMembers.clear(); updatePartyMembers(true); + startingPartyMembers.addAll(partyMembers); + missingPartyMembers.clear(); break; + case RaidsPartyOverlay.PARTY_OVERLAY_REFRESH: + updatePartyMembers(true); + break; default: break; } @@ -317,14 +323,8 @@ public class RaidsPlugin extends Plugin return; } - if (force) { - partyMembers.clear(); - startingPartyMembers.clear(); - missingPartyMembers.clear(); - } - - if (startingPartyMembers.size() == partySize) { - // Skip update if we have a list of starting party members the same size as current party + if (startingPartyMembers.size() == partySize && !force) { + // Skip update if the part is as big as when we started return; } @@ -334,7 +334,7 @@ public class RaidsPlugin extends Plugin try { widgets = client.getWidget(WidgetInfo.RAIDING_PARTY).getStaticChildren()[2].getStaticChildren()[3].getDynamicChildren(); } catch (NullPointerException e) { - return; // Raid widget not (fully) loaded yet + return; // Raid widget not loaded } partyMembers.clear(); @@ -349,8 +349,8 @@ public class RaidsPlugin extends Plugin } } - // If there are more people now than there were, update starting members - if (partySize > startingPartyMembers.size()) { + // If we don't have any starting members, update starting members + if (startingPartyMembers.size() == 0 || force) { missingPartyMembers.clear(); startingPartyMembers.clear(); startingPartyMembers.addAll(partyMembers); From eef9a68828bc55e4f934fc8fc7920ab5a0ac8a13 Mon Sep 17 00:00:00 2001 From: bjornenalfa Date: Sun, 10 Mar 2019 14:24:59 +0100 Subject: [PATCH 04/10] Fix players rejoining --- .../net/runelite/client/plugins/raids/RaidsPlugin.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java index 8a9538f275..fbc17e31aa 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java @@ -301,11 +301,17 @@ public class RaidsPlugin extends Plugin getPartyMembers().stream().map(player -> "* " + player).forEach(System.out::println); System.out.println("Missing players: "); getMissingPartyMembers().stream().map(player -> "* " + player).forEach(System.out::println); + System.out.println("Clan members: "); + ClanMember[] clan = client.getClanMembers(); + for (int i = 0; i < clan.length; i++) { + if (clan[i] != null) { + System.out.println("* " + clan[i].getUsername()); + } + } break; case RaidsPartyOverlay.PARTY_OVERLAY_RESET: startingPartyMembers.clear(); updatePartyMembers(true); - startingPartyMembers.addAll(partyMembers); missingPartyMembers.clear(); break; case RaidsPartyOverlay.PARTY_OVERLAY_REFRESH: @@ -325,6 +331,7 @@ public class RaidsPlugin extends Plugin if (startingPartyMembers.size() == partySize && !force) { // Skip update if the part is as big as when we started + missingPartyMembers.clear(); // Clear missing members in case someone came back return; } From bae6af269220dd9b07df169b0e6e3ff5f55c9584 Mon Sep 17 00:00:00 2001 From: bjornenalfa Date: Sun, 10 Mar 2019 16:26:32 +0100 Subject: [PATCH 05/10] Remove unused imports --- .../runelite/client/plugins/raids/RaidsPartyOverlay.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java index 651d60e37d..f54dd2fdeb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java @@ -27,18 +27,11 @@ package net.runelite.client.plugins.raids; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.Color; -import java.util.List; -import java.util.HashSet; import java.util.Set; import javax.inject.Inject; import net.runelite.api.*; -import net.runelite.client.chat.ChatColorType; -import net.runelite.client.chat.ChatMessageBuilder; -import net.runelite.client.chat.QueuedMessage; -import net.runelite.client.eventbus.Subscribe; -import net.runelite.client.events.OverlayMenuClicked; import net.runelite.client.ui.overlay.Overlay; import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE; import net.runelite.client.ui.overlay.OverlayMenuEntry; From e249cd96a3fb0fb02ebbce5251eb2bc260b94e11 Mon Sep 17 00:00:00 2001 From: bjornenalfa Date: Sun, 10 Mar 2019 16:34:42 +0100 Subject: [PATCH 06/10] Remove debug right click option --- .../client/plugins/raids/RaidsPartyOverlay.java | 2 -- .../client/plugins/raids/RaidsPlugin.java | 15 --------------- 2 files changed, 17 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java index f54dd2fdeb..d496eefc01 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java @@ -42,7 +42,6 @@ import net.runelite.client.ui.overlay.components.PanelComponent; public class RaidsPartyOverlay extends Overlay { - public static final String PARTY_OVERLAY_DEBUG = "Debug"; public static final String PARTY_OVERLAY_RESET = "Reset missing"; public static final String PARTY_OVERLAY_REFRESH = "Refresh party"; @@ -61,7 +60,6 @@ public class RaidsPartyOverlay extends Overlay setPosition(OverlayPosition.TOP_RIGHT); setPriority(OverlayPriority.HIGH); getMenuEntries().add(new OverlayMenuEntry(MenuAction.RUNELITE_OVERLAY_CONFIG, OPTION_CONFIGURE, "Raids party overlay")); - getMenuEntries().add(new OverlayMenuEntry(MenuAction.RUNELITE_OVERLAY, PARTY_OVERLAY_DEBUG, "Raids party overlay")); getMenuEntries().add(new OverlayMenuEntry(MenuAction.RUNELITE_OVERLAY, PARTY_OVERLAY_RESET, "Raids party overlay")); getMenuEntries().add(new OverlayMenuEntry(MenuAction.RUNELITE_OVERLAY, PARTY_OVERLAY_REFRESH, "Raids party overlay")); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java index fbc17e31aa..f0dd176948 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java @@ -294,21 +294,6 @@ public class RaidsPlugin extends Plugin entry.getTarget().equals("Raids party overlay")) { switch (entry.getOption()) { - case RaidsPartyOverlay.PARTY_OVERLAY_DEBUG: - System.out.println("Starting players: "); - getStartingPartyMembers().stream().map(player -> "* " + player).forEach(System.out::println); - System.out.println("Current players: "); - getPartyMembers().stream().map(player -> "* " + player).forEach(System.out::println); - System.out.println("Missing players: "); - getMissingPartyMembers().stream().map(player -> "* " + player).forEach(System.out::println); - System.out.println("Clan members: "); - ClanMember[] clan = client.getClanMembers(); - for (int i = 0; i < clan.length; i++) { - if (clan[i] != null) { - System.out.println("* " + clan[i].getUsername()); - } - } - break; case RaidsPartyOverlay.PARTY_OVERLAY_RESET: startingPartyMembers.clear(); updatePartyMembers(true); From 2ac184685f0923a43fd30e1455417c36832ed8b1 Mon Sep 17 00:00:00 2001 From: bjornenalfa Date: Sun, 10 Mar 2019 17:18:25 +0100 Subject: [PATCH 07/10] Fix style errors --- .../plugins/raids/RaidsPartyOverlay.java | 238 ++++++++++-------- .../client/plugins/raids/RaidsPlugin.java | 156 +++++++----- 2 files changed, 222 insertions(+), 172 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java index d496eefc01..a634f48c27 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java @@ -33,7 +33,9 @@ import javax.inject.Inject; import net.runelite.api.*; import net.runelite.client.ui.overlay.Overlay; + import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE; + import net.runelite.client.ui.overlay.OverlayMenuEntry; import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayPriority; @@ -42,133 +44,155 @@ import net.runelite.client.ui.overlay.components.PanelComponent; public class RaidsPartyOverlay extends Overlay { - public static final String PARTY_OVERLAY_RESET = "Reset missing"; - public static final String PARTY_OVERLAY_REFRESH = "Refresh party"; + public static final String PARTY_OVERLAY_RESET = "Reset missing"; + public static final String PARTY_OVERLAY_REFRESH = "Refresh party"; - @Inject - private Client client; + @Inject + private Client client; - @Inject - private RaidsPlugin plugin; + @Inject + private RaidsPlugin plugin; - private final PanelComponent panel = new PanelComponent(); + private final PanelComponent panel = new PanelComponent(); - @Inject - private RaidsPartyOverlay(RaidsPlugin plugin) - { - super(plugin); - setPosition(OverlayPosition.TOP_RIGHT); - setPriority(OverlayPriority.HIGH); - getMenuEntries().add(new OverlayMenuEntry(MenuAction.RUNELITE_OVERLAY_CONFIG, OPTION_CONFIGURE, "Raids party overlay")); - getMenuEntries().add(new OverlayMenuEntry(MenuAction.RUNELITE_OVERLAY, PARTY_OVERLAY_RESET, "Raids party overlay")); - getMenuEntries().add(new OverlayMenuEntry(MenuAction.RUNELITE_OVERLAY, PARTY_OVERLAY_REFRESH, "Raids party overlay")); - } + @Inject + private RaidsPartyOverlay(RaidsPlugin plugin) + { + super(plugin); + setPosition(OverlayPosition.TOP_RIGHT); + setPriority(OverlayPriority.HIGH); + getMenuEntries().add(new OverlayMenuEntry(MenuAction.RUNELITE_OVERLAY_CONFIG, OPTION_CONFIGURE, "Raids party overlay")); + getMenuEntries().add(new OverlayMenuEntry(MenuAction.RUNELITE_OVERLAY, PARTY_OVERLAY_RESET, "Raids party overlay")); + getMenuEntries().add(new OverlayMenuEntry(MenuAction.RUNELITE_OVERLAY, PARTY_OVERLAY_REFRESH, "Raids party overlay")); + } - @Override - public Dimension render(Graphics2D graphics) - { - if (!plugin.isInRaidChambers()) - { - return null; - } + @Override + public Dimension render(Graphics2D graphics) + { + if (!plugin.isInRaidChambers()) + { + return null; + } - if (client.getClanChatCount() == 0) { - // Player left clan chat - return null; - } + if (client.getClanChatCount() == 0) + { + // Player left clan chat + return null; + } - boolean inLobby = client.getVar(VarPlayer.IN_RAID_PARTY) != -1; // -1 if raid started + boolean inLobby = client.getVar(VarPlayer.IN_RAID_PARTY) != -1; // -1 if raid started - int partySize = client.getVar(Varbits.RAID_PARTY_SIZE); + int partySize = client.getVar(Varbits.RAID_PARTY_SIZE); - int playerCount = client.getPlayers().size(); + int playerCount = client.getPlayers().size(); - String partyCountString; + String partyCountString; - Color countColor = Color.WHITE; - if (inLobby) { - partyCountString = String.format("%d/%d", playerCount, partySize); - // While we are in the lobby compare to players visible on the screen - if (partySize <= playerCount) { - countColor = Color.GREEN; - } else { - countColor = Color.RED; - } - } else { - // If raid has started then we compare the current party size to what it was when we started - partyCountString = String.format("%d/%d", partySize, plugin.getStartPlayerCount()); - if (plugin.getMissingPartyMembers().size() > 0) { - countColor = Color.RED; // Somebody is missing - } - } + Color countColor = Color.WHITE; + if (inLobby) + { + partyCountString = String.format("%d/%d", playerCount, partySize); + // While we are in the lobby compare to players visible on the screen + if (partySize <= playerCount) + { + countColor = Color.GREEN; + } + else + { + countColor = Color.RED; + } + } + else + { + // If raid has started then we compare the current party size to what it was when we started + partyCountString = String.format("%d/%d", partySize, plugin.getStartPlayerCount()); + if (plugin.getMissingPartyMembers().size() > 0) + { + countColor = Color.RED; // Somebody is missing + } + } - panel.getChildren().clear(); + panel.getChildren().clear(); - // Show amount of people currently in raid vs total in the party - panel.getChildren().add(LineComponent.builder() - .left("Party size:") - .right(partyCountString) - .rightColor(countColor) - .build()); + // Show amount of people currently in raid vs total in the party + panel.getChildren().add(LineComponent.builder() + .left("Party size:") + .right(partyCountString) + .rightColor(countColor) + .build()); - if (inLobby) { - int world = client.getWorld(); - int wrongWorldClanMembers = 0; - int clanMemberCount = 0; - for (ClanMember clanMember : client.getClanMembers()) { - if (clanMember != null) { - if (clanMember.getWorld() != world) { - wrongWorldClanMembers++; - } else { - clanMemberCount++; - } - } - } + if (inLobby) + { + int world = client.getWorld(); + int wrongWorldClanMembers = 0; + int clanMemberCount = 0; + for (ClanMember clanMember : client.getClanMembers()) + { + if (clanMember != null) + { + if (clanMember.getWorld() != world) + { + wrongWorldClanMembers++; + } + else + { + clanMemberCount++; + } + } + } - // Show amount of people on the right world but not at the raids area - Color notInPartyColor = Color.GREEN; - int notInParty = clanMemberCount - partySize; + // Show amount of people on the right world but not at the raids area + Color notInPartyColor = Color.GREEN; + int notInParty = clanMemberCount - partySize; - if (notInParty > 0) { - notInPartyColor = Color.WHITE; - } + if (notInParty > 0) + { + notInPartyColor = Color.WHITE; + } - panel.getChildren().add(LineComponent.builder() - .left("Not at raids:") - .right(String.valueOf(notInParty)) - .rightColor(notInPartyColor) - .build()); + panel.getChildren().add(LineComponent.builder() + .left("Not at raids:") + .right(String.valueOf(notInParty)) + .rightColor(notInPartyColor) + .build()); - // Show amount of clan members that are not in the right world. - Color wrongWorldColor; - if (wrongWorldClanMembers == 0) { - wrongWorldColor = Color.GREEN; - } else { - wrongWorldColor = Color.WHITE; - } + // Show amount of clan members that are not in the right world. + Color wrongWorldColor; + if (wrongWorldClanMembers == 0) + { + wrongWorldColor = Color.GREEN; + } + else + { + wrongWorldColor = Color.WHITE; + } - panel.getChildren().add(LineComponent.builder() - .left("Wrong world:") - .right(String.valueOf(wrongWorldClanMembers)) - .rightColor(wrongWorldColor) - .build()); + panel.getChildren().add(LineComponent.builder() + .left("Wrong world:") + .right(String.valueOf(wrongWorldClanMembers)) + .rightColor(wrongWorldColor) + .build()); - } else { - Set missingPartyMembers = plugin.getMissingPartyMembers(); - if (missingPartyMembers.size() > 0) { - panel.getChildren().add(LineComponent.builder() - .left("Missing players:") - .build()); + } + else + { + Set missingPartyMembers = plugin.getMissingPartyMembers(); + if (missingPartyMembers.size() > 0) + { + panel.getChildren().add(LineComponent.builder() + .left("Missing players:") + .build()); - for (String member : missingPartyMembers) { - panel.getChildren().add(LineComponent.builder() - .left(member) - .leftColor(Color.RED) - .build()); - } - } - } + for (String member : missingPartyMembers) + { + panel.getChildren().add(LineComponent.builder() + .left(member) + .leftColor(Color.RED) + .build()); + } + } + } - return panel.render(graphics); - } + return panel.render(graphics); + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java index f0dd176948..2e70b286fd 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java @@ -27,12 +27,14 @@ package net.runelite.client.plugins.raids; import com.google.common.collect.Lists; import com.google.inject.Binder; import com.google.inject.Provides; + import java.text.DecimalFormat; import java.time.Instant; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.inject.Inject; + import lombok.Getter; import lombok.extern.slf4j.Slf4j; import net.runelite.api.*; @@ -63,9 +65,9 @@ import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.client.util.Text; @PluginDescriptor( - name = "Chambers Of Xeric", - description = "Show helpful information for the Chambers of Xeric raid", - tags = {"combat", "raid", "overlay", "pve", "pvm", "bosses"} + name = "Chambers Of Xeric", + description = "Show helpful information for the Chambers of Xeric raid", + tags = {"combat", "raid", "overlay", "pve", "pvm", "bosses"} ) @Slf4j public class RaidsPlugin extends Plugin @@ -157,7 +159,8 @@ public class RaidsPlugin extends Plugin protected void startUp() throws Exception { overlayManager.add(overlay); - if (config.partyDisplay()) { + if (config.partyDisplay()) + { overlayManager.add(partyOverlay); } updateLists(); @@ -168,7 +171,8 @@ public class RaidsPlugin extends Plugin protected void shutDown() throws Exception { overlayManager.remove(overlay); - if (config.partyDisplay()) { + if (config.partyDisplay()) + { overlayManager.remove(partyOverlay); } infoBoxManager.removeInfoBox(timer); @@ -191,10 +195,14 @@ public class RaidsPlugin extends Plugin return; } - if (event.getKey().equals("partyDisplay")) { - if (config.partyDisplay()) { + if (event.getKey().equals("partyDisplay")) + { + if (config.partyDisplay()) + { overlayManager.add(partyOverlay); - } else { + } + else + { overlayManager.remove(partyOverlay); } } @@ -207,7 +215,8 @@ public class RaidsPlugin extends Plugin public void onVarbitChanged(VarbitChanged event) { checkRaidPresence(false); - if (config.partyDisplay()) { + if (config.partyDisplay()) + { updatePartyMembers(false); } } @@ -221,22 +230,24 @@ public class RaidsPlugin extends Plugin if (message.startsWith(RAID_START_MESSAGE)) { - if (config.raidsTimer()) { + if (config.raidsTimer()) + { timer = new RaidsTimer(spriteManager.getSprite(TAB_QUESTS_BROWN_RAIDING_PARTY, 0), this, Instant.now()); infoBoxManager.addInfoBox(timer); } - if (config.partyDisplay()) { - // Base this on visible players since party size shows people outside the lobby - // and they did not get to come on the raid - List players = client.getPlayers(); - startPlayerCount = players.size(); + if (config.partyDisplay()) + { + // Base this on visible players since party size shows people outside the lobby + // and they did not get to come on the raid + List players = client.getPlayers(); + startPlayerCount = players.size(); - partyMembers.clear(); - startingPartyMembers.clear(); - missingPartyMembers.clear(); + partyMembers.clear(); + startingPartyMembers.clear(); + missingPartyMembers.clear(); - startingPartyMembers.addAll(Lists.transform(players, Player::getName)); - partyMembers.addAll(startingPartyMembers); + startingPartyMembers.addAll(Lists.transform(players, Player::getName)); + partyMembers.addAll(startingPartyMembers); } } @@ -261,26 +272,26 @@ public class RaidsPlugin extends Plugin double percentage = personalPoints / (totalPoints / 100.0); String chatMessage = new ChatMessageBuilder() - .append(ChatColorType.NORMAL) - .append("Total points: ") - .append(ChatColorType.HIGHLIGHT) - .append(POINTS_FORMAT.format(totalPoints)) - .append(ChatColorType.NORMAL) - .append(", Personal points: ") - .append(ChatColorType.HIGHLIGHT) - .append(POINTS_FORMAT.format(personalPoints)) - .append(ChatColorType.NORMAL) - .append(" (") - .append(ChatColorType.HIGHLIGHT) - .append(DECIMAL_FORMAT.format(percentage)) - .append(ChatColorType.NORMAL) - .append("%)") - .build(); + .append(ChatColorType.NORMAL) + .append("Total points: ") + .append(ChatColorType.HIGHLIGHT) + .append(POINTS_FORMAT.format(totalPoints)) + .append(ChatColorType.NORMAL) + .append(", Personal points: ") + .append(ChatColorType.HIGHLIGHT) + .append(POINTS_FORMAT.format(personalPoints)) + .append(ChatColorType.NORMAL) + .append(" (") + .append(ChatColorType.HIGHLIGHT) + .append(DECIMAL_FORMAT.format(percentage)) + .append(ChatColorType.NORMAL) + .append("%)") + .build(); chatMessageManager.queue(QueuedMessage.builder() - .type(ChatMessageType.CLANCHAT_INFO) - .runeLiteFormattedMessage(chatMessage) - .build()); + .type(ChatMessageType.CLANCHAT_INFO) + .runeLiteFormattedMessage(chatMessage) + .build()); } } } @@ -293,48 +304,59 @@ public class RaidsPlugin extends Plugin if (entry.getMenuAction() == MenuAction.RUNELITE_OVERLAY && entry.getTarget().equals("Raids party overlay")) { - switch (entry.getOption()) { + switch (entry.getOption()) + { case RaidsPartyOverlay.PARTY_OVERLAY_RESET: - startingPartyMembers.clear(); + startingPartyMembers.clear(); + updatePartyMembers(true); + missingPartyMembers.clear(); + break; + case RaidsPartyOverlay.PARTY_OVERLAY_REFRESH: updatePartyMembers(true); - missingPartyMembers.clear(); break; - case RaidsPartyOverlay.PARTY_OVERLAY_REFRESH: - updatePartyMembers(true); - break; default: break; } } } - private void updatePartyMembers(boolean force) { + private void updatePartyMembers(boolean force) + { int partySize = client.getVar(Varbits.RAID_PARTY_SIZE); - if (partySize <= 0) { + if (partySize <= 0) + { return; } - if (startingPartyMembers.size() == partySize && !force) { + if (startingPartyMembers.size() == partySize && !force) + { // Skip update if the part is as big as when we started - missingPartyMembers.clear(); // Clear missing members in case someone came back + missingPartyMembers.clear(); // Clear missing members in case someone came back return; } // Only update while in raid - if (client.getVar(VarPlayer.IN_RAID_PARTY) == -1 || force) { + if (client.getVar(VarPlayer.IN_RAID_PARTY) == -1 || force) + { Widget[] widgets; - try { + try + { widgets = client.getWidget(WidgetInfo.RAIDING_PARTY).getStaticChildren()[2].getStaticChildren()[3].getDynamicChildren(); - } catch (NullPointerException e) { + } + catch (NullPointerException e) + { return; // Raid widget not loaded } partyMembers.clear(); - for (int i = 0; i < widgets.length; i++) { - if (widgets[i] != null) { + for (int i = 0; i < widgets.length; i++) + { + if (widgets[i] != null) + { // Party members names can be found as a color tagged string in every fourth(ish) of these children String name = widgets[i].getName(); - if (name.length() > 1) { + if (name.length() > 1) + { // Clean away tag partyMembers.add(name.substring(name.indexOf('>') + 1, name.indexOf('<', 1))); } @@ -342,14 +364,18 @@ public class RaidsPlugin extends Plugin } // If we don't have any starting members, update starting members - if (startingPartyMembers.size() == 0 || force) { + if (startingPartyMembers.size() == 0 || force) + { missingPartyMembers.clear(); startingPartyMembers.clear(); startingPartyMembers.addAll(partyMembers); - } else { + } + else + { // Check if anyone left - if (startingPartyMembers.size() > partyMembers.size()) { + if (startingPartyMembers.size() > partyMembers.size()) + { missingPartyMembers.clear(); missingPartyMembers.addAll(startingPartyMembers); missingPartyMembers.removeAll(partyMembers); @@ -420,14 +446,14 @@ public class RaidsPlugin extends Plugin final String raidData = "[" + layout + "]: " + rooms; chatMessageManager.queue(QueuedMessage.builder() - .type(ChatMessageType.CLANCHAT_INFO) - .runeLiteFormattedMessage(new ChatMessageBuilder() - .append(ChatColorType.HIGHLIGHT) - .append("Layout: ") - .append(ChatColorType.NORMAL) - .append(raidData) - .build()) - .build()); + .type(ChatMessageType.CLANCHAT_INFO) + .runeLiteFormattedMessage(new ChatMessageBuilder() + .append(ChatColorType.HIGHLIGHT) + .append("Layout: ") + .append(ChatColorType.NORMAL) + .append(raidData) + .build()) + .build()); } private void updateInfoBoxState() From a0e7d51a3a8e5c929510c082dcbccd4a29cf86a2 Mon Sep 17 00:00:00 2001 From: James Munson Date: Fri, 14 Jun 2019 01:00:00 -0700 Subject: [PATCH 08/10] Update to use Tables --- .../plugins/raids/RaidsPartyOverlay.java | 46 +++++++++---------- 1 file changed, 21 insertions(+), 25 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java index a634f48c27..b5f1f86264 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java @@ -30,8 +30,12 @@ import java.awt.Color; import java.util.Set; import javax.inject.Inject; -import net.runelite.api.*; +import net.runelite.api.Client; +import net.runelite.api.MenuAction; +import net.runelite.api.VarPlayer; +import net.runelite.api.Varbits; +import net.runelite.api.ClanMember; import net.runelite.client.ui.overlay.Overlay; import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE; @@ -39,8 +43,10 @@ import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE; import net.runelite.client.ui.overlay.OverlayMenuEntry; import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayPriority; -import net.runelite.client.ui.overlay.components.LineComponent; import net.runelite.client.ui.overlay.components.PanelComponent; +import net.runelite.client.ui.overlay.components.table.TableAlignment; +import net.runelite.client.ui.overlay.components.table.TableComponent; +import net.runelite.client.util.ColorUtil; public class RaidsPartyOverlay extends Overlay { @@ -86,6 +92,11 @@ public class RaidsPartyOverlay extends Overlay int playerCount = client.getPlayers().size(); + TableComponent tableComponent = new TableComponent(); + tableComponent.setColumnAlignments(TableAlignment.LEFT, TableAlignment.RIGHT); + + + String partyCountString; Color countColor = Color.WHITE; @@ -114,12 +125,7 @@ public class RaidsPartyOverlay extends Overlay panel.getChildren().clear(); - // Show amount of people currently in raid vs total in the party - panel.getChildren().add(LineComponent.builder() - .left("Party size:") - .right(partyCountString) - .rightColor(countColor) - .build()); + tableComponent.addRow("Party size:", ColorUtil.prependColorTag(partyCountString, countColor)); if (inLobby) { @@ -150,11 +156,8 @@ public class RaidsPartyOverlay extends Overlay notInPartyColor = Color.WHITE; } - panel.getChildren().add(LineComponent.builder() - .left("Not at raids:") - .right(String.valueOf(notInParty)) - .rightColor(notInPartyColor) - .build()); + tableComponent.addRow("Not at raids:", ColorUtil.prependColorTag(String.valueOf(notInParty), notInPartyColor)); + // Show amount of clan members that are not in the right world. Color wrongWorldColor; @@ -167,11 +170,7 @@ public class RaidsPartyOverlay extends Overlay wrongWorldColor = Color.WHITE; } - panel.getChildren().add(LineComponent.builder() - .left("Wrong world:") - .right(String.valueOf(wrongWorldClanMembers)) - .rightColor(wrongWorldColor) - .build()); + tableComponent.addRow("Wrong world:", ColorUtil.prependColorTag(String.valueOf(wrongWorldClanMembers), wrongWorldColor)); } else @@ -179,16 +178,13 @@ public class RaidsPartyOverlay extends Overlay Set missingPartyMembers = plugin.getMissingPartyMembers(); if (missingPartyMembers.size() > 0) { - panel.getChildren().add(LineComponent.builder() - .left("Missing players:") - .build()); + + + tableComponent.addRow("Missing players:", ""); for (String member : missingPartyMembers) { - panel.getChildren().add(LineComponent.builder() - .left(member) - .leftColor(Color.RED) - .build()); + tableComponent.addRow(ColorUtil.prependColorTag(member, Color.RED), ""); } } } From 7fa4d4c64cca2bf35770c036c10cd1a330d410a8 Mon Sep 17 00:00:00 2001 From: James Munson Date: Fri, 14 Jun 2019 01:06:35 -0700 Subject: [PATCH 09/10] Update --- .../java/net/runelite/client/plugins/raids/RaidsPlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java index 3dd467af09..fa536f61c8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java @@ -566,7 +566,7 @@ public class RaidsPlugin extends Plugin } } - private void checkRaidPresence(boolean force) + public void checkRaidPresence(boolean force) { if (client.getGameState() != GameState.LOGGED_IN) { From 37fb09efc7591ab2402cb26c2b5675da8ea5b71f Mon Sep 17 00:00:00 2001 From: James Munson Date: Fri, 14 Jun 2019 01:09:41 -0700 Subject: [PATCH 10/10] Missed this --- .../net/runelite/client/plugins/raids/RaidsPartyOverlay.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java index b5f1f86264..883c86dd26 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPartyOverlay.java @@ -52,6 +52,7 @@ public class RaidsPartyOverlay extends Overlay { public static final String PARTY_OVERLAY_RESET = "Reset missing"; public static final String PARTY_OVERLAY_REFRESH = "Refresh party"; + private final PanelComponent panelComponent = new PanelComponent(); @Inject private Client client; @@ -189,6 +190,8 @@ public class RaidsPartyOverlay extends Overlay } } + panelComponent.getChildren().add(tableComponent); + return panel.render(graphics); } }