Fixed AcquireSkillList related inconsistencies.
This commit is contained in:
@@ -681,7 +681,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
*/
|
*/
|
||||||
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
||||||
{
|
{
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
||||||
if (skills.isEmpty())
|
if (skills.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -1491,7 +1491,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
||||||
{
|
{
|
||||||
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
if (completeClassSkillTree.isEmpty())
|
if (completeClassSkillTree.isEmpty())
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
@@ -63,18 +63,20 @@ public class AcquireSkillList implements IClientOutgoingPacket
|
|||||||
packet.writeQ(skill.getLevelUpSp());
|
packet.writeQ(skill.getLevelUpSp());
|
||||||
packet.writeC(skill.getGetLevel());
|
packet.writeC(skill.getGetLevel());
|
||||||
packet.writeC(skill.getDualClassLevel());
|
packet.writeC(skill.getDualClassLevel());
|
||||||
|
|
||||||
packet.writeC(skill.getRequiredItems().size());
|
packet.writeC(skill.getRequiredItems().size());
|
||||||
for (ItemHolder item : skill.getRequiredItems())
|
for (ItemHolder item : skill.getRequiredItems())
|
||||||
{
|
{
|
||||||
packet.writeD(item.getId());
|
packet.writeD(item.getId());
|
||||||
packet.writeQ(item.getCount());
|
packet.writeQ(item.getCount());
|
||||||
}
|
}
|
||||||
final Collection<Skill> skillRem = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
|
||||||
packet.writeC(skillRem.size());
|
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
for (Skill skillRemove : skillRem)
|
packet.writeC(removeSkills.size());
|
||||||
|
for (Skill removed : removeSkills)
|
||||||
{
|
{
|
||||||
packet.writeD(skillRemove.getId());
|
packet.writeD(removed.getId());
|
||||||
packet.writeH(skillRemove.getLevel());
|
packet.writeH(removed.getLevel());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@@ -681,7 +681,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
*/
|
*/
|
||||||
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
||||||
{
|
{
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
||||||
if (skills.isEmpty())
|
if (skills.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -1491,7 +1491,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
||||||
{
|
{
|
||||||
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
if (completeClassSkillTree.isEmpty())
|
if (completeClassSkillTree.isEmpty())
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
@@ -59,22 +59,24 @@ public class AcquireSkillList implements IClientOutgoingPacket
|
|||||||
for (SkillLearn skill : _learnable)
|
for (SkillLearn skill : _learnable)
|
||||||
{
|
{
|
||||||
packet.writeD(skill.getSkillId());
|
packet.writeD(skill.getSkillId());
|
||||||
packet.writeD(skill.getSkillLevel());
|
packet.writeD(skill.getSkillLevel()); // Main writeD, Classic writeH.
|
||||||
packet.writeQ(skill.getLevelUpSp());
|
packet.writeQ(skill.getLevelUpSp());
|
||||||
packet.writeC(skill.getGetLevel());
|
packet.writeC(skill.getGetLevel());
|
||||||
packet.writeC(skill.getDualClassLevel());
|
packet.writeC(skill.getDualClassLevel());
|
||||||
|
|
||||||
packet.writeC(skill.getRequiredItems().size());
|
packet.writeC(skill.getRequiredItems().size());
|
||||||
for (ItemHolder item : skill.getRequiredItems())
|
for (ItemHolder item : skill.getRequiredItems())
|
||||||
{
|
{
|
||||||
packet.writeD(item.getId());
|
packet.writeD(item.getId());
|
||||||
packet.writeQ(item.getCount());
|
packet.writeQ(item.getCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
packet.writeC(removeSkills.size());
|
packet.writeC(removeSkills.size());
|
||||||
for (Skill removed : removeSkills)
|
for (Skill removed : removeSkills)
|
||||||
{
|
{
|
||||||
packet.writeD(removed.getId());
|
packet.writeD(removed.getId());
|
||||||
packet.writeD(removed.getLevel());
|
packet.writeD(removed.getLevel()); // Main writeD, Classic writeH.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@@ -681,7 +681,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
*/
|
*/
|
||||||
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
||||||
{
|
{
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
||||||
if (skills.isEmpty())
|
if (skills.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -1491,7 +1491,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
||||||
{
|
{
|
||||||
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
if (completeClassSkillTree.isEmpty())
|
if (completeClassSkillTree.isEmpty())
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
@@ -59,22 +59,24 @@ public class AcquireSkillList implements IClientOutgoingPacket
|
|||||||
for (SkillLearn skill : _learnable)
|
for (SkillLearn skill : _learnable)
|
||||||
{
|
{
|
||||||
packet.writeD(skill.getSkillId());
|
packet.writeD(skill.getSkillId());
|
||||||
packet.writeD(skill.getSkillLevel());
|
packet.writeD(skill.getSkillLevel()); // Main writeD, Classic writeH.
|
||||||
packet.writeQ(skill.getLevelUpSp());
|
packet.writeQ(skill.getLevelUpSp());
|
||||||
packet.writeC(skill.getGetLevel());
|
packet.writeC(skill.getGetLevel());
|
||||||
packet.writeC(skill.getDualClassLevel());
|
packet.writeC(skill.getDualClassLevel());
|
||||||
|
|
||||||
packet.writeC(skill.getRequiredItems().size());
|
packet.writeC(skill.getRequiredItems().size());
|
||||||
for (ItemHolder item : skill.getRequiredItems())
|
for (ItemHolder item : skill.getRequiredItems())
|
||||||
{
|
{
|
||||||
packet.writeD(item.getId());
|
packet.writeD(item.getId());
|
||||||
packet.writeQ(item.getCount());
|
packet.writeQ(item.getCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
packet.writeC(removeSkills.size());
|
packet.writeC(removeSkills.size());
|
||||||
for (Skill removed : removeSkills)
|
for (Skill removed : removeSkills)
|
||||||
{
|
{
|
||||||
packet.writeD(removed.getId());
|
packet.writeD(removed.getId());
|
||||||
packet.writeD(removed.getLevel());
|
packet.writeD(removed.getLevel()); // Main writeD, Classic writeH.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@@ -681,7 +681,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
*/
|
*/
|
||||||
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
||||||
{
|
{
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
||||||
if (skills.isEmpty())
|
if (skills.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -1491,7 +1491,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
||||||
{
|
{
|
||||||
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
if (completeClassSkillTree.isEmpty())
|
if (completeClassSkillTree.isEmpty())
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
@@ -59,22 +59,24 @@ public class AcquireSkillList implements IClientOutgoingPacket
|
|||||||
for (SkillLearn skill : _learnable)
|
for (SkillLearn skill : _learnable)
|
||||||
{
|
{
|
||||||
packet.writeD(skill.getSkillId());
|
packet.writeD(skill.getSkillId());
|
||||||
packet.writeD(skill.getSkillLevel());
|
packet.writeD(skill.getSkillLevel()); // Main writeD, Classic writeH.
|
||||||
packet.writeQ(skill.getLevelUpSp());
|
packet.writeQ(skill.getLevelUpSp());
|
||||||
packet.writeC(skill.getGetLevel());
|
packet.writeC(skill.getGetLevel());
|
||||||
packet.writeC(skill.getDualClassLevel());
|
packet.writeC(skill.getDualClassLevel());
|
||||||
|
|
||||||
packet.writeC(skill.getRequiredItems().size());
|
packet.writeC(skill.getRequiredItems().size());
|
||||||
for (ItemHolder item : skill.getRequiredItems())
|
for (ItemHolder item : skill.getRequiredItems())
|
||||||
{
|
{
|
||||||
packet.writeD(item.getId());
|
packet.writeD(item.getId());
|
||||||
packet.writeQ(item.getCount());
|
packet.writeQ(item.getCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
packet.writeC(removeSkills.size());
|
packet.writeC(removeSkills.size());
|
||||||
for (Skill removed : removeSkills)
|
for (Skill removed : removeSkills)
|
||||||
{
|
{
|
||||||
packet.writeD(removed.getId());
|
packet.writeD(removed.getId());
|
||||||
packet.writeD(removed.getLevel());
|
packet.writeD(removed.getLevel()); // Main writeD, Classic writeH.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@@ -681,7 +681,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
*/
|
*/
|
||||||
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
||||||
{
|
{
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
||||||
if (skills.isEmpty())
|
if (skills.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -1491,7 +1491,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
||||||
{
|
{
|
||||||
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
if (completeClassSkillTree.isEmpty())
|
if (completeClassSkillTree.isEmpty())
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
@@ -59,23 +59,25 @@ public class AcquireSkillList implements IClientOutgoingPacket
|
|||||||
for (SkillLearn skill : _learnable)
|
for (SkillLearn skill : _learnable)
|
||||||
{
|
{
|
||||||
packet.writeD(skill.getSkillId());
|
packet.writeD(skill.getSkillId());
|
||||||
packet.writeD(skill.getSkillLevel());
|
packet.writeD(skill.getSkillLevel()); // Main writeD, Classic writeH.
|
||||||
packet.writeQ(skill.getLevelUpSp());
|
packet.writeQ(skill.getLevelUpSp());
|
||||||
packet.writeC(skill.getGetLevel());
|
packet.writeC(skill.getGetLevel());
|
||||||
packet.writeC(skill.getDualClassLevel());
|
packet.writeC(skill.getDualClassLevel());
|
||||||
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
||||||
|
|
||||||
packet.writeC(skill.getRequiredItems().size());
|
packet.writeC(skill.getRequiredItems().size());
|
||||||
for (ItemHolder item : skill.getRequiredItems())
|
for (ItemHolder item : skill.getRequiredItems())
|
||||||
{
|
{
|
||||||
packet.writeD(item.getId());
|
packet.writeD(item.getId());
|
||||||
packet.writeQ(item.getCount());
|
packet.writeQ(item.getCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
packet.writeC(removeSkills.size());
|
packet.writeC(removeSkills.size());
|
||||||
for (Skill removed : removeSkills)
|
for (Skill removed : removeSkills)
|
||||||
{
|
{
|
||||||
packet.writeD(removed.getId());
|
packet.writeD(removed.getId());
|
||||||
packet.writeD(removed.getLevel());
|
packet.writeD(removed.getLevel()); // Main writeD, Classic writeH.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@@ -681,7 +681,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
*/
|
*/
|
||||||
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
||||||
{
|
{
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
||||||
if (skills.isEmpty())
|
if (skills.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -1491,7 +1491,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
||||||
{
|
{
|
||||||
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
if (completeClassSkillTree.isEmpty())
|
if (completeClassSkillTree.isEmpty())
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
@@ -59,23 +59,25 @@ public class AcquireSkillList implements IClientOutgoingPacket
|
|||||||
for (SkillLearn skill : _learnable)
|
for (SkillLearn skill : _learnable)
|
||||||
{
|
{
|
||||||
packet.writeD(skill.getSkillId());
|
packet.writeD(skill.getSkillId());
|
||||||
packet.writeD(skill.getSkillLevel());
|
packet.writeD(skill.getSkillLevel()); // Main writeD, Classic writeH.
|
||||||
packet.writeQ(skill.getLevelUpSp());
|
packet.writeQ(skill.getLevelUpSp());
|
||||||
packet.writeC(skill.getGetLevel());
|
packet.writeC(skill.getGetLevel());
|
||||||
packet.writeC(skill.getDualClassLevel());
|
packet.writeC(skill.getDualClassLevel());
|
||||||
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
||||||
|
|
||||||
packet.writeC(skill.getRequiredItems().size());
|
packet.writeC(skill.getRequiredItems().size());
|
||||||
for (ItemHolder item : skill.getRequiredItems())
|
for (ItemHolder item : skill.getRequiredItems())
|
||||||
{
|
{
|
||||||
packet.writeD(item.getId());
|
packet.writeD(item.getId());
|
||||||
packet.writeQ(item.getCount());
|
packet.writeQ(item.getCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
packet.writeC(removeSkills.size());
|
packet.writeC(removeSkills.size());
|
||||||
for (Skill removed : removeSkills)
|
for (Skill removed : removeSkills)
|
||||||
{
|
{
|
||||||
packet.writeD(removed.getId());
|
packet.writeD(removed.getId());
|
||||||
packet.writeD(removed.getLevel());
|
packet.writeD(removed.getLevel()); // Main writeD, Classic writeH.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@@ -683,7 +683,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
*/
|
*/
|
||||||
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
||||||
{
|
{
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
||||||
if (skills.isEmpty())
|
if (skills.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -1494,7 +1494,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet)
|
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet)
|
||||||
{
|
{
|
||||||
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
if (completeClassSkillTree.isEmpty())
|
if (completeClassSkillTree.isEmpty())
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
@@ -59,23 +59,25 @@ public class AcquireSkillList implements IClientOutgoingPacket
|
|||||||
for (SkillLearn skill : _learnable)
|
for (SkillLearn skill : _learnable)
|
||||||
{
|
{
|
||||||
packet.writeD(skill.getSkillId());
|
packet.writeD(skill.getSkillId());
|
||||||
packet.writeD(skill.getSkillLevel());
|
packet.writeD(skill.getSkillLevel()); // Main writeD, Classic writeH.
|
||||||
packet.writeQ(skill.getLevelUpSp());
|
packet.writeQ(skill.getLevelUpSp());
|
||||||
packet.writeC(skill.getGetLevel());
|
packet.writeC(skill.getGetLevel());
|
||||||
packet.writeC(skill.getDualClassLevel());
|
packet.writeC(skill.getDualClassLevel());
|
||||||
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
||||||
|
|
||||||
packet.writeC(skill.getRequiredItems().size());
|
packet.writeC(skill.getRequiredItems().size());
|
||||||
for (ItemHolder item : skill.getRequiredItems())
|
for (ItemHolder item : skill.getRequiredItems())
|
||||||
{
|
{
|
||||||
packet.writeD(item.getId());
|
packet.writeD(item.getId());
|
||||||
packet.writeQ(item.getCount());
|
packet.writeQ(item.getCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
packet.writeC(removeSkills.size());
|
packet.writeC(removeSkills.size());
|
||||||
for (Skill removed : removeSkills)
|
for (Skill removed : removeSkills)
|
||||||
{
|
{
|
||||||
packet.writeD(removed.getId());
|
packet.writeD(removed.getId());
|
||||||
packet.writeD(removed.getLevel());
|
packet.writeD(removed.getLevel()); // Main writeD, Classic writeH.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@@ -683,7 +683,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
*/
|
*/
|
||||||
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
||||||
{
|
{
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
||||||
if (skills.isEmpty())
|
if (skills.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -1494,7 +1494,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet)
|
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet)
|
||||||
{
|
{
|
||||||
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
if (completeClassSkillTree.isEmpty())
|
if (completeClassSkillTree.isEmpty())
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
@@ -59,23 +59,25 @@ public class AcquireSkillList implements IClientOutgoingPacket
|
|||||||
for (SkillLearn skill : _learnable)
|
for (SkillLearn skill : _learnable)
|
||||||
{
|
{
|
||||||
packet.writeD(skill.getSkillId());
|
packet.writeD(skill.getSkillId());
|
||||||
packet.writeD(skill.getSkillLevel());
|
packet.writeD(skill.getSkillLevel()); // Main writeD, Classic writeH.
|
||||||
packet.writeQ(skill.getLevelUpSp());
|
packet.writeQ(skill.getLevelUpSp());
|
||||||
packet.writeC(skill.getGetLevel());
|
packet.writeC(skill.getGetLevel());
|
||||||
packet.writeC(skill.getDualClassLevel());
|
packet.writeC(skill.getDualClassLevel());
|
||||||
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
||||||
|
|
||||||
packet.writeC(skill.getRequiredItems().size());
|
packet.writeC(skill.getRequiredItems().size());
|
||||||
for (ItemHolder item : skill.getRequiredItems())
|
for (ItemHolder item : skill.getRequiredItems())
|
||||||
{
|
{
|
||||||
packet.writeD(item.getId());
|
packet.writeD(item.getId());
|
||||||
packet.writeQ(item.getCount());
|
packet.writeQ(item.getCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
packet.writeC(removeSkills.size());
|
packet.writeC(removeSkills.size());
|
||||||
for (Skill removed : removeSkills)
|
for (Skill removed : removeSkills)
|
||||||
{
|
{
|
||||||
packet.writeD(removed.getId());
|
packet.writeD(removed.getId());
|
||||||
packet.writeD(removed.getLevel());
|
packet.writeD(removed.getLevel()); // Main writeD, Classic writeH.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@@ -689,7 +689,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
*/
|
*/
|
||||||
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
||||||
{
|
{
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
||||||
if (skills.isEmpty())
|
if (skills.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -1500,7 +1500,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet)
|
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet)
|
||||||
{
|
{
|
||||||
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
if (completeClassSkillTree.isEmpty())
|
if (completeClassSkillTree.isEmpty())
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
@@ -60,23 +60,25 @@ public class AcquireSkillList implements IClientOutgoingPacket
|
|||||||
for (SkillLearn skill : _learnable)
|
for (SkillLearn skill : _learnable)
|
||||||
{
|
{
|
||||||
packet.writeD(skill.getSkillId());
|
packet.writeD(skill.getSkillId());
|
||||||
packet.writeD(skill.getSkillLevel());
|
packet.writeD(skill.getSkillLevel()); // Main writeD, Essence writeH.
|
||||||
packet.writeQ(skill.getLevelUpSp());
|
packet.writeQ(skill.getLevelUpSp());
|
||||||
packet.writeC(skill.getGetLevel());
|
packet.writeC(skill.getGetLevel());
|
||||||
packet.writeC(skill.getDualClassLevel());
|
packet.writeC(skill.getDualClassLevel());
|
||||||
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
||||||
|
|
||||||
packet.writeC(skill.getRequiredItems().size());
|
packet.writeC(skill.getRequiredItems().size());
|
||||||
for (List<ItemHolder> item : skill.getRequiredItems())
|
for (List<ItemHolder> item : skill.getRequiredItems())
|
||||||
{
|
{
|
||||||
packet.writeD(item.get(0).getId());
|
packet.writeD(item.get(0).getId());
|
||||||
packet.writeQ(item.get(0).getCount());
|
packet.writeQ(item.get(0).getCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
packet.writeC(removeSkills.size());
|
packet.writeC(removeSkills.size());
|
||||||
for (Skill removed : removeSkills)
|
for (Skill removed : removeSkills)
|
||||||
{
|
{
|
||||||
packet.writeD(removed.getId());
|
packet.writeD(removed.getId());
|
||||||
packet.writeD(removed.getLevel());
|
packet.writeD(removed.getLevel()); // Main writeD, Essence writeH.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@@ -689,7 +689,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
*/
|
*/
|
||||||
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
||||||
{
|
{
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
||||||
if (skills.isEmpty())
|
if (skills.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -1500,7 +1500,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet)
|
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet)
|
||||||
{
|
{
|
||||||
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
if (completeClassSkillTree.isEmpty())
|
if (completeClassSkillTree.isEmpty())
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
@@ -60,23 +60,25 @@ public class AcquireSkillList implements IClientOutgoingPacket
|
|||||||
for (SkillLearn skill : _learnable)
|
for (SkillLearn skill : _learnable)
|
||||||
{
|
{
|
||||||
packet.writeD(skill.getSkillId());
|
packet.writeD(skill.getSkillId());
|
||||||
packet.writeD(skill.getSkillLevel());
|
packet.writeD(skill.getSkillLevel()); // Main writeD, Essence writeH.
|
||||||
packet.writeQ(skill.getLevelUpSp());
|
packet.writeQ(skill.getLevelUpSp());
|
||||||
packet.writeC(skill.getGetLevel());
|
packet.writeC(skill.getGetLevel());
|
||||||
packet.writeC(skill.getDualClassLevel());
|
packet.writeC(skill.getDualClassLevel());
|
||||||
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
||||||
|
|
||||||
packet.writeC(skill.getRequiredItems().size());
|
packet.writeC(skill.getRequiredItems().size());
|
||||||
for (List<ItemHolder> item : skill.getRequiredItems())
|
for (List<ItemHolder> item : skill.getRequiredItems())
|
||||||
{
|
{
|
||||||
packet.writeD(item.get(0).getId());
|
packet.writeD(item.get(0).getId());
|
||||||
packet.writeQ(item.get(0).getCount());
|
packet.writeQ(item.get(0).getCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
packet.writeC(removeSkills.size());
|
packet.writeC(removeSkills.size());
|
||||||
for (Skill removed : removeSkills)
|
for (Skill removed : removeSkills)
|
||||||
{
|
{
|
||||||
packet.writeD(removed.getId());
|
packet.writeD(removed.getId());
|
||||||
packet.writeD(removed.getLevel());
|
packet.writeD(removed.getLevel()); // Main writeD, Essence writeH.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@@ -689,7 +689,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
*/
|
*/
|
||||||
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
||||||
{
|
{
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
||||||
if (skills.isEmpty())
|
if (skills.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -1500,7 +1500,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet)
|
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet)
|
||||||
{
|
{
|
||||||
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
if (completeClassSkillTree.isEmpty())
|
if (completeClassSkillTree.isEmpty())
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
@@ -60,23 +60,25 @@ public class AcquireSkillList implements IClientOutgoingPacket
|
|||||||
for (SkillLearn skill : _learnable)
|
for (SkillLearn skill : _learnable)
|
||||||
{
|
{
|
||||||
packet.writeD(skill.getSkillId());
|
packet.writeD(skill.getSkillId());
|
||||||
packet.writeD(skill.getSkillLevel());
|
packet.writeD(skill.getSkillLevel()); // Main writeD, Essence writeH.
|
||||||
packet.writeQ(skill.getLevelUpSp());
|
packet.writeQ(skill.getLevelUpSp());
|
||||||
packet.writeC(skill.getGetLevel());
|
packet.writeC(skill.getGetLevel());
|
||||||
packet.writeC(skill.getDualClassLevel());
|
packet.writeC(skill.getDualClassLevel());
|
||||||
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
||||||
|
|
||||||
packet.writeC(skill.getRequiredItems().size());
|
packet.writeC(skill.getRequiredItems().size());
|
||||||
for (List<ItemHolder> item : skill.getRequiredItems())
|
for (List<ItemHolder> item : skill.getRequiredItems())
|
||||||
{
|
{
|
||||||
packet.writeD(item.get(0).getId());
|
packet.writeD(item.get(0).getId());
|
||||||
packet.writeQ(item.get(0).getCount());
|
packet.writeQ(item.get(0).getCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
packet.writeC(removeSkills.size());
|
packet.writeC(removeSkills.size());
|
||||||
for (Skill removed : removeSkills)
|
for (Skill removed : removeSkills)
|
||||||
{
|
{
|
||||||
packet.writeD(removed.getId());
|
packet.writeD(removed.getId());
|
||||||
packet.writeD(removed.getLevel());
|
packet.writeD(removed.getLevel()); // Main writeD, Essence writeH.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@@ -689,7 +689,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
*/
|
*/
|
||||||
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
||||||
{
|
{
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
||||||
if (skills.isEmpty())
|
if (skills.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -1500,7 +1500,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet)
|
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeByFp, boolean includeAutoGet)
|
||||||
{
|
{
|
||||||
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
if (completeClassSkillTree.isEmpty())
|
if (completeClassSkillTree.isEmpty())
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
@@ -60,23 +60,25 @@ public class AcquireSkillList implements IClientOutgoingPacket
|
|||||||
for (SkillLearn skill : _learnable)
|
for (SkillLearn skill : _learnable)
|
||||||
{
|
{
|
||||||
packet.writeD(skill.getSkillId());
|
packet.writeD(skill.getSkillId());
|
||||||
packet.writeD(skill.getSkillLevel());
|
packet.writeD(skill.getSkillLevel()); // Main writeD, Essence writeH.
|
||||||
packet.writeQ(skill.getLevelUpSp());
|
packet.writeQ(skill.getLevelUpSp());
|
||||||
packet.writeC(skill.getGetLevel());
|
packet.writeC(skill.getGetLevel());
|
||||||
packet.writeC(skill.getDualClassLevel());
|
packet.writeC(skill.getDualClassLevel());
|
||||||
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
||||||
|
|
||||||
packet.writeC(skill.getRequiredItems().size());
|
packet.writeC(skill.getRequiredItems().size());
|
||||||
for (List<ItemHolder> item : skill.getRequiredItems())
|
for (List<ItemHolder> item : skill.getRequiredItems())
|
||||||
{
|
{
|
||||||
packet.writeD(item.get(0).getId());
|
packet.writeD(item.get(0).getId());
|
||||||
packet.writeQ(item.get(0).getCount());
|
packet.writeQ(item.get(0).getCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
packet.writeC(removeSkills.size());
|
packet.writeC(removeSkills.size());
|
||||||
for (Skill removed : removeSkills)
|
for (Skill removed : removeSkills)
|
||||||
{
|
{
|
||||||
packet.writeD(removed.getId());
|
packet.writeD(removed.getId());
|
||||||
packet.writeD(removed.getLevel());
|
packet.writeD(removed.getLevel()); // Main writeD, Essence writeH.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@@ -680,7 +680,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
*/
|
*/
|
||||||
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
||||||
{
|
{
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
||||||
if (skills.isEmpty())
|
if (skills.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -1456,7 +1456,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
||||||
{
|
{
|
||||||
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
if (completeClassSkillTree.isEmpty())
|
if (completeClassSkillTree.isEmpty())
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
@@ -59,22 +59,24 @@ public class AcquireSkillList implements IClientOutgoingPacket
|
|||||||
for (SkillLearn skill : _learnable)
|
for (SkillLearn skill : _learnable)
|
||||||
{
|
{
|
||||||
packet.writeD(skill.getSkillId());
|
packet.writeD(skill.getSkillId());
|
||||||
packet.writeH(skill.getSkillLevel());
|
packet.writeH(skill.getSkillLevel()); // Main writeD, Classic writeH.
|
||||||
packet.writeQ(skill.getLevelUpSp());
|
packet.writeQ(skill.getLevelUpSp());
|
||||||
packet.writeC(skill.getGetLevel());
|
packet.writeC(skill.getGetLevel());
|
||||||
packet.writeC(0); // Skill dual class level.
|
packet.writeC(0); // Skill dual class level.
|
||||||
|
|
||||||
packet.writeC(skill.getRequiredItems().size());
|
packet.writeC(skill.getRequiredItems().size());
|
||||||
for (ItemHolder item : skill.getRequiredItems())
|
for (ItemHolder item : skill.getRequiredItems())
|
||||||
{
|
{
|
||||||
packet.writeD(item.getId());
|
packet.writeD(item.getId());
|
||||||
packet.writeQ(item.getCount());
|
packet.writeQ(item.getCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
packet.writeC(removeSkills.size());
|
packet.writeC(removeSkills.size());
|
||||||
for (Skill removed : removeSkills)
|
for (Skill removed : removeSkills)
|
||||||
{
|
{
|
||||||
packet.writeD(removed.getId());
|
packet.writeD(removed.getId());
|
||||||
packet.writeD(removed.getLevel());
|
packet.writeH(removed.getLevel()); // Main writeD, Classic writeH.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@@ -680,7 +680,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
*/
|
*/
|
||||||
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
||||||
{
|
{
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
||||||
if (skills.isEmpty())
|
if (skills.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -1456,7 +1456,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
||||||
{
|
{
|
||||||
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
if (completeClassSkillTree.isEmpty())
|
if (completeClassSkillTree.isEmpty())
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
@@ -59,22 +59,24 @@ public class AcquireSkillList implements IClientOutgoingPacket
|
|||||||
for (SkillLearn skill : _learnable)
|
for (SkillLearn skill : _learnable)
|
||||||
{
|
{
|
||||||
packet.writeD(skill.getSkillId());
|
packet.writeD(skill.getSkillId());
|
||||||
packet.writeH(skill.getSkillLevel());
|
packet.writeH(skill.getSkillLevel()); // Main writeD, Classic writeH.
|
||||||
packet.writeQ(skill.getLevelUpSp());
|
packet.writeQ(skill.getLevelUpSp());
|
||||||
packet.writeC(skill.getGetLevel());
|
packet.writeC(skill.getGetLevel());
|
||||||
packet.writeC(0); // Skill dual class level.
|
packet.writeC(0); // Skill dual class level.
|
||||||
|
|
||||||
packet.writeC(skill.getRequiredItems().size());
|
packet.writeC(skill.getRequiredItems().size());
|
||||||
for (ItemHolder item : skill.getRequiredItems())
|
for (ItemHolder item : skill.getRequiredItems())
|
||||||
{
|
{
|
||||||
packet.writeD(item.getId());
|
packet.writeD(item.getId());
|
||||||
packet.writeQ(item.getCount());
|
packet.writeQ(item.getCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
packet.writeC(removeSkills.size());
|
packet.writeC(removeSkills.size());
|
||||||
for (Skill removed : removeSkills)
|
for (Skill removed : removeSkills)
|
||||||
{
|
{
|
||||||
packet.writeD(removed.getId());
|
packet.writeD(removed.getId());
|
||||||
packet.writeD(removed.getLevel());
|
packet.writeH(removed.getLevel()); // Main writeD, Classic writeH.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@@ -680,7 +680,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
*/
|
*/
|
||||||
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
||||||
{
|
{
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
||||||
if (skills.isEmpty())
|
if (skills.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -1456,7 +1456,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
||||||
{
|
{
|
||||||
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
if (completeClassSkillTree.isEmpty())
|
if (completeClassSkillTree.isEmpty())
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
@@ -59,23 +59,25 @@ public class AcquireSkillList implements IClientOutgoingPacket
|
|||||||
for (SkillLearn skill : _learnable)
|
for (SkillLearn skill : _learnable)
|
||||||
{
|
{
|
||||||
packet.writeD(skill.getSkillId());
|
packet.writeD(skill.getSkillId());
|
||||||
packet.writeH(skill.getSkillLevel());
|
packet.writeH(skill.getSkillLevel()); // Main writeD, Classic writeH.
|
||||||
packet.writeQ(skill.getLevelUpSp());
|
packet.writeQ(skill.getLevelUpSp());
|
||||||
packet.writeC(skill.getGetLevel());
|
packet.writeC(skill.getGetLevel());
|
||||||
packet.writeC(0); // Skill dual class level.
|
packet.writeC(0); // Skill dual class level.
|
||||||
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
||||||
|
|
||||||
packet.writeC(skill.getRequiredItems().size());
|
packet.writeC(skill.getRequiredItems().size());
|
||||||
for (ItemHolder item : skill.getRequiredItems())
|
for (ItemHolder item : skill.getRequiredItems())
|
||||||
{
|
{
|
||||||
packet.writeD(item.getId());
|
packet.writeD(item.getId());
|
||||||
packet.writeQ(item.getCount());
|
packet.writeQ(item.getCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
packet.writeC(removeSkills.size());
|
packet.writeC(removeSkills.size());
|
||||||
for (Skill removed : removeSkills)
|
for (Skill removed : removeSkills)
|
||||||
{
|
{
|
||||||
packet.writeD(removed.getId());
|
packet.writeD(removed.getId());
|
||||||
packet.writeD(removed.getLevel());
|
packet.writeH(removed.getLevel()); // Main writeD, Classic writeH.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@@ -680,7 +680,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
*/
|
*/
|
||||||
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
||||||
{
|
{
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
||||||
if (skills.isEmpty())
|
if (skills.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -1456,7 +1456,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
||||||
{
|
{
|
||||||
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
if (completeClassSkillTree.isEmpty())
|
if (completeClassSkillTree.isEmpty())
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
@@ -59,23 +59,25 @@ public class AcquireSkillList implements IClientOutgoingPacket
|
|||||||
for (SkillLearn skill : _learnable)
|
for (SkillLearn skill : _learnable)
|
||||||
{
|
{
|
||||||
packet.writeD(skill.getSkillId());
|
packet.writeD(skill.getSkillId());
|
||||||
packet.writeH(skill.getSkillLevel());
|
packet.writeH(skill.getSkillLevel()); // Main writeD, Classic writeH.
|
||||||
packet.writeQ(skill.getLevelUpSp());
|
packet.writeQ(skill.getLevelUpSp());
|
||||||
packet.writeC(skill.getGetLevel());
|
packet.writeC(skill.getGetLevel());
|
||||||
packet.writeC(0); // Skill dual class level.
|
packet.writeC(0); // Skill dual class level.
|
||||||
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
||||||
|
|
||||||
packet.writeC(skill.getRequiredItems().size());
|
packet.writeC(skill.getRequiredItems().size());
|
||||||
for (ItemHolder item : skill.getRequiredItems())
|
for (ItemHolder item : skill.getRequiredItems())
|
||||||
{
|
{
|
||||||
packet.writeD(item.getId());
|
packet.writeD(item.getId());
|
||||||
packet.writeQ(item.getCount());
|
packet.writeQ(item.getCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
packet.writeC(removeSkills.size());
|
packet.writeC(removeSkills.size());
|
||||||
for (Skill removed : removeSkills)
|
for (Skill removed : removeSkills)
|
||||||
{
|
{
|
||||||
packet.writeD(removed.getId());
|
packet.writeD(removed.getId());
|
||||||
packet.writeD(removed.getLevel());
|
packet.writeH(removed.getLevel()); // Main writeD, Classic writeH.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@@ -680,7 +680,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
*/
|
*/
|
||||||
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
||||||
{
|
{
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
||||||
if (skills.isEmpty())
|
if (skills.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -1456,7 +1456,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
||||||
{
|
{
|
||||||
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
if (completeClassSkillTree.isEmpty())
|
if (completeClassSkillTree.isEmpty())
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
@@ -59,23 +59,25 @@ public class AcquireSkillList implements IClientOutgoingPacket
|
|||||||
for (SkillLearn skill : _learnable)
|
for (SkillLearn skill : _learnable)
|
||||||
{
|
{
|
||||||
packet.writeD(skill.getSkillId());
|
packet.writeD(skill.getSkillId());
|
||||||
packet.writeH(skill.getSkillLevel());
|
packet.writeH(skill.getSkillLevel()); // Main writeD, Classic writeH.
|
||||||
packet.writeQ(skill.getLevelUpSp());
|
packet.writeQ(skill.getLevelUpSp());
|
||||||
packet.writeC(skill.getGetLevel());
|
packet.writeC(skill.getGetLevel());
|
||||||
packet.writeC(0); // Skill dual class level.
|
packet.writeC(0); // Skill dual class level.
|
||||||
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
||||||
|
|
||||||
packet.writeC(skill.getRequiredItems().size());
|
packet.writeC(skill.getRequiredItems().size());
|
||||||
for (ItemHolder item : skill.getRequiredItems())
|
for (ItemHolder item : skill.getRequiredItems())
|
||||||
{
|
{
|
||||||
packet.writeD(item.getId());
|
packet.writeD(item.getId());
|
||||||
packet.writeQ(item.getCount());
|
packet.writeQ(item.getCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
packet.writeC(removeSkills.size());
|
packet.writeC(removeSkills.size());
|
||||||
for (Skill removed : removeSkills)
|
for (Skill removed : removeSkills)
|
||||||
{
|
{
|
||||||
packet.writeD(removed.getId());
|
packet.writeD(removed.getId());
|
||||||
packet.writeD(removed.getLevel());
|
packet.writeH(removed.getLevel()); // Main writeD, Classic writeH.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@@ -680,7 +680,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
*/
|
*/
|
||||||
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
||||||
{
|
{
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
||||||
if (skills.isEmpty())
|
if (skills.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -1456,7 +1456,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
||||||
{
|
{
|
||||||
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
if (completeClassSkillTree.isEmpty())
|
if (completeClassSkillTree.isEmpty())
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
@@ -59,23 +59,25 @@ public class AcquireSkillList implements IClientOutgoingPacket
|
|||||||
for (SkillLearn skill : _learnable)
|
for (SkillLearn skill : _learnable)
|
||||||
{
|
{
|
||||||
packet.writeD(skill.getSkillId());
|
packet.writeD(skill.getSkillId());
|
||||||
packet.writeH(skill.getSkillLevel());
|
packet.writeH(skill.getSkillLevel()); // Main writeD, Classic writeH.
|
||||||
packet.writeQ(skill.getLevelUpSp());
|
packet.writeQ(skill.getLevelUpSp());
|
||||||
packet.writeC(skill.getGetLevel());
|
packet.writeC(skill.getGetLevel());
|
||||||
packet.writeC(0); // Skill dual class level.
|
packet.writeC(0); // Skill dual class level.
|
||||||
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
||||||
|
|
||||||
packet.writeC(skill.getRequiredItems().size());
|
packet.writeC(skill.getRequiredItems().size());
|
||||||
for (ItemHolder item : skill.getRequiredItems())
|
for (ItemHolder item : skill.getRequiredItems())
|
||||||
{
|
{
|
||||||
packet.writeD(item.getId());
|
packet.writeD(item.getId());
|
||||||
packet.writeQ(item.getCount());
|
packet.writeQ(item.getCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
packet.writeC(removeSkills.size());
|
packet.writeC(removeSkills.size());
|
||||||
for (Skill removed : removeSkills)
|
for (Skill removed : removeSkills)
|
||||||
{
|
{
|
||||||
packet.writeD(removed.getId());
|
packet.writeD(removed.getId());
|
||||||
packet.writeD(removed.getLevel());
|
packet.writeH(removed.getLevel()); // Main writeD, Classic writeH.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@@ -680,7 +680,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
*/
|
*/
|
||||||
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
||||||
{
|
{
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
||||||
if (skills.isEmpty())
|
if (skills.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -1456,7 +1456,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
||||||
{
|
{
|
||||||
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
if (completeClassSkillTree.isEmpty())
|
if (completeClassSkillTree.isEmpty())
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
@@ -59,22 +59,24 @@ public class AcquireSkillList implements IClientOutgoingPacket
|
|||||||
for (SkillLearn skill : _learnable)
|
for (SkillLearn skill : _learnable)
|
||||||
{
|
{
|
||||||
packet.writeD(skill.getSkillId());
|
packet.writeD(skill.getSkillId());
|
||||||
packet.writeH(skill.getSkillLevel());
|
packet.writeH(skill.getSkillLevel()); // Main writeD, Classic writeH.
|
||||||
packet.writeQ(skill.getLevelUpSp());
|
packet.writeQ(skill.getLevelUpSp());
|
||||||
packet.writeC(skill.getGetLevel());
|
packet.writeC(skill.getGetLevel());
|
||||||
packet.writeC(0); // Skill dual class level.
|
packet.writeC(0); // Skill dual class level.
|
||||||
|
|
||||||
packet.writeC(skill.getRequiredItems().size());
|
packet.writeC(skill.getRequiredItems().size());
|
||||||
for (ItemHolder item : skill.getRequiredItems())
|
for (ItemHolder item : skill.getRequiredItems())
|
||||||
{
|
{
|
||||||
packet.writeD(item.getId());
|
packet.writeD(item.getId());
|
||||||
packet.writeQ(item.getCount());
|
packet.writeQ(item.getCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
packet.writeC(removeSkills.size());
|
packet.writeC(removeSkills.size());
|
||||||
for (Skill removed : removeSkills)
|
for (Skill removed : removeSkills)
|
||||||
{
|
{
|
||||||
packet.writeD(removed.getId());
|
packet.writeD(removed.getId());
|
||||||
packet.writeD(removed.getLevel());
|
packet.writeH(removed.getLevel()); // Main writeD, Classic writeH.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@@ -686,7 +686,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
*/
|
*/
|
||||||
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
||||||
{
|
{
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
||||||
if (skills.isEmpty())
|
if (skills.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -1462,7 +1462,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
||||||
{
|
{
|
||||||
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
if (completeClassSkillTree.isEmpty())
|
if (completeClassSkillTree.isEmpty())
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
@@ -60,23 +60,25 @@ public class AcquireSkillList implements IClientOutgoingPacket
|
|||||||
for (SkillLearn skill : _learnable)
|
for (SkillLearn skill : _learnable)
|
||||||
{
|
{
|
||||||
packet.writeD(skill.getSkillId());
|
packet.writeD(skill.getSkillId());
|
||||||
packet.writeH(skill.getSkillLevel());
|
packet.writeH(skill.getSkillLevel()); // Main writeD, Essence writeH.
|
||||||
packet.writeQ(skill.getLevelUpSp());
|
packet.writeQ(skill.getLevelUpSp());
|
||||||
packet.writeC(skill.getGetLevel());
|
packet.writeC(skill.getGetLevel());
|
||||||
packet.writeC(0); // Skill dual class level.
|
packet.writeC(0); // Skill dual class level.
|
||||||
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
||||||
|
|
||||||
packet.writeC(skill.getRequiredItems().size());
|
packet.writeC(skill.getRequiredItems().size());
|
||||||
for (List<ItemHolder> item : skill.getRequiredItems())
|
for (List<ItemHolder> item : skill.getRequiredItems())
|
||||||
{
|
{
|
||||||
packet.writeD(item.get(0).getId());
|
packet.writeD(item.get(0).getId());
|
||||||
packet.writeQ(item.get(0).getCount());
|
packet.writeQ(item.get(0).getCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
packet.writeC(removeSkills.size());
|
packet.writeC(removeSkills.size());
|
||||||
for (Skill removed : removeSkills)
|
for (Skill removed : removeSkills)
|
||||||
{
|
{
|
||||||
packet.writeD(removed.getId());
|
packet.writeD(removed.getId());
|
||||||
packet.writeD(removed.getLevel());
|
packet.writeH(removed.getLevel()); // Main writeD, Essence writeH.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@@ -686,7 +686,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
*/
|
*/
|
||||||
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
||||||
{
|
{
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
||||||
if (skills.isEmpty())
|
if (skills.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -1462,7 +1462,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
||||||
{
|
{
|
||||||
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
if (completeClassSkillTree.isEmpty())
|
if (completeClassSkillTree.isEmpty())
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
@@ -60,23 +60,25 @@ public class AcquireSkillList implements IClientOutgoingPacket
|
|||||||
for (SkillLearn skill : _learnable)
|
for (SkillLearn skill : _learnable)
|
||||||
{
|
{
|
||||||
packet.writeD(skill.getSkillId());
|
packet.writeD(skill.getSkillId());
|
||||||
packet.writeH(skill.getSkillLevel());
|
packet.writeH(skill.getSkillLevel()); // Main writeD, Essence writeH.
|
||||||
packet.writeQ(skill.getLevelUpSp());
|
packet.writeQ(skill.getLevelUpSp());
|
||||||
packet.writeC(skill.getGetLevel());
|
packet.writeC(skill.getGetLevel());
|
||||||
packet.writeC(0); // Skill dual class level.
|
packet.writeC(0); // Skill dual class level.
|
||||||
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
||||||
|
|
||||||
packet.writeC(skill.getRequiredItems().size());
|
packet.writeC(skill.getRequiredItems().size());
|
||||||
for (List<ItemHolder> item : skill.getRequiredItems())
|
for (List<ItemHolder> item : skill.getRequiredItems())
|
||||||
{
|
{
|
||||||
packet.writeD(item.get(0).getId());
|
packet.writeD(item.get(0).getId());
|
||||||
packet.writeQ(item.get(0).getCount());
|
packet.writeQ(item.get(0).getCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
packet.writeC(removeSkills.size());
|
packet.writeC(removeSkills.size());
|
||||||
for (Skill removed : removeSkills)
|
for (Skill removed : removeSkills)
|
||||||
{
|
{
|
||||||
packet.writeD(removed.getId());
|
packet.writeD(removed.getId());
|
||||||
packet.writeD(removed.getLevel());
|
packet.writeH(removed.getLevel()); // Main writeD, Essence writeH.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@@ -686,7 +686,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
*/
|
*/
|
||||||
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
||||||
{
|
{
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
||||||
if (skills.isEmpty())
|
if (skills.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -1462,7 +1462,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
||||||
{
|
{
|
||||||
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
if (completeClassSkillTree.isEmpty())
|
if (completeClassSkillTree.isEmpty())
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
@@ -60,23 +60,25 @@ public class AcquireSkillList implements IClientOutgoingPacket
|
|||||||
for (SkillLearn skill : _learnable)
|
for (SkillLearn skill : _learnable)
|
||||||
{
|
{
|
||||||
packet.writeD(skill.getSkillId());
|
packet.writeD(skill.getSkillId());
|
||||||
packet.writeH(skill.getSkillLevel());
|
packet.writeH(skill.getSkillLevel()); // Main writeD, Essence writeH.
|
||||||
packet.writeQ(skill.getLevelUpSp());
|
packet.writeQ(skill.getLevelUpSp());
|
||||||
packet.writeC(skill.getGetLevel());
|
packet.writeC(skill.getGetLevel());
|
||||||
packet.writeC(0); // Skill dual class level.
|
packet.writeC(0); // Skill dual class level.
|
||||||
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
||||||
|
|
||||||
packet.writeC(skill.getRequiredItems().size());
|
packet.writeC(skill.getRequiredItems().size());
|
||||||
for (List<ItemHolder> item : skill.getRequiredItems())
|
for (List<ItemHolder> item : skill.getRequiredItems())
|
||||||
{
|
{
|
||||||
packet.writeD(item.get(0).getId());
|
packet.writeD(item.get(0).getId());
|
||||||
packet.writeQ(item.get(0).getCount());
|
packet.writeQ(item.get(0).getCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
packet.writeC(removeSkills.size());
|
packet.writeC(removeSkills.size());
|
||||||
for (Skill removed : removeSkills)
|
for (Skill removed : removeSkills)
|
||||||
{
|
{
|
||||||
packet.writeD(removed.getId());
|
packet.writeD(removed.getId());
|
||||||
packet.writeD(removed.getLevel());
|
packet.writeH(removed.getLevel()); // Main writeD, Essence writeH.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@@ -686,7 +686,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
*/
|
*/
|
||||||
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
private Collection<SkillLearn> getAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet, boolean includeRequiredItems, ISkillsHolder holder)
|
||||||
{
|
{
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> skills = getCompleteClassSkillTree(classId);
|
||||||
if (skills.isEmpty())
|
if (skills.isEmpty())
|
||||||
{
|
{
|
||||||
@@ -1462,7 +1462,7 @@ public class SkillTreeData implements IXmlReader
|
|||||||
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
public Collection<SkillLearn> getNextAvailableSkills(Player player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
|
||||||
{
|
{
|
||||||
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
final Map<Long, SkillLearn> completeClassSkillTree = getCompleteClassSkillTree(classId);
|
||||||
final Set<SkillLearn> result = ConcurrentHashMap.newKeySet();
|
final Set<SkillLearn> result = new HashSet<>();
|
||||||
if (completeClassSkillTree.isEmpty())
|
if (completeClassSkillTree.isEmpty())
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
@@ -60,23 +60,25 @@ public class AcquireSkillList implements IClientOutgoingPacket
|
|||||||
for (SkillLearn skill : _learnable)
|
for (SkillLearn skill : _learnable)
|
||||||
{
|
{
|
||||||
packet.writeD(skill.getSkillId());
|
packet.writeD(skill.getSkillId());
|
||||||
packet.writeH(skill.getSkillLevel());
|
packet.writeH(skill.getSkillLevel()); // Main writeD, Essence writeH.
|
||||||
packet.writeQ(skill.getLevelUpSp());
|
packet.writeQ(skill.getLevelUpSp());
|
||||||
packet.writeC(skill.getGetLevel());
|
packet.writeC(skill.getGetLevel());
|
||||||
packet.writeC(0); // Skill dual class level.
|
packet.writeC(0); // Skill dual class level.
|
||||||
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
packet.writeC(_player.getKnownSkill(skill.getSkillId()) != null ? 0 : 1);
|
||||||
|
|
||||||
packet.writeC(skill.getRequiredItems().size());
|
packet.writeC(skill.getRequiredItems().size());
|
||||||
for (List<ItemHolder> item : skill.getRequiredItems())
|
for (List<ItemHolder> item : skill.getRequiredItems())
|
||||||
{
|
{
|
||||||
packet.writeD(item.get(0).getId());
|
packet.writeD(item.get(0).getId());
|
||||||
packet.writeQ(item.get(0).getCount());
|
packet.writeQ(item.get(0).getCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
final Collection<Skill> removeSkills = skill.getRemoveSkills().stream().map(_player::getKnownSkill).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
packet.writeC(removeSkills.size());
|
packet.writeC(removeSkills.size());
|
||||||
for (Skill removed : removeSkills)
|
for (Skill removed : removeSkills)
|
||||||
{
|
{
|
||||||
packet.writeD(removed.getId());
|
packet.writeD(removed.getId());
|
||||||
packet.writeD(removed.getLevel());
|
packet.writeH(removed.getLevel()); // Main writeD, Essence writeH.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
Reference in New Issue
Block a user