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) public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems)
{ {
// Get available skills
final PlayerSkillHolder holder = new PlayerSkillHolder(player); final PlayerSkillHolder holder = new PlayerSkillHolder(player);
final Set<Integer> removed = new HashSet<>(); 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()) if (learnable.isEmpty())
{ {
// No more skills to learn
break; 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; break;
} }
for (SkillLearn skillLearn : learnable) for (SkillLearn skillLearn : learnable)
{ {
final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel());
// Cleanup skills that has to be removed // Cleanup skills that has to be removed
for (int skillId : skillLearn.getRemoveSkills()) 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); holder.addSkill(skill);
} }
} }

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) public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems)
{ {
// Get available skills
final PlayerSkillHolder holder = new PlayerSkillHolder(player); final PlayerSkillHolder holder = new PlayerSkillHolder(player);
final Set<Integer> removed = new HashSet<>(); 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()) if (learnable.isEmpty())
{ {
// No more skills to learn
break; 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; break;
} }
for (SkillLearn skillLearn : learnable) for (SkillLearn skillLearn : learnable)
{ {
final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel());
// Cleanup skills that has to be removed // Cleanup skills that has to be removed
for (int skillId : skillLearn.getRemoveSkills()) 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); holder.addSkill(skill);
} }
} }

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) public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems)
{ {
// Get available skills
final PlayerSkillHolder holder = new PlayerSkillHolder(player); final PlayerSkillHolder holder = new PlayerSkillHolder(player);
final Set<Integer> removed = new HashSet<>(); 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()) if (learnable.isEmpty())
{ {
// No more skills to learn
break; 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; break;
} }
for (SkillLearn skillLearn : learnable) for (SkillLearn skillLearn : learnable)
{ {
final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel());
// Cleanup skills that has to be removed // Cleanup skills that has to be removed
for (int skillId : skillLearn.getRemoveSkills()) 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); holder.addSkill(skill);
} }
} }

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) public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems)
{ {
// Get available skills
final PlayerSkillHolder holder = new PlayerSkillHolder(player); final PlayerSkillHolder holder = new PlayerSkillHolder(player);
final Set<Integer> removed = new HashSet<>(); 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()) if (learnable.isEmpty())
{ {
// No more skills to learn
break; 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; break;
} }
for (SkillLearn skillLearn : learnable) for (SkillLearn skillLearn : learnable)
{ {
final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel());
// Cleanup skills that has to be removed // Cleanup skills that has to be removed
for (int skillId : skillLearn.getRemoveSkills()) 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); holder.addSkill(skill);
} }
} }

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) public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems)
{ {
// Get available skills
final PlayerSkillHolder holder = new PlayerSkillHolder(player); final PlayerSkillHolder holder = new PlayerSkillHolder(player);
final Set<Integer> removed = new HashSet<>(); 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()) if (learnable.isEmpty())
{ {
// No more skills to learn
break; 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; break;
} }
for (SkillLearn skillLearn : learnable) for (SkillLearn skillLearn : learnable)
{ {
final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel());
// Cleanup skills that has to be removed // Cleanup skills that has to be removed
for (int skillId : skillLearn.getRemoveSkills()) 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); holder.addSkill(skill);
} }
} }

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) public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems)
{ {
// Get available skills
final PlayerSkillHolder holder = new PlayerSkillHolder(player); final PlayerSkillHolder holder = new PlayerSkillHolder(player);
final Set<Integer> removed = new HashSet<>(); 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()) if (learnable.isEmpty())
{ {
// No more skills to learn
break; 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; break;
} }
for (SkillLearn skillLearn : learnable) for (SkillLearn skillLearn : learnable)
{ {
final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel());
// Cleanup skills that has to be removed // Cleanup skills that has to be removed
for (int skillId : skillLearn.getRemoveSkills()) 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); holder.addSkill(skill);
} }
} }

View File

