diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/DragonValley.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/DragonValley.java
index a2c7d8498083849c5cfa44f8fab855f5b31d040f..541a0fb683119e45e7d054ab3cb1d9d36176702a 100644
--- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/DragonValley.java
+++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/DragonValley.java
@@ -175,8 +175,8 @@ public final class DragonValley extends AbstractNpcAI
 				for (int i = 0; i < rnd; i++)
 				{
 					final L2Playable playable = isSummon ? attacker.getSummon() : attacker;
-					final L2Attackable minion = (L2Attackable) addSpawn(DRAKOS_ASSASSIN, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), true, 0, true);
-					attackPlayer(minion, playable);
+					final L2Npc minion = addSpawn(DRAKOS_ASSASSIN, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), true, 0, true);
+					addAttackPlayerDesire(minion, playable);
 				}
 			}
 		}
@@ -278,14 +278,14 @@ public final class DragonValley extends AbstractNpcAI
 		{
 			int val = npc.getScriptValue();
 			final L2Playable attacker = isSummon ? player.getSummon() : player;
-			final L2Attackable Ghost1 = (L2Attackable) addSpawn(EXPLODING_ORC_GHOST, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
-			Ghost1.getVariables().set("playable", attacker);
-			attackPlayer(Ghost1, attacker);
+			final L2Npc ghost1 = addSpawn(EXPLODING_ORC_GHOST, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+			ghost1.getVariables().set("playable", attacker);
+			addAttackPlayerDesire(ghost1, attacker);
 			val++;
 			if ((val < 2) && (getRandomBoolean()))
 			{
-				final L2Attackable Ghost2 = (L2Attackable) addSpawn(WRATHFUL_ORC_GHOST, npc.getX(), npc.getY(), npc.getZ() + 20, npc.getHeading(), false, 0, false);
-				attackPlayer(Ghost2, attacker);
+				final L2Npc ghost2 = addSpawn(WRATHFUL_ORC_GHOST, npc.getX(), npc.getY(), npc.getZ() + 20, npc.getHeading(), false, 0, false);
+				addAttackPlayerDesire(ghost2, attacker);
 				val++;
 			}
 			npc.setScriptValue(val);
diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/FairyTrees.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/FairyTrees.java
index 1fcabd6aa5414ebcddea77826de40bd424ae38c6..e47d9c84bf2ce1505ccab73229e80c2da49d024d 100644
--- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/FairyTrees.java
+++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/FairyTrees.java
@@ -20,7 +20,6 @@ package ai.group_template;
 
 import ai.npc.AbstractNpcAI;
 
-import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -63,13 +62,13 @@ public class FairyTrees extends AbstractNpcAI
 		{
 			for (int i = 0; i < 20; i++)
 			{
-				final L2Attackable Guardian = (L2Attackable) addSpawn(SOUL_GUARDIAN, npc.getX(), npc.getY(), npc.getZ(), npc.getHeading(), false, 30000);
+				final L2Npc guardian = addSpawn(SOUL_GUARDIAN, npc, false, 30000);
 				final L2Playable attacker = isSummon ? killer.getSummon() : killer;
-				attackPlayer(Guardian, attacker);
+				addAttackPlayerDesire(guardian, attacker);
 				if (getRandomBoolean())
 				{
-					Guardian.setTarget(attacker);
-					Guardian.doCast(VENOMOUS_POISON.getSkill());
+					guardian.setTarget(attacker);
+					guardian.doCast(VENOMOUS_POISON.getSkill());
 				}
 			}
 		}
diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/FrozenLabyrinth.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/FrozenLabyrinth.java
index 05362aa9c1eadc9347dd67a271690fd3db4c9831..42b11a948451dc47d5b5b8a06dfb32c1db028171 100644
--- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/FrozenLabyrinth.java
+++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/FrozenLabyrinth.java
@@ -20,7 +20,6 @@ package ai.group_template;
 
 import ai.npc.AbstractNpcAI;
 
-import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.skills.Skill;
@@ -55,8 +54,8 @@ public final class FrozenLabyrinth extends AbstractNpcAI
 				final int x = diff < 60 ? npc.getX() + diff : npc.getX();
 				final int y = diff >= 60 ? npc.getY() + (diff - 40) : npc.getY();
 				
-				final L2Attackable monster = (L2Attackable) addSpawn(spawnId, x, y, npc.getZ(), npc.getHeading(), false, 0);
-				attackPlayer(monster, attacker);
+				final L2Npc monster = addSpawn(spawnId, x, y, npc.getZ(), npc.getHeading(), false, 0);
+				addAttackPlayerDesire(monster, attacker);
 				diff += 20;
 			}
 			npc.setScriptValue(1);
diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/GiantsCave.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/GiantsCave.java
index 33d95b777e6d3f9c63c4ac44a3aab3305d882c72..fd4b7655fa4baa2ab1ef29af1ee1b9cdede8e9ab 100644
--- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/GiantsCave.java
+++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/GiantsCave.java
@@ -20,7 +20,6 @@ package ai.group_template;
 
 import ai.npc.AbstractNpcAI;
 
-import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -65,8 +64,7 @@ public final class GiantsCave extends AbstractNpcAI
 			{
 				if ((characters != null) && (characters.isAttackable()) && (getRandomBoolean()))
 				{
-					L2Attackable monster = (L2Attackable) characters;
-					attackPlayer(monster, player);
+					addAttackPlayerDesire((L2Npc) characters, player);
 				}
 			}
 		}
diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/LairOfAntharas.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/LairOfAntharas.java
index 96421d996e565523a4eec52a87cafaf32e652c89..0f9aa1cf11e3336726bc06339a6046212770d75d 100644
--- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/LairOfAntharas.java
+++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/LairOfAntharas.java
@@ -96,10 +96,10 @@ public final class LairOfAntharas extends AbstractNpcAI
 			{
 				if (getRandom(100) > KNIGHT_CHANCE)
 				{
-					final L2Attackable newKnight = (L2Attackable) addSpawn(DRAGON_KNIGHT2, npc.getLocation(), false, 0, true);
+					final L2Npc newKnight = addSpawn(DRAGON_KNIGHT2, npc, false, 0, true);
 					npc.deleteMe();
 					broadcastNpcSay(newKnight, Say2.NPC_SHOUT, NpcStringId.THOSE_WHO_SET_FOOT_IN_THIS_PLACE_SHALL_NOT_LEAVE_ALIVE);
-					attackPlayer(newKnight, killer);
+					addAttackPlayerDesire(newKnight, killer);
 				}
 				break;
 			}
@@ -107,10 +107,10 @@ public final class LairOfAntharas extends AbstractNpcAI
 			{
 				if (getRandom(100) > KNIGHT_CHANCE)
 				{
-					final L2Attackable eliteKnight = (L2Attackable) addSpawn(ELITE_DRAGON_KNIGHT, npc.getLocation(), false, 0, true);
+					final L2Npc eliteKnight = addSpawn(ELITE_DRAGON_KNIGHT, npc, false, 0, true);
 					npc.deleteMe();
 					broadcastNpcSay(eliteKnight, Say2.NPC_SHOUT, NpcStringId.IF_YOU_WISH_TO_SEE_HELL_I_WILL_GRANT_YOU_YOUR_WISH);
-					attackPlayer(eliteKnight, killer);
+					addAttackPlayerDesire(eliteKnight, killer);
 				}
 				break;
 			}
diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/MonasteryOfSilence.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/MonasteryOfSilence.java
index b46b9aa987f72ab289f992cd46b7239e57c06d9e..39b247b8e6a8fb652a0a105c52df6ecd02364912 100644
--- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/MonasteryOfSilence.java
+++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/MonasteryOfSilence.java
@@ -163,8 +163,7 @@ public final class MonasteryOfSilence extends AbstractNpcAI
 					}
 					npc.setScriptValue(1);
 					broadcastNpcSay(npc, Say2.ALL, NpcStringId.FOR_THE_GLORY_OF_SOLINA);
