Package l2p.gameserver.serverpackets

Source Code of l2p.gameserver.serverpackets.PrivateStoreManageList

package l2p.gameserver.serverpackets;

import java.util.concurrent.ConcurrentLinkedQueue;

import l2p.gameserver.model.L2Player;
import l2p.gameserver.model.L2TradeList;
import l2p.gameserver.model.TradeItem;
import l2p.gameserver.model.items.L2ItemInstance;
import l2p.gameserver.tables.ItemTable;
import l2p.gameserver.templates.L2Item;

public class PrivateStoreManageList extends L2GameServerPacket
{
  private int seller_id;
  private long seller_adena;
  private boolean _package = false;
  private ConcurrentLinkedQueue<TradeItem> _sellList;
  private ConcurrentLinkedQueue<TradeItem> _haveList;

  /**
   * Окно управления личным магазином покупки
   *
   * @param seller
   */
  public PrivateStoreManageList(L2Player seller, boolean pkg)
  {
    seller_id = seller.getObjectId();
    seller_adena = seller.getAdena();
    _package = pkg;
    // Проверяем список вещей в инвентаре, если вещь остутствует - убираем из списка продажи
    _sellList = new ConcurrentLinkedQueue<TradeItem>();
    for(TradeItem i : seller.getSellList())
    {
      L2ItemInstance inst = seller.getInventory().getItemByObjectId(i.getObjectId());
      if(i.getCount() <= 0 || inst == null || !inst.canBeTraded(seller))
      {
        continue;
      }
      if(inst.getCount() < i.getCount())
      {
        i.setCount(inst.getCount());
      }
      _sellList.add(i);
    }
    L2TradeList _list = new L2TradeList(0);
    // Строим список вещей, годных для продажи имеющихся в инвентаре
    for(L2ItemInstance item : seller.getInventory().getItemsList())
    {
      if(item != null && item.canBeTraded(seller) && item.getItemId() != L2Item.ITEM_ID_ADENA)
      {
        _list.addItem(item);
      }
    }
    _haveList = new ConcurrentLinkedQueue<TradeItem>();
    // Делаем список для собственно передачи с учетом количества
    for(L2ItemInstance item : _list.getItems())
    {
      TradeItem ti = new TradeItem();
      ti.setObjectId(item.getObjectId());
      ti.setItemId(item.getItemId());
      ti.setCount(item.getCount());
      ti.setEnchantLevel(item.getEnchantLevel());
      ti.setAttackElement(item.getAttackElement());
      ti.setDefenceFire(item.getDefenceFire());
      ti.setDefenceWater(item.getDefenceWater());
      ti.setDefenceWind(item.getDefenceWind());
      ti.setDefenceEarth(item.getDefenceEarth());
      ti.setDefenceHoly(item.getDefenceHoly());
      ti.setDefenceUnholy(item.getDefenceUnholy());
      _haveList.add(ti);
    }
    //Убираем совпадения между списками, в сумме оба списка должны совпадать с содержимым инвентаря
    if(_sellList.size() > 0)
    {
      for(TradeItem itemOnSell : _sellList)
      {
        _haveList.remove(itemOnSell);
        boolean added = false;
        for(TradeItem itemInInv : _haveList)
        {
          if(itemInInv.getObjectId() == itemOnSell.getObjectId())
          {
            added = true;
            itemOnSell.setCount(Math.min(itemOnSell.getCount(), itemInInv.getCount()));
            if(itemOnSell.getCount() == itemInInv.getCount())
            {
              _haveList.remove(itemInInv);
            }
            else if(itemOnSell.getCount() > 0)
            {
              itemInInv.setCount(itemInInv.getCount() - itemOnSell.getCount());
            }
            else
            {
              _sellList.remove(itemOnSell);
            }
            break;
          }
        }
        if(!added)
        {
          _sellList.remove(itemOnSell);
        }
      }
    }
  }

  @Override
  protected final void writeImpl()
  {
    writeC(0xA0);
    //section 1
    writeD(seller_id);
    writeD(_package ? 1 : 0);
    writeQ(seller_adena);
    //Список имеющихся вещей
    writeD(_haveList.size());
    for(TradeItem temp : _haveList)
    {
      L2Item tempItem = ItemTable.getInstance().getTemplate(temp.getItemId());
      writeD(tempItem.getType2ForPackets());
      writeD(temp.getObjectId());
      writeD(temp.getItemId());
      writeQ(temp.getCount());
      writeH(0);
      writeH(temp.getEnchantLevel());//enchant lvl
      writeH(0);
      writeD(tempItem.getBodyPart());
      writeQ(tempItem.getReferencePrice());
      writeItemElements(temp);
      writeItemRev152();
    }
    //Список вещей уже поставленых на продажу
    writeD(_sellList.size());
    for(TradeItem temp2 : _sellList)
    {
      L2Item tempItem = ItemTable.getInstance().getTemplate(temp2.getItemId());
      writeD(tempItem.getType2ForPackets());
      writeD(temp2.getObjectId());
      writeD(temp2.getItemId());
      writeQ(temp2.getCount());
      writeH(0);
      writeH(temp2.getEnchantLevel());//enchant lvl
      writeH(0);
      writeD(tempItem.getBodyPart());
      writeQ(temp2.getOwnersPrice());
      writeQ(temp2.getStorePrice());
      writeItemElements(temp2);
      writeItemRev152();
    }
  }
}
TOP

Related Classes of l2p.gameserver.serverpackets.PrivateStoreManageList

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.