Package lineage2.gameserver.model.items.listeners

Source Code of lineage2.gameserver.model.items.listeners.ItemSkillsListener

/*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package lineage2.gameserver.model.items.listeners;

import lineage2.gameserver.listener.inventory.OnEquipListener;
import lineage2.gameserver.model.Playable;
import lineage2.gameserver.model.Player;
import lineage2.gameserver.model.Skill;
import lineage2.gameserver.model.items.ItemInstance;
import lineage2.gameserver.network.serverpackets.SkillCoolTime;
import lineage2.gameserver.stats.Formulas;
import lineage2.gameserver.tables.SkillTable;
import lineage2.gameserver.templates.item.ItemTemplate;

/**
* @author Mobius
* @version $Revision: 1.0 $
*/
public final class ItemSkillsListener implements OnEquipListener
{
  /**
   * Field _instance.
   */
  private static final ItemSkillsListener _instance = new ItemSkillsListener();
 
  /**
   * Method getInstance.
   * @return ItemSkillsListener
   */
  public static ItemSkillsListener getInstance()
  {
    return _instance;
  }
 
  /**
   * Method onUnequip.
   * @param slot int
   * @param item ItemInstance
   * @param actor Playable
   * @see lineage2.gameserver.listener.inventory.OnEquipListener#onUnequip(int, ItemInstance, Playable)
   */
  @Override
  public void onUnequip(int slot, ItemInstance item, Playable actor)
  {
    Player player = (Player) actor;
    Skill[] itemSkills = null;
    Skill enchant4Skill = null;
    Skill unequipeSkill = null;
    ItemTemplate it = item.getTemplate();
    itemSkills = it.getAttachedSkills();
    enchant4Skill = it.getEnchant4Skill();
    unequipeSkill = it.getUnequipeSkill();
    player.removeTriggers(it);
    if ((itemSkills != null) && (itemSkills.length > 0))
    {
      for (Skill itemSkill : itemSkills)
      {
        if ((itemSkill.getId() >= 26046) && (itemSkill.getId() <= 26048))
        {
          int level = player.getSkillLevel(itemSkill.getId());
          int newlevel = level - 1;
          if (newlevel > 0)
          {
            player.addSkill(SkillTable.getInstance().getInfo(itemSkill.getId(), newlevel), false);
          }
          else
          {
            player.removeSkillById(itemSkill.getId());
          }
        }
        else
        {
          player.removeSkill(itemSkill, false);
        }
      }
    }
    if (enchant4Skill != null)
    {
      player.removeSkill(enchant4Skill, false);
    }
    if (unequipeSkill != null)
    {
      player.doCast(unequipeSkill, player, true);
    }
    if ((itemSkills.length > 0) || (enchant4Skill != null))
    {
      player.sendSkillList();
      player.updateStats();
    }
  }
 
  /**
   * Method onEquip.
   * @param slot int
   * @param item ItemInstance
   * @param actor Playable
   * @see lineage2.gameserver.listener.inventory.OnEquipListener#onEquip(int, ItemInstance, Playable)
   */
  @Override
  public void onEquip(int slot, ItemInstance item, Playable actor)
  {
    Player player = (Player) actor;
    Skill[] itemSkills = null;
    Skill enchant4Skill = null;
    ItemTemplate it = item.getTemplate();
    itemSkills = it.getAttachedSkills();
    if (item.getEnchantLevel() >= 4)
    {
      enchant4Skill = it.getEnchant4Skill();
    }
    if ((it.getType2() == ItemTemplate.TYPE2_WEAPON) && (player.getWeaponsExpertisePenalty() > 0))
    {
      return;
    }
    player.addTriggers(it);
    boolean needSendInfo = false;
    if (itemSkills.length > 0)
    {
      for (Skill itemSkill : itemSkills)
      {
        if ((itemSkill.getId() >= 26046) && (itemSkill.getId() <= 26048))
        {
          int level = player.getSkillLevel(itemSkill.getId());
          int newlevel = level;
          if (level > 0)
          {
            if (SkillTable.getInstance().getInfo(itemSkill.getId(), level + 1) != null)
            {
              newlevel = level + 1;
            }
          }
          else
          {
            newlevel = 1;
          }
          if (newlevel != level)
          {
            player.addSkill(SkillTable.getInstance().getInfo(itemSkill.getId(), newlevel), false);
          }
        }
        else if (player.getSkillLevel(itemSkill.getId()) < itemSkill.getLevel())
        {
          player.addSkill(itemSkill, false);
          if (itemSkill.isActive())
          {
            long reuseDelay = Formulas.calcSkillReuseDelay(player, itemSkill);
            reuseDelay = Math.min(reuseDelay, 30000);
            if ((reuseDelay > 0) && !player.isSkillDisabled(itemSkill))
            {
              player.disableSkill(itemSkill, reuseDelay);
              needSendInfo = true;
            }
          }
        }
      }
    }
    if (enchant4Skill != null)
    {
      player.addSkill(enchant4Skill, false);
    }
    if ((itemSkills.length > 0) || (enchant4Skill != null))
    {
      player.sendSkillList();
      player.updateStats();
      if (needSendInfo)
      {
        player.sendPacket(new SkillCoolTime(player));
      }
    }
  }
}
TOP

Related Classes of lineage2.gameserver.model.items.listeners.ItemSkillsListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.