Addition of AutoLearnSkillsWithoutItems configuration.

This commit is contained in:
MobiusDevelopment
2021-11-05 08:22:05 +00:00
parent 851a4cbd88
commit 460d69f89c
153 changed files with 860 additions and 349 deletions

View File

@@ -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

View File

@@ -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();
}

View File

@@ -162,6 +162,7 @@ public class Config
public static boolean ENABLE_MODIFY_SKILL_REUSE;
public static Map<Integer, Integer> 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);

View File

@@ -558,17 +558,31 @@ public class SkillTreeData implements IXmlReader
return result;
}
public Collection<Skill> 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<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems)
{
// Get available skills
final PlayerSkillHolder holder = new PlayerSkillHolder(player);
List<SkillLearn> 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.

View File

@@ -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"))
{

View File

@@ -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<Skill> skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getClassId(), includedByFs, includeAutoGet);
final Collection<Skill> skills = SkillTreeData.getInstance().getAllAvailableSkills(this, getClassId(), includeByFs, includeAutoGet, includeRequiredItems);
final List<Skill> skillsForStore = new ArrayList<>();
for (Skill sk : skills)
{