From 9ed58fd763c7a87e36f06e7ae4af85cdce1070d7 Mon Sep 17 00:00:00 2001
From: Zoey76 <zoey_76@msn.com>
Date: Sun, 30 Nov 2014 17:32:36 -0200
Subject: [PATCH] Datapack part for
 L2J/L2J_Server@0854ed868ff6b09917ebbc4731b6a9e14cfc9c3f.

---
 .../ai/group_template/DragonValley.java       | 14 +++---
 .../scripts/ai/group_template/FairyTrees.java |  9 ++--
 .../ai/group_template/FrozenLabyrinth.java    |  5 +-
 .../scripts/ai/group_template/GiantsCave.java |  4 +-
 .../ai/group_template/LairOfAntharas.java     |  8 ++--
 .../ai/group_template/MonasteryOfSilence.java |  7 ++-
 .../ai/group_template/PavelArchaic.java       |  9 ++--
 .../ai/group_template/PlainsOfDion.java       |  5 +-
 .../ai/group_template/PlainsOfLizardman.java  | 16 +++----
 .../ai/group_template/PrimevalIsle.java       |  4 +-
 .../ai/group_template/SelMahumSquad.java      |  2 +-
 .../ai/group_template/SilentValley.java       |  9 ++--
 .../ai/group_template/StakatoNest.java        | 26 +++-------
 .../scripts/ai/individual/Baium/Baium.java    | 20 ++++----
 .../data/scripts/ai/individual/Gordon.java    |  2 +-
 .../ai/individual/Sailren/Sailren.java        |  9 ++--
 .../data/scripts/ai/npc/AbstractNpcAI.java    | 47 -------------------
 .../CavernOfThePirateCaptain.java             |  4 +-
 .../Q00063_PathOfTheWarder.java               | 16 +------
 .../Q00120_PavelsLastResearch.java            |  9 ----
 .../Q00220_TestimonyOfGlory.java              | 39 +++++----------
 .../Q00223_TestOfTheChampion.java             | 33 +++----------
 .../Q00225_TestOfTheSearcher.java             | 15 +-----
 .../Q00226_TestOfTheHealer.java               | 15 +-----
 .../Q00231_TestOfTheMaestro.java              | 19 ++------
 .../Q00409_PathOfTheElvenOracle.java          | 24 ++--------
 .../Q00414_PathOfTheOrcRaider.java            | 15 +-----
 27 files changed, 97 insertions(+), 288 deletions(-)

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 a2c7d84980..541a0fb683 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 1fcabd6aa5..e47d9c84bf 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 05362aa9c1..42b11a9484 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 33d95b777e..fd4b7655fa 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 96421d996e..0f9aa1cf11 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 b46b9aa987..39b247b8e6 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 84301483cf..1d7d9e59c1 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 24c932b827..b9063e5cc5 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 fc71eccf43..f644295171 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 0dedff4583..f262d55e11 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 3a46c37572..3314e723c1 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 6d8d4c1e52..5e50b09d35 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 2b0005a166..e95c558d50 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 0f82cf88ba..5624104479 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 33686e45b5..a2b459f69c 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 f0d34c09f8..d31171fe5d 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 8fbfac8acb..007924645d 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 a6703c43e2..02a32a4058 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 f51e832524..36a1129ccd 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 f396ec189b..866464ea43 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 7cc19873e6..5a52906617 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 b6c7784c8d..318b512c4d 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 38389571ba..4c25c59e2a 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 875b3d7919..63cd7511a3 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 a213c811ba..cb61705b85 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 9ce61dfa97..c3fa072b6c 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 96a03d23cf..105be39c53 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
-- 
GitLab