diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/SkillXPInfo.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/SkillXPInfo.java index 9b1e71fb12..50b87b15a7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/SkillXPInfo.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/SkillXPInfo.java @@ -1,5 +1,6 @@ /* * Copyright (c) 2017, Cameron + * Copyright (c) 2018, Levi * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -41,10 +42,12 @@ class SkillXPInfo private int startXp = -1; private int xpGained = 0; private int actions = 0; - private int actionExp = 0; private int nextLevelExp = 0; private int startLevelExp = 0; private int level = 0; + private boolean initialized = false; + private int[] actionExps = new int[10]; + private int actionExpIndex = 0; int getXpHr() { @@ -79,7 +82,20 @@ class SkillXPInfo int getActionsRemaining() { - return (int) Math.ceil(getXpRemaining() / (float) actionExp); + if (initialized) + { + long xpRemaining = getXpRemaining() * actionExps.length; + long actionExp = 0; + + for (int i = 0; i < actionExps.length; i++) + { + actionExp += actionExps[i]; + } + + return Math.toIntExact(xpRemaining / actionExp); + } + + return Integer.MAX_VALUE; } int getSkillProgress() @@ -126,7 +142,25 @@ class SkillXPInfo return false; } - actionExp = currentXp - originalXp; + int actionExp = currentXp - originalXp; + + if (initialized) + { + actionExps[actionExpIndex] = actionExp; + } + else + { + // So we have a decent average off the bat, lets populate all values with what we see. + for (int i = 0; i < actionExps.length; i++) + { + actionExps[i] = actionExp; + } + + initialized = true; + } + + actionExpIndex = (actionExpIndex + 1) % actionExps.length; + actions++; xpGained = currentXp - startXp; startLevelExp = Experience.getXpForLevel(Experience.getLevelForXp(currentXp)); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java index 6820c2e55d..174fb160f2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java @@ -194,7 +194,7 @@ public class XpTrackerPlugin extends Plugin public SkillXPInfo getSkillXpInfo(Skill skill) { - return xpInfos.computeIfAbsent(skill, s -> new SkillXPInfo(s)); + return xpInfos.computeIfAbsent(skill, SkillXPInfo::new); } @Subscribe