浏览代码

Fix for #3946 (non-tradeable items can be stored in private warehouse).

_DS_ 16 年之前
父节点
当前提交
2b90f61749

+ 2 - 2
L2_GameServer/java/net/sf/l2j/gameserver/model/L2ItemInstance.java

@@ -721,7 +721,7 @@ public final class L2ItemInstance extends L2Object
      * Returns if item is available for manipulation
      * @return boolean
      */
-    public boolean isAvailable(L2PcInstance player, boolean allowAdena)
+    public boolean isAvailable(L2PcInstance player, boolean allowAdena, boolean allowNonTradeable)
     {
     	return (
 		(!isEquipped()) // Not equipped
@@ -732,7 +732,7 @@ public final class L2ItemInstance extends L2Object
     		&& (allowAdena || getItemId() != 57) // Not adena
     		&& (player.getCurrentSkill() == null || player.getCurrentSkill().getSkill().getItemConsumeId() != getItemId())
     		&& (!player.isCastingSimultaneouslyNow() || player.getLastSimultaneousSkillCast() == null || player.getLastSimultaneousSkillCast().getItemConsumeId() != getItemId())
-		&& (isTradeable())
+		&& (allowNonTradeable || isTradeable())
     		);
     }
 

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/model/entity/Hero.java

@@ -257,7 +257,7 @@ public class Hero
 							player.getInventory().unEquipItemInSlotAndRecord(i);
 					}
 					
-					for (L2ItemInstance item : player.getInventory().getAvailableItems(false))
+					for (L2ItemInstance item : player.getInventory().getAvailableItems(false, false))
 					{
 						if (item != null && item.isHeroItem())
 						{

+ 5 - 5
L2_GameServer/java/net/sf/l2j/gameserver/model/itemcontainer/PcInventory.java

@@ -98,7 +98,7 @@ public class PcInventory extends Inventory
 					break;
 				}
 			}
-			if (!isDuplicate && (!onlyAvailable || (item.isSellable() && item.isAvailable(getOwner(), false)))) list.add(item);
+			if (!isDuplicate && (!onlyAvailable || (item.isSellable() && item.isAvailable(getOwner(), false, false)))) list.add(item);
 		}
 
 		return list.toArray(new L2ItemInstance[list.size()]);
@@ -131,7 +131,7 @@ public class PcInventory extends Inventory
 					isDuplicate = true;
 					break;
 				}
-			if (!isDuplicate && (!onlyAvailable || (item.isSellable() && item.isAvailable(getOwner(), false)))) list.add(item);
+			if (!isDuplicate && (!onlyAvailable || (item.isSellable() && item.isAvailable(getOwner(), false, false)))) list.add(item);
 		}
 
 		return list.toArray(new L2ItemInstance[list.size()]);
@@ -173,11 +173,11 @@ public class PcInventory extends Inventory
 	 * Returns the list of items in inventory available for transaction
 	 * @return L2ItemInstance : items in inventory
 	 */
-	public L2ItemInstance[] getAvailableItems(boolean allowAdena)
+	public L2ItemInstance[] getAvailableItems(boolean allowAdena, boolean allowNonTradeable)
 	{
 		List<L2ItemInstance> list = new FastList<L2ItemInstance>();
 		for (L2ItemInstance item : _items)
-			if (item != null && item.isAvailable(getOwner(), allowAdena)) list.add(item);
+			if (item != null && item.isAvailable(getOwner(), allowAdena, allowNonTradeable)) list.add(item);
 
 		return list.toArray(new L2ItemInstance[list.size()]);
 	}
@@ -218,7 +218,7 @@ public class PcInventory extends Inventory
 	{
 		List<TradeList.TradeItem> list = new FastList<TradeList.TradeItem>();
 		for (L2ItemInstance item : _items)
-			if (item.isAvailable(getOwner(), false))
+			if (item.isAvailable(getOwner(), false, false))
 				{
 				TradeList.TradeItem adjItem = tradeList.adjustAvailableItem(item);
 					if (adjItem != null) list.add(adjItem);

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestPackageSend.java

@@ -159,7 +159,7 @@ public final class RequestPackageSend extends L2GameClientPacket
 				continue;
 			}
 
-			if (!oldItem.isDepositable(false))
+			if (!oldItem.isDepositable(false) || !oldItem.isAvailable(player, true, false))
 				continue;
 
 			// skip items from active tradelist, even for stackable

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/SendWareHouseDepositList.java

@@ -163,7 +163,7 @@ public final class SendWareHouseDepositList extends L2GameClientPacket
 				return;
 			}
 
-			if (!oldItem.isDepositable(isPrivate))
+			if (!oldItem.isDepositable(isPrivate) || !oldItem.isAvailable(player, true, isPrivate))
 				continue;
 
 			// skip items from active tradelist, even for stackable

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/network/serverpackets/PackageSendableList.java

@@ -36,7 +36,7 @@ public class PackageSendableList extends L2GameServerPacket
 		_playerAdena = player.getAdena();
 
 		_items = new FastList<L2ItemInstance>();
-		for (L2ItemInstance temp : player.getInventory().getAvailableItems(true))
+		for (L2ItemInstance temp : player.getInventory().getAvailableItems(true, false))
 		{
 			if (temp != null && temp.isDepositable(false))
 				_items.add(temp);

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/network/serverpackets/TradeStart.java

@@ -31,7 +31,7 @@ public final class TradeStart extends L2GameServerPacket
 	public TradeStart (L2PcInstance player)
 	{
 		_activeChar = player;
-        _itemList = _activeChar.getInventory().getAvailableItems(true);
+        _itemList = _activeChar.getInventory().getAvailableItems(true, false);
 	}
 
 	@Override

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/network/serverpackets/WareHouseDepositList.java

@@ -45,7 +45,7 @@ public final class WareHouseDepositList extends L2GameServerPacket
 		_items = new FastList<L2ItemInstance>();
 
 		final boolean isPrivate = _whType == PRIVATE; 
-		for (L2ItemInstance temp : player.getInventory().getAvailableItems(true))
+		for (L2ItemInstance temp : player.getInventory().getAvailableItems(true, isPrivate))
 		{
 			if (temp != null && temp.isDepositable(isPrivate))
 				_items.add(temp);