diff --git a/http-api/src/main/java/net/runelite/http/api/RuneLiteAPI.java b/http-api/src/main/java/net/runelite/http/api/RuneLiteAPI.java index c79d04056a..9155b39ecf 100644 --- a/http-api/src/main/java/net/runelite/http/api/RuneLiteAPI.java +++ b/http-api/src/main/java/net/runelite/http/api/RuneLiteAPI.java @@ -96,28 +96,56 @@ public class RuneLiteAPI .build(); } - public static HttpUrl getApiRoot() + public static HttpUrl getSessionBase() { - return HttpUrl.parse(BASE); + final String prop = System.getProperty("runelite.session.url"); + + if (prop != null && !prop.isEmpty()) + { + return HttpUrl.parse(prop); + } + + return HttpUrl.parse(BASE + "/session"); } - public static HttpUrl getSessionBase() + public static HttpUrl getRuneLitePlusSessionBase() { return HttpUrl.parse(RLPLUS); } public static HttpUrl getApiBase() { + final String prop = System.getProperty("runelite.http-service.url"); + + if (prop != null && !prop.isEmpty()) + { + return HttpUrl.parse(prop); + } + return HttpUrl.parse(BASE + "/runelite-" + getVersion()); } public static HttpUrl getStaticBase() { + final String prop = System.getProperty("runelite.static.url"); + + if (prop != null && !prop.isEmpty()) + { + return HttpUrl.parse(prop); + } + return HttpUrl.parse(STATICBASE); } public static HttpUrl getWsEndpoint() { + final String prop = System.getProperty("runelite.ws.url"); + + if (prop != null && !prop.isEmpty()) + { + return HttpUrl.parse(prop); + } + return HttpUrl.parse(WSBASE); } diff --git a/runelite-api/src/main/java/net/runelite/api/Experience.java b/runelite-api/src/main/java/net/runelite/api/Experience.java index 088a88d544..d83a61c97b 100644 --- a/runelite-api/src/main/java/net/runelite/api/Experience.java +++ b/runelite-api/src/main/java/net/runelite/api/Experience.java @@ -24,9 +24,6 @@ */ package net.runelite.api; -import static java.lang.Math.floor; -import static java.lang.Math.max; - /** * A utility class used for calculating experience related values. *
@@ -127,6 +124,15 @@ public class Experience return high + 1; } + private static double getMeleeRangeOrMagicCombatLevelContribution(int attackLevel, int strengthLevel, int magicLevel, int rangeLevel) + { + double melee = 0.325 * (attackLevel + strengthLevel); + double range = 0.325 * (Math.floor(rangeLevel / 2) + rangeLevel); + double magic = 0.325 * (Math.floor(magicLevel / 2) + magicLevel); + + return Math.max(melee, Math.max(range, magic)); + } + /** * Calculates a non-virtual high-precision combat level without integer * rounding. @@ -146,13 +152,11 @@ public class Experience int defenceLevel, int hitpointsLevel, int magicLevel, int rangeLevel, int prayerLevel) { - double base = 0.25 * (defenceLevel + hitpointsLevel + floor(prayerLevel / 2)); + double base = 0.25 * (defenceLevel + hitpointsLevel + Math.floor(prayerLevel / 2)); - double melee = 0.325 * (attackLevel + strengthLevel); - double range = 0.325 * (floor(rangeLevel / 2) + rangeLevel); - double magic = 0.325 * (floor(magicLevel / 2) + magicLevel); + double typeContribution = getMeleeRangeOrMagicCombatLevelContribution(attackLevel, strengthLevel, magicLevel, rangeLevel); - return base + max(melee, max(range, magic)); + return base + typeContribution; } /** @@ -173,4 +177,101 @@ public class Experience { return (int) getCombatLevelPrecise(attackLevel, strengthLevel, defenceLevel, hitpointsLevel, magicLevel, rangeLevel, prayerLevel); } + + /** + * Calculate number of attack/strength levels required to increase combat level. + * + * @param attackLevel the attack level + * @param strengthLevel the strength level + * @param defenceLevel the defence level + * @param hitpointsLevel the hitpoints level + * @param magicLevel the magic level + * @param rangeLevel the range level + * @param prayerLevel the prayer level + * @return the number of levels required + */ + public static int getNextCombatLevelMelee(int attackLevel, int strengthLevel, int defenceLevel, int hitpointsLevel, + int magicLevel, int rangeLevel, int prayerLevel) + { + int nextCombatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel, magicLevel, rangeLevel, prayerLevel) + 1; + return (int) Math.ceil(-10. / 13 * (defenceLevel + hitpointsLevel + Math.floor(prayerLevel / 2) - 4 * nextCombatLevel)) - strengthLevel - attackLevel; + } + + /** + * Calculate number of hitpoints/defence levels required to increase combat level. + * + * @param attackLevel the attack level + * @param strengthLevel the strength level + * @param defenceLevel the defence level + * @param hitpointsLevel the hitpoints level + * @param magicLevel the magic level + * @param rangeLevel the range level + * @param prayerLevel the prayer level + * @return the number of levels required + */ + public static int getNextCombatLevelHpDef(int attackLevel, int strengthLevel, int defenceLevel, int hitpointsLevel, + int magicLevel, int rangeLevel, int prayerLevel) + { + int nextCombatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel, magicLevel, rangeLevel, prayerLevel) + 1; + double typeContribution = Experience.getMeleeRangeOrMagicCombatLevelContribution(attackLevel, strengthLevel, magicLevel, rangeLevel); + return (int) Math.ceil(4 * nextCombatLevel - Math.floor(prayerLevel / 2) - 4 * typeContribution) - hitpointsLevel - defenceLevel; + } + + /** + * Calculate number of magic levels required to increase combat level. + * + * @param attackLevel the attack level + * @param strengthLevel the strength level + * @param defenceLevel the defence level + * @param hitpointsLevel the hitpoints level + * @param magicLevel the magic level + * @param rangeLevel the range level + * @param prayerLevel the prayer level + * @return the number of levels required + */ + public static int getNextCombatLevelMagic(int attackLevel, int strengthLevel, int defenceLevel, int hitpointsLevel, + int magicLevel, int rangeLevel, int prayerLevel) + { + int nextCombatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel, magicLevel, rangeLevel, prayerLevel) + 1; + return (int) Math.ceil(2. / 3 * Math.ceil(-10. / 13 * (hitpointsLevel + defenceLevel - 4 * nextCombatLevel + Math.floor(prayerLevel / 2)))) - magicLevel; + } + + /** + * Calculate number of ranged levels required to increase combat level. + * + * @param attackLevel the attack level + * @param strengthLevel the strength level + * @param defenceLevel the defence level + * @param hitpointsLevel the hitpoints level + * @param magicLevel the magic level + * @param rangeLevel the range level + * @param prayerLevel the prayer level + * @return the number of levels required + */ + public static int getNextCombatLevelRange(int attackLevel, int strengthLevel, int defenceLevel, int hitpointsLevel, + int magicLevel, int rangeLevel, int prayerLevel) + { + int nextCombatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel, magicLevel, rangeLevel, prayerLevel) + 1; + return (int) Math.ceil(2. / 3 * Math.ceil(-10. / 13 * (hitpointsLevel + defenceLevel - 4 * nextCombatLevel + Math.floor(prayerLevel / 2)))) - rangeLevel; + } + + /** + * Calculate number of prayer levels required to increase combat level. + * + * @param attackLevel the attack level + * @param strengthLevel the strength level + * @param defenceLevel the defence level + * @param hitpointsLevel the hitpoints level + * @param magicLevel the magic level + * @param rangeLevel the range level + * @param prayerLevel the prayer level + * @return the number of levels required + */ + public static int getNextCombatLevelPrayer(int attackLevel, int strengthLevel, int defenceLevel, int hitpointsLevel, + int magicLevel, int rangeLevel, int prayerLevel) + { + int nextCombatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel, magicLevel, rangeLevel, prayerLevel) + 1; + double typeContribution = Experience.getMeleeRangeOrMagicCombatLevelContribution(attackLevel, strengthLevel, magicLevel, rangeLevel); + return 2 * (int) Math.ceil(-hitpointsLevel - defenceLevel + 4 * nextCombatLevel - 4 * typeContribution) - prayerLevel; + } } diff --git a/runelite-api/src/main/java/net/runelite/api/Varbits.java b/runelite-api/src/main/java/net/runelite/api/Varbits.java index 2fb6302e68..d6dd3bdd3f 100644 --- a/runelite-api/src/main/java/net/runelite/api/Varbits.java +++ b/runelite-api/src/main/java/net/runelite/api/Varbits.java @@ -521,7 +521,7 @@ public enum Varbits /** * The active tab within the quest interface */ - QUEST_TAB(8168); + QUEST_TAB(8168), /** * Explorer ring diff --git a/runelite-client/src/main/java/net/runelite/client/SessionClient.java b/runelite-client/src/main/java/net/runelite/client/SessionClient.java index dd85b83aad..e88d558136 100644 --- a/runelite-client/src/main/java/net/runelite/client/SessionClient.java +++ b/runelite-client/src/main/java/net/runelite/client/SessionClient.java @@ -39,7 +39,7 @@ class SessionClient { UUID open() throws IOException { - HttpUrl url = RuneLiteAPI.getSessionBase().newBuilder() + HttpUrl url = RuneLiteAPI.getRuneLitePlusSessionBase().newBuilder() .build(); Request request = new Request.Builder() @@ -61,7 +61,7 @@ class SessionClient void ping(UUID uuid) throws IOException { - HttpUrl url = RuneLiteAPI.getSessionBase().newBuilder() + HttpUrl url = RuneLiteAPI.getRuneLitePlusSessionBase().newBuilder() .addPathSegment("ping") .addQueryParameter("session", uuid.toString()) .build(); @@ -81,7 +81,7 @@ class SessionClient void delete(UUID uuid) throws IOException { - HttpUrl url = RuneLiteAPI.getSessionBase().newBuilder() + HttpUrl url = RuneLiteAPI.getRuneLitePlusSessionBase().newBuilder() .addQueryParameter("session", uuid.toString()) .build(); diff --git a/runelite-client/src/main/java/net/runelite/client/chat/ChatCommandManager.java b/runelite-client/src/main/java/net/runelite/client/chat/ChatCommandManager.java index d4a3964e08..b1aa9b3ac2 100644 --- a/runelite-client/src/main/java/net/runelite/client/chat/ChatCommandManager.java +++ b/runelite-client/src/main/java/net/runelite/client/chat/ChatCommandManager.java @@ -98,6 +98,7 @@ public class ChatCommandManager implements ChatboxInputListener case MODCHAT: case FRIENDSCHAT: case PRIVATECHAT: + case MODPRIVATECHAT: case PRIVATECHATOUT: break; default: diff --git a/runelite-client/src/main/java/net/runelite/client/game/ItemMapping.java b/runelite-client/src/main/java/net/runelite/client/game/ItemMapping.java index b0e70bcd49..b0bb628fed 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/ItemMapping.java +++ b/runelite-client/src/main/java/net/runelite/client/game/ItemMapping.java @@ -29,411 +29,8 @@ import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import java.util.Collection; import java.util.Collections; -import static net.runelite.api.ItemID.ABYSSAL_TENTACLE; -import static net.runelite.api.ItemID.ABYSSAL_WHIP; -import static net.runelite.api.ItemID.AHRIMS_HOOD; -import static net.runelite.api.ItemID.AHRIMS_HOOD_100; -import static net.runelite.api.ItemID.AHRIMS_HOOD_25; -import static net.runelite.api.ItemID.AHRIMS_HOOD_50; -import static net.runelite.api.ItemID.AHRIMS_HOOD_75; -import static net.runelite.api.ItemID.AHRIMS_ROBESKIRT; -import static net.runelite.api.ItemID.AHRIMS_ROBESKIRT_100; -import static net.runelite.api.ItemID.AHRIMS_ROBESKIRT_25; -import static net.runelite.api.ItemID.AHRIMS_ROBESKIRT_50; -import static net.runelite.api.ItemID.AHRIMS_ROBESKIRT_75; -import static net.runelite.api.ItemID.AHRIMS_ROBETOP; -import static net.runelite.api.ItemID.AHRIMS_ROBETOP_100; -import static net.runelite.api.ItemID.AHRIMS_ROBETOP_25; -import static net.runelite.api.ItemID.AHRIMS_ROBETOP_50; -import static net.runelite.api.ItemID.AHRIMS_ROBETOP_75; -import static net.runelite.api.ItemID.AHRIMS_STAFF; -import static net.runelite.api.ItemID.AHRIMS_STAFF_100; -import static net.runelite.api.ItemID.AHRIMS_STAFF_25; -import static net.runelite.api.ItemID.AHRIMS_STAFF_50; -import static net.runelite.api.ItemID.AHRIMS_STAFF_75; -import static net.runelite.api.ItemID.AMULET_OF_FURY; -import static net.runelite.api.ItemID.AMULET_OF_FURY_OR; -import static net.runelite.api.ItemID.AMULET_OF_GLORY; -import static net.runelite.api.ItemID.AMULET_OF_GLORY1; -import static net.runelite.api.ItemID.AMULET_OF_GLORY2; -import static net.runelite.api.ItemID.AMULET_OF_GLORY3; -import static net.runelite.api.ItemID.AMULET_OF_GLORY5; -import static net.runelite.api.ItemID.AMULET_OF_GLORY_T; -import static net.runelite.api.ItemID.AMULET_OF_GLORY_T1; -import static net.runelite.api.ItemID.AMULET_OF_GLORY_T2; -import static net.runelite.api.ItemID.AMULET_OF_GLORY_T3; -import static net.runelite.api.ItemID.AMULET_OF_GLORY_T5; -import static net.runelite.api.ItemID.AMULET_OF_TORTURE; -import static net.runelite.api.ItemID.AMULET_OF_TORTURE_OR; -import static net.runelite.api.ItemID.ANCIENT_WYVERN_SHIELD; -import static net.runelite.api.ItemID.ANCIENT_WYVERN_SHIELD_21634; -import static net.runelite.api.ItemID.ANGUISH_ORNAMENT_KIT; -import static net.runelite.api.ItemID.ARCHERS_RING; -import static net.runelite.api.ItemID.ARCHERS_RING_I; -import static net.runelite.api.ItemID.ARMADYL_GODSWORD; -import static net.runelite.api.ItemID.ARMADYL_GODSWORD_OR; -import static net.runelite.api.ItemID.ARMADYL_GODSWORD_ORNAMENT_KIT; -import static net.runelite.api.ItemID.BANDOS_GODSWORD; -import static net.runelite.api.ItemID.BANDOS_GODSWORD_OR; -import static net.runelite.api.ItemID.BANDOS_GODSWORD_ORNAMENT_KIT; -import static net.runelite.api.ItemID.BERSERKER_RING; -import static net.runelite.api.ItemID.BERSERKER_RING_I; -import static net.runelite.api.ItemID.BLACK_MASK; -import static net.runelite.api.ItemID.BLACK_MASK_1; -import static net.runelite.api.ItemID.BLACK_MASK_10_I; -import static net.runelite.api.ItemID.BLACK_MASK_1_I; -import static net.runelite.api.ItemID.BLACK_MASK_2; -import static net.runelite.api.ItemID.BLACK_MASK_2_I; -import static net.runelite.api.ItemID.BLACK_MASK_3; -import static net.runelite.api.ItemID.BLACK_MASK_3_I; -import static net.runelite.api.ItemID.BLACK_MASK_4; -import static net.runelite.api.ItemID.BLACK_MASK_4_I; -import static net.runelite.api.ItemID.BLACK_MASK_5; -import static net.runelite.api.ItemID.BLACK_MASK_5_I; -import static net.runelite.api.ItemID.BLACK_MASK_6; -import static net.runelite.api.ItemID.BLACK_MASK_6_I; -import static net.runelite.api.ItemID.BLACK_MASK_7; -import static net.runelite.api.ItemID.BLACK_MASK_7_I; -import static net.runelite.api.ItemID.BLACK_MASK_8; -import static net.runelite.api.ItemID.BLACK_MASK_8_I; -import static net.runelite.api.ItemID.BLACK_MASK_9; -import static net.runelite.api.ItemID.BLACK_MASK_9_I; -import static net.runelite.api.ItemID.BLACK_MASK_I; -import static net.runelite.api.ItemID.BLACK_SLAYER_HELMET; -import static net.runelite.api.ItemID.BLACK_SLAYER_HELMET_I; -import static net.runelite.api.ItemID.BONECRUSHER_NECKLACE; -import static net.runelite.api.ItemID.BOTTOMLESS_COMPOST_BUCKET; -import static net.runelite.api.ItemID.BOTTOMLESS_COMPOST_BUCKET_22997; -import static net.runelite.api.ItemID.CRAWS_BOW; -import static net.runelite.api.ItemID.CRAWS_BOW_U; -import static net.runelite.api.ItemID.DARK_BOW; -import static net.runelite.api.ItemID.DARK_BOW_12765; -import static net.runelite.api.ItemID.DARK_BOW_12766; -import static net.runelite.api.ItemID.DARK_BOW_12767; -import static net.runelite.api.ItemID.DARK_BOW_12768; -import static net.runelite.api.ItemID.DARK_BOW_20408; -import static net.runelite.api.ItemID.DARK_INFINITY_BOTTOMS; -import static net.runelite.api.ItemID.DARK_INFINITY_COLOUR_KIT; -import static net.runelite.api.ItemID.DARK_INFINITY_HAT; -import static net.runelite.api.ItemID.DARK_INFINITY_TOP; -import static net.runelite.api.ItemID.DHAROKS_GREATAXE; -import static net.runelite.api.ItemID.DHAROKS_GREATAXE_100; -import static net.runelite.api.ItemID.DHAROKS_GREATAXE_25; -import static net.runelite.api.ItemID.DHAROKS_GREATAXE_50; -import static net.runelite.api.ItemID.DHAROKS_GREATAXE_75; -import static net.runelite.api.ItemID.DHAROKS_HELM; -import static net.runelite.api.ItemID.DHAROKS_HELM_100; -import static net.runelite.api.ItemID.DHAROKS_HELM_25; -import static net.runelite.api.ItemID.DHAROKS_HELM_50; -import static net.runelite.api.ItemID.DHAROKS_HELM_75; -import static net.runelite.api.ItemID.DHAROKS_PLATEBODY; -import static net.runelite.api.ItemID.DHAROKS_PLATEBODY_100; -import static net.runelite.api.ItemID.DHAROKS_PLATEBODY_25; -import static net.runelite.api.ItemID.DHAROKS_PLATEBODY_50; -import static net.runelite.api.ItemID.DHAROKS_PLATEBODY_75; -import static net.runelite.api.ItemID.DHAROKS_PLATELEGS; -import static net.runelite.api.ItemID.DHAROKS_PLATELEGS_100; -import static net.runelite.api.ItemID.DHAROKS_PLATELEGS_25; -import static net.runelite.api.ItemID.DHAROKS_PLATELEGS_50; -import static net.runelite.api.ItemID.DHAROKS_PLATELEGS_75; -import static net.runelite.api.ItemID.DRAGONBONE_NECKLACE; -import static net.runelite.api.ItemID.DRAGONFIRE_SHIELD; -import static net.runelite.api.ItemID.DRAGONFIRE_SHIELD_11284; -import static net.runelite.api.ItemID.DRAGONFIRE_WARD; -import static net.runelite.api.ItemID.DRAGONFIRE_WARD_22003; -import static net.runelite.api.ItemID.DRAGON_BOOTS; -import static net.runelite.api.ItemID.DRAGON_BOOTS_G; -import static net.runelite.api.ItemID.DRAGON_BOOTS_ORNAMENT_KIT; -import static net.runelite.api.ItemID.DRAGON_CHAINBODY_3140; -import static net.runelite.api.ItemID.DRAGON_CHAINBODY_G; -import static net.runelite.api.ItemID.DRAGON_CHAINBODY_ORNAMENT_KIT; -import static net.runelite.api.ItemID.DRAGON_DEFENDER_ORNAMENT_KIT; -import static net.runelite.api.ItemID.DRAGON_DEFENDER_T; -import static net.runelite.api.ItemID.DRAGON_FULL_HELM; -import static net.runelite.api.ItemID.DRAGON_FULL_HELM_G; -import static net.runelite.api.ItemID.DRAGON_FULL_HELM_ORNAMENT_KIT; -import static net.runelite.api.ItemID.DRAGON_KITESHIELD; -import static net.runelite.api.ItemID.DRAGON_KITESHIELD_G; -import static net.runelite.api.ItemID.DRAGON_KITESHIELD_ORNAMENT_KIT; -import static net.runelite.api.ItemID.DRAGON_LEGSSKIRT_ORNAMENT_KIT; -import static net.runelite.api.ItemID.DRAGON_PICKAXE; -import static net.runelite.api.ItemID.DRAGON_PICKAXE_12797; -import static net.runelite.api.ItemID.DRAGON_PLATEBODY; -import static net.runelite.api.ItemID.DRAGON_PLATEBODY_G; -import static net.runelite.api.ItemID.DRAGON_PLATEBODY_ORNAMENT_KIT; -import static net.runelite.api.ItemID.DRAGON_PLATELEGS; -import static net.runelite.api.ItemID.DRAGON_PLATELEGS_G; -import static net.runelite.api.ItemID.DRAGON_PLATESKIRT; -import static net.runelite.api.ItemID.DRAGON_PLATESKIRT_G; -import static net.runelite.api.ItemID.DRAGON_SCIMITAR; -import static net.runelite.api.ItemID.DRAGON_SCIMITAR_OR; -import static net.runelite.api.ItemID.DRAGON_SCIMITAR_ORNAMENT_KIT; -import static net.runelite.api.ItemID.DRAGON_SQ_SHIELD; -import static net.runelite.api.ItemID.DRAGON_SQ_SHIELD_G; -import static net.runelite.api.ItemID.DRAGON_SQ_SHIELD_ORNAMENT_KIT; -import static net.runelite.api.ItemID.ENSOULED_ABYSSAL_HEAD; -import static net.runelite.api.ItemID.ENSOULED_ABYSSAL_HEAD_13508; -import static net.runelite.api.ItemID.ENSOULED_AVIANSIE_HEAD; -import static net.runelite.api.ItemID.ENSOULED_AVIANSIE_HEAD_13505; -import static net.runelite.api.ItemID.ENSOULED_BEAR_HEAD; -import static net.runelite.api.ItemID.ENSOULED_BEAR_HEAD_13463; -import static net.runelite.api.ItemID.ENSOULED_BLOODVELD_HEAD; -import static net.runelite.api.ItemID.ENSOULED_BLOODVELD_HEAD_13496; -import static net.runelite.api.ItemID.ENSOULED_CHAOS_DRUID_HEAD; -import static net.runelite.api.ItemID.ENSOULED_CHAOS_DRUID_HEAD_13472; -import static net.runelite.api.ItemID.ENSOULED_DAGANNOTH_HEAD; -import static net.runelite.api.ItemID.ENSOULED_DAGANNOTH_HEAD_13493; -import static net.runelite.api.ItemID.ENSOULED_DEMON_HEAD; -import static net.runelite.api.ItemID.ENSOULED_DEMON_HEAD_13502; -import static net.runelite.api.ItemID.ENSOULED_DOG_HEAD; -import static net.runelite.api.ItemID.ENSOULED_DOG_HEAD_13469; -import static net.runelite.api.ItemID.ENSOULED_DRAGON_HEAD; -import static net.runelite.api.ItemID.ENSOULED_DRAGON_HEAD_13511; -import static net.runelite.api.ItemID.ENSOULED_ELF_HEAD; -import static net.runelite.api.ItemID.ENSOULED_ELF_HEAD_13481; -import static net.runelite.api.ItemID.ENSOULED_GIANT_HEAD; -import static net.runelite.api.ItemID.ENSOULED_GIANT_HEAD_13475; -import static net.runelite.api.ItemID.ENSOULED_GOBLIN_HEAD; -import static net.runelite.api.ItemID.ENSOULED_GOBLIN_HEAD_13448; -import static net.runelite.api.ItemID.ENSOULED_HORROR_HEAD; -import static net.runelite.api.ItemID.ENSOULED_HORROR_HEAD_13487; -import static net.runelite.api.ItemID.ENSOULED_IMP_HEAD; -import static net.runelite.api.ItemID.ENSOULED_IMP_HEAD_13454; -import static net.runelite.api.ItemID.ENSOULED_KALPHITE_HEAD; -import static net.runelite.api.ItemID.ENSOULED_KALPHITE_HEAD_13490; -import static net.runelite.api.ItemID.ENSOULED_MINOTAUR_HEAD; -import static net.runelite.api.ItemID.ENSOULED_MINOTAUR_HEAD_13457; -import static net.runelite.api.ItemID.ENSOULED_MONKEY_HEAD; -import static net.runelite.api.ItemID.ENSOULED_MONKEY_HEAD_13451; -import static net.runelite.api.ItemID.ENSOULED_OGRE_HEAD; -import static net.runelite.api.ItemID.ENSOULED_OGRE_HEAD_13478; -import static net.runelite.api.ItemID.ENSOULED_SCORPION_HEAD; -import static net.runelite.api.ItemID.ENSOULED_SCORPION_HEAD_13460; -import static net.runelite.api.ItemID.ENSOULED_TROLL_HEAD; -import static net.runelite.api.ItemID.ENSOULED_TROLL_HEAD_13484; -import static net.runelite.api.ItemID.ENSOULED_TZHAAR_HEAD; -import static net.runelite.api.ItemID.ENSOULED_TZHAAR_HEAD_13499; -import static net.runelite.api.ItemID.ENSOULED_UNICORN_HEAD; -import static net.runelite.api.ItemID.ENSOULED_UNICORN_HEAD_13466; -import static net.runelite.api.ItemID.FEROCIOUS_GLOVES; -import static net.runelite.api.ItemID.FROZEN_ABYSSAL_WHIP; -import static net.runelite.api.ItemID.FURY_ORNAMENT_KIT; -import static net.runelite.api.ItemID.GAMES_NECKLACE1; -import static net.runelite.api.ItemID.GAMES_NECKLACE2; -import static net.runelite.api.ItemID.GAMES_NECKLACE3; -import static net.runelite.api.ItemID.GAMES_NECKLACE4; -import static net.runelite.api.ItemID.GAMES_NECKLACE5; -import static net.runelite.api.ItemID.GAMES_NECKLACE6; -import static net.runelite.api.ItemID.GAMES_NECKLACE7; -import static net.runelite.api.ItemID.GAMES_NECKLACE8; -import static net.runelite.api.ItemID.GRANITE_MAUL; -import static net.runelite.api.ItemID.GRANITE_MAUL_12848; -import static net.runelite.api.ItemID.GRANITE_RING; -import static net.runelite.api.ItemID.GRANITE_RING_I; -import static net.runelite.api.ItemID.GREEN_SLAYER_HELMET; -import static net.runelite.api.ItemID.GREEN_SLAYER_HELMET_I; -import static net.runelite.api.ItemID.GUTHANS_CHAINSKIRT; -import static net.runelite.api.ItemID.GUTHANS_CHAINSKIRT_100; -import static net.runelite.api.ItemID.GUTHANS_CHAINSKIRT_25; -import static net.runelite.api.ItemID.GUTHANS_CHAINSKIRT_50; -import static net.runelite.api.ItemID.GUTHANS_CHAINSKIRT_75; -import static net.runelite.api.ItemID.GUTHANS_HELM; -import static net.runelite.api.ItemID.GUTHANS_HELM_100; -import static net.runelite.api.ItemID.GUTHANS_HELM_25; -import static net.runelite.api.ItemID.GUTHANS_HELM_50; -import static net.runelite.api.ItemID.GUTHANS_HELM_75; -import static net.runelite.api.ItemID.GUTHANS_PLATEBODY; -import static net.runelite.api.ItemID.GUTHANS_PLATEBODY_100; -import static net.runelite.api.ItemID.GUTHANS_PLATEBODY_25; -import static net.runelite.api.ItemID.GUTHANS_PLATEBODY_50; -import static net.runelite.api.ItemID.GUTHANS_PLATEBODY_75; -import static net.runelite.api.ItemID.GUTHANS_WARSPEAR; -import static net.runelite.api.ItemID.GUTHANS_WARSPEAR_100; -import static net.runelite.api.ItemID.GUTHANS_WARSPEAR_25; -import static net.runelite.api.ItemID.GUTHANS_WARSPEAR_50; -import static net.runelite.api.ItemID.GUTHANS_WARSPEAR_75; -import static net.runelite.api.ItemID.HYDRA_LEATHER; -import static net.runelite.api.ItemID.HYDRA_SLAYER_HELMET; -import static net.runelite.api.ItemID.HYDRA_SLAYER_HELMET_I; -import static net.runelite.api.ItemID.HYDRA_TAIL; -import static net.runelite.api.ItemID.INFINITY_BOTTOMS; -import static net.runelite.api.ItemID.INFINITY_BOTTOMS_20575; -import static net.runelite.api.ItemID.INFINITY_HAT; -import static net.runelite.api.ItemID.INFINITY_TOP; -import static net.runelite.api.ItemID.INFINITY_TOP_10605; -import static net.runelite.api.ItemID.INFINITY_TOP_20574; -import static net.runelite.api.ItemID.KARILS_COIF; -import static net.runelite.api.ItemID.KARILS_COIF_100; -import static net.runelite.api.ItemID.KARILS_COIF_25; -import static net.runelite.api.ItemID.KARILS_COIF_50; -import static net.runelite.api.ItemID.KARILS_COIF_75; -import static net.runelite.api.ItemID.KARILS_CROSSBOW; -import static net.runelite.api.ItemID.KARILS_CROSSBOW_100; -import static net.runelite.api.ItemID.KARILS_CROSSBOW_25; -import static net.runelite.api.ItemID.KARILS_CROSSBOW_50; -import static net.runelite.api.ItemID.KARILS_CROSSBOW_75; -import static net.runelite.api.ItemID.KARILS_LEATHERSKIRT; -import static net.runelite.api.ItemID.KARILS_LEATHERSKIRT_100; -import static net.runelite.api.ItemID.KARILS_LEATHERSKIRT_25; -import static net.runelite.api.ItemID.KARILS_LEATHERSKIRT_50; -import static net.runelite.api.ItemID.KARILS_LEATHERSKIRT_75; -import static net.runelite.api.ItemID.KARILS_LEATHERTOP; -import static net.runelite.api.ItemID.KARILS_LEATHERTOP_100; -import static net.runelite.api.ItemID.KARILS_LEATHERTOP_25; -import static net.runelite.api.ItemID.KARILS_LEATHERTOP_50; -import static net.runelite.api.ItemID.KARILS_LEATHERTOP_75; -import static net.runelite.api.ItemID.KRAKEN_TENTACLE; -import static net.runelite.api.ItemID.LAVA_BATTLESTAFF; -import static net.runelite.api.ItemID.LAVA_BATTLESTAFF_21198; -import static net.runelite.api.ItemID.LIGHT_INFINITY_BOTTOMS; -import static net.runelite.api.ItemID.LIGHT_INFINITY_COLOUR_KIT; -import static net.runelite.api.ItemID.LIGHT_INFINITY_HAT; -import static net.runelite.api.ItemID.LIGHT_INFINITY_TOP; -import static net.runelite.api.ItemID.MAGIC_SHORTBOW; -import static net.runelite.api.ItemID.MAGIC_SHORTBOW_I; -import static net.runelite.api.ItemID.MAGMA_HELM; -import static net.runelite.api.ItemID.MAGMA_HELM_UNCHARGED; -import static net.runelite.api.ItemID.MALEDICTION_WARD; -import static net.runelite.api.ItemID.MALEDICTION_WARD_12806; -import static net.runelite.api.ItemID.NECKLACE_OF_ANGUISH; -import static net.runelite.api.ItemID.NECKLACE_OF_ANGUISH_OR; -import static net.runelite.api.ItemID.OCCULT_NECKLACE; -import static net.runelite.api.ItemID.OCCULT_NECKLACE_OR; -import static net.runelite.api.ItemID.OCCULT_ORNAMENT_KIT; -import static net.runelite.api.ItemID.ODIUM_WARD; -import static net.runelite.api.ItemID.ODIUM_WARD_12807; -import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE; -import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_1; -import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_2; -import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_4; -import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_5; -import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_6; -import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_7; -import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_8; -import static net.runelite.api.ItemID.PURPLE_SLAYER_HELMET; -import static net.runelite.api.ItemID.PURPLE_SLAYER_HELMET_I; -import static net.runelite.api.ItemID.RED_SLAYER_HELMET; -import static net.runelite.api.ItemID.RED_SLAYER_HELMET_I; -import static net.runelite.api.ItemID.RING_OF_DUELING1; -import static net.runelite.api.ItemID.RING_OF_DUELING2; -import static net.runelite.api.ItemID.RING_OF_DUELING3; -import static net.runelite.api.ItemID.RING_OF_DUELING4; -import static net.runelite.api.ItemID.RING_OF_DUELING5; -import static net.runelite.api.ItemID.RING_OF_DUELING6; -import static net.runelite.api.ItemID.RING_OF_DUELING7; -import static net.runelite.api.ItemID.RING_OF_DUELING8; -import static net.runelite.api.ItemID.RING_OF_SUFFERING; -import static net.runelite.api.ItemID.RING_OF_SUFFERING_I; -import static net.runelite.api.ItemID.RING_OF_SUFFERING_R; -import static net.runelite.api.ItemID.RING_OF_SUFFERING_RI; -import static net.runelite.api.ItemID.RING_OF_THE_GODS; -import static net.runelite.api.ItemID.RING_OF_THE_GODS_I; -import static net.runelite.api.ItemID.RING_OF_WEALTH; -import static net.runelite.api.ItemID.RING_OF_WEALTH_1; -import static net.runelite.api.ItemID.RING_OF_WEALTH_2; -import static net.runelite.api.ItemID.RING_OF_WEALTH_3; -import static net.runelite.api.ItemID.RING_OF_WEALTH_4; -import static net.runelite.api.ItemID.RING_OF_WEALTH_I; -import static net.runelite.api.ItemID.RING_OF_WEALTH_I1; -import static net.runelite.api.ItemID.RING_OF_WEALTH_I2; -import static net.runelite.api.ItemID.RING_OF_WEALTH_I3; -import static net.runelite.api.ItemID.RING_OF_WEALTH_I4; -import static net.runelite.api.ItemID.RING_OF_WEALTH_I5; -import static net.runelite.api.ItemID.SANGUINESTI_STAFF; -import static net.runelite.api.ItemID.SANGUINESTI_STAFF_UNCHARGED; -import static net.runelite.api.ItemID.SARADOMINS_BLESSED_SWORD; -import static net.runelite.api.ItemID.SARADOMINS_TEAR; -import static net.runelite.api.ItemID.SARADOMIN_GODSWORD; -import static net.runelite.api.ItemID.SARADOMIN_GODSWORD_OR; -import static net.runelite.api.ItemID.SARADOMIN_GODSWORD_ORNAMENT_KIT; -import static net.runelite.api.ItemID.SCYTHE_OF_VITUR; -import static net.runelite.api.ItemID.SCYTHE_OF_VITUR_UNCHARGED; -import static net.runelite.api.ItemID.SEERS_RING; -import static net.runelite.api.ItemID.SEERS_RING_I; -import static net.runelite.api.ItemID.SERPENTINE_HELM; -import static net.runelite.api.ItemID.SERPENTINE_HELM_UNCHARGED; -import static net.runelite.api.ItemID.SKILLS_NECKLACE; -import static net.runelite.api.ItemID.SKILLS_NECKLACE1; -import static net.runelite.api.ItemID.SKILLS_NECKLACE2; -import static net.runelite.api.ItemID.SKILLS_NECKLACE3; -import static net.runelite.api.ItemID.SKILLS_NECKLACE5; -import static net.runelite.api.ItemID.SLAYER_HELMET; -import static net.runelite.api.ItemID.SLAYER_HELMET_I; -import static net.runelite.api.ItemID.STEAM_BATTLESTAFF; -import static net.runelite.api.ItemID.STEAM_BATTLESTAFF_12795; -import static net.runelite.api.ItemID.TANZANITE_HELM; -import static net.runelite.api.ItemID.TANZANITE_HELM_UNCHARGED; -import static net.runelite.api.ItemID.THAMMARONS_SCEPTRE; -import static net.runelite.api.ItemID.THAMMARONS_SCEPTRE_U; -import static net.runelite.api.ItemID.TOME_OF_FIRE; -import static net.runelite.api.ItemID.TOME_OF_FIRE_EMPTY; -import static net.runelite.api.ItemID.TORAGS_HAMMERS; -import static net.runelite.api.ItemID.TORAGS_HAMMERS_100; -import static net.runelite.api.ItemID.TORAGS_HAMMERS_25; -import static net.runelite.api.ItemID.TORAGS_HAMMERS_50; -import static net.runelite.api.ItemID.TORAGS_HAMMERS_75; -import static net.runelite.api.ItemID.TORAGS_HELM; -import static net.runelite.api.ItemID.TORAGS_HELM_100; -import static net.runelite.api.ItemID.TORAGS_HELM_25; -import static net.runelite.api.ItemID.TORAGS_HELM_50; -import static net.runelite.api.ItemID.TORAGS_HELM_75; -import static net.runelite.api.ItemID.TORAGS_PLATEBODY; -import static net.runelite.api.ItemID.TORAGS_PLATEBODY_100; -import static net.runelite.api.ItemID.TORAGS_PLATEBODY_25; -import static net.runelite.api.ItemID.TORAGS_PLATEBODY_50; -import static net.runelite.api.ItemID.TORAGS_PLATEBODY_75; -import static net.runelite.api.ItemID.TORAGS_PLATELEGS; -import static net.runelite.api.ItemID.TORAGS_PLATELEGS_100; -import static net.runelite.api.ItemID.TORAGS_PLATELEGS_25; -import static net.runelite.api.ItemID.TORAGS_PLATELEGS_50; -import static net.runelite.api.ItemID.TORAGS_PLATELEGS_75; -import static net.runelite.api.ItemID.TORTURE_ORNAMENT_KIT; -import static net.runelite.api.ItemID.TOXIC_BLOWPIPE; -import static net.runelite.api.ItemID.TOXIC_BLOWPIPE_EMPTY; -import static net.runelite.api.ItemID.TOXIC_STAFF_OF_THE_DEAD; -import static net.runelite.api.ItemID.TOXIC_STAFF_UNCHARGED; -import static net.runelite.api.ItemID.TREASONOUS_RING; -import static net.runelite.api.ItemID.TREASONOUS_RING_I; -import static net.runelite.api.ItemID.TRIDENT_OF_THE_SEAS; -import static net.runelite.api.ItemID.TRIDENT_OF_THE_SEAS_E; -import static net.runelite.api.ItemID.TRIDENT_OF_THE_SWAMP; -import static net.runelite.api.ItemID.TRIDENT_OF_THE_SWAMP_E; -import static net.runelite.api.ItemID.TURQUOISE_SLAYER_HELMET; -import static net.runelite.api.ItemID.TURQUOISE_SLAYER_HELMET_I; -import static net.runelite.api.ItemID.TYRANNICAL_RING; -import static net.runelite.api.ItemID.TYRANNICAL_RING_I; -import static net.runelite.api.ItemID.UNCHARGED_TOXIC_TRIDENT; -import static net.runelite.api.ItemID.UNCHARGED_TOXIC_TRIDENT_E; -import static net.runelite.api.ItemID.UNCHARGED_TRIDENT; -import static net.runelite.api.ItemID.UNCHARGED_TRIDENT_E; -import static net.runelite.api.ItemID.VERACS_BRASSARD; -import static net.runelite.api.ItemID.VERACS_BRASSARD_100; -import static net.runelite.api.ItemID.VERACS_BRASSARD_25; -import static net.runelite.api.ItemID.VERACS_BRASSARD_50; -import static net.runelite.api.ItemID.VERACS_BRASSARD_75; -import static net.runelite.api.ItemID.VERACS_FLAIL; -import static net.runelite.api.ItemID.VERACS_FLAIL_100; -import static net.runelite.api.ItemID.VERACS_FLAIL_25; -import static net.runelite.api.ItemID.VERACS_FLAIL_50; -import static net.runelite.api.ItemID.VERACS_FLAIL_75; -import static net.runelite.api.ItemID.VERACS_HELM; -import static net.runelite.api.ItemID.VERACS_HELM_100; -import static net.runelite.api.ItemID.VERACS_HELM_25; -import static net.runelite.api.ItemID.VERACS_HELM_50; -import static net.runelite.api.ItemID.VERACS_HELM_75; -import static net.runelite.api.ItemID.VERACS_PLATESKIRT; -import static net.runelite.api.ItemID.VERACS_PLATESKIRT_100; -import static net.runelite.api.ItemID.VERACS_PLATESKIRT_25; -import static net.runelite.api.ItemID.VERACS_PLATESKIRT_50; -import static net.runelite.api.ItemID.VERACS_PLATESKIRT_75; -import static net.runelite.api.ItemID.VIGGORAS_CHAINMACE; -import static net.runelite.api.ItemID.VIGGORAS_CHAINMACE_U; -import static net.runelite.api.ItemID.VOLCANIC_ABYSSAL_WHIP; -import static net.runelite.api.ItemID.WARRIOR_RING; -import static net.runelite.api.ItemID.WARRIOR_RING_I; -import static net.runelite.api.ItemID.ZAMORAK_GODSWORD; -import static net.runelite.api.ItemID.ZAMORAK_GODSWORD_OR; -import static net.runelite.api.ItemID.ZAMORAK_GODSWORD_ORNAMENT_KIT; + +import static net.runelite.api.ItemID.*; /** * Converts untradeable items to it's tradeable counterparts @@ -507,6 +104,8 @@ public enum ItemMapping ITEM_OCCULT_ORNAMENT_KIT(OCCULT_ORNAMENT_KIT, OCCULT_NECKLACE_OR), ITE_AMULET_OF_FURY(AMULET_OF_FURY, AMULET_OF_FURY_OR), ITE_FURY_ORNAMENT_KIT(FURY_ORNAMENT_KIT, AMULET_OF_FURY_OR), + ITEM_TORMENTED_BRACELET(TORMENTED_BRACELET, TORMENTED_BRACELET_OR), + ITEM_TORMENTED_ORNAMENT_KIT(TORMENTED_ORNAMENT_KIT, TORMENTED_BRACELET_OR), // Ensouled heads ITEM_ENSOULED_GOBLIN_HEAD(ENSOULED_GOBLIN_HEAD_13448, ENSOULED_GOBLIN_HEAD), @@ -672,4 +271,4 @@ public enum ItemMapping return mapping.iterator().next(); } -} +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java index a88552e37e..6b82e45aca 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java @@ -264,7 +264,8 @@ public class CannonPlugin extends Plugin cballsLeft = 0; } - if (event.getMessage().contains("You pick up the cannon")) + if (event.getMessage().contains("You pick up the cannon") + || event.getMessage().contains("Your cannon has decayed. Speak to Nulodion to get a new one!")) { cannonPlaced = false; cballsLeft = 0; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/combatlevel/CombatLevelOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/combatlevel/CombatLevelOverlay.java index 95bc61fbb8..2f5aca61c2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/combatlevel/CombatLevelOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/combatlevel/CombatLevelOverlay.java @@ -43,11 +43,6 @@ import net.runelite.client.util.ColorUtil; class CombatLevelOverlay extends Overlay { private static final Color COMBAT_LEVEL_COLOUR = new Color(0xff981f); - private static final double PRAY_MULT = 0.125; - static final double ATT_STR_MULT = 0.325; - static final double DEF_HP_MULT = 0.25; - static final double RANGE_MAGIC_LEVEL_MULT = 1.5; - static final double RANGE_MAGIC_MULT = 0.325; private final Client client; private final CombatLevelConfig config; @@ -95,23 +90,20 @@ class CombatLevelOverlay extends Overlay int defenceLevel = client.getRealSkillLevel(Skill.DEFENCE); int hitpointsLevel = client.getRealSkillLevel(Skill.HITPOINTS); int magicLevel = client.getRealSkillLevel(Skill.MAGIC); - int rangedLevel = client.getRealSkillLevel(Skill.RANGED); + int rangeLevel = client.getRealSkillLevel(Skill.RANGED); int prayerLevel = client.getRealSkillLevel(Skill.PRAYER); - // calculate initial required numbers - double base = DEF_HP_MULT * (defenceLevel + hitpointsLevel + Math.floor(prayerLevel / 2D)); - double melee = ATT_STR_MULT * (attackLevel + strengthLevel); - double range = RANGE_MAGIC_MULT * Math.floor(rangedLevel * RANGE_MAGIC_LEVEL_MULT); - double mage = RANGE_MAGIC_MULT * Math.floor(magicLevel * RANGE_MAGIC_LEVEL_MULT); - double max = Math.max(melee, Math.max(range, mage)); - // find the needed levels until level up - int next = client.getLocalPlayer().getCombatLevel() + 1; - int meleeNeed = calcLevels(base + melee, next, ATT_STR_MULT); - int hpdefNeed = calcLevels(base + max, next, DEF_HP_MULT); - int prayNeed = calcLevelsPray(base + max, next, prayerLevel); - int rangeNeed = calcLevelsRM(rangedLevel, next, base); - int magicNeed = calcLevelsRM(magicLevel, next, base); + int meleeNeed = Experience.getNextCombatLevelMelee(attackLevel, strengthLevel, defenceLevel, hitpointsLevel, + magicLevel, rangeLevel, prayerLevel); + int hpDefNeed = Experience.getNextCombatLevelHpDef(attackLevel, strengthLevel, defenceLevel, hitpointsLevel, + magicLevel, rangeLevel, prayerLevel); + int rangeNeed = Experience.getNextCombatLevelRange(attackLevel, strengthLevel, defenceLevel, hitpointsLevel, + magicLevel, rangeLevel, prayerLevel); + int magicNeed = Experience.getNextCombatLevelMagic(attackLevel, strengthLevel, defenceLevel, hitpointsLevel, + magicLevel, rangeLevel, prayerLevel); + int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel, + magicLevel, rangeLevel, prayerLevel); // create tooltip string StringBuilder sb = new StringBuilder(); @@ -121,11 +113,11 @@ class CombatLevelOverlay extends Overlay { sb.append(meleeNeed).append(" Attack/Strength"); } - if ((hitpointsLevel + defenceLevel + hpdefNeed) <= Experience.MAX_REAL_LEVEL * 2) + if ((hitpointsLevel + defenceLevel + hpDefNeed) <= Experience.MAX_REAL_LEVEL * 2) { - sb.append(hpdefNeed).append(" Defence/Hitpoints"); + sb.append(hpDefNeed).append(" Defence/Hitpoints"); } - if ((rangedLevel + rangeNeed) <= Experience.MAX_REAL_LEVEL) + if ((rangeLevel + rangeNeed) <= Experience.MAX_REAL_LEVEL) { sb.append(rangeNeed).append(" Ranged"); } @@ -133,76 +125,10 @@ class CombatLevelOverlay extends Overlay { sb.append(magicNeed).append(" Magic"); } - if ((prayerLevel + prayNeed) <= Experience.MAX_REAL_LEVEL) + if ((prayerLevel + prayerNeed) <= Experience.MAX_REAL_LEVEL) { - sb.append(prayNeed).append(" Prayer"); + sb.append(prayerNeed).append(" Prayer"); } return sb.toString(); } - - /** - * Calculate skill levels required for increasing combat level, meant - * for all combat skills besides prayer, ranged, and magic. - * - * @param start initial value - * @param end ending value (combat level + 1) - * @param multiple how much adding one skill level will change combat - * @return levels required for a specific skill to level up combat - */ - @VisibleForTesting - static int calcLevels(double start, int end, double multiple) - { - return (int) Math.ceil(calcMultipliedLevels(start, end, multiple)); - } - - /** - * Calculate skill levels for increasing combat level, meant ONLY for the Prayer skill. - *
- * Note: Prayer is a special case, only leveling up upon even level numbers. This is accounted - * for in this function. - *
- * - * @param start current combat level - * @param end ending value (combat level + 1) - * @param prayerLevel the player's current prayer level - * @return Prayer levels required to level up combat - */ - @VisibleForTesting - static int calcLevelsPray(double start, int end, int prayerLevel) - { - int neededLevels = (int) Math.ceil(calcMultipliedLevels(start, end, PRAY_MULT)); - - if (prayerLevel % 2 != 0) - { - neededLevels--; - } - - if ((prayerLevel + neededLevels) % 2 != 0) - { - return neededLevels + 1; - } - - return neededLevels; - } - - private static double calcMultipliedLevels(double start, int end, double multiple) - { - return (end - start) / multiple; - } - - /** - * Calculate skill levels required for increasing combat level, meant - * ONLY for Ranged and Magic skills. - * - * @param start either the current ranged or magic level - * @param end ending value (combat level + 1) - * @param dhp defence, hitpoints, and prayer; this is the initial calculated "base" value - * @return levels required for a specific skill to level up combat - */ - @VisibleForTesting - static int calcLevelsRM(double start, int end, double dhp) - { - start = Math.floor(start * RANGE_MAGIC_LEVEL_MULT) * RANGE_MAGIC_MULT; - return (int) Math.ceil((end - dhp - start) / (RANGE_MAGIC_MULT * RANGE_MAGIC_LEVEL_MULT)); - } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/emojis/EmojiPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/emojis/EmojiPlugin.java index bfca89c184..988e73a625 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/emojis/EmojiPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/emojis/EmojiPlugin.java @@ -122,6 +122,7 @@ public class EmojiPlugin extends Plugin case FRIENDSCHAT: case PRIVATECHAT: case PRIVATECHATOUT: + case MODPRIVATECHAT: break; default: return; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeConfig.java index 7bb41bfabf..18b9d6386b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeConfig.java @@ -1,5 +1,6 @@ /* * Copyright (c) 2017, Devin French