Package com.l2jfrozen.gameserver.model

Source Code of com.l2jfrozen.gameserver.model.L2TradeList

/*
* 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 2, 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* http://www.gnu.org/copyleft/gpl.html
*/
package com.l2jfrozen.gameserver.model;

import java.util.List;

import javolution.util.FastList;

import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;

/**
* This class ...
*
* @version $Revision: 1.4.2.1.2.5 $ $Date: 2005/03/27 15:29:33 $
*/
public class L2TradeList
{
  //private static Logger _log = Logger.getLogger(L2TradeList.class.getName());

  private List<L2ItemInstance> _items;
  private int _listId;
  private boolean _confirmed;
  private boolean _gm;
  private String _buystorename, _sellstorename;
 
  private String _npcId;

  public L2TradeList(int listId)
  {
    _items = new FastList<L2ItemInstance>();
    _listId = listId;
    _confirmed = false;
  }

  public void setNpcId(String id)
  {
    _npcId = id;
  }

  public String getNpcId()
  {
    return _npcId;
  }

  public void addItem(L2ItemInstance item)
  {
    _items.add(item);
  }

  public void replaceItem(int itemID, int price)
  {
    for(int i = 0; i < _items.size(); i++)
    {
      L2ItemInstance item = _items.get(i);

      if(item.getItemId() == itemID)
      {
        item.setPriceToSell(price);
      }

      item = null;
    }
  }

  public synchronized boolean decreaseCount(int itemID, int count)
  {
   
    for(int i = 0; i < _items.size(); i++)
    {
      L2ItemInstance item = _items.get(i);

      if(item.getItemId() == itemID)
      {
        if(item.getCount()<count)
          return false;
        item.setCount(item.getCount() - count);
      }

      item = null;
    }
    return true;
  }

  public void restoreCount(int time)
  {
    for(int i = 0; i < _items.size(); i++)
    {
      L2ItemInstance item = _items.get(i);

      if(item.getCountDecrease() && item.getTime() == time)
      {
        item.restoreInitCount();
      }

      item = null;
    }
  }

  public void removeItem(int itemID)
  {
    for(int i = 0; i < _items.size(); i++)
    {
      L2ItemInstance item = _items.get(i);

      if(item.getItemId() == itemID)
      {
        _items.remove(i);
      }

      item = null;
    }
  }

  /**
   * @return Returns the listId.
   */
  public int getListId()
  {
    return _listId;
  }

  public void setSellStoreName(String name)
  {
    _sellstorename = name;
  }

  public String getSellStoreName()
  {
    return _sellstorename;
  }

  public void setBuyStoreName(String name)
  {
    _buystorename = name;
  }

  public String getBuyStoreName()
  {
    return _buystorename;
  }

  /**
   * @return Returns the items.
   */
  public List<L2ItemInstance> getItems()
  {
    return _items;
  }

  public List<L2ItemInstance> getItems(int start, int end)
  {
    return _items.subList(start, end);
  }

  public int getPriceForItemId(int itemId)
  {
    for(int i = 0; i < _items.size(); i++)
    {
      L2ItemInstance item = _items.get(i);

      if(item.getItemId() == itemId)
        return item.getPriceToSell();

      item = null;
    }
    return -1;
  }

  public boolean countDecrease(int itemId)
  {
    for(int i = 0; i < _items.size(); i++)
    {
      L2ItemInstance item = _items.get(i);

      if(item.getItemId() == itemId)
        return item.getCountDecrease();

      item = null;
    }
    return false;
  }

  public boolean containsItemId(int itemId)
  {
    for(L2ItemInstance item : _items)
    {
      if(item.getItemId() == itemId)
        return true;

      item = null;
    }

    return false;
  }

  public L2ItemInstance getItem(int ObjectId)
  {
    for(int i = 0; i < _items.size(); i++)
    {
      L2ItemInstance item = _items.get(i);

      if(item.getObjectId() == ObjectId)
        return item;

      item = null;
    }
    return null;
  }