-					final L2Attackable knight = (L2Attackable) addSpawn(KNIGHT, npc);
-					attackPlayer(knight, player);
+					addAttackPlayerDesire(addSpawn(KNIGHT, npc), player);
 				}
 				break;
 			}
@@ -258,7 +257,7 @@ public final class MonasteryOfSilence extends AbstractNpcAI
 				broadcastNpcSay(npc, Say2.NPC_ALL, NpcStringId.YOU_CANNOT_CARRY_A_WEAPON_WITHOUT_AUTHORIZATION);
 			}
 			
-			attackPlayer((L2Attackable) npc, player);
+			addAttackPlayerDesire(npc, player);
 		}
 		return super.onAggroRangeEnter(npc, player, isSummon);
 	}
@@ -273,7 +272,7 @@ public final class MonasteryOfSilence extends AbstractNpcAI
 				if (obj.equals(npc))
 				{
 					broadcastNpcSay(npc, Say2.NPC_ALL, DIVINITY_MSG[getRandom(DIVINITY_MSG.length)], caster.getName());
-					attackPlayer((L2Attackable) npc, caster);
+					addAttackPlayerDesire(npc, caster);
 					break;
 				}
 			}
diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/PavelArchaic.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/PavelArchaic.java
index 84301483cfab8983d699e594e8a91364bc5fcb25..1d7d9e59c13af65071d0f2e74ef52d3810c9647b 100644
--- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/PavelArchaic.java
+++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/PavelArchaic.java
@@ -20,7 +20,6 @@ package ai.group_template;
 
 import ai.npc.AbstractNpcAI;
 
-import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 
@@ -47,11 +46,11 @@ public final class PavelArchaic extends AbstractNpcAI
 	{
 		if (getRandom(100) < 70)
 		{
-			final L2Attackable golem1 = (L2Attackable) addSpawn(PINCER_GOLEM2, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, false);
-			attackPlayer(golem1, killer);
+			final L2Npc golem1 = addSpawn(PINCER_GOLEM2, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, false);
+			addAttackPlayerDesire(golem1, killer);
 			
-			final L2Attackable golem2 = (L2Attackable) addSpawn(PINCER_GOLEM3, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, false);
-			attackPlayer(golem2, killer);
+			final L2Npc golem2 = addSpawn(PINCER_GOLEM3, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, false);
+			addAttackPlayerDesire(golem2, killer);
 		}
 		return super.onKill(npc, killer, isSummon);
 	}
diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/PlainsOfDion.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/PlainsOfDion.java
index 24c932b8274dfb47d985d7f11cdf5a54dd4977e8..b9063e5cc58db33797fbd5c27c9fc65cd339ba45 100644
--- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/PlainsOfDion.java
+++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/PlainsOfDion.java
@@ -23,7 +23,6 @@ import ai.npc.AbstractNpcAI;
 import com.l2jserver.gameserver.GeoData;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Npc;
-import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.NpcStringId;
 import com.l2jserver.gameserver.network.clientpackets.Say2;
@@ -83,8 +82,8 @@ public final class PlainsOfDion extends AbstractNpcAI
 			{
 				if (obj.isMonster() && Util.contains(DELU_LIZARDMEN, obj.getId()) && !obj.isAttackingNow() && !obj.isDead() && GeoData.getInstance().canSeeTarget(npc, obj))
 				{
-					final L2MonsterInstance monster = (L2MonsterInstance) obj;
-					attackPlayer(monster, player);
+					final L2Npc monster = (L2Npc) obj;
+					addAttackPlayerDesire(monster, player);
 					broadcastNpcSay(monster, Say2.NPC_ALL, MONSTERS_ASSIST_MSG[getRandom(3)]);
 				}
 			}
diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/PlainsOfLizardman.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/PlainsOfLizardman.java
index fc71eccf431c8d471fbe01e258a58b2c25bb81d4..f64429517108a35f6566c0d7e0cdcf18e3233f86 100644
--- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/PlainsOfLizardman.java
+++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/PlainsOfLizardman.java
@@ -25,6 +25,7 @@ import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Npc;
+import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.holders.SkillHolder;
 
@@ -104,10 +105,10 @@ public final class PlainsOfLizardman extends AbstractNpcAI
 			{
 				if ((target != null) && target.isAttackable())
 				{
-					final L2Attackable monster = (L2Attackable) target;
+					final L2Npc monster = (L2Npc) target;
 					npc.setTarget(monster);
 					npc.doCast(STUN_EFFECT.getSkill());
-					attackPlayer(monster, player);
+					addAttackPlayerDesire(monster, player);
 				}
 			}
 			npc.doDie(player);
@@ -165,8 +166,7 @@ public final class PlainsOfLizardman extends AbstractNpcAI
 		// Tanta Guard
 		if (getRandom(1000) == 0)
 		{
-			final L2Npc guard = addSpawn(TANTA_GUARD, npc);
-			attackPlayer((L2Attackable) guard, killer);
+			addAttackPlayerDesire(addSpawn(TANTA_GUARD, npc), killer);
 		}
 		
 		// Invisible buff npc
@@ -230,13 +230,11 @@ public final class PlainsOfLizardman extends AbstractNpcAI
 		}
 	}
 	
-	private void castSkill(L2Npc npc, L2Character target, SkillHolder skill)
+	@Override
+	protected void castSkill(L2Npc npc, L2Playable target, SkillHolder skill)
 	{
 		npc.doDie(target);
-		
-		final L2Npc buffer = addSpawn(INVISIBLE_NPC, npc.getLocation(), false, 6000);
-		buffer.setTarget(target);
-		buffer.doCast(skill.getSkill());
+		super.castSkill(addSpawn(INVISIBLE_NPC, npc, false, 6000), target, skill);
 	}
 	
 	public static void main(String[] args)
diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/PrimevalIsle.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/PrimevalIsle.java
index 0dedff4583e638db93dec2aa5a9b118ceb58f297..f262d55e117b750ac34a78b42e6cd171a21aa49e 100644
--- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/PrimevalIsle.java
+++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/PrimevalIsle.java
@@ -217,7 +217,7 @@ public final class PrimevalIsle extends AbstractNpcAI
 					{
 						npc.setTarget(player);
 						npc.doCast(LONGRANGEDMAGIC1.getSkill());
-						attackPlayer((L2Attackable) npc, player);
+						addAttackPlayerDesire(npc, player);
 					}
 				}
 				break;
@@ -332,7 +332,7 @@ public final class PrimevalIsle extends AbstractNpcAI
 					if ((characters != null) && (characters.isAttackable()) && (getRandomBoolean()))
 					{
 						L2Attackable monster = (L2Attackable) characters;
-						attackPlayer(monster, playable);
+						addAttackPlayerDesire(monster, playable);
 					}
 				}
 			}
diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/SelMahumSquad.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/SelMahumSquad.java
index 3a46c3757209aedbe0073c0f35850e77cae850b0..3314e723c1c645634792e52cb8ca8b236775c1ed 100644
--- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/SelMahumSquad.java
+++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/SelMahumSquad.java
@@ -109,7 +109,7 @@ public final class SelMahumSquad extends AbstractNpcAI
 					npc.getVariables().remove("INVUL_REMOVE_TIMER_STARTED");
 					if ((player != null) && !player.isDead() && npc.getKnownList().knowsThePlayer(player))
 					{
-						attackPlayer((L2MonsterInstance) npc, player);
+						addAttackPlayerDesire(npc, player);
 					}
 				}
 				break;
diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/SilentValley.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/SilentValley.java
index 6d8d4c1e52477bce808389a91cb9e560cf523407..5e50b09d35e4b51fcc18a9d05dbcff2c627ac69e 100644
--- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/SilentValley.java
+++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/SilentValley.java
@@ -21,7 +21,6 @@ package ai.group_template;
 import ai.npc.AbstractNpcAI;
 
 import com.l2jserver.gameserver.model.L2Object;
-import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.L2Summon;
@@ -123,14 +122,14 @@ public final class SilentValley extends AbstractNpcAI
 			{
 				npc.setTarget(player);
 				npc.doCast(BLAZE.getSkill());
-				attackPlayer((L2Attackable) npc, player);
+				addAttackPlayerDesire(npc, player);
 				break;
 			}
 			default:
 			{
 				if (isSummon)
 				{
-					attackPlayer((L2Attackable) npc, player);
+					addAttackPlayerDesire(npc, player);
 				}
 			}
 		}
@@ -161,11 +160,11 @@ public final class SilentValley extends AbstractNpcAI
 			{
 				npc.setTarget(player);
 				npc.doCast(BLAZE.getSkill());
-				attackPlayer((L2Attackable) npc, player);
+				addAttackPlayerDesire(npc, player);
 			}
 			else if (creature.isAffectedBySkill(BETRAYAL.getSkillId()))
 			{
-				attackPlayer((L2Attackable) npc, player);
+				addAttackPlayerDesire(npc, player);
 			}
 		}
 		return super.onSeeCreature(npc, creature, isSummon);
diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/StakatoNest.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/StakatoNest.java
index 2b0005a16657be79bd63232125d302a703b3ceec..e95c558d50e84e52c2b44b216a33bb40410f6fe7 100644
--- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/StakatoNest.java
+++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/StakatoNest.java
@@ -22,10 +22,8 @@ import java.util.List;
 
 import ai.npc.AbstractNpcAI;
 
-import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.datatables.SkillData;
 import com.l2jserver.gameserver.model.L2Object;
-import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -131,8 +129,8 @@ public final class StakatoNest extends AbstractNpcAI
 					Broadcast.toSelfAndKnownPlayers(npc, new MagicSkillUse(npc, 2046, 1, 1000, 0));
 					for (int i = 0; i < 3; i++)
 					{
-						L2Npc _spawned = addSpawn(STAKATO_CAPTAIN, monster, true);
-						attackPlayer(killer, _spawned);
+						L2Npc spawned = addSpawn(STAKATO_CAPTAIN, monster, true);
+						addAttackPlayerDesire(spawned, killer);
 					}
 				}
 				break;
@@ -150,8 +148,8 @@ public final class StakatoNest extends AbstractNpcAI
 					Broadcast.toSelfAndKnownPlayers(npc, new MagicSkillUse(npc, 2046, 1, 1000, 0));
 					for (int i = 0; i < 3; i++)
 					{
-						L2Npc _spawned = addSpawn(STAKATO_GUARD, monster, true);
-						attackPlayer(killer, _spawned);
+						L2Npc spawned = addSpawn(STAKATO_GUARD, monster, true);
+						addAttackPlayerDesire(spawned, killer);
 					}
 				}
 				break;
@@ -187,7 +185,7 @@ public final class StakatoNest extends AbstractNpcAI
 		{
 			npc.doDie(caster);
 			final L2Npc spawned = addSpawn(STAKATO_CHIEF, npc.getX(), npc.getY(), npc.getZ(), Util.calculateHeadingFrom(npc, caster), false, 0, true);
-			attackPlayer(caster, spawned);
+			addAttackPlayerDesire(spawned, caster);
 		}
 		return super.onSkillSee(npc, caster, skill, targets, isSummon);
 	}
@@ -214,8 +212,8 @@ public final class StakatoNest extends AbstractNpcAI
 		{
 			npc.getSpawn().decreaseCount(npc);
 			npc.deleteMe();
-			final L2Npc _spawned = addSpawn(npcId, npc.getX(), npc.getY(), npc.getZ(), npc.getHeading(), false, 0, true);
-			attackPlayer(player, _spawned);
+			final L2Npc spawned = addSpawn(npcId, npc.getX(), npc.getY(), npc.getZ(), npc.getHeading(), false, 0, true);
+			addAttackPlayerDesire(spawned, player);
 		}
 		return super.onAdvEvent(event, npc, player);
 	}
@@ -234,16 +232,6 @@ public final class StakatoNest extends AbstractNpcAI
 		return null;
 	}
 	
