forked from Upstream/mmocore
Debug and enhancements for the reset method.
This commit is contained in:
parent
06985321d6
commit
9e821c79db
@ -173,10 +173,10 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
|
||||
j++;
|
||||
}
|
||||
|
||||
for(SkillTree skillTree:profess.getSkillTrees()) {
|
||||
for(SkillTreeNode node: skillTree.getNodes()) {
|
||||
if(!nodeLevels.containsKey(node))
|
||||
nodeLevels.put(node,0);
|
||||
for (SkillTree skillTree : profess.getSkillTrees()) {
|
||||
for (SkillTreeNode node : skillTree.getNodes()) {
|
||||
if (!nodeLevels.containsKey(node))
|
||||
nodeLevels.put(node, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -196,7 +196,7 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
|
||||
node.getExperienceTable().claimStatTriggers(this, node);
|
||||
}
|
||||
}
|
||||
statLoaded=true;
|
||||
statLoaded = true;
|
||||
|
||||
}
|
||||
|
||||
@ -233,6 +233,8 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
|
||||
return new HashMap(skillTreePoints);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void clearSkillTreePoints() {
|
||||
skillTreePoints.clear();
|
||||
}
|
||||
@ -371,21 +373,11 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
|
||||
return result;
|
||||
}
|
||||
|
||||
public void resetNodeTimesClaimed() {
|
||||
Map<String, Integer> newTableItemClaims = new HashMap<>();
|
||||
tableItemClaims.forEach((str, val) -> {
|
||||
if (!str.startsWith(SkillTreeNode.getPrefix()))
|
||||
newTableItemClaims.put(str, val);
|
||||
});
|
||||
public void resetTimesClaimed() {
|
||||
tableItemClaims.clear();
|
||||
tableItemClaims.putAll(newTableItemClaims);
|
||||
}
|
||||
|
||||
|
||||
public void addNodeLevel(SkillTreeNode node) {
|
||||
nodeLevels.put(node, nodeLevels.get(node) + 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
|
||||
@ -804,7 +796,8 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
|
||||
* If it's null, no hologram will be displayed
|
||||
* @param splitExp Should the exp be split among party members
|
||||
*/
|
||||
public void giveExperience(double value, EXPSource source, @Nullable Location hologramLocation, boolean splitExp) {
|
||||
public void giveExperience(double value, EXPSource source, @Nullable Location hologramLocation,
|
||||
boolean splitExp) {
|
||||
if (value <= 0)
|
||||
return;
|
||||
|
||||
|
@ -4,6 +4,7 @@ import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.experience.Profession;
|
||||
import net.Indyuce.mmocore.api.player.attribute.PlayerAttributes;
|
||||
import net.Indyuce.mmocore.tree.skilltree.SkillTree;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
@ -14,210 +15,250 @@ import io.lumine.mythic.lib.command.api.CommandTreeNode;
|
||||
import io.lumine.mythic.lib.command.api.Parameter;
|
||||
|
||||
public class ResetCommandTreeNode extends CommandTreeNode {
|
||||
public ResetCommandTreeNode(CommandTreeNode parent) {
|
||||
super(parent, "reset");
|
||||
public ResetCommandTreeNode(CommandTreeNode parent) {
|
||||
super(parent, "reset");
|
||||
|
||||
addChild(new ResetLevelsCommandTreeNode(this));
|
||||
addChild(new ResetSkillsCommandTreeNode(this));
|
||||
addChild(new ResetAllCommandTreeNode(this));
|
||||
addChild(new ResetAttributesCommandTreeNode(this));
|
||||
addChild(new ResetWaypointsCommandTreeNode(this));
|
||||
}
|
||||
addChild(new ResetLevelsCommandTreeNode(this));
|
||||
addChild(new ResetSkillsCommandTreeNode(this));
|
||||
addChild(new ResetAllCommandTreeNode(this));
|
||||
addChild(new ResetAttributesCommandTreeNode(this));
|
||||
addChild(new ResetWaypointsCommandTreeNode(this));
|
||||
addChild(new ResetSkillTreesCommandTreeNode(this));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandResult execute(CommandSender sender, String[] args) {
|
||||
return CommandResult.THROW_USAGE;
|
||||
}
|
||||
@Override
|
||||
public CommandResult execute(CommandSender sender, String[] args) {
|
||||
return CommandResult.THROW_USAGE;
|
||||
}
|
||||
|
||||
public static class ResetAllCommandTreeNode extends CommandTreeNode {
|
||||
public ResetAllCommandTreeNode(CommandTreeNode parent) {
|
||||
super(parent, "all");
|
||||
public static class ResetAllCommandTreeNode extends CommandTreeNode {
|
||||
public ResetAllCommandTreeNode(CommandTreeNode parent) {
|
||||
super(parent, "all");
|
||||
|
||||
addParameter(Parameter.PLAYER);
|
||||
}
|
||||
addParameter(Parameter.PLAYER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandResult execute(CommandSender sender, String[] args) {
|
||||
if (args.length < 4)
|
||||
return CommandResult.THROW_USAGE;
|
||||
@Override
|
||||
public CommandResult execute(CommandSender sender, String[] args) {
|
||||
if (args.length < 4)
|
||||
return CommandResult.THROW_USAGE;
|
||||
|
||||
Player player = Bukkit.getPlayer(args[3]);
|
||||
if (player == null) {
|
||||
sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[3] + ".");
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
Player player = Bukkit.getPlayer(args[3]);
|
||||
if (player == null) {
|
||||
sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[3] + ".");
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
|
||||
PlayerData data = PlayerData.get(player);
|
||||
MMOCore.plugin.dataProvider.getDataManager().getDefaultData().apply(data);
|
||||
data.setExperience(0);
|
||||
for (Profession profession : MMOCore.plugin.professionManager.getAll()) {
|
||||
data.getCollectionSkills().setExperience(profession, 0);
|
||||
data.getCollectionSkills().setLevel(profession, 0);
|
||||
}
|
||||
MMOCore.plugin.classManager.getAll().forEach(data::unloadClassInfo);
|
||||
data.getAttributes().getInstances().forEach(ins -> ins.setBase(0));
|
||||
data.mapSkillLevels().forEach((skill, level) -> data.resetSkillLevel(skill));
|
||||
while (data.hasSkillBound(0))
|
||||
data.unbindSkill(0);
|
||||
data.getQuestData().resetFinishedQuests();
|
||||
data.getQuestData().start(null);
|
||||
CommandVerbose.verbose(sender, CommandVerbose.CommandType.RESET,
|
||||
ChatColor.GOLD + player.getName() + ChatColor.YELLOW + "'s data was succesfully reset.");
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
PlayerData data = PlayerData.get(player);
|
||||
MMOCore.plugin.dataProvider.getDataManager().getDefaultData().apply(data);
|
||||
data.setExperience(0);
|
||||
for (Profession profession : MMOCore.plugin.professionManager.getAll()) {
|
||||
data.getCollectionSkills().setExperience(profession, 0);
|
||||
data.getCollectionSkills().setLevel(profession, 0);
|
||||
}
|
||||
MMOCore.plugin.classManager.getAll().forEach(data::unloadClassInfo);
|
||||
data.getAttributes().getInstances().forEach(ins -> ins.setBase(0));
|
||||
data.mapSkillLevels().forEach((skill, level) -> data.resetSkillLevel(skill));
|
||||
data.setSkillTreePoints("global", 0);
|
||||
for (SkillTree skillTree : data.getProfess().getSkillTrees()) {
|
||||
data.resetSkillTree(skillTree);
|
||||
data.setSkillTreePoints(skillTree.getId(), 0);
|
||||
}
|
||||
|
||||
public static class ResetWaypointsCommandTreeNode extends CommandTreeNode {
|
||||
public ResetWaypointsCommandTreeNode(CommandTreeNode parent) {
|
||||
super(parent, "waypoints");
|
||||
data.resetTimesClaimed();
|
||||
while (data.hasSkillBound(0))
|
||||
data.unbindSkill(0);
|
||||
while (data.hasPassiveSkillBound(0))
|
||||
data.unbindPassiveSkill(0);
|
||||
data.getQuestData().resetFinishedQuests();
|
||||
data.getQuestData().start(null);
|
||||
CommandVerbose.verbose(sender, CommandVerbose.CommandType.RESET,
|
||||
ChatColor.GOLD + player.getName() + ChatColor.YELLOW + "'s data was succesfully reset.");
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
addParameter(Parameter.PLAYER);
|
||||
}
|
||||
public static class ResetWaypointsCommandTreeNode extends CommandTreeNode {
|
||||
public ResetWaypointsCommandTreeNode(CommandTreeNode parent) {
|
||||
super(parent, "waypoints");
|
||||
|
||||
@Override
|
||||
public CommandResult execute(CommandSender sender, String[] args) {
|
||||
if (args.length < 4)
|
||||
return CommandResult.THROW_USAGE;
|
||||
addParameter(Parameter.PLAYER);
|
||||
}
|
||||
|
||||
Player player = Bukkit.getPlayer(args[3]);
|
||||
if (player == null) {
|
||||
sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[3] + ".");
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
@Override
|
||||
public CommandResult execute(CommandSender sender, String[] args) {
|
||||
if (args.length < 4)
|
||||
return CommandResult.THROW_USAGE;
|
||||
|
||||
PlayerData data = PlayerData.get(player);
|
||||
data.getWaypoints().clear();
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
Player player = Bukkit.getPlayer(args[3]);
|
||||
if (player == null) {
|
||||
sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[3] + ".");
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
|
||||
public static class ResetQuestsCommandTreeNode extends CommandTreeNode {
|
||||
public ResetQuestsCommandTreeNode(CommandTreeNode parent) {
|
||||
super(parent, "quests");
|
||||
PlayerData data = PlayerData.get(player);
|
||||
data.getWaypoints().clear();
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
addParameter(Parameter.PLAYER);
|
||||
}
|
||||
public static class ResetQuestsCommandTreeNode extends CommandTreeNode {
|
||||
public ResetQuestsCommandTreeNode(CommandTreeNode parent) {
|
||||
super(parent, "quests");
|
||||
|
||||
@Override
|
||||
public CommandResult execute(CommandSender sender, String[] args) {
|
||||
if (args.length < 4)
|
||||
return CommandResult.THROW_USAGE;
|
||||
addParameter(Parameter.PLAYER);
|
||||
}
|
||||
|
||||
Player player = Bukkit.getPlayer(args[3]);
|
||||
if (player == null) {
|
||||
sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[3] + ".");
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
@Override
|
||||
public CommandResult execute(CommandSender sender, String[] args) {
|
||||
if (args.length < 4)
|
||||
return CommandResult.THROW_USAGE;
|
||||
|
||||
PlayerData data = PlayerData.get(player);
|
||||
data.getQuestData().resetFinishedQuests();
|
||||
data.getQuestData().start(null);
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
Player player = Bukkit.getPlayer(args[3]);
|
||||
if (player == null) {
|
||||
sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[3] + ".");
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
|
||||
public static class ResetSkillsCommandTreeNode extends CommandTreeNode {
|
||||
public ResetSkillsCommandTreeNode(CommandTreeNode parent) {
|
||||
super(parent, "skills");
|
||||
PlayerData data = PlayerData.get(player);
|
||||
data.getQuestData().resetFinishedQuests();
|
||||
data.getQuestData().start(null);
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
addParameter(Parameter.PLAYER);
|
||||
}
|
||||
public static class ResetSkillsCommandTreeNode extends CommandTreeNode {
|
||||
public ResetSkillsCommandTreeNode(CommandTreeNode parent) {
|
||||
super(parent, "skills");
|
||||
|
||||
@Override
|
||||
public CommandResult execute(CommandSender sender, String[] args) {
|
||||
if (args.length < 4)
|
||||
return CommandResult.THROW_USAGE;
|
||||
addParameter(Parameter.PLAYER);
|
||||
}
|
||||
|
||||
Player player = Bukkit.getPlayer(args[3]);
|
||||
if (player == null) {
|
||||
sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[3] + ".");
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
@Override
|
||||
public CommandResult execute(CommandSender sender, String[] args) {
|
||||
if (args.length < 4)
|
||||
return CommandResult.THROW_USAGE;
|
||||
|
||||
PlayerData data = PlayerData.get(player);
|
||||
data.mapSkillLevels().forEach((skill, level) -> data.resetSkillLevel(skill));
|
||||
while (data.hasSkillBound(0))
|
||||
data.unbindSkill(0);
|
||||
CommandVerbose.verbose(sender, CommandVerbose.CommandType.RESET,
|
||||
ChatColor.GOLD + player.getName() + ChatColor.YELLOW + "'s skill data was succesfully reset.");
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
Player player = Bukkit.getPlayer(args[3]);
|
||||
if (player == null) {
|
||||
sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[3] + ".");
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
|
||||
public class ResetAttributesCommandTreeNode extends CommandTreeNode {
|
||||
public ResetAttributesCommandTreeNode(CommandTreeNode parent) {
|
||||
super(parent, "attributes");
|
||||
PlayerData data = PlayerData.get(player);
|
||||
data.mapSkillLevels().forEach((skill, level) -> data.resetSkillLevel(skill));
|
||||
while (data.hasSkillBound(0))
|
||||
data.unbindSkill(0);
|
||||
CommandVerbose.verbose(sender, CommandVerbose.CommandType.RESET,
|
||||
ChatColor.GOLD + player.getName() + ChatColor.YELLOW + "'s skill data was succesfully reset.");
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
addParameter(Parameter.PLAYER);
|
||||
addParameter(new Parameter("(-reallocate)", (explore, list) -> list.add("-reallocate")));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandResult execute(CommandSender sender, String[] args) {
|
||||
if (args.length < 4)
|
||||
return CommandResult.THROW_USAGE;
|
||||
public static class ResetSkillTreesCommandTreeNode extends CommandTreeNode {
|
||||
public ResetSkillTreesCommandTreeNode(CommandTreeNode parent) {
|
||||
super(parent, "skill-trees");
|
||||
|
||||
Player player = Bukkit.getPlayer(args[3]);
|
||||
if (player == null) {
|
||||
sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[3] + ".");
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
addParameter(Parameter.PLAYER);
|
||||
}
|
||||
|
||||
PlayerData data = PlayerData.get(player);
|
||||
@Override
|
||||
public CommandResult execute(CommandSender sender, String[] args) {
|
||||
if (args.length < 4)
|
||||
return CommandResult.THROW_USAGE;
|
||||
|
||||
/*
|
||||
* force reallocating of player attribute points
|
||||
*/
|
||||
if (args.length > 4 && args[4].equalsIgnoreCase("-reallocate")) {
|
||||
Player player = Bukkit.getPlayer(args[3]);
|
||||
if (player == null) {
|
||||
sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[3] + ".");
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
|
||||
int points = 0;
|
||||
for (PlayerAttributes.AttributeInstance ins : data.getAttributes().getInstances()) {
|
||||
points += ins.getBase();
|
||||
ins.setBase(0);
|
||||
}
|
||||
PlayerData data = PlayerData.get(player);
|
||||
for (SkillTree skillTree : data.getProfess().getSkillTrees())
|
||||
data.resetSkillTree(skillTree);
|
||||
CommandVerbose.verbose(sender, CommandVerbose.CommandType.RESET,
|
||||
ChatColor.GOLD + player.getName() + ChatColor.YELLOW + "'s skill-tree data was succesfully reset.");
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
data.giveAttributePoints(points);
|
||||
CommandVerbose.verbose(sender, CommandVerbose.CommandType.RESET,
|
||||
ChatColor.GOLD + player.getName() + ChatColor.YELLOW + "'s attribute points spendings were successfully reset.");
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
public class ResetAttributesCommandTreeNode extends CommandTreeNode {
|
||||
public ResetAttributesCommandTreeNode(CommandTreeNode parent) {
|
||||
super(parent, "attributes");
|
||||
|
||||
data.getAttributes().getInstances().forEach(ins -> ins.setBase(0));
|
||||
CommandVerbose.verbose(sender, CommandVerbose.CommandType.RESET,
|
||||
ChatColor.GOLD + player.getName() + ChatColor.YELLOW + "'s attributes were succesfully reset.");
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
addParameter(Parameter.PLAYER);
|
||||
addParameter(new Parameter("(-reallocate)", (explore, list) -> list.add("-reallocate")));
|
||||
}
|
||||
|
||||
public static class ResetLevelsCommandTreeNode extends CommandTreeNode {
|
||||
public ResetLevelsCommandTreeNode(CommandTreeNode parent) {
|
||||
super(parent, "levels");
|
||||
@Override
|
||||
public CommandResult execute(CommandSender sender, String[] args) {
|
||||
if (args.length < 4)
|
||||
return CommandResult.THROW_USAGE;
|
||||
|
||||
addParameter(Parameter.PLAYER);
|
||||
}
|
||||
Player player = Bukkit.getPlayer(args[3]);
|
||||
if (player == null) {
|
||||
sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[3] + ".");
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandResult execute(CommandSender sender, String[] args) {
|
||||
if (args.length < 4)
|
||||
return CommandResult.THROW_USAGE;
|
||||
PlayerData data = PlayerData.get(player);
|
||||
|
||||
Player player = Bukkit.getPlayer(args[3]);
|
||||
if (player == null) {
|
||||
sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[3] + ".");
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
/*
|
||||
* force reallocating of player attribute points
|
||||
*/
|
||||
if (args.length > 4 && args[4].equalsIgnoreCase("-reallocate")) {
|
||||
|
||||
PlayerData data = PlayerData.get(player);
|
||||
data.setLevel(MMOCore.plugin.dataProvider.getDataManager().getDefaultData().getLevel());
|
||||
data.setExperience(0);
|
||||
for (Profession profession : MMOCore.plugin.professionManager.getAll()) {
|
||||
data.getCollectionSkills().setExperience(profession, 0);
|
||||
data.getCollectionSkills().setLevel(profession, 0);
|
||||
}
|
||||
CommandVerbose.verbose(sender, CommandVerbose.CommandType.RESET,
|
||||
ChatColor.GOLD + player.getName() + ChatColor.YELLOW + "'s levels were succesfully reset.");
|
||||
int points = 0;
|
||||
for (PlayerAttributes.AttributeInstance ins : data.getAttributes().getInstances()) {
|
||||
points += ins.getBase();
|
||||
ins.setBase(0);
|
||||
}
|
||||
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
data.giveAttributePoints(points);
|
||||
CommandVerbose.verbose(sender, CommandVerbose.CommandType.RESET,
|
||||
ChatColor.GOLD + player.getName() + ChatColor.YELLOW + "'s attribute points spendings were successfully reset.");
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
|
||||
data.getAttributes().getInstances().forEach(ins -> ins.setBase(0));
|
||||
CommandVerbose.verbose(sender, CommandVerbose.CommandType.RESET,
|
||||
ChatColor.GOLD + player.getName() + ChatColor.YELLOW + "'s attributes were succesfully reset.");
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
public static class ResetLevelsCommandTreeNode extends CommandTreeNode {
|
||||
public ResetLevelsCommandTreeNode(CommandTreeNode parent) {
|
||||
super(parent, "levels");
|
||||
|
||||
addParameter(Parameter.PLAYER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandResult execute(CommandSender sender, String[] args) {
|
||||
if (args.length < 4)
|
||||
return CommandResult.THROW_USAGE;
|
||||
|
||||
Player player = Bukkit.getPlayer(args[3]);
|
||||
if (player == null) {
|
||||
sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[3] + ".");
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
|
||||
PlayerData data = PlayerData.get(player);
|
||||
data.setLevel(MMOCore.plugin.dataProvider.getDataManager().getDefaultData().getLevel());
|
||||
data.setExperience(0);
|
||||
for (Profession profession : MMOCore.plugin.professionManager.getAll()) {
|
||||
data.getCollectionSkills().setExperience(profession, 0);
|
||||
data.getCollectionSkills().setLevel(profession, 0);
|
||||
profession.getExperienceTable().reset(data, profession);
|
||||
}
|
||||
|
||||
CommandVerbose.verbose(sender, CommandVerbose.CommandType.RESET,
|
||||
ChatColor.GOLD + player.getName() + ChatColor.YELLOW + "'s levels were succesfully reset.");
|
||||
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -184,6 +184,8 @@ public abstract class PlayerDataManager {
|
||||
player.setSkillPoints(skillPoints);
|
||||
player.setAttributePoints(attributePoints);
|
||||
player.setAttributeReallocationPoints(attrReallocPoints);
|
||||
player.setSkillTreeReallocationPoints(skillTreeReallocPoints);
|
||||
player.setSkillReallocationPoints(skillReallocPoints);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user