Explorar o código

BETA: Pet food rework:
* RequestPetUseItem cleanup.
* Added method isServitor()
* L2Object cleanup.
* Unhardcoding food Ids at PetDataTable.
* Fixed duplicated consume of food when used from pet's inventory (not auto-feed).

Zoey76 %!s(int64=13) %!d(string=hai) anos
pai
achega
ecdbca559f

+ 0 - 23
L2J_Server_BETA/java/com/l2jserver/gameserver/datatables/PetDataTable.java

@@ -242,29 +242,6 @@ public final class PetDataTable extends DocumentParser
 		return (npcId > 16033) && (npcId < 16037);
 	}
 	
-	/**
-	 * Checks if is pet food.
-	 * @param itemId the item Id to verify.
-	 * @return {@code true} if the given Id is from a pet's food, {@code false} otherwise.
-	 */
-	public static boolean isPetFood(int itemId)
-	{
-		switch (itemId)
-		{
-			case 2515:
-			case 4038:
-			case 5168:
-			case 5169:
-			case 6316:
-			case 7582:
-			case 9668:
-			case 10425:
-				return true;
-			default:
-				return false;
-		}
-	}
-	
 	/**
 	 * Gets the pet items by npc.
 	 * @param npcId the NPC Id to get its summoning item.

+ 18 - 18
L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2Object.java

@@ -19,21 +19,13 @@ import com.l2jserver.gameserver.handler.ActionShiftHandler;
 import com.l2jserver.gameserver.handler.IActionHandler;
 import com.l2jserver.gameserver.idfactory.IdFactory;
 import com.l2jserver.gameserver.instancemanager.InstanceManager;
-import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Npc;
-import com.l2jserver.gameserver.model.actor.L2Playable;
-import com.l2jserver.gameserver.model.actor.L2Summon;
-import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
-import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
-import com.l2jserver.gameserver.model.actor.instance.L2TrapInstance;
 import com.l2jserver.gameserver.model.actor.knownlist.ObjectKnownList;
 import com.l2jserver.gameserver.model.actor.poly.ObjectPoly;
 import com.l2jserver.gameserver.model.actor.position.ObjectPosition;
 import com.l2jserver.gameserver.model.entity.Instance;
-import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.ExSendUIEvent;
@@ -696,7 +688,7 @@ public abstract class L2Object
 	}
 	
 	/**
-	 * @return {@code true} if object is instance of {@link L2PcInstance}
+	 * @return {@code true} if object is instance of L2PcInstance
 	 */
 	public boolean isPlayer()
 	{
@@ -704,7 +696,7 @@ public abstract class L2Object
 	}
 	
 	/**
-	 * @return {@code true} if object is instance of {@link L2Playable}
+	 * @return {@code true} if object is instance of L2Playable
 	 */
 	public boolean isPlayable()
 	{
@@ -712,7 +704,7 @@ public abstract class L2Object
 	}
 	
 	/**
-	 * @return {@code true} if object is instance of {@link L2Summon}
+	 * @return {@code true} if object is instance of L2Summon
 	 */
 	public boolean isSummon()
 	{
@@ -720,7 +712,7 @@ public abstract class L2Object
 	}
 	
 	/**
-	 * @return {@code true} if object is instance of {@link L2PetInstance}
+	 * @return {@code true} if object is instance of L2PetInstance
 	 */
 	public boolean isPet()
 	{
@@ -728,7 +720,15 @@ public abstract class L2Object
 	}
 	
 	/**
-	 * @return {@code true} if object is instance of {@link L2DoorInstance}
+	 * @return {@code true} if object is instance of L2ServitorInstance
+	 */
+	public boolean isServitor()
+	{
+		return false;
+	}
+	
+	/**
+	 * @return {@code true} if object is instance of L2DoorInstance
 	 */
 	public boolean isDoor()
 	{
@@ -736,7 +736,7 @@ public abstract class L2Object
 	}
 	
 	/**
-	 * @return {@code true} if object is instance of {@link L2Npc}
+	 * @return {@code true} if object is instance of L2Npc
 	 */
 	public boolean isNpc()
 	{
@@ -744,7 +744,7 @@ public abstract class L2Object
 	}
 	
 	/**
-	 * @return {@code true} if object is instance of {@link L2Attackable}
+	 * @return {@code true} if object is instance of L2Attackable
 	 */
 	public boolean isL2Attackable()
 	{
@@ -752,7 +752,7 @@ public abstract class L2Object
 	}
 	
 	/**
-	 * @return {@code true} if object is instance of {@link L2MonsterInstance}
+	 * @return {@code true} if object is instance of L2MonsterInstance
 	 */
 	public boolean isMonster()
 	{
@@ -760,7 +760,7 @@ public abstract class L2Object
 	}
 	
 	/**
-	 * @return {@code true} if object is instance of {@link L2TrapInstance}
+	 * @return {@code true} if object is instance of L2TrapInstance
 	 */
 	public boolean isTrap()
 	{
@@ -768,7 +768,7 @@ public abstract class L2Object
 	}
 	
 	/**
-	 * @return {@code true} if object is instance of {@link L2ItemInstance}
+	 * @return {@code true} if object is instance of L2ItemInstance
 	 */
 	public boolean isItem()
 	{

+ 6 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2ServitorInstance.java

@@ -630,4 +630,10 @@ public class L2ServitorInstance extends L2Summon
 			return (int)(getOwner().getDefenseElementValue(defenseAttribute) * sharedElementalsPercent());
 		return super.getDefenseElementValue(defenseAttribute);
 	}
+	
+	@Override
+	public boolean isServitor()
+	{
+		return true;
+	}
 }

+ 1 - 16
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestPetUseItem.java

@@ -15,7 +15,6 @@
 package com.l2jserver.gameserver.network.clientpackets;
 
 import com.l2jserver.Config;
-import com.l2jserver.gameserver.datatables.PetDataTable;
 import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.handler.ItemHandler;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -100,20 +99,6 @@ public final class RequestPetUseItem extends L2GameClientPacket
 			return;
 		}
 		
-		final int itemId = item.getItemId();
-		if (PetDataTable.isPetFood(itemId))
-		{
-			if (pet.canEatFoodId(itemId))
-			{
-				useItem(pet, item, activeChar);
-			}
-			else
-			{
-				activeChar.sendPacket(SystemMessageId.PET_CANNOT_USE_ITEM);
-				return;
-			}
-		}
-		
 		final IItemHandler handler = ItemHandler.getInstance().getHandler(item.getEtcItem());
 		if (handler != null)
 		{
@@ -152,7 +137,7 @@ public final class RequestPetUseItem extends L2GameClientPacket
 			}
 			else
 			{
-				_log.warning("no itemhandler registered for itemId:" + item.getItemId());
+				_log.warning("No item handler registered for itemId: " + item.getItemId());
 			}
 		}
 	}