From 4b19981bc2896858a23c8971319188d4bf9a2a16 Mon Sep 17 00:00:00 2001
From: Adry_85 <Adrya85@hotmail.it>
Date: Wed, 27 Mar 2013 19:17:27 +0000
Subject: [PATCH] BETA: Targethandlers fixes:

	- Removed useless target type
	- Added support to affect limit for area skills
	- Replacing !FastList with !ArrayList

		Reviewed by: !UnAfraid, Zoey76

	- Fixed Chain Heal issue with clan/ally targets

		Reported by: oscard
		Reviewed by: !UnAfraid
---
 .../data/scripts/handlers/MasterHandler.java  |   4 -
 .../scripts/handlers/targethandlers/Ally.java | 152 -----------------
 .../scripts/handlers/targethandlers/Area.java |  11 +-
 .../targethandlers/AreaCorpseMob.java         |   8 +-
 .../handlers/targethandlers/AreaFriendly.java |  27 +--
 .../handlers/targethandlers/AreaSummon.java   |  11 +-
 .../scripts/handlers/targethandlers/Aura.java |  10 +-
 .../targethandlers/AuraCorpseMob.java         |   8 +-
 .../handlers/targethandlers/BehindArea.java   |  11 +-
 .../handlers/targethandlers/BehindAura.java   |  10 +-
 .../scripts/handlers/targethandlers/Clan.java |  15 +-
 .../handlers/targethandlers/ClanMember.java   |   5 +-
 .../handlers/targethandlers/CorpseAlly.java   | 154 ------------------
 .../handlers/targethandlers/CorpseClan.java   |  14 +-
 .../handlers/targethandlers/CorpseMob.java    |   5 +-
 .../handlers/targethandlers/CorpsePet.java    |   1 -
 .../handlers/targethandlers/CorpsePlayer.java |   5 +-
 .../handlers/targethandlers/FrontArea.java    |  11 +-
 .../handlers/targethandlers/FrontAura.java    |  10 +-
 .../handlers/targethandlers/OwnerPet.java     |   1 -
 .../handlers/targethandlers/Party.java        |  16 +-
 .../handlers/targethandlers/PartyClan.java    |   9 +-
 .../handlers/targethandlers/PartyNotMe.java   |  10 +-
 .../scripts/handlers/targethandlers/Pet.java  |   1 -
 .../handlers/targethandlers/Summon.java       |   1 -
 .../handlers/targethandlers/Unlockable.java   |   5 +-
 .../game/data/stats/skills/01500-01599.xml    |   1 -
 27 files changed, 81 insertions(+), 435 deletions(-)
 delete mode 100644 L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Ally.java
 delete mode 100644 L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/CorpseAlly.java

diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/MasterHandler.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/MasterHandler.java
index 69c8cab072..45e1753c42 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/MasterHandler.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/MasterHandler.java
@@ -244,7 +244,6 @@ import handlers.skillhandlers.TakeFort;
 import handlers.skillhandlers.TransformDispel;
 import handlers.skillhandlers.Trap;
 import handlers.skillhandlers.Unlock;
-import handlers.targethandlers.Ally;
 import handlers.targethandlers.Area;
 import handlers.targethandlers.AreaCorpseMob;
 import handlers.targethandlers.AreaFriendly;
@@ -255,7 +254,6 @@ import handlers.targethandlers.BehindArea;
 import handlers.targethandlers.BehindAura;
 import handlers.targethandlers.Clan;
 import handlers.targethandlers.ClanMember;
-import handlers.targethandlers.CorpseAlly;
 import handlers.targethandlers.CorpseClan;
 import handlers.targethandlers.CorpseMob;
 import handlers.targethandlers.CorpsePet;