@@ -750,27 +750,34 @@ public class SkillTreeData implements IXmlReader
*/ */
public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems) public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems)
{ {
// Get available skills
final PlayerSkillHolder holder = new PlayerSkillHolder(player); final PlayerSkillHolder holder = new PlayerSkillHolder(player);
final Set<Integer> removed = new HashSet<>(); 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, includeByFp, includeAutoGet, includeRequiredItems, holder); learnable = getAvailableSkills(player, classId, includeByFs, includeByFp, includeAutoGet, includeRequiredItems, holder);
if (learnable.isEmpty()) if (learnable.isEmpty())
{ {
// No more skills to learn
break; 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; break;
} }
for (SkillLearn skillLearn : learnable) for (SkillLearn skillLearn : learnable)
{ {
final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel());
// Cleanup skills that has to be removed // Cleanup skills that has to be removed
for (int skillId : skillLearn.getRemoveSkills()) for (int skillId : skillLearn.getRemoveSkills())
{ {
@@ -794,8 +801,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); holder.addSkill(skill);
} }
} }

View File

@@ -750,27 +750,34 @@ public class SkillTreeData implements IXmlReader
*/ */
public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems) public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems)
{ {
// Get available skills
final PlayerSkillHolder holder = new PlayerSkillHolder(player); final PlayerSkillHolder holder = new PlayerSkillHolder(player);
final Set<Integer> removed = new HashSet<>(); 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, includeByFp, includeAutoGet, includeRequiredItems, holder); learnable = getAvailableSkills(player, classId, includeByFs, includeByFp, includeAutoGet, includeRequiredItems, holder);
if (learnable.isEmpty()) if (learnable.isEmpty())
{ {
// No more skills to learn
break; 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; break;
} }
for (SkillLearn skillLearn : learnable) for (SkillLearn skillLearn : learnable)
{ {
final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel());
// Cleanup skills that has to be removed // Cleanup skills that has to be removed
for (int skillId : skillLearn.getRemoveSkills()) for (int skillId : skillLearn.getRemoveSkills())
{ {
@@ -794,8 +801,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); holder.addSkill(skill);
} }
} }

View File

@@ -750,27 +750,34 @@ public class SkillTreeData implements IXmlReader
*/ */
public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems) public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems)
{ {
// Get available skills
final PlayerSkillHolder holder = new PlayerSkillHolder(player); final PlayerSkillHolder holder = new PlayerSkillHolder(player);
final Set<Integer> removed = new HashSet<>(); 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, includeByFp, includeAutoGet, includeRequiredItems, holder); learnable = getAvailableSkills(player, classId, includeByFs, includeByFp, includeAutoGet, includeRequiredItems, holder);
if (learnable.isEmpty()) if (learnable.isEmpty())
{ {
// No more skills to learn
break; 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; break;
} }
for (SkillLearn skillLearn : learnable) for (SkillLearn skillLearn : learnable)
{ {
final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel());
// Cleanup skills that has to be removed // Cleanup skills that has to be removed
for (int skillId : skillLearn.getRemoveSkills()) for (int skillId : skillLearn.getRemoveSkills())
{ {
@@ -794,8 +801,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); holder.addSkill(skill);
} }
} }

View File

@@ -750,27 +750,34 @@ public class SkillTreeData implements IXmlReader
*/ */
public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems) public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems)
{ {
// Get available skills
final PlayerSkillHolder holder = new PlayerSkillHolder(player); final PlayerSkillHolder holder = new PlayerSkillHolder(player);
final Set<Integer> removed = new HashSet<>(); 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, includeByFp, includeAutoGet, includeRequiredItems, holder); learnable = getAvailableSkills(player, classId, includeByFs, includeByFp, includeAutoGet, includeRequiredItems, holder);
if (learnable.isEmpty()) if (learnable.isEmpty())
{ {
// No more skills to learn
break; 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; break;
} }
for (SkillLearn skillLearn : learnable) for (SkillLearn skillLearn : learnable)
{ {
final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel());
// Cleanup skills that has to be removed // Cleanup skills that has to be removed
for (int skillId : skillLearn.getRemoveSkills()) for (int skillId : skillLearn.getRemoveSkills())
{ {
@@ -794,8 +801,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); holder.addSkill(skill);
} }
} }

View File

