Browse Source

BETA: Item Handlers rework:
* Unhardcoding most of skill ids
* Fixed some typos
* Added missing system messages
* Added some TODO: comments
* Decreasing range of shot skill broadcasts

Rumen Nikiforov 13 năm trước cách đây
mục cha
commit
164b091eb2
32 tập tin đã thay đổi với 341 bổ sung295 xóa
  1. 27 22
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BeastSoulShot.java
  2. 17 15
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BeastSpice.java
  3. 22 29
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BeastSpiritShot.java
  4. 3 2
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BlessedSpiritShot.java
  5. 6 1
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Book.java
  6. 4 3
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Calculator.java
  7. 8 1
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/ChristmasTree.java
  8. 5 2
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Disguise.java
  9. 1 2
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Elixir.java
  10. 7 2
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EnchantAttribute.java
  11. 7 2
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EnchantScrolls.java
  12. 6 6
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EnergyStarStone.java
  13. 16 13
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EventItem.java
  14. 3 2
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/ExtractableItems.java
  15. 24 19
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/FishShots.java
  16. 27 19
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Harvester.java
  17. 5 2
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Maps.java
  18. 6 0
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/MercTicket.java
  19. 6 2
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/NicknameColor.java
  20. 17 6
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/PaganKeys.java
  21. 19 44
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/PetFood.java
  22. 9 5
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/QuestItems.java
  23. 2 1
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Recipes.java
  24. 28 25
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/RollingDice.java
  25. 17 38
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/ScrollOfResurrection.java
  26. 16 13
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Seed.java
  27. 5 2
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SevenSignsRecord.java
  28. 2 1
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SoulShots.java
  29. 5 2
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SpecialXMas.java
  30. 2 1
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SpiritShot.java
  31. 12 9
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SummonItems.java
  32. 7 4
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/TeleportBookmark.java

+ 27 - 22
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BeastSoulShot.java

@@ -14,11 +14,13 @@
  */
 package handlers.itemhandlers;
 
+import java.util.logging.Level;
+
 import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.L2Summon;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
+import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
@@ -33,21 +35,19 @@ public class BeastSoulShot implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (playable == null)
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
-		L2PcInstance activeOwner = null;
-		if (playable instanceof L2Summon)
+		L2PcInstance activeOwner = playable.getActingPlayer();
+		if (!playable.isPlayer())
 		{
-			activeOwner = ((L2Summon) playable).getOwner();
-			activeOwner.sendPacket(SystemMessageId.PET_CANNOT_USE_ITEM);
+			playable.sendPacket(SystemMessageId.PET_CANNOT_USE_ITEM);
 			return false;
 		}
-		else if (playable instanceof L2PcInstance)
-			activeOwner = (L2PcInstance) playable;
 		
-		if (activeOwner == null)
-			return false;
 		L2Summon activePet = activeOwner.getPet();
 		
 		if (activePet == null)
@@ -62,9 +62,16 @@ public class BeastSoulShot implements IItemHandler
 			return false;
 		}
 		
-		int itemId = item.getItemId();
-		short shotConsumption = activePet.getSoulShotsPerHit();
-		long shotCount = item.getCount();
+		final int itemId = item.getItemId();
+		final short shotConsumption = activePet.getSoulShotsPerHit();
+		final long shotCount = item.getCount();
+		final SkillHolder[] skills = item.getItem().getSkills();
+		
+		if (skills == null)
+		{
+			_log.log(Level.WARNING, getClass().getSimpleName() + ": is missing skills!");
+			return false;
+		}
 		
 		if (!(shotCount > shotConsumption))
 		{
@@ -74,23 +81,21 @@ public class BeastSoulShot implements IItemHandler
 			return false;
 		}
 		
-		L2ItemInstance weaponInst = null;
-		
-		if (activePet instanceof L2PetInstance)
-			weaponInst = ((L2PetInstance) activePet).getActiveWeaponInstance();
+		L2ItemInstance weaponInst = activePet.getActiveWeaponInstance();
 		
 		if (weaponInst == null)
 		{
-			if (activePet.getChargedSoulShot() != L2ItemInstance.CHARGED_NONE)
+			if (activePet.getChargedSoulShot() != L2ItemInstance.CHARGED_NONE) // SoulShots are already active.
+			{
 				return false;
+			}
 			
 			activePet.setChargedSoulShot(L2ItemInstance.CHARGED_SOULSHOT);
 		}
 		else
 		{
-			if (weaponInst.getChargedSoulshot() != L2ItemInstance.CHARGED_NONE)
-			{
-				// SoulShots are already active.
+			if (weaponInst.getChargedSoulshot() != L2ItemInstance.CHARGED_NONE) // SoulShots are already active.
+			{	
 				return false;
 			}
 			weaponInst.setChargedSoulshot(L2ItemInstance.CHARGED_SOULSHOT);
@@ -107,7 +112,7 @@ public class BeastSoulShot implements IItemHandler
 		// Pet uses the power of spirit.
 		activeOwner.sendPacket(SystemMessageId.PET_USE_SPIRITSHOT);
 		
-		Broadcast.toSelfAndKnownPlayersInRadius(activeOwner, new MagicSkillUse(activePet, activePet, itemId == 6645 ? 2033 : 22036, 1, 0, 0), 360000/*600*/);
+		Broadcast.toSelfAndKnownPlayersInRadius(activeOwner, new MagicSkillUse(activePet, activePet, skills[0].getSkillId(), skills[0].getSkillLvl(), 0, 0), 2000);
 		return true;
 	}
 }

+ 17 - 15
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BeastSpice.java

@@ -14,13 +14,14 @@
  */
 package handlers.itemhandlers;
 
-import com.l2jserver.gameserver.datatables.SkillTable;
+import java.util.logging.Level;
+
 import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.instance.L2FeedableBeastInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
-import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.network.SystemMessageId;
 
 public class BeastSpice implements IItemHandler
