This part is a packet spam hazard.
player.sendPacket(new SkillCoolTime(player));
Did you test without it? SkillCoolTime is already sent with EnterWorld packet.
hasPassiveSkills must be called before getActingPlayer.
Index: java/org/l2jmobius/gameserver/model/item/instance/Item.java
===================================================================
--- java/org/l2jmobius/gameserver/model/item/instance/Item.java (revision 13723)
+++ java/org/l2jmobius/gameserver/model/item/instance/Item.java (working copy)
@@ -2049,23 +2049,36 @@
public void giveSkillsToOwner()
{
- if (!hasPassiveSkills())
+ if (!isEquipped() && !hasPassiveSkills())
{
return;
}
final Player player = getActingPlayer();
- if (player != null)
+ if (player == null)
{
- _itemTemplate.forEachSkill(ItemSkillType.NORMAL, holder ->
+ return;
+ }
+
+ _itemTemplate.forEachSkill(ItemSkillType.NORMAL, holder ->
+ {
+ final Skill skill = holder.getSkill();
+ if (skill.isPassive())
{
- final Skill skill = holder.getSkill();
- if (skill.isPassive())
- {
- player.addSkill(skill, false);
- }
- });
- }
+ player.addSkill(skill, false);
+ }
+ });
+
+ _itemTemplate.forEachSkill(ItemSkillType.ON_ENCHANT, holder ->
+ {
+ final Skill skill = holder.getSkill();
+ if (skill.isPassive() && (getEnchantLevel() >= holder.getValue()))
+ {
+ player.addSkill(skill, false);
+ }
+ });
+
+ // player.sendPacket(new SkillCoolTime(player));
}
public void removeSkillsFromOwner()