From 164b091eb2611b1f8602ea9ca09a416875a52098 Mon Sep 17 00:00:00 2001
From: Rumen Nikiforov <unafraid89@gmail.com>
Date: Mon, 21 May 2012 22:28:39 +0000
Subject: [PATCH] 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

---
 .../handlers/itemhandlers/BeastSoulShot.java  | 49 ++++++++-------
 .../handlers/itemhandlers/BeastSpice.java     | 32 +++++-----
 .../itemhandlers/BeastSpiritShot.java         | 51 +++++++--------
 .../itemhandlers/BlessedSpiritShot.java       |  5 +-
 .../scripts/handlers/itemhandlers/Book.java   |  7 ++-
 .../handlers/itemhandlers/Calculator.java     |  7 ++-
 .../handlers/itemhandlers/ChristmasTree.java  |  9 ++-
 .../handlers/itemhandlers/Disguise.java       |  7 ++-
 .../scripts/handlers/itemhandlers/Elixir.java |  3 +-
 .../itemhandlers/EnchantAttribute.java        |  9 ++-
 .../handlers/itemhandlers/EnchantScrolls.java |  9 ++-
 .../itemhandlers/EnergyStarStone.java         | 12 ++--
 .../handlers/itemhandlers/EventItem.java      | 29 +++++----
 .../itemhandlers/ExtractableItems.java        |  5 +-
 .../handlers/itemhandlers/FishShots.java      | 43 +++++++------
 .../handlers/itemhandlers/Harvester.java      | 46 ++++++++------
 .../scripts/handlers/itemhandlers/Maps.java   |  7 ++-
 .../handlers/itemhandlers/MercTicket.java     |  6 ++
 .../handlers/itemhandlers/NicknameColor.java  |  8 ++-
 .../handlers/itemhandlers/PaganKeys.java      | 23 +++++--
 .../handlers/itemhandlers/PetFood.java        | 63 ++++++-------------
 .../handlers/itemhandlers/QuestItems.java     | 14 +++--
 .../handlers/itemhandlers/Recipes.java        |  3 +-
 .../handlers/itemhandlers/RollingDice.java    | 53 ++++++++--------
 .../itemhandlers/ScrollOfResurrection.java    | 55 +++++-----------
 .../scripts/handlers/itemhandlers/Seed.java   | 29 +++++----
 .../itemhandlers/SevenSignsRecord.java        |  7 ++-
 .../handlers/itemhandlers/SoulShots.java      |  3 +-
 .../handlers/itemhandlers/SpecialXMas.java    |  7 ++-
 .../handlers/itemhandlers/SpiritShot.java     |  3 +-
 .../handlers/itemhandlers/SummonItems.java    | 21 ++++---
 .../itemhandlers/TeleportBookmark.java        | 11 ++--
 32 files changed, 341 insertions(+), 295 deletions(-)

diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BeastSoulShot.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BeastSoulShot.java
index 46f7e0b4b9..a1262e469a 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BeastSoulShot.java
+++ b/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;
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BeastSpice.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BeastSpice.java
index 95441b08cb..522f72329b 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BeastSpice.java
+++ b/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;
 	}
 }
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BeastSpiritShot.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BeastSpiritShot.java
index 63bd83216e..c91f839b91 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BeastSpiritShot.java
+++ b/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;
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BlessedSpiritShot.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BlessedSpiritShot.java
index b31c95e7c5..65b82c3e41 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/BlessedSpiritShot.java
+++ b/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;
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Book.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Book.java
index b1bd5c1596..11cab12794 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Book.java
+++ b/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();
 		
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Calculator.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Calculator.java
index 019bad0c4e..ed4b8cd618 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Calculator.java
+++ b/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;
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/ChristmasTree.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/ChristmasTree.java
index e2bc0fafbb..a7e51dfd56 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/ChristmasTree.java
+++ b/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);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Disguise.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Disguise.java
index 940267c08f..cbe596218d 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Disguise.java
+++ b/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))
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Elixir.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Elixir.java
index 242e1c3df3..c16f8d013a 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Elixir.java
+++ b/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;
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EnchantAttribute.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EnchantAttribute.java
index 076faac09e..d033c111b1 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EnchantAttribute.java
+++ b/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())
 		{
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EnchantScrolls.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EnchantScrolls.java
index ef0fe55b9d..e2733f1ef6 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EnchantScrolls.java
+++ b/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())
 		{
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EnergyStarStone.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EnergyStarStone.java
index 69ad172b88..43649de809 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EnergyStarStone.java
+++ b/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);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EventItem.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EventItem.java
index c13ac838ef..90db74ffdb 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/EventItem.java
+++ b/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;
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/ExtractableItems.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/ExtractableItems.java
index fe42ec3302..c46f448d12 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/ExtractableItems.java
+++ b/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;
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/FishShots.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/FishShots.java
index 5f746f6182..445a38b136 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/FishShots.java
+++ b/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;
 	}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Harvester.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Harvester.java
index 4da29f4075..1b28519987 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Harvester.java
+++ b/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;
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Maps.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Maps.java
index 36aac6fb05..0b0f0b404d 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Maps.java
+++ b/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;
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/MercTicket.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/MercTicket.java
index adb87b58f4..8f2fdfd0a4 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/MercTicket.java
+++ b/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);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/NicknameColor.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/NicknameColor.java
index 477ebaca02..c393b8d0f2 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/NicknameColor.java
+++ b/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;
 	}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/PaganKeys.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/PaganKeys.java
index 3a4cb1cce3..7e6fd5e7a0 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/PaganKeys.java
+++ b/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();
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/PetFood.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/PetFood.java
index e228b8c4df..9ed95302b2 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/PetFood.java
+++ b/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;
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/QuestItems.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/QuestItems.java
index 0b241fb9f7..a6420e5a74 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/QuestItems.java
+++ b/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);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Recipes.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Recipes.java
index 149bede175..089328683e 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Recipes.java
+++ b/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;
 		}
 		
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/RollingDice.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/RollingDice.java
index eed240af3f..f685c44f25 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/RollingDice.java
+++ b/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;
 		}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/ScrollOfResurrection.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/ScrollOfResurrection.java
index 084af15897..77eb2815f6 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/ScrollOfResurrection.java
+++ b/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;
 			}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Seed.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Seed.java
index 96a1099a23..f69d0a585e 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/Seed.java
+++ b/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
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SevenSignsRecord.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SevenSignsRecord.java
index e7a9433022..0fc5863089 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SevenSignsRecord.java
+++ b/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;
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SoulShots.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SoulShots.java
index e2c2330c82..7465932667 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SoulShots.java
+++ b/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;
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SpecialXMas.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SpecialXMas.java
index ced98108a7..2d594fbfb1 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SpecialXMas.java
+++ b/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;
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SpiritShot.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SpiritShot.java
index 377037ae9c..695c99481a 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SpiritShot.java
+++ b/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;
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SummonItems.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SummonItems.java
index 552f2fda38..dec15a3d22 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/SummonItems.java
+++ b/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());
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/TeleportBookmark.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/TeleportBookmark.java
index 63c47dedbd..b08d775cfc 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/itemhandlers/TeleportBookmark.java
+++ b/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);
-- 
GitLab