mirror of
https://gitlab.com/phoenix-dvpmt/mmocore.git
synced 2025-02-08 12:21:23 +01:00
Fixes skill tree points consumption dupe bug
This commit is contained in:
parent
15e759a70b
commit
84e587ba0b
@ -232,11 +232,12 @@ public class PlayerData extends SynchronizedDataHolder implements OfflinePlayerD
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setSkillTreePoints(@NotNull String treeId, int points) {
|
public void setSkillTreePoints(@NotNull String treeId, int points) {
|
||||||
skillTreePoints.put(treeId, points);
|
if (points <= 0) skillTreePoints.remove(treeId);
|
||||||
|
else skillTreePoints.put(treeId, points);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void giveSkillTreePoints(@NotNull String id, int val) {
|
public void giveSkillTreePoints(@NotNull String id, int val) {
|
||||||
skillTreePoints.merge(id, val, (points, ignored) -> points + val);
|
skillTreePoints.merge(id, Math.max(0, val), (points, ignored) -> Math.max(0, points + val));
|
||||||
}
|
}
|
||||||
|
|
||||||
public int countSkillTreePoints(@NotNull SkillTree skillTree) {
|
public int countSkillTreePoints(@NotNull SkillTree skillTree) {
|
||||||
@ -340,7 +341,7 @@ public class PlayerData extends SynchronizedDataHolder implements OfflinePlayerD
|
|||||||
skillTreePoints.computeIfPresent(node.getTree().getId(), (key, points) -> {
|
skillTreePoints.computeIfPresent(node.getTree().getId(), (key, points) -> {
|
||||||
final int withdrawn = Math.min(points, cost.get());
|
final int withdrawn = Math.min(points, cost.get());
|
||||||
cost.set(cost.get() - withdrawn);
|
cost.set(cost.get() - withdrawn);
|
||||||
return points == withdrawn ? null : points - withdrawn;
|
return points <= withdrawn ? null : points - withdrawn;
|
||||||
});
|
});
|
||||||
if (cost.get() > 0) withdrawSkillTreePoints("global", cost.get());
|
if (cost.get() > 0) withdrawSkillTreePoints("global", cost.get());
|
||||||
|
|
||||||
|
@ -125,13 +125,13 @@ public class SavedClassInformation implements ClassDataContainer {
|
|||||||
this.stellium = data.getStellium();
|
this.stellium = data.getStellium();
|
||||||
this.stamina = data.getStamina();
|
this.stamina = data.getStamina();
|
||||||
|
|
||||||
data.mapAttributeLevels().forEach((key, val) -> this.attributeLevels.put(key, val));
|
attributeLevels.putAll(data.mapAttributeLevels());
|
||||||
data.mapSkillLevels().forEach((key, val) -> skillLevels.put(key, val));
|
skillLevels.putAll(data.mapSkillLevels());
|
||||||
data.mapSkillTreePoints().forEach((key, val) -> skillTreePoints.put(key, val));
|
skillTreePoints.putAll(data.mapSkillTreePoints());
|
||||||
data.getNodeLevels().forEach((node, level) -> nodeLevels.put(node, level));
|
nodeLevels.putAll(data.getNodeLevels());
|
||||||
data.getNodeTimesClaimed().forEach((key, val) -> nodeTimesClaimed.put(key, val));
|
nodeTimesClaimed.putAll(data.getNodeTimesClaimed());
|
||||||
data.mapBoundSkills().forEach((slot, skill) -> boundSkills.put(slot, skill));
|
boundSkills.putAll(data.mapBoundSkills());
|
||||||
data.getUnlockedItems().forEach(item -> unlockedItems.add(item));
|
unlockedItems.addAll(data.getUnlockedItems());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -324,10 +324,7 @@ public class SavedClassInformation implements ClassDataContainer {
|
|||||||
player.bindSkill(slot, profess.getSkill(boundSkills.get(slot)));
|
player.bindSkill(slot, profess.getSkill(boundSkills.get(slot)));
|
||||||
|
|
||||||
skillLevels.forEach(player::setSkillLevel);
|
skillLevels.forEach(player::setSkillLevel);
|
||||||
attributeLevels.forEach((id, pts) -> {
|
attributeLevels.forEach((id, pts) -> player.getAttributes().getInstance(id).setBase(pts));
|
||||||
final PlayerAttributes.AttributeInstance ins = player.getAttributes().getInstance(id);
|
|
||||||
if (ins != null) ins.setBase(pts);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Careful, the global points must not be forgotten.
|
// Careful, the global points must not be forgotten.
|
||||||
player.setSkillTreePoints("global", skillTreePoints.getOrDefault("global", 0));
|
player.setSkillTreePoints("global", skillTreePoints.getOrDefault("global", 0));
|
||||||
|
@ -9,6 +9,7 @@ import net.Indyuce.mmocore.guild.provided.Guild;
|
|||||||
import net.Indyuce.mmocore.manager.data.OfflinePlayerData;
|
import net.Indyuce.mmocore.manager.data.OfflinePlayerData;
|
||||||
import net.Indyuce.mmocore.skill.ClassSkill;
|
import net.Indyuce.mmocore.skill.ClassSkill;
|
||||||
import net.Indyuce.mmocore.skilltree.SkillTreeNode;
|
import net.Indyuce.mmocore.skilltree.SkillTreeNode;
|
||||||
|
import net.Indyuce.mmocore.skilltree.tree.SkillTree;
|
||||||
import org.apache.commons.lang.Validate;
|
import org.apache.commons.lang.Validate;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
@ -82,11 +83,8 @@ public class YAMLPlayerDataHandler extends YAMLSynchronizedDataHandler<PlayerDat
|
|||||||
data.bindSkill(Integer.parseInt(key), skill);
|
data.bindSkill(Integer.parseInt(key), skill);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (String key : MMOCore.plugin.skillTreeManager.getAll().
|
for (SkillTree tree : MMOCore.plugin.skillTreeManager.getAll()) {
|
||||||
stream().
|
data.setSkillTreePoints(tree.getId(), config.getInt("skill-tree-points." + tree.getId()));
|
||||||
map(skillTree -> skillTree.getId()).
|
|
||||||
toList()) {
|
|
||||||
data.setSkillTreePoints(key, config.getInt("skill-tree-points." + key, 0));
|
|
||||||
}
|
}
|
||||||
data.setSkillTreePoints("global", config.getInt("skill-tree-points.global", 0));
|
data.setSkillTreePoints("global", config.getInt("skill-tree-points.global", 0));
|
||||||
|
|
||||||
@ -145,6 +143,7 @@ public class YAMLPlayerDataHandler extends YAMLSynchronizedDataHandler<PlayerDat
|
|||||||
config.set("friends", data.getFriends().stream().map(UUID::toString).collect(Collectors.toList()));
|
config.set("friends", data.getFriends().stream().map(UUID::toString).collect(Collectors.toList()));
|
||||||
config.set("last-login", data.getLastLogin());
|
config.set("last-login", data.getLastLogin());
|
||||||
config.set("guild", data.hasGuild() ? data.getGuild().getId() : null);
|
config.set("guild", data.hasGuild() ? data.getGuild().getId() : null);
|
||||||
|
config.set("skill-tree-points", null); // Fixes skill tree points leftovers
|
||||||
data.mapSkillTreePoints().forEach((key1, value) -> config.set("skill-tree-points." + key1, value));
|
data.mapSkillTreePoints().forEach((key1, value) -> config.set("skill-tree-points." + key1, value));
|
||||||
config.set("skill-tree-reallocation-points", data.getSkillTreeReallocationPoints());
|
config.set("skill-tree-reallocation-points", data.getSkillTreeReallocationPoints());
|
||||||
config.set("skill", null);
|
config.set("skill", null);
|
||||||
|
Loading…
Reference in New Issue
Block a user