diff --git a/runelite-api/src/main/java/net/runelite/api/GraphicID.java b/runelite-api/src/main/java/net/runelite/api/GraphicID.java index 7f2b0e267d..25b527c8a2 100644 --- a/runelite-api/src/main/java/net/runelite/api/GraphicID.java +++ b/runelite-api/src/main/java/net/runelite/api/GraphicID.java @@ -1,5 +1,6 @@ /* * Copyright (c) 2018, Adam + * Copyright (c) 2019, Ganom * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -27,8 +28,8 @@ package net.runelite.api; public class GraphicID { public static final int SPLASH = 85; - public static final int TELEPORT = 111; public static final int GREY_BUBBLE_TELEPORT = 86; + public static final int TELEPORT = 111; public static final int ENTANGLE = 179; public static final int SNARE = 180; public static final int BIND = 181; @@ -38,6 +39,9 @@ public class GraphicID public static final int ICE_BARRAGE = 369; public static final int VENGEANCE_OTHER = 725; public static final int VENGEANCE = 726; + public static final int NPC_CONTACT = 728; + public static final int POT_SHARE = 733; + public static final int BAKE_PIE = 746; public static final int BOOK_HOME_TELEPORT_1 = 800; public static final int BOOK_HOME_TELEPORT_2 = 802; public static final int BOOK_HOME_TELEPORT_3 = 803; @@ -45,8 +49,7 @@ public class GraphicID public static final int STAFF_OF_THE_DEAD = 1228; public static final int IMBUED_HEART = 1316; public static final int FLYING_FISH = 1387; - public static final int NPC_CONTACT = 728; - public static final int POT_SHARE = 733; - public static final int BAKE_PIE = 746; + public static final int OLM_BURN = 1351; + public static final int OLM_TELEPORT = 1359; public static final int XERIC_TELEPORT = 1612; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zcox/CoxConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/CoxConfig.java similarity index 80% rename from runelite-client/src/main/java/net/runelite/client/plugins/zcox/CoxConfig.java rename to runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/CoxConfig.java index 3d3db3cbb0..2800455312 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/zcox/CoxConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/CoxConfig.java @@ -23,7 +23,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package net.runelite.client.plugins.zcox; +package net.runelite.client.plugins.coxhelper; import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; @@ -68,11 +68,33 @@ public interface CoxConfig extends Config @ConfigItem( position = 3, - keyName = "OlmSpec", - name = "Olm Next Spec", - description = "" + keyName = "prayAgainstOlm", + name = "Olm Show Prayer", + description = "Shows what prayer to use during olm." ) - default boolean OlmSpec() + default boolean prayAgainstOlm() + { + return true; + } + + @ConfigItem( + position = 3, + keyName = "timers", + name = "Olm Show Burn/Acid Timers", + description = "Shows tick timers for burns/acids." + ) + default boolean timers() + { + return true; + } + + @ConfigItem( + position = 3, + keyName = "tpOverlay", + name = "Olm Show Teleport Overlays", + description = "Shows Overlays for targeted teleports." + ) + default boolean tpOverlay() { return true; } @@ -81,33 +103,11 @@ public interface CoxConfig extends Config position = 4, keyName = "OlmTick", name = "Olm Tick Counter", - description = "" + description = "Show Tick Counter on Olm" ) default boolean OlmTick() { return true; } - @ConfigItem( - position = 5, - keyName = "OlmCrystals", - name = "Olm AoE Indicator", - description = "" - ) - default boolean OlmCrystals() - { - return true; - } - - @ConfigItem( - position = 6, - keyName = "LargeCrystals", - name = "Mark Large AoE Crystals rather then small ones", - description = "" - ) - default boolean LargeCrystals() - { - return true; - } - } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zcox/CoxOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/CoxOverlay.java similarity index 95% rename from runelite-client/src/main/java/net/runelite/client/plugins/zcox/CoxOverlay.java rename to runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/CoxOverlay.java index 3c5f3d2cb3..3594bf07f1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/zcox/CoxOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/CoxOverlay.java @@ -23,7 +23,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package net.runelite.client.plugins.zcox; +package net.runelite.client.plugins.coxhelper; import java.awt.BasicStroke; import java.awt.Color; @@ -75,7 +75,6 @@ public class CoxOverlay extends Overlay if (config.Muttadile()) { NPC boss = plugin.getMomma_NPC(); - NPC baby = plugin.getMutta_NPC(); if (boss != null) { @@ -84,9 +83,7 @@ public class CoxOverlay extends Overlay { size = composition.getSize(); } - List meleeRangeMom = getHitSquares(boss.getWorldLocation(), size, 1, false); - for (WorldPoint p : meleeRangeMom) { drawTile(graphics, p, Color.RED, 2, 155, 10); @@ -99,9 +96,7 @@ public class CoxOverlay extends Overlay { size = compositionbaby.getSize(); } - List meleeRange = getHitSquares(baby.getWorldLocation(), size, 1, false); - for (WorldPoint p : meleeRange) { drawTile(graphics, p, Color.RED, 1, 155, 10); @@ -127,9 +122,7 @@ public class CoxOverlay extends Overlay { size = composition.getSize(); } - List meleeRange = getHitSquares(G1.getWorldLocation(), size, 1, true); - for (WorldPoint p : meleeRange) { drawTile(graphics, p, Color.GREEN, 1, 155, 10); @@ -142,9 +135,7 @@ public class CoxOverlay extends Overlay { size = composition.getSize(); } - List meleeRange = getHitSquares(G2.getWorldLocation(), size, 1, true); - for (WorldPoint p : meleeRange) { drawTile(graphics, p, Color.GREEN, 1, 155, 10); @@ -159,9 +150,7 @@ public class CoxOverlay extends Overlay { if (config.Tekton()) { - NPC boss = plugin.getTekton_NPC(); - if (boss != null) { int size = 1; @@ -169,9 +158,7 @@ public class CoxOverlay extends Overlay { size = composition.getSize(); } - List meleeRange = getHitSquares(boss.getWorldLocation(), size, 1, false); - for (WorldPoint p : meleeRange) { drawTile(graphics, p, Color.WHITE, 1, 155, 10); @@ -183,28 +170,7 @@ public class CoxOverlay extends Overlay if (plugin.isRunOlm()) { NPC boss = plugin.getOlm_NPC(); - if (config.OlmCrystals()) - { - for (WorldPoint p : plugin.getOlm_Crystals()) - { - drawTile(graphics, p, Color.RED, 1, 255, 0); - } - for (WorldPoint p : plugin.getOlm_Heal()) - { - drawTile(graphics, p, Color.BLUE, 3, 255, 0); - } - for (WorldPoint p : plugin.getOlm_PSN()) - { - drawTile(graphics, p, Color.GREEN, 3, 255, 0); - } - - } - if (config.OlmSpec()) - { - - - } if (config.OlmTick()) { if (boss != null) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zcox/CoxPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/CoxPlugin.java similarity index 87% rename from runelite-client/src/main/java/net/runelite/client/plugins/zcox/CoxPlugin.java rename to runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/CoxPlugin.java index d1450ad838..800e0be593 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/zcox/CoxPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/CoxPlugin.java @@ -24,7 +24,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package net.runelite.client.plugins.zcox; +package net.runelite.client.plugins.coxhelper; import com.google.inject.Provides; import java.util.ArrayList; @@ -35,7 +35,9 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; +import net.runelite.api.Actor; import net.runelite.api.Client; +import net.runelite.api.GraphicID; import net.runelite.api.GraphicsObject; import net.runelite.api.MessageNode; import net.runelite.api.NPC; @@ -46,6 +48,7 @@ import net.runelite.api.Varbits; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.ChatMessage; import net.runelite.api.events.GameTick; +import net.runelite.api.events.GraphicChanged; import net.runelite.api.events.NpcDespawned; import net.runelite.api.events.NpcSpawned; import net.runelite.api.events.ProjectileMoved; @@ -58,7 +61,7 @@ import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( - name = "CoX Helper ", + name = "CoX Helper", description = "All-in-one plugin for Chambers of Xeric", tags = {"CoX", "chamber", "xeric", "helper"}, enabledByDefault = false, @@ -73,40 +76,73 @@ public class CoxPlugin extends Plugin private static final int GRAPHICSOBJECT_ID_CRYSTAL = 1447; private static final int GRAPHICSOBJECT_ID_HEAL = 1363; private static final int ANIMATION_ID_G1 = 430; - int sleepcount = 0; - private boolean needOlm = false; - @Getter(AccessLevel.PACKAGE) - private int guardTick = -1; - @Getter(AccessLevel.PACKAGE) - private boolean runGuard = false; - @Getter(AccessLevel.PACKAGE) - private NPC Guard1_NPC; - @Getter(AccessLevel.PACKAGE) - private NPC Guard2_NPC; private static final String OLM_HAND_CRIPPLE = "The Great Olm\'s left claw clenches to protect itself temporarily."; + private int sleepcount = 0; + private boolean needOlm = false; + @Inject private Client client; - @Getter(AccessLevel.PACKAGE) - private boolean HandCripple; - @Getter(AccessLevel.PACKAGE) - private int timer = 45; - @Getter(AccessLevel.PACKAGE) - private NPC hand; + + @Inject + private ChatMessageManager chatMessageManager; + + @Inject + private CoxOverlay overlay; + + @Inject + private TimersOverlay timersOverlay; + + @Inject + private CoxConfig config; + @Inject private OverlayManager overlayManager; + @Inject private OlmCrippleTimerOverlay olmCrippleTimerOverlay; - @Setter - @Getter - protected PrayAgainst prayAgainstOlm; - @Getter - protected long lastPrayTime; + @Inject private OlmPrayAgainstOverlay prayAgainstOverlay; + @Setter + @Getter(AccessLevel.PACKAGE) + protected PrayAgainst prayAgainstOlm; + @Getter(AccessLevel.PACKAGE) private boolean runMutta; + @Getter(AccessLevel.PACKAGE) + private boolean runTekton; + + @Getter(AccessLevel.PACKAGE) + private boolean runVanguards; + + @Getter(AccessLevel.PACKAGE) + private boolean runGuard = false; + + @Getter(AccessLevel.PACKAGE) + private boolean HandCripple; + + @Getter(AccessLevel.PACKAGE) + private boolean runOlm; + + @Getter(AccessLevel.PACKAGE) + private NPC Guard1_NPC; + + @Getter(AccessLevel.PACKAGE) + private NPC Guard2_NPC; + + @Getter(AccessLevel.PACKAGE) + private NPC Tekton_NPC; + + @Getter(AccessLevel.PACKAGE) + private NPC hand; + + @Getter(AccessLevel.PACKAGE) + private NPC Olm_NPC; + + @Getter(AccessLevel.PACKAGE) + private NPC OlmMelee_NPC; @Getter(AccessLevel.PACKAGE) private NPC Mutta_NPC; @@ -114,22 +150,9 @@ public class CoxPlugin extends Plugin @Getter(AccessLevel.PACKAGE) private NPC Momma_NPC; - @Getter(AccessLevel.PACKAGE) - private int OlmPhase = 0; - - @Getter(AccessLevel.PACKAGE) - private boolean runTekton; - - @Getter(AccessLevel.PACKAGE) - private NPC Tekton_NPC; - - @Getter(AccessLevel.PACKAGE) - private boolean runVanguards; - @Getter(AccessLevel.PACKAGE) private NPC meleeVanguard_NPC; - @Getter(AccessLevel.PACKAGE) private NPC mageVanguard_NPC; @@ -137,13 +160,40 @@ public class CoxPlugin extends Plugin private NPC rangeVanguard_NPC; @Getter(AccessLevel.PACKAGE) - private boolean runOlm; + private List Olm_Crystals = new ArrayList<>(); @Getter(AccessLevel.PACKAGE) - private NPC Olm_NPC; + private List Olm_Heal = new ArrayList<>(); @Getter(AccessLevel.PACKAGE) - private NPC OlmMelee_NPC; + private List Olm_PSN = new ArrayList<>(); + + @Getter(AccessLevel.PACKAGE) + private List burnTarget = new ArrayList<>(); + + @Getter(AccessLevel.PACKAGE) + private List teleportTarget = new ArrayList<>(); + + @Getter(AccessLevel.PACKAGE) + private Actor acidTarget; + + @Getter(AccessLevel.PACKAGE) + private int timer = 45; + + @Getter(AccessLevel.PACKAGE) + private int burnTicks = 41; + + @Getter(AccessLevel.PACKAGE) + private int acidTicks = 25; + + @Getter(AccessLevel.PACKAGE) + private int teleportTicks = 10; + + @Getter(AccessLevel.PACKAGE) + private int guardTick = -1; + + @Getter(AccessLevel.PACKAGE) + private int OlmPhase = 0; @Getter(AccessLevel.PACKAGE) private int Olm_TicksUntilAction = -1; @@ -155,22 +205,7 @@ public class CoxPlugin extends Plugin private int Olm_NextSpec = -1; // 1= crystals 2=lightnig 3=portals 4= heal hand if p4 @Getter(AccessLevel.PACKAGE) - private List Olm_Crystals = new ArrayList<>(); - - @Getter(AccessLevel.PACKAGE) - private List Olm_Heal = new ArrayList<>(); - - @Getter(AccessLevel.PACKAGE) - private List Olm_PSN = new ArrayList<>(); - - @Inject - private ChatMessageManager chatMessageManager; - - @Inject - private CoxOverlay overlay; - - @Inject - private CoxConfig config; + protected long lastPrayTime; @Provides CoxConfig getConfig(ConfigManager configManager) @@ -184,6 +219,7 @@ public class CoxPlugin extends Plugin overlayManager.add(overlay); overlayManager.add(olmCrippleTimerOverlay); overlayManager.add(prayAgainstOverlay); + overlayManager.add(timersOverlay); } @Override @@ -192,8 +228,14 @@ public class CoxPlugin extends Plugin overlayManager.remove(overlay); overlayManager.remove(olmCrippleTimerOverlay); overlayManager.remove(prayAgainstOverlay); + overlayManager.remove(timersOverlay); HandCripple = false; + acidTarget = null; + teleportTarget.clear(); + burnTarget.clear(); timer = 45; + burnTicks = 40; + acidTicks = 25; hand = null; } @@ -205,7 +247,6 @@ public class CoxPlugin extends Plugin if (messageNode.getValue().toLowerCase().contains("The Great Olm rises with the power of".toLowerCase()) || messageNode.getValue().toLowerCase().contains("!olm".toLowerCase())) { - System.out.println("finding Olm NPC"); if (!runOlm) { Olm_ActionCycle = -1; @@ -224,7 +265,6 @@ public class CoxPlugin extends Plugin if (messageNode.getValue().toLowerCase().contains("The Great Olm is giving its all. this is its final stand".toLowerCase())) { - System.out.println("finding Olm NPC"); if (!runOlm) { Olm_ActionCycle = -1; @@ -236,7 +276,6 @@ public class CoxPlugin extends Plugin Olm_TicksUntilAction = 3; } OlmPhase = 1; - System.out.println("OLM PHASE:" + OlmPhase); runOlm = true; needOlm = true; Olm_NextSpec = -1; @@ -248,19 +287,16 @@ public class CoxPlugin extends Plugin } if (messageNode.getValue().toLowerCase().contains("aggression")) { - log.debug("Melee Detected"); prayAgainstOlm = PrayAgainst.MELEE; lastPrayTime = System.currentTimeMillis(); } if (messageNode.getValue().toLowerCase().contains("of magical power")) { - log.debug("Mage Detected"); prayAgainstOlm = PrayAgainst.MAGIC; lastPrayTime = System.currentTimeMillis(); } if (messageNode.getValue().toLowerCase().contains("accuracy and dexterity")) { - log.debug("Missile Detected"); prayAgainstOlm = PrayAgainst.RANGED; lastPrayTime = System.currentTimeMillis(); } @@ -272,16 +308,33 @@ public class CoxPlugin extends Plugin Projectile projectile = event.getProjectile(); if (projectile.getId() == ProjectileID.OLM_MAGE_ATTACK) { - log.debug("Mage Detected"); prayAgainstOlm = PrayAgainst.MAGIC; lastPrayTime = System.currentTimeMillis(); } if (projectile.getId() == ProjectileID.OLM_RANGE_ATTACK) { - log.debug("Range Detected"); prayAgainstOlm = PrayAgainst.RANGED; lastPrayTime = System.currentTimeMillis(); } + if (projectile.getId() == ProjectileID.OLM_ACID_TRAIL) + { + acidTarget = projectile.getInteracting(); + } + } + + @Subscribe + public void onGraphicChanged(GraphicChanged graphicChanged) + { + Actor actor = graphicChanged.getActor(); + + if (actor.getGraphic() == GraphicID.OLM_BURN) + { + burnTarget.add(actor); + } + if (actor.getGraphic() == GraphicID.OLM_TELEPORT) + { + teleportTarget.add(actor); + } } @Subscribe @@ -365,8 +418,8 @@ public class CoxPlugin extends Plugin case NpcID.GUARDIAN_7571: case NpcID.GUARDIAN_7572: Guard1_NPC = null; - runGuard = false; Guard2_NPC = null; + runGuard = false; break; case NpcID.GREAT_OLM_RIGHT_CLAW_7553: case NpcID.GREAT_OLM_LEFT_CLAW: @@ -379,6 +432,33 @@ public class CoxPlugin extends Plugin @Subscribe public void onGameTick(GameTick event) { + if (acidTarget != null) + { + acidTicks--; + if (acidTicks <= 0) + { + acidTarget = null; + acidTicks = 25; + } + } + if (teleportTarget.size() > 0) + { + teleportTicks--; + if (teleportTicks <= 0) + { + teleportTarget.clear(); + teleportTicks = 10; + } + } + if (burnTarget.size() > 0) + { + burnTicks--; + if (burnTicks <= 0) + { + burnTarget.clear(); + burnTicks = 41; + } + } if (client.getVar(Varbits.IN_RAID) == 0) { @@ -391,10 +471,6 @@ public class CoxPlugin extends Plugin sleepcount = 0; Olm_Heal.clear(); } - else - { - - } if (HandCripple) { @@ -413,14 +489,8 @@ public class CoxPlugin extends Plugin { needOlm = false; Olm_NPC = monster; - System.out.println("Found olm Npc"); break; } - else - { - continue; - } - } } @@ -512,20 +582,12 @@ public class CoxPlugin extends Plugin for (int y = -1; y <= 1; y++) { newloc = WorldPoint.fromLocal(client, o.getLocation()); - - if (config.LargeCrystals()) - { - newloc = newloc.dx(x); - newloc = newloc.dy(y); - } + newloc = newloc.dx(x); + newloc = newloc.dy(y); Olm_Crystals.add(newloc); } - } - - } - if (sleepcount <= 0) { if (o.getId() == 1338) @@ -534,7 +596,6 @@ public class CoxPlugin extends Plugin Olm_NextSpec = 2; Olm_ActionCycle = 4; //spec=1 null=3 sleepcount = 5; - System.out.println("setting off 1338 id - crystals"); } if (o.getId() == 1356) { @@ -542,9 +603,7 @@ public class CoxPlugin extends Plugin Olm_NextSpec = 1; Olm_ActionCycle = 4; //spec=1 null=3 sleepcount = 50; - System.out.println("setting off 1338 id - lighning"); } - } @@ -553,9 +612,6 @@ public class CoxPlugin extends Plugin Olm_Heal.add(WorldPoint.fromLocal(client, o.getLocation())); } } - } } - - } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zcox/OlmCrippleTimerOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/OlmCrippleTimerOverlay.java similarity index 98% rename from runelite-client/src/main/java/net/runelite/client/plugins/zcox/OlmCrippleTimerOverlay.java rename to runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/OlmCrippleTimerOverlay.java index e6eeafb62b..3b64258c29 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/zcox/OlmCrippleTimerOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/OlmCrippleTimerOverlay.java @@ -23,7 +23,7 @@ * (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.zcox; +package net.runelite.client.plugins.coxhelper; import java.awt.Color; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zcox/OlmPrayAgainstOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/OlmPrayAgainstOverlay.java similarity index 84% rename from runelite-client/src/main/java/net/runelite/client/plugins/zcox/OlmPrayAgainstOverlay.java rename to runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/OlmPrayAgainstOverlay.java index 7e8d6cf5eb..cab136d9da 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/zcox/OlmPrayAgainstOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/OlmPrayAgainstOverlay.java @@ -22,7 +22,7 @@ * (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.zcox; +package net.runelite.client.plugins.coxhelper; import java.awt.Color; import java.awt.Dimension; @@ -37,22 +37,25 @@ import net.runelite.api.SpriteID; import net.runelite.client.game.SpriteManager; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayPosition; +import net.runelite.client.ui.overlay.components.ComponentConstants; import net.runelite.client.ui.overlay.components.ComponentOrientation; import net.runelite.client.ui.overlay.components.InfoBoxComponent; import net.runelite.client.ui.overlay.components.PanelComponent; class OlmPrayAgainstOverlay extends Overlay { - + private static final Color NOT_ACTIVATED_BACKGROUND_COLOR = new Color(150, 0, 0, 150); private final CoxPlugin plugin; + private final CoxConfig config; private final Client client; private final SpriteManager spriteManager; private final PanelComponent panelComponent = new PanelComponent(); @Inject - OlmPrayAgainstOverlay(CoxPlugin plugin, Client client, SpriteManager spriteManager) + OlmPrayAgainstOverlay(CoxPlugin plugin, CoxConfig config, Client client, SpriteManager spriteManager) { this.plugin = plugin; + this.config = config; this.client = client; this.spriteManager = spriteManager; setPosition(OverlayPosition.BOTTOM_RIGHT); @@ -61,7 +64,8 @@ class OlmPrayAgainstOverlay extends Overlay public Dimension render(Graphics2D graphics2D) { - if (plugin.getPrayAgainstOlm() == null) + final PrayAgainst prayAgainst = plugin.getPrayAgainstOlm(); + if (plugin.getPrayAgainstOlm() == null && !config.prayAgainstOlm()) { return null; } @@ -74,6 +78,9 @@ class OlmPrayAgainstOverlay extends Overlay Image prayImg = scaleImg(getPrayerImage(plugin.prayAgainstOlm)); prayComponent.setImage(prayImg); prayComponent.setColor(Color.WHITE); + prayComponent.setBackgroundColor(client.isPrayerActive(prayAgainst.getPrayer()) + ? ComponentConstants.STANDARD_BACKGROUND_COLOR + : NOT_ACTIVATED_BACKGROUND_COLOR); prayComponent.setPreferredSize(new Dimension(40, 40)); panelComponent.getChildren().add(prayComponent); @@ -85,6 +92,10 @@ class OlmPrayAgainstOverlay extends Overlay { plugin.setPrayAgainstOlm(null); } + if (client.getLocalPlayer().getWorldLocation().getRegionID() == 4919) + { + plugin.setPrayAgainstOlm(null); + } return null; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zcox/PrayAgainst.java b/runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/PrayAgainst.java similarity index 80% rename from runelite-client/src/main/java/net/runelite/client/plugins/zcox/PrayAgainst.java rename to runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/PrayAgainst.java index ec9503a074..d35815e0c7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/zcox/PrayAgainst.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/PrayAgainst.java @@ -22,11 +22,25 @@ * (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.zcox; +package net.runelite.client.plugins.coxhelper; -enum PrayAgainst +import net.runelite.api.Prayer; + +public enum PrayAgainst { - MELEE, - MAGIC, - RANGED + MELEE(Prayer.PROTECT_FROM_MELEE), + MAGIC(Prayer.PROTECT_FROM_MAGIC), + RANGED(Prayer.PROTECT_FROM_MISSILES); + + private final Prayer prayer; + + PrayAgainst(Prayer prayer) + { + this.prayer = prayer; + } + + public Prayer getPrayer() + { + return prayer; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/TimersOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/TimersOverlay.java new file mode 100644 index 0000000000..eda5b7f055 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/TimersOverlay.java @@ -0,0 +1,145 @@ +package net.runelite.client.plugins.coxhelper; + +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Graphics2D; +import java.awt.Polygon; +import javax.inject.Inject; +import net.runelite.api.Actor; +import net.runelite.api.Client; +import net.runelite.api.Perspective; +import net.runelite.api.Point; +import net.runelite.api.coords.LocalPoint; +import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayLayer; +import net.runelite.client.ui.overlay.OverlayPosition; +import net.runelite.client.ui.overlay.OverlayPriority; +import net.runelite.client.ui.overlay.OverlayUtil; + +public class TimersOverlay extends Overlay +{ + + private CoxPlugin plugin; + private CoxConfig config; + private Client client; + private Color tickcolor = new Color(255, 255, 255, 255); + + @Inject + TimersOverlay(CoxPlugin plugin, CoxConfig config, Client client) + { + this.plugin = plugin; + this.config = config; + this.client = client; + setPosition(OverlayPosition.DYNAMIC); + setPriority(OverlayPriority.HIGHEST); + setLayer(OverlayLayer.ALWAYS_ON_TOP); + } + + @Override + public Dimension render(Graphics2D graphics) + { + if (config.timers()) + { + if (plugin.getBurnTarget().size() > 0) + { + for (Actor actor : plugin.getBurnTarget()) + { + renderNpcOverlay(graphics, actor, new Color(255, 100, 0, 255), 2, 100, 10); + final int ticksLeft = plugin.getBurnTicks(); + String ticksLeftStr = String.valueOf(ticksLeft); + if (ticksLeft >= 0) + { + if (ticksLeft == 34 || + ticksLeft == 33 || + ticksLeft == 26 || + ticksLeft == 25 || + ticksLeft == 18 || + ticksLeft == 17 || + ticksLeft == 10 || + ticksLeft == 9 || + ticksLeft == 2 || + ticksLeft == 1) + { + tickcolor = new Color(255, 0, 0, 255); + ticksLeftStr = "GAP"; + } + else + { + tickcolor = new Color(255, 255, 255, 255); + } + Point canvasPoint = actor.getCanvasTextLocation(graphics, ticksLeftStr, 0); + renderTextLocation(graphics, ticksLeftStr, 14, Font.BOLD, tickcolor, canvasPoint); + } + } + } + + if (plugin.getAcidTarget() != null) + { + Actor actor = plugin.getAcidTarget(); + renderNpcOverlay(graphics, actor, new Color(69, 241, 44, 255), 2, 100, 10); + final int ticksLeft = plugin.getAcidTicks(); + if (ticksLeft > 0) + { + if (ticksLeft > 1) + { + tickcolor = new Color(69, 241, 44, 255); + } + else + { + tickcolor = new Color(255, 255, 255, 255); + } + final String ticksLeftStr = String.valueOf(ticksLeft); + Point canvasPoint = actor.getCanvasTextLocation(graphics, ticksLeftStr, 0); + renderTextLocation(graphics, ticksLeftStr, 14, Font.BOLD, tickcolor, canvasPoint); + } + } + } + + if (config.tpOverlay()) + { + if (plugin.getTeleportTarget().size() > 0) + { + for (Actor actor : plugin.getTeleportTarget()) + { + renderNpcOverlay(graphics, actor, new Color(193, 255, 245, 255), 2, 100, 10); + } + } + } + + return null; + } + + private void renderNpcOverlay(Graphics2D graphics, Actor actor, Color color, int outlineWidth, int outlineAlpha, int fillAlpha) + { + int size = 1; + LocalPoint lp = actor.getLocalLocation(); + Polygon tilePoly = Perspective.getCanvasTileAreaPoly(client, lp, size); + + if (tilePoly != null) + { + graphics.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(), outlineAlpha)); + graphics.setStroke(new BasicStroke(outlineWidth)); + graphics.draw(tilePoly); + graphics.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(), fillAlpha)); + graphics.fill(tilePoly); + } + } + + private void renderTextLocation(Graphics2D graphics, String txtString, int fontSize, int fontStyle, Color fontColor, Point canvasPoint) + { + graphics.setFont(new Font("Arial", fontStyle, fontSize)); + if (canvasPoint != null) + { + final Point canvasCenterPoint = new Point( + canvasPoint.getX(), + canvasPoint.getY()); + final Point canvasCenterPoint_shadow = new Point( + canvasPoint.getX() + 1, + canvasPoint.getY() + 1); + OverlayUtil.renderTextLocation(graphics, canvasCenterPoint_shadow, txtString, Color.BLACK); + OverlayUtil.renderTextLocation(graphics, canvasCenterPoint, txtString, fontColor); + } + } +}