Skilltree getAllAvailableSkills method cleanup.
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user