Package l2p.gameserver.model

Source Code of l2p.gameserver.model.TradeItem

package l2p.gameserver.model;

import java.sql.ResultSet;

import l2p.database.DatabaseUtils;
import l2p.database.FiltredPreparedStatement;
import l2p.database.L2DatabaseFactory;
import l2p.database.ThreadConnection;
import l2p.gameserver.model.items.L2ItemInstance;
import l2p.gameserver.model.items.L2ItemInstance.ItemLocation;
import l2p.gameserver.tables.ItemTable;
import l2p.gameserver.templates.L2Item;
import l2p.gameserver.templates.L2Weapon.WeaponType;

/**
* Абстрактное описание предмета, безопасное для любых операций. Может использоваться как ссылка на уже существующий предмет либо как набор информации для создания нового.
*/
public final class TradeItem
{
  private int _objectId;
  private int _itemId;
  private long _price;
  private long _storePrice;
  private long _count;
  private int _enchantLevel;
  private int[] _attackElement;
  private int _defenceFire;
  private int _defenceWater;
  private int _defenceWind;
  private int _defenceEarth;
  private int _defenceHoly;
  private int _defenceUnholy;
  private long _currentvalue;
  private int _lastRechargeTime;
  private int _rechargeTime;

  public TradeItem()
  {
  }

  public TradeItem(L2ItemInstance original)
  {
    _objectId = original.getObjectId();
    _itemId = original.getItemId();
    _count = original.getCount();
    _enchantLevel = original.getEnchantLevel();
    _attackElement = original.getAttackElement();
    _defenceFire = original.getDefenceFire();
    _defenceWater = original.getDefenceWater();
    _defenceWind = original.getDefenceWind();
    _defenceEarth = original.getDefenceEarth();
    _defenceHoly = original.getDefenceHoly();
    _defenceUnholy = original.getDefenceUnholy();
  }

  public void setObjectId(int id)
  {
    _objectId = id;
  }

  public int getObjectId()
  {
    return _objectId;
  }

  public void setItemId(int id)
  {
    _itemId = id;
  }

  public int getItemId()
  {
    return _itemId;
  }

  public L2Item getItem()
  {
    return ItemTable.getInstance().getTemplate(_itemId);
  }

  public void setOwnersPrice(long price)
  {
    _price = price;
  }

  public long getOwnersPrice()
  {
    return _price;
  }

  public void setStorePrice(long price)
  {
    _storePrice = price;
  }

  public long getStorePrice()
  {
    return _storePrice;
  }

  public void setCount(long count)
  {
    _count = count;
  }

  public long getCount()
  {
    return _count;
  }

  public void setEnchantLevel(int enchant)
  {
    _enchantLevel = enchant;
  }

  public int getEnchantLevel()
  {
    return _enchantLevel;
  }

  public void setCurrentValue(long tempvalue)
  {
    _currentvalue = tempvalue;
  }

  public long getCurrentValue()
  {
    return _currentvalue;
  }

  @Override
  public int hashCode()
  {
    return _objectId + _itemId;
  }

  public int[] getAttackElement()
  {
    if(_attackElement == null)
    {
      return new int[] {L2Item.ATTRIBUTE_NONE, 0};
    }
    return _attackElement;
  }

  public void setAttackElement(int[] attackElement)
  {
    _attackElement = attackElement;
  }

  public int getDefenceFire()
  {
    return _defenceFire;
  }

  public void setDefenceFire(int defenceFire)
  {
    _defenceFire = defenceFire;
  }

  public int getDefenceWater()
  {
    return _defenceWater;
  }

  public void setDefenceWater(int defenceWater)
  {
    _defenceWater = defenceWater;
  }

  public int getDefenceWind()
  {
    return _defenceWind;
  }

  public void setDefenceWind(int defenceWind)
  {
    _defenceWind = defenceWind;
  }

  public int getDefenceEarth()
  {
    return _defenceEarth;
  }

  public void setDefenceEarth(int defenceEarth)
  {
    _defenceEarth = defenceEarth;
  }

  public int getDefenceHoly()
  {
    return _defenceHoly;
  }

