From 91906834d8382e4f921d609bd995a47c868b6bfa Mon Sep 17 00:00:00 2001 From: Owain van Brakel Date: Fri, 10 Jan 2020 14:38:44 +0100 Subject: [PATCH] statusorbs: Edit graceful recovery rate calculations The latest game update changes the way the graceful set works --- gradlew | 0 .../plugins/statusorbs/StatusOrbsOverlay.java | 5 +- .../plugins/statusorbs/StatusOrbsPlugin.java | 11 +-- .../net/runelite/client/util/Graceful.java | 75 ++++++++++++++++++- 4 files changed, 74 insertions(+), 17 deletions(-) mode change 100755 => 100644 gradlew diff --git a/gradlew b/gradlew old mode 100755 new mode 100644 diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/statusorbs/StatusOrbsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/statusorbs/StatusOrbsOverlay.java index e6e2fce619..8a61d65575 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/statusorbs/StatusOrbsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/statusorbs/StatusOrbsOverlay.java @@ -187,10 +187,7 @@ public class StatusOrbsOverlay extends Overlay { double recoverRate = (48 + client.getBoostedSkillLevel(Skill.AGILITY)) / 360000.0; - if (Graceful.hasFullSet(client.getItemContainer(InventoryID.EQUIPMENT))) - { - recoverRate *= 1.3; // 30% recover rate increase from Graceful set effect - } + recoverRate *= Graceful.calculateRecoveryRate(client.getItemContainer(InventoryID.EQUIPMENT)); percentRun += ms * recoverRate; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/statusorbs/StatusOrbsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/statusorbs/StatusOrbsPlugin.java index 976678f1ff..7a8e137ac7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/statusorbs/StatusOrbsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/statusorbs/StatusOrbsPlugin.java @@ -380,11 +380,7 @@ public class StatusOrbsPlugin extends Plugin // Calculate the amount of energy recovered every second double recoverRate = (48 + client.getBoostedSkillLevel(Skill.AGILITY)) / 360.0; - - if (Graceful.hasFullSet(client.getItemContainer(InventoryID.EQUIPMENT))) - { - recoverRate *= 1.3; // 30% recover rate increase from Graceful set effect - } + recoverRate *= Graceful.calculateRecoveryRate(client.getItemContainer(InventoryID.EQUIPMENT)); // Calculate the number of seconds left final double secondsLeft = (100 - client.getEnergy()) / recoverRate; @@ -430,11 +426,8 @@ public class StatusOrbsPlugin extends Plugin private double runRegenPerTick() { double recoverRate = (client.getBoostedSkillLevel(Skill.AGILITY) / 6d + 8) / 100; + recoverRate *= Graceful.calculateRecoveryRate(client.getItemContainer(InventoryID.EQUIPMENT)); - if (Graceful.hasFullSet(client.getItemContainer(InventoryID.EQUIPMENT))) - { - return recoverRate * 1.3; - } return recoverRate; } diff --git a/runelite-client/src/main/java/net/runelite/client/util/Graceful.java b/runelite-client/src/main/java/net/runelite/client/util/Graceful.java index 4cd05ec128..27f6577d78 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/Graceful.java +++ b/runelite-client/src/main/java/net/runelite/client/util/Graceful.java @@ -78,20 +78,87 @@ public enum Graceful this.ids = ImmutableSet.copyOf(ids); } - public static boolean hasFullSet(final ItemContainer equipment) + public static double calculateRecoveryRate(final ItemContainer equipment) { + double rate = 1; + if (equipment == null) { - return false; + return rate; } final Item[] items = equipment.getItems(); - if (equipment == null || items.length <= EquipmentInventorySlot.BOOTS.getSlotIdx()) + if (hasFullSet(items)) { - return false; + return 1.3; } + if (hasHood(items)) + { + rate += 0.03; + } + + if (hasTop(items)) + { + rate += 0.04; + } + + if (hasLegs(items)) + { + rate += 0.04; + } + + if (hasGloves(items)) + { + rate += 0.03; + } + + if (hasBoots(items)) + { + rate += 0.03; + } + + if (hasCape(items)) + { + rate += 0.03; + } + + return rate; + } + + public static boolean hasHood(final Item[] items) + { + return HOOD.ids.contains(items[EquipmentInventorySlot.HEAD.getSlotIdx()].getId()); + } + + public static boolean hasTop(final Item[] items) + { + return TOP.ids.contains(items[EquipmentInventorySlot.BODY.getSlotIdx()].getId()); + } + + public static boolean hasLegs(final Item[] items) + { + return LEGS.ids.contains(items[EquipmentInventorySlot.LEGS.getSlotIdx()].getId()); + } + + public static boolean hasGloves(final Item[] items) + { + return GLOVES.ids.contains(items[EquipmentInventorySlot.GLOVES.getSlotIdx()].getId()); + } + + public static boolean hasBoots(final Item[] items) + { + return BOOTS.ids.contains(items[EquipmentInventorySlot.BOOTS.getSlotIdx()].getId()); + } + + public static boolean hasCape(final Item[] items) + { + return CAPE.ids.contains(items[EquipmentInventorySlot.CAPE.getSlotIdx()].getId()); + } + + public static boolean hasFullSet(final Item[] items) + { return HOOD.ids.contains(items[EquipmentInventorySlot.HEAD.getSlotIdx()].getId()) && TOP.ids.contains(items[EquipmentInventorySlot.BODY.getSlotIdx()].getId()) && LEGS.ids.contains(items[EquipmentInventorySlot.LEGS.getSlotIdx()].getId())