@@ -598,7 +596,6 @@ public class MasterHandler
 		},
 		{
 			// Target Handlers
-			Ally.class,
 			Area.class,
 			AreaCorpseMob.class,
 			AreaFriendly.class,
@@ -609,7 +606,6 @@ public class MasterHandler
 			BehindAura.class,
 			Clan.class,
 			ClanMember.class,
-			CorpseAlly.class,
 			CorpseClan.class,
 			CorpseMob.class,
 			CorpsePet.class,
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Ally.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Ally.java
deleted file mode 100644
index fed34a15cd..0000000000
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Ally.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (C) 2004-2013 L2J DataPack
- * 
- * This file is part of L2J DataPack.
- * 
- * L2J DataPack is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- * 
- * L2J DataPack is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-package handlers.targethandlers;
-
-import java.util.Collection;
-import java.util.List;
-
-import javolution.util.FastList;
-
-import com.l2jserver.gameserver.handler.ITargetTypeHandler;
-import com.l2jserver.gameserver.model.L2Object;
-import com.l2jserver.gameserver.model.actor.L2Character;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.entity.TvTEvent;
-import com.l2jserver.gameserver.model.skills.L2Skill;
-import com.l2jserver.gameserver.model.skills.targets.L2TargetType;
-
-/**
- * @author UnAfraid
- */
-public class Ally implements ITargetTypeHandler
-{
-	@Override
-	public L2Object[] getTargetList(L2Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target)
-	{
-		List<L2Character> targetList = new FastList<>();
-		if (activeChar.isPlayable())
-		{
-			final L2PcInstance player = activeChar.getActingPlayer();
-			
-			if (player == null)
-			{
-				return _emptyTargetList;
-			}
-			
-			if (player.isInOlympiadMode())
-			{
-				return new L2Character[]
-				{
-					player
-				};
-			}
-			
-			if (onlyFirst)
-			{
-				return new L2Character[]
-				{
-					player
-				};
-			}
-			
-			targetList.add(player);
-			
-			final int radius = skill.getAffectRange();
-			
-			if (L2Skill.addSummon(activeChar, player, radius, false))
-			{
-				targetList.add(player.getSummon());
-			}
-			
-			if (player.getClan() != null)
-			{
-				// Get all visible objects in a spherical area near the L2Character
-				final Collection<L2PcInstance> objs = activeChar.getKnownList().getKnownPlayersInRadius(radius);
-				for (L2PcInstance obj : objs)
-				{
-					if (obj == null)
-					{
-						continue;
-					}
-					if (((obj.getAllyId() == 0) || (obj.getAllyId() != player.getAllyId())) && ((obj.getClan() == null) || (obj.getClanId() != player.getClanId())))
-					{
-						continue;
-					}
-					
-					if (player.isInDuel())
-					{
-						if (player.getDuelId() != obj.getDuelId())
-						{
-							continue;
-						}
-						if (player.isInParty() && obj.isInParty() && (player.getParty().getLeaderObjectId() != obj.getParty().getLeaderObjectId()))
-						{
-							continue;
-						}
-					}
-					
-					// Don't add this target if this is a Pc->Pc pvp
-					// casting and pvp condition not met
-					if (!player.checkPvpSkill(obj, skill))
-					{
-						continue;
-					}
-					
-					if (!TvTEvent.checkForTvTSkill(player, obj, skill))
-					{
-						continue;
-					}
-					
-					if (!onlyFirst && L2Skill.addSummon(activeChar, obj, radius, false))
-					{
-						targetList.add(obj.getSummon());
-					}
-					
-					if (!L2Skill.addCharacter(activeChar, obj, radius, false))
-					{
-						continue;
-					}
-					
-					if (onlyFirst)
-					{
-						return new L2Character[]
-						{
-							obj
-						};
-					}
-					
-					if ((skill.getMaxTargets() > -1) && (targetList.size() >= skill.getMaxTargets()))
-					{
-						break;
-					}
-					
-					targetList.add(obj);
-				}
-			}
-		}
-		
-		return targetList.toArray(new L2Character[targetList.size()]);
-	}
-	
-	@Override
-	public Enum<L2TargetType> getTargetType()
-	{
-		return L2TargetType.ALLY;
-	}
-}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Area.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Area.java
index 6c2504f902..42408b9cf2 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Area.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Area.java
@@ -18,11 +18,10 @@
  */
 package handlers.targethandlers;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
-import javolution.util.FastList;
-
 import com.l2jserver.gameserver.handler.ITargetTypeHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -40,7 +39,7 @@ public class Area implements ITargetTypeHandler
 	@Override
 	public L2Object[] getTargetList(L2Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target)
 	{
-		List<L2Character> targetList = new FastList<>();
+		List<L2Character> targetList = new ArrayList<>();
 		if ((target == null) || (((target == activeChar) || target.isAlikeDead()) && (skill.getCastRange() >= 0)) || (!(target.isL2Attackable() || target.isPlayable())))
 		{
 			activeChar.sendPacket(SystemMessageId.TARGET_IS_INCORRECT);
@@ -49,7 +48,6 @@ public class Area implements ITargetTypeHandler
 		
 		final L2Character origin;
 		final boolean srcInArena = (activeChar.isInsideZone(ZoneId.PVP) && !activeChar.isInsideZone(ZoneId.SIEGE));
-		final int radius = skill.getAffectRange();
 		
 		if (skill.getCastRange() >= 0)
 		{
@@ -74,6 +72,7 @@ public class Area implements ITargetTypeHandler
 			origin = activeChar;
 		}
 		
+		int maxTargets = skill.getAffectLimit();
 		final Collection<L2Character> objs = activeChar.getKnownList().getKnownCharacters();
 		for (L2Character obj : objs)
 		{
@@ -87,14 +86,14 @@ public class Area implements ITargetTypeHandler
 				continue;
 			}
 			
-			if (Util.checkIfInRange(radius, origin, obj, true))
+			if (Util.checkIfInRange(skill.getAffectRange(), origin, obj, true))
 			{
 				if (!L2Skill.checkForAreaOffensiveSkills(activeChar, obj, skill, srcInArena))
 				{
 					continue;
 				}
 				
-				if ((skill.getMaxTargets() > -1) && (targetList.size() >= skill.getMaxTargets()))
+				if (targetList.size() >= maxTargets)
 				{
 					break;
 				}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/AreaCorpseMob.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/AreaCorpseMob.java
index 24d7c06f79..5c53bac8eb 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/AreaCorpseMob.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/AreaCorpseMob.java
@@ -18,11 +18,10 @@
  */
 package handlers.targethandlers;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
-import javolution.util.FastList;
-
 import com.l2jserver.gameserver.handler.ITargetTypeHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -40,7 +39,7 @@ public class AreaCorpseMob implements ITargetTypeHandler
 	@Override
 	public L2Object[] getTargetList(L2Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target)
 	{
-		List<L2Character> targetList = new FastList<>();
+		List<L2Character> targetList = new ArrayList<>();
 		if (!target.isL2Attackable() || !target.isDead())
 		{
 			activeChar.sendPacket(SystemMessageId.TARGET_IS_INCORRECT);
@@ -59,11 +58,10 @@ public class AreaCorpseMob implements ITargetTypeHandler
 		
 		final boolean srcInArena = (activeChar.isInsideZone(ZoneId.PVP) && !activeChar.isInsideZone(ZoneId.SIEGE));
 		
-		final int radius = skill.getAffectRange();
 		final Collection<L2Character> objs = activeChar.getKnownList().getKnownCharacters();
 		for (L2Character obj : objs)
 		{
-			if (!(obj.isL2Attackable() || obj.isPlayable()) || !Util.checkIfInRange(radius, target, obj, true))
+			if (!(obj.isL2Attackable() || obj.isPlayable()) || !Util.checkIfInRange(skill.getAffectRange(), target, obj, true))
 			{
 				continue;
 			}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/AreaFriendly.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/AreaFriendly.java
index 249d0852d8..70551b7b83 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/AreaFriendly.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/AreaFriendly.java
@@ -33,7 +33,6 @@ import com.l2jserver.gameserver.model.actor.instance.L2SiegeFlagInstance;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.model.skills.targets.L2TargetType;
 import com.l2jserver.gameserver.network.SystemMessageId;
-import com.l2jserver.util.Rnd;
 
 /**
  * @author Adry_85
@@ -72,10 +71,7 @@ public class AreaFriendly implements ITargetTypeHandler
 		
 		if (target != null)
 		{
-			int[] affectLimit = skill.getAffectLimit();
-			// calculate maximum affect limit between min and max values
-			int randomMax = Rnd.get(affectLimit[0], affectLimit[1]);
-			int curTargets = 0;
+			int maxTargets = skill.getAffectLimit();
 			final Collection<L2Character> objs = target.getKnownList().getKnownCharactersInRadius(skill.getAffectRange());
 			
 			// TODO: Chain Heal - The recovery amount decreases starting from the most injured person.
@@ -88,13 +84,12 @@ public class AreaFriendly implements ITargetTypeHandler
 					continue;
 				}
 				
-				targetList.add(obj);
-				
-				curTargets++;
-				if (curTargets >= randomMax)
+				if (targetList.size() >= maxTargets)
 				{
 					break;
 				}
+				
+				targetList.add(obj);
 			}
 		}
 		
@@ -122,20 +117,14 @@ public class AreaFriendly implements ITargetTypeHandler
 			return false;
 		}
 		
-		if ((activeChar.getActingPlayer().getClan() != null) && (target.getActingPlayer().getClan() != null))
+		if ((target.isPlayer() && (target.getClanId() != 0)) && (activeChar.getClanId() != target.getClanId()))
 		{
-			if (activeChar.getActingPlayer().getClanId() != target.getActingPlayer().getClanId())
-			{
-				return false;
-			}
+			return false;
 		}
 		
-		if ((activeChar.getActingPlayer().getAllyId() != 0) && (target.getActingPlayer().getAllyId() != 0))
+		if ((target.isPlayer() && (target.getAllyId() != 0)) && (activeChar.getAllyId() != target.getAllyId()))
 		{
-			if (activeChar.getActingPlayer().getAllyId() != target.getActingPlayer().getAllyId())
-			{
-				return false;
-			}
+			return false;
 		}
 		
 		if ((target != activeChar) && (target.getActingPlayer() != null) && (target.getActingPlayer().getPvpFlag() > 0))
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/AreaSummon.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/AreaSummon.java
index dcfc42e280..b1f09213f7 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/AreaSummon.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/AreaSummon.java
@@ -18,11 +18,10 @@
  */
 package handlers.targethandlers;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
-import javolution.util.FastList;
-
 import com.l2jserver.gameserver.handler.ITargetTypeHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -39,7 +38,7 @@ public class AreaSummon implements ITargetTypeHandler
 	@Override
 	public L2Object[] getTargetList(L2Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target)
 	{
-		List<L2Character> targetList = new FastList<>();
+		List<L2Character> targetList = new ArrayList<>();
 		target = activeChar.getSummon();
 		if ((target == null) || !target.isServitor() || target.isDead())
 		{
@@ -56,7 +55,7 @@ public class AreaSummon implements ITargetTypeHandler
 		
 		final boolean srcInArena = (activeChar.isInsideZone(ZoneId.PVP) && !activeChar.isInsideZone(ZoneId.SIEGE));
 		final Collection<L2Character> objs = target.getKnownList().getKnownCharacters();
-		final int radius = skill.getAffectRange();
+		int maxTargets = skill.getAffectLimit();
 		
 		for (L2Character obj : objs)
 		{
@@ -65,7 +64,7 @@ public class AreaSummon implements ITargetTypeHandler
 				continue;
 			}
 			
-			if (!Util.checkIfInRange(radius, target, obj, true))
+			if (!Util.checkIfInRange(skill.getAffectRange(), target, obj, true))
 			{
 				continue;
 			}
@@ -80,7 +79,7 @@ public class AreaSummon implements ITargetTypeHandler
 				continue;
 			}
 			
-			if ((skill.getMaxTargets() > -1) && (targetList.size() >= skill.getMaxTargets()))
+			if (targetList.size() >= maxTargets)
 			{
 				break;
 			}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Aura.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Aura.java
index b0b3bb3c05..78b486f41a 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Aura.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Aura.java
@@ -18,11 +18,10 @@
  */
 package handlers.targethandlers;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
-import javolution.util.FastList;
-
 import com.l2jserver.gameserver.handler.ITargetTypeHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -38,10 +37,9 @@ public class Aura implements ITargetTypeHandler
 	@Override
 	public L2Object[] getTargetList(L2Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target)
 	{
-		List<L2Character> targetList = new FastList<>();
+		List<L2Character> targetList = new ArrayList<>();
 		final boolean srcInArena = (activeChar.isInsideZone(ZoneId.PVP) && !activeChar.isInsideZone(ZoneId.SIEGE));
 		final Collection<L2Character> objs = activeChar.getKnownList().getKnownCharactersInRadius(skill.getAffectRange());
-		
 		for (L2Character obj : objs)
 		{
 			if (obj.isL2Attackable() || obj.isPlayable())
@@ -59,10 +57,6 @@ public class Aura implements ITargetTypeHandler
 					};
 				}
 				
-				if ((skill.getMaxTargets() > -1) && (targetList.size() >= skill.getMaxTargets()))
-				{
-					break;
-				}
 				targetList.add(obj);
 			}
 		}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/AuraCorpseMob.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/AuraCorpseMob.java
index 16ddc2e1fc..af5f8db0ca 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/AuraCorpseMob.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/AuraCorpseMob.java
@@ -18,11 +18,10 @@
  */
 package handlers.targethandlers;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
-import javolution.util.FastList;
-
 import com.l2jserver.gameserver.handler.ITargetTypeHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -37,9 +36,10 @@ public class AuraCorpseMob implements ITargetTypeHandler
 	@Override
 	public L2Object[] getTargetList(L2Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target)
 	{
-		List<L2Character> targetList = new FastList<>();
+		List<L2Character> targetList = new ArrayList<>();
 		// Go through the L2Character _knownList
 		final Collection<L2Character> objs = activeChar.getKnownList().getKnownCharactersInRadius(skill.getAffectRange());
+		int maxTargets = skill.getAffectLimit();
 		for (L2Character obj : objs)
 		{
 			if (obj.isL2Attackable() && obj.isDead())
@@ -52,7 +52,7 @@ public class AuraCorpseMob implements ITargetTypeHandler
 					};
 				}
 				
-				if ((skill.getMaxTargets() > -1) && (targetList.size() >= skill.getMaxTargets()))
+				if (targetList.size() >= maxTargets)
 				{
 					break;
 				}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/BehindArea.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/BehindArea.java
index 37e5668d28..902ff2af2b 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/BehindArea.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/BehindArea.java
@@ -18,11 +18,10 @@
  */
 package handlers.targethandlers;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
-import javolution.util.FastList;
-
 import com.l2jserver.gameserver.handler.ITargetTypeHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -40,7 +39,7 @@ public class BehindArea implements ITargetTypeHandler
 	@Override
 	public L2Object[] getTargetList(L2Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target)
 	{
-		List<L2Character> targetList = new FastList<>();
+		List<L2Character> targetList = new ArrayList<>();
 		if ((target == null) || (((target == activeChar) || target.isAlikeDead()) && (skill.getCastRange() >= 0)) || (!(target.isL2Attackable() || target.isPlayable())))
 		{
 			activeChar.sendPacket(SystemMessageId.TARGET_IS_INCORRECT);
@@ -49,7 +48,6 @@ public class BehindArea implements ITargetTypeHandler
 		
 		final L2Character origin;
 		final boolean srcInArena = (activeChar.isInsideZone(ZoneId.PVP) && !activeChar.isInsideZone(ZoneId.SIEGE));
-		final int radius = skill.getAffectRange();
 		
 		if (skill.getCastRange() >= 0)
 		{
@@ -75,6 +73,7 @@ public class BehindArea implements ITargetTypeHandler
 		}
 		
 		final Collection<L2Character> objs = activeChar.getKnownList().getKnownCharacters();
+		int maxTargets = skill.getAffectLimit();
 		for (L2Character obj : objs)
 		{
 			if (!(obj.isL2Attackable() || obj.isPlayable()))
@@ -87,7 +86,7 @@ public class BehindArea implements ITargetTypeHandler
 				continue;
 			}
 			
-			if (Util.checkIfInRange(radius, origin, obj, true))
+			if (Util.checkIfInRange(skill.getAffectRange(), origin, obj, true))
 			{
 				if (!obj.isBehind(activeChar))
 				{
@@ -99,7 +98,7 @@ public class BehindArea implements ITargetTypeHandler
 					continue;
 				}
 				
-				if ((skill.getMaxTargets() > -1) && (targetList.size() >= skill.getMaxTargets()))
+				if (targetList.size() >= maxTargets)
 				{
 					break;
 				}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/BehindAura.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/BehindAura.java
index 10c28dd966..bb189a2087 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/BehindAura.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/BehindAura.java
@@ -18,11 +18,10 @@
  */
 package handlers.targethandlers;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
-import javolution.util.FastList;
-
 import com.l2jserver.gameserver.handler.ITargetTypeHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -38,10 +37,10 @@ public class BehindAura implements ITargetTypeHandler
 	@Override
 	public L2Object[] getTargetList(L2Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target)
 	{
-		List<L2Character> targetList = new FastList<>();
+		List<L2Character> targetList = new ArrayList<>();
 		final boolean srcInArena = (activeChar.isInsideZone(ZoneId.PVP) && !activeChar.isInsideZone(ZoneId.SIEGE));
 		final Collection<L2Character> objs = activeChar.getKnownList().getKnownCharactersInRadius(skill.getAffectRange());
-		
+		int maxTargets = skill.getAffectLimit();
 		for (L2Character obj : objs)
 		{
 			if (obj.isL2Attackable() || obj.isPlayable())
@@ -65,10 +64,11 @@ public class BehindAura implements ITargetTypeHandler
 					};
 				}
 				
-				if ((skill.getMaxTargets() > -1) && (targetList.size() >= skill.getMaxTargets()))
+				if (targetList.size() >= maxTargets)
 				{
 					break;
 				}
+				
 				targetList.add(obj);
 			}
 		}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Clan.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Clan.java
index b911b232cf..ba7fc3f81f 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Clan.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Clan.java
@@ -18,11 +18,10 @@
  */
 package handlers.targethandlers;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
-import javolution.util.FastList;
-
 import com.l2jserver.gameserver.handler.ITargetTypeHandler;
 import com.l2jserver.gameserver.model.L2Clan;
 import com.l2jserver.gameserver.model.L2ClanMember;
@@ -43,7 +42,8 @@ public class Clan implements ITargetTypeHandler
 	@Override
 	public L2Object[] getTargetList(L2Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target)
 	{
-		List<L2Character> targetList = new FastList<>();
+		List<L2Character> targetList = new ArrayList<>();
+		
 		if (activeChar.isPlayable())
 		{
 			final L2PcInstance player = activeChar.getActingPlayer();
@@ -132,11 +132,6 @@ public class Clan implements ITargetTypeHandler
 						};
 					}
 					
-					if ((skill.getMaxTargets() > -1) && (targetList.size() >= skill.getMaxTargets()))
-					{
-						break;
-					}
-					
 					targetList.add(obj);
 				}
 			}
@@ -156,7 +151,7 @@ public class Clan implements ITargetTypeHandler
 			targetList.add(activeChar);
 			
 			final Collection<L2Object> objs = activeChar.getKnownList().getKnownObjects().values();
-			
+			int maxTargets = skill.getAffectLimit();
 			for (L2Object newTarget : objs)
 			{
 				if (newTarget.isNpc() && npc.getFactionId().equals(((L2Npc) newTarget).getFactionId()))
@@ -166,7 +161,7 @@ public class Clan implements ITargetTypeHandler
 						continue;
 					}
 					
-					if ((skill.getMaxTargets() > -1) && (targetList.size() >= skill.getMaxTargets()))
+					if (targetList.size() >= maxTargets)
 					{
 						break;
 					}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/ClanMember.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/ClanMember.java
index 4dad83ad51..9031de243a 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/ClanMember.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/ClanMember.java
@@ -18,11 +18,10 @@
  */
 package handlers.targethandlers;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
-import javolution.util.FastList;
-
 import com.l2jserver.gameserver.handler.ITargetTypeHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -39,7 +38,7 @@ public class ClanMember implements ITargetTypeHandler
 	@Override
 	public L2Object[] getTargetList(L2Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target)
 	{
-		List<L2Character> targetList = new FastList<>();
+		List<L2Character> targetList = new ArrayList<>();
 		if (activeChar.isNpc())
 		{
 			// for buff purposes, returns friendly mobs nearby and mob itself
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/CorpseAlly.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/CorpseAlly.java
deleted file mode 100644
index a5eb720883..0000000000
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/CorpseAlly.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright (C) 2004-2013 L2J DataPack
- * 
- * This file is part of L2J DataPack.
- * 
- * L2J DataPack is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- * 
- * L2J DataPack is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-package handlers.targethandlers;
-
-import java.util.Collection;
-import java.util.List;
-
-import javolution.util.FastList;
-
-import com.l2jserver.gameserver.handler.ITargetTypeHandler;
-import com.l2jserver.gameserver.model.L2Object;
-import com.l2jserver.gameserver.model.actor.L2Character;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.entity.TvTEvent;
-import com.l2jserver.gameserver.model.skills.L2Skill;
-import com.l2jserver.gameserver.model.skills.L2SkillType;
-import com.l2jserver.gameserver.model.skills.targets.L2TargetType;
-import com.l2jserver.gameserver.model.zone.ZoneId;
-
-/**
- * @author UnAfraid
- */
-public class CorpseAlly implements ITargetTypeHandler
-{
-	@Override
-	public L2Object[] getTargetList(L2Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target)
-	{
-		List<L2Character> targetList = new FastList<>();
-		if (activeChar.isPlayable())
-		{
-			final L2PcInstance player = activeChar.getActingPlayer();
-			
-			if (player == null)
-			{
-				return _emptyTargetList;
-			}
-			
-			if (player.isInOlympiadMode())
-			{
-				return new L2Character[]
-				{
-					player
-				};
-			}
-			
-			final int radius = skill.getAffectRange();
-			
-			if (L2Skill.addSummon(activeChar, player, radius, true))
-			{
-				targetList.add(player.getSummon());
-			}
-			
-			if (player.getClan() != null)
-			{
-				// Get all visible objects in a spherical area near the L2Character
-				final Collection<L2PcInstance> objs = activeChar.getKnownList().getKnownPlayersInRadius(radius);
-				{
-					for (L2PcInstance obj : objs)
-					{
-						if (obj == null)
-						{
-							continue;
-						}
-						if (((obj.getAllyId() == 0) || (obj.getAllyId() != player.getAllyId())) && ((obj.getClan() == null) || (obj.getClanId() != player.getClanId())))
-						{
-							continue;
-						}
-						
-						if (player.isInDuel())
-						{
-							if (player.getDuelId() != obj.getDuelId())
-							{
-								continue;
-							}
-							if (player.isInParty() && obj.isInParty() && (player.getParty().getLeaderObjectId() != obj.getParty().getLeaderObjectId()))
-							{
-								continue;
-							}
-						}
-						
-						// Don't add this target if this is a Pc->Pc pvp
-						// casting and pvp condition not met
-						if (!player.checkPvpSkill(obj, skill))
-						{
-							continue;
-						}
-						
-						if (!TvTEvent.checkForTvTSkill(player, obj, skill))
-						{
-							continue;
-						}
-						
-						if (!onlyFirst && L2Skill.addSummon(activeChar, obj, radius, true))
-						{
-							targetList.add(obj.getSummon());
-						}
-						
-						if (!L2Skill.addCharacter(activeChar, obj, radius, true))
-						{
-							continue;
-						}
-						
-						// Siege battlefield resurrect has been made possible for participants
-						if (skill.getSkillType() == L2SkillType.RESURRECT)
-						{
-							if (obj.isInsideZone(ZoneId.SIEGE) && !obj.isInSiege())
-							{
-								continue;
-							}
-						}
-						
-						if (onlyFirst)
-						{
-							return new L2Character[]
-							{
-								obj
-							};
-						}
-						
-						if ((skill.getMaxTargets() > -1) && (targetList.size() >= skill.getMaxTargets()))
-						{
-							break;
-						}
-						
-						targetList.add(obj);
-					}
-				}
-			}
-		}
-		return targetList.toArray(new L2Character[targetList.size()]);
-	}
-	
-	@Override
-	public Enum<L2TargetType> getTargetType()
-	{
-		return L2TargetType.CORPSE_ALLY;
-	}
-}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/CorpseClan.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/CorpseClan.java
index 3979273090..60e1605d0d 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/CorpseClan.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/CorpseClan.java
@@ -18,11 +18,10 @@
  */
 package handlers.targethandlers;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
-import javolution.util.FastList;
-
 import com.l2jserver.gameserver.handler.ITargetTypeHandler;
 import com.l2jserver.gameserver.model.L2Clan;
 import com.l2jserver.gameserver.model.L2ClanMember;
@@ -45,7 +44,7 @@ public class CorpseClan implements ITargetTypeHandler
 	@Override
 	public L2Object[] getTargetList(L2Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target)
 	{
-		List<L2Character> targetList = new FastList<>();
+		List<L2Character> targetList = new ArrayList<>();
 		if (activeChar.isPlayable())
 		{
 			final L2PcInstance player = activeChar.getActingPlayer();
@@ -74,6 +73,7 @@ public class CorpseClan implements ITargetTypeHandler
 			if (clan != null)
 			{
 				L2PcInstance obj;
+				int maxTargets = skill.getAffectLimit();
 				for (L2ClanMember member : clan.getMembers())
 				{
 					obj = member.getPlayerInstance();
@@ -133,7 +133,7 @@ public class CorpseClan implements ITargetTypeHandler
 						};
 					}
 					
-					if ((skill.getMaxTargets() > -1) && (targetList.size() >= skill.getMaxTargets()))
+					if (targetList.size() >= maxTargets)
 					{
 						break;
 					}
@@ -142,7 +142,7 @@ public class CorpseClan implements ITargetTypeHandler
 				}
 			}
 		}
-		else if (activeChar instanceof L2Npc)
+		else if (activeChar.isNpc())
 		{
 			// for buff purposes, returns friendly mobs nearby and mob itself
 			final L2Npc npc = (L2Npc) activeChar;
@@ -157,7 +157,7 @@ public class CorpseClan implements ITargetTypeHandler
 			targetList.add(activeChar);
 			
 			final Collection<L2Object> objs = activeChar.getKnownList().getKnownObjects().values();
-			
+			int maxTargets = skill.getAffectLimit();
 			for (L2Object newTarget : objs)
 			{
 				if ((newTarget.isNpc()) && npc.getFactionId().equals(((L2Npc) newTarget).getFactionId()))
@@ -167,7 +167,7 @@ public class CorpseClan implements ITargetTypeHandler
 						continue;
 					}
 					
-					if ((skill.getMaxTargets() > -1) && (targetList.size() >= skill.getMaxTargets()))
+					if (targetList.size() >= maxTargets)
 					{
 						break;
 					}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/CorpseMob.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/CorpseMob.java
index 12e0d79c6b..8d95806995 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/CorpseMob.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/CorpseMob.java
@@ -18,10 +18,9 @@
  */
 package handlers.targethandlers;
 
+import java.util.ArrayList;
 import java.util.List;
 
-import javolution.util.FastList;
-
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.handler.ITargetTypeHandler;
 import com.l2jserver.gameserver.model.L2Object;
@@ -40,7 +39,7 @@ public class CorpseMob implements ITargetTypeHandler
 	@Override
 	public L2Object[] getTargetList(L2Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target)
 	{
-		List<L2Character> targetList = new FastList<>();
+		List<L2Character> targetList = new ArrayList<>();
 		final boolean isSummon = target.isServitor();
 		if (!(isSummon || target.isL2Attackable()) || !target.isDead())
 		{
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/CorpsePet.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/CorpsePet.java
index 5310aed6a7..3416d85a1e 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/CorpsePet.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/CorpsePet.java
@@ -43,7 +43,6 @@ public class CorpsePet implements ITargetTypeHandler
 				};
 			}
 		}
-		
 		return _emptyTargetList;
 	}
 	
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/CorpsePlayer.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/CorpsePlayer.java
index 404f1d58a7..b607f14636 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/CorpsePlayer.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/CorpsePlayer.java
@@ -18,10 +18,9 @@
  */
 package handlers.targethandlers;
 
+import java.util.ArrayList;
 import java.util.List;
 
-import javolution.util.FastList;
-
 import com.l2jserver.gameserver.handler.ITargetTypeHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -41,7 +40,7 @@ public class CorpsePlayer implements ITargetTypeHandler
 	@Override
 	public L2Object[] getTargetList(L2Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target)
 	{
-		List<L2Character> targetList = new FastList<>();
+		List<L2Character> targetList = new ArrayList<>();
 		if ((target != null) && target.isDead())
 		{
 			final L2PcInstance player;
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/FrontArea.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/FrontArea.java
index e2ef653bcb..c1bb925b95 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/FrontArea.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/FrontArea.java
@@ -18,11 +18,10 @@
  */
 package handlers.targethandlers;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
-import javolution.util.FastList;
-
 import com.l2jserver.gameserver.handler.ITargetTypeHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -40,7 +39,7 @@ public class FrontArea implements ITargetTypeHandler
 	@Override
 	public L2Object[] getTargetList(L2Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target)
 	{
-		List<L2Character> targetList = new FastList<>();
+		List<L2Character> targetList = new ArrayList<>();
 		if ((target == null) || (((target == activeChar) || target.isAlikeDead()) && (skill.getCastRange() >= 0)) || (!(target.isL2Attackable() || target.isPlayable())))
 		{
 			activeChar.sendPacket(SystemMessageId.TARGET_IS_INCORRECT);
@@ -49,7 +48,6 @@ public class FrontArea implements ITargetTypeHandler
 		
 		final L2Character origin;
 		final boolean srcInArena = (activeChar.isInsideZone(ZoneId.PVP) && !activeChar.isInsideZone(ZoneId.SIEGE));
-		final int radius = skill.getAffectRange();
 		
 		if (skill.getCastRange() >= 0)
 		{
@@ -75,6 +73,7 @@ public class FrontArea implements ITargetTypeHandler
 		}
 		
 		final Collection<L2Character> objs = activeChar.getKnownList().getKnownCharacters();
+		int maxTargets = skill.getAffectLimit();
 		for (L2Character obj : objs)
 		{
 			if (!(obj.isL2Attackable() || obj.isPlayable()))
@@ -87,7 +86,7 @@ public class FrontArea implements ITargetTypeHandler
 				continue;
 			}
 			
-			if (Util.checkIfInRange(radius, origin, obj, true))
+			if (Util.checkIfInRange(skill.getAffectRange(), origin, obj, true))
 			{
 				if (!obj.isInFrontOf(activeChar))
 				{
@@ -99,7 +98,7 @@ public class FrontArea implements ITargetTypeHandler
 					continue;
 				}
 				
-				if ((skill.getMaxTargets() > -1) && (targetList.size() >= skill.getMaxTargets()))
+				if (targetList.size() >= maxTargets)
 				{
 					break;
 				}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/FrontAura.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/FrontAura.java
index 021516397a..1e4a294579 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/FrontAura.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/FrontAura.java
@@ -18,11 +18,10 @@
  */
 package handlers.targethandlers;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
-import javolution.util.FastList;
-
 import com.l2jserver.gameserver.handler.ITargetTypeHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -38,10 +37,10 @@ public class FrontAura implements ITargetTypeHandler
 	@Override
 	public L2Object[] getTargetList(L2Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target)
 	{
-		List<L2Character> targetList = new FastList<>();
+		List<L2Character> targetList = new ArrayList<>();
 		final boolean srcInArena = (activeChar.isInsideZone(ZoneId.PVP) && !activeChar.isInsideZone(ZoneId.SIEGE));
 		final Collection<L2Character> objs = activeChar.getKnownList().getKnownCharactersInRadius(skill.getAffectRange());
-		
+		int maxTargets = skill.getAffectLimit();
 		for (L2Character obj : objs)
 		{
 			if (obj.isL2Attackable() || obj.isPlayable())
@@ -65,10 +64,11 @@ public class FrontAura implements ITargetTypeHandler
 					};
 				}
 				
-				if ((skill.getMaxTargets() > -1) && (targetList.size() >= skill.getMaxTargets()))
+				if (targetList.size() >= maxTargets)
 				{
 					break;
 				}
+				
 				targetList.add(obj);
 			}
 		}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/OwnerPet.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/OwnerPet.java
index 516d85bf89..008f87b806 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/OwnerPet.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/OwnerPet.java
@@ -44,7 +44,6 @@ public class OwnerPet implements ITargetTypeHandler
 				};
 			}
 		}
-		
 		return _emptyTargetList;
 	}
 	
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Party.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Party.java
index 13392b2d54..b532586a39 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Party.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Party.java
@@ -18,10 +18,9 @@
  */
 package handlers.targethandlers;
 
+import java.util.ArrayList;
 import java.util.List;
 
-import javolution.util.FastList;
-
 import com.l2jserver.gameserver.handler.ITargetTypeHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -37,7 +36,7 @@ public class Party implements ITargetTypeHandler
 	@Override
 	public L2Object[] getTargetList(L2Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target)
 	{
-		List<L2Character> targetList = new FastList<>();
+		List<L2Character> targetList = new ArrayList<>();
 		if (onlyFirst)
 		{
 			return new L2Character[]
@@ -68,6 +67,7 @@ public class Party implements ITargetTypeHandler
 		
 		if (activeChar.isInParty())
 		{
+			int maxTargets = skill.getAffectLimit();
 			// Get a list of Party Members
 			for (L2PcInstance partyMember : activeChar.getParty().getMembers())
 			{
@@ -76,11 +76,6 @@ public class Party implements ITargetTypeHandler
 					continue;
 				}
 				
-				if ((skill.getMaxTargets() > -1) && (targetList.size() >= skill.getMaxTargets()))
-				{
-					break;
-				}
-				
 				if (L2Skill.addCharacter(activeChar, partyMember, radius, false))
 				{
 					targetList.add(partyMember);
@@ -90,6 +85,11 @@ public class Party implements ITargetTypeHandler
 				{
 					targetList.add(partyMember.getSummon());
 				}
+				
+				if (targetList.size() >= maxTargets)
+				{
+					break;
+				}
 			}
 		}
 		return targetList.toArray(new L2Character[targetList.size()]);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/PartyClan.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/PartyClan.java
index 4b07a89210..953504a68b 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/PartyClan.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/PartyClan.java
@@ -18,11 +18,10 @@
  */
 package handlers.targethandlers;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
-import javolution.util.FastList;
-
 import com.l2jserver.gameserver.handler.ITargetTypeHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -39,7 +38,7 @@ public class PartyClan implements ITargetTypeHandler
 	@Override
 	public L2Object[] getTargetList(L2Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target)
 	{
-		List<L2Character> targetList = new FastList<>();
+		List<L2Character> targetList = new ArrayList<>();
 		if (onlyFirst)
 		{
 			return new L2Character[]
@@ -74,6 +73,7 @@ public class PartyClan implements ITargetTypeHandler
 		
 		// Get all visible objects in a spherical area near the L2Character
 		final Collection<L2PcInstance> objs = activeChar.getKnownList().getKnownPlayersInRadius(radius);
+		int maxTargets = skill.getAffectLimit();
 		for (L2PcInstance obj : objs)
 		{
 			if (obj == null)
@@ -146,14 +146,13 @@ public class PartyClan implements ITargetTypeHandler
 				};
 			}
 			
-			if ((skill.getMaxTargets() > -1) && (targetList.size() >= skill.getMaxTargets()))
+			if (targetList.size() >= maxTargets)
 			{
 				break;
 			}
 			
 			targetList.add(obj);
 		}
-		
 		return targetList.toArray(new L2Character[targetList.size()]);
 	}
 	
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/PartyNotMe.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/PartyNotMe.java
index d7f89c362a..1742c2e814 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/PartyNotMe.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/PartyNotMe.java
@@ -18,10 +18,9 @@
  */
 package handlers.targethandlers;
 
+import java.util.ArrayList;
 import java.util.List;
 
-import javolution.util.FastList;
-
 import com.l2jserver.gameserver.handler.ITargetTypeHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -39,7 +38,7 @@ public class PartyNotMe implements ITargetTypeHandler
 	@Override
 	public L2Object[] getTargetList(L2Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target)
 	{
-		List<L2Character> targetList = new FastList<>();
+		List<L2Character> targetList = new ArrayList<>();
 		if (onlyFirst)
 		{
 			return new L2Character[]
@@ -80,11 +79,6 @@ public class PartyNotMe implements ITargetTypeHandler
 				}
 				else if (!partyMember.isDead() && Util.checkIfInRange(skill.getAffectRange(), activeChar, partyMember, true))
 				{
-					if ((skill.getMaxTargets() > -1) && (targetList.size() >= skill.getMaxTargets()))
-					{
-						break;
-					}
-					
 					targetList.add(partyMember);
 					
 					if ((partyMember.getSummon() != null) && !partyMember.getSummon().isDead())
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Pet.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Pet.java
index 1d54a52616..d40167f95e 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Pet.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Pet.java
@@ -40,7 +40,6 @@ public class Pet implements ITargetTypeHandler
 				target
 			};
 		}
-		
 		return _emptyTargetList;
 	}
 	
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Summon.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Summon.java
index d2b5504056..782e224537 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Summon.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Summon.java
@@ -40,7 +40,6 @@ public class Summon implements ITargetTypeHandler
 				target
 			};
 		}
-		
 		return _emptyTargetList;
 	}
 	
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Unlockable.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Unlockable.java
index fb2b42f82a..a5a4fbf4b3 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Unlockable.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Unlockable.java
@@ -18,10 +18,9 @@
  */
 package handlers.targethandlers;
 
+import java.util.ArrayList;
 import java.util.List;
 
-import javolution.util.FastList;
-
 import com.l2jserver.gameserver.handler.ITargetTypeHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -37,7 +36,7 @@ public class Unlockable implements ITargetTypeHandler
 	@Override
 	public L2Object[] getTargetList(L2Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target)
 	{
-		List<L2Character> targetList = new FastList<>();
+		List<L2Character> targetList = new ArrayList<>();
 		if ((target == null) || (!target.isDoor() && !(target instanceof L2ChestInstance)))
 		{
 			return _emptyTargetList;
diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/01500-01599.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/01500-01599.xml
index e49b8a85a6..8f2ac53a59 100644
--- a/L2J_DataPack_BETA/dist/game/data/stats/skills/01500-01599.xml
+++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/01500-01599.xml
@@ -947,7 +947,6 @@
 		<set name="affectLimit" val="50-50" />
 		<set name="abnormalLvl" val="1" />
 		<set name="abnormalType" val="pa_up" />
-		<!-- set name="affectLimit" = "50;50" / -->
 		<set name="aggroPoints" val="1" />
 		<set name="hitTime" val="2500" />
 		<set name="isMagic" val="1" /> <!-- Magic Skill -->
-- 
GitLab