corps du collage affiché/** * */package net.sf.l2j.gameserver.model;import java.util.List;import java.util.logging.Logger;import net.sf.l2j.gameserver.ItemTable;import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;/** * @author zabbix * Lets drink to code! *//** * Buy/Sell list handler implementation * * BuySellList(seller,buyer) * * seller puts his items to sellist, buyer - to buylist */public class BuySellList{ protected static Logger _log = Logger.getLogger(BuySellList.class.getName()); private List<BuySellItem> _buyItems; // for buyer private List<BuySellItem> _sellItems; // for seller private L2PcInstance _seller; // seller private L2PcInstance _buyer; // buyer public BuySellList(L2PcInstance seller, L2PcInstance buyer) { _seller = seller; _buyer = buyer; } /** * Add item to buy/sell list * @param objectId * @param amount * @return */ public boolean addItem(Integer objectId, Integer amount, boolean buy) { L2Object item = L2World.getInstance().findObject(objectId); if(!(item instanceof L2ItemInstance)) { _log.warning("[BuySellList] attempt to add non-item instance to buy list!"); return false; } if(!((L2ItemInstance)item).isStackable() && amount > 1) { _log.warning("[BuySellList] attempt to add non-stackable item with count > 1!"); return false; } if(buy) { _buyItems.add(new BuySellItem(objectId,amount)); } else { _sellItems.add(new BuySellItem(objectId,amount)); } return true; } public void tradeItems() { if(!validateTrade()) { _log.warning("[BuySellList] trade validation failed"); return; } /** * TradeLists are valid, so lets exchange items... * Lets start from seller move items from him to buyer... */ for(BuySellItem inst : _sellItems) { L2ItemInstance sellItem = _seller.getInventory().getItemByObjectId(inst.getItemObjectId()); if(sellItem.isStackable() && sellItem.getCount() > inst.getItemAmount()) { L2ItemInstance newStackable = ItemTable.getInstance().createItem(sellItem.getItemId()); newStackable.setCount(inst.getItemAmount()); _buyer.getInventory().addItem(newStackable); sellItem.setCount((sellItem.getCount()-inst.getItemAmount())); } else { sellItem.setOwnerId(_buyer.getObjectId()); sellItem.updateDatabase(); } } _sellItems.clear(); /** * kk, lets continue with buyer now... */ for(BuySellItem inst : _buyItems) { L2ItemInstance buyItem = _buyer.getInventory().getItemByObjectId(inst.getItemObjectId()); if(buyItem.isStackable() && buyItem.getCount() > inst.getItemAmount()) { L2ItemInstance newStackable = ItemTable.getInstance().createItem(buyItem.getItemId()); newStackable.setCount(inst.getItemAmount()); _seller.getInventory().addItem(newStackable); buyItem.setCount((buyItem.getCount()-inst.getItemAmount())); } else { buyItem.setOwnerId(_seller.getObjectId()); buyItem.updateDatabase(); } } _buyItems.clear(); } private boolean validateTrade() { L2World world = L2World.getInstance(); if(_buyer == null || world.findObject(_buyer.getObjectId()) == null) { _log.warning("[BuySellList] buyer instance are invalid"); return false; } for(BuySellItem instance : _buyItems) { if(world.findObject(instance.getItemObjectId()) == null || _buyer.getInventory().getItemByObjectId(instance.getItemObjectId()) == null || instance.getItemAmount() <= 0 ) { return false; } } for(BuySellItem instance : _sellItems) { if(world.findObject(instance.getItemObjectId()) == null || _seller.getInventory().getItemByObjectId(instance.getItemObjectId()) == null || instance.getItemAmount() <= 0) { return false; } } return true; } private class BuySellItem { private Integer _objId; private Integer _amount; public BuySellItem(Integer oid, Integer count) { _objId = oid; _amount = count; } public int getItemObjectId(){return _objId;} public int getItemAmount(){return _amount;} }}