@@ -28,10 +29,20 @@ public class BeastSpice implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
+		
+		final L2PcInstance activeChar = playable.getActingPlayer();
+		final SkillHolder[] skills = item.getItem().getSkills();
 		
-		L2PcInstance activeChar = (L2PcInstance) playable;
+		if (skills == null)
+		{
+			_log.log(Level.WARNING, getClass().getSimpleName() + ": is missing skills!");
+			return false;
+		}
 		
 		if (!(activeChar.getTarget() instanceof L2FeedableBeastInstance))
 		{
@@ -39,19 +50,10 @@ public class BeastSpice implements IItemHandler
 			return false;
 		}
 		
-		int skillId = 0;
-		switch (item.getItemId())
+		for (SkillHolder sk : skills)
 		{
-			case 6643:
-				skillId = 2188;
-				break;
-			case 6644:
-				skillId = 2189;
-				break;
+			activeChar.useMagic(sk.getSkill(), false, false);
 		}
-		L2Skill skill = SkillTable.getInstance().getInfo(skillId, 1);
-		if (skill != null)
-			activeChar.useMagic(skill, false, false);
 		return true;
 	}
 }

+ 22 - 29
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BeastSpiritShot.java

@@ -14,11 +14,13 @@
  */
 package handlers.itemhandlers;
 
+import java.util.logging.Level;
+
 import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.L2Summon;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
+import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
@@ -33,12 +35,15 @@ public class BeastSpiritShot implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (playable == null)
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
 		L2PcInstance activeOwner = playable.getActingPlayer();
 		
-		if (playable instanceof L2Summon)
+		if (!playable.isPlayer())
 		{
 			activeOwner.sendPacket(SystemMessageId.PET_CANNOT_USE_ITEM);
 			return false;
@@ -58,9 +63,16 @@ public class BeastSpiritShot implements IItemHandler
 			return false;
 		}
 		
-		int itemId = item.getItemId();
-		boolean isBlessed = (itemId == 6647 || itemId == 20334);
-		short shotConsumption = activePet.getSpiritShotsPerHit();
+		final int itemId = item.getItemId();
+		final boolean isBlessed = (itemId == 6647 || itemId == 20334); // TODO: Unhardcode these!
+		final short shotConsumption = activePet.getSpiritShotsPerHit();
+		final SkillHolder[] skills = item.getItem().getSkills();
+		
+		if (skills == null)
+		{
+			_log.log(Level.WARNING, getClass().getSimpleName() + ": is missing skills!");
+			return false;
+		}
 		
 		long shotCount = item.getCount();
 		if (!(shotCount > shotConsumption))
@@ -71,14 +83,11 @@ public class BeastSpiritShot implements IItemHandler
 			return false;
 		}
 		
-		L2ItemInstance weaponInst = null;
-		
-		if (activePet instanceof L2PetInstance)
-			weaponInst = ((L2PetInstance) activePet).getActiveWeaponInstance();
+		L2ItemInstance weaponInst = activePet.getActiveWeaponInstance();
 		
 		if (weaponInst == null)
 		{
-			if (activePet.getChargedSpiritShot() != L2ItemInstance.CHARGED_NONE)
+			if (activePet.getChargedSpiritShot() != L2ItemInstance.CHARGED_NONE) // SoulShots are already active.
 				return false;
 			
 			if (isBlessed)
@@ -88,7 +97,7 @@ public class BeastSpiritShot implements IItemHandler
 		}
 		else
 		{
-			if (weaponInst.getChargedSpiritshot() != L2ItemInstance.CHARGED_NONE)
+			if (weaponInst.getChargedSpiritshot() != L2ItemInstance.CHARGED_NONE) // SoulShots are already active.
 			{
 				// SpiritShots are already active.
 				return false;
@@ -109,23 +118,7 @@ public class BeastSpiritShot implements IItemHandler
 		
 		// Pet uses the power of spirit.
 		activeOwner.sendPacket(SystemMessageId.PET_USE_SPIRITSHOT);
-		int skillId = 0;
-		switch (itemId)
-		{
-			case 6646:
-				skillId = 2008;
-				break;
-			case 6647:
-				skillId = 2009;
-				break;
-			case 20333:
-				skillId = 22037;
-				break;
-			case 20334:
-				skillId = 22038;
-				break;
-		}
-		Broadcast.toSelfAndKnownPlayersInRadius(activeOwner, new MagicSkillUse(activePet, activePet, skillId, 1, 0, 0), 360000/*600*/);
+		Broadcast.toSelfAndKnownPlayersInRadius(activeOwner, new MagicSkillUse(activePet, activePet, skills[0].getSkillId(), skills[0].getSkillLvl(), 0, 0), 2000);
 		return true;
 	}
 }

+ 3 - 2
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BlessedSpiritShot.java

@@ -34,6 +34,7 @@ public class BlessedSpiritShot implements IItemHandler
 	{
 		if (!playable.isPlayer())
 		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
 		}
 		
@@ -59,7 +60,7 @@ public class BlessedSpiritShot implements IItemHandler
 		}
 		
 		// Check if Blessed SpiritShot is already active (it can be charged over SpiritShot)
-		if (weaponInst.getChargedSpiritshot() != L2ItemInstance.CHARGED_NONE)
+		if (weaponInst.getChargedSpiritshot() != L2ItemInstance.CHARGED_NONE) // SoulShots are already active.
 			return false;
 		
 		// Check for correct grade
@@ -86,7 +87,7 @@ public class BlessedSpiritShot implements IItemHandler
 		
 		// Send message to client
 		activeChar.sendPacket(SystemMessageId.ENABLED_SPIRITSHOT);
-		Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, skills[0].getSkillId(), skills[0].getSkillLvl(), 0, 0), 360000);
+		Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, skills[0].getSkillId(), skills[0].getSkillLvl(), 0, 0), 2000);
 		return true;
 	}
 }

+ 6 - 1
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Book.java

