All pastes #47950 Raw Edit

Item engine

public java v1 · immutable
#47950 ·published 2006-04-03 10:58 UTC
rendered paste body
Index: C:/Documents and Settings/Anderson/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/model/ItemContainer.java===================================================================--- C:/Documents and Settings/Anderson/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/model/ItemContainer.java	(revision 1718)+++ C:/Documents and Settings/Anderson/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/model/ItemContainer.java	(working copy)@@ -145,6 +145,11 @@      */     public synchronized L2ItemInstance addItem(String process, int itemId, int count, L2PcInstance actor, L2Object reference)     {+    	return addItem(process, itemId, count, 0, actor, reference);+    }+    +    public synchronized L2ItemInstance addItem(String process, int itemId, int count, int ObjectId, L2PcInstance actor, L2Object reference)+    { 		L2ItemInstance item = getItemByItemId(itemId); 		 		// If stackable item is found in inventory just add to current quantity@@ -167,11 +172,17 @@ 				} 				if (template.isStackable()) 				{-					item = ItemTable.getInstance().createItem(process, itemId, count, actor, reference);+					if (ObjectId == 0)+						item = ItemTable.getInstance().createItem(process, itemId, count, actor, reference);+					else+						item = ItemTable.getInstance().createItem(process, itemId, count, ObjectId, actor, reference); 					i = count; // End iteration 				}-				else item = ItemTable.getInstance().createItem(process, itemId, 1, actor, reference);-+				else+					if (ObjectId == 0)+						item = ItemTable.getInstance().createItem(process, itemId, 1, actor, reference);+					else+						item = ItemTable.getInstance().createItem(process, itemId, 1, ObjectId, actor, reference); 				item.setOwnerId(getOwnerId()); 				item.setLocation(getBaseLocation()); 				item.setLastChange((L2ItemInstance.ADDED));@@ -226,6 +237,7 @@     public synchronized L2ItemInstance transferItem(String process, int objectId, int count, ItemContainer target, L2PcInstance actor, L2Object reference)     {     	L2ItemInstance sourceitem = getItemByObjectId(objectId);+    	int sourceitemcount = sourceitem.getCount();     	if (sourceitem == null) return null; 		L2ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getItemId()) : null;     	@@ -236,8 +248,12 @@     	if (sourceitem.getCount() == count && targetitem == null)     	{     		removeItem(sourceitem);-			target.addItem(process, sourceitem, actor, reference);-			targetitem = sourceitem;+    		ItemTable.getInstance().destroyItem(process, sourceitem, false, false, actor, reference);+    		sourceitem.updateDatabase();+    		//ItemDestroy = true;+    		targetitem = target.addItem(process, sourceitem.getItemId(), count, objectId, actor, reference);+    		targetitem.setEnchantLevel(sourceitem.getEnchantLevel());+    		//targetitem.setLocation()     	}     	else     	{@@ -246,13 +262,18 @@     		else // Otherwise destroy old item     		{         		removeItem(sourceitem);-                ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference);+                ItemTable.getInstance().destroyItem(process, sourceitem, false, false, actor, reference);+                sourceitem.updateDatabase();+                //ItemDestroy = true;     		}     		     		if (targetitem != null) // If possible, only update counts     			targetitem.setCount(process, targetitem.getCount() + count, actor, reference);     		else // Otherwise add new item -    			targetitem = target.addItem(process, sourceitem.getItemId(), count, actor, reference);+    			if (sourceitemcount > count) +    				targetitem = target.addItem(process, sourceitem.getItemId(), count, actor, reference);+    			else+    				targetitem = target.addItem(process, sourceitem.getItemId(), count, objectId, actor, reference);     	} 		 		// Updates databaseIndex: C:/Documents and Settings/Anderson/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/ItemTable.java===================================================================--- C:/Documents and Settings/Anderson/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/ItemTable.java	(revision 1718)+++ C:/Documents and Settings/Anderson/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/ItemTable.java	(working copy)@@ -610,8 +610,22 @@ 	 */ 	public L2ItemInstance createItem(String process, int itemId, int count, L2PcInstance actor, L2Object reference) 	{+		return createItem(process, itemId, count, 0, actor, reference);+	}++	public L2ItemInstance createItem(String process, int itemId, int count, L2PcInstance actor)+	{+		return createItem(process, itemId, count, actor, null);+	}+	+	public L2ItemInstance createItem(String process, int itemId, int count, int objectId, L2PcInstance actor, L2Object reference)+	{ 		// Create and Init the L2ItemInstance corresponding to the Item Identifier-		L2ItemInstance item = new L2ItemInstance(IdFactory.getInstance().getNextId(), itemId);+		L2ItemInstance item;+		if (objectId == 0)+			item = new L2ItemInstance(IdFactory.getInstance().getNextId(), itemId);+		else+			item = new L2ItemInstance(objectId, itemId); 		if (Config.DEBUG) _log.fine("ItemTable: Item created  oid:" + item.getObjectId()+ " itemid:" + itemId); 		 		// Add the L2ItemInstance object to _allObjects of L2world@@ -629,11 +643,6 @@ 		} 		return item; 	 	}--	public L2ItemInstance createItem(String process, int itemId, int count, L2PcInstance actor)-	{-		return createItem(process, itemId, count, actor, null);-	} 	 	/** 	 * Returns a dummy (fr = factice) item.<BR><BR>@@ -680,6 +689,11 @@ 	 */ 	public void destroyItem(String process, L2ItemInstance item, L2PcInstance actor, L2Object reference) 	{+		destroyItem(process, item, true, true, actor, reference);+	}+	+	public void destroyItem(String process, L2ItemInstance item, boolean release, boolean destroyPet, L2PcInstance actor, L2Object reference)+	{ 		synchronized (item) 		{ 	    	item.setCount(0);@@ -688,7 +702,7 @@ 	        item.setLastChange(L2ItemInstance.REMOVED);  	        L2World.getInstance().removeObject(item);-			IdFactory.getInstance().releaseId(item.getObjectId());+			if (release) IdFactory.getInstance().releaseId(item.getObjectId());  			if (Config.LOG_ITEMS)  			{@@ -724,11 +738,14 @@ 					} */ 					// Delete the pet in db-					con = L2DatabaseFactory.getInstance().getConnection();-					PreparedStatement statement = con.prepareStatement("DELETE FROM pets WHERE item_obj_id=?");-					statement.setInt(1, item.getObjectId());-					statement.execute();-					statement.close();+					if (destroyPet)+					{+						con = L2DatabaseFactory.getInstance().getConnection();+						PreparedStatement statement = con.prepareStatement("DELETE FROM pets WHERE item_obj_id=?");+						statement.setInt(1, item.getObjectId());+						statement.execute();+						statement.close();	+					} 				} 				catch (Exception e) 				{@@ -741,7 +758,6 @@ 			} 		} 	}- 	public void reload() 	{ 		synchronized(_instance)