From 60b3ed18c076885bc4591307ddb010d69a967c04 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 11 Mar 2019 21:32:10 -0400 Subject: [PATCH] xptracker: fix initiailizing overall xp on login The isInitialized() check was not strict enough causing the xp events on login being calculated twords gained xp Also fix xp tracker not being initialized on accounts with 0 construction exp due to the result of updateSkill not being INITIALIZED Closes #8167 --- .../java/net/runelite/client/plugins/xptracker/XpState.java | 5 +++-- .../runelite/client/plugins/xptracker/XpTrackerPlugin.java | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpState.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpState.java index d6a10df1b8..16602b0cb4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpState.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpState.java @@ -79,7 +79,7 @@ class XpState if (state.getStartXp() == -1) { - if (currentXp > 0) + if (currentXp >= 0) { initializeSkill(skill, currentXp); return XpUpdateResult.INITIALIZED; @@ -198,7 +198,8 @@ class XpState boolean isInitialized(Skill skill) { - return xpSkills.containsKey(skill); + XpStateSingle xpStateSingle = xpSkills.get(skill); + return xpStateSingle != null && xpStateSingle.getStartXp() != -1; } @NonNull 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 c66c409a16..f72bcd12f2 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 @@ -305,7 +305,9 @@ public class XpTrackerPlugin extends Plugin if (skill == Skill.CONSTRUCTION && updateResult == XpUpdateResult.INITIALIZED) { // Construction is the last skill initialized on login, now initialize the total experience - xpState.initializeSkill(Skill.OVERALL, client.getOverallExperience()); + long overallXp = client.getOverallExperience(); + log.debug("Initializing XP tracker with {} overall exp", overallXp); + xpState.initializeSkill(Skill.OVERALL, overallXp); } else if (xpState.isInitialized(Skill.OVERALL)) {