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