  public synchronized void setConfirmedTrade(boolean x)
  {
    _confirmed = x;
  }

  public synchronized boolean hasConfirmed()
  {
    return _confirmed;
  }

  public void removeItem(int objId, int count)
  {
    L2ItemInstance temp;

    for(int y = 0; y < _items.size(); y++)
    {
      temp = _items.get(y);

      if(temp.getObjectId() == objId)
      {
        if(count == temp.getCount())
        {
          _items.remove(temp);
        }

        break;
      }
    }

    temp = null;
  }

  public boolean contains(int objId)
  {
    boolean bool = false;

    L2ItemInstance temp;

    for(int y = 0; y < _items.size(); y++)
    {
      temp = _items.get(y);

      if(temp.getObjectId() == objId)
      {
        bool = true;
        break;
      }
    }

    temp = null;

    return bool;
  }

  /*
  public boolean validateTrade(L2PcInstance player)
  {
   
    Inventory playersInv = player.getInventory();
    L2ItemInstance playerItem, temp;

    for(int y = 0; y < _items.size(); y++)
    {
      temp = _items.get(y);
      playerItem = playersInv.getItemByObjectId(temp.getObjectId());

      if(playerItem == null || playerItem.getCount() < temp.getCount())
        return false;
    }

    playersInv = null;
    playerItem = null;
    temp = null;

    return true;
  }
  */

  /*
  //Call validate before this
  public void tradeItems(L2PcInstance player, L2PcInstance reciever)
  {
    Inventory playersInv = player.getInventory();
    Inventory recieverInv = reciever.getInventory();
    L2ItemInstance playerItem, recieverItem, temp, newitem;
    InventoryUpdate update = new InventoryUpdate();
    ItemTable itemTable = ItemTable.getInstance();

    //boolean isValid;
    //LinkedList<L2ItemInstance> itemsToAdd = new LinkedList<L2ItemInstance>();
    //LinkedList<L2ItemInstance> itemsToRemove = new LinkedList<L2ItemInstance>();
    //LinkedList countsToRemove = new LinkedList();

    for(int y = 0; y < _items.size(); y++)
    {
      temp = _items.get(y);
      playerItem = playersInv.getItemByObjectId(temp.getObjectId());

      if(playerItem == null)
      {
        continue;
      }

      newitem = itemTable.createItem("L2TradeList", playerItem.getItemId(), playerItem.getCount(), player);
      newitem.setEnchantLevel(temp.getEnchantLevel());

      // DIRTY FIX: Fix for trading pet collar not updating pet with new collar object id
      changePetItemObjectId(playerItem.getObjectId(), newitem.getObjectId());

      playerItem = playersInv.destroyItem("!L2TradeList!", playerItem.getObjectId(), temp.getCount(), null, null);
      recieverItem = recieverInv.addItem("!L2TradeList!", newitem, null, null);

      if(playerItem == null)
      {
        _log.warning("L2TradeList: PlayersInv.destroyItem returned NULL!");
        continue;
      }

      if(playerItem.getLastChange() == L2ItemInstance.MODIFIED)
      {
        update.addModifiedItem(playerItem);
      }
      else
      {
        L2World world = L2World.getInstance();
        world.removeObject(playerItem);
        update.addRemovedItem(playerItem);
        world = null;

      }

      player.sendPacket(update);
      update = null;

      update = new InventoryUpdate();
      if(recieverItem.getLastChange() == L2ItemInstance.MODIFIED)
      {
        update.addModifiedItem(recieverItem);
      }
      else
      {
        update.addNewItem(recieverItem);
      }

      reciever.sendPacket(update);
    }

    // weight status update both player and reciever
    StatusUpdate su = new StatusUpdate(player.getObjectId());
    su.addAttribute(StatusUpdate.CUR_LOAD, player.getCurrentLoad());
    player.sendPacket(su);
    su = null;

    su = new StatusUpdate(reciever.getObjectId());
    su.addAttribute(StatusUpdate.CUR_LOAD, reciever.getCurrentLoad());
    reciever.sendPacket(su);
    su = null;

    playersInv = null;
    recieverInv = null;
    playerItem = null;
    recieverItem = null;
    temp = null;
    newitem = null;
    update = null;
    itemTable = null;
  }

  private void changePetItemObjectId(int oldObjectId, int newObjectId)
  {
    Connection con = null;
    try
    {
      con = L2DatabaseFactory.getInstance().getConnection(false);
      PreparedStatement statement = con.prepareStatement("UPDATE pets SET item_obj_id = ? WHERE item_obj_id = ?");
      statement.setInt(1, newObjectId);
      statement.setInt(2, oldObjectId);
      statement.executeUpdate();
      statement.close();
      statement = null;
    }
    catch(Exception e)
    {
      _log.warning("could not change pet item object id: " + e);
    }
    finally
    {
      CloseUtil.close(con);
      con = null;
    }
  }
*/
  public void updateBuyList(L2PcInstance player, List<TradeItem> list)
  {

    TradeItem temp;
    int count;
    Inventory playersInv = player.getInventory();
    L2ItemInstance temp2;
    count = 0;

    while(count != list.size())
    {
      temp = list.get(count);
      temp2 = playersInv.getItemByItemId(temp.getItemId());

      if(temp2 == null)
      {
        list.remove(count);
        count = count - 1;
      }
      else
      {
        if(temp.getCount() == 0)
        {
          list.remove(count);
          count = count - 1;
        }
      }
      count++;
    }

    temp = null;
    playersInv = null;
    temp2 = null;

  }