-	private static void attackPlayer(L2PcInstance player, L2Npc npc)
-	{
-		if ((npc != null) && (player != null))
-		{
-			((L2Attackable) npc).setIsRunning(true);
-			((L2Attackable) npc).addDamageHate(player, 0, 999);
-			((L2Attackable) npc).getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player);
-		}
-	}
-	
 	private static void giveCocoon(L2PcInstance player, L2Npc npc)
 	{
 		player.addItem("StakatoCocoon", ((getRandom(100) > 80) ? LARGE_COCOON : SMALL_COCOON), 1, npc, true);
diff --git a/L2J_DataPack/dist/game/data/scripts/ai/individual/Baium/Baium.java b/L2J_DataPack/dist/game/data/scripts/ai/individual/Baium/Baium.java
index 0f82cf88ba7fc7e8812c6d3ee474111f4e3f2111..56241044799d90302a94b831406b020eb9ee54d1 100644
--- a/L2J_DataPack/dist/game/data/scripts/ai/individual/Baium/Baium.java
+++ b/L2J_DataPack/dist/game/data/scripts/ai/individual/Baium/Baium.java
@@ -294,19 +294,19 @@ public final class Baium extends AbstractNpcAI
 				
 				if ((player != null) && !player.isDead())
 				{
-					attackPlayer((L2Attackable) npc, player);
+					addAttackPlayerDesire(npc, player);
 				}
 				else if ((_standbyPlayer != null) && !_standbyPlayer.isDead())
 				{
-					attackPlayer((L2Attackable) npc, _standbyPlayer);
+					addAttackPlayerDesire(npc, _standbyPlayer);
 				}
 				else
 				{
-					for (L2Character characters : npc.getKnownList().getKnownCharactersInRadius(2000))
+					for (L2Character creature : npc.getKnownList().getKnownCharactersInRadius(2000))
 					{
-						if ((characters != null) && characters.isPlayer() && zone.isInsideZone(characters) && !characters.isDead())
+						if ((creature != null) && creature.isPlayer() && zone.isInsideZone(creature) && !creature.isDead())
 						{
-							attackPlayer((L2Attackable) npc, (L2Playable) characters);
+							addAttackPlayerDesire(npc, (L2Playable) creature);
 							break;
 						}
 					}
@@ -332,20 +332,20 @@ public final class Baium extends AbstractNpcAI
 						{
 							mob.clearAggroList();
 						}
-						attackPlayer(mob, (L2Playable) mostHated);
+						addAttackPlayerDesire(mob, (L2Playable) mostHated);
 					}
 					else
 					{
 						boolean found = false;
-						for (L2Character characters : mob.getKnownList().getKnownCharactersInRadius(1000))
+						for (L2Character creature : mob.getKnownList().getKnownCharactersInRadius(1000))
 						{
-							if ((characters != null) && characters.isPlayable() && zone.isInsideZone(characters) && !characters.isDead())
+							if ((creature != null) && creature.isPlayable() && zone.isInsideZone(creature) && !creature.isDead())
 							{
-								if (mob.getTarget() != characters)
+								if (mob.getTarget() != creature)
 								{
 									mob.clearAggroList();
 								}
-								attackPlayer(mob, (L2Playable) characters);
+								addAttackPlayerDesire(mob, (L2Playable) creature);
 								found = true;
 								break;
 							}
diff --git a/L2J_DataPack/dist/game/data/scripts/ai/individual/Gordon.java b/L2J_DataPack/dist/game/data/scripts/ai/individual/Gordon.java
index 33686e45b5e26a7aaf6379785c2b87c729199a6e..a2b459f69cc22cdf400caaebcdbf6be6311f7591 100644
--- a/L2J_DataPack/dist/game/data/scripts/ai/individual/Gordon.java
+++ b/L2J_DataPack/dist/game/data/scripts/ai/individual/Gordon.java
@@ -45,7 +45,7 @@ public final class Gordon extends AbstractNpcAI
 	{
 		if (creature.isPlayer() && ((L2PcInstance) creature).isCursedWeaponEquipped())
 		{
-			attackPlayer((L2Attackable) npc, (L2PcInstance) creature);
+			addAttackPlayerDesire(npc, (L2PcInstance) creature);
 		}
 		return super.onSeeCreature(npc, creature, isSummon);
 	}
diff --git a/L2J_DataPack/dist/game/data/scripts/ai/individual/Sailren/Sailren.java b/L2J_DataPack/dist/game/data/scripts/ai/individual/Sailren/Sailren.java
index f0d34c09f88545b195e3f9824d6bf6efd9f1abd6..d31171fe5d415603625f5ca923411d236fe97cb8 100644
--- a/L2J_DataPack/dist/game/data/scripts/ai/individual/Sailren/Sailren.java
+++ b/L2J_DataPack/dist/game/data/scripts/ai/individual/Sailren/Sailren.java
@@ -23,7 +23,6 @@ import ai.npc.AbstractNpcAI;
 import com.l2jserver.gameserver.instancemanager.GlobalVariablesManager;
 import com.l2jserver.gameserver.instancemanager.ZoneManager;
 import com.l2jserver.gameserver.model.TeleportWhereType;
-import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -291,16 +290,16 @@ public final class Sailren extends AbstractNpcAI
 					_killCount++;
 					if (_killCount == 3)
 					{
-						final L2Attackable pterosaur = (L2Attackable) addSpawn(PTEROSAUR, 27313, -6766, -1975, 0, false, 0);
-						attackPlayer(pterosaur, killer);
+						final L2Npc pterosaur = addSpawn(PTEROSAUR, 27313, -6766, -1975, 0, false, 0);
+						addAttackPlayerDesire(pterosaur, killer);
 						_killCount = 0;
 					}
 					break;
 				}
 				case PTEROSAUR:
 				{
-					final L2Attackable trex = (L2Attackable) addSpawn(TREX, 27313, -6766, -1975, 0, false, 0);
-					attackPlayer(trex, killer);
+					final L2Npc trex = addSpawn(TREX, 27313, -6766, -1975, 0, false, 0);
+					addAttackPlayerDesire(trex, killer);
 					break;
 				}
 				case TREX:
diff --git a/L2J_DataPack/dist/game/data/scripts/ai/npc/AbstractNpcAI.java b/L2J_DataPack/dist/game/data/scripts/ai/npc/AbstractNpcAI.java
index 8fbfac8acb4cc0c0f0e3bb6694b68783db6e98aa..007924645d200cd23a27e9cae38d5c869919a2eb 100644
--- a/L2J_DataPack/dist/game/data/scripts/ai/npc/AbstractNpcAI.java
+++ b/L2J_DataPack/dist/game/data/scripts/ai/npc/AbstractNpcAI.java
@@ -20,15 +20,11 @@ package ai.npc;
 
 import java.util.logging.Logger;
 
-import com.l2jserver.gameserver.ai.CtrlIntention;
-import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Npc;
-import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.holders.MinionHolder;
-import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.network.NpcStringId;
 import com.l2jserver.gameserver.network.serverpackets.NpcSay;
@@ -168,49 +164,6 @@ public abstract class AbstractNpcAI extends Quest
 		Broadcast.toSelfAndKnownPlayersInRadius(character, new SocialAction(character.getObjectId(), actionId), radius);
 	}
 	
-	/**
-	 * Monster is running and attacking the playable.
-	 * @param npc
-	 * @param playable
-	 */
-	protected void attackPlayer(L2Attackable npc, L2Playable playable)
-	{
-		attackPlayer(npc, playable, 999);
-	}
-	
-	/**
-	 * Monster is running and attacking the target.
-	 * @param npc the NPC that performs the attack
-	 * @param target the target of the attack
-	 * @param desire the desire to perform the attack
-	 */
-	protected void attackPlayer(L2Npc npc, L2Playable target, int desire)
-	{
-		if (npc instanceof L2Attackable)
-		{
-			((L2Attackable) npc).addDamageHate(target, 0, desire);
-		}
-		npc.setIsRunning(true);
-		npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, target);
-	}
-	
-	/**
-	 * Monster cast an skill to the character.
-	 * @param npc the NPC whom cast the skill
-	 * @param target the skill target
-	 * @param skill the skill to cast
-	 * @param desire the desire to cast the skill
-	 */
-	protected void castSkill(L2Npc npc, L2Character target, SkillHolder skill, int desire)
-	{
-		if (npc instanceof L2Attackable)
-		{
-			((L2Attackable) npc).addDamageHate(target, 0, desire);
-		}
-		npc.setTarget(target);
-		npc.getAI().setIntention(CtrlIntention.AI_INTENTION_CAST, skill.getSkill(), target);
-	}
-	
 	public void spawnMinions(final L2Npc npc, final String spawnName)
 	{
 		for (MinionHolder is : npc.getTemplate().getParameters().getMinionList(spawnName))
diff --git a/L2J_DataPack/dist/game/data/scripts/instances/CavernOfThePirateCaptain/CavernOfThePirateCaptain.java b/L2J_DataPack/dist/game/data/scripts/instances/CavernOfThePirateCaptain/CavernOfThePirateCaptain.java
index a6703c43e242b9cfbcb173b5d92cd5c3e5031b37..02a32a40584080344e2edc31b199a7215cf5a2a9 100644
--- a/L2J_DataPack/dist/game/data/scripts/instances/CavernOfThePirateCaptain/CavernOfThePirateCaptain.java
+++ b/L2J_DataPack/dist/game/data/scripts/instances/CavernOfThePirateCaptain/CavernOfThePirateCaptain.java
@@ -46,7 +46,7 @@ public class CavernOfThePirateCaptain extends AbstractNpcAI
 {
 	protected class CavernOfThePirateCaptainWorld extends InstanceWorld
 	{
-		ArrayList<L2PcInstance> playersInside = new ArrayList<>();
+		List<L2PcInstance> playersInside = new ArrayList<>();
 		L2Attackable _zaken;
 		long storeTime = 0;
 		boolean _is83;
@@ -511,7 +511,7 @@ public class CavernOfThePirateCaptain extends AbstractNpcAI
 		if ((player != null) && (npcId != ZAKEN_60) && (npcId != ZAKEN_83))
 		{
 			final L2Attackable mob = (L2Attackable) addSpawn(npcId, ROOM_DATA[roomId - 1][0] + getRandom(350), ROOM_DATA[roomId - 1][1] + getRandom(350), ROOM_DATA[roomId - 1][2], 0, false, 0, false, world.getInstanceId());
-			attackPlayer(mob, player);
+			addAttackPlayerDesire(mob, player);
 			return mob;
 		}
 		return (L2Attackable) addSpawn(npcId, ROOM_DATA[roomId - 1][0], ROOM_DATA[roomId - 1][1], ROOM_DATA[roomId - 1][2], 0, false, 0, false, world.getInstanceId());
diff --git a/L2J_DataPack/dist/game/data/scripts/quests/Q00063_PathOfTheWarder/Q00063_PathOfTheWarder.java b/L2J_DataPack/dist/game/data/scripts/quests/Q00063_PathOfTheWarder/Q00063_PathOfTheWarder.java
index f51e832524149c6e1e4c80aef286e5848d6d84ca..36a1129ccdf5554ff37fac44944f9319b6da1437 100644
--- a/L2J_DataPack/dist/game/data/scripts/quests/Q00063_PathOfTheWarder/Q00063_PathOfTheWarder.java
+++ b/L2J_DataPack/dist/game/data/scripts/quests/Q00063_PathOfTheWarder/Q00063_PathOfTheWarder.java
@@ -18,9 +18,7 @@
  */
 package quests.Q00063_PathOfTheWarder;
 
-import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.enums.QuestSound;
-import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.base.ClassId;
@@ -237,16 +235,6 @@ public final class Q00063_PathOfTheWarder extends Quest
 		return htmltext;
 	}
 	
-	private static void attackPlayer(L2Attackable npc, L2PcInstance player)
-	{
-		if ((npc != null) && (player != null))
-		{
-			npc.setIsRunning(true);
-			npc.addDamageHate(player, 0, 999);
-			npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player);
-		}
-	}
-	
 	@Override
 	public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
 	{
@@ -301,8 +289,8 @@ public final class Q00063_PathOfTheWarder extends Quest
 						else
 						{
 							qs.set("ex", 0);
-							final L2Attackable monster = (L2Attackable) addSpawn(OL_MAHUM_OFFICER_TAK, npc, true, 0, false);
-							attackPlayer(monster, killer);
+							final L2Npc monster = addSpawn(OL_MAHUM_OFFICER_TAK, npc, true, 0, false);
+							addAttackPlayerDesire(monster, killer);
 						}
 					}
 					break;
diff --git a/L2J_DataPack/dist/game/data/scripts/quests/Q00120_PavelsLastResearch/Q00120_PavelsLastResearch.java b/L2J_DataPack/dist/game/data/scripts/quests/Q00120_PavelsLastResearch/Q00120_PavelsLastResearch.java
index f396ec189bed1f4cb33ccd4ca22bc7d052f2c9c1..866464ea43634e5fe7cf500b077586f63ebfcea8 100644
--- a/L2J_DataPack/dist/game/data/scripts/quests/Q00120_PavelsLastResearch/Q00120_PavelsLastResearch.java
+++ b/L2J_DataPack/dist/game/data/scripts/quests/Q00120_PavelsLastResearch/Q00120_PavelsLastResearch.java
@@ -1532,15 +1532,6 @@ public final class Q00120_PavelsLastResearch extends Quest
 		return html;
 	}
 	
