Forgotten Scroll skills have their own configuration.

This commit is contained in:
MobiusDevelopment
2021-11-05 09:17:44 +00:00
parent 460d69f89c
commit 76d68ba35b
46 changed files with 302 additions and 229 deletions

View File

@ -667,7 +667,7 @@ public class SkillTreeData implements IXmlReader
*/
public List<SkillLearn> getAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
{
return getAvailableSkills(player, classId, includeByFs, includeAutoGet, player);
return getAvailableSkills(player, classId, includeByFs, includeAutoGet, true, player);
}
/**
@ -676,10 +676,11 @@ public class SkillTreeData implements IXmlReader
* @param classId the learning skill class Id
* @param includeByFs if {@code true} skills from Forgotten Scroll will be included
* @param includeAutoGet if {@code true} Auto-Get skills will be included
* @param includeRequiredItems if {@code true} skills that have required items will be added
* @param holder
* @return all available skills for a given {@code player}, {@code classId}, {@code includeByFs} and {@code includeAutoGet}
*/
private List<SkillLearn> getAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, ISkillsHolder holder)
private List<SkillLearn> getAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
{
final List<SkillLearn> result = new LinkedList<>();
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
@ -699,6 +700,12 @@ public class SkillTreeData implements IXmlReader
continue;
}
// Forgotten Scroll requirements checked above.
if (!includeRequiredItems && !skill.getRequiredItems().isEmpty() && !skill.isLearnedByFS())
{
continue;
}
if (isAwaken && !isCurrentClassSkillNoParent(classId, entry.getKey()) && !isAwakenSaveSkill(player.getClassId(), skill.getSkillId()))
{
continue;
@ -745,7 +752,7 @@ public class SkillTreeData implements IXmlReader
final Set<Integer> removed = new HashSet<>();
for (int i = 0; i < 1000; i++) // Infinite loop warning
{
final List<SkillLearn> learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, holder);
final List<SkillLearn> learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder);
if (learnable.isEmpty())
{
// No more skills to learn
@ -758,13 +765,8 @@ public class SkillTreeData implements IXmlReader
break;
}
SEARCH: for (SkillLearn skillLearn : learnable)
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())