diff --git a/MMOCore-API/MMOCore-API.iml b/MMOCore-API/MMOCore-API.iml index c48dc058..1b429aca 100644 --- a/MMOCore-API/MMOCore-API.iml +++ b/MMOCore-API/MMOCore-API.iml @@ -1,103 +1,17 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + SPIGOT + MCP + BUKKIT + + + + + + \ No newline at end of file diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java index 97a7db7f..529f4a86 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java @@ -2,8 +2,12 @@ package net.Indyuce.mmocore.api.player; import io.lumine.mythic.lib.MythicLib; 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.skill.PassiveSkill; +import net.Indyuce.mmocore.party.provided.MMOCorePartyModule; +import net.Indyuce.mmocore.party.provided.Party; import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.ConfigMessage; import net.Indyuce.mmocore.api.SoundEvent; @@ -30,9 +34,8 @@ import net.Indyuce.mmocore.experience.droptable.ExperienceTable; import net.Indyuce.mmocore.guild.provided.Guild; import net.Indyuce.mmocore.loot.chest.particle.SmallParticleEffect; import net.Indyuce.mmocore.party.AbstractParty; -import net.Indyuce.mmocore.party.provided.MMOCorePartyModule; -import net.Indyuce.mmocore.party.provided.Party; import net.Indyuce.mmocore.player.Unlockable; +import net.Indyuce.mmocore.player.stats.StatInfo; import net.Indyuce.mmocore.skill.ClassSkill; import net.Indyuce.mmocore.skill.RegisteredSkill; import net.Indyuce.mmocore.skill.cast.SkillCastingHandler; @@ -58,7 +61,6 @@ import org.jetbrains.annotations.NotNull; import javax.annotation.Nullable; import java.util.*; import java.util.logging.Level; -import java.util.stream.Collectors; public class PlayerData extends OfflinePlayerData implements Closable, ExperienceTableClaimer { @@ -118,6 +120,7 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc // NON-FINAL player data stuff made public to facilitate field change public boolean noCooldown; + private boolean statLoaded; public CombatRunnable combat; /** @@ -132,6 +135,15 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc this.mmoData = mmoData; questData = new PlayerQuests(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; + } /** @@ -167,12 +179,14 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc for (SkillTree skillTree : MMOCore.plugin.skillTreeManager.getAll()) skillTree.setupNodeState(this); - //Stat triggers setup - for (SkillTree skillTree : MMOCore.plugin.skillTreeManager.getAll()) { - for (SkillTreeNode node : skillTree.getNodes()) { - node.getExperienceTable().claimStatTriggers(this, node); + + if (!statLoaded) + //Stat triggers setup + for (SkillTree skillTree : MMOCore.plugin.skillTreeManager.getAll()) { + for (SkillTreeNode node : skillTree.getNodes()) { + node.getExperienceTable().claimStatTriggers(this, node); + } } - } } @@ -181,6 +195,14 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc return pointSpent.getOrDefault(skillTree, 0); } + public HashMap getPointsSpent() { + return new HashMap<>(pointSpent); + } + + public void clearPointsSpent() { + pointSpent.clear(); + + } public void setSkillTreePoints(String treeId, int points) { skillTreePoints.put(treeId, points); @@ -194,10 +216,18 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc return nodeLevels.keySet().stream().filter(node -> node.getTree().equals(skillTree)).mapToInt(nodeLevels::get).sum(); } + /** + * We make a copy to assure that the object created is independent of the state of playerData. + */ public Map getSkillTreePoints() { - return skillTreePoints; + return new HashMap(skillTreePoints); } + public void clearSkillTreePoints() { + skillTreePoints.clear(); + } + + public boolean containsSkillPointTreeId(String treeId) { return skillTreePoints.containsKey(treeId); } @@ -210,8 +240,16 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc return nodeLevelsString.entrySet(); } + public boolean isStatLoaded() { + return statLoaded; + } + public Map getNodeLevels() { - return nodeLevels; + return new HashMap<>(nodeLevels); + } + + public void clearNodeLevels() { + nodeLevels.clear(); } public boolean canIncrementNodeLevel(SkillTreeNode node) { @@ -219,7 +257,7 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc //Check the State of the node if (nodeState != NodeState.UNLOCKED && nodeState != NodeState.UNLOCKABLE) return false; - return getNodeLevel(node) < node.getMaxLevel() && (skillTreePoints.get(node.getTree().getId()) > 0 || skillTreePoints.get("global") > 0); + return getNodeLevel(node) < node.getMaxLevel() && (skillTreePoints.getOrDefault(node.getTree().getId(), 0) > 0 || skillTreePoints.getOrDefault("global", 0) > 0); } /** @@ -268,7 +306,7 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc } public int getSkillTreePoint(String treeId) { - return skillTreePoints.get(treeId); + return skillTreePoints.getOrDefault(treeId, 0); } public void withdrawSkillTreePoints(String treeId, int withdraw) { @@ -301,12 +339,17 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc for (SkillTreeNode node : skillTree.getNodes()) { node.getExperienceTable().reset(this, node); setNodeLevel(node, 0); + nodeStates.remove(node); } skillTree.setupNodeState(this); } public Map getNodeStates() { - return nodeStates; + return new HashMap<>(nodeStates); + } + + public void clearNodeStates() { + nodeStates.clear(); } public Map getNodeTimesClaimed() { @@ -393,6 +436,7 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc return Math.max(1, level); } + @Nullable public AbstractParty getParty() { return MMOCore.plugin.partyModule.getParty(this); @@ -446,6 +490,7 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc public int getClaims(String key) { return tableItemClaims.getOrDefault(key, 0); + } @Override @@ -455,8 +500,10 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc public void setClaims(String key, int times) { tableItemClaims.put(key, times); + } + public Map getItemClaims() { return tableItemClaims; } @@ -716,9 +763,9 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc final double r = Math.sin((double) t / warpTime * Math.PI); for (double j = 0; j < Math.PI * 2; j += Math.PI / 4) getPlayer().getLocation().getWorld().spawnParticle(Particle.REDSTONE, getPlayer().getLocation().add( - Math.cos((double) 5 * t / warpTime + j) * r, - (double) 2 * t / warpTime, - Math.sin((double) 5 * t / warpTime + j) * r), + Math.cos((double) 5 * t / warpTime + j) * r, + (double) 2 * t / warpTime, + Math.sin((double) 5 * t / warpTime + j) * r), 1, new Particle.DustOptions(Color.PURPLE, 1.25f)); } }.runTaskTimer(MMOCore.plugin, 0, 1); @@ -751,27 +798,21 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc if (value <= 0) return; - // Splitting exp through party members - AbstractParty party; - if (splitExp && (party = getParty()) != null) { - final List nearbyMembers = party.getOnlineMembers().stream() - .filter(pd -> { - if (equals(pd)) - return false; - final double maxDis = MMOCore.plugin.configManager.partyMaxExpSplitRange; - return maxDis <= 0 || pd.getPlayer().getLocation().distanceSquared(getPlayer().getLocation()) < maxDis * maxDis; - }).collect(Collectors.toList()); - value /= (nearbyMembers.size() + 1); - for (PlayerData member : nearbyMembers) - member.giveExperience(value, source, null, false); - } - - // Must be placed after exp spliting if (hasReachedMaxLevel()) { setExperience(0); return; } + // Splitting exp through party members + AbstractParty party; + if (splitExp && (party = getParty()) != null) { + List onlineMembers = party.getOnlineMembers(); + value /= onlineMembers.size(); + for (PlayerData member : onlineMembers) + if (!equals(member)) + member.giveExperience(value, source, null, false); + } + // Apply buffs AFTER splitting exp value *= (1 + getStats().getStat("ADDITIONAL_EXPERIENCE") / 100) * MMOCore.plugin.boosterManager.getMultiplier(null); @@ -1131,7 +1172,7 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc * checks if they could potentially upgrade to one of these * * @return If the player can change its current class to - * a subclass + * a subclass */ @Deprecated public boolean canChooseSubclass() { diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/profess/SavedClassInformation.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/profess/SavedClassInformation.java index 197492aa..547ca782 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/profess/SavedClassInformation.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/profess/SavedClassInformation.java @@ -9,6 +9,7 @@ import net.Indyuce.mmocore.manager.data.PlayerDataManager; import net.Indyuce.mmocore.skill.RegisteredSkill; import net.Indyuce.mmocore.tree.SkillTreeNode; import net.Indyuce.mmocore.tree.skilltree.SkillTree; +import org.bukkit.Bukkit; import org.bukkit.configuration.ConfigurationSection; import java.util.HashMap; @@ -26,7 +27,7 @@ public class SavedClassInformation { /** * Stores the tableItemsClaims values but only for skill tree node as it is class based. */ - private final Map nodeTimesClaimed; + private final Map nodeTimesClaimed; public SavedClassInformation(ConfigurationSection config) { level = config.getInt("level"); @@ -78,7 +79,7 @@ public class SavedClassInformation { if (json.has("node-levels")) for (Entry entry : json.getAsJsonObject("node-levels").entrySet()) nodeLevels.put(MMOCore.plugin.skillTreeManager.getNode(entry.getKey()), entry.getValue().getAsInt()); - nodeTimesClaimed=new HashMap<>(); + nodeTimesClaimed = new HashMap<>(); if (json.has("node-times-claimed")) for (Entry entry : json.getAsJsonObject("node-times-claimed").entrySet()) nodeTimesClaimed.put(entry.getKey(), entry.getValue().getAsInt()); @@ -89,7 +90,7 @@ public class SavedClassInformation { public SavedClassInformation(PlayerData player) { this(player.getLevel(), player.getExperience(), player.getSkillPoints(), player.getAttributePoints(), player.getAttributeReallocationPoints() , player.getSkillTreeReallocationPoints(), player.getSkillReallocationPoints(), - player.getAttributes().mapPoints(), player.mapSkillLevels(), player.getSkillTreePoints(), player.getNodeLevels(),player.getNodeTimesClaimed()); + player.getAttributes().mapPoints(), player.mapSkillLevels(), player.getSkillTreePoints(), player.getNodeLevels(), player.getNodeTimesClaimed()); } public SavedClassInformation(PlayerDataManager.DefaultPlayerData data) { @@ -97,11 +98,12 @@ public class SavedClassInformation { } public SavedClassInformation(int level, double experience, int skillPoints, int attributePoints, int attributeReallocationPoints, int skillTreeReallocationPoints, int skillReallocationPoints) { - this(level, experience, skillPoints, attributePoints, attributeReallocationPoints, skillTreeReallocationPoints, skillReallocationPoints, new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>(),new HashMap<>()); + this(level, experience, skillPoints, attributePoints, attributeReallocationPoints, skillTreeReallocationPoints, skillReallocationPoints, new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>()); } public SavedClassInformation(int level, double experience, int skillPoints, int attributePoints, int attributeReallocationPoints, int skillTreeReallocationPoints, int skillReallocationPoints, - Map attributes, Map skills, Map skillTreePoints, Map nodeLevels,Map nodeTimesClaimed) { + Map attributes, Map skills, Map skillTreePoints, Map nodeLevels, Map nodeTimesClaimed) { + this.level = level; this.skillPoints = skillPoints; this.attributePoints = attributePoints; @@ -113,7 +115,7 @@ public class SavedClassInformation { this.skills = skills; this.skillTreePoints = skillTreePoints; this.nodeLevels = nodeLevels; - this.nodeTimesClaimed=nodeTimesClaimed; + this.nodeTimesClaimed = nodeTimesClaimed; } public int getLevel() { @@ -173,6 +175,7 @@ public class SavedClassInformation { return nodeLevels.get(node); } + public Set getSkillTreePointsKeys() { return skillTreePoints.keySet(); } @@ -186,7 +189,7 @@ public class SavedClassInformation { } public int getAttributeLevel(String id) { - return attributes.getOrDefault(id,0); + return attributes.getOrDefault(id, 0); } public void registerAttributeLevel(PlayerAttribute attribute, int level) { @@ -212,13 +215,18 @@ public class SavedClassInformation { player.mapSkillLevels().forEach((skill, level) -> player.resetSkillLevel(skill)); player.getAttributes().getInstances().forEach(ins -> ins.setBase(0)); - + player.clearSkillTreePoints(); + player.clearNodeLevels(); + player.clearNodeStates(); + player.clearPointsSpent(); // We reset the experience table for each skill tree node to remove the perm stat. - for (SkillTree skillTree : player.getProfess().getSkillTrees()) + for (SkillTree skillTree : player.getProfess().getSkillTrees()) { for (SkillTreeNode node : skillTree.getNodes()) node.getExperienceTable().reset(player, node); - player.getNodeLevels().clear(); - player.getNodeStates().clear(); + } + + while (player.hasPassiveSkillBound(0)) + player.unbindPassiveSkill(0); while (player.hasSkillBound(0)) player.unbindSkill(0); @@ -238,18 +246,24 @@ public class SavedClassInformation { (skills).forEach(player::setSkillLevel); attributes.forEach((id, pts) -> player.getAttributes().setBaseAttribute(id, pts)); - skillTreePoints.forEach((skillTree, point) -> player.setSkillTreePoints(skillTree, point)); - //Setup node levels and node state. - nodeLevels.forEach((node, level) -> player.setNodeLevel(node, level)); - for(SkillTree skillTree: profess.getSkillTrees()) + + //Careful, the global points must not be forgotten. + player.setSkillTreePoints("global", skillTreePoints.getOrDefault("global", 0)); + for (SkillTree skillTree : profess.getSkillTrees()) { + player.setSkillTreePoints(skillTree.getId(), skillTreePoints.getOrDefault(skillTree.getId(), 0)); + for (SkillTreeNode node : skillTree.getNodes()) { + player.setNodeLevel(node, nodeLevels.getOrDefault(node, 0)); + } + skillTree.setupNodeState(player); + } //Add the values to the times claimed table and claims the corresponding stat triggers. - nodeTimesClaimed.forEach((str,val)->player.setClaims(str,val)); + nodeTimesClaimed.forEach((str, val) -> player.setClaims(str, val)); //We claim back the stats triggers for all the skill tree nodes of the new class. - for(SkillTree skillTree:profess.getSkillTrees()) - for(SkillTreeNode node:skillTree.getNodes()) - node.getExperienceTable().claimStatTriggers(player,node); + for (SkillTree skillTree : profess.getSkillTrees()) + for (SkillTreeNode node : skillTree.getNodes()) + node.getExperienceTable().claimStatTriggers(player, node); /* * unload current class information and set the new profess once diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/experience/PlayerProfessions.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/experience/PlayerProfessions.java index 9061864f..4b16578b 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/experience/PlayerProfessions.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/experience/PlayerProfessions.java @@ -100,10 +100,11 @@ public class PlayerProfessions { for (Entry entry : obj.getAsJsonObject("timesClaimed").entrySet()) playerData.getItemClaims().put("profession." + entry.getKey(), entry.getValue().getAsInt()); - for (Profession profession : MMOCore.plugin.professionManager.getAll()) { - if (profession.hasExperienceTable()) - profession.getExperienceTable().claimStatTriggers(playerData, profession); - } + if (!playerData.isStatLoaded()) + for (Profession profession : MMOCore.plugin.professionManager.getAll()) { + if (profession.hasExperienceTable()) + profession.getExperienceTable().claimStatTriggers(playerData, profession); + } } diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/gui/SkillTreeViewer.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/gui/SkillTreeViewer.java index 022af806..d3d38fc7 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/gui/SkillTreeViewer.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/gui/SkillTreeViewer.java @@ -337,6 +337,9 @@ public class SkillTreeViewer extends EditableInventory { @Override public void whenClicked(InventoryClickContext event, InventoryItem item) { + if(event.getClickedItem()==null) + return; + if (item.getFunction().equals("next-tree-list-page")) { treeListPage++; open(); diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/ConfigManager.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/ConfigManager.java index 3e5d85ec..7165a728 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/ConfigManager.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/ConfigManager.java @@ -75,13 +75,17 @@ public class ConfigManager { loadDefaultFile("expcurves", "levels.txt"); loadDefaultFile("expcurves", "mining.txt"); } - /* + if(!new File(MMOCore.plugin.getDataFolder()+"/skilltree").exists()) { loadDefaultFile("skilltree","combat.yml"); - loadDefaultFile("skilltree","autocombat.yml"); - loadDefaultFile("skilltree","customcombat.yml"); + loadDefaultFile("skilltree","mage-arcane-mage.yml"); + loadDefaultFile("skilltree","rogue-marksman.yml"); + loadDefaultFile("skilltree","warrior-paladin.yml"); + loadDefaultFile("skilltree","general.yml"); + + } - */ + loadDefaultFile("attributes.yml"); loadDefaultFile("items.yml"); loadDefaultFile("messages.yml"); diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/SkillTreeManager.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/SkillTreeManager.java index eb0077a0..9d25125e 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/SkillTreeManager.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/SkillTreeManager.java @@ -57,7 +57,7 @@ public class SkillTreeManager extends MMOCoreRegister { public void initialize(boolean clearBefore) { if (clearBefore) registered.clear(); - File file = new File(MMOCore.plugin.getDataFolder() + "/skillTree"); + File file = new File(MMOCore.plugin.getDataFolder() + "/skilltree"); if (!file.exists()) file.mkdirs(); load(file); diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/skill/cast/listener/SkillBar.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/skill/cast/listener/SkillBar.java index 22cd41db..79d519b0 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/skill/cast/listener/SkillBar.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/skill/cast/listener/SkillBar.java @@ -73,6 +73,9 @@ public class SkillBar implements Listener { */ if (event.getPreviousSlot() == event.getNewSlot()) return; + //If the player is sneaking, we don't trigger the casting mode (used to avoid conflicts with other plugins using shift+F to open GUI. + if(player.isSneaking()) return; + event.setCancelled(true); int slot = event.getNewSlot() + (event.getNewSlot() >= player.getInventory().getHeldItemSlot() ? -1 : 0); diff --git a/MMOCore-Dist/MMOCore-Dist.iml b/MMOCore-Dist/MMOCore-Dist.iml index 90d27efd..d35a0362 100644 --- a/MMOCore-Dist/MMOCore-Dist.iml +++ b/MMOCore-Dist/MMOCore-Dist.iml @@ -1,17 +1,16 @@ - - - - - - - - - - - - - - + + + + + + SPIGOT + MCP + + + + + + \ No newline at end of file diff --git a/MMOCore-Dist/src/main/java/net/Indyuce/mmocore/listener/PlayerListener.java b/MMOCore-Dist/src/main/java/net/Indyuce/mmocore/listener/PlayerListener.java index 94d9c093..01ada1c5 100644 --- a/MMOCore-Dist/src/main/java/net/Indyuce/mmocore/listener/PlayerListener.java +++ b/MMOCore-Dist/src/main/java/net/Indyuce/mmocore/listener/PlayerListener.java @@ -39,7 +39,7 @@ public class PlayerListener implements Listener { */ @EventHandler public void b(InventoryClickEvent event) { - if (event.getInventory().getHolder() instanceof PluginInventory) + if (event.getInventory().getHolder() instanceof PluginInventory&&event.getCurrentItem()!=null) ((PluginInventory) event.getInventory().getHolder()) .whenClicked(new InventoryClickContext(event.getRawSlot(), event.getCurrentItem(), event.getClick(), event, event.getInventory())); } diff --git a/MMOCore-Dist/src/main/resources/default/classes/arcane-mage.yml b/MMOCore-Dist/src/main/resources/default/classes/arcane-mage.yml index 6f60262b..176a04c5 100644 --- a/MMOCore-Dist/src/main/resources/default/classes/arcane-mage.yml +++ b/MMOCore-Dist/src/main/resources/default/classes/arcane-mage.yml @@ -34,6 +34,10 @@ exp-curve: levels # The maximum level players can reach max-level: 100 +skill-trees: + - 'general' + - 'mage-arcane-mage' + # This class must not display in /class # because it is a subclass of mage options: diff --git a/MMOCore-Dist/src/main/resources/default/classes/mage.yml b/MMOCore-Dist/src/main/resources/default/classes/mage.yml index 33d2f49b..ddf14d17 100644 --- a/MMOCore-Dist/src/main/resources/default/classes/mage.yml +++ b/MMOCore-Dist/src/main/resources/default/classes/mage.yml @@ -32,6 +32,10 @@ exp-curve: levels # The maximum level players can reach max-level: 100 +skill-trees: + - 'general' + - 'mage-arcane-mage' + exp-table: class_exp_table # This is the default mana display options, however it is not mandatory diff --git a/MMOCore-Dist/src/main/resources/default/classes/marksman.yml b/MMOCore-Dist/src/main/resources/default/classes/marksman.yml index 646dd29c..0144f4de 100644 --- a/MMOCore-Dist/src/main/resources/default/classes/marksman.yml +++ b/MMOCore-Dist/src/main/resources/default/classes/marksman.yml @@ -33,7 +33,9 @@ max-level: 100 exp-table: class_exp_table - +skill-trees: + - 'general' + - 'rogue-marksman' # Particles displayed around the player # when he enters the casting mode. diff --git a/MMOCore-Dist/src/main/resources/default/classes/paladin.yml b/MMOCore-Dist/src/main/resources/default/classes/paladin.yml index 544304b1..bcde0aba 100644 --- a/MMOCore-Dist/src/main/resources/default/classes/paladin.yml +++ b/MMOCore-Dist/src/main/resources/default/classes/paladin.yml @@ -31,6 +31,10 @@ display: exp-curve: levels +skill-trees: + - 'general' + - 'warrior-paladin' + - 'combat' # The maximum level players can reach max-level: 100 diff --git a/MMOCore-Dist/src/main/resources/default/classes/rogue.yml b/MMOCore-Dist/src/main/resources/default/classes/rogue.yml index c2ce26b6..ee396628 100644 --- a/MMOCore-Dist/src/main/resources/default/classes/rogue.yml +++ b/MMOCore-Dist/src/main/resources/default/classes/rogue.yml @@ -34,6 +34,11 @@ max-level: 100 exp-table: class_exp_table +skill-trees: + - 'general' + - 'rogue-marksman' + + options: # Mana and health regen only applies when out of combat off-combat-mana-regen: true diff --git a/MMOCore-Dist/src/main/resources/default/classes/warrior.yml b/MMOCore-Dist/src/main/resources/default/classes/warrior.yml index d4fc4a2d..e58db759 100644 --- a/MMOCore-Dist/src/main/resources/default/classes/warrior.yml +++ b/MMOCore-Dist/src/main/resources/default/classes/warrior.yml @@ -36,6 +36,12 @@ exp-curve: levels # The maximum level players can reach max-level: 100 +skill-trees: + - 'general' + - 'warrior-paladin' + - 'combat' + + # Warrior has rage which he gains while casting spells # Rage increase its skill damage. Use # to get the player's rage (MythicMobs formulas) diff --git a/MMOCore-Dist/src/main/resources/default/exp-tables.yml b/MMOCore-Dist/src/main/resources/default/exp-tables.yml index c347878d..108b35d7 100644 --- a/MMOCore-Dist/src/main/resources/default/exp-tables.yml +++ b/MMOCore-Dist/src/main/resources/default/exp-tables.yml @@ -51,4 +51,286 @@ second_exp_table: some_other_item: period: 3 triggers: - - 'exp{amount=100}' \ No newline at end of file + - 'exp{amount=100}' + + + +### Skill Tree + +## MANA_REGENERATION +skilltree_mana_regeneration1: + mana_regeneration: + triggers: + - 'stat{stat="MANA_REGENERATION";amount=1;type="FLAT"}' +skilltree_mana_regeneration2: + mana_regeneration: + triggers: + - 'stat{stat="MANA_REGENERATION";amount=2;type="FLAT"}' + +## HEALTH_REGENERATION +skilltree_health_regeneration1: + health_regeneration: + triggers: + - 'stat{stat="HEALTH_REGENERATION";amount=1;type="FLAT"}' +skilltree_health_regeneration2: + health_regeneration: + triggers: + - 'stat{stat="HEALTH_REGENERATION";amount=2;type="FLAT"}' + + +## COOLDOWN_REDUCTION +skilltree_cooldown_reduction5: + cooldown_reduction: + triggers: + - 'stat{stat="COOLDOWN_REDUCTION";amount=5;type="FLAT"}' +skilltree_cooldown_reduction10: + cooldown_reduction: + triggers: + - 'stat{stat="COOLDOWN_REDUCTION";amount=10;type="FLAT"}' +skilltree_cooldown_reduction15: + cooldown_reduction: + triggers: + - 'stat{stat="COOLDOWN_REDUCTION";amount=15;type="FLAT"}' + +## CRITICAL_STRIKE_CHANCE +skilltree_critical_strike_chance1: + critical_strike_chance: + triggers: + - 'stat{stat="CRITICAL_STRIKE_CHANCE";amount=1;type="FLAT"}' +skilltree_critical_strike_chance2: + critical_strike_chance: + triggers: + - 'stat{stat="CRITICAL_STRIKE_CHANCE";amount=2;type="FLAT"}' +skilltree_critical_strike_chance3: + critical_strike_chance: + triggers: + - 'stat{stat="CRITICAL_STRIKE_CHANCE";amount=3;type="FLAT"}' +skilltree_critical_strike_chance5: + critical_strike_chance: + triggers: + - 'stat{stat="CRITICAL_STRIKE_CHANCE";amount=5;type="FLAT"}' + + +## WEAPON_DAMAGE +skilltree_weapon_damage1: + weapon_damage: + triggers: + - 'stat{stat="WEAPON_DAMAGE";amount=1;type="FLAT"}' +skilltree_weapon_damage2: + weapon_damage: + triggers: + - 'stat{stat="WEAPON_DAMAGE";amount=2;type="FLAT"}' +skilltree_weapon_damage4: + weapon_damage: + triggers: + - 'stat{stat="WEAPON_DAMAGE";amount=4;type="FLAT"}' + +## DAMAGE_REDUCTION +skilltree_damage_reduction1: + weapon_damage: + triggers: + - 'stat{stat="DAMAGE_REDUCTION";amount=1;type="FLAT"}' +skilltree_damage_reduction2: + weapon_damage: + triggers: + - 'stat{stat="DAMAGE_REDUCTION";amount=2;type="FLAT"}' + +## LIFESTEAL +skilltree_lifesteal1: + lifesteal: + triggers: + - 'stat{stat="LIFESTEAL";amount=1;type="FLAT"}' +skilltree_lifesteal2: + lifesteal: + triggers: + - 'stat{stat="LIFESTEAL";amount=2;type="FLAT"}' +skilltree_lifesteal3: + lifesteal: + triggers: + - 'stat{stat="LIFESTEAL";amount=3;type="FLAT"}' + +## MAX_HEALTH +skilltree_max_health1: + max_health: + triggers: + - 'stat{stat="MAX_HEALTH";amount=1;type="FLAT"}' +skilltree_max_health2: + max_health: + triggers: + - 'stat{stat="MAX_HEALTH";amount=2;type="FLAT"}' +skilltree_max_health4: + max_health: + triggers: + - 'stat{stat="MAX_HEALTH";amount=4;type="FLAT"}' +skilltree_max_health5: + max_health: + triggers: + - 'stat{stat="MAX_HEALTH";amount=5;type="FLAT"}' + +## MAGIC_DAMAGE +skilltree_magic_damage1: + magic_damage: + triggers: + - 'stat{stat="MAGIC_DAMAGE";amount=1;type="FLAT"}' +skilltree_magic_damage2: + magic_damage: + triggers: + - 'stat{stat="MAGIC_DAMAGE";amount=2;type="FLAT"}' +skilltree_magic_damage3: + magic_damage: + triggers: + - 'stat{stat="MAGIC_DAMAGE";amount=3;type="FLAT"}' + +## ATTACK_SPEED +skilltree_attack_speed5: + attack_speed: + triggers: + - 'stat{stat="ATTACK_SPEED";amount=5;type="RELATIVE"}' +skilltree_attack_speed10: + attack_speed: + triggers: + - 'stat{stat="ATTACK_SPEED";amount=10;type="RELATIVE"}' +skilltree_attack_speed15: + attack_speed: + triggers: + - 'stat{stat="ATTACK_SPEED";amount=15;type="RELATIVE"}' + +## PHYSICAL_DAMAGE_REDUCTION +skilltree_physical_damage_reduction5: + physical_damage_reduction: + triggers: + - 'stat{stat="PHYSICAL_DAMAGE_REDUCTION";amount=5;type="FLAT"}' +skilltree_physical_damage_reduction10: + physical_damage_reduction: + triggers: + - 'stat{stat="PHYSICAL_DAMAGE_REDUCTION";amount=10;type="FLAT"}' +skilltree_physical_damage_reduction15: + physical_damage_reduction: + triggers: + - 'stat{stat="PHYSICAL_DAMAGE_REDUCTION";amount=15;type="FLAT"}' + +## PARRY_RATING +skilltree_parry_rating5: + parry_rating: + triggers: + - 'stat{stat="PARRY_RATING";amount=5;type="FLAT"}' +skilltree_parry_rating10: + parry_ratingn: + triggers: + - 'stat{stat="PARRY_RATING";amount=10;type="FLAT"}' + +## KNOCKBACK_RESISTANCE +skilltree_knockback_resistance5: + knockback_resistance: + triggers: + - 'stat{stat="KNOCKBACK_RESISTANCE";amount=0.05;type="FLAT"}' +skilltree_knockback_resistance10: + knockback_resistance: + triggers: + - 'stat{stat="KNOCKBACK_RESISTANCE";amount=0.1;type="FLAT"}' + +## DODGE_RATING +skilltree_dodge_rating2: + dodge_rating: + triggers: + - 'stat{stat="DODGE_RATING";amount=2;type="FLAT"}' +skilltree_dodge_rating3: + dodge_rating: + triggers: + - 'stat{stat="DODGE_RATING";amount=3;type="FLAT"}' +skilltree_dodge_rating5: + dodge_rating: + triggers: + - 'stat{stat="DODGE_RATING";amount=100;type="FLAT"}' + +## SKILL_DAMAGE +skilltree_skill_damage5: + skill_damage: + triggers: + - 'stat{stat="SKILL_DAMAGE";amount=5;type="FLAT"}' +skilltree_skill_damage10: + skill_damage: + triggers: + - 'stat{stat="SKILL_DAMAGE";amount=10;type="FLAT"}' + +## SPELL_VAMPIRISM +skilltree_spell_vampirism2: + spell_vampirism: + triggers: + - 'stat{stat="SPELL_VAMPIRISM";amount=2;type="FLAT"}' +skilltree_spell_vampirism6: + spell_vampirism: + triggers: + - 'stat{stat="SPELL_VAMPIRISM";amount=6;type="FLAT"}' + +## ADDITIONAL_EXPERIENCE +skilltree_additional_experience2: + additional_experience: + triggers: + - 'stat{stat="ADDITIONAL_EXPERIENCE";amount=2;type="FLAT"}' +skilltree_additional_experience3: + additional_experience: + triggers: + - 'stat{stat="ADDITIONAL_EXPERIENCE";amount=3;type="FLAT"}' +skilltree_additional_experience5: + additional_experience: + triggers: + - 'stat{stat="ADDITIONAL_EXPERIENCE";amount=5;type="FLAT"}' + +## MAGIC_DAMAGE_REDUCTION +skilltree_magic_damage_reduction5: + magic_damage_reduction: + triggers: + - 'stat{stat="MAGIC_DAMAGE_REDUCTION";amount=5;type="FLAT"}' +skilltree_magic_damage_reduction10: + magic_damage_reduction: + triggers: + - 'stat{stat="MAGIC_DAMAGE_REDUCTION";amount=10;type="FLAT"}' + +## SKILL_CRITICAL_STRIKE_CHANCE +skilltree_skill_critical_strike_chance5: + skill_critical_strike_chance: + triggers: + - 'stat{stat="SKILL_CRITICAL_STRIKE_CHANCE";amount=5;type="FLAT"}' +skilltree_skill_critical_strike_chance10: + skill_critical_strike_chance: + triggers: + - 'stat{stat="SKILL_CRITICAL_STRIKE_CHANCE";amount=10;type="FLAT"}' +skilltree_skill_critical_strike_chance15: + skill_critical_strike_chance: + triggers: + - 'stat{stat="SKILL_CRITICAL_STRIKE_CHANCE";amount=15;type="FLAT"}' + +## ARROW_VELOCITY +skilltree_arrow_velocity10: + arrow_velocity: + triggers: + - 'stat{stat="ARROW_VELOCITY";amount=10;type="RELATIVE"}' +skilltree_arrow_velocity15: + arrow_velocity: + triggers: + - 'stat{stat="ARROW_VELOCITY";amount=15;type="RELATIVE"}' +skilltree_arrow_velocity25: + arrow_velocity: + triggers: + - 'stat{stat="ARROW_VELOCITY";amount=25;type="RELATIVE"}' + +## MOVEMENT_SPEED +skilltree_movement_speed2: + movement_speed: + triggers: + - 'stat{stat="MOVEMENT_SPEED";amount=10;type="RELATIVE"}' +skilltree_movement_speed6: + movement_speed: + triggers: + - 'stat{stat="MOVEMENT_SPEED";amount=10;type="RELATIVE"}' + +## PROJECTILE_DAMAGE +skilltree_projectile_damage2: + projectile_damage: + triggers: + - 'stat{stat="PROJECTILE_DAMAGE";amount=10;type="FLAT"}' +skilltree_projectile_damage6: + projectile_damage: + triggers: + - 'stat{stat="PROJECTILE_DAMAGE";amount=6;type="FLAT"}' diff --git a/MMOCore-Dist/src/main/resources/default/skilltree/autocombat.yml b/MMOCore-Dist/src/main/resources/default/skilltree/autocombat.yml deleted file mode 100644 index 77d81079..00000000 --- a/MMOCore-Dist/src/main/resources/default/skilltree/autocombat.yml +++ /dev/null @@ -1,179 +0,0 @@ -id: autocombat -name: AutoCombat -type: automatic -item: GOLDEN_AXE -lore: -- '&6This autoskill tree is used for combat abilities!' - -nodes: - strength: - name: 'Combat strength' - children: - strong: - force: 2 - agility: 1 - wisdom: 3 - experience-table: class_exp_table - max-level: 3 - size: 1 - lores: - 0: - - "&eThis lore will be shown when level 0" - 1 : - - "&eThis lore will be shown when level 1" - 2: - - "&eThis lore will be shown when level 2" - 3: - - "&eThis lore will be shown when level 3" - - wisdom: - name: 'Wisdom' - size: 1 - max-children: 2 - max-level: 2 - experience-table: class_exp_table - lores: - 0: - - "&eThis lore will be shown when level 0" - 1 : - - "&eThis lore will be shown when level 1" - 2: - - "&eThis lore will be shown when level 2" - 3: - - "&eThis lore will be shown when level 3" - - agility: - name: 'Agility' - size: 1 - max-children: 2 - max-level: 2 - experience-table: class_exp_table - children: - strong: - agility2: 1 - lores: - 0: - - "&eThis lore will be shown when level 0" - 1 : - - "&eThis lore will be shown when level 1" - 2: - - "&eThis lore will be shown when level 2" - 3: - - "&eThis lore will be shown when level 3" - - agility2: - name: 'Agility2' - size: 1 - max-children: 2 - max-level: 2 - experience-table: class_exp_table - lores: - 0: - - "&eThis lore will be shown when level 0" - 1 : - - "&eThis lore will be shown when level 1" - 2: - - "&eThis lore will be shown when level 2" - 3: - - "&eThis lore will be shown when level 3" - - force: - name: 'Force' - size: 1 - max-children: 1 - max-level: 2 - experience-table: class_exp_table - children: - strong: - weaponry: 1 - archery: 1 - lores: - 0: - - "&eThis lore will be shown when level 0" - 1 : - - "&eThis lore will be shown when level 1" - 2: - - "&eThis lore will be shown when level 2" - 3: - - "&eThis lore will be shown when level 3" - - weaponry: - name: 'Weaponry' - max-level: 2 - experience-table: class_exp_table - size: 1 - lores: - 0: - - "&eThis lore will be shown when level 0" - 1 : - - "&eThis lore will be shown when level 1" - 2: - - "&eThis lore will be shown when level 2" - 3: - - "&eThis lore will be shown when level 3" - - archery: - name: 'Archery' - experience-table: class_exp_table - max-level: 2 - size: 1 - children: - strong: - archery2: 2 - lores: - 0: - - "&eThis lore will be shown when level 0" - 1 : - - "&eThis lore will be shown when level 1" - 2: - - "&eThis lore will be shown when level 2" - 3: - - "&eThis lore will be shown when level 3" - archery2: - name: 'Archery2' - experience-table: class_exp_table - max-level: 2 - size: 1 - children: - strong: - archery3: 1 - lores: - 0: - - "&eThis lore will be shown when level 0" - 1 : - - "&eThis lore will be shown when level 1" - 2: - - "&eThis lore will be shown when level 2" - 3: - - "&eThis lore will be shown when level 3" - archery3: - name: 'Archery3' - experience-table: class_exp_table - max-level: 2 - size: 1 - lores: - 0: - - "&eThis lore will be shown when level 0" - 1 : - - "&eThis lore will be shown when level 1" - 2: - - "&eThis lore will be shown when level 2" - 3: - - "&eThis lore will be shown when level 3" - - -icons: - unlocked: - 1: - item: 'GREEN_DYE' - locked: - 1: - item: "BROWN_DYE" - unlockable: - 1: - item: "BLUE_DYE" - fully-locked: - 1: - item: "BLACK_DYE" - path: - item: "WHITE_DYE" diff --git a/MMOCore-Dist/src/main/resources/default/skilltree/combat.yml b/MMOCore-Dist/src/main/resources/default/skilltree/combat.yml index acde34df..9744e9ca 100644 --- a/MMOCore-Dist/src/main/resources/default/skilltree/combat.yml +++ b/MMOCore-Dist/src/main/resources/default/skilltree/combat.yml @@ -4,117 +4,408 @@ lore: - '&6This skill tree is used for combat abilities!' type: 'linked' item: 'DIAMOND_AXE' +max-point-spent: 20 nodes: - strength: - name: 'Combat strength' + a1: + name: 'Cooldown Reduction' + coordinates: + x: -3 + y: -2 + + max-level: 1 + is-root: true + size: 1 + experience-table: skilltree_cooldown_reduction5 + lores: + 0: + - "&eReduces cooldowns of item and player skills (5%)" + 1: + - "&eReduces cooldowns of item and player skills (5%)" + + + + a2: + name: 'Cooldown Reduction' + size: 1 + max-children: 1 + experience-table: skilltree_cooldown_reduction10 + coordinates: + x: -2 + y: -2 + lores: + 0: + - "&eReduces cooldowns of item and player skills (10%)" + 1: + - "&eReduces cooldowns of item and player skills (10%)" + + a3: + name: 'Cooldown Reduction' + size: 1 + max-children: 1 + experience-table: skilltree_cooldown_reduction15 + coordinates: + x: -1 + y: -2 + lores: + 0: + - "&eReduces cooldowns of item and player skills (15%)" + 1: + - "&eReduces cooldowns of item and player skills (15%)" + +### B + + b1: + name: 'Critical Strike Chance' + size: 1 + max-children: 1 + experience-table: skilltree_critical_strike_chance1 + coordinates: + x: 0 + y: -2 + lores: + 0: + - "&eCritical Strikes deal more damage in % chance" + 1: + - "&eCritical Strikes deal more damage in +%2 chance" + + b2: + name: 'Critical Strike Chance' + size: 1 + max-children: 1 + experience-table: skilltree_critical_strike_chance2 + coordinates: + x: 0 + y: -1 + lores: + 0: + - "&eCritical Strikes deal more damage in % chance" + 1: + - "&eCritical Strikes deal more damage in +%3 chance" + + b3: + name: 'Critical Strike Chance' + size: 1 + max-children: 2 + experience-table: skilltree_critical_strike_chance3 coordinates: x: 0 y: 0 - - max-level: 2 - is-root: true - size: 1 - experience-table: class_exp_table lores: 0: - - "&eThis lore will be shown when level 0" - 1 : - - "&eThis lore will be shown when level 1" - 2: - - "&eThis lore will be shown when level 2" - 3: - - "&eThis lore will be shown when level 3" - + - "&eCritical Strikes deal more damage in % chance" + 1: + - "&eCritical Strikes deal more damage in +%5 chance" +## C - force: - name: 'Force' + c1: + name: 'Life Steal' size: 1 max-children: 1 - experience-table: class_exp_table + experience-table: skilltree_lifesteal1 coordinates: - x: 1 + x: -1 y: 0 lores: 0: - - "&eThis lore will be shown when level 0" - 1 : - - "&eThis lore will be shown when level 1" - 2: - - "&eThis lore will be shown when level 2" - 3: - - "&eThis lore will be shown when level 3" - - weaponry: - name: 'Weaponry' - coordinates: - x: 2 - y: 0 - experience-table: class_exp_table - max-level: 2 + - "&ePercentage of damage you gain back as health when inflicting weapon damage +%1" + 1: + - "&ePercentage of damage you gain back as health when inflicting weapon damage +%1" + + c2: + name: 'Life Steal' size: 1 + max-children: 1 + experience-table: skilltree_lifesteal2 + coordinates: + x: -2 + y: 0 lores: 0: - - "&eThis lore will be shown when level 0" - 1 : - - "&eThis lore will be shown when level 1" - 2: - - "&eThis lore will be shown when level 2" - 3: - - "&eThis lore will be shown when level 3" - - archery: - name: 'Archery' + - "&ePercentage of damage you gain back as health when inflicting weapon damage +%2" + 1: + - "&ePercentage of damage you gain back as health when inflicting weapon damage +%2" + + c3: + name: 'Life Steal' + size: 1 + max-children: 1 + experience-table: skilltree_lifesteal2 coordinates: - x: 1 + x: -3 + y: 0 + lores: + 0: + - "&ePercentage of damage you gain back as health when inflicting weapon damage +%3" + 1: + - "&ePercentage of damage you gain back as health when inflicting weapon damage +%3" + +## D + + d1: + name: 'Damage Reduction' + size: 1 + max-children: 1 + experience-table: skilltree_damage_reduction1 + coordinates: + x: 0 y: 1 - experience-table: class_exp_table - max-level: 2 - size: 1 lores: 0: - - "&eThis lore will be shown when level 0" - 1 : - - "&eThis lore will be shown when level 1" - 2: - - "&eThis lore will be shown when level 2" - 3: - - "&eThis lore will be shown when level 3" - archery2: - name: 'Archery2' + - "&eReduces damage from any source in +%1" + 1: + - "&eReduces damage from any source in +%1" + + d2: + name: 'Damage Reduction' + size: 1 + max-children: 2 + experience-table: skilltree_damage_reduction2 + coordinates: + x: 0 + y: 2 + lores: + 0: + - "&eReduces damage from any source in +%2" + 1: + - "&eReduces damage from any source in +%2" + + d3: + name: 'Damage Reduction' + size: 1 + max-children: 1 + experience-table: skilltree_damage_reduction2 + coordinates: + x: -1 + y: 2 + lores: + 0: + - "&eReduces damage from any source in +%2" + 1: + - "&eReduces damage from any source in +%2" + +## E + + e1: + name: 'Health Regeneration' + size: 1 + max-children: 1 + experience-table: skilltree_health_regeneration1 + coordinates: + x: -2 + y: 2 + lores: + 0: + - "&eHealth regen in pts/sec +1" + 1: + - "&eHealth regen in pts/sec +1" + + e2: + name: 'Health Regeneration' + size: 1 + max-children: 1 + experience-table: skilltree_health_regeneration2 + coordinates: + x: -3 + y: 2 + lores: + 0: + - "&eHealth regen in pts/sec +2" + 1: + - "&eHealth regen in pts/sec +2" + + e3: + name: 'Health Regeneration' + size: 1 + max-children: 1 + experience-table: skilltree_health_regeneration2 + coordinates: + x: -3 + y: 1 + lores: + 0: + - "&eHealth regen in pts/sec +2" + 1: + - "&eHealth regen in pts/sec +2" + +## F + + f1: + name: 'Mana Regeneration' + size: 1 + max-children: 1 + experience-table: skilltree_mana_regeneration1 coordinates: x: 1 y: 2 - experience-table: class_exp_table - max-level: 2 - size: 1 lores: 0: - - "&eThis lore will be shown when level 0" - 1 : - - "&eThis lore will be shown when level 1" - 2: - - "&eThis lore will be shown when level 2" - 3: - - "&eThis lore will be shown when level 3" - archery3: - name: 'Archery3' + - "&eMana regen in pts/sec +1" + 1: + - "&eMana regen in pts/sec +1" + + f2: + name: 'Mana Regeneration' + size: 1 + max-children: 1 + experience-table: skilltree_mana_regeneration2 coordinates: - x: 1 - y: 3 - - max-level: 2 - size: 1 + x: 2 + y: 2 lores: 0: - - "&eThis lore will be shown when level 0" - 1 : - - "&eThis lore will be shown when level 1" - 2: - - "&eThis lore will be shown when level 2" - 3: - - "&eThis lore will be shown when level 3" - + - "&eMana regen in pts/sec +2" + 1: + - "&eMana regen in pts/sec +2" + + f3: + name: 'Mana Regeneration' + size: 1 + max-children: 1 + experience-table: skilltree_mana_regeneration2 + coordinates: + x: 3 + y: 2 + lores: + 0: + - "&eMana regen in pts/sec +2" + 1: + - "&eMana regen in pts/sec +2" + +## G + + g1: + name: 'Magic Damage' + size: 1 + max-children: 1 + experience-table: skilltree_magic_damage1 + coordinates: + x: 3 + y: 1 + lores: + 0: + - "&eAdditional magic skill damage in +%1" + 1: + - "&eAdditional magic skill damage in +%1" + + g2: + name: 'Magic Damage' + size: 1 + max-children: 1 + experience-table: skilltree_magic_damage2 + coordinates: + x: 4 + y: 1 + lores: + 0: + - "&eAdditional magic skill damage in +%2" + 1: + - "&eAdditional magic skill damage in +%2" + + g3: + name: 'Magic Damage' + size: 1 + max-children: 1 + experience-table: skilltree_magic_damage2 + coordinates: + x: 4 + y: 0 + lores: + 0: + - "&eAdditional magic skill damage in +%2" + 1: + - "&eAdditional magic skill damage in +%2" + +## H + + h1: + name: 'Max Health' + size: 1 + max-children: 1 + experience-table: skilltree_max_health2 + coordinates: + x: 4 + y: -1 + lores: + 0: + - "&eAdditional amount of health in +%2" + 1: + - "&eAdditional amount of health in +%2" + + h2: + name: 'Max Health' + size: 1 + max-children: 1 + experience-table: skilltree_max_health4 + coordinates: + x: 4 + y: -2 + lores: + 0: + - "&eAdditional amount of health in +%4" + 1: + - "&eAdditional amount of health in +%4" + + h3: + name: 'Max Health' + size: 1 + max-children: 1 + experience-table: skilltree_max_health4 + coordinates: + x: 3 + y: -2 + lores: + 0: + - "&eAdditional amount of health in +%4" + 1: + - "&eAdditional amount of health in +%4" + +## J + + j1: + name: 'Weapon Damage' + size: 1 + max-children: 1 + experience-table: skilltree_weapon_damage2 + coordinates: + x: 2 + y: -2 + lores: + 0: + - "&eAdditional on-hit weapon damage in +%2." + 1: + - "&eAdditional on-hit weapon damage in +%2." + + j2: + name: 'Weapon Damage' + size: 1 + max-children: 1 + experience-table: skilltree_weapon_damage4 + coordinates: + x: 2 + y: -1 + lores: + 0: + - "&eAdditional on-hit weapon damage in +%4" + 1: + - "&eAdditional on-hit weapon damage in +%4" + + j3: + name: 'Weapon Damage' + size: 1 + max-children: 1 + experience-table: skilltree_weapon_damage4 + coordinates: + x: 2 + y: 0 + lores: + 0: + - "&eAdditional on-hit weapon damage in +%4" + 1: + - "&eAdditional on-hit weapon damage in +%4" + + + paths: path1: diff --git a/MMOCore-Dist/src/main/resources/default/skilltree/customcombat.yml b/MMOCore-Dist/src/main/resources/default/skilltree/customcombat.yml deleted file mode 100644 index 840b8b29..00000000 --- a/MMOCore-Dist/src/main/resources/default/skilltree/customcombat.yml +++ /dev/null @@ -1,170 +0,0 @@ -id: customcombat -name: CustomCombat -type: custom -item: GOLDEN_AXE -lore: -- '&6This autoskill tree is used for combat abilities!' - -nodes: - strength: - name: 'Combat strength' - children: - strong: - force: 2 - agility: 1 - wisdom: 3 - experience-table: class_exp_table - max-level: 3 - size: 1 - coordinates: - x: 0 - y: 0 - lores: - 0: - - "&eThis lore will be shown when level 0" - 1: - - "&eThis lore will be shown when level 1" - 2: - - "&eThis lore will be shown when level 2" - 3: - - "&eThis lore will be shown when level 3" - - wisdom: - name: 'Wisdom' - size: 1 - max-children: 2 - max-level: 2 - coordinates: - x: -1 - y: 0 - experience-table: class_exp_table - lores: - 0: - - "&eThis lore will be shown when level 0" - 1: - - "&eThis lore will be shown when level 1" - 2: - - "&eThis lore will be shown when level 2" - 3: - - "&eThis lore will be shown when level 3" - - agility: - name: 'Agility' - size: 1 - max-children: 2 - max-level: 2 - experience-table: class_exp_table - coordinates: - x: 1 - y: 0 - children: - strong: - agility2: 1 - lores: - 0: - - "&eThis lore will be shown when level 0" - 1: - - "&eThis lore will be shown when level 1" - 2: - - "&eThis lore will be shown when level 2" - 3: - - "&eThis lore will be shown when level 3" - - agility2: - name: 'Agility2' - size: 1 - max-children: 2 - max-level: 2 - experience-table: class_exp_table - coordinates: - x: 1 - y: -1 - lores: - 0: - - "&eThis lore will be shown when level 0" - 1: - - "&eThis lore will be shown when level 1" - 2: - - "&eThis lore will be shown when level 2" - 3: - - "&eThis lore will be shown when level 3" - - force: - name: 'Force' - size: 1 - max-children: 1 - max-level: 2 - children: - strong: - weaponry: 1 - archery: 1 - experience-table: class_exp_table - coordinates: - x: 0 - y: 1 - lores: - 0: - - "&eThis lore will be shown when level 0" - 1: - - "&eThis lore will be shown when level 1" - 2: - - "&eThis lore will be shown when level 2" - 3: - - "&eThis lore will be shown when level 3" - - weaponry: - name: 'Weaponry' - max-level: 2 - size: 1 - coordinates: - x: 1 - y: 1 - experience-table: class_exp_table - lores: - 0: - - "&eThis lore will be shown when level 0" - 1: - - "&eThis lore will be shown when level 1" - 2: - - "&eThis lore will be shown when level 2" - 3: - - "&eThis lore will be shown when level 3" - - archery: - name: 'Archery' - max-level: 2 - size: 1 - experience-table: class_exp_table - coordinates: - x: 0 - y: -1 - lores: - 0: - - "&eThis lore will be shown when level 0" - 1: - - "&eThis lore will be shown when level 1" - 2: - - "&eThis lore will be shown when level 2" - 3: - - "&eThis lore will be shown when level 3" - - -icons: - unlocked: - 1: - item: 'YELLOW_DYE' - model-data: 1 - 2: - item: 'ORANGE_DYE' - model-data: 0 - locked: - 1: - item: "BROWN_DYE" - unlockable: - 1: - item: "BLUE_DYE" - fully-locked: - 1: - item: "BLACK_DYE" - path: - item: "WHITE_DYE" diff --git a/MMOCore-Dist/src/main/resources/default/skilltree/general.yml b/MMOCore-Dist/src/main/resources/default/skilltree/general.yml new file mode 100644 index 00000000..8fb6d043 --- /dev/null +++ b/MMOCore-Dist/src/main/resources/default/skilltree/general.yml @@ -0,0 +1,428 @@ +id: 'general' +name: '&4General' +type: 'custom' +item: 'DIAMOND_AXE' +lore: +- '&6This skill tree is used for combat abilities!' +max-point-spent: 11 + +nodes: + +#### A + a1: + name: 'Mana Regeneration' + coordinates: + x: -3 + y: -2 + + max-level: 1 + is-root: true + size: 1 + experience-table: skilltree_mana_regeneration1 + lores: + 0: + - "&eMana regen in pts/sec +1" + 1: + - "&eMana regen in pts/sec +1" + a2: + name: 'Mana Regeneration' + coordinates: + x: -2 + y: -2 + + parents: + strong: + a1: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_mana_regeneration2 + lores: + 0: + - "&eMana regen in pts/sec +2" + 1: + - "&eMana regen in pts/sec +2" + a3: + name: 'Mana Regeneration' + coordinates: + x: -1 + y: -1 + + parents: + strong: + a2: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_mana_regeneration2 + lores: + 0: + - "&eMana regen in pts/sec +2" + 1: + - "&eMana regen in pts/sec +2" + +#### B + b1: + name: 'Health Regeneration' + coordinates: + x: -3 + y: -0 + + max-level: 1 + is-root: true + size: 1 + experience-table: skilltree_health_regeneration1 + lores: + 0: + - "&eHealth regen in pts/sec +1" + 1: + - "&eHealth regen in pts/sec +1" + + b2: + name: 'Health Regeneration' + coordinates: + x: -2 + y: -0 + + parents: + strong: + b1: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_health_regeneration2 + lores: + 0: + - "&eHealth regen in pts/sec +2" + 1: + - "&eHealth regen in pts/sec +2" + + b3: + name: 'Health Regeneration' + coordinates: + x: -1 + y: -0 + + parents: + strong: + b2: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_health_regeneration2 + lores: + 0: + - "&eHealth regen in pts/sec +2" + 1: + - "&eHealth regen in pts/sec +2" + +#### C + c1: + name: 'Cooldown Reduction' + coordinates: + x: -3 + y: 2 + + max-level: 1 + is-root: true + size: 1 + experience-table: skilltree_cooldown_reduction5 + lores: + 0: + - "&eReduces cooldowns of item and player skills (5%)" + 1: + - "&eReduces cooldowns of item and player skills (5%)" + + c2: + name: 'Cooldown Reduction' + coordinates: + x: -2 + y: 2 + + parents: + strong: + c1: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_cooldown_reduction10 + lores: + 0: + - "&eReduces cooldowns of item and player skills (10%)" + 1: + - "&eReduces cooldowns of item and player skills (10%)" + + c3: + name: 'Cooldown Reduction' + coordinates: + x: -1 + y: 1 + + parents: + strong: + c2: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_cooldown_reduction15 + lores: + 0: + - "&eReduces cooldowns of item and player skills (15%)" + 1: + - "&eReduces cooldowns of item and player skills (15%)" + +#### D + d1: + name: 'Critical Strike Chance' + coordinates: + x: 0 + y: 0 + + parents: + soft: + a3: 1 + b3: 1 + c3: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_critical_strike_chance1 + lores: + 0: + - "&eCritical Strikes deal more damage in +%2 chance" + 1: + - "&eCritical Strikes deal more damage in +%2 chance" + + d2: + name: 'Critical Strike Chance' + coordinates: + x: 1 + y: 0 + + parents: + strong: + d1: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_critical_strike_chance2 + lores: + 0: + - "&eCritical Strikes deal more damage in % chance" + 1: + - "&eCritical Strikes deal more damage in +%3 chance" + + d3: + name: 'Critical Strike Chance' + coordinates: + x: 2 + y: 0 + + parents: + strong: + d2: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_critical_strike_chance5 + lores: + 0: + - "&eCritical Strikes deal more damage in % chance" + 1: + - "&eCritical Strikes deal more damage in +%5 chance" + + +#### E + e1: + name: 'Damage Reduction' + coordinates: + x: 2 + y: 1 + + parents: + strong: + d3: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_damage_reduction1 + lores: + 0: + - "&eReduces damage from any source in %." + 1: + - "&eReduces damage from any source in +%1." + + e2: + name: 'Damage Reduction' + coordinates: + x: 2 + y: 2 + + parents: + strong: + e1: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_damage_reduction2 + lores: + 0: + - "&eReduces damage from any source in %." + 1: + - "&eReduces damage from any source in +%2." + + e3: + name: 'Damage Reduction' + coordinates: + x: 3 + y: 2 + + parents: + strong: + e2: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_damage_reduction2 + lores: + 0: + - "&eReduces damage from any source in %." + 1: + - "&eReduces damage from any source in +%2." + +#### F + f1: + name: 'Weapon Damage' + coordinates: + x: 2 + y: -1 + + parents: + strong: + d3: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_weapon_damage1 + lores: + 0: + - "&eAdditional on-hit weapon damage in +%1." + 1: + - "&eAdditional on-hit weapon damage in +%1." + + f2: + name: 'Weapon Damage' + coordinates: + x: 2 + y: -2 + + parents: + strong: + f1: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_weapon_damage2 + lores: + 0: + - "&eAdditional on-hit weapon damage in +%2." + 1: + - "&eAdditional on-hit weapon damage in +%2." + + f3: + name: 'Weapon Damage' + coordinates: + x: 3 + y: -2 + + parents: + strong: + f2: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_weapon_damage2 + lores: + 0: + - "&eAdditional on-hit weapon damage in +%2." + 1: + - "&eAdditional on-hit weapon damage in +%2." + + +##last line + g1: + name: 'Life Steal' + coordinates: + x: 4 + y: -1 + + parents: + strong: + f3: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_lifesteal3 + lores: + 0: + - "&ePercentage of damage you gain back as health when inflicting weapon damage." + 1: + - "&ePercentage of damage you gain back as health when inflicting weapon damage +%3" + + j1: + name: 'Max Health' + coordinates: + x: 4 + y: 0 + + parents: + soft: + g1: 1 + h1: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_max_health5 + lores: + 0: + - "&eAdditional amount of health in +%5" + 1: + - "&eAdditional amount of health in +%5" + + h1: + name: 'Magic Damage' + coordinates: + x: 4 + y: 1 + + parents: + strong: + e3: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_magic_damage3 + lores: + 0: + - "&eAdditional magic skill damage in +%3" + 1: + - "&eAdditional magic skill damage in +%3" + + + + +icons: + unlocked: + 1: + item: 'GREEN_DYE' + locked: + 1: + item: "BROWN_DYE" + unlockable: + 1: + item: "BLUE_DYE" + fully-locked: + 1: + item: "BLACK_DYE" + path: + item: "WHITE_DYE" diff --git a/MMOCore-Dist/src/main/resources/default/skilltree/mage-arcane-mage.yml b/MMOCore-Dist/src/main/resources/default/skilltree/mage-arcane-mage.yml new file mode 100644 index 00000000..35b3d141 --- /dev/null +++ b/MMOCore-Dist/src/main/resources/default/skilltree/mage-arcane-mage.yml @@ -0,0 +1,426 @@ +id: 'mage-arcane-mage' +name: '&4Mage' +type: 'custom' +item: 'DIAMOND_AXE' +lore: +- '&6This skill tree is used for Mage & Arcane Mage class only!' +max-point-spent: 21 + +nodes: + +#### A + a1: + name: 'Mana Regeneration' + coordinates: + x: 1 + y: -2 + + max-level: 1 + is-root: true + size: 1 + experience-table: skilltree_mana_regeneration1 + lores: + 0: + - "&eMana regen in pts/sec +1" + 1: + - "&eMana regen in pts/sec +1" + a2: + name: 'Mana Regeneration' + coordinates: + x: 0 + y: -2 + + parents: + strong: + a1: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_mana_regeneration2 + lores: + 0: + - "&eMana regen in pts/sec +2" + 1: + - "&eMana regen in pts/sec +2" + a3: + name: 'Mana Regeneration' + coordinates: + x: -1 + y: -2 + + parents: + strong: + a2: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_mana_regeneration2 + lores: + 0: + - "&eMana regen in pts/sec +2" + 1: + - "&eMana regen in pts/sec +2" + +## B + + b1: + name: 'Skill Damage' + coordinates: + x: -2 + y: -1 + + parents: + strong: + a3: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_skill_damage5 + lores: + 0: + - "&eAdditional ability damage in +%5" + 1: + - "&eAdditional ability damage in +%5" + b2: + name: 'Skill Damage' + coordinates: + x: -3 + y: 0 + + parents: + strong: + b1: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_skill_damage5 + lores: + 0: + - "&eAdditional ability damage in +%5" + 1: + - "&eAdditional ability damage in +%5" + b3: + name: 'Skill Damage' + coordinates: + x: -2 + y: 1 + + parents: + strong: + b2: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_skill_damage10 + lores: + 0: + - "&eAdditional ability damage in +%10" + 1: + - "&eAdditional ability damage in +%10" + +## C + + c1: + name: 'Spell Vampirism' + coordinates: + x: -2 + y: 2 + + parents: + strong: + b3: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_spell_vampirism2 + lores: + 0: + - "&ePercentage of damage you gain back as health when inflicting skill damage +%2" + 1: + - "&ePercentage of damage you gain back as health when inflicting skill damage +%2" + c2: + name: 'Spell Vampirism' + coordinates: + x: -1 + y: 2 + + parents: + strong: + c1: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_spell_vampirism2 + lores: + 0: + - "&ePercentage of damage you gain back as health when inflicting skill damage +%2" + 1: + - "&ePercentage of damage you gain back as health when inflicting skill damage +%2" + c3: + name: 'Spell Vampirism' + coordinates: + x: 0 + y: 2 + + parents: + strong: + c2: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_spell_vampirism6 + lores: + 0: + - "&ePercentage of damage you gain back as health when inflicting skill damage +%6" + 1: + - "&ePercentage of damage you gain back as health when inflicting skill damage +%6" + +## D + + d1: + name: 'Additional Experience' + coordinates: + x: 0 + y: 1 + + parents: + strong: + c3: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_additional_experience2 + lores: + 0: + - "&eAdditional MMOCore main class experience +%2" + 1: + - "&eAdditional MMOCore main class experience +%2" + d2: + name: 'Additional Experience' + coordinates: + x: 0 + y: 0 + + parents: + strong: + d1: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_additional_experience3 + lores: + 0: + - "&eAdditional MMOCore main class experience +%3" + 1: + - "&eAdditional MMOCore main class experience +%3" + d3: + name: 'Additional Experience' + coordinates: + x: 1 + y: 0 + + parents: + strong: + d2: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_additional_experience5 + lores: + 0: + - "&eAdditional MMOCore main class experience +%5" + 1: + - "&eAdditional MMOCore main class experience +%5" + +## E + + e1: + name: 'Magic Damage Reduction' + coordinates: + x: 2 + y: 0 + + parents: + strong: + d3: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_magic_damage_reduction5 + lores: + 0: + - "&eReduce magic damage dealt by potions %5" + 1: + - "&eReduce magic damage dealt by potions %5" + e2: + name: 'Magic Damage Reduction' + coordinates: + x: 2 + y: 1 + + parents: + strong: + e1: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_magic_damage_reduction5 + lores: + 0: + - "&eReduce magic damage dealt by potions %5" + 1: + - "&eReduce magic damage dealt by potions %5" + e3: + name: 'Magic Damage Reduction' + coordinates: + x: 2 + y: 2 + + parents: + strong: + e2: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_magic_damage_reduction10 + lores: + 0: + - "&eReduce magic damage dealt by potions %10" + 1: + - "&eReduce magic damage dealt by potions %10" + +## F + + f1: + name: 'Skill Critical Strike Chance' + coordinates: + x: 3 + y: 2 + + parents: + strong: + e3: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_skill_critical_strike_chance5 + lores: + 0: + - "&eIncreases the chance of dealing skill crits +%5" + 1: + - "&eIncreases the chance of dealing skill crits +%5" + f2: + name: 'Skill Critical Strike Chance' + coordinates: + x: 4 + y: 2 + + parents: + strong: + f1: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_skill_critical_strike_chance10 + lores: + 0: + - "&eIncreases the chance of dealing skill crits +%10" + 1: + - "&eIncreases the chance of dealing skill crits +%10" + f3: + name: 'Skill Critical Strike Chance' + coordinates: + x: 4 + y: 1 + + parents: + strong: + f2: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_skill_critical_strike_chance15 + lores: + 0: + - "&eIncreases the chance of dealing skill crits +%15" + 1: + - "&eIncreases the chance of dealing skill crits +%15" + +## G + + g1: + name: 'Magic Damage' + coordinates: + x: 4 + y: 0 + + parents: + strong: + f3: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_magic_damage1 + lores: + 0: + - "&eAdditional magic skill damage in +%1" + 1: + - "&eAdditional magic skill damage in +%1" + g2: + name: 'Magic Damage' + coordinates: + x: 4 + y: -1 + + parents: + strong: + g1: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_magic_damage2 + lores: + 0: + - "&eAdditional magic skill damage in +%2" + 1: + - "&eAdditional magic skill damage in +%2" + g3: + name: 'Magic Damage' + coordinates: + x: 4 + y: -2 + + parents: + strong: + g2: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_magic_damage2 + lores: + 0: + - "&eAdditional magic skill damage in +%2" + 1: + - "&eAdditional magic skill damage in +%2" + + + + + + + +icons: + unlocked: + 1: + item: 'GREEN_DYE' + locked: + 1: + item: "BROWN_DYE" + unlockable: + 1: + item: "BLUE_DYE" + fully-locked: + 1: + item: "BLACK_DYE" + path: + item: "WHITE_DYE" diff --git a/MMOCore-Dist/src/main/resources/default/skilltree/rogue-marksman.yml b/MMOCore-Dist/src/main/resources/default/skilltree/rogue-marksman.yml new file mode 100644 index 00000000..a661fb2f --- /dev/null +++ b/MMOCore-Dist/src/main/resources/default/skilltree/rogue-marksman.yml @@ -0,0 +1,422 @@ +id: 'rogue-marksman' +name: '&4Rogue&Marksman' +type: 'custom' +item: 'DIAMOND_AXE' +lore: +- '&6This skill tree is used for Rogue & Marksman class only!' +max-point-spent: 21 + +nodes: + +#### A + a1: + name: 'Additional Experience' + coordinates: + x: -3 + y: 0 + + max-level: 1 + is-root: true + size: 1 + experience-table: skilltree_additional_experience2 + lores: + 0: + - "&eAdditional MMOCore main class experience +%2" + 1: + - "&eAdditional MMOCore main class experience +%2" + a2: + name: 'Additional Experience' + coordinates: + x: -2 + y: 0 + + parents: + strong: + a1: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_additional_experience3 + lores: + 0: + - "&eAdditional MMOCore main class experience +%3" + 1: + - "&eAdditional MMOCore main class experience +%3" + a3: + name: 'Additional Experience' + coordinates: + x: -1 + y: 0 + + parents: + strong: + a2: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_additional_experience5 + lores: + 0: + - "&eAdditional MMOCore main class experience +%5" + 1: + - "&eAdditional MMOCore main class experience +%5" + +## B + + b1: + name: 'Arrow Velocity' + coordinates: + x: -1 + y: -1 + + parents: + strong: + a3: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_arrow_velocity10 + lores: + 0: + - "&eDetermines how far your weapon can shoot +%10" + 1: + - "&eDetermines how far your weapon can shoot +%10" + b2: + name: 'Arrow Velocity' + coordinates: + x: -1 + y: -2 + + parents: + strong: + b1: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_arrow_velocity15 + lores: + 0: + - "&eDetermines how far your weapon can shoot +%15" + 1: + - "&eDetermines how far your weapon can shoot +%15" + b3: + name: 'Arrow Velocity' + coordinates: + x: 0 + y: -2 + + parents: + strong: + b2: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_arrow_velocity25 + lores: + 0: + - "&eDetermines how far your weapon can shoot +%25" + 1: + - "&eDetermines how far your weapon can shoot +%25" + +## C + + c1: + name: 'Life Steal' + coordinates: + x: 1 + y: -2 + + parents: + strong: + b3: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_lifesteal1 + lores: + 0: + - "&ePercentage of damage you gain back as health when inflicting weapon damage +%1" + 1: + - "&ePercentage of damage you gain back as health when inflicting weapon damage +%1" + c2: + name: 'Life Steal' + coordinates: + x: 2 + y: -2 + + parents: + strong: + c1: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_lifesteal2 + lores: + 0: + - "&ePercentage of damage you gain back as health when inflicting weapon damage +%2" + 1: + - "&ePercentage of damage you gain back as health when inflicting weapon damage +%2" + c3: + name: 'Life Steal' + coordinates: + x: 3 + y: -2 + + parents: + strong: + c2: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_lifesteal2 + lores: + 0: + - "&ePercentage of damage you gain back as health when inflicting weapon damage +%2" + 1: + - "&ePercentage of damage you gain back as health when inflicting weapon damage +%2" + +## D + + d1: + name: 'Knockback Resistance' + coordinates: + x: 3 + y: -1 + + parents: + strong: + c3: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_knockback_resistance5 + lores: + 0: + - "&eThe chance of you to block the knockback +%5" + 1: + - "&eThe chance of you to block the knockback +%5" + d2: + name: 'Knockback Resistance' + coordinates: + x: 4 + y: -1 + + parents: + strong: + d1: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_knockback_resistance5 + lores: + 0: + - "&eThe chance of you to block the knockback +%5" + 1: + - "&eThe chance of you to block the knockback +%5" + d3: + name: 'Knockback Resistance' + coordinates: + x: 4 + y: 0 + + parents: + strong: + d2: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_knockback_resistance10 + lores: + 0: + - "&eThe chance of you to block the knockback +%5" + 1: + - "&eThe chance of you to block the knockback +%5" + +## E + + e1: + name: 'Critical Strike Chance' + coordinates: + x: 4 + y: 1 + + parents: + strong: + d3: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_critical_strike_chance2 + lores: + 0: + - "&eCritical Strikes deal more damage in +%2 chance" + 1: + - "&eCritical Strikes deal more damage in +%2 chance" + e2: + name: 'Critical Strike Chance' + coordinates: + x: 4 + y: 2 + + parents: + strong: + e1: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_critical_strike_chance3 + lores: + 0: + - "&eCritical Strikes deal more damage in +%3 chance" + 1: + - "&eCritical Strikes deal more damage in +%3 chance" + e3: + name: 'Critical Strike Chance' + coordinates: + x: 3 + y: 2 + + parents: + strong: + e2: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_critical_strike_chance5 + lores: + 0: + - "&eCritical Strikes deal more damage in +%5 chance" + 1: + - "&eCritical Strikes deal more damage in +%5 chance" + +## F + + f1: + name: 'Movement Speed' + coordinates: + x: 2 + y: 2 + + parents: + strong: + e3: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_movement_speed2 + lores: + 0: + - "&eMovement Speed increase walk speed. +%2" + 1: + - "&eMovement Speed increase walk speed. +%2" + f2: + name: 'Movement Speed' + coordinates: + x: 2 + y: 1 + + parents: + strong: + f1: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_movement_speed2 + lores: + 0: + - "&eMovement Speed increase walk speed. +%2" + 1: + - "&eMovement Speed increase walk speed. +%2" + f3: + name: 'Movement Speed' + coordinates: + x: 1 + y: 1 + + parents: + strong: + f2: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_movement_speed6 + lores: + 0: + - "&eMovement Speed increase walk speed. +%6" + 1: + - "&eMovement Speed increase walk speed. +%6" + +## G + + g1: + name: 'Projectile Damage' + coordinates: + x: 0 + y: 1 + + parents: + strong: + f3: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_projectile_damage2 + lores: + 0: + - "&eAdditional skill/weapon projectile damage +%2" + 1: + - "&eAdditional skill/weapon projectile damage +%2" + g2: + name: 'Projectile Damage' + coordinates: + x: 0 + y: 2 + + parents: + strong: + g1: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_projectile_damage2 + lores: + 0: + - "&eAdditional skill/weapon projectile damage +%2" + 1: + - "&eAdditional skill/weapon projectile damage +%2" + g3: + name: 'Projectile Damage' + coordinates: + x: -1 + y: 2 + + parents: + strong: + g2: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_projectile_damage6 + lores: + 0: + - "&eAdditional skill/weapon projectile damage +%6" + 1: + - "&eAdditional skill/weapon projectile damage +%6" + + + +icons: + unlocked: + 1: + item: 'GREEN_DYE' + locked: + 1: + item: "BROWN_DYE" + unlockable: + 1: + item: "BLUE_DYE" + fully-locked: + 1: + item: "BLACK_DYE" + path: + item: "WHITE_DYE" diff --git a/MMOCore-Dist/src/main/resources/default/skilltree/warrior-paladin.yml b/MMOCore-Dist/src/main/resources/default/skilltree/warrior-paladin.yml new file mode 100644 index 00000000..1fce0b3a --- /dev/null +++ b/MMOCore-Dist/src/main/resources/default/skilltree/warrior-paladin.yml @@ -0,0 +1,424 @@ +id: 'warrior-paladin' +name: '&4Warrior&Paladin' +type: 'custom' +item: 'DIAMOND_AXE' +lore: +- '&6This skill tree is used for Warrior and Paladin class only!' +max-point-spent: 21 + +nodes: + +#### A + a1: + name: 'Attack Speed' + coordinates: + x: -1 + y: 2 + + max-level: 1 + is-root: true + size: 1 + experience-table: skilltree_attack_speed5 + lores: + 0: + - "&eThe speed at which your weapon strikes. +%5" + 1: + - "&eThe speed at which your weapon strikes. +%5" + a2: + name: 'Attack Speed' + coordinates: + x: -2 + y: 1 + + parents: + strong: + a1: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_attack_speed10 + lores: + 0: + - "&eThe speed at which your weapon strikes. +%10" + 1: + - "&eThe speed at which your weapon strikes. +%10" + a3: + name: 'Attack Speed' + coordinates: + x: -3 + y: 0 + + parents: + strong: + a2: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_attack_speed15 + lores: + 0: + - "&eThe speed at which your weapon strikes. +%15" + 1: + - "&eThe speed at which your weapon strikes. +%15" + +## B + + b1: + name: 'Health Regeneration' + coordinates: + x: -2 + y: -1 + + parents: + strong: + a3: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_health_regeneration1 + lores: + 0: + - "&eCCC" + 1: + - "&eCCC" + b2: + name: 'Health Regeneration' + coordinates: + x: -1 + y: -2 + + parents: + strong: + b1: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_health_regeneration2 + lores: + 0: + - "&eCCC" + 1: + - "&eCCC" + b3: + name: 'Health Regeneration' + coordinates: + x: 0 + y: -2 + + parents: + strong: + b2: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_health_regeneration2 + lores: + 0: + - "&eCCC" + 1: + - "&eCCC" + +## C + + c1: + name: 'Physical Damage Reduction' + coordinates: + x: 0 + y: -1 + + parents: + strong: + b3: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_physical_damage_reduction5 + lores: + 0: + - "&eReduces physical damage In -%5" + 1: + - "&eReduces physical damage In -%5" + c2: + name: 'Physical Damage Reduction' + coordinates: + x: -1 + y: 0 + + parents: + strong: + c1: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_physical_damage_reduction10 + lores: + 0: + - "&eReduces physical damage In -%10" + 1: + - "&eReduces physical damage In -%10" + c3: + name: 'Physical Damage Reduction' + coordinates: + x: 0 + y: 1 + + parents: + strong: + c2: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_physical_damage_reduction15 + lores: + 0: + - "&eReduces physical damage In -%15" + 1: + - "&eReduces physical damage In -%15" + +## D + + d1: + name: 'Parry Rating' + coordinates: + x: 1 + y: 1 + + parents: + strong: + c3: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_parry_rating5 + lores: + 0: + - "&eThe chance to parry an attack. Parrying negates the damage and knocks the attacker back +%5" + 1: + - "&eThe chance to parry an attack. Parrying negates the damage and knocks the attacker back +%5" + d2: + name: 'Parry Rating' + coordinates: + x: 2 + y: 1 + + parents: + strong: + d1: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_parry_rating5 + lores: + 0: + - "&eThe chance to parry an attack. Parrying negates the damage and knocks the attacker back +%5" + 1: + - "&eThe chance to parry an attack. Parrying negates the damage and knocks the attacker back +%5" + d3: + name: 'Parry Rating' + coordinates: + x: 2 + y: 2 + + parents: + strong: + d2: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_parry_rating10 + lores: + 0: + - "&eThe chance to parry an attack. Parrying negates the damage and knocks the attacker back +%10" + 1: + - "&eThe chance to parry an attack. Parrying negates the damage and knocks the attacker back +%10" + +## E + + e1: + name: 'Knockback Resistance' + coordinates: + x: 3 + y: 2 + + parents: + strong: + d3: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_knockback_resistance5 + lores: + 0: + - "&eThe chance of you to block the knockback +%5" + 1: + - "&eThe chance of you to block the knockback +%5" + e2: + name: 'Knockback Resistance' + coordinates: + x: 4 + y: 2 + + parents: + strong: + e1: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_knockback_resistance5 + lores: + 0: + - "&eThe chance of you to block the knockback +%5" + 1: + - "&eThe chance of you to block the knockback +%5" + e3: + name: 'Knockback Resistance' + coordinates: + x: 4 + y: 1 + + parents: + strong: + e2: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_knockback_resistance10 + lores: + 0: + - "&eThe chance of you to block the knockback +%10" + 1: + - "&eThe chance of you to block the knockback +%10" + +## F + + f1: + name: 'Dodge Rating' + coordinates: + x: 4 + y: 0 + + parents: + strong: + e3: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_dodge_rating2 + lores: + 0: + - "&eThe change to dodge an attack. Dodging completely negates the attack damage. +%2" + 1: + - "&eThe change to dodge an attack. Dodging completely negates the attack damage. +%2" + f2: + name: 'Dodge Rating' + coordinates: + x: 4 + y: -1 + + parents: + strong: + f1: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_dodge_rating3 + lores: + 0: + - "&eThe change to dodge an attack. Dodging completely negates the attack damage. +%3" + 1: + - "&eThe change to dodge an attack. Dodging completely negates the attack damage. +%3" + f3: + name: 'Dodge Rating' + coordinates: + x: 4 + y: -2 + + parents: + strong: + f2: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_dodge_rating5 + lores: + 0: + - "&eThe change to dodge an attack. Dodging completely negates the attack damage. +%5" + 1: + - "&eThe change to dodge an attack. Dodging completely negates the attack damage. +%5" + +## G + + g1: + name: 'Weapon Damage' + coordinates: + x: 3 + y: -2 + + parents: + strong: + f3: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_weapon_damage1 + lores: + 0: + - "&eAdditional on-hit weapon damage in +%1." + 1: + - "&eAdditional on-hit weapon damage in +%1." + g2: + name: 'Weapon Damage' + coordinates: + x: 2 + y: -2 + + parents: + strong: + g1: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_weapon_damage2 + lores: + 0: + - "&eAdditional on-hit weapon damage in +%1." + 1: + - "&eAdditional on-hit weapon damage in +%1." + g3: + name: 'Weapon Damage' + coordinates: + x: 2 + y: -1 + + parents: + strong: + g2: 1 + + max-level: 1 + size: 1 + experience-table: skilltree_weapon_damage2 + lores: + 0: + - "&eAdditional on-hit weapon damage in +%1." + 1: + - "&eAdditional on-hit weapon damage in +%1." + + + + + +icons: + unlocked: + 1: + item: 'GREEN_DYE' + locked: + 1: + item: "BROWN_DYE" + unlockable: + 1: + item: "BLUE_DYE" + fully-locked: + 1: + item: "BLACK_DYE" + path: + item: "WHITE_DYE" diff --git a/pom.xml b/pom.xml index 0c1cd389..ca63dce6 100644 --- a/pom.xml +++ b/pom.xml @@ -16,7 +16,7 @@ Offer your players a brand new RPG experience!! - 1.10.3-SNAPSHOT + 1.11.0-SNAPSHOT false false UTF-8