-	private static void castSkill(L2Npc npc, L2PcInstance player, Skill skill)
-	{
-		if ((skill.getHpConsume() <= npc.getCurrentHp()) && (skill.getMpConsume() <= npc.getCurrentMp()) && (npc.getSkillRemainingReuseTime(skill.getReuseHashCode()) <= 0))
-		{
-			npc.setTarget(player);
-			npc.doCast(skill);
-		}
-	}
-	
 	private static boolean checkQ114(L2PcInstance player)
 	{
 		final QuestState q114 = player.getQuestState(Q00114_ResurrectionOfAnOldManager.class.getSimpleName());
diff --git a/L2J_DataPack/dist/game/data/scripts/quests/Q00220_TestimonyOfGlory/Q00220_TestimonyOfGlory.java b/L2J_DataPack/dist/game/data/scripts/quests/Q00220_TestimonyOfGlory/Q00220_TestimonyOfGlory.java
index 7cc19873e6eabc7114dafce8b19a3f0df6747393..5a52906617ce4bbcb5b6b70285fd5b87fc843d7d 100644
--- a/L2J_DataPack/dist/game/data/scripts/quests/Q00220_TestimonyOfGlory/Q00220_TestimonyOfGlory.java
+++ b/L2J_DataPack/dist/game/data/scripts/quests/Q00220_TestimonyOfGlory/Q00220_TestimonyOfGlory.java
@@ -18,11 +18,9 @@
  */
 package quests.Q00220_TestimonyOfGlory;
 
-import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.enums.CategoryType;
 import com.l2jserver.gameserver.enums.QuestSound;
 import com.l2jserver.gameserver.enums.Race;
-import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.quest.Quest;
@@ -280,8 +278,8 @@ public final class Q00220_TestimonyOfGlory extends Quest
 				{
 					giveItems(player, GLOVE_OF_VOLTAR, 1);
 					takeItems(player, MANAKIA_1ST_LETTER, 1);
-					attackPlayer(addSpawn(npc, PASHIKA_SON_OF_VOLTAR, npc, true, 200000), player);
-					attackPlayer(addSpawn(npc, VULTUS_SON_OF_VOLTAR, npc, true, 200000), player);
+					addAttackPlayerDesire(addSpawn(npc, PASHIKA_SON_OF_VOLTAR, npc, true, 200000), player);
+					addAttackPlayerDesire(addSpawn(npc, VULTUS_SON_OF_VOLTAR, npc, true, 200000), player);
 					htmltext = event;
 				}
 				break;
@@ -292,10 +290,10 @@ public final class Q00220_TestimonyOfGlory extends Quest
 				{
 					giveItems(player, GLOVE_OF_KEPRA, 1);
 					takeItems(player, MANAKIA_2ND_LETTER, 1);
-					attackPlayer(addSpawn(npc, ENKU_ORC_OVERLORD, npc, true, 200000), player);
-					attackPlayer(addSpawn(npc, ENKU_ORC_OVERLORD, npc, true, 200000), player);
-					attackPlayer(addSpawn(npc, ENKU_ORC_OVERLORD, npc, true, 200000), player);
-					attackPlayer(addSpawn(npc, ENKU_ORC_OVERLORD, npc, true, 200000), player);
+					addAttackPlayerDesire(addSpawn(npc, ENKU_ORC_OVERLORD, npc, true, 200000), player);
+					addAttackPlayerDesire(addSpawn(npc, ENKU_ORC_OVERLORD, npc, true, 200000), player);
+					addAttackPlayerDesire(addSpawn(npc, ENKU_ORC_OVERLORD, npc, true, 200000), player);
+					addAttackPlayerDesire(addSpawn(npc, ENKU_ORC_OVERLORD, npc, true, 200000), player);
 					htmltext = event;
 				}
 				break;
@@ -306,8 +304,8 @@ public final class Q00220_TestimonyOfGlory extends Quest
 				{
 					giveItems(player, GLOVE_OF_BURAI, 1);
 					takeItems(player, KASMANS_2ND_LETTER, 1);
-					attackPlayer(addSpawn(npc, MAKUM_BUGBEAR_THUG, npc, true, 200000), player);
-					attackPlayer(addSpawn(npc, MAKUM_BUGBEAR_THUG, npc, true, 200000), player);
+					addAttackPlayerDesire(addSpawn(npc, MAKUM_BUGBEAR_THUG, npc, true, 200000), player);
+					addAttackPlayerDesire(addSpawn(npc, MAKUM_BUGBEAR_THUG, npc, true, 200000), player);
 					htmltext = event;
 				}
 				break;
@@ -815,8 +813,8 @@ public final class Q00220_TestimonyOfGlory extends Quest
 						{
 							if (npc.getSummonedNpcCount() < 2)
 							{
-								attackPlayer(addSpawn(npc, PASHIKA_SON_OF_VOLTAR, npc, true, 200000), player);
-								attackPlayer(addSpawn(npc, VULTUS_SON_OF_VOLTAR, npc, true, 200000), player);
+								addAttackPlayerDesire(addSpawn(npc, PASHIKA_SON_OF_VOLTAR, npc, true, 200000), player);
+								addAttackPlayerDesire(addSpawn(npc, VULTUS_SON_OF_VOLTAR, npc, true, 200000), player);
 							}
 							htmltext = "30615-05.html";
 						}
@@ -859,7 +857,7 @@ public final class Q00220_TestimonyOfGlory extends Quest
 						{
 							if (npc.getSummonedNpcCount() < 5)
 							{
-								attackPlayer(addSpawn(npc, ENKU_ORC_OVERLORD, npc, true, 200000), player);
+								addAttackPlayerDesire(addSpawn(npc, ENKU_ORC_OVERLORD, npc, true, 200000), player);
 							}
 							htmltext = "30616-05.html";
 						}
@@ -901,8 +899,8 @@ public final class Q00220_TestimonyOfGlory extends Quest
 						{
 							if (npc.getSummonedNpcCount() < 3)
 							{
-								attackPlayer(addSpawn(npc, MAKUM_BUGBEAR_THUG, npc, true, 200000), player);
-								attackPlayer(addSpawn(npc, MAKUM_BUGBEAR_THUG, npc, true, 200000), player);
+								addAttackPlayerDesire(addSpawn(npc, MAKUM_BUGBEAR_THUG, npc, true, 200000), player);
+								addAttackPlayerDesire(addSpawn(npc, MAKUM_BUGBEAR_THUG, npc, true, 200000), player);
 							}
 							htmltext = "30617-04.html";
 						}
@@ -1054,15 +1052,4 @@ public final class Q00220_TestimonyOfGlory extends Quest
 		}
 		return htmltext;
 	}