@@ -750,27 +750,34 @@ public class SkillTreeData implements IXmlReader
*/ */
public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems) public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems)
{ {
// Get available skills
final PlayerSkillHolder holder = new PlayerSkillHolder(player); final PlayerSkillHolder holder = new PlayerSkillHolder(player);
final Set<Integer> removed = new HashSet<>(); 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, includeByFp, includeAutoGet, includeRequiredItems, holder); learnable = getAvailableSkills(player, classId, includeByFs, includeByFp, includeAutoGet, includeRequiredItems, holder);
if (learnable.isEmpty()) if (learnable.isEmpty())
{ {
// No more skills to learn
break; 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; break;
} }
for (SkillLearn skillLearn : learnable) for (SkillLearn skillLearn : learnable)
{ {
final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel());
// Cleanup skills that has to be removed // Cleanup skills that has to be removed
for (int skillId : skillLearn.getRemoveSkills()) for (int skillId : skillLearn.getRemoveSkills())
{ {
@@ -794,8 +801,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); holder.addSkill(skill);
} }
} }

View File

@@ -597,33 +597,28 @@ public class SkillTreeTable
return 0; return 0;
} }
/**
* @param player
* @param classId
* @return
*/
public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId) public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId)
{ {
// Get available skills
int unLearnable = 0;
final PlayerSkillHolder holder = new PlayerSkillHolder(player.getSkills()); final PlayerSkillHolder holder = new PlayerSkillHolder(player.getSkills());
List<SkillLearn> learnable = getAvailableSkills(player, classId, holder); List<SkillLearn> learnable;
while (learnable.size() > unLearnable) for (int i = 0; i < 1000; i++)
{ {
for (SkillLearn s : learnable) learnable = getAvailableSkills(player, classId, holder);
if (learnable.isEmpty())
{ {
final Skill sk = SkillTable.getInstance().getSkill(s.getId(), s.getLevel()); break;
if ((sk == null) || ((sk.getId() == Skill.SKILL_DIVINE_INSPIRATION) && !Config.AUTO_LEARN_DIVINE_INSPIRATION && !player.isGM())) }
for (SkillLearn skillLearn : learnable)
{
final Skill skill = SkillTable.getInstance().getSkill(skillLearn.getId(), skillLearn.getLevel());
if ((skill == null) || ((skill.getId() == Skill.SKILL_DIVINE_INSPIRATION) && !Config.AUTO_LEARN_DIVINE_INSPIRATION))
{ {
unLearnable++;
continue; continue;
} }
holder.addSkill(sk); holder.addSkill(skill);
} }
// Get new available skills, some skills depend of previous skills to be available.
learnable = getAvailableSkills(player, classId, holder);
} }
return holder.getSkills().values(); return holder.getSkills().values();
} }

View File

@@ -597,33 +597,28 @@ public class SkillTreeTable
return 0; return 0;
} }
/**
* @param player
* @param classId
* @return
*/
public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId) public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId)
{ {
// Get available skills
int unLearnable = 0;
final PlayerSkillHolder holder = new PlayerSkillHolder(player.getSkills()); final PlayerSkillHolder holder = new PlayerSkillHolder(player.getSkills());
List<SkillLearn> learnable = getAvailableSkills(player, classId, holder); List<SkillLearn> learnable;
while (learnable.size() > unLearnable) for (int i = 0; i < 1000; i++)
{ {
for (SkillLearn s : learnable) learnable = getAvailableSkills(player, classId, holder);
if (learnable.isEmpty())
{ {
final Skill sk = SkillTable.getInstance().getSkill(s.getId(), s.getLevel()); break;
if ((sk == null) || ((sk.getId() == Skill.SKILL_DIVINE_INSPIRATION) && !Config.AUTO_LEARN_DIVINE_INSPIRATION && !player.isGM())) }
for (SkillLearn skillLearn : learnable)
{
final Skill skill = SkillTable.getInstance().getSkill(skillLearn.getId(), skillLearn.getLevel());
if ((skill == null) || ((skill.getId() == Skill.SKILL_DIVINE_INSPIRATION) && !Config.AUTO_LEARN_DIVINE_INSPIRATION))
{ {
unLearnable++;
continue; continue;
} }
holder.addSkill(sk); holder.addSkill(skill);
} }
// Get new available skills, some skills depend of previous skills to be available.
learnable = getAvailableSkills(player, classId, holder);
} }
return holder.getSkills().values(); return holder.getSkills().values();
} }

View File

