Преглед изворни кода

Both trade partners can't add anything into tradelist of one of them already confirm trade.

_DS_ пре 16 година
родитељ
комит
8e9c486ae4

+ 30 - 18
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/AddTradeItem.java

@@ -32,16 +32,16 @@ import net.sf.l2j.gameserver.network.serverpackets.TradeOwnAdd;
 public final class AddTradeItem extends L2GameClientPacket
 {
 	private static final String _C__16_ADDTRADEITEM = "[C] 16 AddTradeItem";
-	private static Logger _log = Logger.getLogger(AddTradeItem.class.getName());
-	
+	private static final Logger _log = Logger.getLogger(AddTradeItem.class.getName());
+
 	private int _tradeId;
 	private int _objectId;
 	private long _count;
-	
+
 	public AddTradeItem()
 	{
 	}
-	
+
 	@Override
 	protected void readImpl()
 	{
@@ -49,53 +49,65 @@ public final class AddTradeItem extends L2GameClientPacket
 		_objectId = readD();
 		_count = readQ();
 	}
-	
+
 	@Override
 	protected void runImpl()
 	{
-		L2PcInstance player = getClient().getActiveChar();
+		final L2PcInstance player = getClient().getActiveChar();
 		if (player == null)
 			return;
-		
-		TradeList trade = player.getActiveTradeList();
+
+		final TradeList trade = player.getActiveTradeList();
 		if (trade == null)
 		{
-			_log.warning("Character: " + player.getName() + " requested item:" + _objectId + " add without active tradelist:" + _tradeId);
+			_log.warning("Character: " + player.getName()
+					+ " requested item:" + _objectId
+					+ " add without active tradelist:" + _tradeId);
 			return;
 		}
-		
-		if (trade.getPartner() == null || L2World.getInstance().findObject(trade.getPartner().getObjectId()) == null)
+
+		final L2PcInstance partner = trade.getPartner(); 
+		if (partner == null
+				|| L2World.getInstance().findObject(partner.getObjectId()) == null
+				|| partner.getActiveTradeList() == null)
 		{
 			// Trade partner not found, cancel trade
-			if (trade.getPartner() != null)
-				_log.warning("Character:" + player.getName() + " requested invalid trade object: " + _objectId);
+			if (partner != null)
+				_log.warning("Character:" + player.getName()
+						+ " requested invalid trade object: " + _objectId);
 			SystemMessage msg = new SystemMessage(SystemMessageId.TARGET_IS_NOT_FOUND_IN_THE_GAME);
 			player.sendPacket(msg);
 			player.cancelActiveTrade();
 			return;
 		}
-		
+
+		if (trade.isConfirmed() || partner.getActiveTradeList().isConfirmed())
+		{
+			player.sendPacket(new SystemMessage(SystemMessageId.CANNOT_ADJUST_ITEMS_AFTER_TRADE_CONFIRMED));
+			return;
+		}
+
 		if (!player.getAccessLevel().allowTransaction())
 		{
 			player.sendMessage("Transactions are disable for your Access Level");
 			player.cancelActiveTrade();
 			return;
 		}
-		
+
 		if (!player.validateItemManipulation(_objectId, "trade"))
 		{
 			player.sendPacket(new SystemMessage(SystemMessageId.NOTHING_HAPPENED));
 			return;
 		}
-		
-		TradeList.TradeItem item = trade.addItem(_objectId, _count);
+
+		final TradeList.TradeItem item = trade.addItem(_objectId, _count);
 		if (item != null)
 		{
 			player.sendPacket(new TradeOwnAdd(item));
 			trade.getPartner().sendPacket(new TradeOtherAdd(item));
 		}
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see net.sf.l2j.gameserver.clientpackets.ClientBasePacket#getType()
 	 */