-	
-	private static void attackPlayer(L2Npc npc, L2PcInstance player)
-	{
-		L2Attackable monster = (L2Attackable) npc;
-		if ((monster != null) && (player != null))
-		{
-			monster.setIsRunning(true);
-			monster.addDamageHate(player, 0, 999);
-			monster.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player);
-		}
-	}
 }
\ No newline at end of file
diff --git a/L2J_DataPack/dist/game/data/scripts/quests/Q00223_TestOfTheChampion/Q00223_TestOfTheChampion.java b/L2J_DataPack/dist/game/data/scripts/quests/Q00223_TestOfTheChampion/Q00223_TestOfTheChampion.java
index b6c7784c8dc3c93048edf05aad31e4569689bd05..318b512c4deaa9e0241d45bca41e7911adb37809 100644
--- a/L2J_DataPack/dist/game/data/scripts/quests/Q00223_TestOfTheChampion/Q00223_TestOfTheChampion.java
+++ b/L2J_DataPack/dist/game/data/scripts/quests/Q00223_TestOfTheChampion/Q00223_TestOfTheChampion.java
@@ -18,9 +18,7 @@
  */
 package quests.Q00223_TestOfTheChampion;
 
-import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.enums.QuestSound;
-import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.base.ClassId;
@@ -226,15 +224,12 @@ public final class Q00223_TestOfTheChampion extends Quest
 								{
 									if (getRandom(10) < 7)
 									{
-										final L2Attackable monster1 = (L2Attackable) addSpawn(HARPY_MATRIARCH, npc, true, 0, false);
-										attackPlayer(monster1, attacker);
+										addAttackPlayerDesire(addSpawn(HARPY_MATRIARCH, npc, true, 0, false), attacker);
 									}
 									else
 									{
-										final L2Attackable monster1 = (L2Attackable) addSpawn(HARPY_MATRIARCH, npc, true, 0, false);
-										final L2Attackable monster2 = (L2Attackable) addSpawn(HARPY_MATRIARCH, npc, true, 0, false);
-										attackPlayer(monster1, attacker);
-										attackPlayer(monster2, attacker);
+										addAttackPlayerDesire(addSpawn(HARPY_MATRIARCH, npc, true, 0, false), attacker);
+										addAttackPlayerDesire(addSpawn(HARPY_MATRIARCH, npc, true, 0, false), attacker);
 									}
 								}
 							}
