|
@@ -14,13 +14,11 @@
|
|
|
*/
|
|
|
package net.sf.l2j.gameserver.network.clientpackets;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Iterator;
|
|
|
-import java.util.List;
|
|
|
import java.util.logging.Logger;
|
|
|
|
|
|
import net.sf.l2j.Config;
|
|
|
import net.sf.l2j.gameserver.model.L2ItemInstance;
|
|
|
+import net.sf.l2j.gameserver.model.TradeList;
|
|
|
import net.sf.l2j.gameserver.model.actor.instance.L2NpcInstance;
|
|
|
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
|
|
|
import net.sf.l2j.gameserver.model.actor.instance.L2WarehouseInstance;
|
|
@@ -47,7 +45,7 @@ public final class RequestPackageSend extends L2GameClientPacket
|
|
|
|
|
|
private static final int BATCH_LENGTH = 12; // length of the one item
|
|
|
|
|
|
- private List<Item> _items = null;
|
|
|
+ private Item[] _items = null;
|
|
|
private int _objectID;
|
|
|
|
|
|
@Override
|
|
@@ -61,12 +59,12 @@ public final class RequestPackageSend extends L2GameClientPacket
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
- _items = new ArrayList<Item>(count);
|
|
|
+ _items = new Item[count];
|
|
|
for(int i = 0; i < count; i++)
|
|
|
{
|
|
|
int id = readD(); //this is some id sent in PackageSendableList
|
|
|
long cnt = readQ();
|
|
|
- _items.add(new Item(id, cnt));
|
|
|
+ _items[i] = new Item(id, cnt);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -77,7 +75,7 @@ public final class RequestPackageSend extends L2GameClientPacket
|
|
|
protected
|
|
|
void runImpl()
|
|
|
{
|
|
|
- if (_items == null || _items.isEmpty() || !Config.ALLOW_FREIGHT)
|
|
|
+ if (_items == null || !Config.ALLOW_FREIGHT)
|
|
|
return;
|
|
|
|
|
|
L2PcInstance player = getClient().getActiveChar();
|
|
@@ -112,21 +110,18 @@ public final class RequestPackageSend extends L2GameClientPacket
|
|
|
}
|
|
|
|
|
|
// Freight price from config or normal price per item slot (30)
|
|
|
- long fee = _items.size() * Config.ALT_GAME_FREIGHT_PRICE;
|
|
|
+ long fee = _items.length * Config.ALT_GAME_FREIGHT_PRICE;
|
|
|
long currentAdena = player.getAdena();
|
|
|
int slots = 0;
|
|
|
|
|
|
- Iterator<Item> iter = _items.iterator();
|
|
|
- while (iter.hasNext())
|
|
|
+ for (Item i : _items)
|
|
|
{
|
|
|
- Item i = iter.next();
|
|
|
// Check validity of requested item
|
|
|
- L2ItemInstance item = player.checkItemManipulation(i.objectId, i.count, "deposit");
|
|
|
+ L2ItemInstance item = player.checkItemManipulation(i.getObjectId(), i.getCount(), "deposit");
|
|
|
if (item == null)
|
|
|
{
|
|
|
_log.warning("Error depositing a warehouse object for char "+player.getName()+" (validity check)");
|
|
|
- iter.remove();
|
|
|
- continue;
|
|
|
+ return;
|
|
|
}
|
|
|
|
|
|
if (!item.isTradeable() || item.getItemType() == L2EtcItemType.QUEST)
|
|
@@ -134,9 +129,9 @@ public final class RequestPackageSend extends L2GameClientPacket
|
|
|
|
|
|
// Calculate needed adena and slots
|
|
|
if (item.getItemId() == ADENA_ID)
|
|
|
- currentAdena -= i.count;
|
|
|
+ currentAdena -= i.getCount();
|
|
|
if (!item.isStackable())
|
|
|
- slots += i.count;
|
|
|
+ slots += i.getCount();
|
|
|
else if (warehouse.getItemByItemId(item.getItemId()) == null)
|
|
|
slots++;
|
|
|
}
|
|
@@ -155,11 +150,14 @@ public final class RequestPackageSend extends L2GameClientPacket
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ // get current tradelist if any
|
|
|
+ TradeList trade = player.getActiveTradeList();
|
|
|
+
|
|
|
// Proceed to the transfer
|
|
|
InventoryUpdate playerIU = Config.FORCE_INVENTORY_UPDATE ? null : new InventoryUpdate();
|
|
|
for (Item i : _items)
|
|
|
{
|
|
|
- L2ItemInstance oldItem = player.getInventory().getItemByObjectId(i.objectId);
|
|
|
+ L2ItemInstance oldItem = player.getInventory().getItemByObjectId(i.getObjectId());
|
|
|
if (oldItem == null)
|
|
|
{
|
|
|
_log.warning("Error depositing a warehouse object for char "+player.getName()+" (olditem == null)");
|
|
@@ -169,7 +167,11 @@ public final class RequestPackageSend extends L2GameClientPacket
|
|
|
if (oldItem.isHeroItem())
|
|
|
continue;
|
|
|
|
|
|
- L2ItemInstance newItem = player.getInventory().transferItem(warehouse.getName(), i.objectId, i.count, warehouse, player, manager);
|
|
|
+ // skip items from active tradelist, even for stackable
|
|
|
+ if (trade != null && trade.getItem(i.getObjectId()) != null)
|
|
|
+ continue;
|
|
|
+
|
|
|
+ L2ItemInstance newItem = player.getInventory().transferItem(warehouse.getName(), i.getObjectId(), i.getCount(), warehouse, player, manager);
|
|
|
if (newItem == null)
|
|
|
{
|
|
|
_log.warning("Error depositing a warehouse object for char "+player.getName()+" (newitem == null)");
|
|
@@ -208,13 +210,23 @@ public final class RequestPackageSend extends L2GameClientPacket
|
|
|
|
|
|
private class Item
|
|
|
{
|
|
|
- final int objectId;
|
|
|
- final long count;
|
|
|
+ private final int _objectId;
|
|
|
+ private final long _count;
|
|
|
|
|
|
public Item(int i, long c)
|
|
|
{
|
|
|
- objectId = i;
|
|
|
- count = c;
|
|
|
+ _objectId = i;
|
|
|
+ _count = c;
|
|
|
+ }
|
|
|
+
|
|
|
+ public int getObjectId()
|
|
|
+ {
|
|
|
+ return _objectId;
|
|
|
+ }
|
|
|
+
|
|
|
+ public long getCount()
|
|
|
+ {
|
|
|
+ return _count;
|
|
|
}
|
|
|
}
|
|
|
}
|