diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java index 2db98594d1..a551a2272b 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java @@ -114,7 +114,7 @@ public class WidgetID public static final int VARROCK_MUSEUM_QUIZ_GROUP_ID = 533; public static final int KILL_LOGS_GROUP_ID = 549; public static final int DIARY_QUEST_GROUP_ID = 119; - public static final int THEATRE_OF_BLOOD_GROUP_ID = 23; + public static final int THEATRE_OF_BLOOD_GROUP_ID = 28; public static final int WORLD_SWITCHER_GROUP_ID = 69; public static final int DIALOG_OPTION_GROUP_ID = 219; public static final int DIALOG_PLAYER_GROUP_ID = 217; @@ -122,6 +122,8 @@ public class WidgetID public static final int MINIGAME_TAB_ID = 76; public static final int SPELLBOOK_GROUP_ID = 218; public static final int PVP_GROUP_ID = 90; + public static final int PERFORMERS_FOR_THE_THEATRE_GROUPS_GROUP_ID = 364; + public static final int PERFORMERS_FOR_THE_THEATRE_PLAYERS_GROUP_ID = 50; public static final int FISHING_TRAWLER_GROUP_ID = 366; public static final int ZEAH_MESS_HALL_GROUP_ID = 235; public static final int KOUREND_FAVOUR_GROUP_ID = 246; @@ -650,6 +652,12 @@ public class WidgetID static final int POINTS_INFOBOX = 6; } + static class TheatreOfBlood + { + static final int ORB_BOX = 10; + static final int BOSS_HEALTH_BAR = 35; + } + static class ExperienceDrop { static final int DROP_1 = 15; diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java index 4ae996c3d4..bc666fad45 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java @@ -436,6 +436,9 @@ public enum WidgetInfo RAIDS_POINTS_INFOBOX(WidgetID.RAIDS_GROUP_ID, WidgetID.Raids.POINTS_INFOBOX), + THEATRE_OF_BLOOD_HEALTH_ORBS(WidgetID.THEATRE_OF_BLOOD_GROUP_ID, WidgetID.TheatreOfBlood.ORB_BOX), + THEATRE_OF_BLOOD_BOSS_HEALTH(WidgetID.THEATRE_OF_BLOOD_GROUP_ID, WidgetID.TheatreOfBlood.BOSS_HEALTH_BAR), + BLAST_FURNACE_COFFER(WidgetID.BLAST_FURNACE_GROUP_ID, 2), PYRAMID_PLUNDER_DATA(WidgetID.PYRAMID_PLUNDER_GROUP_ID, 2), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java index 7bb87b03ea..25b2df509a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java @@ -430,7 +430,7 @@ public class LootTrackerPlugin extends Plugin eventType = "Chambers of Xeric"; container = client.getItemContainer(InventoryID.CHAMBERS_OF_XERIC_CHEST); break; - case (WidgetID.THEATRE_OF_BLOOD_GROUP_ID): + case (WidgetID.THEATRE_OF_BLOOD_REWARD_GROUP_ID): int region = WorldPoint.fromLocalInstance(client, client.getLocalPlayer().getLocalLocation()).getRegionID(); if (region != THEATRE_OF_BLOOD_REGION) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/stonedloottracker/StonedLootTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/stonedloottracker/StonedLootTrackerPlugin.java index ac3f1f7000..ceb85fe365 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/stonedloottracker/StonedLootTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/stonedloottracker/StonedLootTrackerPlugin.java @@ -293,7 +293,7 @@ public class StonedLootTrackerPlugin extends Plugin eventType = "Chambers of Xeric"; container = client.getItemContainer(InventoryID.CHAMBERS_OF_XERIC_CHEST); break; - case (WidgetID.THEATRE_OF_BLOOD_GROUP_ID): + case (WidgetID.THEATRE_OF_BLOOD_REWARD_GROUP_ID): int region = WorldPoint.fromLocalInstance(client, client.getLocalPlayer().getLocalLocation()).getRegionID(); if (region != THEATRE_OF_BLOOD_REGION) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/theatre/TheatrePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/theatre/TheatrePlugin.java index 8eb3364803..0fe357d9e3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/theatre/TheatrePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/theatre/TheatrePlugin.java @@ -13,10 +13,15 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import net.runelite.api.Client; +import java.util.LinkedList; +import java.util.List; import net.runelite.api.events.*; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; +import net.runelite.api.widgets.Widget; +import net.runelite.api.widgets.WidgetID; +import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginType; import net.runelite.client.plugins.theatre.rooms.BloatHandler; @@ -28,6 +33,7 @@ import net.runelite.client.plugins.theatre.rooms.nylocas.NyloHandler; import net.runelite.client.ui.overlay.OverlayManager; import javax.inject.Inject; +import java.awt.*; @PluginDescriptor( name = "Theatre of Blood", @@ -65,6 +71,8 @@ public class TheatrePlugin extends Plugin @Inject private Client client; + private Widget widget = null; + @Getter(AccessLevel.PUBLIC) @Inject private OverlayManager overlayManager; @@ -173,6 +181,25 @@ public class TheatrePlugin extends Plugin verzikHandler.onAnimationChanged(event); } + @Subscribe + public void onWidgetLoaded(WidgetLoaded event) + { + if (event.getGroupId() != WidgetID.PERFORMERS_FOR_THE_THEATRE_GROUPS_GROUP_ID && event.getGroupId() != WidgetID.PERFORMERS_FOR_THE_THEATRE_PLAYERS_GROUP_ID) + { + return; + } + + if (event.getGroupId() == WidgetID.PERFORMERS_FOR_THE_THEATRE_GROUPS_GROUP_ID) + { + widget = client.getWidget(WidgetID.PERFORMERS_FOR_THE_THEATRE_GROUPS_GROUP_ID, 0); + } + + if (event.getGroupId() == WidgetID.PERFORMERS_FOR_THE_THEATRE_PLAYERS_GROUP_ID) + { + widget = client.getWidget(WidgetID.PERFORMERS_FOR_THE_THEATRE_PLAYERS_GROUP_ID, 0); + } + } + @Subscribe public void onGameTick(GameTick event) { @@ -193,6 +220,95 @@ public class TheatrePlugin extends Plugin if (verzikHandler != null) verzikHandler.onGameTick(); + + if (widget == null) + { + return; + } + + // recheck if the widget is still active + int p_id = WidgetInfo.TO_GROUP(widget.getId()); + + List widgetList = new LinkedList<>(); + + if (p_id == WidgetID.PERFORMERS_FOR_THE_THEATRE_GROUPS_GROUP_ID) + { + Widget w = client.getWidget(p_id, 16); + if (w == null) + { + return; + } + + Widget[] ws = w.getStaticChildren(); + for (Widget widget : ws) + { + Widget[] widgets = widget.getDynamicChildren(); + if (widgets.length > 3) + { + widgetList.add(widgets[3]); + } + } + + } + else if (p_id == WidgetID.PERFORMERS_FOR_THE_THEATRE_PLAYERS_GROUP_ID) + { + Widget w1 = client.getWidget(p_id, 26); + + if (w1 != null) + { + Widget[] dChildsAccepted = w1.getDynamicChildren(); + + if (dChildsAccepted.length > 2) + { + for (int i = 1; i < dChildsAccepted.length; i += 11) + { + if (!dChildsAccepted[i].getText().equals("-")) + { + widgetList.add(dChildsAccepted[i]); + } + } + } + } + + Widget w2 = client.getWidget(p_id, 41); + + if (w2 != null) + { + Widget[] dChildsApplied = w2.getDynamicChildren(); + + if (dChildsApplied.length > 2) + { + for (int i = 1; i < dChildsApplied.length; i += 11) + { + if (!dChildsApplied[i].getText().equals("-")) + { + widgetList.add(dChildsApplied[i]); + } + } + } + } + } + + for (Widget w : widgetList) + { + String wtext = w.getText(); + if (client.isFriended(wtext, false)) + { + w.setTextColor(Color.green.getRGB()); + continue; + } + for (int i = 0; i < client.getIgnoreCount(); i++) + { + String name = client.getIgnores()[i].getName(); + if (name.replace('\u00A0', ' ').equals(wtext)) + { + w.setTextColor(Color.red.getRGB()); + break; + } + } + } + + widget = null; } @Subscribe diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java index 68ece82079..f6ad586274 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java @@ -57,6 +57,7 @@ public class WidgetOverlay extends Overlay .put(WidgetInfo.MULTICOMBAT_FIXED, OverlayPosition.BOTTOM_RIGHT) .put(WidgetInfo.MULTICOMBAT_RESIZEABLE, OverlayPosition.CANVAS_TOP_RIGHT) .put(WidgetInfo.PYRAMID_PLUNDER_DATA, OverlayPosition.TOP_CENTER) + .put(WidgetInfo.THEATRE_OF_BLOOD_HEALTH_ORBS, OverlayPosition.TOP_LEFT) .build(); public static Collection createOverlays(final Client client)