@@ -262,15 +257,12 @@ public final class Q00223_TestOfTheChampion extends Quest
 								{
 									if (getRandom(10) < 7)
 									{
-										final L2Attackable monster1 = (L2Attackable) addSpawn(ROAD_COLLECTOR, npc, true, 0, false);
-										attackPlayer(monster1, attacker);
+										addAttackPlayerDesire(addSpawn(ROAD_COLLECTOR, npc, true, 0, false), attacker);
 									}
 									else
 									{
-										final L2Attackable monster1 = (L2Attackable) addSpawn(ROAD_COLLECTOR, npc, true, 0, false);
-										final L2Attackable monster2 = (L2Attackable) addSpawn(ROAD_COLLECTOR, npc, true, 0, false);
-										attackPlayer(monster1, attacker);
-										attackPlayer(monster2, attacker);
+										addAttackPlayerDesire(addSpawn(ROAD_COLLECTOR, npc, true, 0, false), attacker);
+										addAttackPlayerDesire(addSpawn(ROAD_COLLECTOR, npc, true, 0, false), attacker);
 									}
 								}
 							}
@@ -296,8 +288,7 @@ public final class Q00223_TestOfTheChampion extends Quest
 							{
 								if (getRandomBoolean())
 								{
-									final L2Attackable monster1 = (L2Attackable) addSpawn(BLOODY_AXE_ELITE, npc, true, 0, false);
-									attackPlayer(monster1, attacker);
+									addAttackPlayerDesire(addSpawn(BLOODY_AXE_ELITE, npc, true, 0, false), attacker);
 								}
 							}
 							npc.setScriptValue(1);
@@ -645,14 +636,4 @@ public final class Q00223_TestOfTheChampion extends Quest
 		}
 		return htmltext;
 	}
-	
-	private static void attackPlayer(L2Attackable npc, L2PcInstance player)
-	{
-		if ((npc != null) && (player != null))
-		{
-			npc.setIsRunning(true);
-			npc.addDamageHate(player, 0, 999);
-			npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player);
-		}
-	}
 }
\ No newline at end of file
diff --git a/L2J_DataPack/dist/game/data/scripts/quests/Q00225_TestOfTheSearcher/Q00225_TestOfTheSearcher.java b/L2J_DataPack/dist/game/data/scripts/quests/Q00225_TestOfTheSearcher/Q00225_TestOfTheSearcher.java
index 38389571ba48f2fac139630e0ce40c02ac28a063..4c25c59e2a613b685bc6d9542473990de7c08d87 100644
--- a/L2J_DataPack/dist/game/data/scripts/quests/Q00225_TestOfTheSearcher/Q00225_TestOfTheSearcher.java
+++ b/L2J_DataPack/dist/game/data/scripts/quests/Q00225_TestOfTheSearcher/Q00225_TestOfTheSearcher.java
@@ -18,9 +18,7 @@
  */
 package quests.Q00225_TestOfTheSearcher;
 
-import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.enums.QuestSound;
-import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.base.ClassId;
@@ -216,8 +214,7 @@ public final class Q00225_TestOfTheSearcher extends Quest
 			if (npc.isScriptValue(0) && hasQuestItems(attacker, LEIRYNNS_1ST_ORDER))
 			{
 				npc.setScriptValue(1);
-				final L2Attackable monster1 = (L2Attackable) addSpawn(NEER_BODYGUARD, npc, true, 200000);
-				attackPlayer(monster1, attacker);
+				addAttackPlayerDesire(addSpawn(NEER_BODYGUARD, npc, true, 200000), attacker);
 			}
 		}
 		return super.onAttack(npc, attacker, damage, isSummon);
@@ -607,14 +604,4 @@ public final class Q00225_TestOfTheSearcher extends Quest
 		}
 		return htmltext;
 	}
-	
-	private static void attackPlayer(L2Attackable npc, L2PcInstance player)
-	{
-		if ((npc != null) && (player != null))
-		{
-			npc.setIsRunning(true);
-			npc.addDamageHate(player, 0, 999);
-			npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player);
-		}
-	}
 }
\ No newline at end of file
diff --git a/L2J_DataPack/dist/game/data/scripts/quests/Q00226_TestOfTheHealer/Q00226_TestOfTheHealer.java b/L2J_DataPack/dist/game/data/scripts/quests/Q00226_TestOfTheHealer/Q00226_TestOfTheHealer.java
index 875b3d7919b83120c2fac4c02533e7c3d253820a..63cd7511a3b00751df76d1ee17681dfeedb24953 100644
--- a/L2J_DataPack/dist/game/data/scripts/quests/Q00226_TestOfTheHealer/Q00226_TestOfTheHealer.java
+++ b/L2J_DataPack/dist/game/data/scripts/quests/Q00226_TestOfTheHealer/Q00226_TestOfTheHealer.java
@@ -18,10 +18,8 @@
  */
 package quests.Q00226_TestOfTheHealer;
 
-import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.enums.CategoryType;
 import com.l2jserver.gameserver.enums.QuestSound;
-import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.base.ClassId;
@@ -161,7 +159,7 @@ public final class Q00226_TestOfTheHealer extends Quest
 					qs.setCond(2, true);
 					if (npc.getSummonedNpcCount() < 1)
 					{
-						attackPlayer(addSpawn(npc, TATOMA, npc, true, 200000), player);
+						addAttackPlayerDesire(addSpawn(npc, TATOMA, npc, true, 200000), player);
 					}
 				}
 				htmltext = event;
@@ -675,15 +673,4 @@ public final class Q00226_TestOfTheHealer extends Quest
 		}
 		return htmltext;
 	}
-	
-	private static void attackPlayer(L2Npc npc, L2PcInstance player)
-	{
-		L2Attackable monster = (L2Attackable) npc;
-		if ((monster != null) && (player != null))
-		{
-			monster.setIsRunning(true);
-			monster.addDamageHate(player, 0, 999);
-			monster.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player);
-		}
-	}
 }
\ No newline at end of file
diff --git a/L2J_DataPack/dist/game/data/scripts/quests/Q00231_TestOfTheMaestro/Q00231_TestOfTheMaestro.java b/L2J_DataPack/dist/game/data/scripts/quests/Q00231_TestOfTheMaestro/Q00231_TestOfTheMaestro.java
index a213c811ba4807ca1157d87c37d08e5d0f3d38ab..cb61705b856afa0d160d43faa81f23b0e2914092 100644
--- a/L2J_DataPack/dist/game/data/scripts/quests/Q00231_TestOfTheMaestro/Q00231_TestOfTheMaestro.java
+++ b/L2J_DataPack/dist/game/data/scripts/quests/Q00231_TestOfTheMaestro/Q00231_TestOfTheMaestro.java
@@ -18,9 +18,7 @@
  */
 package quests.Q00231_TestOfTheMaestro;
 