  public void setDefenceHoly(int defenceHoly)
  {
    _defenceHoly = defenceHoly;
  }

  public int getDefenceUnholy()
  {
    return _defenceUnholy;
  }

  public void setDefenceUnholy(int defenceUnholy)
  {
    _defenceUnholy = defenceUnholy;
  }

  /**
   * Устанавливает время респауна предмета, используется в NPC магазинах с ограниченным количеством.
   *
   * @param rechargeTime : unixtime в минутах
   */
  public void setRechargeTime(int rechargeTime)
  {
    _rechargeTime = rechargeTime;
  }

  /**
   * Возвращает время респауна предмета, используется в NPC магазинах с ограниченным количеством.
   *
   * @return unixtime в минутах
   */
  public int getRechargeTime()
  {
    return _rechargeTime;
  }

  /**
   * Возвращает ограничен ли этот предмет в количестве, используется в NPC магазинах с ограниченным количеством.
   *
   * @return true, если ограничен
   */
  public boolean isCountLimited()
  {
    return _currentvalue > 0;
  }

  /**
   * Устанавливает время последнего респауна предмета, используется в NPC магазинах с ограниченным количеством.
   *
   * @param lastRechargeTime : unixtime в минутах
   */
  public void setLastRechargeTime(int lastRechargeTime)
  {
    _lastRechargeTime = lastRechargeTime;
  }

  /**
   * Возвращает время последнего респауна предмета, используется в NPC магазинах с ограниченным количеством.
   *
   * @return unixtime в минутах
   */
  public int getLastRechargeTime()
  {
    return _lastRechargeTime;
  }

  public static TradeItem restoreFromDb(int objectId, ItemLocation loc)
  {
    TradeItem inst = null;
    ThreadConnection con = null;
    FiltredPreparedStatement statement = null;
    ResultSet item_rset = null;
    try
    {
      con = L2DatabaseFactory.getInstance().getConnection();
      statement = con.prepareStatement("SELECT * FROM items WHERE object_id=? AND loc=? LIMIT 1");
      statement.setLong(1, objectId);
      statement.setString(2, loc.name());
      item_rset = statement.executeQuery();
      if(item_rset.next())
      {
        L2Item item = ItemTable.getInstance().getTemplate(item_rset.getInt("item_id"));
        if(item == null)
        {
          return null;
        }
        if(item.isTemporal() && item_rset.getInt("shadow_life_time") <= 0)
        {
          return null;
        }
        inst = new TradeItem();
        inst.setObjectId(objectId);
        inst.setItemId(item.getItemId());
        inst.setCount(item_rset.getLong("count"));
        inst.setEnchantLevel(item_rset.getInt("enchant_level"));
        // load augmentation and elemental enchant
        if(item.isEquipable())
        {
          inst.restoreAttributes(con);
        }
      }
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }
    finally
    {
      DatabaseUtils.closeDatabaseCSR(con, statement, item_rset);
    }
    return inst;
  }

  public void restoreAttributes(ThreadConnection con)
  {
    FiltredPreparedStatement statement = null;
    try
    {
      statement = con.prepareStatement("SELECT elemType,elemValue FROM item_attributes WHERE itemId=? LIMIT 1");
      statement.setInt(1, getObjectId());
      ResultSet rs = statement.executeQuery();
      rs = statement.executeQuery();
      if(rs.next())
      {
        byte elem_type = rs.getByte(1);
        int elem_value = rs.getInt(2);
        if(getItem().getItemType() instanceof WeaponType)
        {
          setAttackElement(new int[] {elem_type, elem_value});
        }
        else
        {
          switch(elem_type)
          {
            case 0:
              setDefenceFire(elem_value);
              break;
            case 1:
              setDefenceWater(elem_value);
              break;
            case 2:
              setDefenceWind(elem_value);
              break;
            case 3:
              setDefenceEarth(elem_value);
              break;
            case 4:
              setDefenceHoly(elem_value);
              break;
            case 5:
              setDefenceUnholy(elem_value);
              break;
          }
        }
      }
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }
    finally
    {
      DatabaseUtils.closeStatement(statement);
    }
  }
}
TOP

Related Classes of l2p.gameserver.model.TradeItem

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.