diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/config/Character.ini b/L2J_Mobius_6.0_Fafurion/dist/game/config/Character.ini
index c1e32f3c1a..3c42b1845f 100644
--- a/L2J_Mobius_6.0_Fafurion/dist/game/config/Character.ini
+++ b/L2J_Mobius_6.0_Fafurion/dist/game/config/Character.ini
@@ -81,6 +81,10 @@ AutoLearnSkills = False
# Default: False
AutoLearnForgottenScrollSkills = False
+# If it's true skills from forgotten power books will be delivered upon level up and login, require AutoLearnSkills.
+# Default: False
+AutoLearnForgottenPowerSkills = False
+
# Maximum number of buffs and songs/dances.
# Remember that Divine Inspiration will give players 4 additional buff slots on top of the number specified in "maxbuffamount".
# Default: 20, 12, 12
diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/html/admin/charskills.htm b/L2J_Mobius_6.0_Fafurion/dist/game/data/html/admin/charskills.htm
index ffbbbee7dc..9534bc6671 100644
--- a/L2J_Mobius_6.0_Fafurion/dist/game/data/html/admin/charskills.htm
+++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/html/admin/charskills.htm
@@ -32,7 +32,7 @@
-
+
diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java
index a53ad49be4..02ca3d4e83 100644
--- a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java
+++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/ai/others/ClassMaster/ClassMaster.java
@@ -432,7 +432,7 @@ public final class ClassMaster extends AbstractNpcAI implements IGameXmlReader
}
if (Config.AUTO_LEARN_SKILLS)
{
- player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true);
+ player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true);
}
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();
@@ -456,7 +456,7 @@ public final class ClassMaster extends AbstractNpcAI implements IGameXmlReader
}
else
{
- player.giveAvailableSkills(true, true);
+ player.giveAvailableSkills(true, true, true);
}
break;
}
@@ -863,7 +863,7 @@ public final class ClassMaster extends AbstractNpcAI implements IGameXmlReader
}
if (Config.AUTO_LEARN_SKILLS)
{
- player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true);
+ player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true);
}
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_6.0_Fafurion/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java
index de9f3b7509..1fd852abbb 100644
--- a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java
+++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/admincommandhandlers/AdminSkill.java
@@ -153,11 +153,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"))
{
@@ -275,8 +275,9 @@ public class AdminSkill implements IAdminCommandHandler
* This function will give all the skills that the target can learn at his/her level
* @param activeChar the active char
* @param includedByFs if {@code true} Forgotten Scroll skills will be delivered.
+ * @param includedByFp if {@code true} Forgotten Power skills will be delivered.
*/
- private void adminGiveAllSkills(L2PcInstance activeChar, boolean includedByFs)
+ private void adminGiveAllSkills(L2PcInstance activeChar, boolean includedByFs, boolean includedByFp)
{
final L2Object target = activeChar.getTarget();
if ((target == null) || !target.isPlayer())
@@ -286,7 +287,7 @@ public class AdminSkill implements IAdminCommandHandler
}
final L2PcInstance 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(includedByFs, includedByFp, true) + " skills to " + player.getName());
player.sendSkillList();
player.sendPacket(new AcquireSkillList(player));
}
diff --git a/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/Config.java b/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/Config.java
index 9f9894033f..13f9ec37b8 100644
--- a/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/Config.java
+++ b/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/Config.java
@@ -167,6 +167,7 @@ public final class Config
public static Map SKILL_REUSE_LIST;
public static boolean AUTO_LEARN_SKILLS;
public static boolean AUTO_LEARN_FS_SKILLS;
+ public static boolean AUTO_LEARN_FP_SKILLS;
public static boolean AUTO_LOOT_HERBS;
public static byte BUFFS_MAX_AMOUNT;
public static byte TRIGGERED_BUFFS_MAX_AMOUNT;
@@ -1492,6 +1493,7 @@ public final class Config
AUTO_LEARN_SKILLS = Character.getBoolean("AutoLearnSkills", false);
AUTO_LEARN_FS_SKILLS = Character.getBoolean("AutoLearnForgottenScrollSkills", false);
+ AUTO_LEARN_FP_SKILLS = Character.getBoolean("AutoLearnForgottenPowerSkills", false);
AUTO_LOOT_HERBS = Character.getBoolean("AutoLootHerbs", false);
BUFFS_MAX_AMOUNT = Character.getByte("MaxBuffAmount", (byte) 20);
TRIGGERED_BUFFS_MAX_AMOUNT = Character.getByte("MaxTriggeredBuffAmount", (byte) 12);
diff --git a/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java b/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java
index c523e82a03..10aebfc94d 100644
--- a/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java
+++ b/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java
@@ -632,12 +632,13 @@ public final class SkillTreesData implements IGameXmlReader
* @param player the learning skill player
* @param classId the learning skill class Id
* @param includeByFs if {@code true} skills from Forgotten Scroll will be included
+ * @param includeByFp if {@code true} skills from Forgotten Power books will be included
* @param includeAutoGet if {@code true} Auto-Get skills will be included
* @return all available skills for a given {@code player}, {@code classId}, {@code includeByFs} and {@code includeAutoGet}
*/
- public List getAvailableSkills(L2PcInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
+ public List getAvailableSkills(L2PcInstance player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet)
{
- return getAvailableSkills(player, classId, includeByFs, includeAutoGet, player);
+ return getAvailableSkills(player, classId, includeByFs, includeByFp, includeAutoGet, player);
}
/**
@@ -645,11 +646,12 @@ public final class SkillTreesData implements IGameXmlReader
* @param player the learning skill player
* @param classId the learning skill class Id
* @param includeByFs if {@code true} skills from Forgotten Scroll will be included
+ * @param includeByFp if {@code true} skills from Forgotten Power books will be included
* @param includeAutoGet if {@code true} Auto-Get skills will be included
* @param holder
* @return all available skills for a given {@code player}, {@code classId}, {@code includeByFs} and {@code includeAutoGet}
*/
- private List getAvailableSkills(L2PcInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, ISkillsHolder holder)
+ private List getAvailableSkills(L2PcInstance player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, ISkillsHolder holder)
{
final List result = new LinkedList<>();
final Map skills = getCompleteClassSkillTree(classId);
@@ -667,7 +669,7 @@ public final class SkillTreesData implements IGameXmlReader
{
final L2SkillLearn skill = entry.getValue();
- if (((skill.getSkillId() == CommonSkill.DIVINE_INSPIRATION.getId()) && (!Config.AUTO_LEARN_DIVINE_INSPIRATION && includeAutoGet) && !player.isGM()) || (!includeAutoGet && skill.isAutoGet()) || (!includeByFs && skill.isLearnedByFS()) || isRemoveSkill(classId, skill.getSkillId()))
+ if (((skill.getSkillId() == CommonSkill.DIVINE_INSPIRATION.getId()) && (!Config.AUTO_LEARN_DIVINE_INSPIRATION && includeAutoGet) && !player.isGM()) || (!includeAutoGet && skill.isAutoGet()) || (!includeByFs && skill.isLearnedByFS()) || (!includeByFp && (skill.getSkillId() > 11399) && (skill.getSkillId() < 11405)) || isRemoveSkill(classId, skill.getSkillId()))
{
continue;
}
@@ -702,14 +704,14 @@ public final class SkillTreesData implements IGameXmlReader
return result;
}
- public Collection getAllAvailableSkills(L2PcInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
+ public Collection getAllAvailableSkills(L2PcInstance player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet)
{
// Get available skills
final PlayerSkillHolder holder = new PlayerSkillHolder(player);
final Set removed = new HashSet<>();
for (int i = 0; i < 1000; i++) // Infinite loop warning
{
- final List learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, holder);
+ final List learnable = getAvailableSkills(player, classId, includeByFs, includeByFp, includeAutoGet, holder);
if (learnable.isEmpty())
{
// No more skills to learn
@@ -1407,7 +1409,7 @@ public final class SkillTreesData implements IGameXmlReader
return minLevel;
}
- public List getNextAvailableSkills(L2PcInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
+ public List getNextAvailableSkills(L2PcInstance player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet)
{
final Map completeClassSkillTree = getCompleteClassSkillTree(classId);
final List result = new LinkedList<>();
@@ -1425,7 +1427,7 @@ public final class SkillTreesData implements IGameXmlReader
{
continue;
}
- if ((!includeAutoGet && skill.isAutoGet()) || (!includeByFs && skill.isLearnedByFS()))
+ if ((!includeAutoGet && skill.isAutoGet()) || (!includeByFs && skill.isLearnedByFS()) || (!includeByFp && (skill.getSkillId() > 11399) && (skill.getSkillId() < 11405)))
{
continue;
}
diff --git a/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/model/actor/instance/L2NpcInstance.java b/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/model/actor/instance/L2NpcInstance.java
index ed9aab530f..834146e180 100644
--- a/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/model/actor/instance/L2NpcInstance.java
+++ b/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/model/actor/instance/L2NpcInstance.java
@@ -87,7 +87,7 @@ public class L2NpcInstance extends L2Npc
}
// Normal skills, No LearnedByFS, no AutoGet skills.
- final List skills = SkillTreesData.getInstance().getAvailableSkills(player, classId, false, false);
+ final List skills = SkillTreesData.getInstance().getAvailableSkills(player, classId, false, true, false);
if (skills.isEmpty())
{
final Map skillTree = SkillTreesData.getInstance().getCompleteClassSkillTree(classId);
diff --git a/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java b/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java
index fd6244cfa0..65dc23cefd 100644
--- a/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java
+++ b/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java
@@ -2520,7 +2520,7 @@ public final class L2PcInstance extends L2Playable
// 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, Config.AUTO_LEARN_FP_SKILLS, true);
}
else
{
@@ -2581,14 +2581,15 @@ public final class L2PcInstance extends L2Playable
/**
* 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 includeAutoGet if {@code true} auto-get skills present in the skill tree will be added
* @return the amount of new skills earned
*/
- public int giveAvailableSkills(boolean includedByFs, boolean includeAutoGet)
+ public int giveAvailableSkills(boolean includedByFs, boolean includedByFp, boolean includeAutoGet)
{
int skillCounter = 0;
// Get available skills
- final Collection skills = SkillTreesData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includedByFs, includeAutoGet);
+ final Collection skills = SkillTreesData.getInstance().getAllAvailableSkills(this, getTemplate().getClassId(), includedByFs, includedByFp, includeAutoGet);
final List skillsForStore = new ArrayList<>();
for (Skill skill : skills)
diff --git a/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java b/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java
index a7d901b8da..5ebe0c2e8c 100644
--- a/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java
+++ b/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java
@@ -291,7 +291,7 @@ public final class CharacterCreate implements IClientIncomingPacket
if (Config.BALTHUS_KNIGHTS_REWARD_SKILLS)
{
- newChar.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true);
+ newChar.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true);
}
}
@@ -378,7 +378,7 @@ public final class CharacterCreate implements IClientIncomingPacket
}
}
- for (L2SkillLearn skill : SkillTreesData.getInstance().getAvailableSkills(newChar, newChar.getClassId(), false, true))
+ for (L2SkillLearn skill : SkillTreesData.getInstance().getAvailableSkills(newChar, newChar.getClassId(), false, false, true))
{
newChar.addSkill(SkillData.getInstance().getSkill(skill.getSkillId(), skill.getSkillLevel()), true);
}
diff --git a/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/network/serverpackets/AcquireSkillList.java b/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/network/serverpackets/AcquireSkillList.java
index 63e7d9d66e..caf72e570e 100644
--- a/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/network/serverpackets/AcquireSkillList.java
+++ b/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/network/serverpackets/AcquireSkillList.java
@@ -39,8 +39,8 @@ public class AcquireSkillList implements IClientOutgoingPacket
public AcquireSkillList(L2PcInstance activeChar)
{
_activeChar = activeChar;
- _learnable = SkillTreesData.getInstance().getAvailableSkills(activeChar, activeChar.getClassId(), false, false);
- _learnable.addAll(SkillTreesData.getInstance().getNextAvailableSkills(activeChar, activeChar.getClassId(), false, false));
+ _learnable = SkillTreesData.getInstance().getAvailableSkills(activeChar, activeChar.getClassId(), false, true, false);
+ _learnable.addAll(SkillTreesData.getInstance().getNextAvailableSkills(activeChar, activeChar.getClassId(), false, true, false));
}
@Override