-import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.enums.QuestSound;
-import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.base.ClassId;
@@ -162,9 +160,9 @@ public final class Q00231_TestOfTheMaestro extends Quest
 			}
 			case "SPAWN_KING_BUGBEAR":
 			{
-				attackPlayer(addSpawn(KING_BUGBEAR, 140395, -194147, -3146, 0, false, 200000, false), player);
-				attackPlayer(addSpawn(KING_BUGBEAR, 140395, -194147, -3146, 0, false, 200000, false), player);
-				attackPlayer(addSpawn(KING_BUGBEAR, 140395, -194147, -3146, 0, false, 200000, false), player);
+				addAttackPlayerDesire(addSpawn(KING_BUGBEAR, 140395, -194147, -3146, 0, false, 200000, false), player);
+				addAttackPlayerDesire(addSpawn(KING_BUGBEAR, 140395, -194147, -3146, 0, false, 200000, false), player);
+				addAttackPlayerDesire(addSpawn(KING_BUGBEAR, 140395, -194147, -3146, 0, false, 200000, false), player);
 				break;
 			}
 		}
@@ -484,15 +482,4 @@ public final class Q00231_TestOfTheMaestro extends Quest
 		}
 		return htmltext;
 	}
-	
-	private static void attackPlayer(L2Npc npc, L2PcInstance player)
-	{
-		L2Attackable monster = (L2Attackable) npc;
-		if ((monster != null) && (player != null))
-		{
-			monster.setIsRunning(true);
-			monster.addDamageHate(player, 0, 999);
-			monster.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player);
-		}
-	}
 }
\ No newline at end of file
diff --git a/L2J_DataPack/dist/game/data/scripts/quests/Q00409_PathOfTheElvenOracle/Q00409_PathOfTheElvenOracle.java b/L2J_DataPack/dist/game/data/scripts/quests/Q00409_PathOfTheElvenOracle/Q00409_PathOfTheElvenOracle.java
index 9ce61dfa9736850b58a86f1e0ba36f6c31172ba4..c3fa072b6c6c7024995adddbddcb2137acc9bde6 100644
--- a/L2J_DataPack/dist/game/data/scripts/quests/Q00409_PathOfTheElvenOracle/Q00409_PathOfTheElvenOracle.java
+++ b/L2J_DataPack/dist/game/data/scripts/quests/Q00409_PathOfTheElvenOracle/Q00409_PathOfTheElvenOracle.java
@@ -18,8 +18,6 @@
  */
 package quests.Q00409_PathOfTheElvenOracle;
 
-import com.l2jserver.gameserver.ai.CtrlIntention;
-import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.base.ClassId;
@@ -130,12 +128,9 @@ public final class Q00409_PathOfTheElvenOracle extends Quest
 			case "replay_1":
 			{
 				qs.setMemoState(2);
-				final L2Attackable monster1 = (L2Attackable) addSpawn(lIZARDMAN_WARRIOR, npc, true, 0, false);
-				final L2Attackable monster2 = (L2Attackable) addSpawn(LIZARDMAN_SCOUT, npc, true, 0, false);
-				final L2Attackable monster3 = (L2Attackable) addSpawn(LIZARDMAN_SOLDIER, npc, true, 0, false);
-				attackPlayer(monster1, player);
-				attackPlayer(monster2, player);
-				attackPlayer(monster3, player);
+				addAttackPlayerDesire(addSpawn(lIZARDMAN_WARRIOR, npc, true, 0, false), player);
+				addAttackPlayerDesire(addSpawn(LIZARDMAN_SCOUT, npc, true, 0, false), player);
+				addAttackPlayerDesire(addSpawn(LIZARDMAN_SOLDIER, npc, true, 0, false), player);
 				break;
 			}
 			case "30428-02.html":
@@ -152,8 +147,7 @@ public final class Q00409_PathOfTheElvenOracle extends Quest
 				if (qs.isMemoState(2))
 				{
 					qs.setMemoState(3);
-					final L2Attackable monster = (L2Attackable) addSpawn(TAMIL, npc, true, 0, true);
-					attackPlayer(monster, player);
+					addAttackPlayerDesire(addSpawn(TAMIL, npc, true, 0, true), player);
 				}
 				break;
 			}
@@ -407,14 +401,4 @@ public final class Q00409_PathOfTheElvenOracle extends Quest
 		}
 		return htmltext;
 	}
-	
-	private static void attackPlayer(L2Attackable npc, L2PcInstance player)
-	{
-		if ((npc != null) && (player != null))
-		{
-			npc.setIsRunning(true);
-			npc.addDamageHate(player, 0, 999);
-			npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player);
-		}
-	}
 }
\ No newline at end of file
diff --git a/L2J_DataPack/dist/game/data/scripts/quests/Q00414_PathOfTheOrcRaider/Q00414_PathOfTheOrcRaider.java b/L2J_DataPack/dist/game/data/scripts/quests/Q00414_PathOfTheOrcRaider/Q00414_PathOfTheOrcRaider.java
index 96a03d23cf7b0e5ed6c06001c7ea3abcc4095540..105be39c53ab65656eb9da851209f00bfaf80f4e 100644
--- a/L2J_DataPack/dist/game/data/scripts/quests/Q00414_PathOfTheOrcRaider/Q00414_PathOfTheOrcRaider.java
+++ b/L2J_DataPack/dist/game/data/scripts/quests/Q00414_PathOfTheOrcRaider/Q00414_PathOfTheOrcRaider.java
@@ -18,9 +18,7 @@
  */
 package quests.Q00414_PathOfTheOrcRaider;
 
-import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.enums.QuestSound;
-import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.base.ClassId;
@@ -176,8 +174,7 @@ public final class Q00414_PathOfTheOrcRaider extends Quest
 						if (getRandom(100) < (getQuestItemsCount(killer, GREEN_BLOOD) * 5))
 						{
 							takeItems(killer, GREEN_BLOOD, -1);
-							final L2Attackable monster = (L2Attackable) addSpawn(KURUKA_RATMAN_LEADER, npc, true, 0, true);
-							attackPlayer(monster, killer);
+							addAttackPlayerDesire(addSpawn(KURUKA_RATMAN_LEADER, npc, true, 0, true), killer);
 						}
 						else
 						{
@@ -360,14 +357,4 @@ public final class Q00414_PathOfTheOrcRaider extends Quest
 		}
 		return htmltext;
 	}
-	
-	private static void attackPlayer(L2Attackable npc, L2PcInstance player)
-	{
-		if ((npc != null) && (player != null))
-		{
-			npc.setIsRunning(true);
-			npc.addDamageHate(player, 0, 999);
-			npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player);
-		}
-	}
 }
\ No newline at end of file