Fixed bug of stats adding up when quitting and joining back

This commit is contained in:
Ka0rX 2022-10-28 21:56:02 +02:00
parent f75522eadf
commit 29aebdc2a1
2 changed files with 27 additions and 9 deletions

View File

@ -2,6 +2,8 @@ package net.Indyuce.mmocore.api.player;
import io.lumine.mythic.lib.MythicLib; import io.lumine.mythic.lib.MythicLib;
import io.lumine.mythic.lib.api.player.MMOPlayerData; import io.lumine.mythic.lib.api.player.MMOPlayerData;
import io.lumine.mythic.lib.api.stat.StatInstance;
import io.lumine.mythic.lib.api.stat.modifier.StatModifier;
import io.lumine.mythic.lib.player.cooldown.CooldownMap; import io.lumine.mythic.lib.player.cooldown.CooldownMap;
import io.lumine.mythic.lib.player.skill.PassiveSkill; import io.lumine.mythic.lib.player.skill.PassiveSkill;
import net.Indyuce.mmocore.party.provided.MMOCorePartyModule; import net.Indyuce.mmocore.party.provided.MMOCorePartyModule;
@ -33,6 +35,7 @@ import net.Indyuce.mmocore.guild.provided.Guild;
import net.Indyuce.mmocore.loot.chest.particle.SmallParticleEffect; import net.Indyuce.mmocore.loot.chest.particle.SmallParticleEffect;
import net.Indyuce.mmocore.party.AbstractParty; import net.Indyuce.mmocore.party.AbstractParty;
import net.Indyuce.mmocore.player.Unlockable; import net.Indyuce.mmocore.player.Unlockable;
import net.Indyuce.mmocore.player.stats.StatInfo;
import net.Indyuce.mmocore.skill.ClassSkill; import net.Indyuce.mmocore.skill.ClassSkill;
import net.Indyuce.mmocore.skill.RegisteredSkill; import net.Indyuce.mmocore.skill.RegisteredSkill;
import net.Indyuce.mmocore.skill.cast.SkillCastingHandler; import net.Indyuce.mmocore.skill.cast.SkillCastingHandler;
@ -117,6 +120,7 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
// NON-FINAL player data stuff made public to facilitate field change // NON-FINAL player data stuff made public to facilitate field change
public boolean noCooldown; public boolean noCooldown;
private boolean statLoaded;
public CombatRunnable combat; public CombatRunnable combat;
/** /**
@ -132,6 +136,13 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
questData = new PlayerQuests(this); questData = new PlayerQuests(this);
playerStats = new PlayerStats(this); playerStats = new PlayerStats(this);
//Used to see if the triggers need to be applied
boolean statLoaded = false;
for (StatInstance instance : mmoData.getStatMap().getInstances())
for (StatModifier modifier : instance.getModifiers())
if (modifier.getKey().startsWith("trigger"))
statLoaded = true;
this.statLoaded = statLoaded;
} }
@ -168,12 +179,14 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
for (SkillTree skillTree : MMOCore.plugin.skillTreeManager.getAll()) for (SkillTree skillTree : MMOCore.plugin.skillTreeManager.getAll())
skillTree.setupNodeState(this); skillTree.setupNodeState(this);
//Stat triggers setup
for (SkillTree skillTree : MMOCore.plugin.skillTreeManager.getAll()) { if (!statLoaded)
for (SkillTreeNode node : skillTree.getNodes()) { //Stat triggers setup
node.getExperienceTable().claimStatTriggers(this, node); for (SkillTree skillTree : MMOCore.plugin.skillTreeManager.getAll()) {
for (SkillTreeNode node : skillTree.getNodes()) {
node.getExperienceTable().claimStatTriggers(this, node);
}
} }
}
} }
@ -227,6 +240,10 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
return nodeLevelsString.entrySet(); return nodeLevelsString.entrySet();
} }
public boolean isStatLoaded() {
return statLoaded;
}
public Map<SkillTreeNode, Integer> getNodeLevels() { public Map<SkillTreeNode, Integer> getNodeLevels() {
return new HashMap<>(nodeLevels); return new HashMap<>(nodeLevels);
} }

View File

@ -100,10 +100,11 @@ public class PlayerProfessions {
for (Entry<String, JsonElement> entry : obj.getAsJsonObject("timesClaimed").entrySet()) for (Entry<String, JsonElement> entry : obj.getAsJsonObject("timesClaimed").entrySet())
playerData.getItemClaims().put("profession." + entry.getKey(), entry.getValue().getAsInt()); playerData.getItemClaims().put("profession." + entry.getKey(), entry.getValue().getAsInt());
for (Profession profession : MMOCore.plugin.professionManager.getAll()) { if (!playerData.isStatLoaded())
if (profession.hasExperienceTable()) for (Profession profession : MMOCore.plugin.professionManager.getAll()) {
profession.getExperienceTable().claimStatTriggers(playerData, profession); if (profession.hasExperienceTable())
} profession.getExperienceTable().claimStatTriggers(playerData, profession);
}
} }