diff --git a/L2J_Mobius_01.0_Ertheia/dist/game/config/Character.ini b/L2J_Mobius_01.0_Ertheia/dist/game/config/Character.ini index 64580dc926..eebd83d974 100644 --- a/L2J_Mobius_01.0_Ertheia/dist/game/config/Character.ini +++ b/L2J_Mobius_01.0_Ertheia/dist/game/config/Character.ini @@ -77,6 +77,10 @@ SkillReuseList = # Default: False AutoLearnSkills = False +# Auto learn skills that need items to be learned. +# Default: False +AutoLearnSkillsWithoutItems = False + # If it's true skills from forgotten scrolls will be delivered upon level up and login, require AutoLearnSkills. # Default: False AutoLearnForgottenScrollSkills = False diff --git a/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java b/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java index 8c8b39a9df..6f1a1d473e 100644 --- a/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java +++ b/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java @@ -429,7 +429,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); @@ -453,7 +453,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } else { - player.giveAvailableSkills(true, true); + player.giveAvailableSkills(true, true, true); } break; } @@ -868,7 +868,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); diff --git a/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java b/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java index 62422c213e..2094e79825 100644 --- a/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java +++ b/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java @@ -156,11 +156,11 @@ public class AdminSkill implements IAdminCommandHandler } else if (command.equals("admin_give_all_skills")) { - adminGiveAllSkills(activeChar, false); + adminGiveAllSkills(activeChar, false, false); } else if (command.equals("admin_give_all_skills_fs")) { - adminGiveAllSkills(activeChar, true); + adminGiveAllSkills(activeChar, true, true); } else if (command.equals("admin_give_clan_skills")) { @@ -277,9 +277,10 @@ public class AdminSkill implements IAdminCommandHandler /** * This function will give all the skills that the target can learn at his/her level * @param activeChar the player - * @param includedByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeRequiredItems if {@code true} skills that have required items will be added */ - private void adminGiveAllSkills(PlayerInstance activeChar, boolean includedByFs) + private void adminGiveAllSkills(PlayerInstance activeChar, boolean includeByFs, boolean includeRequiredItems) { final WorldObject target = activeChar.getTarget(); if ((target == null) || !target.isPlayer()) @@ -289,7 +290,7 @@ public class AdminSkill implements IAdminCommandHandler } final PlayerInstance player = target.getActingPlayer(); // Notify player and admin - BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includedByFs, true) + " skills to " + player.getName()); + BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includeByFs, true, includeRequiredItems) + " skills to " + player.getName()); player.sendSkillList(); player.sendPacket(new AcquireSkillList(player)); } diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/Config.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/Config.java index f2db08a2ad..5d948b2661 100644 --- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/Config.java @@ -165,6 +165,7 @@ public class Config public static boolean ENABLE_MODIFY_SKILL_REUSE; public static Map SKILL_REUSE_LIST; public static boolean AUTO_LEARN_SKILLS; + public static boolean AUTO_LEARN_SKILLS_WITHOUT_ITEMS; public static boolean AUTO_LEARN_FS_SKILLS; public static boolean AUTO_LOOT_HERBS; public static byte BUFFS_MAX_AMOUNT; @@ -1707,6 +1708,7 @@ public class Config } } AUTO_LEARN_SKILLS = Character.getBoolean("AutoLearnSkills", false); + AUTO_LEARN_SKILLS_WITHOUT_ITEMS = Character.getBoolean("AutoLearnSkillsWithoutItems", false); AUTO_LEARN_FS_SKILLS = Character.getBoolean("AutoLearnForgottenScrollSkills", false); AUTO_LOOT_HERBS = Character.getBoolean("AutoLootHerbs", false); BUFFS_MAX_AMOUNT = Character.getByte("MaxBuffAmount", (byte) 20); diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index 8129ca011b..60db7fbc7b 100644 --- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -729,7 +729,16 @@ public class SkillTreeData implements IXmlReader return result; } - public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet) + /** + * Used by auto learn configuration. + * @param player + * @param classId + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added + * @return a list of auto learnable skills for the player. + */ + public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); @@ -749,8 +758,13 @@ public class SkillTreeData implements IXmlReader break; } - for (SkillLearn skillLearn : learnable) + SEARCH: for (SkillLearn skillLearn : learnable) { + if (!includeRequiredItems && !skillLearn.getRequiredItems().isEmpty()) + { + continue SEARCH; + } + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 4b96eeaf40..cac2c2a0b8 100644 --- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -2583,7 +2583,7 @@ public class PlayerInstance extends Playable // Give all normal skills if activated Auto-Learn is activated, included AutoGet skills. if (Config.AUTO_LEARN_SKILLS) { - giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } else { @@ -2643,15 +2643,16 @@ public class PlayerInstance extends Playable /** * Give all available skills to the player. - * @param includedByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added * @return the amount of new skills earned */ - public int giveAvailableSkills(boolean includedByFs, boolean includeAutoGet) + public int giveAvailableSkills(boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { int skillCounter = 0; // Get available skills - final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includedByFs, includeAutoGet); + final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includeByFs, includeAutoGet, includeRequiredItems); final List skillsForStore = new ArrayList<>(); for (Skill skill : skills) { diff --git a/L2J_Mobius_02.5_Underground/dist/game/config/Character.ini b/L2J_Mobius_02.5_Underground/dist/game/config/Character.ini index d4a8abc242..f1405eea10 100644 --- a/L2J_Mobius_02.5_Underground/dist/game/config/Character.ini +++ b/L2J_Mobius_02.5_Underground/dist/game/config/Character.ini @@ -77,6 +77,10 @@ SkillReuseList = # Default: False AutoLearnSkills = False +# Auto learn skills that need items to be learned. +# Default: False +AutoLearnSkillsWithoutItems = False + # If it's true skills from forgotten scrolls will be delivered upon level up and login, require AutoLearnSkills. # Default: False AutoLearnForgottenScrollSkills = False diff --git a/L2J_Mobius_02.5_Underground/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java b/L2J_Mobius_02.5_Underground/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java index 4822c24427..954ab51b9d 100644 --- a/L2J_Mobius_02.5_Underground/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java +++ b/L2J_Mobius_02.5_Underground/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java @@ -429,7 +429,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); @@ -453,7 +453,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } else { - player.giveAvailableSkills(true, true); + player.giveAvailableSkills(true, true, true); } break; } @@ -868,7 +868,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); diff --git a/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java b/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java index 62422c213e..2094e79825 100644 --- a/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java +++ b/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java @@ -156,11 +156,11 @@ public class AdminSkill implements IAdminCommandHandler } else if (command.equals("admin_give_all_skills")) { - adminGiveAllSkills(activeChar, false); + adminGiveAllSkills(activeChar, false, false); } else if (command.equals("admin_give_all_skills_fs")) { - adminGiveAllSkills(activeChar, true); + adminGiveAllSkills(activeChar, true, true); } else if (command.equals("admin_give_clan_skills")) { @@ -277,9 +277,10 @@ public class AdminSkill implements IAdminCommandHandler /** * This function will give all the skills that the target can learn at his/her level * @param activeChar the player - * @param includedByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeRequiredItems if {@code true} skills that have required items will be added */ - private void adminGiveAllSkills(PlayerInstance activeChar, boolean includedByFs) + private void adminGiveAllSkills(PlayerInstance activeChar, boolean includeByFs, boolean includeRequiredItems) { final WorldObject target = activeChar.getTarget(); if ((target == null) || !target.isPlayer()) @@ -289,7 +290,7 @@ public class AdminSkill implements IAdminCommandHandler } final PlayerInstance player = target.getActingPlayer(); // Notify player and admin - BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includedByFs, true) + " skills to " + player.getName()); + BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includeByFs, true, includeRequiredItems) + " skills to " + player.getName()); player.sendSkillList(); player.sendPacket(new AcquireSkillList(player)); } diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/Config.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/Config.java index 9ff8c88b29..243c1c291e 100644 --- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/Config.java @@ -172,6 +172,7 @@ public class Config public static boolean ENABLE_MODIFY_SKILL_REUSE; public static Map SKILL_REUSE_LIST; public static boolean AUTO_LEARN_SKILLS; + public static boolean AUTO_LEARN_SKILLS_WITHOUT_ITEMS; public static boolean AUTO_LEARN_FS_SKILLS; public static boolean AUTO_LOOT_HERBS; public static byte BUFFS_MAX_AMOUNT; @@ -1727,6 +1728,7 @@ public class Config } } AUTO_LEARN_SKILLS = Character.getBoolean("AutoLearnSkills", false); + AUTO_LEARN_SKILLS_WITHOUT_ITEMS = Character.getBoolean("AutoLearnSkillsWithoutItems", false); AUTO_LEARN_FS_SKILLS = Character.getBoolean("AutoLearnForgottenScrollSkills", false); AUTO_LOOT_HERBS = Character.getBoolean("AutoLootHerbs", false); BUFFS_MAX_AMOUNT = Character.getByte("MaxBuffAmount", (byte) 20); diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index 8129ca011b..60db7fbc7b 100644 --- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -729,7 +729,16 @@ public class SkillTreeData implements IXmlReader return result; } - public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet) + /** + * Used by auto learn configuration. + * @param player + * @param classId + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added + * @return a list of auto learnable skills for the player. + */ + public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); @@ -749,8 +758,13 @@ public class SkillTreeData implements IXmlReader break; } - for (SkillLearn skillLearn : learnable) + SEARCH: for (SkillLearn skillLearn : learnable) { + if (!includeRequiredItems && !skillLearn.getRequiredItems().isEmpty()) + { + continue SEARCH; + } + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index ef674c5aae..17ba599b28 100644 --- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -2585,7 +2585,7 @@ public class PlayerInstance extends Playable // Give all normal skills if activated Auto-Learn is activated, included AutoGet skills. if (Config.AUTO_LEARN_SKILLS) { - giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } else { @@ -2645,15 +2645,16 @@ public class PlayerInstance extends Playable /** * Give all available skills to the player. - * @param includedByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added * @return the amount of new skills earned */ - public int giveAvailableSkills(boolean includedByFs, boolean includeAutoGet) + public int giveAvailableSkills(boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { int skillCounter = 0; // Get available skills - final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includedByFs, includeAutoGet); + final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includeByFs, includeAutoGet, includeRequiredItems); final List skillsForStore = new ArrayList<>(); for (Skill skill : skills) { diff --git a/L2J_Mobius_03.0_Helios/dist/game/config/Character.ini b/L2J_Mobius_03.0_Helios/dist/game/config/Character.ini index d4a8abc242..f1405eea10 100644 --- a/L2J_Mobius_03.0_Helios/dist/game/config/Character.ini +++ b/L2J_Mobius_03.0_Helios/dist/game/config/Character.ini @@ -77,6 +77,10 @@ SkillReuseList = # Default: False AutoLearnSkills = False +# Auto learn skills that need items to be learned. +# Default: False +AutoLearnSkillsWithoutItems = False + # If it's true skills from forgotten scrolls will be delivered upon level up and login, require AutoLearnSkills. # Default: False AutoLearnForgottenScrollSkills = False diff --git a/L2J_Mobius_03.0_Helios/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java b/L2J_Mobius_03.0_Helios/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java index a6fdab323a..9bc92fb2e8 100644 --- a/L2J_Mobius_03.0_Helios/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java +++ b/L2J_Mobius_03.0_Helios/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java @@ -429,7 +429,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); @@ -453,7 +453,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } else { - player.giveAvailableSkills(true, true); + player.giveAvailableSkills(true, true, true); } break; } @@ -868,7 +868,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); diff --git a/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java b/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java index 62422c213e..2094e79825 100644 --- a/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java +++ b/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java @@ -156,11 +156,11 @@ public class AdminSkill implements IAdminCommandHandler } else if (command.equals("admin_give_all_skills")) { - adminGiveAllSkills(activeChar, false); + adminGiveAllSkills(activeChar, false, false); } else if (command.equals("admin_give_all_skills_fs")) { - adminGiveAllSkills(activeChar, true); + adminGiveAllSkills(activeChar, true, true); } else if (command.equals("admin_give_clan_skills")) { @@ -277,9 +277,10 @@ public class AdminSkill implements IAdminCommandHandler /** * This function will give all the skills that the target can learn at his/her level * @param activeChar the player - * @param includedByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeRequiredItems if {@code true} skills that have required items will be added */ - private void adminGiveAllSkills(PlayerInstance activeChar, boolean includedByFs) + private void adminGiveAllSkills(PlayerInstance activeChar, boolean includeByFs, boolean includeRequiredItems) { final WorldObject target = activeChar.getTarget(); if ((target == null) || !target.isPlayer()) @@ -289,7 +290,7 @@ public class AdminSkill implements IAdminCommandHandler } final PlayerInstance player = target.getActingPlayer(); // Notify player and admin - BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includedByFs, true) + " skills to " + player.getName()); + BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includeByFs, true, includeRequiredItems) + " skills to " + player.getName()); player.sendSkillList(); player.sendPacket(new AcquireSkillList(player)); } diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/Config.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/Config.java index 79f7d97f25..36b08fdd3f 100644 --- a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/Config.java @@ -172,6 +172,7 @@ public class Config public static boolean ENABLE_MODIFY_SKILL_REUSE; public static Map SKILL_REUSE_LIST; public static boolean AUTO_LEARN_SKILLS; + public static boolean AUTO_LEARN_SKILLS_WITHOUT_ITEMS; public static boolean AUTO_LEARN_FS_SKILLS; public static boolean AUTO_LOOT_HERBS; public static byte BUFFS_MAX_AMOUNT; @@ -1740,6 +1741,7 @@ public class Config } } AUTO_LEARN_SKILLS = Character.getBoolean("AutoLearnSkills", false); + AUTO_LEARN_SKILLS_WITHOUT_ITEMS = Character.getBoolean("AutoLearnSkillsWithoutItems", false); AUTO_LEARN_FS_SKILLS = Character.getBoolean("AutoLearnForgottenScrollSkills", false); AUTO_LOOT_HERBS = Character.getBoolean("AutoLootHerbs", false); BUFFS_MAX_AMOUNT = Character.getByte("MaxBuffAmount", (byte) 20); diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index 8129ca011b..60db7fbc7b 100644 --- a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -729,7 +729,16 @@ public class SkillTreeData implements IXmlReader return result; } - public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet) + /** + * Used by auto learn configuration. + * @param player + * @param classId + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added + * @return a list of auto learnable skills for the player. + */ + public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); @@ -749,8 +758,13 @@ public class SkillTreeData implements IXmlReader break; } - for (SkillLearn skillLearn : learnable) + SEARCH: for (SkillLearn skillLearn : learnable) { + if (!includeRequiredItems && !skillLearn.getRequiredItems().isEmpty()) + { + continue SEARCH; + } + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 92e8374075..bb3812292d 100644 --- a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -2587,7 +2587,7 @@ public class PlayerInstance extends Playable // Give all normal skills if activated Auto-Learn is activated, included AutoGet skills. if (Config.AUTO_LEARN_SKILLS) { - giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } else { @@ -2647,15 +2647,16 @@ public class PlayerInstance extends Playable /** * Give all available skills to the player. - * @param includedByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added * @return the amount of new skills earned */ - public int giveAvailableSkills(boolean includedByFs, boolean includeAutoGet) + public int giveAvailableSkills(boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { int skillCounter = 0; // Get available skills - final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includedByFs, includeAutoGet); + final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includeByFs, includeAutoGet, includeRequiredItems); final List skillsForStore = new ArrayList<>(); for (Skill skill : skills) { diff --git a/L2J_Mobius_04.0_GrandCrusade/dist/game/config/Character.ini b/L2J_Mobius_04.0_GrandCrusade/dist/game/config/Character.ini index df052732df..d89d3b1550 100644 --- a/L2J_Mobius_04.0_GrandCrusade/dist/game/config/Character.ini +++ b/L2J_Mobius_04.0_GrandCrusade/dist/game/config/Character.ini @@ -77,6 +77,10 @@ SkillReuseList = # Default: False AutoLearnSkills = False +# Auto learn skills that need items to be learned. +# Default: False +AutoLearnSkillsWithoutItems = False + # If it's true skills from forgotten scrolls will be delivered upon level up and login, require AutoLearnSkills. # Default: False AutoLearnForgottenScrollSkills = False diff --git a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java index a6fdab323a..9bc92fb2e8 100644 --- a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java +++ b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java @@ -429,7 +429,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); @@ -453,7 +453,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } else { - player.giveAvailableSkills(true, true); + player.giveAvailableSkills(true, true, true); } break; } @@ -868,7 +868,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); diff --git a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java index 62422c213e..2094e79825 100644 --- a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java +++ b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java @@ -156,11 +156,11 @@ public class AdminSkill implements IAdminCommandHandler } else if (command.equals("admin_give_all_skills")) { - adminGiveAllSkills(activeChar, false); + adminGiveAllSkills(activeChar, false, false); } else if (command.equals("admin_give_all_skills_fs")) { - adminGiveAllSkills(activeChar, true); + adminGiveAllSkills(activeChar, true, true); } else if (command.equals("admin_give_clan_skills")) { @@ -277,9 +277,10 @@ public class AdminSkill implements IAdminCommandHandler /** * This function will give all the skills that the target can learn at his/her level * @param activeChar the player - * @param includedByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeRequiredItems if {@code true} skills that have required items will be added */ - private void adminGiveAllSkills(PlayerInstance activeChar, boolean includedByFs) + private void adminGiveAllSkills(PlayerInstance activeChar, boolean includeByFs, boolean includeRequiredItems) { final WorldObject target = activeChar.getTarget(); if ((target == null) || !target.isPlayer()) @@ -289,7 +290,7 @@ public class AdminSkill implements IAdminCommandHandler } final PlayerInstance player = target.getActingPlayer(); // Notify player and admin - BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includedByFs, true) + " skills to " + player.getName()); + BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includeByFs, true, includeRequiredItems) + " skills to " + player.getName()); player.sendSkillList(); player.sendPacket(new AcquireSkillList(player)); } diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/Config.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/Config.java index c08f72e8b2..59f58509af 100644 --- a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/Config.java @@ -172,6 +172,7 @@ public class Config public static boolean ENABLE_MODIFY_SKILL_REUSE; public static Map SKILL_REUSE_LIST; public static boolean AUTO_LEARN_SKILLS; + public static boolean AUTO_LEARN_SKILLS_WITHOUT_ITEMS; public static boolean AUTO_LEARN_FS_SKILLS; public static boolean AUTO_LOOT_HERBS; public static byte BUFFS_MAX_AMOUNT; @@ -1727,6 +1728,7 @@ public class Config } } AUTO_LEARN_SKILLS = Character.getBoolean("AutoLearnSkills", false); + AUTO_LEARN_SKILLS_WITHOUT_ITEMS = Character.getBoolean("AutoLearnSkillsWithoutItems", false); AUTO_LEARN_FS_SKILLS = Character.getBoolean("AutoLearnForgottenScrollSkills", false); AUTO_LOOT_HERBS = Character.getBoolean("AutoLootHerbs", false); BUFFS_MAX_AMOUNT = Character.getByte("MaxBuffAmount", (byte) 20); diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index 8129ca011b..60db7fbc7b 100644 --- a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -729,7 +729,16 @@ public class SkillTreeData implements IXmlReader return result; } - public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet) + /** + * Used by auto learn configuration. + * @param player + * @param classId + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added + * @return a list of auto learnable skills for the player. + */ + public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); @@ -749,8 +758,13 @@ public class SkillTreeData implements IXmlReader break; } - for (SkillLearn skillLearn : learnable) + SEARCH: for (SkillLearn skillLearn : learnable) { + if (!includeRequiredItems && !skillLearn.getRequiredItems().isEmpty()) + { + continue SEARCH; + } + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 2cb5feef22..96ab92477f 100644 --- a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -2595,7 +2595,7 @@ public class PlayerInstance extends Playable // Give all normal skills if activated Auto-Learn is activated, included AutoGet skills. if (Config.AUTO_LEARN_SKILLS) { - giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } else { @@ -2655,15 +2655,16 @@ public class PlayerInstance extends Playable /** * Give all available skills to the player. - * @param includedByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added * @return the amount of new skills earned */ - public int giveAvailableSkills(boolean includedByFs, boolean includeAutoGet) + public int giveAvailableSkills(boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { int skillCounter = 0; // Get available skills - final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includedByFs, includeAutoGet); + final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includeByFs, includeAutoGet, includeRequiredItems); final List skillsForStore = new ArrayList<>(); for (Skill skill : skills) { diff --git a/L2J_Mobius_05.0_Salvation/dist/game/config/Character.ini b/L2J_Mobius_05.0_Salvation/dist/game/config/Character.ini index 933a9220cb..df1bc204c5 100644 --- a/L2J_Mobius_05.0_Salvation/dist/game/config/Character.ini +++ b/L2J_Mobius_05.0_Salvation/dist/game/config/Character.ini @@ -77,6 +77,10 @@ SkillReuseList = # Default: False AutoLearnSkills = False +# Auto learn skills that need items to be learned. +# Default: False +AutoLearnSkillsWithoutItems = False + # If it's true skills from forgotten scrolls will be delivered upon level up and login, require AutoLearnSkills. # Default: False AutoLearnForgottenScrollSkills = False diff --git a/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java b/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java index a6fdab323a..9bc92fb2e8 100644 --- a/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java +++ b/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java @@ -429,7 +429,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); @@ -453,7 +453,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } else { - player.giveAvailableSkills(true, true); + player.giveAvailableSkills(true, true, true); } break; } @@ -868,7 +868,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); diff --git a/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java b/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java index 62422c213e..2094e79825 100644 --- a/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java +++ b/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java @@ -156,11 +156,11 @@ public class AdminSkill implements IAdminCommandHandler } else if (command.equals("admin_give_all_skills")) { - adminGiveAllSkills(activeChar, false); + adminGiveAllSkills(activeChar, false, false); } else if (command.equals("admin_give_all_skills_fs")) { - adminGiveAllSkills(activeChar, true); + adminGiveAllSkills(activeChar, true, true); } else if (command.equals("admin_give_clan_skills")) { @@ -277,9 +277,10 @@ public class AdminSkill implements IAdminCommandHandler /** * This function will give all the skills that the target can learn at his/her level * @param activeChar the player - * @param includedByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeRequiredItems if {@code true} skills that have required items will be added */ - private void adminGiveAllSkills(PlayerInstance activeChar, boolean includedByFs) + private void adminGiveAllSkills(PlayerInstance activeChar, boolean includeByFs, boolean includeRequiredItems) { final WorldObject target = activeChar.getTarget(); if ((target == null) || !target.isPlayer()) @@ -289,7 +290,7 @@ public class AdminSkill implements IAdminCommandHandler } final PlayerInstance player = target.getActingPlayer(); // Notify player and admin - BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includedByFs, true) + " skills to " + player.getName()); + BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includeByFs, true, includeRequiredItems) + " skills to " + player.getName()); player.sendSkillList(); player.sendPacket(new AcquireSkillList(player)); } diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/Config.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/Config.java index e86734f340..aba2f9b7a5 100644 --- a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/Config.java @@ -179,6 +179,7 @@ public class Config public static boolean ENABLE_MODIFY_SKILL_REUSE; public static Map SKILL_REUSE_LIST; public static boolean AUTO_LEARN_SKILLS; + public static boolean AUTO_LEARN_SKILLS_WITHOUT_ITEMS; public static boolean AUTO_LEARN_FS_SKILLS; public static boolean AUTO_LOOT_HERBS; public static byte BUFFS_MAX_AMOUNT; @@ -1728,6 +1729,7 @@ public class Config } } AUTO_LEARN_SKILLS = Character.getBoolean("AutoLearnSkills", false); + AUTO_LEARN_SKILLS_WITHOUT_ITEMS = Character.getBoolean("AutoLearnSkillsWithoutItems", false); AUTO_LEARN_FS_SKILLS = Character.getBoolean("AutoLearnForgottenScrollSkills", false); AUTO_LOOT_HERBS = Character.getBoolean("AutoLootHerbs", false); BUFFS_MAX_AMOUNT = Character.getByte("MaxBuffAmount", (byte) 20); diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index 8129ca011b..60db7fbc7b 100644 --- a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -729,7 +729,16 @@ public class SkillTreeData implements IXmlReader return result; } - public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet) + /** + * Used by auto learn configuration. + * @param player + * @param classId + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added + * @return a list of auto learnable skills for the player. + */ + public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); @@ -749,8 +758,13 @@ public class SkillTreeData implements IXmlReader break; } - for (SkillLearn skillLearn : learnable) + SEARCH: for (SkillLearn skillLearn : learnable) { + if (!includeRequiredItems && !skillLearn.getRequiredItems().isEmpty()) + { + continue SEARCH; + } + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 87b57c755d..0e04858a97 100644 --- a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -2591,7 +2591,7 @@ public class PlayerInstance extends Playable // Give all normal skills if activated Auto-Learn is activated, included AutoGet skills. if (Config.AUTO_LEARN_SKILLS) { - giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } else { @@ -2651,15 +2651,16 @@ public class PlayerInstance extends Playable /** * Give all available skills to the player. - * @param includedByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added * @return the amount of new skills earned */ - public int giveAvailableSkills(boolean includedByFs, boolean includeAutoGet) + public int giveAvailableSkills(boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { int skillCounter = 0; // Get available skills - final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includedByFs, includeAutoGet); + final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includeByFs, includeAutoGet, includeRequiredItems); final List skillsForStore = new ArrayList<>(); for (Skill skill : skills) { diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java index f5620164fe..685ee8d45a 100644 --- a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java +++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java @@ -287,7 +287,7 @@ public class CharacterCreate implements IClientIncomingPacket newChar.getStat().setLevel((byte) Config.BALTHUS_KNIGHTS_LEVEL); if (Config.BALTHUS_KNIGHTS_REWARD_SKILLS) { - newChar.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + newChar.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } } diff --git a/L2J_Mobius_05.5_EtinasFate/dist/game/config/Character.ini b/L2J_Mobius_05.5_EtinasFate/dist/game/config/Character.ini index 933a9220cb..df1bc204c5 100644 --- a/L2J_Mobius_05.5_EtinasFate/dist/game/config/Character.ini +++ b/L2J_Mobius_05.5_EtinasFate/dist/game/config/Character.ini @@ -77,6 +77,10 @@ SkillReuseList = # Default: False AutoLearnSkills = False +# Auto learn skills that need items to be learned. +# Default: False +AutoLearnSkillsWithoutItems = False + # If it's true skills from forgotten scrolls will be delivered upon level up and login, require AutoLearnSkills. # Default: False AutoLearnForgottenScrollSkills = False diff --git a/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java b/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java index a6fdab323a..9bc92fb2e8 100644 --- a/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java +++ b/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java @@ -429,7 +429,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); @@ -453,7 +453,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } else { - player.giveAvailableSkills(true, true); + player.giveAvailableSkills(true, true, true); } break; } @@ -868,7 +868,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); diff --git a/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java b/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java index 62422c213e..2094e79825 100644 --- a/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java +++ b/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java @@ -156,11 +156,11 @@ public class AdminSkill implements IAdminCommandHandler } else if (command.equals("admin_give_all_skills")) { - adminGiveAllSkills(activeChar, false); + adminGiveAllSkills(activeChar, false, false); } else if (command.equals("admin_give_all_skills_fs")) { - adminGiveAllSkills(activeChar, true); + adminGiveAllSkills(activeChar, true, true); } else if (command.equals("admin_give_clan_skills")) { @@ -277,9 +277,10 @@ public class AdminSkill implements IAdminCommandHandler /** * This function will give all the skills that the target can learn at his/her level * @param activeChar the player - * @param includedByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeRequiredItems if {@code true} skills that have required items will be added */ - private void adminGiveAllSkills(PlayerInstance activeChar, boolean includedByFs) + private void adminGiveAllSkills(PlayerInstance activeChar, boolean includeByFs, boolean includeRequiredItems) { final WorldObject target = activeChar.getTarget(); if ((target == null) || !target.isPlayer()) @@ -289,7 +290,7 @@ public class AdminSkill implements IAdminCommandHandler } final PlayerInstance player = target.getActingPlayer(); // Notify player and admin - BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includedByFs, true) + " skills to " + player.getName()); + BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includeByFs, true, includeRequiredItems) + " skills to " + player.getName()); player.sendSkillList(); player.sendPacket(new AcquireSkillList(player)); } diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/Config.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/Config.java index 40ec7a3da4..7208e70096 100644 --- a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/Config.java @@ -179,6 +179,7 @@ public class Config public static boolean ENABLE_MODIFY_SKILL_REUSE; public static Map SKILL_REUSE_LIST; public static boolean AUTO_LEARN_SKILLS; + public static boolean AUTO_LEARN_SKILLS_WITHOUT_ITEMS; public static boolean AUTO_LEARN_FS_SKILLS; public static boolean AUTO_LOOT_HERBS; public static byte BUFFS_MAX_AMOUNT; @@ -1735,6 +1736,7 @@ public class Config } } AUTO_LEARN_SKILLS = Character.getBoolean("AutoLearnSkills", false); + AUTO_LEARN_SKILLS_WITHOUT_ITEMS = Character.getBoolean("AutoLearnSkillsWithoutItems", false); AUTO_LEARN_FS_SKILLS = Character.getBoolean("AutoLearnForgottenScrollSkills", false); AUTO_LOOT_HERBS = Character.getBoolean("AutoLootHerbs", false); BUFFS_MAX_AMOUNT = Character.getByte("MaxBuffAmount", (byte) 20); diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index 8129ca011b..60db7fbc7b 100644 --- a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -729,7 +729,16 @@ public class SkillTreeData implements IXmlReader return result; } - public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet) + /** + * Used by auto learn configuration. + * @param player + * @param classId + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added + * @return a list of auto learnable skills for the player. + */ + public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); @@ -749,8 +758,13 @@ public class SkillTreeData implements IXmlReader break; } - for (SkillLearn skillLearn : learnable) + SEARCH: for (SkillLearn skillLearn : learnable) { + if (!includeRequiredItems && !skillLearn.getRequiredItems().isEmpty()) + { + continue SEARCH; + } + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index b481a64ea5..27c8eb1e49 100644 --- a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -2591,7 +2591,7 @@ public class PlayerInstance extends Playable // Give all normal skills if activated Auto-Learn is activated, included AutoGet skills. if (Config.AUTO_LEARN_SKILLS) { - giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } else { @@ -2651,15 +2651,16 @@ public class PlayerInstance extends Playable /** * Give all available skills to the player. - * @param includedByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added * @return the amount of new skills earned */ - public int giveAvailableSkills(boolean includedByFs, boolean includeAutoGet) + public int giveAvailableSkills(boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { int skillCounter = 0; // Get available skills - final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includedByFs, includeAutoGet); + final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includeByFs, includeAutoGet, includeRequiredItems); final List skillsForStore = new ArrayList<>(); for (Skill skill : skills) { diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java index f5620164fe..685ee8d45a 100644 --- a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java +++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java @@ -287,7 +287,7 @@ public class CharacterCreate implements IClientIncomingPacket newChar.getStat().setLevel((byte) Config.BALTHUS_KNIGHTS_LEVEL); if (Config.BALTHUS_KNIGHTS_REWARD_SKILLS) { - newChar.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + newChar.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } } diff --git a/L2J_Mobius_06.0_Fafurion/dist/game/config/Character.ini b/L2J_Mobius_06.0_Fafurion/dist/game/config/Character.ini index 598edbc1a3..10fa54b71f 100644 --- a/L2J_Mobius_06.0_Fafurion/dist/game/config/Character.ini +++ b/L2J_Mobius_06.0_Fafurion/dist/game/config/Character.ini @@ -77,6 +77,10 @@ SkillReuseList = # Default: False AutoLearnSkills = False +# Auto learn skills that need items to be learned. +# Default: False +AutoLearnSkillsWithoutItems = False + # If it's true skills from forgotten scrolls will be delivered upon level up and login, require AutoLearnSkills. # Default: False AutoLearnForgottenScrollSkills = False diff --git a/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java b/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java index a20d9962a1..083af1d351 100644 --- a/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java +++ b/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java @@ -429,7 +429,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); @@ -453,7 +453,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } else { - player.giveAvailableSkills(true, true, true); + player.giveAvailableSkills(true, true, true, true); } break; } @@ -868,7 +868,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); diff --git a/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java b/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java index ee3c7aea4c..f969aba70f 100644 --- a/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java +++ b/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java @@ -156,11 +156,11 @@ public class AdminSkill implements IAdminCommandHandler } else if (command.equals("admin_give_all_skills")) { - adminGiveAllSkills(activeChar, false, false); + adminGiveAllSkills(activeChar, false, false, false); } else if (command.equals("admin_give_all_skills_fs")) { - adminGiveAllSkills(activeChar, true, true); + adminGiveAllSkills(activeChar, true, true, true); } else if (command.equals("admin_give_clan_skills")) { @@ -277,10 +277,11 @@ public class AdminSkill implements IAdminCommandHandler /** * This function will give all the skills that the target can learn at his/her level * @param activeChar the player - * @param includedByFs if {@code true} Forgotten Scroll skills will be delivered. - * @param includedByFp if {@code true} Forgotten Power skills will be delivered. + * @param includeByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeByFp if {@code true} Forgotten Power skills will be delivered. + * @param includeRequiredItems if {@code true} skills that have required items will be added */ - private void adminGiveAllSkills(PlayerInstance activeChar, boolean includedByFs, boolean includedByFp) + private void adminGiveAllSkills(PlayerInstance activeChar, boolean includeByFs, boolean includeByFp, boolean includeRequiredItems) { final WorldObject target = activeChar.getTarget(); if ((target == null) || !target.isPlayer()) @@ -290,7 +291,7 @@ public class AdminSkill implements IAdminCommandHandler } final PlayerInstance player = target.getActingPlayer(); // Notify player and admin - BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includedByFs, includedByFp, true) + " skills to " + player.getName()); + BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includeByFs, includeByFp, true, includeRequiredItems) + " skills to " + player.getName()); player.sendSkillList(); player.sendPacket(new AcquireSkillList(player)); } diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/Config.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/Config.java index bd8b4a65e5..2bab3ac7af 100644 --- a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/Config.java @@ -179,6 +179,7 @@ public class Config public static boolean ENABLE_MODIFY_SKILL_REUSE; public static Map SKILL_REUSE_LIST; public static boolean AUTO_LEARN_SKILLS; + public static boolean AUTO_LEARN_SKILLS_WITHOUT_ITEMS; public static boolean AUTO_LEARN_FS_SKILLS; public static boolean AUTO_LEARN_FP_SKILLS; public static boolean AUTO_LOOT_HERBS; @@ -1769,6 +1770,7 @@ public class Config } } AUTO_LEARN_SKILLS = Character.getBoolean("AutoLearnSkills", false); + AUTO_LEARN_SKILLS_WITHOUT_ITEMS = Character.getBoolean("AutoLearnSkillsWithoutItems", false); AUTO_LEARN_FS_SKILLS = Character.getBoolean("AutoLearnForgottenScrollSkills", false); AUTO_LEARN_FP_SKILLS = Character.getBoolean("AutoLearnForgottenPowerSkills", false); AUTO_LOOT_HERBS = Character.getBoolean("AutoLootHerbs", false); diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index 6193a64534..12da3c8227 100644 --- a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -731,7 +731,17 @@ public class SkillTreeData implements IXmlReader return result; } - public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet) + /** + * Used by auto learn configuration. + * @param player + * @param classId + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeByFp if {@code true} forgotten power skills present in the skill tree will be added + * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added + * @return a list of auto learnable skills for the player. + */ + public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems) { // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); @@ -751,8 +761,13 @@ public class SkillTreeData implements IXmlReader break; } - for (SkillLearn skillLearn : learnable) + SEARCH: for (SkillLearn skillLearn : learnable) { + if (!includeRequiredItems && !skillLearn.getRequiredItems().isEmpty()) + { + continue SEARCH; + } + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index a3c8e72907..7d1fd3049e 100644 --- a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -2591,7 +2591,7 @@ public class PlayerInstance extends Playable // Give all normal skills if activated Auto-Learn is activated, included AutoGet skills. if (Config.AUTO_LEARN_SKILLS) { - giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true); + giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } else { @@ -2651,16 +2651,17 @@ public class PlayerInstance extends Playable /** * Give all available skills to the player. - * @param includedByFs if {@code true} forgotten scroll skills present in the skill tree will be added - * @param includedByFp if {@code true} forgotten power skills present in the skill tree will be added + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeByFp if {@code true} forgotten power skills present in the skill tree will be added * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added * @return the amount of new skills earned */ - public int giveAvailableSkills(boolean includedByFs, boolean includedByFp, boolean includeAutoGet) + public int giveAvailableSkills(boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems) { int skillCounter = 0; // Get available skills - final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includedByFs, includedByFp, includeAutoGet); + final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includeByFs, includeByFp, includeAutoGet, includeRequiredItems); final List skillsForStore = new ArrayList<>(); for (Skill skill : skills) { diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java index 3aee97fa80..7351dfb509 100644 --- a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java +++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java @@ -287,7 +287,7 @@ public class CharacterCreate implements IClientIncomingPacket newChar.getStat().setLevel((byte) Config.BALTHUS_KNIGHTS_LEVEL); if (Config.BALTHUS_KNIGHTS_REWARD_SKILLS) { - newChar.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true); + newChar.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } } diff --git a/L2J_Mobius_07.0_PreludeOfWar/dist/game/config/Character.ini b/L2J_Mobius_07.0_PreludeOfWar/dist/game/config/Character.ini index fc81c1ec60..b531e76f9b 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/dist/game/config/Character.ini +++ b/L2J_Mobius_07.0_PreludeOfWar/dist/game/config/Character.ini @@ -77,6 +77,10 @@ SkillReuseList = # Default: False AutoLearnSkills = False +# Auto learn skills that need items to be learned. +# Default: False +AutoLearnSkillsWithoutItems = False + # If it's true skills from forgotten scrolls will be delivered upon level up and login, require AutoLearnSkills. # Default: False AutoLearnForgottenScrollSkills = False diff --git a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java index a9835ff707..22f3870ce8 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java +++ b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java @@ -431,7 +431,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. @@ -456,7 +456,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } else { - player.giveAvailableSkills(true, true, true); + player.giveAvailableSkills(true, true, true, true); } break; } @@ -873,7 +873,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. diff --git a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java index ee3c7aea4c..f969aba70f 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java +++ b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java @@ -156,11 +156,11 @@ public class AdminSkill implements IAdminCommandHandler } else if (command.equals("admin_give_all_skills")) { - adminGiveAllSkills(activeChar, false, false); + adminGiveAllSkills(activeChar, false, false, false); } else if (command.equals("admin_give_all_skills_fs")) { - adminGiveAllSkills(activeChar, true, true); + adminGiveAllSkills(activeChar, true, true, true); } else if (command.equals("admin_give_clan_skills")) { @@ -277,10 +277,11 @@ public class AdminSkill implements IAdminCommandHandler /** * This function will give all the skills that the target can learn at his/her level * @param activeChar the player - * @param includedByFs if {@code true} Forgotten Scroll skills will be delivered. - * @param includedByFp if {@code true} Forgotten Power skills will be delivered. + * @param includeByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeByFp if {@code true} Forgotten Power skills will be delivered. + * @param includeRequiredItems if {@code true} skills that have required items will be added */ - private void adminGiveAllSkills(PlayerInstance activeChar, boolean includedByFs, boolean includedByFp) + private void adminGiveAllSkills(PlayerInstance activeChar, boolean includeByFs, boolean includeByFp, boolean includeRequiredItems) { final WorldObject target = activeChar.getTarget(); if ((target == null) || !target.isPlayer()) @@ -290,7 +291,7 @@ public class AdminSkill implements IAdminCommandHandler } final PlayerInstance player = target.getActingPlayer(); // Notify player and admin - BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includedByFs, includedByFp, true) + " skills to " + player.getName()); + BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includeByFs, includeByFp, true, includeRequiredItems) + " skills to " + player.getName()); player.sendSkillList(); player.sendPacket(new AcquireSkillList(player)); } diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/Config.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/Config.java index 55d27c7b06..22e714a535 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/Config.java @@ -179,6 +179,7 @@ public class Config public static boolean ENABLE_MODIFY_SKILL_REUSE; public static Map SKILL_REUSE_LIST; public static boolean AUTO_LEARN_SKILLS; + public static boolean AUTO_LEARN_SKILLS_WITHOUT_ITEMS; public static boolean AUTO_LEARN_FS_SKILLS; public static boolean AUTO_LEARN_FP_SKILLS; public static boolean AUTO_LOOT_HERBS; @@ -1777,6 +1778,7 @@ public class Config } } AUTO_LEARN_SKILLS = Character.getBoolean("AutoLearnSkills", false); + AUTO_LEARN_SKILLS_WITHOUT_ITEMS = Character.getBoolean("AutoLearnSkillsWithoutItems", false); AUTO_LEARN_FS_SKILLS = Character.getBoolean("AutoLearnForgottenScrollSkills", false); AUTO_LEARN_FP_SKILLS = Character.getBoolean("AutoLearnForgottenPowerSkills", false); AUTO_LOOT_HERBS = Character.getBoolean("AutoLootHerbs", false); diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index 1ce1c1d3f0..21368de4ff 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -731,7 +731,17 @@ public class SkillTreeData implements IXmlReader return result; } - public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet) + /** + * Used by auto learn configuration. + * @param player + * @param classId + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeByFp if {@code true} forgotten power skills present in the skill tree will be added + * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added + * @return a list of auto learnable skills for the player. + */ + public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems) { // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); @@ -751,8 +761,13 @@ public class SkillTreeData implements IXmlReader break; } - for (SkillLearn skillLearn : learnable) + SEARCH: for (SkillLearn skillLearn : learnable) { + if (!includeRequiredItems && !skillLearn.getRequiredItems().isEmpty()) + { + continue SEARCH; + } + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index e4232fbf13..168c0c26a5 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -2527,7 +2527,7 @@ public class PlayerInstance extends Playable // Give all normal skills if activated Auto-Learn is activated, included AutoGet skills. if (Config.AUTO_LEARN_SKILLS) { - giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true); + giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } else { @@ -2587,16 +2587,17 @@ public class PlayerInstance extends Playable /** * Give all available skills to the player. - * @param includedByFs if {@code true} forgotten scroll skills present in the skill tree will be added - * @param includedByFp if {@code true} forgotten power skills present in the skill tree will be added + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeByFp if {@code true} forgotten power skills present in the skill tree will be added * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added * @return the amount of new skills earned */ - public int giveAvailableSkills(boolean includedByFs, boolean includedByFp, boolean includeAutoGet) + public int giveAvailableSkills(boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems) { int skillCounter = 0; // Get available skills - final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includedByFs, includedByFp, includeAutoGet); + final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includeByFs, includeByFp, includeAutoGet, includeRequiredItems); final List skillsForStore = new ArrayList<>(); for (Skill skill : skills) { diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java index 3aee97fa80..7351dfb509 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java @@ -287,7 +287,7 @@ public class CharacterCreate implements IClientIncomingPacket newChar.getStat().setLevel((byte) Config.BALTHUS_KNIGHTS_LEVEL); if (Config.BALTHUS_KNIGHTS_REWARD_SKILLS) { - newChar.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true); + newChar.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } } diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java index e33897c879..cd645e574a 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java @@ -114,7 +114,7 @@ public class ExRequestClassChange implements IClientIncomingPacket if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class. diff --git a/L2J_Mobius_08.2_Homunculus/dist/game/config/Character.ini b/L2J_Mobius_08.2_Homunculus/dist/game/config/Character.ini index 218129b96a..f36f6c6d85 100644 --- a/L2J_Mobius_08.2_Homunculus/dist/game/config/Character.ini +++ b/L2J_Mobius_08.2_Homunculus/dist/game/config/Character.ini @@ -77,6 +77,10 @@ SkillReuseList = # Default: False AutoLearnSkills = False +# Auto learn skills that need items to be learned. +# Default: False +AutoLearnSkillsWithoutItems = False + # If it's true skills from forgotten scrolls will be delivered upon level up and login, require AutoLearnSkills. # Default: False AutoLearnForgottenScrollSkills = False diff --git a/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java b/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java index a9835ff707..22f3870ce8 100644 --- a/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java +++ b/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java @@ -431,7 +431,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. @@ -456,7 +456,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } else { - player.giveAvailableSkills(true, true, true); + player.giveAvailableSkills(true, true, true, true); } break; } @@ -873,7 +873,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. diff --git a/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java b/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java index ee3c7aea4c..f969aba70f 100644 --- a/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java +++ b/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java @@ -156,11 +156,11 @@ public class AdminSkill implements IAdminCommandHandler } else if (command.equals("admin_give_all_skills")) { - adminGiveAllSkills(activeChar, false, false); + adminGiveAllSkills(activeChar, false, false, false); } else if (command.equals("admin_give_all_skills_fs")) { - adminGiveAllSkills(activeChar, true, true); + adminGiveAllSkills(activeChar, true, true, true); } else if (command.equals("admin_give_clan_skills")) { @@ -277,10 +277,11 @@ public class AdminSkill implements IAdminCommandHandler /** * This function will give all the skills that the target can learn at his/her level * @param activeChar the player - * @param includedByFs if {@code true} Forgotten Scroll skills will be delivered. - * @param includedByFp if {@code true} Forgotten Power skills will be delivered. + * @param includeByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeByFp if {@code true} Forgotten Power skills will be delivered. + * @param includeRequiredItems if {@code true} skills that have required items will be added */ - private void adminGiveAllSkills(PlayerInstance activeChar, boolean includedByFs, boolean includedByFp) + private void adminGiveAllSkills(PlayerInstance activeChar, boolean includeByFs, boolean includeByFp, boolean includeRequiredItems) { final WorldObject target = activeChar.getTarget(); if ((target == null) || !target.isPlayer()) @@ -290,7 +291,7 @@ public class AdminSkill implements IAdminCommandHandler } final PlayerInstance player = target.getActingPlayer(); // Notify player and admin - BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includedByFs, includedByFp, true) + " skills to " + player.getName()); + BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includeByFs, includeByFp, true, includeRequiredItems) + " skills to " + player.getName()); player.sendSkillList(); player.sendPacket(new AcquireSkillList(player)); } diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/Config.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/Config.java index b2f23f1deb..de1b842f25 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/Config.java @@ -179,6 +179,7 @@ public class Config public static boolean ENABLE_MODIFY_SKILL_REUSE; public static Map SKILL_REUSE_LIST; public static boolean AUTO_LEARN_SKILLS; + public static boolean AUTO_LEARN_SKILLS_WITHOUT_ITEMS; public static boolean AUTO_LEARN_FS_SKILLS; public static boolean AUTO_LEARN_FP_SKILLS; public static boolean AUTO_LOOT_HERBS; @@ -1775,6 +1776,7 @@ public class Config } } AUTO_LEARN_SKILLS = Character.getBoolean("AutoLearnSkills", false); + AUTO_LEARN_SKILLS_WITHOUT_ITEMS = Character.getBoolean("AutoLearnSkillsWithoutItems", false); AUTO_LEARN_FS_SKILLS = Character.getBoolean("AutoLearnForgottenScrollSkills", false); AUTO_LEARN_FP_SKILLS = Character.getBoolean("AutoLearnForgottenPowerSkills", false); AUTO_LOOT_HERBS = Character.getBoolean("AutoLootHerbs", false); diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index 1ce1c1d3f0..21368de4ff 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -731,7 +731,17 @@ public class SkillTreeData implements IXmlReader return result; } - public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet) + /** + * Used by auto learn configuration. + * @param player + * @param classId + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeByFp if {@code true} forgotten power skills present in the skill tree will be added + * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added + * @return a list of auto learnable skills for the player. + */ + public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems) { // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); @@ -751,8 +761,13 @@ public class SkillTreeData implements IXmlReader break; } - for (SkillLearn skillLearn : learnable) + SEARCH: for (SkillLearn skillLearn : learnable) { + if (!includeRequiredItems && !skillLearn.getRequiredItems().isEmpty()) + { + continue SEARCH; + } + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 133ecf685d..aed2d6d69d 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -2557,7 +2557,7 @@ public class PlayerInstance extends Playable // Give all normal skills if activated Auto-Learn is activated, included AutoGet skills. if (Config.AUTO_LEARN_SKILLS) { - giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true); + giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } else { @@ -2617,16 +2617,17 @@ public class PlayerInstance extends Playable /** * Give all available skills to the player. - * @param includedByFs if {@code true} forgotten scroll skills present in the skill tree will be added - * @param includedByFp if {@code true} forgotten power skills present in the skill tree will be added + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeByFp if {@code true} forgotten power skills present in the skill tree will be added * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added * @return the amount of new skills earned */ - public int giveAvailableSkills(boolean includedByFs, boolean includedByFp, boolean includeAutoGet) + public int giveAvailableSkills(boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems) { int skillCounter = 0; // Get available skills - final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includedByFs, includedByFp, includeAutoGet); + final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includeByFs, includeByFp, includeAutoGet, includeRequiredItems); final List skillsForStore = new ArrayList<>(); for (Skill skill : skills) { diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java index b37973f455..eb78368c15 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java @@ -287,7 +287,7 @@ public class CharacterCreate implements IClientIncomingPacket newChar.getStat().setLevel(Config.BALTHUS_KNIGHTS_LEVEL); if (Config.BALTHUS_KNIGHTS_REWARD_SKILLS) { - newChar.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true); + newChar.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } } diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java index e33897c879..cd645e574a 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java @@ -114,7 +114,7 @@ public class ExRequestClassChange implements IClientIncomingPacket if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class. diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/config/Character.ini b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/config/Character.ini index 0455329ec0..4093ad0625 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/config/Character.ini +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/config/Character.ini @@ -77,6 +77,10 @@ SkillReuseList = # Default: False AutoLearnSkills = False +# Auto learn skills that need items to be learned. +# Default: False +AutoLearnSkillsWithoutItems = False + # If it's true skills from forgotten scrolls will be delivered upon level up and login, require AutoLearnSkills. # Default: False AutoLearnForgottenScrollSkills = False diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java index a9835ff707..22f3870ce8 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java @@ -431,7 +431,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. @@ -456,7 +456,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } else { - player.giveAvailableSkills(true, true, true); + player.giveAvailableSkills(true, true, true, true); } break; } @@ -873,7 +873,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java index ee3c7aea4c..f969aba70f 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java @@ -156,11 +156,11 @@ public class AdminSkill implements IAdminCommandHandler } else if (command.equals("admin_give_all_skills")) { - adminGiveAllSkills(activeChar, false, false); + adminGiveAllSkills(activeChar, false, false, false); } else if (command.equals("admin_give_all_skills_fs")) { - adminGiveAllSkills(activeChar, true, true); + adminGiveAllSkills(activeChar, true, true, true); } else if (command.equals("admin_give_clan_skills")) { @@ -277,10 +277,11 @@ public class AdminSkill implements IAdminCommandHandler /** * This function will give all the skills that the target can learn at his/her level * @param activeChar the player - * @param includedByFs if {@code true} Forgotten Scroll skills will be delivered. - * @param includedByFp if {@code true} Forgotten Power skills will be delivered. + * @param includeByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeByFp if {@code true} Forgotten Power skills will be delivered. + * @param includeRequiredItems if {@code true} skills that have required items will be added */ - private void adminGiveAllSkills(PlayerInstance activeChar, boolean includedByFs, boolean includedByFp) + private void adminGiveAllSkills(PlayerInstance activeChar, boolean includeByFs, boolean includeByFp, boolean includeRequiredItems) { final WorldObject target = activeChar.getTarget(); if ((target == null) || !target.isPlayer()) @@ -290,7 +291,7 @@ public class AdminSkill implements IAdminCommandHandler } final PlayerInstance player = target.getActingPlayer(); // Notify player and admin - BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includedByFs, includedByFp, true) + " skills to " + player.getName()); + BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includeByFs, includeByFp, true, includeRequiredItems) + " skills to " + player.getName()); player.sendSkillList(); player.sendPacket(new AcquireSkillList(player)); } diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/Config.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/Config.java index 0b1cb6f53b..fb5e74524d 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/Config.java @@ -179,6 +179,7 @@ public class Config public static boolean ENABLE_MODIFY_SKILL_REUSE; public static Map SKILL_REUSE_LIST; public static boolean AUTO_LEARN_SKILLS; + public static boolean AUTO_LEARN_SKILLS_WITHOUT_ITEMS; public static boolean AUTO_LEARN_FS_SKILLS; public static boolean AUTO_LEARN_FP_SKILLS; public static boolean AUTO_LOOT_HERBS; @@ -1775,6 +1776,7 @@ public class Config } } AUTO_LEARN_SKILLS = Character.getBoolean("AutoLearnSkills", false); + AUTO_LEARN_SKILLS_WITHOUT_ITEMS = Character.getBoolean("AutoLearnSkillsWithoutItems", false); AUTO_LEARN_FS_SKILLS = Character.getBoolean("AutoLearnForgottenScrollSkills", false); AUTO_LEARN_FP_SKILLS = Character.getBoolean("AutoLearnForgottenPowerSkills", false); AUTO_LOOT_HERBS = Character.getBoolean("AutoLootHerbs", false); diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index 1ce1c1d3f0..21368de4ff 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -731,7 +731,17 @@ public class SkillTreeData implements IXmlReader return result; } - public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet) + /** + * Used by auto learn configuration. + * @param player + * @param classId + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeByFp if {@code true} forgotten power skills present in the skill tree will be added + * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added + * @return a list of auto learnable skills for the player. + */ + public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems) { // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); @@ -751,8 +761,13 @@ public class SkillTreeData implements IXmlReader break; } - for (SkillLearn skillLearn : learnable) + SEARCH: for (SkillLearn skillLearn : learnable) { + if (!includeRequiredItems && !skillLearn.getRequiredItems().isEmpty()) + { + continue SEARCH; + } + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index b8b7ce0b4a..aceedc23c6 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -2574,7 +2574,7 @@ public class PlayerInstance extends Playable // Give all normal skills if activated Auto-Learn is activated, included AutoGet skills. if (Config.AUTO_LEARN_SKILLS) { - giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true); + giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } else { @@ -2634,16 +2634,17 @@ public class PlayerInstance extends Playable /** * Give all available skills to the player. - * @param includedByFs if {@code true} forgotten scroll skills present in the skill tree will be added - * @param includedByFp if {@code true} forgotten power skills present in the skill tree will be added + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeByFp if {@code true} forgotten power skills present in the skill tree will be added * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added * @return the amount of new skills earned */ - public int giveAvailableSkills(boolean includedByFs, boolean includedByFp, boolean includeAutoGet) + public int giveAvailableSkills(boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems) { int skillCounter = 0; // Get available skills - final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includedByFs, includedByFp, includeAutoGet); + final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includeByFs, includeByFp, includeAutoGet, includeRequiredItems); final List skillsForStore = new ArrayList<>(); for (Skill skill : skills) { diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java index b37973f455..eb78368c15 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java @@ -287,7 +287,7 @@ public class CharacterCreate implements IClientIncomingPacket newChar.getStat().setLevel(Config.BALTHUS_KNIGHTS_LEVEL); if (Config.BALTHUS_KNIGHTS_REWARD_SKILLS) { - newChar.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true); + newChar.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } } diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java index e33897c879..cd645e574a 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java @@ -114,7 +114,7 @@ public class ExRequestClassChange implements IClientIncomingPacket if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class. diff --git a/L2J_Mobius_10.0_MasterClass/dist/game/config/Character.ini b/L2J_Mobius_10.0_MasterClass/dist/game/config/Character.ini index 0455329ec0..4093ad0625 100644 --- a/L2J_Mobius_10.0_MasterClass/dist/game/config/Character.ini +++ b/L2J_Mobius_10.0_MasterClass/dist/game/config/Character.ini @@ -77,6 +77,10 @@ SkillReuseList = # Default: False AutoLearnSkills = False +# Auto learn skills that need items to be learned. +# Default: False +AutoLearnSkillsWithoutItems = False + # If it's true skills from forgotten scrolls will be delivered upon level up and login, require AutoLearnSkills. # Default: False AutoLearnForgottenScrollSkills = False diff --git a/L2J_Mobius_10.0_MasterClass/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java b/L2J_Mobius_10.0_MasterClass/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java index a9835ff707..22f3870ce8 100644 --- a/L2J_Mobius_10.0_MasterClass/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java +++ b/L2J_Mobius_10.0_MasterClass/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java @@ -431,7 +431,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. @@ -456,7 +456,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } else { - player.giveAvailableSkills(true, true, true); + player.giveAvailableSkills(true, true, true, true); } break; } @@ -873,7 +873,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. diff --git a/L2J_Mobius_10.0_MasterClass/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java b/L2J_Mobius_10.0_MasterClass/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java index ee3c7aea4c..f969aba70f 100644 --- a/L2J_Mobius_10.0_MasterClass/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java +++ b/L2J_Mobius_10.0_MasterClass/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java @@ -156,11 +156,11 @@ public class AdminSkill implements IAdminCommandHandler } else if (command.equals("admin_give_all_skills")) { - adminGiveAllSkills(activeChar, false, false); + adminGiveAllSkills(activeChar, false, false, false); } else if (command.equals("admin_give_all_skills_fs")) { - adminGiveAllSkills(activeChar, true, true); + adminGiveAllSkills(activeChar, true, true, true); } else if (command.equals("admin_give_clan_skills")) { @@ -277,10 +277,11 @@ public class AdminSkill implements IAdminCommandHandler /** * This function will give all the skills that the target can learn at his/her level * @param activeChar the player - * @param includedByFs if {@code true} Forgotten Scroll skills will be delivered. - * @param includedByFp if {@code true} Forgotten Power skills will be delivered. + * @param includeByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeByFp if {@code true} Forgotten Power skills will be delivered. + * @param includeRequiredItems if {@code true} skills that have required items will be added */ - private void adminGiveAllSkills(PlayerInstance activeChar, boolean includedByFs, boolean includedByFp) + private void adminGiveAllSkills(PlayerInstance activeChar, boolean includeByFs, boolean includeByFp, boolean includeRequiredItems) { final WorldObject target = activeChar.getTarget(); if ((target == null) || !target.isPlayer()) @@ -290,7 +291,7 @@ public class AdminSkill implements IAdminCommandHandler } final PlayerInstance player = target.getActingPlayer(); // Notify player and admin - BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includedByFs, includedByFp, true) + " skills to " + player.getName()); + BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includeByFs, includeByFp, true, includeRequiredItems) + " skills to " + player.getName()); player.sendSkillList(); player.sendPacket(new AcquireSkillList(player)); } diff --git a/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/Config.java b/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/Config.java index c1dda6a198..e0b2d8425c 100644 --- a/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/Config.java @@ -179,6 +179,7 @@ public class Config public static boolean ENABLE_MODIFY_SKILL_REUSE; public static Map SKILL_REUSE_LIST; public static boolean AUTO_LEARN_SKILLS; + public static boolean AUTO_LEARN_SKILLS_WITHOUT_ITEMS; public static boolean AUTO_LEARN_FS_SKILLS; public static boolean AUTO_LEARN_FP_SKILLS; public static boolean AUTO_LOOT_HERBS; @@ -1775,6 +1776,7 @@ public class Config } } AUTO_LEARN_SKILLS = Character.getBoolean("AutoLearnSkills", false); + AUTO_LEARN_SKILLS_WITHOUT_ITEMS = Character.getBoolean("AutoLearnSkillsWithoutItems", false); AUTO_LEARN_FS_SKILLS = Character.getBoolean("AutoLearnForgottenScrollSkills", false); AUTO_LEARN_FP_SKILLS = Character.getBoolean("AutoLearnForgottenPowerSkills", false); AUTO_LOOT_HERBS = Character.getBoolean("AutoLootHerbs", false); diff --git a/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index 1ce1c1d3f0..21368de4ff 100644 --- a/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -731,7 +731,17 @@ public class SkillTreeData implements IXmlReader return result; } - public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet) + /** + * Used by auto learn configuration. + * @param player + * @param classId + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeByFp if {@code true} forgotten power skills present in the skill tree will be added + * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added + * @return a list of auto learnable skills for the player. + */ + public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems) { // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); @@ -751,8 +761,13 @@ public class SkillTreeData implements IXmlReader break; } - for (SkillLearn skillLearn : learnable) + SEARCH: for (SkillLearn skillLearn : learnable) { + if (!includeRequiredItems && !skillLearn.getRequiredItems().isEmpty()) + { + continue SEARCH; + } + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) diff --git a/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index e272e3f545..f353dc140b 100644 --- a/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -2575,7 +2575,7 @@ public class PlayerInstance extends Playable // Give all normal skills if activated Auto-Learn is activated, included AutoGet skills. if (Config.AUTO_LEARN_SKILLS) { - giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true); + giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } else { @@ -2635,16 +2635,17 @@ public class PlayerInstance extends Playable /** * Give all available skills to the player. - * @param includedByFs if {@code true} forgotten scroll skills present in the skill tree will be added - * @param includedByFp if {@code true} forgotten power skills present in the skill tree will be added + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeByFp if {@code true} forgotten power skills present in the skill tree will be added * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added * @return the amount of new skills earned */ - public int giveAvailableSkills(boolean includedByFs, boolean includedByFp, boolean includeAutoGet) + public int giveAvailableSkills(boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems) { int skillCounter = 0; // Get available skills - final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includedByFs, includedByFp, includeAutoGet); + final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includeByFs, includeByFp, includeAutoGet, includeRequiredItems); final List skillsForStore = new ArrayList<>(); for (Skill skill : skills) { diff --git a/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java b/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java index b37973f455..eb78368c15 100644 --- a/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java +++ b/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java @@ -287,7 +287,7 @@ public class CharacterCreate implements IClientIncomingPacket newChar.getStat().setLevel(Config.BALTHUS_KNIGHTS_LEVEL); if (Config.BALTHUS_KNIGHTS_REWARD_SKILLS) { - newChar.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true); + newChar.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } } diff --git a/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java b/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java index e33897c879..cd645e574a 100644 --- a/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java +++ b/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java @@ -114,7 +114,7 @@ public class ExRequestClassChange implements IClientIncomingPacket if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class. diff --git a/L2J_Mobius_CT_2.4_Epilogue/dist/game/config/Character.ini b/L2J_Mobius_CT_2.4_Epilogue/dist/game/config/Character.ini index 1f74ee4ddf..acca08d454 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/dist/game/config/Character.ini +++ b/L2J_Mobius_CT_2.4_Epilogue/dist/game/config/Character.ini @@ -90,6 +90,10 @@ SkillReuseList = # Default: False AutoLearnSkills = False +# Auto learn skills that need items to be learned. +# Default: False +AutoLearnSkillsWithoutItems = False + # If it's true skills from forgotten scrolls will be delivered upon level up and login, require AutoLearnSkills. # Default: False AutoLearnForgottenScrollSkills = False diff --git a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java index 2e476975db..37fc2635b5 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java +++ b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java @@ -152,11 +152,11 @@ public class AdminSkill implements IAdminCommandHandler } else if (command.equals("admin_give_all_skills")) { - adminGiveAllSkills(activeChar, false); + adminGiveAllSkills(activeChar, false, false); } else if (command.equals("admin_give_all_skills_fs")) { - adminGiveAllSkills(activeChar, true); + adminGiveAllSkills(activeChar, true, true); } else if (command.equals("admin_give_clan_skills")) { @@ -212,9 +212,10 @@ public class AdminSkill implements IAdminCommandHandler /** * This function will give all the skills that the target can learn at his/her level * @param activeChar the player - * @param includedByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeRequiredItems if {@code true} skills that have required items will be added */ - private void adminGiveAllSkills(PlayerInstance activeChar, boolean includedByFs) + private void adminGiveAllSkills(PlayerInstance activeChar, boolean includeByFs, boolean includeRequiredItems) { final WorldObject target = activeChar.getTarget(); if ((target == null) || !target.isPlayer()) @@ -224,7 +225,7 @@ public class AdminSkill implements IAdminCommandHandler } final PlayerInstance player = target.getActingPlayer(); // Notify player and admin - BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includedByFs, true) + " skills to " + player.getName()); + BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includeByFs, true, includeRequiredItems) + " skills to " + player.getName()); player.sendSkillList(); } diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/Config.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/Config.java index cd0255233a..d1c4379a43 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/Config.java @@ -162,6 +162,7 @@ public class Config public static boolean ENABLE_MODIFY_SKILL_REUSE; public static Map SKILL_REUSE_LIST; public static boolean AUTO_LEARN_SKILLS; + public static boolean AUTO_LEARN_SKILLS_WITHOUT_ITEMS; public static boolean AUTO_LEARN_FS_SKILLS; public static boolean AUTO_LOOT_HERBS; public static byte BUFFS_MAX_AMOUNT; @@ -1744,6 +1745,7 @@ public class Config } } AUTO_LEARN_SKILLS = Character.getBoolean("AutoLearnSkills", false); + AUTO_LEARN_SKILLS_WITHOUT_ITEMS = Character.getBoolean("AutoLearnSkillsWithoutItems", false); AUTO_LEARN_FS_SKILLS = Character.getBoolean("AutoLearnForgottenScrollSkills", false); AUTO_LOOT_HERBS = Character.getBoolean("AutoLootHerbs", false); BUFFS_MAX_AMOUNT = Character.getByte("MaxBuffAmount", (byte) 20); diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index eda88c0816..10b1c60fc8 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -558,17 +558,31 @@ public class SkillTreeData implements IXmlReader return result; } - public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet) + /** + * Used by auto learn configuration. + * @param player + * @param classId + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added + * @return a list of auto learnable skills for the player. + */ + public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); List learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, holder); - while (!learnable.isEmpty()) + for (int i = 0; i < 1000; i++) // Infinite loop warning { - for (SkillLearn s : learnable) + SEARCH: for (SkillLearn skillLearn : learnable) { - final Skill sk = SkillData.getInstance().getSkill(s.getSkillId(), s.getSkillLevel()); - holder.addSkill(sk); + if (!includeRequiredItems && !skillLearn.getRequiredItems().isEmpty()) + { + continue SEARCH; + } + + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); + holder.addSkill(skill); } // Get new available skills, some skills depend of previous skills to be available. diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/ClassMasterInstance.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/ClassMasterInstance.java index 378bcd9079..0cef291da1 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/ClassMasterInstance.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/ClassMasterInstance.java @@ -104,7 +104,7 @@ public class ClassMasterInstance extends MerchantInstance } else if (command.startsWith("learn_skills")) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } else if (command.startsWith("increase_clan_level")) { diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 021bed2601..75443cb909 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -2628,7 +2628,7 @@ public class PlayerInstance extends Playable // Give all normal skills if activated Auto-Learn is activated, included AutoGet skills. if (Config.AUTO_LEARN_SKILLS) { - giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } else { @@ -2691,15 +2691,16 @@ public class PlayerInstance extends Playable /** * Give all available skills to the player. - * @param includedByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added * @return the amount of new skills earned */ - public int giveAvailableSkills(boolean includedByFs, boolean includeAutoGet) + public int giveAvailableSkills(boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { int skillCounter = 0; // Get available skills. - final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getClassId(), includedByFs, includeAutoGet); + final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getClassId(), includeByFs, includeAutoGet, includeRequiredItems); final List skillsForStore = new ArrayList<>(); for (Skill sk : skills) { diff --git a/L2J_Mobius_CT_2.6_HighFive/dist/game/config/Character.ini b/L2J_Mobius_CT_2.6_HighFive/dist/game/config/Character.ini index a23ddd066e..9eeb3df3fb 100644 --- a/L2J_Mobius_CT_2.6_HighFive/dist/game/config/Character.ini +++ b/L2J_Mobius_CT_2.6_HighFive/dist/game/config/Character.ini @@ -90,6 +90,10 @@ SkillReuseList = # Default: False AutoLearnSkills = False +# Auto learn skills that need items to be learned. +# Default: False +AutoLearnSkillsWithoutItems = False + # If it's true skills from forgotten scrolls will be delivered upon level up and login, require AutoLearnSkills. # Default: False AutoLearnForgottenScrollSkills = False diff --git a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java index 2e476975db..37fc2635b5 100644 --- a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java +++ b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java @@ -152,11 +152,11 @@ public class AdminSkill implements IAdminCommandHandler } else if (command.equals("admin_give_all_skills")) { - adminGiveAllSkills(activeChar, false); + adminGiveAllSkills(activeChar, false, false); } else if (command.equals("admin_give_all_skills_fs")) { - adminGiveAllSkills(activeChar, true); + adminGiveAllSkills(activeChar, true, true); } else if (command.equals("admin_give_clan_skills")) { @@ -212,9 +212,10 @@ public class AdminSkill implements IAdminCommandHandler /** * This function will give all the skills that the target can learn at his/her level * @param activeChar the player - * @param includedByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeRequiredItems if {@code true} skills that have required items will be added */ - private void adminGiveAllSkills(PlayerInstance activeChar, boolean includedByFs) + private void adminGiveAllSkills(PlayerInstance activeChar, boolean includeByFs, boolean includeRequiredItems) { final WorldObject target = activeChar.getTarget(); if ((target == null) || !target.isPlayer()) @@ -224,7 +225,7 @@ public class AdminSkill implements IAdminCommandHandler } final PlayerInstance player = target.getActingPlayer(); // Notify player and admin - BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includedByFs, true) + " skills to " + player.getName()); + BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includeByFs, true, includeRequiredItems) + " skills to " + player.getName()); player.sendSkillList(); } diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/Config.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/Config.java index 4f84445ebe..9e60c6efea 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/Config.java @@ -162,6 +162,7 @@ public class Config public static boolean ENABLE_MODIFY_SKILL_REUSE; public static Map SKILL_REUSE_LIST; public static boolean AUTO_LEARN_SKILLS; + public static boolean AUTO_LEARN_SKILLS_WITHOUT_ITEMS; public static boolean AUTO_LEARN_FS_SKILLS; public static boolean AUTO_LOOT_HERBS; public static byte BUFFS_MAX_AMOUNT; @@ -1744,6 +1745,7 @@ public class Config } } AUTO_LEARN_SKILLS = Character.getBoolean("AutoLearnSkills", false); + AUTO_LEARN_SKILLS_WITHOUT_ITEMS = Character.getBoolean("AutoLearnSkillsWithoutItems", false); AUTO_LEARN_FS_SKILLS = Character.getBoolean("AutoLearnForgottenScrollSkills", false); AUTO_LOOT_HERBS = Character.getBoolean("AutoLootHerbs", false); BUFFS_MAX_AMOUNT = Character.getByte("MaxBuffAmount", (byte) 20); diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index eda88c0816..10b1c60fc8 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -558,17 +558,31 @@ public class SkillTreeData implements IXmlReader return result; } - public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet) + /** + * Used by auto learn configuration. + * @param player + * @param classId + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added + * @return a list of auto learnable skills for the player. + */ + public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); List learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, holder); - while (!learnable.isEmpty()) + for (int i = 0; i < 1000; i++) // Infinite loop warning { - for (SkillLearn s : learnable) + SEARCH: for (SkillLearn skillLearn : learnable) { - final Skill sk = SkillData.getInstance().getSkill(s.getSkillId(), s.getSkillLevel()); - holder.addSkill(sk); + if (!includeRequiredItems && !skillLearn.getRequiredItems().isEmpty()) + { + continue SEARCH; + } + + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); + holder.addSkill(skill); } // Get new available skills, some skills depend of previous skills to be available. diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/ClassMasterInstance.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/ClassMasterInstance.java index 378bcd9079..0cef291da1 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/ClassMasterInstance.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/ClassMasterInstance.java @@ -104,7 +104,7 @@ public class ClassMasterInstance extends MerchantInstance } else if (command.startsWith("learn_skills")) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } else if (command.startsWith("increase_clan_level")) { diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index beddd441b4..90e759f1ea 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -2539,7 +2539,7 @@ public class PlayerInstance extends Playable // Give all normal skills if activated Auto-Learn is activated, included AutoGet skills. if (Config.AUTO_LEARN_SKILLS) { - giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } else { @@ -2602,15 +2602,16 @@ public class PlayerInstance extends Playable /** * Give all available skills to the player. - * @param includedByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added * @return the amount of new skills earned */ - public int giveAvailableSkills(boolean includedByFs, boolean includeAutoGet) + public int giveAvailableSkills(boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { int skillCounter = 0; // Get available skills. - final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getClassId(), includedByFs, includeAutoGet); + final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getClassId(), includeByFs, includeAutoGet, includeRequiredItems); final List skillsForStore = new ArrayList<>(); for (Skill sk : skills) { diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/config/Character.ini b/L2J_Mobius_Classic_2.0_Saviors/dist/game/config/Character.ini index d53d342bfd..ad92aa0f18 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/config/Character.ini +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/config/Character.ini @@ -73,6 +73,10 @@ SkillReuseList = # Default: False AutoLearnSkills = False +# Auto learn skills that need items to be learned. +# Default: False +AutoLearnSkillsWithoutItems = False + # If it's true skills from forgotten scrolls will be delivered upon level up and login, require AutoLearnSkills. # Default: False AutoLearnForgottenScrollSkills = False diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java index 87d21b97ec..4ad03873df 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java @@ -396,7 +396,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); @@ -420,7 +420,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } else { - player.giveAvailableSkills(true, true); + player.giveAvailableSkills(true, true, true); } break; } @@ -835,7 +835,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java index 62422c213e..2094e79825 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java @@ -156,11 +156,11 @@ public class AdminSkill implements IAdminCommandHandler } else if (command.equals("admin_give_all_skills")) { - adminGiveAllSkills(activeChar, false); + adminGiveAllSkills(activeChar, false, false); } else if (command.equals("admin_give_all_skills_fs")) { - adminGiveAllSkills(activeChar, true); + adminGiveAllSkills(activeChar, true, true); } else if (command.equals("admin_give_clan_skills")) { @@ -277,9 +277,10 @@ public class AdminSkill implements IAdminCommandHandler /** * This function will give all the skills that the target can learn at his/her level * @param activeChar the player - * @param includedByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeRequiredItems if {@code true} skills that have required items will be added */ - private void adminGiveAllSkills(PlayerInstance activeChar, boolean includedByFs) + private void adminGiveAllSkills(PlayerInstance activeChar, boolean includeByFs, boolean includeRequiredItems) { final WorldObject target = activeChar.getTarget(); if ((target == null) || !target.isPlayer()) @@ -289,7 +290,7 @@ public class AdminSkill implements IAdminCommandHandler } final PlayerInstance player = target.getActingPlayer(); // Notify player and admin - BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includedByFs, true) + " skills to " + player.getName()); + BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includeByFs, true, includeRequiredItems) + " skills to " + player.getName()); player.sendSkillList(); player.sendPacket(new AcquireSkillList(player)); } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/Config.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/Config.java index 6ee7d5b96a..7773457638 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/Config.java @@ -174,6 +174,7 @@ public class Config public static boolean ENABLE_MODIFY_SKILL_REUSE; public static Map SKILL_REUSE_LIST; public static boolean AUTO_LEARN_SKILLS; + public static boolean AUTO_LEARN_SKILLS_WITHOUT_ITEMS; public static boolean AUTO_LEARN_FS_SKILLS; public static boolean AUTO_LOOT_HERBS; public static byte BUFFS_MAX_AMOUNT; @@ -1696,6 +1697,7 @@ public class Config } } AUTO_LEARN_SKILLS = Character.getBoolean("AutoLearnSkills", false); + AUTO_LEARN_SKILLS_WITHOUT_ITEMS = Character.getBoolean("AutoLearnSkillsWithoutItems", false); AUTO_LEARN_FS_SKILLS = Character.getBoolean("AutoLearnForgottenScrollSkills", false); AUTO_LOOT_HERBS = Character.getBoolean("AutoLootHerbs", false); BUFFS_MAX_AMOUNT = Character.getByte("MaxBuffAmount", (byte) 20); diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index db1a593951..1a27abc057 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -729,7 +729,16 @@ public class SkillTreeData implements IXmlReader return result; } - public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet) + /** + * Used by auto learn configuration. + * @param player + * @param classId + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added + * @return a list of auto learnable skills for the player. + */ + public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); @@ -749,8 +758,13 @@ public class SkillTreeData implements IXmlReader break; } - for (SkillLearn skillLearn : learnable) + SEARCH: for (SkillLearn skillLearn : learnable) { + if (!includeRequiredItems && !skillLearn.getRequiredItems().isEmpty()) + { + continue SEARCH; + } + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 795e12ff70..bc7f2f90c0 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -2550,7 +2550,7 @@ public class PlayerInstance extends Playable // Give all normal skills if activated Auto-Learn is activated, included AutoGet skills. if (Config.AUTO_LEARN_SKILLS) { - giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } else { @@ -2610,15 +2610,16 @@ public class PlayerInstance extends Playable /** * Give all available skills to the player. - * @param includedByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added * @return the amount of new skills earned */ - public int giveAvailableSkills(boolean includedByFs, boolean includeAutoGet) + public int giveAvailableSkills(boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { int skillCounter = 0; // Get available skills - final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includedByFs, includeAutoGet); + final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includeByFs, includeAutoGet, includeRequiredItems); final List skillsForStore = new ArrayList<>(); for (Skill skill : skills) { diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/config/Character.ini b/L2J_Mobius_Classic_2.1_Zaken/dist/game/config/Character.ini index db8dcf946d..78e706dca1 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/config/Character.ini +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/config/Character.ini @@ -73,6 +73,10 @@ SkillReuseList = # Default: False AutoLearnSkills = False +# Auto learn skills that need items to be learned. +# Default: False +AutoLearnSkillsWithoutItems = False + # If it's true skills from forgotten scrolls will be delivered upon level up and login, require AutoLearnSkills. # Default: False AutoLearnForgottenScrollSkills = False diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java index 87d21b97ec..4ad03873df 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java @@ -396,7 +396,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); @@ -420,7 +420,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } else { - player.giveAvailableSkills(true, true); + player.giveAvailableSkills(true, true, true); } break; } @@ -835,7 +835,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java index 62422c213e..2094e79825 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java @@ -156,11 +156,11 @@ public class AdminSkill implements IAdminCommandHandler } else if (command.equals("admin_give_all_skills")) { - adminGiveAllSkills(activeChar, false); + adminGiveAllSkills(activeChar, false, false); } else if (command.equals("admin_give_all_skills_fs")) { - adminGiveAllSkills(activeChar, true); + adminGiveAllSkills(activeChar, true, true); } else if (command.equals("admin_give_clan_skills")) { @@ -277,9 +277,10 @@ public class AdminSkill implements IAdminCommandHandler /** * This function will give all the skills that the target can learn at his/her level * @param activeChar the player - * @param includedByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeRequiredItems if {@code true} skills that have required items will be added */ - private void adminGiveAllSkills(PlayerInstance activeChar, boolean includedByFs) + private void adminGiveAllSkills(PlayerInstance activeChar, boolean includeByFs, boolean includeRequiredItems) { final WorldObject target = activeChar.getTarget(); if ((target == null) || !target.isPlayer()) @@ -289,7 +290,7 @@ public class AdminSkill implements IAdminCommandHandler } final PlayerInstance player = target.getActingPlayer(); // Notify player and admin - BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includedByFs, true) + " skills to " + player.getName()); + BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includeByFs, true, includeRequiredItems) + " skills to " + player.getName()); player.sendSkillList(); player.sendPacket(new AcquireSkillList(player)); } diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/Config.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/Config.java index c10fc02008..b9aa453ae5 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/Config.java @@ -174,6 +174,7 @@ public class Config public static boolean ENABLE_MODIFY_SKILL_REUSE; public static Map SKILL_REUSE_LIST; public static boolean AUTO_LEARN_SKILLS; + public static boolean AUTO_LEARN_SKILLS_WITHOUT_ITEMS; public static boolean AUTO_LEARN_FS_SKILLS; public static boolean AUTO_LOOT_HERBS; public static byte BUFFS_MAX_AMOUNT; @@ -1700,6 +1701,7 @@ public class Config } } AUTO_LEARN_SKILLS = Character.getBoolean("AutoLearnSkills", false); + AUTO_LEARN_SKILLS_WITHOUT_ITEMS = Character.getBoolean("AutoLearnSkillsWithoutItems", false); AUTO_LEARN_FS_SKILLS = Character.getBoolean("AutoLearnForgottenScrollSkills", false); AUTO_LOOT_HERBS = Character.getBoolean("AutoLootHerbs", false); BUFFS_MAX_AMOUNT = Character.getByte("MaxBuffAmount", (byte) 20); diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index db1a593951..1a27abc057 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -729,7 +729,16 @@ public class SkillTreeData implements IXmlReader return result; } - public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet) + /** + * Used by auto learn configuration. + * @param player + * @param classId + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added + * @return a list of auto learnable skills for the player. + */ + public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); @@ -749,8 +758,13 @@ public class SkillTreeData implements IXmlReader break; } - for (SkillLearn skillLearn : learnable) + SEARCH: for (SkillLearn skillLearn : learnable) { + if (!includeRequiredItems && !skillLearn.getRequiredItems().isEmpty()) + { + continue SEARCH; + } + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 5922377d69..ac0b0f4d73 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -2550,7 +2550,7 @@ public class PlayerInstance extends Playable // Give all normal skills if activated Auto-Learn is activated, included AutoGet skills. if (Config.AUTO_LEARN_SKILLS) { - giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } else { @@ -2610,15 +2610,16 @@ public class PlayerInstance extends Playable /** * Give all available skills to the player. - * @param includedByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added * @return the amount of new skills earned */ - public int giveAvailableSkills(boolean includedByFs, boolean includeAutoGet) + public int giveAvailableSkills(boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { int skillCounter = 0; // Get available skills - final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includedByFs, includeAutoGet); + final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includeByFs, includeAutoGet, includeRequiredItems); final List skillsForStore = new ArrayList<>(); for (Skill skill : skills) { diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/config/Character.ini b/L2J_Mobius_Classic_2.2_Antharas/dist/game/config/Character.ini index d5dab1e0e7..4cd1980895 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/config/Character.ini +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/config/Character.ini @@ -73,6 +73,10 @@ SkillReuseList = # Default: False AutoLearnSkills = False +# Auto learn skills that need items to be learned. +# Default: False +AutoLearnSkillsWithoutItems = False + # If it's true skills from forgotten scrolls will be delivered upon level up and login, require AutoLearnSkills. # Default: False AutoLearnForgottenScrollSkills = False diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java index 87d21b97ec..4ad03873df 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java @@ -396,7 +396,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); @@ -420,7 +420,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } else { - player.giveAvailableSkills(true, true); + player.giveAvailableSkills(true, true, true); } break; } @@ -835,7 +835,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java index 62422c213e..2094e79825 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java @@ -156,11 +156,11 @@ public class AdminSkill implements IAdminCommandHandler } else if (command.equals("admin_give_all_skills")) { - adminGiveAllSkills(activeChar, false); + adminGiveAllSkills(activeChar, false, false); } else if (command.equals("admin_give_all_skills_fs")) { - adminGiveAllSkills(activeChar, true); + adminGiveAllSkills(activeChar, true, true); } else if (command.equals("admin_give_clan_skills")) { @@ -277,9 +277,10 @@ public class AdminSkill implements IAdminCommandHandler /** * This function will give all the skills that the target can learn at his/her level * @param activeChar the player - * @param includedByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeRequiredItems if {@code true} skills that have required items will be added */ - private void adminGiveAllSkills(PlayerInstance activeChar, boolean includedByFs) + private void adminGiveAllSkills(PlayerInstance activeChar, boolean includeByFs, boolean includeRequiredItems) { final WorldObject target = activeChar.getTarget(); if ((target == null) || !target.isPlayer()) @@ -289,7 +290,7 @@ public class AdminSkill implements IAdminCommandHandler } final PlayerInstance player = target.getActingPlayer(); // Notify player and admin - BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includedByFs, true) + " skills to " + player.getName()); + BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includeByFs, true, includeRequiredItems) + " skills to " + player.getName()); player.sendSkillList(); player.sendPacket(new AcquireSkillList(player)); } diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/Config.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/Config.java index c10fc02008..b9aa453ae5 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/Config.java @@ -174,6 +174,7 @@ public class Config public static boolean ENABLE_MODIFY_SKILL_REUSE; public static Map SKILL_REUSE_LIST; public static boolean AUTO_LEARN_SKILLS; + public static boolean AUTO_LEARN_SKILLS_WITHOUT_ITEMS; public static boolean AUTO_LEARN_FS_SKILLS; public static boolean AUTO_LOOT_HERBS; public static byte BUFFS_MAX_AMOUNT; @@ -1700,6 +1701,7 @@ public class Config } } AUTO_LEARN_SKILLS = Character.getBoolean("AutoLearnSkills", false); + AUTO_LEARN_SKILLS_WITHOUT_ITEMS = Character.getBoolean("AutoLearnSkillsWithoutItems", false); AUTO_LEARN_FS_SKILLS = Character.getBoolean("AutoLearnForgottenScrollSkills", false); AUTO_LOOT_HERBS = Character.getBoolean("AutoLootHerbs", false); BUFFS_MAX_AMOUNT = Character.getByte("MaxBuffAmount", (byte) 20); diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index db1a593951..1a27abc057 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -729,7 +729,16 @@ public class SkillTreeData implements IXmlReader return result; } - public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet) + /** + * Used by auto learn configuration. + * @param player + * @param classId + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added + * @return a list of auto learnable skills for the player. + */ + public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); @@ -749,8 +758,13 @@ public class SkillTreeData implements IXmlReader break; } - for (SkillLearn skillLearn : learnable) + SEARCH: for (SkillLearn skillLearn : learnable) { + if (!includeRequiredItems && !skillLearn.getRequiredItems().isEmpty()) + { + continue SEARCH; + } + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 5c38591cfa..405c7b9f96 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -2548,7 +2548,7 @@ public class PlayerInstance extends Playable // Give all normal skills if activated Auto-Learn is activated, included AutoGet skills. if (Config.AUTO_LEARN_SKILLS) { - giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } else { @@ -2608,15 +2608,16 @@ public class PlayerInstance extends Playable /** * Give all available skills to the player. - * @param includedByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added * @return the amount of new skills earned */ - public int giveAvailableSkills(boolean includedByFs, boolean includeAutoGet) + public int giveAvailableSkills(boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { int skillCounter = 0; // Get available skills - final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includedByFs, includeAutoGet); + final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includeByFs, includeAutoGet, includeRequiredItems); final List skillsForStore = new ArrayList<>(); for (Skill skill : skills) { diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/config/Character.ini b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/config/Character.ini index d5dab1e0e7..4cd1980895 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/config/Character.ini +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/config/Character.ini @@ -73,6 +73,10 @@ SkillReuseList = # Default: False AutoLearnSkills = False +# Auto learn skills that need items to be learned. +# Default: False +AutoLearnSkillsWithoutItems = False + # If it's true skills from forgotten scrolls will be delivered upon level up and login, require AutoLearnSkills. # Default: False AutoLearnForgottenScrollSkills = False diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java index 87d21b97ec..4ad03873df 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java @@ -396,7 +396,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); @@ -420,7 +420,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } else { - player.giveAvailableSkills(true, true); + player.giveAvailableSkills(true, true, true); } break; } @@ -835,7 +835,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java index 62422c213e..2094e79825 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java @@ -156,11 +156,11 @@ public class AdminSkill implements IAdminCommandHandler } else if (command.equals("admin_give_all_skills")) { - adminGiveAllSkills(activeChar, false); + adminGiveAllSkills(activeChar, false, false); } else if (command.equals("admin_give_all_skills_fs")) { - adminGiveAllSkills(activeChar, true); + adminGiveAllSkills(activeChar, true, true); } else if (command.equals("admin_give_clan_skills")) { @@ -277,9 +277,10 @@ public class AdminSkill implements IAdminCommandHandler /** * This function will give all the skills that the target can learn at his/her level * @param activeChar the player - * @param includedByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeRequiredItems if {@code true} skills that have required items will be added */ - private void adminGiveAllSkills(PlayerInstance activeChar, boolean includedByFs) + private void adminGiveAllSkills(PlayerInstance activeChar, boolean includeByFs, boolean includeRequiredItems) { final WorldObject target = activeChar.getTarget(); if ((target == null) || !target.isPlayer()) @@ -289,7 +290,7 @@ public class AdminSkill implements IAdminCommandHandler } final PlayerInstance player = target.getActingPlayer(); // Notify player and admin - BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includedByFs, true) + " skills to " + player.getName()); + BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includeByFs, true, includeRequiredItems) + " skills to " + player.getName()); player.sendSkillList(); player.sendPacket(new AcquireSkillList(player)); } diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/Config.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/Config.java index efd1b4acd5..c08a7ed23f 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/Config.java @@ -174,6 +174,7 @@ public class Config public static boolean ENABLE_MODIFY_SKILL_REUSE; public static Map SKILL_REUSE_LIST; public static boolean AUTO_LEARN_SKILLS; + public static boolean AUTO_LEARN_SKILLS_WITHOUT_ITEMS; public static boolean AUTO_LEARN_FS_SKILLS; public static boolean AUTO_LOOT_HERBS; public static byte BUFFS_MAX_AMOUNT; @@ -1700,6 +1701,7 @@ public class Config } } AUTO_LEARN_SKILLS = Character.getBoolean("AutoLearnSkills", false); + AUTO_LEARN_SKILLS_WITHOUT_ITEMS = Character.getBoolean("AutoLearnSkillsWithoutItems", false); AUTO_LEARN_FS_SKILLS = Character.getBoolean("AutoLearnForgottenScrollSkills", false); AUTO_LOOT_HERBS = Character.getBoolean("AutoLootHerbs", false); BUFFS_MAX_AMOUNT = Character.getByte("MaxBuffAmount", (byte) 20); diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index db1a593951..1a27abc057 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -729,7 +729,16 @@ public class SkillTreeData implements IXmlReader return result; } - public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet) + /** + * Used by auto learn configuration. + * @param player + * @param classId + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added + * @return a list of auto learnable skills for the player. + */ + public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); @@ -749,8 +758,13 @@ public class SkillTreeData implements IXmlReader break; } - for (SkillLearn skillLearn : learnable) + SEARCH: for (SkillLearn skillLearn : learnable) { + if (!includeRequiredItems && !skillLearn.getRequiredItems().isEmpty()) + { + continue SEARCH; + } + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index b75d43f80d..51bc1d9067 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -2562,7 +2562,7 @@ public class PlayerInstance extends Playable // Give all normal skills if activated Auto-Learn is activated, included AutoGet skills. if (Config.AUTO_LEARN_SKILLS) { - giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } else { @@ -2622,15 +2622,16 @@ public class PlayerInstance extends Playable /** * Give all available skills to the player. - * @param includedByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added * @return the amount of new skills earned */ - public int giveAvailableSkills(boolean includedByFs, boolean includeAutoGet) + public int giveAvailableSkills(boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { int skillCounter = 0; // Get available skills - final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includedByFs, includeAutoGet); + final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includeByFs, includeAutoGet, includeRequiredItems); final List skillsForStore = new ArrayList<>(); for (Skill skill : skills) { diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/config/Character.ini b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/config/Character.ini index e991bf2ca0..19f7d38ca8 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/config/Character.ini +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/config/Character.ini @@ -73,6 +73,10 @@ SkillReuseList = # Default: False AutoLearnSkills = False +# Auto learn skills that need items to be learned. +# Default: False +AutoLearnSkillsWithoutItems = False + # If it's true skills from forgotten scrolls will be delivered upon level up and login, require AutoLearnSkills. # Default: False AutoLearnForgottenScrollSkills = False diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java index 87d21b97ec..4ad03873df 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java @@ -396,7 +396,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); @@ -420,7 +420,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } else { - player.giveAvailableSkills(true, true); + player.giveAvailableSkills(true, true, true); } break; } @@ -835,7 +835,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java index 62422c213e..2094e79825 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java @@ -156,11 +156,11 @@ public class AdminSkill implements IAdminCommandHandler } else if (command.equals("admin_give_all_skills")) { - adminGiveAllSkills(activeChar, false); + adminGiveAllSkills(activeChar, false, false); } else if (command.equals("admin_give_all_skills_fs")) { - adminGiveAllSkills(activeChar, true); + adminGiveAllSkills(activeChar, true, true); } else if (command.equals("admin_give_clan_skills")) { @@ -277,9 +277,10 @@ public class AdminSkill implements IAdminCommandHandler /** * This function will give all the skills that the target can learn at his/her level * @param activeChar the player - * @param includedByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeRequiredItems if {@code true} skills that have required items will be added */ - private void adminGiveAllSkills(PlayerInstance activeChar, boolean includedByFs) + private void adminGiveAllSkills(PlayerInstance activeChar, boolean includeByFs, boolean includeRequiredItems) { final WorldObject target = activeChar.getTarget(); if ((target == null) || !target.isPlayer()) @@ -289,7 +290,7 @@ public class AdminSkill implements IAdminCommandHandler } final PlayerInstance player = target.getActingPlayer(); // Notify player and admin - BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includedByFs, true) + " skills to " + player.getName()); + BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includeByFs, true, includeRequiredItems) + " skills to " + player.getName()); player.sendSkillList(); player.sendPacket(new AcquireSkillList(player)); } diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/Config.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/Config.java index 6355a62ecc..597dc474e4 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/Config.java @@ -174,6 +174,7 @@ public class Config public static boolean ENABLE_MODIFY_SKILL_REUSE; public static Map SKILL_REUSE_LIST; public static boolean AUTO_LEARN_SKILLS; + public static boolean AUTO_LEARN_SKILLS_WITHOUT_ITEMS; public static boolean AUTO_LEARN_FS_SKILLS; public static boolean AUTO_LOOT_HERBS; public static byte BUFFS_MAX_AMOUNT; @@ -1705,6 +1706,7 @@ public class Config } } AUTO_LEARN_SKILLS = Character.getBoolean("AutoLearnSkills", false); + AUTO_LEARN_SKILLS_WITHOUT_ITEMS = Character.getBoolean("AutoLearnSkillsWithoutItems", false); AUTO_LEARN_FS_SKILLS = Character.getBoolean("AutoLearnForgottenScrollSkills", false); AUTO_LOOT_HERBS = Character.getBoolean("AutoLootHerbs", false); BUFFS_MAX_AMOUNT = Character.getByte("MaxBuffAmount", (byte) 20); diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index db1a593951..1a27abc057 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -729,7 +729,16 @@ public class SkillTreeData implements IXmlReader return result; } - public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet) + /** + * Used by auto learn configuration. + * @param player + * @param classId + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added + * @return a list of auto learnable skills for the player. + */ + public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); @@ -749,8 +758,13 @@ public class SkillTreeData implements IXmlReader break; } - for (SkillLearn skillLearn : learnable) + SEARCH: for (SkillLearn skillLearn : learnable) { + if (!includeRequiredItems && !skillLearn.getRequiredItems().isEmpty()) + { + continue SEARCH; + } + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 93bd285978..893991a4bb 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -2562,7 +2562,7 @@ public class PlayerInstance extends Playable // Give all normal skills if activated Auto-Learn is activated, included AutoGet skills. if (Config.AUTO_LEARN_SKILLS) { - giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } else { @@ -2622,15 +2622,16 @@ public class PlayerInstance extends Playable /** * Give all available skills to the player. - * @param includedByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added * @return the amount of new skills earned */ - public int giveAvailableSkills(boolean includedByFs, boolean includeAutoGet) + public int giveAvailableSkills(boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { int skillCounter = 0; // Get available skills - final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includedByFs, includeAutoGet); + final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includeByFs, includeAutoGet, includeRequiredItems); final List skillsForStore = new ArrayList<>(); for (Skill skill : skills) { diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/config/Character.ini b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/config/Character.ini index 3718b23818..4ca5c41c73 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/config/Character.ini +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/config/Character.ini @@ -73,6 +73,10 @@ SkillReuseList = # Default: False AutoLearnSkills = False +# Auto learn skills that need items to be learned. +# Default: False +AutoLearnSkillsWithoutItems = False + # If it's true skills from forgotten scrolls will be delivered upon level up and login, require AutoLearnSkills. # Default: False AutoLearnForgottenScrollSkills = False diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java index af5dff31e6..f9dfb0c1a1 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java @@ -368,7 +368,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); @@ -385,7 +385,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } case "learnskills": { - player.giveAvailableSkills(true, true); + player.giveAvailableSkills(true, true, true); break; } case "clanlevelup": @@ -762,7 +762,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java index 62422c213e..2094e79825 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java @@ -156,11 +156,11 @@ public class AdminSkill implements IAdminCommandHandler } else if (command.equals("admin_give_all_skills")) { - adminGiveAllSkills(activeChar, false); + adminGiveAllSkills(activeChar, false, false); } else if (command.equals("admin_give_all_skills_fs")) { - adminGiveAllSkills(activeChar, true); + adminGiveAllSkills(activeChar, true, true); } else if (command.equals("admin_give_clan_skills")) { @@ -277,9 +277,10 @@ public class AdminSkill implements IAdminCommandHandler /** * This function will give all the skills that the target can learn at his/her level * @param activeChar the player - * @param includedByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeRequiredItems if {@code true} skills that have required items will be added */ - private void adminGiveAllSkills(PlayerInstance activeChar, boolean includedByFs) + private void adminGiveAllSkills(PlayerInstance activeChar, boolean includeByFs, boolean includeRequiredItems) { final WorldObject target = activeChar.getTarget(); if ((target == null) || !target.isPlayer()) @@ -289,7 +290,7 @@ public class AdminSkill implements IAdminCommandHandler } final PlayerInstance player = target.getActingPlayer(); // Notify player and admin - BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includedByFs, true) + " skills to " + player.getName()); + BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includeByFs, true, includeRequiredItems) + " skills to " + player.getName()); player.sendSkillList(); player.sendPacket(new AcquireSkillList(player)); } diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/Config.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/Config.java index 1c9db0eccb..d936fd948d 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/Config.java @@ -174,6 +174,7 @@ public class Config public static boolean ENABLE_MODIFY_SKILL_REUSE; public static Map SKILL_REUSE_LIST; public static boolean AUTO_LEARN_SKILLS; + public static boolean AUTO_LEARN_SKILLS_WITHOUT_ITEMS; public static boolean AUTO_LEARN_FS_SKILLS; public static boolean AUTO_LOOT_HERBS; public static byte BUFFS_MAX_AMOUNT; @@ -1710,6 +1711,7 @@ public class Config } } AUTO_LEARN_SKILLS = Character.getBoolean("AutoLearnSkills", false); + AUTO_LEARN_SKILLS_WITHOUT_ITEMS = Character.getBoolean("AutoLearnSkillsWithoutItems", false); AUTO_LEARN_FS_SKILLS = Character.getBoolean("AutoLearnForgottenScrollSkills", false); AUTO_LOOT_HERBS = Character.getBoolean("AutoLootHerbs", false); BUFFS_MAX_AMOUNT = Character.getByte("MaxBuffAmount", (byte) 20); diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index 9fe122caaa..f42c2d0e26 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -727,7 +727,16 @@ public class SkillTreeData implements IXmlReader return result; } - public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet) + /** + * Used by auto learn configuration. + * @param player + * @param classId + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added + * @return a list of auto learnable skills for the player. + */ + public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); @@ -747,8 +756,13 @@ public class SkillTreeData implements IXmlReader break; } - for (SkillLearn skillLearn : learnable) + SEARCH: for (SkillLearn skillLearn : learnable) { + if (!includeRequiredItems && !skillLearn.getRequiredItems().isEmpty()) + { + continue SEARCH; + } + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 9206ed9bba..6d569cc5ba 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -2488,7 +2488,7 @@ public class PlayerInstance extends Playable // Give all normal skills if activated Auto-Learn is activated, included AutoGet skills. if (Config.AUTO_LEARN_SKILLS) { - giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } else { @@ -2548,15 +2548,16 @@ public class PlayerInstance extends Playable /** * Give all available skills to the player. - * @param includedByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added * @return the amount of new skills earned */ - public int giveAvailableSkills(boolean includedByFs, boolean includeAutoGet) + public int giveAvailableSkills(boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { int skillCounter = 0; // Get available skills - final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includedByFs, includeAutoGet); + final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includeByFs, includeAutoGet, includeRequiredItems); final List skillsForStore = new ArrayList<>(); for (Skill skill : skills) { diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java index f895b7a7fa..4f56be31cb 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java @@ -120,7 +120,7 @@ public class ExRequestClassChange implements IClientIncomingPacket if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class. diff --git a/L2J_Mobius_Classic_Interlude/dist/game/config/Character.ini b/L2J_Mobius_Classic_Interlude/dist/game/config/Character.ini index 017fcecab6..18bcc39719 100644 --- a/L2J_Mobius_Classic_Interlude/dist/game/config/Character.ini +++ b/L2J_Mobius_Classic_Interlude/dist/game/config/Character.ini @@ -73,6 +73,10 @@ SkillReuseList = # Default: False AutoLearnSkills = False +# Auto learn skills that need items to be learned. +# Default: False +AutoLearnSkillsWithoutItems = False + # If it's true skills from forgotten scrolls will be delivered upon level up and login, require AutoLearnSkills. # Default: False AutoLearnForgottenScrollSkills = False diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java index 87d21b97ec..4ad03873df 100644 --- a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java +++ b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java @@ -396,7 +396,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); @@ -420,7 +420,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } else { - player.giveAvailableSkills(true, true); + player.giveAvailableSkills(true, true, true); } break; } @@ -835,7 +835,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java index 62422c213e..2094e79825 100644 --- a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java +++ b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java @@ -156,11 +156,11 @@ public class AdminSkill implements IAdminCommandHandler } else if (command.equals("admin_give_all_skills")) { - adminGiveAllSkills(activeChar, false); + adminGiveAllSkills(activeChar, false, false); } else if (command.equals("admin_give_all_skills_fs")) { - adminGiveAllSkills(activeChar, true); + adminGiveAllSkills(activeChar, true, true); } else if (command.equals("admin_give_clan_skills")) { @@ -277,9 +277,10 @@ public class AdminSkill implements IAdminCommandHandler /** * This function will give all the skills that the target can learn at his/her level * @param activeChar the player - * @param includedByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeRequiredItems if {@code true} skills that have required items will be added */ - private void adminGiveAllSkills(PlayerInstance activeChar, boolean includedByFs) + private void adminGiveAllSkills(PlayerInstance activeChar, boolean includeByFs, boolean includeRequiredItems) { final WorldObject target = activeChar.getTarget(); if ((target == null) || !target.isPlayer()) @@ -289,7 +290,7 @@ public class AdminSkill implements IAdminCommandHandler } final PlayerInstance player = target.getActingPlayer(); // Notify player and admin - BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includedByFs, true) + " skills to " + player.getName()); + BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includeByFs, true, includeRequiredItems) + " skills to " + player.getName()); player.sendSkillList(); player.sendPacket(new AcquireSkillList(player)); } diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/Config.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/Config.java index 8ea9f4e7f4..18cde9cbe8 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/Config.java @@ -173,6 +173,7 @@ public class Config public static boolean ENABLE_MODIFY_SKILL_REUSE; public static Map SKILL_REUSE_LIST; public static boolean AUTO_LEARN_SKILLS; + public static boolean AUTO_LEARN_SKILLS_WITHOUT_ITEMS; public static boolean AUTO_LEARN_FS_SKILLS; public static boolean AUTO_LOOT_HERBS; public static byte BUFFS_MAX_AMOUNT; @@ -1703,6 +1704,7 @@ public class Config } } AUTO_LEARN_SKILLS = Character.getBoolean("AutoLearnSkills", false); + AUTO_LEARN_SKILLS_WITHOUT_ITEMS = Character.getBoolean("AutoLearnSkillsWithoutItems", false); AUTO_LEARN_FS_SKILLS = Character.getBoolean("AutoLearnForgottenScrollSkills", false); AUTO_LOOT_HERBS = Character.getBoolean("AutoLootHerbs", false); BUFFS_MAX_AMOUNT = Character.getByte("MaxBuffAmount", (byte) 20); diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index db1a593951..1a27abc057 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -729,7 +729,16 @@ public class SkillTreeData implements IXmlReader return result; } - public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet) + /** + * Used by auto learn configuration. + * @param player + * @param classId + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added + * @return a list of auto learnable skills for the player. + */ + public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); @@ -749,8 +758,13 @@ public class SkillTreeData implements IXmlReader break; } - for (SkillLearn skillLearn : learnable) + SEARCH: for (SkillLearn skillLearn : learnable) { + if (!includeRequiredItems && !skillLearn.getRequiredItems().isEmpty()) + { + continue SEARCH; + } + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index a1d1ee8d61..dd3390a802 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -2547,7 +2547,7 @@ public class PlayerInstance extends Playable // Give all normal skills if activated Auto-Learn is activated, included AutoGet skills. if (Config.AUTO_LEARN_SKILLS) { - giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } else { @@ -2607,15 +2607,16 @@ public class PlayerInstance extends Playable /** * Give all available skills to the player. - * @param includedByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added * @return the amount of new skills earned */ - public int giveAvailableSkills(boolean includedByFs, boolean includeAutoGet) + public int giveAvailableSkills(boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { int skillCounter = 0; // Get available skills - final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includedByFs, includeAutoGet); + final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includeByFs, includeAutoGet, includeRequiredItems); final List skillsForStore = new ArrayList<>(); for (Skill skill : skills) { diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/config/Character.ini b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/config/Character.ini index 39fb34afbf..f2ebdc75d7 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/config/Character.ini +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/config/Character.ini @@ -73,6 +73,10 @@ SkillReuseList = # Default: False AutoLearnSkills = False +# Auto learn skills that need items to be learned. +# Default: False +AutoLearnSkillsWithoutItems = False + # If it's true skills from forgotten scrolls will be delivered upon level up and login, require AutoLearnSkills. # Default: False AutoLearnForgottenScrollSkills = False diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java index ebf03449a0..e64d37a0c0 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java @@ -368,7 +368,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); @@ -385,7 +385,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } case "learnskills": { - player.giveAvailableSkills(true, true); + player.giveAvailableSkills(true, true, true); break; } case "clanlevelup": @@ -792,7 +792,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java index 62422c213e..2094e79825 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java @@ -156,11 +156,11 @@ public class AdminSkill implements IAdminCommandHandler } else if (command.equals("admin_give_all_skills")) { - adminGiveAllSkills(activeChar, false); + adminGiveAllSkills(activeChar, false, false); } else if (command.equals("admin_give_all_skills_fs")) { - adminGiveAllSkills(activeChar, true); + adminGiveAllSkills(activeChar, true, true); } else if (command.equals("admin_give_clan_skills")) { @@ -277,9 +277,10 @@ public class AdminSkill implements IAdminCommandHandler /** * This function will give all the skills that the target can learn at his/her level * @param activeChar the player - * @param includedByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeRequiredItems if {@code true} skills that have required items will be added */ - private void adminGiveAllSkills(PlayerInstance activeChar, boolean includedByFs) + private void adminGiveAllSkills(PlayerInstance activeChar, boolean includeByFs, boolean includeRequiredItems) { final WorldObject target = activeChar.getTarget(); if ((target == null) || !target.isPlayer()) @@ -289,7 +290,7 @@ public class AdminSkill implements IAdminCommandHandler } final PlayerInstance player = target.getActingPlayer(); // Notify player and admin - BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includedByFs, true) + " skills to " + player.getName()); + BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includeByFs, true, includeRequiredItems) + " skills to " + player.getName()); player.sendSkillList(); player.sendPacket(new AcquireSkillList(player)); } diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/Config.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/Config.java index 88af692bee..ec449310bc 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/Config.java @@ -176,6 +176,7 @@ public class Config public static boolean ENABLE_MODIFY_SKILL_REUSE; public static Map SKILL_REUSE_LIST; public static boolean AUTO_LEARN_SKILLS; + public static boolean AUTO_LEARN_SKILLS_WITHOUT_ITEMS; public static boolean AUTO_LEARN_FS_SKILLS; public static boolean AUTO_LOOT_HERBS; public static byte BUFFS_MAX_AMOUNT; @@ -1730,6 +1731,7 @@ public class Config } } AUTO_LEARN_SKILLS = Character.getBoolean("AutoLearnSkills", false); + AUTO_LEARN_SKILLS_WITHOUT_ITEMS = Character.getBoolean("AutoLearnSkillsWithoutItems", false); AUTO_LEARN_FS_SKILLS = Character.getBoolean("AutoLearnForgottenScrollSkills", false); AUTO_LOOT_HERBS = Character.getBoolean("AutoLootHerbs", false); BUFFS_MAX_AMOUNT = Character.getByte("MaxBuffAmount", (byte) 20); diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index 9fe122caaa..f42c2d0e26 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -727,7 +727,16 @@ public class SkillTreeData implements IXmlReader return result; } - public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet) + /** + * Used by auto learn configuration. + * @param player + * @param classId + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added + * @return a list of auto learnable skills for the player. + */ + public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); @@ -747,8 +756,13 @@ public class SkillTreeData implements IXmlReader break; } - for (SkillLearn skillLearn : learnable) + SEARCH: for (SkillLearn skillLearn : learnable) { + if (!includeRequiredItems && !skillLearn.getRequiredItems().isEmpty()) + { + continue SEARCH; + } + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 55043a9288..54958f2221 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -2558,7 +2558,7 @@ public class PlayerInstance extends Playable // Give all normal skills if activated Auto-Learn is activated, included AutoGet skills. if (Config.AUTO_LEARN_SKILLS) { - giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } else { @@ -2618,15 +2618,16 @@ public class PlayerInstance extends Playable /** * Give all available skills to the player. - * @param includedByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added * @return the amount of new skills earned */ - public int giveAvailableSkills(boolean includedByFs, boolean includeAutoGet) + public int giveAvailableSkills(boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { int skillCounter = 0; // Get available skills - final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includedByFs, includeAutoGet); + final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includeByFs, includeAutoGet, includeRequiredItems); final List skillsForStore = new ArrayList<>(); for (Skill skill : skills) { diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java index 9125446983..deb134989e 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java @@ -217,7 +217,7 @@ public class ExRequestClassChange implements IClientIncomingPacket if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class. diff --git a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/config/Character.ini b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/config/Character.ini index 39fb34afbf..f2ebdc75d7 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/config/Character.ini +++ b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/config/Character.ini @@ -73,6 +73,10 @@ SkillReuseList = # Default: False AutoLearnSkills = False +# Auto learn skills that need items to be learned. +# Default: False +AutoLearnSkillsWithoutItems = False + # If it's true skills from forgotten scrolls will be delivered upon level up and login, require AutoLearnSkills. # Default: False AutoLearnForgottenScrollSkills = False diff --git a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java index ebf03449a0..e64d37a0c0 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java @@ -368,7 +368,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); @@ -385,7 +385,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } case "learnskills": { - player.giveAvailableSkills(true, true); + player.giveAvailableSkills(true, true, true); break; } case "clanlevelup": @@ -792,7 +792,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); diff --git a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java index 62422c213e..2094e79825 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java @@ -156,11 +156,11 @@ public class AdminSkill implements IAdminCommandHandler } else if (command.equals("admin_give_all_skills")) { - adminGiveAllSkills(activeChar, false); + adminGiveAllSkills(activeChar, false, false); } else if (command.equals("admin_give_all_skills_fs")) { - adminGiveAllSkills(activeChar, true); + adminGiveAllSkills(activeChar, true, true); } else if (command.equals("admin_give_clan_skills")) { @@ -277,9 +277,10 @@ public class AdminSkill implements IAdminCommandHandler /** * This function will give all the skills that the target can learn at his/her level * @param activeChar the player - * @param includedByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeRequiredItems if {@code true} skills that have required items will be added */ - private void adminGiveAllSkills(PlayerInstance activeChar, boolean includedByFs) + private void adminGiveAllSkills(PlayerInstance activeChar, boolean includeByFs, boolean includeRequiredItems) { final WorldObject target = activeChar.getTarget(); if ((target == null) || !target.isPlayer()) @@ -289,7 +290,7 @@ public class AdminSkill implements IAdminCommandHandler } final PlayerInstance player = target.getActingPlayer(); // Notify player and admin - BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includedByFs, true) + " skills to " + player.getName()); + BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includeByFs, true, includeRequiredItems) + " skills to " + player.getName()); player.sendSkillList(); player.sendPacket(new AcquireSkillList(player)); } diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/Config.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/Config.java index 25017a3bd4..e5cd6e328a 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/Config.java @@ -176,6 +176,7 @@ public class Config public static boolean ENABLE_MODIFY_SKILL_REUSE; public static Map SKILL_REUSE_LIST; public static boolean AUTO_LEARN_SKILLS; + public static boolean AUTO_LEARN_SKILLS_WITHOUT_ITEMS; public static boolean AUTO_LEARN_FS_SKILLS; public static boolean AUTO_LOOT_HERBS; public static byte BUFFS_MAX_AMOUNT; @@ -1733,6 +1734,7 @@ public class Config } } AUTO_LEARN_SKILLS = Character.getBoolean("AutoLearnSkills", false); + AUTO_LEARN_SKILLS_WITHOUT_ITEMS = Character.getBoolean("AutoLearnSkillsWithoutItems", false); AUTO_LEARN_FS_SKILLS = Character.getBoolean("AutoLearnForgottenScrollSkills", false); AUTO_LOOT_HERBS = Character.getBoolean("AutoLootHerbs", false); BUFFS_MAX_AMOUNT = Character.getByte("MaxBuffAmount", (byte) 20); diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index 9fe122caaa..f42c2d0e26 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -727,7 +727,16 @@ public class SkillTreeData implements IXmlReader return result; } - public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet) + /** + * Used by auto learn configuration. + * @param player + * @param classId + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added + * @return a list of auto learnable skills for the player. + */ + public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); @@ -747,8 +756,13 @@ public class SkillTreeData implements IXmlReader break; } - for (SkillLearn skillLearn : learnable) + SEARCH: for (SkillLearn skillLearn : learnable) { + if (!includeRequiredItems && !skillLearn.getRequiredItems().isEmpty()) + { + continue SEARCH; + } + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index febbce90e4..5d71cefe73 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -2589,7 +2589,7 @@ public class PlayerInstance extends Playable // Give all normal skills if activated Auto-Learn is activated, included AutoGet skills. if (Config.AUTO_LEARN_SKILLS) { - giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } else { @@ -2649,15 +2649,16 @@ public class PlayerInstance extends Playable /** * Give all available skills to the player. - * @param includedByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added * @return the amount of new skills earned */ - public int giveAvailableSkills(boolean includedByFs, boolean includeAutoGet) + public int giveAvailableSkills(boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { int skillCounter = 0; // Get available skills - final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includedByFs, includeAutoGet); + final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includeByFs, includeAutoGet, includeRequiredItems); final List skillsForStore = new ArrayList<>(); for (Skill skill : skills) { diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java index 2f50eba000..a9c63e7308 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java @@ -225,7 +225,7 @@ public class ExRequestClassChange implements IClientIncomingPacket if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class. diff --git a/L2J_Mobius_Essence_6.0_BattleChronicle/dist/game/config/Character.ini b/L2J_Mobius_Essence_6.0_BattleChronicle/dist/game/config/Character.ini index 39fb34afbf..f2ebdc75d7 100644 --- a/L2J_Mobius_Essence_6.0_BattleChronicle/dist/game/config/Character.ini +++ b/L2J_Mobius_Essence_6.0_BattleChronicle/dist/game/config/Character.ini @@ -73,6 +73,10 @@ SkillReuseList = # Default: False AutoLearnSkills = False +# Auto learn skills that need items to be learned. +# Default: False +AutoLearnSkillsWithoutItems = False + # If it's true skills from forgotten scrolls will be delivered upon level up and login, require AutoLearnSkills. # Default: False AutoLearnForgottenScrollSkills = False diff --git a/L2J_Mobius_Essence_6.0_BattleChronicle/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java b/L2J_Mobius_Essence_6.0_BattleChronicle/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java index ebf03449a0..e64d37a0c0 100644 --- a/L2J_Mobius_Essence_6.0_BattleChronicle/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java +++ b/L2J_Mobius_Essence_6.0_BattleChronicle/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java @@ -368,7 +368,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); @@ -385,7 +385,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } case "learnskills": { - player.giveAvailableSkills(true, true); + player.giveAvailableSkills(true, true, true); break; } case "clanlevelup": @@ -792,7 +792,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader } if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class and the money payed for class change. player.broadcastUserInfo(); diff --git a/L2J_Mobius_Essence_6.0_BattleChronicle/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java b/L2J_Mobius_Essence_6.0_BattleChronicle/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java index 62422c213e..2094e79825 100644 --- a/L2J_Mobius_Essence_6.0_BattleChronicle/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java +++ b/L2J_Mobius_Essence_6.0_BattleChronicle/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java @@ -156,11 +156,11 @@ public class AdminSkill implements IAdminCommandHandler } else if (command.equals("admin_give_all_skills")) { - adminGiveAllSkills(activeChar, false); + adminGiveAllSkills(activeChar, false, false); } else if (command.equals("admin_give_all_skills_fs")) { - adminGiveAllSkills(activeChar, true); + adminGiveAllSkills(activeChar, true, true); } else if (command.equals("admin_give_clan_skills")) { @@ -277,9 +277,10 @@ public class AdminSkill implements IAdminCommandHandler /** * This function will give all the skills that the target can learn at his/her level * @param activeChar the player - * @param includedByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeByFs if {@code true} Forgotten Scroll skills will be delivered. + * @param includeRequiredItems if {@code true} skills that have required items will be added */ - private void adminGiveAllSkills(PlayerInstance activeChar, boolean includedByFs) + private void adminGiveAllSkills(PlayerInstance activeChar, boolean includeByFs, boolean includeRequiredItems) { final WorldObject target = activeChar.getTarget(); if ((target == null) || !target.isPlayer()) @@ -289,7 +290,7 @@ public class AdminSkill implements IAdminCommandHandler } final PlayerInstance player = target.getActingPlayer(); // Notify player and admin - BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includedByFs, true) + " skills to " + player.getName()); + BuilderUtil.sendSysMessage(activeChar, "You gave " + player.giveAvailableSkills(includeByFs, true, includeRequiredItems) + " skills to " + player.getName()); player.sendSkillList(); player.sendPacket(new AcquireSkillList(player)); } diff --git a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/Config.java b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/Config.java index 25017a3bd4..e5cd6e328a 100644 --- a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/Config.java @@ -176,6 +176,7 @@ public class Config public static boolean ENABLE_MODIFY_SKILL_REUSE; public static Map SKILL_REUSE_LIST; public static boolean AUTO_LEARN_SKILLS; + public static boolean AUTO_LEARN_SKILLS_WITHOUT_ITEMS; public static boolean AUTO_LEARN_FS_SKILLS; public static boolean AUTO_LOOT_HERBS; public static byte BUFFS_MAX_AMOUNT; @@ -1733,6 +1734,7 @@ public class Config } } AUTO_LEARN_SKILLS = Character.getBoolean("AutoLearnSkills", false); + AUTO_LEARN_SKILLS_WITHOUT_ITEMS = Character.getBoolean("AutoLearnSkillsWithoutItems", false); AUTO_LEARN_FS_SKILLS = Character.getBoolean("AutoLearnForgottenScrollSkills", false); AUTO_LOOT_HERBS = Character.getBoolean("AutoLootHerbs", false); BUFFS_MAX_AMOUNT = Character.getByte("MaxBuffAmount", (byte) 20); diff --git a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index 9fe122caaa..f42c2d0e26 100644 --- a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -727,7 +727,16 @@ public class SkillTreeData implements IXmlReader return result; } - public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet) + /** + * Used by auto learn configuration. + * @param player + * @param classId + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added + * @return a list of auto learnable skills for the player. + */ + public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); @@ -747,8 +756,13 @@ public class SkillTreeData implements IXmlReader break; } - for (SkillLearn skillLearn : learnable) + SEARCH: for (SkillLearn skillLearn : learnable) { + if (!includeRequiredItems && !skillLearn.getRequiredItems().isEmpty()) + { + continue SEARCH; + } + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) diff --git a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index febbce90e4..5d71cefe73 100644 --- a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -2589,7 +2589,7 @@ public class PlayerInstance extends Playable // Give all normal skills if activated Auto-Learn is activated, included AutoGet skills. if (Config.AUTO_LEARN_SKILLS) { - giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } else { @@ -2649,15 +2649,16 @@ public class PlayerInstance extends Playable /** * Give all available skills to the player. - * @param includedByFs if {@code true} forgotten scroll skills present in the skill tree will be added + * @param includeByFs if {@code true} forgotten scroll skills present in the skill tree will be added * @param includeAutoGet if {@code true} auto-get skills present in the skill tree will be added + * @param includeRequiredItems if {@code true} skills that have required items will be added * @return the amount of new skills earned */ - public int giveAvailableSkills(boolean includedByFs, boolean includeAutoGet) + public int giveAvailableSkills(boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { int skillCounter = 0; // Get available skills - final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includedByFs, includeAutoGet); + final Collection skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includeByFs, includeAutoGet, includeRequiredItems); final List skillsForStore = new ArrayList<>(); for (Skill skill : skills) { diff --git a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java index 2f50eba000..a9c63e7308 100644 --- a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java +++ b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java @@ -225,7 +225,7 @@ public class ExRequestClassChange implements IClientIncomingPacket if (Config.AUTO_LEARN_SKILLS) { - player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); } player.store(false); // Save player cause if server crashes before this char is saved, he will lose class.