All pastes #250980 Raw Edit

Anonymous

public text v1 · immutable
#250980 ·published 2006-11-17 16:38 UTC
rendered paste body
Index: java/net/sf/l2j/gameserver/clientpackets/RequestWearItem.java
===================================================================
--- java/net/sf/l2j/gameserver/clientpackets/RequestWearItem.java	(revision 185)
+++ java/net/sf/l2j/gameserver/clientpackets/RequestWearItem.java	(working copy)
@@ -19,6 +19,7 @@
 package net.sf.l2j.gameserver.clientpackets;
 
 import java.nio.ByteBuffer;
+import java.util.List;
 import java.util.concurrent.Future;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -27,8 +28,10 @@
 import net.sf.l2j.gameserver.ClientThread;
 import net.sf.l2j.gameserver.ItemTable;
 import net.sf.l2j.gameserver.ThreadPoolManager;
+import net.sf.l2j.gameserver.TradeController;
 import net.sf.l2j.gameserver.model.L2ItemInstance;
 import net.sf.l2j.gameserver.model.L2Object;
+import net.sf.l2j.gameserver.model.L2TradeList;
 import net.sf.l2j.gameserver.model.actor.instance.L2MercManagerInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2MerchantInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2NpcInstance;
@@ -56,7 +59,7 @@
     private final int _unknow;
     
     /** List of ItemID to Wear */
-    private final int _listId;
+    private int _listId;
     
     /** Number of Item to Wear */
     private int _count;
@@ -130,9 +133,35 @@
         		|| !(target instanceof L2MerchantInstance || target instanceof L2MercManagerInstance)	// Target not a merchant and not mercmanager
 			    || !player.isInsideRadius(target, L2NpcInstance.INTERACTION_DISTANCE, false, false) 	// Distance is too far
 			        )) return;
+        
+        L2TradeList list = null;
 
         // Get the current merchant targeted by the player
 		L2MerchantInstance merchant = (target != null && target instanceof L2MerchantInstance) ? (L2MerchantInstance)target : null;
+		
+		List<L2TradeList> lists = TradeController.getInstance().getBuyListByNpcId(merchant.getNpcId());
+    	
+    	if (lists == null)
+    	{
+    		Util.handleIllegalPlayerAction(player,"Warning!! Character "+player.getName()+" of account "+player.getAccountName()+" sent a false BuyList list_id.",Config.DEFAULT_PUNISH);
+    		return;
+    	}
+    	
+    	for (L2TradeList tradeList : lists)
+    	{
+    		if (tradeList.getListId() == _listId)
+    		{
+    			list = tradeList;
+    		}
+    	}
+    	
+    	if (list == null)
+        {
+        	Util.handleIllegalPlayerAction(player,"Warning!! Character "+player.getName()+" of account "+player.getAccountName()+" sent a false BuyList list_id.",Config.DEFAULT_PUNISH);
+        	return;
+        }
+        
+        _listId = list.getListId();
 
         // Check if the quantity of Item to Wear
         if(_count < 1 || _listId >= 1000000)
@@ -151,6 +180,12 @@
 		for (int i = 0; i < _count; i++)
 		{
 			int itemId = _items[i];
+			
+			if (!list.containsItemId(itemId))
+			{
+				Util.handleIllegalPlayerAction(player,"Warning!! Character "+player.getName()+" of account "+player.getAccountName()+" sent a false BuyList list_id.",Config.DEFAULT_PUNISH);
+				return;
+			}
 
             L2Item template = ItemTable.getInstance().getTemplate(itemId);
             weight += template.getWeight();
@@ -190,6 +225,12 @@
 		for (int i=0; i < _count; i++)
 		{
 			int itemId = _items[i];
+			
+			if (!list.containsItemId(itemId))
+			{
+				Util.handleIllegalPlayerAction(player,"Warning!! Character "+player.getName()+" of account "+player.getAccountName()+" sent a false BuyList list_id.",Config.DEFAULT_PUNISH);
+				return;
+			}
 
 			// If player doesn't own this item : Add this L2ItemInstance to Inventory and set properties lastchanged to ADDED and _wear to True
             // If player already own this item : Return its L2ItemInstance (will not be destroy because property _wear set to False)