  public void updateSellList(L2PcInstance player, List<TradeItem> list)
  {
    Inventory playersInv = player.getInventory();
    TradeItem temp;
    L2ItemInstance temp2;

    int count = 0;
    while(count != list.size())
    {
      temp = list.get(count);
      temp2 = playersInv.getItemByObjectId(temp.getObjectId());

      if(temp2 == null)
      {
        list.remove(count);
        count = count - 1;
      }
      else
      {
        if(temp2.getCount() < temp.getCount())
        {
          temp.setCount(temp2.getCount());
        }

      }
      count++;
    }

    playersInv = null;
    temp = null;
    temp2 = null;

  }

  /*
  public synchronized void buySellItems(L2PcInstance buyer, List<TradeItem> buyerslist, L2PcInstance seller, List<TradeItem> sellerslist)
  {
    Inventory sellerInv = seller.getInventory();
    Inventory buyerInv = buyer.getInventory();

    //TradeItem buyerItem         = null;
    TradeItem temp2 = null;

    L2ItemInstance sellerItem = null;
    L2ItemInstance temp = null;
    L2ItemInstance newitem = null;
    L2ItemInstance adena = null;

    int enchantLevel = 0;

    InventoryUpdate buyerupdate = new InventoryUpdate();
    InventoryUpdate sellerupdate = new InventoryUpdate();

    ItemTable itemTable = ItemTable.getInstance();

    int amount = 0;
    int x = 0;
    int y = 0;

    List<SystemMessage> sysmsgs = new FastList<SystemMessage>();
    SystemMessage msg = null;

    for(TradeItem buyerItem : buyerslist)
    {
      for(x = 0; x < sellerslist.size(); x++)//find in sellerslist
      {
        temp2 = sellerslist.get(x);
        if(temp2.getItemId() == buyerItem.getItemId())
        {
          sellerItem = sellerInv.getItemByItemId(buyerItem.getItemId());
          break;
        }
      }

      if(sellerItem != null)
      {
        if(buyerItem.getCount() > temp2.getCount())
        {
          amount = temp2.getCount();
        }

        if(buyerItem.getCount() > sellerItem.getCount())
        {
          amount = sellerItem.getCount();
        }
        else
        {
          amount = buyerItem.getCount();
        }

        if(buyerItem.getCount() > Integer.MAX_VALUE / buyerItem.getOwnersPrice())
        {
          _log.warning("Integer Overflow on Cost. Possible Exploit attempt between " + buyer.getName() + " and " + seller.getName() + ".");
          return;
        }

        //int cost = amount * buyerItem.getOwnersPrice();
        enchantLevel = sellerItem.getEnchantLevel();
        sellerItem = sellerInv.destroyItem("", sellerItem.getObjectId(), amount, null, null);
        //            buyer.reduceAdena(cost);
        //            seller.addAdena(cost);
        newitem = itemTable.createItem("L2TradeList", sellerItem.getItemId(), amount, buyer, seller);
        newitem.setEnchantLevel(enchantLevel);
        temp = buyerInv.addItem("", newitem, null, null);

        if(amount == 1)//system msg stuff
        {
          msg = new SystemMessage(SystemMessageId.S1_PURCHASED_S2);
          msg.addString(buyer.getName());
          msg.addItemName(sellerItem.getItemId());
          sysmsgs.add(msg);
          msg = null;

          msg = new SystemMessage(SystemMessageId.S1_PURCHASED_S2);
          msg.addString("You");
          msg.addItemName(sellerItem.getItemId());
          sysmsgs.add(msg);
          msg = null;
        }
        else
        {
          msg = new SystemMessage(SystemMessageId.S1_PURCHASED_S3_S2_S);
          msg.addString(buyer.getName());
          msg.addItemName(sellerItem.getItemId());
          msg.addNumber(amount);
          sysmsgs.add(msg);
          msg = null;

          msg = new SystemMessage(SystemMessageId.S1_PURCHASED_S3_S2_S);
          msg.addString("You");
          msg.addItemName(sellerItem.getItemId());
          msg.addNumber(amount);
          sysmsgs.add(msg);
          msg = null;
        }

        if(temp2.getCount() == buyerItem.getCount())
        {
          sellerslist.remove(temp2);
          buyerItem.setCount(0);
        }
        else
        {
          if(buyerItem.getCount() < temp2.getCount())
          {
            temp2.setCount(temp2.getCount() - buyerItem.getCount());
          }
          else
          {
            buyerItem.setCount(buyerItem.getCount() - temp2.getCount());
          }
        }

        if(sellerItem.getLastChange() == L2ItemInstance.MODIFIED)
        {
          sellerupdate.addModifiedItem(sellerItem);

        }
        else
        {
          L2World world = L2World.getInstance();
          world.removeObject(sellerItem);
          sellerupdate.addRemovedItem(sellerItem);
          world = null;
        }

        if(temp.getLastChange() == L2ItemInstance.MODIFIED)
        {
          buyerupdate.addModifiedItem(temp);
        }
        else
        {
          buyerupdate.addNewItem(temp);
        }

        //}

        sellerItem = null;
      }
    }

    if(newitem != null)
    {
      //updateSellList(seller,sellerslist);
      adena = seller.getInventory().getAdenaInstance();
      adena.setLastChange(L2ItemInstance.MODIFIED);
      sellerupdate.addModifiedItem(adena);
      adena = buyer.getInventory().getAdenaInstance();
      adena.setLastChange(L2ItemInstance.MODIFIED);
      buyerupdate.addModifiedItem(adena);

      seller.sendPacket(sellerupdate);
      buyer.sendPacket(buyerupdate);
      y = 0;

      for(x = 0; x < sysmsgs.size(); x++)
      {

        if(y == 0)
        {
          seller.sendPacket(sysmsgs.get(x));
          y = 1;
        }
        else
        {
          buyer.sendPacket(sysmsgs.get(x));
          y = 0;
        }
      }
    }

    sellerInv = null;
    buyerInv = null;
    temp2 = null;
    sellerItem = null;
    temp = null;
    newitem = null;
    adena = null;
    buyerupdate = null;
    sellerupdate = null;
    itemTable = null;
    sysmsgs = null;
    msg = null;
  }
*/
 
  public boolean isGm()
  {
    return _gm;
  }

}
TOP

Related Classes of com.l2jfrozen.gameserver.model.L2TradeList

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.