Skilltree getAllAvailableSkills method cleanup.

This commit is contained in:
MobiusDevelopment
2021-11-05 22:13:16 +00:00
parent 76d68ba35b
commit e499dda6fa
25 changed files with 376 additions and 214 deletions

View File

@ -747,27 +747,34 @@ public class SkillTreeData implements IXmlReader
*/
public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems)
{
// Get available skills
final PlayerSkillHolder holder = new PlayerSkillHolder(player);
final Set<Integer> removed = new HashSet<>();
for (int i = 0; i < 1000; i++) // Infinite loop warning
List<SkillLearn> learnable;
for (int i = 0; i < 1000; i++)
{
final List<SkillLearn> learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder);
learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder);
if (learnable.isEmpty())
{
// No more skills to learn
break;
}
if (learnable.stream().allMatch(skillLearn -> removed.contains(skillLearn.getSkillId())))
// All remaining skills have been removed.
boolean allRemoved = true;
SEARCH: for (SkillLearn skillLearn : learnable)
{
if (!removed.contains(skillLearn.getSkillId()))
{
allRemoved = false;
break SEARCH;
}
}
if (allRemoved)
{
// All remaining skills has been removed
break;
}
for (SkillLearn skillLearn : learnable)
{
final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel());
// Cleanup skills that has to be removed
for (int skillId : skillLearn.getRemoveSkills())
{
@ -791,8 +798,9 @@ public class SkillTreeData implements IXmlReader
}
}
if (!removed.contains(skill.getId()))
if (!removed.contains(skillLearn.getSkillId()))
{
final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel());
holder.addSkill(skill);
}
}