From e499dda6faaeef2f796c5fe0e6599ffd2aa1eafb Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Fri, 5 Nov 2021 22:13:16 +0000 Subject: [PATCH] Skilltree getAllAvailableSkills method cleanup. --- .../gameserver/data/xml/SkillTreeData.java | 24 ++++++++++----- .../gameserver/data/xml/SkillTreeData.java | 24 ++++++++++----- .../gameserver/data/xml/SkillTreeData.java | 24 ++++++++++----- .../gameserver/data/xml/SkillTreeData.java | 24 ++++++++++----- .../gameserver/data/xml/SkillTreeData.java | 24 ++++++++++----- .../gameserver/data/xml/SkillTreeData.java | 24 ++++++++++----- .../gameserver/data/xml/SkillTreeData.java | 24 ++++++++++----- .../gameserver/data/xml/SkillTreeData.java | 24 ++++++++++----- .../gameserver/data/xml/SkillTreeData.java | 24 ++++++++++----- .../gameserver/data/xml/SkillTreeData.java | 24 ++++++++++----- .../gameserver/data/xml/SkillTreeData.java | 24 ++++++++++----- .../gameserver/data/sql/SkillTreeTable.java | 29 ++++++++----------- .../gameserver/data/sql/SkillTreeTable.java | 29 ++++++++----------- .../gameserver/data/xml/SkillTreeData.java | 14 +++++---- .../gameserver/data/xml/SkillTreeData.java | 14 +++++---- .../gameserver/data/xml/SkillTreeData.java | 24 ++++++++++----- .../gameserver/data/xml/SkillTreeData.java | 24 ++++++++++----- .../gameserver/data/xml/SkillTreeData.java | 24 ++++++++++----- .../gameserver/data/xml/SkillTreeData.java | 24 ++++++++++----- .../gameserver/data/xml/SkillTreeData.java | 24 ++++++++++----- .../gameserver/data/xml/SkillTreeData.java | 24 ++++++++++----- .../gameserver/data/xml/SkillTreeData.java | 24 ++++++++++----- .../gameserver/data/xml/SkillTreeData.java | 24 ++++++++++----- .../gameserver/data/xml/SkillTreeData.java | 24 ++++++++++----- .../gameserver/data/xml/SkillTreeData.java | 24 ++++++++++----- 25 files changed, 376 insertions(+), 214 deletions(-) diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index d25646d17f..0b924284fb 100644 --- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -747,27 +747,34 @@ public class SkillTreeData implements IXmlReader */ public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { - // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); final Set removed = new HashSet<>(); - for (int i = 0; i < 1000; i++) // Infinite loop warning + List learnable; + for (int i = 0; i < 1000; i++) { - final List learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); + learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); if (learnable.isEmpty()) { - // No more skills to learn break; } - if (learnable.stream().allMatch(skillLearn -> removed.contains(skillLearn.getSkillId()))) + // All remaining skills have been removed. + boolean allRemoved = true; + SEARCH: for (SkillLearn skillLearn : learnable) + { + if (!removed.contains(skillLearn.getSkillId())) + { + allRemoved = false; + break SEARCH; + } + } + if (allRemoved) { - // All remaining skills has been removed break; } for (SkillLearn skillLearn : learnable) { - final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) { @@ -791,8 +798,9 @@ public class SkillTreeData implements IXmlReader } } - if (!removed.contains(skill.getId())) + if (!removed.contains(skillLearn.getSkillId())) { + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); holder.addSkill(skill); } } diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index d25646d17f..0b924284fb 100644 --- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -747,27 +747,34 @@ public class SkillTreeData implements IXmlReader */ public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { - // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); final Set removed = new HashSet<>(); - for (int i = 0; i < 1000; i++) // Infinite loop warning + List learnable; + for (int i = 0; i < 1000; i++) { - final List learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); + learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); if (learnable.isEmpty()) { - // No more skills to learn break; } - if (learnable.stream().allMatch(skillLearn -> removed.contains(skillLearn.getSkillId()))) + // All remaining skills have been removed. + boolean allRemoved = true; + SEARCH: for (SkillLearn skillLearn : learnable) + { + if (!removed.contains(skillLearn.getSkillId())) + { + allRemoved = false; + break SEARCH; + } + } + if (allRemoved) { - // All remaining skills has been removed break; } for (SkillLearn skillLearn : learnable) { - final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) { @@ -791,8 +798,9 @@ public class SkillTreeData implements IXmlReader } } - if (!removed.contains(skill.getId())) + if (!removed.contains(skillLearn.getSkillId())) { + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); holder.addSkill(skill); } } diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index d25646d17f..0b924284fb 100644 --- a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -747,27 +747,34 @@ public class SkillTreeData implements IXmlReader */ public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { - // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); final Set removed = new HashSet<>(); - for (int i = 0; i < 1000; i++) // Infinite loop warning + List learnable; + for (int i = 0; i < 1000; i++) { - final List learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); + learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); if (learnable.isEmpty()) { - // No more skills to learn break; } - if (learnable.stream().allMatch(skillLearn -> removed.contains(skillLearn.getSkillId()))) + // All remaining skills have been removed. + boolean allRemoved = true; + SEARCH: for (SkillLearn skillLearn : learnable) + { + if (!removed.contains(skillLearn.getSkillId())) + { + allRemoved = false; + break SEARCH; + } + } + if (allRemoved) { - // All remaining skills has been removed break; } for (SkillLearn skillLearn : learnable) { - final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) { @@ -791,8 +798,9 @@ public class SkillTreeData implements IXmlReader } } - if (!removed.contains(skill.getId())) + if (!removed.contains(skillLearn.getSkillId())) { + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); holder.addSkill(skill); } } diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index d25646d17f..0b924284fb 100644 --- a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -747,27 +747,34 @@ public class SkillTreeData implements IXmlReader */ public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { - // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); final Set removed = new HashSet<>(); - for (int i = 0; i < 1000; i++) // Infinite loop warning + List learnable; + for (int i = 0; i < 1000; i++) { - final List learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); + learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); if (learnable.isEmpty()) { - // No more skills to learn break; } - if (learnable.stream().allMatch(skillLearn -> removed.contains(skillLearn.getSkillId()))) + // All remaining skills have been removed. + boolean allRemoved = true; + SEARCH: for (SkillLearn skillLearn : learnable) + { + if (!removed.contains(skillLearn.getSkillId())) + { + allRemoved = false; + break SEARCH; + } + } + if (allRemoved) { - // All remaining skills has been removed break; } for (SkillLearn skillLearn : learnable) { - final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) { @@ -791,8 +798,9 @@ public class SkillTreeData implements IXmlReader } } - if (!removed.contains(skill.getId())) + if (!removed.contains(skillLearn.getSkillId())) { + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); holder.addSkill(skill); } } diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index d25646d17f..0b924284fb 100644 --- a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -747,27 +747,34 @@ public class SkillTreeData implements IXmlReader */ public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { - // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); final Set removed = new HashSet<>(); - for (int i = 0; i < 1000; i++) // Infinite loop warning + List learnable; + for (int i = 0; i < 1000; i++) { - final List learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); + learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); if (learnable.isEmpty()) { - // No more skills to learn break; } - if (learnable.stream().allMatch(skillLearn -> removed.contains(skillLearn.getSkillId()))) + // All remaining skills have been removed. + boolean allRemoved = true; + SEARCH: for (SkillLearn skillLearn : learnable) + { + if (!removed.contains(skillLearn.getSkillId())) + { + allRemoved = false; + break SEARCH; + } + } + if (allRemoved) { - // All remaining skills has been removed break; } for (SkillLearn skillLearn : learnable) { - final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) { @@ -791,8 +798,9 @@ public class SkillTreeData implements IXmlReader } } - if (!removed.contains(skill.getId())) + if (!removed.contains(skillLearn.getSkillId())) { + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); holder.addSkill(skill); } } diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index d25646d17f..0b924284fb 100644 --- a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -747,27 +747,34 @@ public class SkillTreeData implements IXmlReader */ public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { - // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); final Set removed = new HashSet<>(); - for (int i = 0; i < 1000; i++) // Infinite loop warning + List learnable; + for (int i = 0; i < 1000; i++) { - final List learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); + learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); if (learnable.isEmpty()) { - // No more skills to learn break; } - if (learnable.stream().allMatch(skillLearn -> removed.contains(skillLearn.getSkillId()))) + // All remaining skills have been removed. + boolean allRemoved = true; + SEARCH: for (SkillLearn skillLearn : learnable) + { + if (!removed.contains(skillLearn.getSkillId())) + { + allRemoved = false; + break SEARCH; + } + } + if (allRemoved) { - // All remaining skills has been removed break; } for (SkillLearn skillLearn : learnable) { - final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) { @@ -791,8 +798,9 @@ public class SkillTreeData implements IXmlReader } } - if (!removed.contains(skill.getId())) + if (!removed.contains(skillLearn.getSkillId())) { + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); holder.addSkill(skill); } } diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index f9e7c4a5a0..5386b0cb2e 100644 --- a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -750,27 +750,34 @@ public class SkillTreeData implements IXmlReader */ public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems) { - // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); final Set removed = new HashSet<>(); - for (int i = 0; i < 1000; i++) // Infinite loop warning + List learnable; + for (int i = 0; i < 1000; i++) { - final List learnable = getAvailableSkills(player, classId, includeByFs, includeByFp, includeAutoGet, includeRequiredItems, holder); + learnable = getAvailableSkills(player, classId, includeByFs, includeByFp, includeAutoGet, includeRequiredItems, holder); if (learnable.isEmpty()) { - // No more skills to learn break; } - if (learnable.stream().allMatch(skillLearn -> removed.contains(skillLearn.getSkillId()))) + // All remaining skills have been removed. + boolean allRemoved = true; + SEARCH: for (SkillLearn skillLearn : learnable) + { + if (!removed.contains(skillLearn.getSkillId())) + { + allRemoved = false; + break SEARCH; + } + } + if (allRemoved) { - // All remaining skills has been removed break; } for (SkillLearn skillLearn : learnable) { - final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) { @@ -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); } } diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index c75b3e4843..349f94593c 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -750,27 +750,34 @@ public class SkillTreeData implements IXmlReader */ public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems) { - // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); final Set removed = new HashSet<>(); - for (int i = 0; i < 1000; i++) // Infinite loop warning + List learnable; + for (int i = 0; i < 1000; i++) { - final List learnable = getAvailableSkills(player, classId, includeByFs, includeByFp, includeAutoGet, includeRequiredItems, holder); + learnable = getAvailableSkills(player, classId, includeByFs, includeByFp, includeAutoGet, includeRequiredItems, holder); if (learnable.isEmpty()) { - // No more skills to learn break; } - if (learnable.stream().allMatch(skillLearn -> removed.contains(skillLearn.getSkillId()))) + // All remaining skills have been removed. + boolean allRemoved = true; + SEARCH: for (SkillLearn skillLearn : learnable) + { + if (!removed.contains(skillLearn.getSkillId())) + { + allRemoved = false; + break SEARCH; + } + } + if (allRemoved) { - // All remaining skills has been removed break; } for (SkillLearn skillLearn : learnable) { - final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) { @@ -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); } } diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index c75b3e4843..349f94593c 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -750,27 +750,34 @@ public class SkillTreeData implements IXmlReader */ public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems) { - // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); final Set removed = new HashSet<>(); - for (int i = 0; i < 1000; i++) // Infinite loop warning + List learnable; + for (int i = 0; i < 1000; i++) { - final List learnable = getAvailableSkills(player, classId, includeByFs, includeByFp, includeAutoGet, includeRequiredItems, holder); + learnable = getAvailableSkills(player, classId, includeByFs, includeByFp, includeAutoGet, includeRequiredItems, holder); if (learnable.isEmpty()) { - // No more skills to learn break; } - if (learnable.stream().allMatch(skillLearn -> removed.contains(skillLearn.getSkillId()))) + // All remaining skills have been removed. + boolean allRemoved = true; + SEARCH: for (SkillLearn skillLearn : learnable) + { + if (!removed.contains(skillLearn.getSkillId())) + { + allRemoved = false; + break SEARCH; + } + } + if (allRemoved) { - // All remaining skills has been removed break; } for (SkillLearn skillLearn : learnable) { - final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) { @@ -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); } } diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index c75b3e4843..349f94593c 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -750,27 +750,34 @@ public class SkillTreeData implements IXmlReader */ public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems) { - // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); final Set removed = new HashSet<>(); - for (int i = 0; i < 1000; i++) // Infinite loop warning + List learnable; + for (int i = 0; i < 1000; i++) { - final List learnable = getAvailableSkills(player, classId, includeByFs, includeByFp, includeAutoGet, includeRequiredItems, holder); + learnable = getAvailableSkills(player, classId, includeByFs, includeByFp, includeAutoGet, includeRequiredItems, holder); if (learnable.isEmpty()) { - // No more skills to learn break; } - if (learnable.stream().allMatch(skillLearn -> removed.contains(skillLearn.getSkillId()))) + // All remaining skills have been removed. + boolean allRemoved = true; + SEARCH: for (SkillLearn skillLearn : learnable) + { + if (!removed.contains(skillLearn.getSkillId())) + { + allRemoved = false; + break SEARCH; + } + } + if (allRemoved) { - // All remaining skills has been removed break; } for (SkillLearn skillLearn : learnable) { - final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) { @@ -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); } } diff --git a/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index c75b3e4843..349f94593c 100644 --- a/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -750,27 +750,34 @@ public class SkillTreeData implements IXmlReader */ public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems) { - // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); final Set removed = new HashSet<>(); - for (int i = 0; i < 1000; i++) // Infinite loop warning + List learnable; + for (int i = 0; i < 1000; i++) { - final List learnable = getAvailableSkills(player, classId, includeByFs, includeByFp, includeAutoGet, includeRequiredItems, holder); + learnable = getAvailableSkills(player, classId, includeByFs, includeByFp, includeAutoGet, includeRequiredItems, holder); if (learnable.isEmpty()) { - // No more skills to learn break; } - if (learnable.stream().allMatch(skillLearn -> removed.contains(skillLearn.getSkillId()))) + // All remaining skills have been removed. + boolean allRemoved = true; + SEARCH: for (SkillLearn skillLearn : learnable) + { + if (!removed.contains(skillLearn.getSkillId())) + { + allRemoved = false; + break SEARCH; + } + } + if (allRemoved) { - // All remaining skills has been removed break; } for (SkillLearn skillLearn : learnable) { - final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) { @@ -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); } } diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/data/sql/SkillTreeTable.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/data/sql/SkillTreeTable.java index ac7a4f829e..c20e63c1f0 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/data/sql/SkillTreeTable.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/data/sql/SkillTreeTable.java @@ -597,33 +597,28 @@ public class SkillTreeTable return 0; } - /** - * @param player - * @param classId - * @return - */ public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId) { - // Get available skills - int unLearnable = 0; final PlayerSkillHolder holder = new PlayerSkillHolder(player.getSkills()); - List learnable = getAvailableSkills(player, classId, holder); - while (learnable.size() > unLearnable) + List learnable; + 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()); - if ((sk == null) || ((sk.getId() == Skill.SKILL_DIVINE_INSPIRATION) && !Config.AUTO_LEARN_DIVINE_INSPIRATION && !player.isGM())) + break; + } + + 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; } - 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(); } diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/data/sql/SkillTreeTable.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/data/sql/SkillTreeTable.java index ac7a4f829e..c20e63c1f0 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/data/sql/SkillTreeTable.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/data/sql/SkillTreeTable.java @@ -597,33 +597,28 @@ public class SkillTreeTable return 0; } - /** - * @param player - * @param classId - * @return - */ public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId) { - // Get available skills - int unLearnable = 0; final PlayerSkillHolder holder = new PlayerSkillHolder(player.getSkills()); - List learnable = getAvailableSkills(player, classId, holder); - while (learnable.size() > unLearnable) + List learnable; + 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()); - if ((sk == null) || ((sk.getId() == Skill.SKILL_DIVINE_INSPIRATION) && !Config.AUTO_LEARN_DIVINE_INSPIRATION && !player.isGM())) + break; + } + + 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; } - 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(); } diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index d759fc34b0..46fbbb78d2 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -578,19 +578,21 @@ public class SkillTreeData implements IXmlReader */ public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { - // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); - List learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); - for (int i = 0; i < 1000; i++) // Infinite loop warning + List learnable; + for (int i = 0; i < 1000; i++) { + learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); + if (learnable.isEmpty()) + { + break; + } + for (SkillLearn skillLearn : learnable) { final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); holder.addSkill(skill); } - - // Get new available skills, some skills depend of previous skills to be available. - learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); } return holder.getSkills().values(); } diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index d759fc34b0..46fbbb78d2 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -578,19 +578,21 @@ public class SkillTreeData implements IXmlReader */ public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { - // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); - List learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); - for (int i = 0; i < 1000; i++) // Infinite loop warning + List learnable; + for (int i = 0; i < 1000; i++) { + learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); + if (learnable.isEmpty()) + { + break; + } + for (SkillLearn skillLearn : learnable) { final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); holder.addSkill(skill); } - - // Get new available skills, some skills depend of previous skills to be available. - learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); } return holder.getSkills().values(); } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index c3602c4e70..fab7986f2e 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -747,27 +747,34 @@ public class SkillTreeData implements IXmlReader */ public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { - // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); final Set removed = new HashSet<>(); - for (int i = 0; i < 1000; i++) // Infinite loop warning + List learnable; + for (int i = 0; i < 1000; i++) { - final List learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); + learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); if (learnable.isEmpty()) { - // No more skills to learn break; } - if (learnable.stream().allMatch(skillLearn -> removed.contains(skillLearn.getSkillId()))) + // All remaining skills have been removed. + boolean allRemoved = true; + SEARCH: for (SkillLearn skillLearn : learnable) + { + if (!removed.contains(skillLearn.getSkillId())) + { + allRemoved = false; + break SEARCH; + } + } + if (allRemoved) { - // All remaining skills has been removed break; } for (SkillLearn skillLearn : learnable) { - final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) { @@ -791,8 +798,9 @@ public class SkillTreeData implements IXmlReader } } - if (!removed.contains(skill.getId())) + if (!removed.contains(skillLearn.getSkillId())) { + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); holder.addSkill(skill); } } diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index c3602c4e70..fab7986f2e 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -747,27 +747,34 @@ public class SkillTreeData implements IXmlReader */ public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { - // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); final Set removed = new HashSet<>(); - for (int i = 0; i < 1000; i++) // Infinite loop warning + List learnable; + for (int i = 0; i < 1000; i++) { - final List learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); + learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); if (learnable.isEmpty()) { - // No more skills to learn break; } - if (learnable.stream().allMatch(skillLearn -> removed.contains(skillLearn.getSkillId()))) + // All remaining skills have been removed. + boolean allRemoved = true; + SEARCH: for (SkillLearn skillLearn : learnable) + { + if (!removed.contains(skillLearn.getSkillId())) + { + allRemoved = false; + break SEARCH; + } + } + if (allRemoved) { - // All remaining skills has been removed break; } for (SkillLearn skillLearn : learnable) { - final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) { @@ -791,8 +798,9 @@ public class SkillTreeData implements IXmlReader } } - if (!removed.contains(skill.getId())) + if (!removed.contains(skillLearn.getSkillId())) { + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); holder.addSkill(skill); } } diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index c3602c4e70..fab7986f2e 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -747,27 +747,34 @@ public class SkillTreeData implements IXmlReader */ public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { - // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); final Set removed = new HashSet<>(); - for (int i = 0; i < 1000; i++) // Infinite loop warning + List learnable; + for (int i = 0; i < 1000; i++) { - final List learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); + learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); if (learnable.isEmpty()) { - // No more skills to learn break; } - if (learnable.stream().allMatch(skillLearn -> removed.contains(skillLearn.getSkillId()))) + // All remaining skills have been removed. + boolean allRemoved = true; + SEARCH: for (SkillLearn skillLearn : learnable) + { + if (!removed.contains(skillLearn.getSkillId())) + { + allRemoved = false; + break SEARCH; + } + } + if (allRemoved) { - // All remaining skills has been removed break; } for (SkillLearn skillLearn : learnable) { - final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) { @@ -791,8 +798,9 @@ public class SkillTreeData implements IXmlReader } } - if (!removed.contains(skill.getId())) + if (!removed.contains(skillLearn.getSkillId())) { + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); holder.addSkill(skill); } } diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index c3602c4e70..fab7986f2e 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -747,27 +747,34 @@ public class SkillTreeData implements IXmlReader */ public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { - // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); final Set removed = new HashSet<>(); - for (int i = 0; i < 1000; i++) // Infinite loop warning + List learnable; + for (int i = 0; i < 1000; i++) { - final List learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); + learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); if (learnable.isEmpty()) { - // No more skills to learn break; } - if (learnable.stream().allMatch(skillLearn -> removed.contains(skillLearn.getSkillId()))) + // All remaining skills have been removed. + boolean allRemoved = true; + SEARCH: for (SkillLearn skillLearn : learnable) + { + if (!removed.contains(skillLearn.getSkillId())) + { + allRemoved = false; + break SEARCH; + } + } + if (allRemoved) { - // All remaining skills has been removed break; } for (SkillLearn skillLearn : learnable) { - final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) { @@ -791,8 +798,9 @@ public class SkillTreeData implements IXmlReader } } - if (!removed.contains(skill.getId())) + if (!removed.contains(skillLearn.getSkillId())) { + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); holder.addSkill(skill); } } diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index c3602c4e70..fab7986f2e 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -747,27 +747,34 @@ public class SkillTreeData implements IXmlReader */ public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { - // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); final Set removed = new HashSet<>(); - for (int i = 0; i < 1000; i++) // Infinite loop warning + List learnable; + for (int i = 0; i < 1000; i++) { - final List learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); + learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); if (learnable.isEmpty()) { - // No more skills to learn break; } - if (learnable.stream().allMatch(skillLearn -> removed.contains(skillLearn.getSkillId()))) + // All remaining skills have been removed. + boolean allRemoved = true; + SEARCH: for (SkillLearn skillLearn : learnable) + { + if (!removed.contains(skillLearn.getSkillId())) + { + allRemoved = false; + break SEARCH; + } + } + if (allRemoved) { - // All remaining skills has been removed break; } for (SkillLearn skillLearn : learnable) { - final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) { @@ -791,8 +798,9 @@ public class SkillTreeData implements IXmlReader } } - if (!removed.contains(skill.getId())) + if (!removed.contains(skillLearn.getSkillId())) { + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); holder.addSkill(skill); } } diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index 82e730341a..44f1ea604d 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -745,27 +745,34 @@ public class SkillTreeData implements IXmlReader */ public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { - // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); final Set removed = new HashSet<>(); - for (int i = 0; i < 1000; i++) // Infinite loop warning + List learnable; + for (int i = 0; i < 1000; i++) { - final List learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); + learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); if (learnable.isEmpty()) { - // No more skills to learn break; } - if (learnable.stream().allMatch(skillLearn -> removed.contains(skillLearn.getSkillId()))) + // All remaining skills have been removed. + boolean allRemoved = true; + SEARCH: for (SkillLearn skillLearn : learnable) + { + if (!removed.contains(skillLearn.getSkillId())) + { + allRemoved = false; + break SEARCH; + } + } + if (allRemoved) { - // All remaining skills has been removed break; } for (SkillLearn skillLearn : learnable) { - final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) { @@ -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); } } diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index c3602c4e70..fab7986f2e 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -747,27 +747,34 @@ public class SkillTreeData implements IXmlReader */ public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { - // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); final Set removed = new HashSet<>(); - for (int i = 0; i < 1000; i++) // Infinite loop warning + List learnable; + for (int i = 0; i < 1000; i++) { - final List learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); + learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); if (learnable.isEmpty()) { - // No more skills to learn break; } - if (learnable.stream().allMatch(skillLearn -> removed.contains(skillLearn.getSkillId()))) + // All remaining skills have been removed. + boolean allRemoved = true; + SEARCH: for (SkillLearn skillLearn : learnable) + { + if (!removed.contains(skillLearn.getSkillId())) + { + allRemoved = false; + break SEARCH; + } + } + if (allRemoved) { - // All remaining skills has been removed break; } for (SkillLearn skillLearn : learnable) { - final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) { @@ -791,8 +798,9 @@ public class SkillTreeData implements IXmlReader } } - if (!removed.contains(skill.getId())) + if (!removed.contains(skillLearn.getSkillId())) { + final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); holder.addSkill(skill); } } diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index 82e730341a..44f1ea604d 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -745,27 +745,34 @@ public class SkillTreeData implements IXmlReader */ public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { - // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); final Set removed = new HashSet<>(); - for (int i = 0; i < 1000; i++) // Infinite loop warning + List learnable; + for (int i = 0; i < 1000; i++) { - final List learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); + learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); if (learnable.isEmpty()) { - // No more skills to learn break; } - if (learnable.stream().allMatch(skillLearn -> removed.contains(skillLearn.getSkillId()))) + // All remaining skills have been removed. + boolean allRemoved = true; + SEARCH: for (SkillLearn skillLearn : learnable) + { + if (!removed.contains(skillLearn.getSkillId())) + { + allRemoved = false; + break SEARCH; + } + } + if (allRemoved) { - // All remaining skills has been removed break; } for (SkillLearn skillLearn : learnable) { - final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) { @@ -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); } } diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index 82e730341a..44f1ea604d 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -745,27 +745,34 @@ public class SkillTreeData implements IXmlReader */ public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { - // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); final Set removed = new HashSet<>(); - for (int i = 0; i < 1000; i++) // Infinite loop warning + List learnable; + for (int i = 0; i < 1000; i++) { - final List learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); + learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); if (learnable.isEmpty()) { - // No more skills to learn break; } - if (learnable.stream().allMatch(skillLearn -> removed.contains(skillLearn.getSkillId()))) + // All remaining skills have been removed. + boolean allRemoved = true; + SEARCH: for (SkillLearn skillLearn : learnable) + { + if (!removed.contains(skillLearn.getSkillId())) + { + allRemoved = false; + break SEARCH; + } + } + if (allRemoved) { - // All remaining skills has been removed break; } for (SkillLearn skillLearn : learnable) { - final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) { @@ -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); } } diff --git a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java index 82e730341a..44f1ea604d 100644 --- a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java +++ b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/data/xml/SkillTreeData.java @@ -745,27 +745,34 @@ public class SkillTreeData implements IXmlReader */ public Collection getAllAvailableSkills(PlayerInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems) { - // Get available skills final PlayerSkillHolder holder = new PlayerSkillHolder(player); final Set removed = new HashSet<>(); - for (int i = 0; i < 1000; i++) // Infinite loop warning + List learnable; + for (int i = 0; i < 1000; i++) { - final List learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); + learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, includeRequiredItems, holder); if (learnable.isEmpty()) { - // No more skills to learn break; } - if (learnable.stream().allMatch(skillLearn -> removed.contains(skillLearn.getSkillId()))) + // All remaining skills have been removed. + boolean allRemoved = true; + SEARCH: for (SkillLearn skillLearn : learnable) + { + if (!removed.contains(skillLearn.getSkillId())) + { + allRemoved = false; + break SEARCH; + } + } + if (allRemoved) { - // All remaining skills has been removed break; } for (SkillLearn skillLearn : learnable) { - final Skill skill = SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()); // Cleanup skills that has to be removed for (int skillId : skillLearn.getRemoveSkills()) { @@ -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); } }