@Override
  public void onEquip(int slot, ItemInstance item, Playable actor) {
    if (!item.isEquipable()) {
      return;
    }
    if (!item.isAugmented()) {
      return;
    }

    Player player = actor.getPlayer();

    // При несоотвествии грейда аугмент не применяется
    if (player.getExpertisePenalty(item) > 0) {
      return;
    }

    int stats[] = new int[2];
    stats[0] = 0x0000FFFF & item.getAugmentationId();
    stats[1] = item.getAugmentationId() >> 16;

    boolean sendList = false;
    boolean sendReuseList = false;
    for (int i : stats) {
      OptionDataTemplate template = OptionDataHolder.getInstance().getTemplate(i);
      if (template == null) {
        continue;
      }

      player.addStatFuncs(template.getStatFuncs(template));

      for (Skill skill : template.getSkills()) {
        sendList = true;
        player.addSkill(skill);
        if (player.isSkillDisabled(skill)) {
          sendReuseList = true;
        }
      }

      player.addTriggers(template);
    }

    if (sendList) {
      player.sendSkillList();
    }

    if (sendReuseList) {
      player.sendPacket(new SkillCoolTime(player));
    }

    player.updateStats();
  }
  @Override
  public void onUnequip(int slot, ItemInstance item, Playable actor) {
    if (!item.isEquipable()) {
      return;
    }
    if (!item.isAugmented()) {
      return;
    }

    Player player = actor.getPlayer();

    int stats[] = new int[2];
    stats[0] = 0x0000FFFF & item.getAugmentationId();
    stats[1] = item.getAugmentationId() >> 16;

    boolean sendList = false;
    for (int i : stats) {
      OptionDataTemplate template = OptionDataHolder.getInstance().getTemplate(i);
      if (template == null) {
        continue;
      }

      player.removeStatsOwner(template);

      for (Skill skill : template.getSkills()) {
        sendList = true;
        player.removeSkill(skill);
      }

      player.removeTriggers(template);
    }

    if (sendList) {
      player.sendSkillList();
    }

    player.updateStats();
  }