@@ -578,19 +578,21 @@ public class SkillTreeData implements IXmlReader
*/ */
public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems)
{ {
// Get available skills
final PlayerSkillHolder holder = new PlayerSkillHolder(player); final PlayerSkillHolder holder = new PlayerSkillHolder(player);
List<SkillLearn> learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); List<SkillLearn> learnable;
for (int i = 0; i < 1000; i++) // Infinite loop warning for (int i = 0; i < 1000; i++)
{ {
learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder);
if (learnable.isEmpty())
{
break;
}
for (SkillLearn skillLearn : learnable) for (SkillLearn skillLearn : learnable)
{ {
final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel());
holder.addSkill(skill); holder.addSkill(skill);
} }
// Get new available skills, some skills depend of previous skills to be available.
learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder);
} }
return holder.getSkills().values(); return holder.getSkills().values();
} }

View File

@@ -578,19 +578,21 @@ public class SkillTreeData implements IXmlReader
*/ */
public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems)
{ {
// Get available skills
final PlayerSkillHolder holder = new PlayerSkillHolder(player); final PlayerSkillHolder holder = new PlayerSkillHolder(player);
List<SkillLearn> learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); List<SkillLearn> learnable;
for (int i = 0; i < 1000; i++) // Infinite loop warning for (int i = 0; i < 1000; i++)
{ {
learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder);
if (learnable.isEmpty())
{
break;
}
for (SkillLearn skillLearn : learnable) for (SkillLearn skillLearn : learnable)
{ {
final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel());
holder.addSkill(skill); holder.addSkill(skill);
} }
// Get new available skills, some skills depend of previous skills to be available.
learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder);
} }
return holder.getSkills().values(); return holder.getSkills().values();
} }

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) public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems)
{ {
// Get available skills
final PlayerSkillHolder holder = new PlayerSkillHolder(player); final PlayerSkillHolder holder = new PlayerSkillHolder(player);
final Set<Integer> removed = new HashSet<>(); 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()) if (learnable.isEmpty())
{ {
// No more skills to learn
break; 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; break;
} }
for (SkillLearn skillLearn : learnable) for (SkillLearn skillLearn : learnable)
{ {
final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel());
// Cleanup skills that has to be removed // Cleanup skills that has to be removed
for (int skillId : skillLearn.getRemoveSkills()) 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); holder.addSkill(skill);
} }
} }

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) public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems)
{ {
// Get available skills
final PlayerSkillHolder holder = new PlayerSkillHolder(player); final PlayerSkillHolder holder = new PlayerSkillHolder(player);
final Set<Integer> removed = new HashSet<>(); 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()) if (learnable.isEmpty())
{ {
// No more skills to learn
break; 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; break;
} }
for (SkillLearn skillLearn : learnable) for (SkillLearn skillLearn : learnable)
{ {
final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel());
// Cleanup skills that has to be removed // Cleanup skills that has to be removed
for (int skillId : skillLearn.getRemoveSkills()) 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); holder.addSkill(skill);
} }
} }

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) public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems)
{ {
// Get available skills
final PlayerSkillHolder holder = new PlayerSkillHolder(player); final PlayerSkillHolder holder = new PlayerSkillHolder(player);
final Set<Integer> removed = new HashSet<>(); 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()) if (learnable.isEmpty())
{ {
// No more skills to learn
break; 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; break;
} }
for (SkillLearn skillLearn : learnable) for (SkillLearn skillLearn : learnable)
{ {
final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel());
// Cleanup skills that has to be removed // Cleanup skills that has to be removed
for (int skillId : skillLearn.getRemoveSkills()) 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); holder.addSkill(skill);
} }
} }

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) public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems)
{ {
// Get available skills
final PlayerSkillHolder holder = new PlayerSkillHolder(player); final PlayerSkillHolder holder = new PlayerSkillHolder(player);
final Set<Integer> removed = new HashSet<>(); 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()) if (learnable.isEmpty())
{ {
// No more skills to learn
break; 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; break;
} }
for (SkillLearn skillLearn : learnable) for (SkillLearn skillLearn : learnable)
{ {
final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel());
// Cleanup skills that has to be removed // Cleanup skills that has to be removed
for (int skillId : skillLearn.getRemoveSkills()) 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); holder.addSkill(skill);
} }
} }

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) public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems)
{ {
// Get available skills
final PlayerSkillHolder holder = new PlayerSkillHolder(player); final PlayerSkillHolder holder = new PlayerSkillHolder(player);
final Set<Integer> removed = new HashSet<>(); 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()) if (learnable.isEmpty())
{ {
// No more skills to learn
break; 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; break;
} }
for (SkillLearn skillLearn : learnable) for (SkillLearn skillLearn : learnable)
{ {
final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel());
// Cleanup skills that has to be removed // Cleanup skills that has to be removed
for (int skillId : skillLearn.getRemoveSkills()) 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); holder.addSkill(skill);
} }
} }