@@ -19,6 +19,7 @@ import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 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.NpcHtmlMessage;
 
@@ -27,8 +28,12 @@ public class Book implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
+		
 		L2PcInstance activeChar = (L2PcInstance) playable;
 		final int itemId = item.getItemId();
 		

+ 4 - 3
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Calculator.java

@@ -17,6 +17,7 @@ package handlers.itemhandlers;
 import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ShowCalculator;
 
 /**
@@ -24,16 +25,16 @@ import com.l2jserver.gameserver.network.serverpackets.ShowCalculator;
  */
 public class Calculator implements IItemHandler
 {
-	private static final int CalculatorId = 4393;
-	
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
 		if (!playable.isPlayer())
 		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
 		}
-		playable.broadcastPacket(new ShowCalculator(CalculatorId));
+		
+		playable.sendPacket(new ShowCalculator(item.getItemId()));
 		return true;
 	}
 }

+ 8 - 1
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/ChristmasTree.java

@@ -29,7 +29,13 @@ public class ChristmasTree implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		L2PcInstance activeChar = (L2PcInstance) playable;
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
+			return false;
+		}
+		
+		L2PcInstance activeChar = playable.getActingPlayer();
 		L2NpcTemplate template1 = null;
 		
 		switch (item.getItemId())
@@ -55,6 +61,7 @@ public class ChristmasTree implements IItemHandler
 			spawn.setLocx(target.getX());
 			spawn.setLocy(target.getY());
 			spawn.setLocz(target.getZ());
+			spawn.setInstanceId(activeChar.getInstanceId());
 			spawn.spawnOne(false);
 			
 			activeChar.destroyItem("Consume", item.getObjectId(), 1, null, false);

+ 5 - 2
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Disguise.java

@@ -29,10 +29,13 @@ public class Disguise implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
-		L2PcInstance activeChar = (L2PcInstance) playable;
+		L2PcInstance activeChar = playable.getActingPlayer();
 		
 		int regId = TerritoryWarManager.getInstance().getRegisteredTerritoryId(activeChar);
 		if (regId > 0 && regId == (item.getItemId() - 13596))

+ 1 - 2
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Elixir.java

@@ -15,7 +15,6 @@
 package handlers.itemhandlers;
 
 import com.l2jserver.gameserver.model.actor.L2Playable;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 
