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 ffe1a9f7b1..0e2cafd901 100644 --- a/runelite-api/src/main/java/net/runelite/api/Experience.java +++ b/runelite-api/src/main/java/net/runelite/api/Experience.java @@ -88,4 +88,27 @@ public class Experience return high + 2; } + + public static double getCombatLevelPrecise(int attackLevel, int strengthLevel, + int defenceLevel, int hitpointsLevel, int magicLevel, + int rangeLevel, int prayerLevel) + { + double melee = 0.25 * (defenceLevel + hitpointsLevel + Math.floor(prayerLevel / 2)) + + 0.325 * (attackLevel + strengthLevel); + + double range = 0.25 * (defenceLevel + hitpointsLevel + Math.floor(prayerLevel / 2)) + + 0.325 * (Math.floor(rangeLevel / 2)); + + double magic = 0.25 * (defenceLevel + hitpointsLevel + Math.floor(prayerLevel / 2)) + + 0.325 * (Math.floor(magicLevel / 2)); + + return Math.max(melee, Math.max(range, magic)); + } + + public static int getCombatLevel(int attackLevel, int strengthLevel, + int defenceLevel, int hitpointsLevel, int magicLevel, + int rangeLevel, int prayerLevel) + { + return (int) getCombatLevelPrecise(attackLevel, strengthLevel, defenceLevel, hitpointsLevel, magicLevel, rangeLevel, prayerLevel); + } } diff --git a/runelite-api/src/test/java/net/runelite/api/ExperienceTest.java b/runelite-api/src/test/java/net/runelite/api/ExperienceTest.java index 1aa8cc05a4..a14e821ba7 100644 --- a/runelite-api/src/test/java/net/runelite/api/ExperienceTest.java +++ b/runelite-api/src/test/java/net/runelite/api/ExperienceTest.java @@ -54,8 +54,14 @@ public class ExperienceTest level = Experience.getLevelForXp(0); Assert.assertEquals(1, level); - + level = Experience.getLevelForXp(200_000_000); Assert.assertEquals(126, level); } + + @Test + public void testGetCombatLevel() + { + Assert.assertEquals(126, Experience.getCombatLevel(99, 99, 99, 99, 70, 42, 98)); + } }