View File

@@ -745,27 +745,34 @@ public class SkillTreeData implements IXmlReader
*/ */
public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems)
{ {
// Get available skills
final PlayerSkillHolder holder = new PlayerSkillHolder(player); final PlayerSkillHolder holder = new PlayerSkillHolder(player);
final Set<Integer> removed = new HashSet<>(); 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()) if (learnable.isEmpty())
{ {
// No more skills to learn
break; 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; break;
} }
for (SkillLearn skillLearn : learnable) for (SkillLearn skillLearn : learnable)
{ {
final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel());
// Cleanup skills that has to be removed // Cleanup skills that has to be removed
for (int skillId : skillLearn.getRemoveSkills()) for (int skillId : skillLearn.getRemoveSkills())
{ {
@@ -789,8 +796,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); holder.addSkill(skill);
} }
} }

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) public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems)
{ {
// Get available skills
final PlayerSkillHolder holder = new PlayerSkillHolder(player); final PlayerSkillHolder holder = new PlayerSkillHolder(player);
final Set<Integer> removed = new HashSet<>(); 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()) if (learnable.isEmpty())
{ {
// No more skills to learn
break; 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; break;
} }
for (SkillLearn skillLearn : learnable) for (SkillLearn skillLearn : learnable)
{ {
final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel());
// Cleanup skills that has to be removed // Cleanup skills that has to be removed
for (int skillId : skillLearn.getRemoveSkills()) 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); holder.addSkill(skill);
} }
} }

View File

@@ -745,27 +745,34 @@ public class SkillTreeData implements IXmlReader
*/ */
public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems)
{ {
// Get available skills
final PlayerSkillHolder holder = new PlayerSkillHolder(player); final PlayerSkillHolder holder = new PlayerSkillHolder(player);
final Set<Integer> removed = new HashSet<>(); 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()) if (learnable.isEmpty())
{ {
// No more skills to learn
break; 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; break;
} }
for (SkillLearn skillLearn : learnable) for (SkillLearn skillLearn : learnable)
{ {
final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel());
// Cleanup skills that has to be removed // Cleanup skills that has to be removed
for (int skillId : skillLearn.getRemoveSkills()) for (int skillId : skillLearn.getRemoveSkills())
{ {
@@ -789,8 +796,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); holder.addSkill(skill);
} }
} }

View File

@@ -745,27 +745,34 @@ public class SkillTreeData implements IXmlReader
*/ */
public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems)
{ {
// Get available skills
final PlayerSkillHolder holder = new PlayerSkillHolder(player); final PlayerSkillHolder holder = new PlayerSkillHolder(player);
final Set<Integer> removed = new HashSet<>(); 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()) if (learnable.isEmpty())
{ {
// No more skills to learn
break; 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; break;
} }
for (SkillLearn skillLearn : learnable) for (SkillLearn skillLearn : learnable)
{ {
final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel());
// Cleanup skills that has to be removed // Cleanup skills that has to be removed
for (int skillId : skillLearn.getRemoveSkills()) for (int skillId : skillLearn.getRemoveSkills())
{ {
@@ -789,8 +796,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); holder.addSkill(skill);
} }
} }

View File

@@ -745,27 +745,34 @@ public class SkillTreeData implements IXmlReader
*/ */
public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) public Collection<Skill> getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems)
{ {
// Get available skills
final PlayerSkillHolder holder = new PlayerSkillHolder(player); final PlayerSkillHolder holder = new PlayerSkillHolder(player);
final Set<Integer> removed = new HashSet<>(); 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()) if (learnable.isEmpty())
{ {
// No more skills to learn
break; 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; break;
} }
for (SkillLearn skillLearn : learnable) for (SkillLearn skillLearn : learnable)
{ {
final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel());
// Cleanup skills that has to be removed // Cleanup skills that has to be removed
for (int skillId : skillLearn.getRemoveSkills()) for (int skillId : skillLearn.getRemoveSkills())
{ {
@@ -789,8 +796,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); holder.addSkill(skill);
} }
} }