@@ -24,7 +23,7 @@ public class Elixir extends ItemSkills
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
 		{
 			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;

+ 7 - 2
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EnchantAttribute.java

@@ -26,12 +26,17 @@ public class EnchantAttribute implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
-		final L2PcInstance activeChar = (L2PcInstance) playable;
+		final L2PcInstance activeChar = playable.getActingPlayer();
 		if (activeChar.isCastingNow())
+		{
 			return false;
+		}
 		
 		if (activeChar.isEnchanting())
 		{

+ 7 - 2
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EnchantScrolls.java

@@ -26,12 +26,17 @@ public class EnchantScrolls implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
-		final L2PcInstance activeChar = (L2PcInstance) playable;
+		final L2PcInstance activeChar = playable.getActingPlayer();
 		if (activeChar.isCastingNow())
+		{
 			return false;
+		}
 		
 		if (activeChar.isEnchanting())
 		{

+ 6 - 6
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EnergyStarStone.java

@@ -17,7 +17,6 @@ package handlers.itemhandlers;
 import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.instance.L2AirShipInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2ControllableAirShipInstance;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
@@ -28,13 +27,14 @@ public class EnergyStarStone extends ItemSkills
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
-		final L2AirShipInstance ship = ((L2PcInstance)playable).getAirShip();
-		if (ship == null
-				|| !(ship instanceof L2ControllableAirShipInstance)
-				|| ship.getFuel() >= ship.getMaxFuel())
+		final L2AirShipInstance ship = playable.getActingPlayer().getAirShip();
+		if (ship == null || !(ship instanceof L2ControllableAirShipInstance) || ship.getFuel() >= ship.getMaxFuel())
 		{
 			final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
 			sm.addItemName(item);

+ 16 - 13
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EventItem.java

@@ -34,14 +34,18 @@ public class EventItem implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		boolean used = false;
-		if(!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
-		final L2PcInstance activeChar = (L2PcInstance)playable;
+		boolean used = false;
+		
+		final L2PcInstance activeChar = playable.getActingPlayer();
 		
 		final int itemId = item.getItemId();
-		switch(itemId)
+		switch (itemId)
 		{
 			case 13787: // Handy's Block Checker Bond
 				used = useBlockCheckerItem(activeChar, item);
@@ -50,7 +54,7 @@ public class EventItem implements IItemHandler
 				used = useBlockCheckerItem(activeChar, item);
 				break;
 			default:
-				_log.warning("EventItemHandler: Item with id: "+itemId+" is not handled");
+				_log.warning("EventItemHandler: Item with id: " + itemId + " is not handled");
 		}
 		return used;
 	}
@@ -58,7 +62,7 @@ public class EventItem implements IItemHandler
 	private final boolean useBlockCheckerItem(final L2PcInstance castor, L2ItemInstance item)
 	{
 		final int blockCheckerArena = castor.getBlockCheckerArena();
-		if(blockCheckerArena == -1)
+		if (blockCheckerArena == -1)
 		{
 			SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
 			msg.addItemName(item);
@@ -66,29 +70,28 @@ public class EventItem implements IItemHandler
 			return false;
 		}
 		
-		
 		final L2Skill sk = item.getEtcItem().getSkills()[0].getSkill();
-		if(sk == null)
+		if (sk == null)
 			return false;
 		
-		if(!castor.destroyItem("Consume", item, 1, castor, true))
+		if (!castor.destroyItem("Consume", item, 1, castor, true))
 			return false;
 		
 		final L2BlockInstance block = (L2BlockInstance) castor.getTarget();
 		
 		final ArenaParticipantsHolder holder = HandysBlockCheckerManager.getInstance().getHolder(blockCheckerArena);
-		if(holder != null)
+		if (holder != null)
 		{
 			final int team = holder.getPlayerTeam(castor);
-			for(final L2PcInstance pc : block.getKnownList().getKnownPlayersInRadius(sk.getEffectRange()))
+			for (final L2PcInstance pc : block.getKnownList().getKnownPlayersInRadius(sk.getEffectRange()))
 			{
 				final int enemyTeam = holder.getPlayerTeam(pc);
-				if(enemyTeam != -1 && enemyTeam != team)
+				if (enemyTeam != -1 && enemyTeam != team)
 					sk.getEffects(castor, pc);
 			}
 			return true;
 		}
-		_log.warning("Char: "+castor.getName()+"["+castor.getObjectId()+"] has unknown block checker arena");
+		_log.warning("Char: " + castor.getName() + "[" + castor.getObjectId() + "] has unknown block checker arena");
 		return false;
 	}
 }

+ 3 - 2
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/ExtractableItems.java

@@ -38,8 +38,9 @@ public class ExtractableItems implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
 		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
 		}
 		
@@ -52,7 +53,7 @@ public class ExtractableItems implements IItemHandler
 			return false;
 		}
 		
-		//destroy item
+		// destroy item
 		if (!activeChar.destroyItem("Extract", item.getObjectId(), 1, activeChar, true))
 		{
 			return false;

+ 24 - 19
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/FishShots.java

@@ -14,13 +14,16 @@
  */
 package handlers.itemhandlers;
 
+import java.util.logging.Level;
+
 import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.items.L2Weapon;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.model.items.type.L2ActionType;
 import com.l2jserver.gameserver.model.items.type.L2WeaponType;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
@@ -31,36 +34,38 @@ import com.l2jserver.gameserver.util.Broadcast;
  */
 public class FishShots implements IItemHandler
 {
-	private static final int[] SKILL_IDS =
-	{
-		2181, 2182, 2183, 2184, 2185, 2186
-	};
-	
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
-		L2PcInstance activeChar = (L2PcInstance) playable;
-		L2ItemInstance weaponInst = activeChar.getActiveWeaponInstance();
-		L2Weapon weaponItem = activeChar.getActiveWeaponItem();
+		final L2PcInstance activeChar = playable.getActingPlayer();
+		final L2ItemInstance weaponInst = activeChar.getActiveWeaponInstance();
+		final L2Weapon weaponItem = activeChar.getActiveWeaponItem();
 		
 		if (weaponInst == null || weaponItem.getItemType() != L2WeaponType.FISHINGROD)
 			return false;
 		
-		if (weaponInst.getChargedFishshot())
-			// spirit shot is already active
+		if (weaponInst.getChargedFishshot()) // spirit shot is already active
 			return false;
 		
-		int FishshotId = item.getItemId();
-		int grade = weaponItem.getCrystalType();
-		long count = item.getCount();
+		final long count = item.getCount();
+		final SkillHolder[] skills = item.getItem().getSkills();
+		
+		if (skills == null)
+		{
+			_log.log(Level.WARNING, getClass().getSimpleName() + ": is missing skills!");
+			return false;
+		}
+		
+		boolean gradeCheck = item.isEtcItem() && item.getEtcItem().getDefaultAction() == L2ActionType.fishingshot && weaponInst.getItem().getItemGradeSPlus() == item.getItem().getItemGradeSPlus();
 		
-		if ((grade == L2Item.CRYSTAL_NONE && FishshotId != 6535) || (grade == L2Item.CRYSTAL_D && FishshotId != 6536) || (grade == L2Item.CRYSTAL_C && FishshotId != 6537) || (grade == L2Item.CRYSTAL_B && FishshotId != 6538)
-				|| (grade == L2Item.CRYSTAL_A && FishshotId != 6539) || (FishshotId != 6540 && grade == L2Item.CRYSTAL_S ))
+		if (!gradeCheck)
 		{
-			//1479 - This fishing shot is not fit for the fishing pole crystal.
 			activeChar.sendPacket(SystemMessageId.WRONG_FISHINGSHOT_GRADE);
 			return false;
 		}
@@ -73,7 +78,7 @@ public class FishShots implements IItemHandler
 		L2Object oldTarget = activeChar.getTarget();
 		activeChar.setTarget(activeChar);
 		
-		Broadcast.toSelfAndKnownPlayers(activeChar, new MagicSkillUse(activeChar, SKILL_IDS[grade], 1, 0, 0));
+		Broadcast.toSelfAndKnownPlayers(activeChar, new MagicSkillUse(activeChar, skills[0].getSkillId(), skills[0].getSkillLvl(), 0, 0));
 		activeChar.setTarget(oldTarget);
 		return true;
 	}

+ 27 - 19
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Harvester.java

@@ -14,54 +14,62 @@
  */
 package handlers.itemhandlers;
 
-import com.l2jserver.gameserver.datatables.SkillTable;
+import java.util.logging.Level;
+
 import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.instancemanager.CastleManorManager;
 import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
-import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 
 /**
- * @author  l3x
+ * @author l3x
  */
 public class Harvester implements IItemHandler
 {
-	L2PcInstance _activeChar;
-	L2MonsterInstance _target;
-	
 	@Override
-	public boolean useItem(L2Playable playable, L2ItemInstance _item, boolean forceUse)
+	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
 		if (CastleManorManager.getInstance().isDisabled())
+		{
 			return false;
+		}
 		
-		_activeChar = (L2PcInstance) playable;
+		final L2PcInstance activeChar = playable.getActingPlayer();
+		final SkillHolder[] skills = item.getItem().getSkills();
+		L2MonsterInstance target = null;
+		if (activeChar.getTarget() != null && activeChar.getTarget().isMonster())
+		{
+			target = (L2MonsterInstance) activeChar.getTarget();
+		}
 		
-		if (!(_activeChar.getTarget() instanceof L2MonsterInstance))
+		if (skills == null)
 		{
-			_activeChar.sendPacket(SystemMessageId.INCORRECT_TARGET);
-			_activeChar.sendPacket(ActionFailed.STATIC_PACKET);
+			_log.log(Level.WARNING, getClass().getSimpleName() + ": is missing skills!");
 			return false;
 		}
 		
-		_target = (L2MonsterInstance) _activeChar.getTarget();
-		
-		if (_target == null || !_target.isDead())
+		if (target == null || !target.isDead())
 		{
-			_activeChar.sendPacket(ActionFailed.STATIC_PACKET);
+			activeChar.sendPacket(SystemMessageId.INCORRECT_TARGET);
+			activeChar.sendPacket(ActionFailed.STATIC_PACKET);
 			return false;
 		}
 		
-		L2Skill skill = SkillTable.getInstance().getInfo(2098, 1); //harvesting skill
-		if (skill != null)
-			_activeChar.useMagic(skill, false, false);
+		for (SkillHolder sk : skills)
+		{
+			activeChar.useMagic(sk.getSkill(), false, false);
+		}
 		return true;
 	}
 }

+ 5 - 2
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Maps.java

@@ -16,8 +16,8 @@ package handlers.itemhandlers;
 
 import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.model.actor.L2Playable;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ShowMiniMap;
 
 /**
@@ -28,8 +28,11 @@ public class Maps implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
 		playable.sendPacket(new ShowMiniMap(item.getItemId()));
 		return true;

+ 6 - 0
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/MercTicket.java

@@ -41,6 +41,12 @@ public class MercTicket implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
+			return false;
+		}
+		
 		int itemId = item.getItemId();
 		L2PcInstance activeChar = (L2PcInstance) playable;
 		Castle castle = CastleManager.getInstance().getCastle(activeChar);

+ 6 - 2
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/NicknameColor.java

@@ -16,8 +16,8 @@ package handlers.itemhandlers;
 
 import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.model.actor.L2Playable;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ExRequestChangeNicknameColor;
 
 public class NicknameColor implements IItemHandler
@@ -25,8 +25,12 @@ public class NicknameColor implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
+		
 		playable.sendPacket(new ExRequestChangeNicknameColor(item.getObjectId()));
 		return true;
 	}

+ 17 - 6
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/PaganKeys.java

@@ -26,7 +26,7 @@ import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 
 /**
- * @author  chris
+ * @author chris
  */
 public class PaganKeys implements IItemHandler
 {
@@ -35,11 +35,15 @@ public class PaganKeys implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		int itemId = item.getItemId();
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
-		L2PcInstance activeChar = (L2PcInstance) playable;
-		L2Object target = activeChar.getTarget();
+		}
+		
+		final int itemId = item.getItemId();
+		final L2PcInstance activeChar = (L2PcInstance) playable;
+		final L2Object target = activeChar.getTarget();
 		
 		if (!(target instanceof L2DoorInstance))
 		{
@@ -65,6 +69,7 @@ public class PaganKeys implements IItemHandler
 		if (!playable.destroyItem("Consume", item.getObjectId(), 1, null, false))
 			return false;
 		
+		// TODO: Unhardcode these!
 		switch (itemId)
 		{
 			case 9698:
@@ -73,10 +78,13 @@ public class PaganKeys implements IItemHandler
 					if (activeChar.getInstanceId() != door.getInstanceId())
 					{
 						for (L2DoorInstance instanceDoor : InstanceManager.getInstance().getInstance(activeChar.getInstanceId()).getDoors())
+						{
 							if (instanceDoor.getDoorId() == door.getDoorId())
 							{
 								instanceDoor.openMe();
+								break;
 							}
+						}
 					}
 					else
 					{
@@ -94,10 +102,13 @@ public class PaganKeys implements IItemHandler
 					if (activeChar.getInstanceId() != door.getInstanceId())
 					{
 						for (L2DoorInstance instanceDoor : InstanceManager.getInstance().getInstance(activeChar.getInstanceId()).getDoors())
+						{
 							if (instanceDoor.getDoorId() == door.getDoorId())
 							{
 								instanceDoor.openMe();
+								break;
 							}
+						}
 					}
 					else
 					{
@@ -110,7 +121,7 @@ public class PaganKeys implements IItemHandler
 				}
 				break;
 			case 8056:
-				if (door.getDoorId() == 23150004||door.getDoorId() == 23150003)
+				if (door.getDoorId() == 23150004 || door.getDoorId() == 23150003)
 				{
 					DoorTable.getInstance().getDoor(23150003).openMe();
 					DoorTable.getInstance().getDoor(23150004).openMe();

+ 19 - 44
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/PetFood.java

@@ -23,6 +23,7 @@ import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
+import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.network.SystemMessageId;
@@ -37,64 +38,38 @@ public class PetFood implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		int itemId = item.getItemId();
-		boolean used = false;
-		switch (itemId)
+		final SkillHolder[] skills = item.getItem().getSkills();
+		if (skills != null)
 		{
-			case 2515: // Food For Wolves
-				used = useFood(playable, 2048, item);
-				break;
-			case 4038: // Food For Hatchling
-				used = useFood(playable, 2063, item);
-				break;
-			case 5168: // Food for Strider
-				used = useFood(playable, 2101, item);
-				break;
-			case 5169: // Deluxe Food for Strider
-				used = useFood(playable, 2102, item);
-				break;
-			case 6316: // Food for Wyvern
-				used = useFood(playable, 2180, item);
-				break;
-			case 7582: // Baby Spice
-				used = useFood(playable, 2048, item);
-				break;
-			case 9668: // Great Wolf Food
-				used = useFood(playable, 2361, item);
-				break;
-			case 10425: // Improved Baby Pet Food
-				used = useFood(playable, 2361, item);
-				break;
-			case 14818: // Enriched Pet Food for Wolves
-				used = useFood(playable, 2916, item);
-				break;
-			default:
-				_log.warning("Pet Food Id: " + itemId + " without handler!");
-				break;
+			for (SkillHolder sk : skills)
+			{
+				useFood(playable, sk.getSkillId(), sk.getSkillLvl(), item);
+			}
 		}
-		return used;
+		return true;
 	}
 	
-	public boolean useFood(L2Playable activeChar, int magicId, L2ItemInstance item)
+	public boolean useFood(L2Playable activeChar, int skillId, int skillLevel, L2ItemInstance item)
 	{
-		L2Skill skill = SkillTable.getInstance().getInfo(magicId, 1);
+		L2Skill skill = SkillTable.getInstance().getInfo(skillId, skillLevel);
 		if (skill != null)
 		{
-			if (activeChar instanceof L2PetInstance)
+			if (activeChar.isPet())
 			{
-				if (((L2PetInstance) activeChar).destroyItem("Consume", item.getObjectId(), 1, null, false))
+				L2PetInstance pet = (L2PetInstance) activeChar;
+				if (pet.destroyItem("Consume", item.getObjectId(), 1, null, false))
 				{
-					activeChar.broadcastPacket(new MagicSkillUse(activeChar, activeChar, magicId, 1, 0, 0));
-					((L2PetInstance) activeChar).setCurrentFed(((L2PetInstance) activeChar).getCurrentFed() + (skill.getFeed() * Config.PET_FOOD_RATE));
-					((L2PetInstance) activeChar).broadcastStatusUpdate();
-					if (((L2PetInstance) activeChar).getCurrentFed() < ((((L2PetInstance) activeChar).getPetData().getHungryLimit() / 100f) * ((L2PetInstance) activeChar).getPetLevelData().getPetMaxFeed()))
+					pet.broadcastPacket(new MagicSkillUse(pet, pet, skillId, skillLevel, 0, 0));
+					pet.setCurrentFed(((L2PetInstance) activeChar).getCurrentFed() + (skill.getFeed() * Config.PET_FOOD_RATE));
+					pet.broadcastStatusUpdate();
+					if (pet.getCurrentFed() < ((pet.getPetData().getHungryLimit() / 100f) * pet.getPetLevelData().getPetMaxFeed()))
 					{
 						activeChar.sendPacket(SystemMessageId.YOUR_PET_ATE_A_LITTLE_BUT_IS_STILL_HUNGRY);
 					}
 					return true;
 				}
 			}
-			else if (activeChar instanceof L2PcInstance)
+			else if (activeChar.isPlayer())
 			{
 				final L2PcInstance player = activeChar.getActingPlayer();
 				if (player.isMounted())
@@ -104,7 +79,7 @@ public class PetFood implements IItemHandler
 					{
 						if (player.destroyItem("Consume", item.getObjectId(), 1, null, false))
 						{
-							player.broadcastPacket(new MagicSkillUse(activeChar, activeChar, magicId, 1, 0, 0));
+							player.broadcastPacket(new MagicSkillUse(activeChar, activeChar, skillId, skillLevel, 0, 0));
 							player.setCurrentFeed(player.getCurrentFeed() + skill.getFeed());
 						}
 						return true;

+ 9 - 5
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/QuestItems.java

@@ -21,6 +21,7 @@ import com.l2jserver.gameserver.model.items.L2Item;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.QuestState;
+import com.l2jserver.gameserver.network.SystemMessageId;
 
 /**
  * @author BiggBoss
@@ -30,19 +31,22 @@ public class QuestItems implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceuse)
 	{
-		if(!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
-		L2PcInstance player = (L2PcInstance) playable;
+		L2PcInstance player = playable.getActingPlayer();
 		
-		if(!player.destroyItem("Item Handler - QuestItems", item, player, true))
+		if (!player.destroyItem("Item Handler - QuestItems", item, player, true))
 			return false;
 		
 		L2Item itm = item.getItem();
-		for(Quest quest : itm.getQuestEvents())
+		for (Quest quest : itm.getQuestEvents())
 		{
 			QuestState state = player.getQuestState(quest.getName());
-			if(state == null || !state.isStarted())
+			if (state == null || !state.isStarted())
 				continue;
 			
 			quest.notifyItemUse(itm, player);

+ 2 - 1
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Recipes.java

@@ -31,8 +31,9 @@ public class Recipes implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
 		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
 		}
 		

+ 28 - 25
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/RollingDice.java

@@ -30,10 +30,13 @@ public class RollingDice implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
-		L2PcInstance activeChar = (L2PcInstance) playable;
+		L2PcInstance activeChar = playable.getActingPlayer();
 		int itemId = item.getItemId();
 		
 		if (activeChar.isInOlympiadMode())
@@ -42,29 +45,30 @@ public class RollingDice implements IItemHandler
 			return false;
 		}
 		
-		if (itemId == 4625 || itemId == 4626 || itemId == 4627 || itemId == 4628)
+		int number = rollDice(activeChar);
+		if (number == 0)
 		{
-			int number = rollDice(activeChar);
-			if (number == 0)
-			{
-				activeChar.sendPacket(SystemMessageId.YOU_MAY_NOT_THROW_THE_DICE_AT_THIS_TIME_TRY_AGAIN_LATER);
-				return false;
-			}
-			
-			Broadcast.toSelfAndKnownPlayers(activeChar, new Dice(activeChar.getObjectId(), item.getItemId(), number, activeChar.getX() - 30, activeChar.getY() - 30, activeChar.getZ()));
-			
-			SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_ROLLED_S2);
-			sm.addString(activeChar.getName());
-			sm.addNumber(number);
-			
-			activeChar.sendPacket(sm);
-			if (activeChar.isInsideZone(L2Character.ZONE_PEACE))
-				Broadcast.toKnownPlayers(activeChar, sm);
-			else if (activeChar.isInParty())
-				activeChar.getParty().broadcastToPartyMembers(activeChar, sm);
-			return true;
+			activeChar.sendPacket(SystemMessageId.YOU_MAY_NOT_THROW_THE_DICE_AT_THIS_TIME_TRY_AGAIN_LATER);
+			return false;
 		}
-		return false;
+		
+		Broadcast.toSelfAndKnownPlayers(activeChar, new Dice(activeChar.getObjectId(), itemId, number, activeChar.getX() - 30, activeChar.getY() - 30, activeChar.getZ()));
+		
+		SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_ROLLED_S2);
+		sm.addString(activeChar.getName());
+		sm.addNumber(number);
+		
+		activeChar.sendPacket(sm);
+		if (activeChar.isInsideZone(L2Character.ZONE_PEACE))
+		{
+			Broadcast.toKnownPlayers(activeChar, sm);
+		}
+		else if (activeChar.isInParty()) // TODO: Verify this!
+		{
+			activeChar.getParty().broadcastToPartyMembers(activeChar, sm);
+		}
+		return true;
+		
 	}
 	
 	/**
@@ -74,8 +78,7 @@ public class RollingDice implements IItemHandler
 	private int rollDice(L2PcInstance player)
 	{
 		// Check if the dice is ready
-		if (!player.getFloodProtectors().getRollDice().
-				tryPerformAction("roll dice"))
+		if (!player.getFloodProtectors().getRollDice().tryPerformAction("roll dice"))
 		{
 			return 0;
 		}

+ 17 - 38
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/ScrollOfResurrection.java

@@ -14,7 +14,8 @@
  */
 package handlers.itemhandlers;
 
-import com.l2jserver.gameserver.datatables.SkillTable;
+import java.util.logging.Level;
+
 import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.instancemanager.CastleManager;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -23,8 +24,8 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
 import com.l2jserver.gameserver.model.entity.Castle;
 import com.l2jserver.gameserver.model.entity.TvTEvent;
+import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
-import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
@@ -36,6 +37,7 @@ public class ScrollOfResurrection implements IItemHandler
 	{
 		if (!playable.isPlayer())
 		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
 		}
 		
@@ -58,8 +60,14 @@ public class ScrollOfResurrection implements IItemHandler
 		}
 		
 		final int itemId = item.getItemId();
-		// boolean blessedScroll = (itemId != 737);
-		boolean petScroll = (itemId == 6387);
+		final boolean petScroll = (itemId == 6387);
+		final SkillHolder[] skills = item.getItem().getSkills();
+		
+		if (skills == null)
+		{
+			_log.log(Level.WARNING, getClass().getSimpleName() + ": is missing skills!");
+			return false;
+		}
 		
 		// SoR Animation section
 		final L2Character target = (L2Character) activeChar.getTarget();
@@ -154,42 +162,13 @@ public class ScrollOfResurrection implements IItemHandler
 					return false;
 				}
 				
-				int skillId = 0;
-				int skillLevel = 1;
-				
-				switch (itemId)
-				{
-					case 737:
-						skillId = 2014;
-						break; // Scroll of Resurrection
-					case 3936:
-						skillId = 2049;
-						break; // Blessed Scroll of Resurrection
-					case 3959:
-						skillId = 2062;
-						break; // L2Day - Blessed Scroll of Resurrection
-					case 6387:
-						skillId = 2179;
-						break; // Blessed Scroll of Resurrection: For Pets
-					case 9157:
-						skillId = 2321;
-						break; // Blessed Scroll of Resurrection Event
-					case 10150:
-						skillId = 2393;
-						break; // Blessed Scroll of Battlefield Resurrection
-					case 13259:
-						skillId = 2596;
-						break; // Gran Kain's Blessed Scroll of Resurrection
-				}
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_DISAPPEARED);
+				sm.addItemName(item);
+				activeChar.sendPacket(sm);
 				
-				if (skillId != 0)
+				for (SkillHolder sk : skills)
 				{
-					L2Skill skill = SkillTable.getInstance().getInfo(skillId, skillLevel);
-					activeChar.useMagic(skill, true, true);
-					
-					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_DISAPPEARED);
-					sm.addItemName(item);
-					activeChar.sendPacket(sm);
+					activeChar.useMagic(sk.getSkill(), true, true);
 				}
 				return true;
 			}

+ 16 - 13
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Seed.java

@@ -27,23 +27,27 @@ import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
-import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 
 /**
- * @author  l3x
+ * @author l3x
  */
 public class Seed implements IItemHandler
 {
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
 		if (CastleManorManager.getInstance().isDisabled())
+		{
 			return false;
+		}
 		
 		final L2Object tgt = playable.getTarget();
 		if (!(tgt instanceof L2Npc))
@@ -52,14 +56,14 @@ public class Seed implements IItemHandler
 			playable.sendPacket(ActionFailed.STATIC_PACKET);
 			return false;
 		}
-		if (!(tgt instanceof L2MonsterInstance) || tgt instanceof L2ChestInstance || ((L2Character)tgt).isRaid())
+		if (!(tgt instanceof L2MonsterInstance) || tgt instanceof L2ChestInstance || ((L2Character) tgt).isRaid())
 		{
 			playable.sendPacket(SystemMessageId.THE_TARGET_IS_UNAVAILABLE_FOR_SEEDING);
 			playable.sendPacket(ActionFailed.STATIC_PACKET);
 			return false;
 		}
 		
-		final L2MonsterInstance target = (L2MonsterInstance)tgt;
+		final L2MonsterInstance target = (L2MonsterInstance) tgt;
 		if (target.isDead())
 		{
 			playable.sendPacket(SystemMessageId.INCORRECT_TARGET);
@@ -80,21 +84,20 @@ public class Seed implements IItemHandler
 			return false;
 		}
 		
-		target.setSeeded(seedId, (L2PcInstance)playable);
-		final SkillHolder[] skills = item.getEtcItem().getSkills();
+		target.setSeeded(seedId, (L2PcInstance) playable);
+		final SkillHolder[] skills = item.getItem().getSkills();
+		final L2PcInstance activeChar = playable.getActingPlayer();
 		if (skills != null)
 		{
-			if(skills[0] == null)
-				return false;
-			
-			L2Skill itemskill = skills[0].getSkill();
-			((L2PcInstance)playable).useMagic(itemskill, false, false);
+			for (SkillHolder sk : skills)
+			{
+				activeChar.useMagic(sk.getSkill(), false, false);
+			}
 		}
 		return true;
 	}
 	
 	/**
-	 * 
 	 * @param seedId
 	 * @param castleId
 	 * @return

+ 5 - 2
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SevenSignsRecord.java

@@ -16,8 +16,8 @@ package handlers.itemhandlers;
 
 import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.model.actor.L2Playable;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.SSQStatus;
 
 /**
@@ -29,8 +29,11 @@ public class SevenSignsRecord implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
 		playable.sendPacket(new SSQStatus(playable.getObjectId(), 1));
 		return true;

+ 2 - 1
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SoulShots.java

@@ -35,6 +35,7 @@ public class SoulShots implements IItemHandler
 	{
 		if (!playable.isPlayer())
 		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
 		}
 		
@@ -106,7 +107,7 @@ public class SoulShots implements IItemHandler
 		
 		// Send message to client
 		activeChar.sendPacket(SystemMessageId.ENABLED_SOULSHOT);
-		Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, skills[0].getSkillId(), skills[0].getSkillLvl(), 0, 0), 360000);
+		Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, skills[0].getSkillId(), skills[0].getSkillLvl(), 0, 0), 2000);
 		return true;
 	}
 }

+ 5 - 2
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SpecialXMas.java

@@ -16,8 +16,8 @@ package handlers.itemhandlers;
 
 import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.model.actor.L2Playable;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ShowXMasSeal;
 
 /**
@@ -28,8 +28,11 @@ public class SpecialXMas implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
 		playable.broadcastPacket(new ShowXMasSeal(item.getItemId()));
 		return true;

+ 2 - 1
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SpiritShot.java

@@ -34,6 +34,7 @@ public class SpiritShot implements IItemHandler
 	{
 		if (!playable.isPlayer())
 		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
 		}
 		
@@ -85,7 +86,7 @@ public class SpiritShot implements IItemHandler
 		
 		// Send message to client
 		activeChar.sendPacket(SystemMessageId.ENABLED_SPIRITSHOT);
-		Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, skills[0].getSkillId(), skills[0].getSkillLvl(), 0, 0), 360000);
+		Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, skills[0].getSkillId(), skills[0].getSkillLvl(), 0, 0), 2000);
 		return true;
 	}
 }

+ 12 - 9
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SummonItems.java

@@ -46,14 +46,19 @@ import com.l2jserver.gameserver.network.serverpackets.PetItemList;
 import com.l2jserver.gameserver.network.serverpackets.SetupGauge;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.util.Broadcast;
-
+/**
+ * UnAfraid: TODO: Rewrite me :D
+ */
 public class SummonItems implements IItemHandler
 {
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (!(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
 		if (!TvTEvent.onItemSummon(playable.getObjectId()))
 			return false;
@@ -69,9 +74,9 @@ public class SummonItems implements IItemHandler
 			return false;
 		}
 		
-		if(activeChar.getBlockCheckerArena() != -1)
+		if (activeChar.getBlockCheckerArena() != -1)
 			return false;
-
+		
 		if (activeChar.inObserverMode())
 			return false;
 		
@@ -216,9 +221,7 @@ public class SummonItems implements IItemHandler
 				_activeChar.setIsCastingNow(false);
 				
 				// check for summon item validity
-				if (_item == null
-						|| _item.getOwnerId() != _activeChar.getObjectId()
-						|| _item.getLocation() != L2ItemInstance.ItemLocation.INVENTORY)
+				if (_item == null || _item.getOwnerId() != _activeChar.getObjectId() || _item.getLocation() != L2ItemInstance.ItemLocation.INVENTORY)
 					return;
 				
 				final L2PetInstance petSummon = L2PetInstance.spawnPet(_npcTemplate, _activeChar, _item);
@@ -243,8 +246,8 @@ public class SummonItems implements IItemHandler
 				
 				_activeChar.setPet(petSummon);
 				
-				//JIV remove - done on spawn
-				//L2World.getInstance().storeObject(petSummon);
+				// JIV remove - done on spawn
+				// L2World.getInstance().storeObject(petSummon);
 				petSummon.spawnMe(_activeChar.getX() + 50, _activeChar.getY() + 100, _activeChar.getZ());
 				petSummon.startFeed();
 				_item.setEnchantLevel(petSummon.getLevel());

+ 7 - 4
L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/TeleportBookmark.java

@@ -30,12 +30,15 @@ public class TeleportBookmark implements IItemHandler
 	@Override
 	public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
 	{
-		if (playable == null || item == null || !(playable instanceof L2PcInstance))
+		if (!playable.isPlayer())
+		{
+			playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
 			return false;
+		}
 		
-		L2PcInstance player = (L2PcInstance) playable;
+		L2PcInstance player = playable.getActingPlayer();
 		
-		if(player.getBookMarkSlot() >= 9)
+		if (player.getBookMarkSlot() >= 9)
 		{
 			player.sendPacket(SystemMessageId.YOUR_NUMBER_OF_MY_TELEPORTS_SLOTS_HAS_REACHED_ITS_MAXIMUM_LIMIT);
 			return false;
@@ -43,7 +46,7 @@ public class TeleportBookmark implements IItemHandler
 		
 		player.destroyItem("Consume", item.getObjectId(), 1, null, false);
 		
-		player.setBookMarkSlot(player.getBookMarkSlot()+3);
+		player.setBookMarkSlot(player.getBookMarkSlot() + 3);
 		player.sendPacket(SystemMessageId.THE_NUMBER_OF_MY_TELEPORTS_SLOTS_HAS_BEEN_INCREASED);
 		
 		SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_DISAPPEARED);