From 2131eb828cb0c5e12dcdbf07240376a36dadae3d Mon Sep 17 00:00:00 2001
From: Zealar <Zealar@users.noreply.github.com>
Date: Mon, 20 Oct 2014 23:06:04 +0000
Subject: [PATCH] BETA: Data Pack for [L6665]

---
 .../ai/group_template/DragonValley.java       | 17 +---
 .../ai/group_template/LairOfAntharas.java     | 12 ---
 .../ai/group_template/MinionSpawnManager.java | 22 ++---
 .../ai/group_template/MonasteryOfSilence.java | 19 ++--
 .../ai/group_template/NonLethalableNpcs.java  |  6 --
 .../ai/group_template/NonTalkingNpcs.java     | 10 ---
 .../ai/group_template/PrimevalIsle.java       | 18 ----
 .../ai/group_template/PrisonGuards.java       | 12 ---
 .../ai/group_template/RandomSpawn.java        | 14 ++-
 .../group_template/SeeThroughSilentMove.java  | 13 ---
 .../ai/group_template/SelMahumDrill.java      | 40 +++------
 .../ai/group_template/SelMahumSquad.java      | 41 +++------
 .../data/scripts/ai/individual/Anais.java     | 41 ++++-----
 .../data/scripts/ai/individual/DrChaos.java   | 87 ++++++++++---------
 .../scripts/ai/individual/EvasGiftBox.java    |  7 --
 .../scripts/ai/individual/GraveRobbers.java   | 49 +++--------
 .../ai/individual/RagnaOrcCommander.java      | 60 ++++---------
 .../scripts/ai/individual/RagnaOrcHero.java   | 53 +++--------
 .../scripts/ai/individual/RagnaOrcSeer.java   | 52 ++++-------
 .../scripts/ai/individual/Venom/Venom.java    | 35 ++++----
 .../scripts/ai/npc/Minigame/Minigame.java     | 46 +++++++---
 .../scripts/ai/npc/TownPets/TownPets.java     | 15 +---
 .../AI/NPC/GeneralDilios/GeneralDilios.java   | 29 ++++---
 .../AI/NPC/ZealotOfShilen/ZealotOfShilen.java | 35 ++++----
 .../SeedOfAnnihilation.java                   | 22 -----
 .../admincommandhandlers/AdminAdmin.java      |  4 +
 .../data/scripts/hellbound/AI/Amaskari.java   |  5 +-
 .../data/scripts/hellbound/AI/Chimeras.java   |  2 +-
 .../data/scripts/hellbound/AI/Keltas.java     | 11 +--
 .../hellbound/AI/NPC/Shadai/Shadai.java       |  5 +-
 .../data/scripts/hellbound/AI/Typhoon.java    |  5 +-
 .../AI/Zones/AnomicFoundry/AnomicFoundry.java | 64 +++++++-------
 .../AI/Zones/TowerOfNaia/TowerOfNaia.java     |  2 +-
 .../Q00457_LostAndFound.java                  | 10 ++-
 34 files changed, 309 insertions(+), 554 deletions(-)

diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/DragonValley.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/DragonValley.java
index 919492d4cf..a2c7d84980 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/DragonValley.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/DragonValley.java
@@ -22,8 +22,6 @@ import java.util.EnumMap;
 
 import ai.npc.AbstractNpcAI;
 
-import com.l2jserver.gameserver.datatables.SpawnTable;
-import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.L2Playable;
@@ -136,22 +134,9 @@ public final class DragonValley extends AbstractNpcAI
 		addAttackId(SUMMON_NPC);
 		addKillId(NECROMANCER_OF_THE_VALLEY);
 		addKillId(SPOIL_REACT_MONSTER);
-		addSpawnId(EXPLODING_ORC_GHOST);
+		addSpawnId(EXPLODING_ORC_GHOST, NECROMANCER_OF_THE_VALLEY);
 		addSpawnId(SPOIL_REACT_MONSTER);
 		addSpellFinishedId(EXPLODING_ORC_GHOST);
-		
-		for (int npcId : SPOIL_REACT_MONSTER)
-		{
-			for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(npcId))
-			{
-				onSpawn(spawn.getLastSpawn());
-			}
-		}
-		
-		for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(NECROMANCER_OF_THE_VALLEY))
-		{
-			onSpawn(spawn.getLastSpawn());
-		}
 	}
 	
 	@Override
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/LairOfAntharas.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/LairOfAntharas.java
index 0197507a0d..96421d996e 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/LairOfAntharas.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/LairOfAntharas.java
@@ -18,12 +18,8 @@
  */
 package ai.group_template;
 
-import java.util.Arrays;
-
 import ai.npc.AbstractNpcAI;
 
-import com.l2jserver.gameserver.datatables.SpawnTable;
-import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -57,14 +53,6 @@ public final class LairOfAntharas extends AbstractNpcAI
 		addSpawnId(DRAGON_KNIGHT, DRAGON_KNIGHT2, DRAGON_GUARD, DRAGON_MAGE);
 		addMoveFinishedId(DRAGON_GUARD, DRAGON_MAGE);
 		addAggroRangeEnterId(KNORIKS);
-		
-		for (int npcId : Arrays.asList(DRAGON_KNIGHT, DRAGON_KNIGHT2, DRAGON_GUARD, DRAGON_MAGE))
-		{
-			for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(npcId))
-			{
-				onSpawn(spawn.getLastSpawn());
-			}
-		}
 	}
 	
 	@Override
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/MinionSpawnManager.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/MinionSpawnManager.java
index 9386db852c..aa04b42d0b 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/MinionSpawnManager.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/MinionSpawnManager.java
@@ -23,16 +23,12 @@ import java.util.Set;
 
 import ai.npc.AbstractNpcAI;
 
-import com.l2jserver.gameserver.datatables.NpcData;
 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.model.actor.instance.L2RaidBossInstance;
-import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
 import com.l2jserver.gameserver.model.holders.MinionHolder;
 import com.l2jserver.gameserver.network.NpcStringId;
 import com.l2jserver.gameserver.network.clientpackets.Say2;
-import com.l2jserver.util.Rnd;
 
 /**
  * Minion Spawn Manager.
@@ -424,12 +420,9 @@ public final class MinionSpawnManager extends AbstractNpcAI
 	@Override
 	public String onSpawn(L2Npc npc)
 	{
-		if ((npc instanceof L2MonsterInstance) || (npc instanceof L2RaidBossInstance))
+		if (npc.getTemplate().getParameters().getSet().get("SummonPrivateRate") == null)
 		{
-			if (!npc.getTemplate().getParameters().getSet().containsKey("SummonPrivateRate"))
-			{
-				((L2MonsterInstance) npc).getMinionList().spawnMinions(npc.getTemplate().getParameters().getMinionList("Privates"));
-			}
+			((L2MonsterInstance) npc).getMinionList().spawnMinions(npc.getTemplate().getParameters().getMinionList("Privates"));
 		}
 		return super.onSpawn(npc);
 	}
@@ -442,16 +435,11 @@ public final class MinionSpawnManager extends AbstractNpcAI
 			L2MonsterInstance monster = (L2MonsterInstance) npc;
 			if (!monster.hasMinions())
 			{
-				final int summonPrivateRate = npc.getTemplate().getParameters().getInt("SummonPrivateRate", 0);
-				if (Rnd.get(1, 100) <= summonPrivateRate)
+				if (getRandom(1, 100) <= npc.getTemplate().getParameters().getInt("SummonPrivateRate", 0))
 				{
-					L2NpcTemplate template = NpcData.getInstance().getTemplate(npc.getId());
-					if (template.getParameters().getMinionList("Privates") != null)
+					for (MinionHolder is : npc.getTemplate().getParameters().getMinionList("Privates"))
 					{
-						for (MinionHolder is : template.getParameters().getMinionList("Privates"))
-						{
-							addMinion((L2MonsterInstance) npc, is.getId());
-						}
+						addMinion((L2MonsterInstance) npc, is.getId());
 					}
 					broadcastNpcSay(npc, Say2.NPC_ALL, ON_ATTACK_MSG[getRandom(ON_ATTACK_MSG.length)]);
 				}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/MonasteryOfSilence.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/MonasteryOfSilence.java
index f0b3d41bac..b46b9aa987 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/MonasteryOfSilence.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/MonasteryOfSilence.java
@@ -21,9 +21,7 @@ package ai.group_template;
 import ai.npc.AbstractNpcAI;
 
 import com.l2jserver.gameserver.ai.CtrlIntention;
-import com.l2jserver.gameserver.datatables.SpawnTable;
 import com.l2jserver.gameserver.model.L2Object;
-import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Npc;
@@ -82,13 +80,7 @@ public final class MonasteryOfSilence extends AbstractNpcAI
 		addAttackId(KNIGHT, CAPTAIN, GUIDE, SEEKER, ASCETIC);
 		addNpcHateId(GUIDE, SEEKER, SAVIOR, ASCETIC);
 		addAggroRangeEnterId(GUIDE, SEEKER, SAVIOR, ASCETIC);
-		
-		for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(SCARECROW))
-		{
-			spawn.getLastSpawn().setIsInvul(true);
-			spawn.getLastSpawn().disableCoreAI(true);
-			startQuestTimer("TRAINING", 30000, spawn.getLastSpawn(), null, true);
-		}
+		addSpawnId(SCARECROW);
 	}
 	
 	@Override
@@ -289,6 +281,15 @@ public final class MonasteryOfSilence extends AbstractNpcAI
 		return super.onSkillSee(npc, caster, skill, targets, isSummon);
 	}
 	
+	@Override
+	public String onSpawn(L2Npc npc)
+	{
+		npc.setIsInvul(true);
+		npc.disableCoreAI(true);
+		startQuestTimer("TRAINING", 30000, npc, null, true);
+		return super.onSpawn(npc);
+	}
+	
 	public static void main(String[] args)
 	{
 		new MonasteryOfSilence();
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/NonLethalableNpcs.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/NonLethalableNpcs.java
index 12946c0dd0..5e19273c63 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/NonLethalableNpcs.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/NonLethalableNpcs.java
@@ -20,8 +20,6 @@ package ai.group_template;
 
 import ai.npc.AbstractNpcAI;
 
-import com.l2jserver.gameserver.datatables.SpawnTable;
-import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 
 /**
@@ -35,10 +33,6 @@ public class NonLethalableNpcs extends AbstractNpcAI
 	{
 		super(NonLethalableNpcs.class.getSimpleName(), "ai/group_template");
 		addSpawnId(HEADQUARTERS);
-		for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(HEADQUARTERS))
-		{
-			onSpawn(spawn.getLastSpawn());
-		}
 	}
 	
 	@Override
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/NonTalkingNpcs.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/NonTalkingNpcs.java
index ab14561480..e0353efa63 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/NonTalkingNpcs.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/NonTalkingNpcs.java
@@ -20,8 +20,6 @@ package ai.group_template;
 
 import ai.npc.AbstractNpcAI;
 
-import com.l2jserver.gameserver.datatables.SpawnTable;
-import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 
 /**
@@ -60,14 +58,6 @@ public final class NonTalkingNpcs extends AbstractNpcAI
 	{
 		super(NonTalkingNpcs.class.getSimpleName(), "ai/group_template");
 		addSpawnId(NONTALKINGNPCS);
-		
-		for (int npcId : NONTALKINGNPCS)
-		{
-			for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(npcId))
-			{
-				onSpawn(spawn.getLastSpawn());
-			}
-		}
 	}
 	
 	@Override
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PrimevalIsle.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PrimevalIsle.java
index 92c5545d3b..0dedff4583 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PrimevalIsle.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PrimevalIsle.java
@@ -22,10 +22,8 @@ import ai.npc.AbstractNpcAI;
 
 import com.l2jserver.gameserver.GeoData;
 import com.l2jserver.gameserver.ai.CtrlIntention;
-import com.l2jserver.gameserver.datatables.SpawnTable;
 import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.handler.ItemHandler;
-import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -120,22 +118,6 @@ public final class PrimevalIsle extends AbstractNpcAI
 		addKillId(EGG, SAILREN, DEINO, ORNIT);
 		addSeeCreatureId(TREX);
 		addSeeCreatureId(MONSTERS);
-		
-		for (int npcId : SPRIGNANT)
-		{
-			for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(npcId))
-			{
-				onSpawn(spawn.getLastSpawn());
-			}
-		}
-		
-		for (int npcId : TREX)
-		{
-			for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(npcId))
-			{
-				onSpawn(spawn.getLastSpawn());
-			}
-		}
 	}
 	
 	@Override
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PrisonGuards.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PrisonGuards.java
index 2fa60129de..7cfeb46ea9 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PrisonGuards.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PrisonGuards.java
@@ -20,9 +20,7 @@ package ai.group_template;
 
 import ai.npc.AbstractNpcAI;
 
-import com.l2jserver.gameserver.datatables.SpawnTable;
 import com.l2jserver.gameserver.model.L2Object;
-import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -55,16 +53,6 @@ public final class PrisonGuards extends AbstractNpcAI
 		addNpcHateId(GUARD);
 		addSkillSeeId(GUARD);
 		addSpellFinishedId(GUARD_HEAD, GUARD);
-		
-		for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(GUARD_HEAD))
-		{
-			onSpawn(spawn.getLastSpawn());
-		}
-		
-		for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(GUARD))
-		{
-			onSpawn(spawn.getLastSpawn());
-		}
 	}
 	
 	@Override
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/RandomSpawn.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/RandomSpawn.java
index 90e98622e7..82ff0ac272 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/RandomSpawn.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/RandomSpawn.java
@@ -88,17 +88,13 @@ public final class RandomSpawn extends AbstractNpcAI
 	@Override
 	public final String onSpawn(L2Npc npc)
 	{
-		if (!npc.isTeleporting())
+		final Location[] spawnlist = SPAWN_POINTS.get(npc.getId());
+		final Location loc = spawnlist[getRandom(spawnlist.length)];
+		if (!npc.isInsideRadius(loc, 200, false, false))
 		{
-			final Location[] spawnlist = SPAWN_POINTS.get(npc.getId());
-			final Location loc = spawnlist[getRandom(spawnlist.length)];
-			if (!npc.isInsideRadius(loc, 200, false, false))
-			{
-				npc.getSpawn().setLocation(loc);
-				ThreadPoolManager.getInstance().scheduleGeneral(new Teleport(npc, loc), 100);
-			}
+			npc.getSpawn().setLocation(loc);
+			ThreadPoolManager.getInstance().scheduleGeneral(new Teleport(npc, loc), 100);
 		}
-		
 		return super.onSpawn(npc);
 	}
 	
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SeeThroughSilentMove.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SeeThroughSilentMove.java
index 53a7396c29..15c984aa22 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SeeThroughSilentMove.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SeeThroughSilentMove.java
@@ -20,8 +20,6 @@ package ai.group_template;
 
 import ai.npc.AbstractNpcAI;
 
-import com.l2jserver.gameserver.datatables.SpawnTable;
-import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 
@@ -45,17 +43,6 @@ public class SeeThroughSilentMove extends AbstractNpcAI
 	private SeeThroughSilentMove()
 	{
 		super(SeeThroughSilentMove.class.getSimpleName(), "ai/group_template");
-		for (int npcId : MONSTERS)
-		{
-			for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(npcId))
-			{
-				final L2Npc npc = spawn.getLastSpawn();
-				if ((npc != null) && npc.isAttackable())
-				{
-					((L2Attackable) npc).setSeeThroughSilentMove(true);
-				}
-			}
-		}
 		addSpawnId(MONSTERS);
 	}
 	
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SelMahumDrill.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SelMahumDrill.java
index c3e9c6bbc4..6a29066345 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SelMahumDrill.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SelMahumDrill.java
@@ -136,23 +136,6 @@ public final class SelMahumDrill extends AbstractNpcAI
 		addEventReceivedId(MAHUM_SOLDIERS);
 		addSpawnId(MAHUM_CHIEFS);
 		addSpawnId(MAHUM_SOLDIERS);
-		
-		// Send event to monsters, that was spawned through SpawnTable at server start (it is impossible to track first spawn)
-		for (int npcId : MAHUM_CHIEFS)
-		{
-			for (L2Spawn npcSpawn : SpawnTable.getInstance().getSpawns(npcId))
-			{
-				onSpawn(npcSpawn.getLastSpawn());
-			}
-		}
-		for (int npcId : MAHUM_SOLDIERS)
-		{
-			for (L2Spawn npcSpawn : SpawnTable.getInstance().getSpawns(npcId))
-			{
-				onSpawn(npcSpawn.getLastSpawn());
-			}
-		}
-		
 		// Start global return home timer
 		startQuestTimer("return_home", 120000, null, null, true);
 	}
@@ -288,21 +271,18 @@ public final class SelMahumDrill extends AbstractNpcAI
 	@Override
 	public String onSpawn(L2Npc npc)
 	{
-		if (!npc.isTeleporting())
+		if (Util.contains(MAHUM_CHIEFS, npc.getId()))
 		{
-			if (Util.contains(MAHUM_CHIEFS, npc.getId()))
-			{
-				startQuestTimer("do_social_action", 15000, npc, null);
-			}
-			
-			else if ((getRandom(18) < 1) && Util.contains(MAHUM_SOLDIERS, npc.getId()))
-			{
-				npc.getVariables().set("SOCIAL_ACTION_ALT_BEHAVIOR", 1);
-			}
-			
-			// Restore AI handling by core
-			npc.disableCoreAI(false);
+			startQuestTimer("do_social_action", 15000, npc, null);
 		}
+		
+		else if ((getRandom(18) < 1) && Util.contains(MAHUM_SOLDIERS, npc.getId()))
+		{
+			npc.getVariables().set("SOCIAL_ACTION_ALT_BEHAVIOR", 1);
+		}
+		
+		// Restore AI handling by core
+		npc.disableCoreAI(false);
 		return null;
 	}
 	
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SelMahumSquad.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SelMahumSquad.java
index 2cba6a3624..9264acc8cd 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SelMahumSquad.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SelMahumSquad.java
@@ -23,9 +23,7 @@ import ai.npc.AbstractNpcAI;
 import com.l2jserver.gameserver.GameTimeController;
 import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.datatables.SkillData;
-import com.l2jserver.gameserver.datatables.SpawnTable;
 import com.l2jserver.gameserver.model.L2Object;
-import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
@@ -86,16 +84,6 @@ public final class SelMahumSquad extends AbstractNpcAI
 		addSpawnId(CHEF, FIRE);
 		addSpawnId(SQUAD_LEADERS);
 		addSpellFinishedId(CHEF);
-		
-		// Send event to monsters, that was spawned through SpawnTable at server start (it is impossible to track first spawn)
-		for (L2Spawn npcSpawn : SpawnTable.getInstance().getSpawns(CHEF))
-		{
-			onSpawn(npcSpawn.getLastSpawn());
-		}
-		for (L2Spawn npcSpawn : SpawnTable.getInstance().getSpawns(FIRE))
-		{
-			onSpawn(npcSpawn.getLastSpawn());
-		}
 	}
 	
 	@Override
@@ -358,23 +346,20 @@ public final class SelMahumSquad extends AbstractNpcAI
 	@Override
 	public String onSpawn(L2Npc npc)
 	{
-		if (!npc.isTeleporting())
+		if (npc.getId() == CHEF)
 		{
-			if (npc.getId() == CHEF)
-			{
-				npc.setIsInvul(false);
-			}
-			
-			else if (npc.getId() == FIRE)
-			{
-				startQuestTimer("fire", 1000, npc, null);
-			}
-			
-			else if (Util.contains(SQUAD_LEADERS, npc.getId()))
-			{
-				npc.setDisplayEffect(3);
-				npc.setIsNoRndWalk(false);
-			}
+			npc.setIsInvul(false);
+		}
+		
+		else if (npc.getId() == FIRE)
+		{
+			startQuestTimer("fire", 1000, npc, null);
+		}
+		
+		else if (Util.contains(SQUAD_LEADERS, npc.getId()))
+		{
+			npc.setDisplayEffect(3);
+			npc.setIsNoRndWalk(false);
 		}
 		return null;
 	}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Anais.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Anais.java
index c144e7cf83..84bcea42bd 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Anais.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Anais.java
@@ -18,13 +18,12 @@
  */
 package ai.individual;
 
+import java.util.ArrayList;
 import java.util.Map;
 
 import ai.npc.AbstractNpcAI;
 
 import com.l2jserver.gameserver.ai.CtrlIntention;
-import com.l2jserver.gameserver.datatables.SpawnTable;
-import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Npc;
@@ -45,8 +44,7 @@ public final class Anais extends AbstractNpcAI
 	// Skill
 	private static SkillHolder DIVINE_NOVA = new SkillHolder(6326, 1);
 	// Instances
-	private final L2Npc[] _divineBurners = new L2Npc[4];
-	private L2Npc _anais = null;
+	ArrayList<L2Npc> _divineBurners = new ArrayList<>(4);
 	private L2PcInstance _nextTarget = null;
 	private L2Npc _current = null;
 	private int _pot = 0;
@@ -55,26 +53,27 @@ public final class Anais extends AbstractNpcAI
 	{
 		super(Anais.class.getSimpleName(), "ai/individual");
 		addAttackId(ANAIS);
+		addSpawnId(DIVINE_BURNER);
 		addKillId(GRAIL_WARD);
 	}
 	
-	private void burnerOnAttack(int pot)
+	private void burnerOnAttack(int pot, L2Npc anais)
 	{
-		L2Npc npc = _divineBurners[pot];
+		L2Npc npc = _divineBurners.get(pot);
 		npc.setDisplayEffect(1);
 		npc.setIsRunning(false);
 		if (pot < 4)
 		{
 			_current = npc;
-			QuestTimer checkAround = getQuestTimer("CHECK", _anais, null);
+			QuestTimer checkAround = getQuestTimer("CHECK", anais, null);
 			if (checkAround == null) // || !checkAround.getIsActive()
 			{
-				startQuestTimer("CHECK", 3000, _anais, null);
+				startQuestTimer("CHECK", 3000, anais, null);
 			}
 		}
 		else
 		{
-			cancelQuestTimer("CHECK", _anais, null);
+			cancelQuestTimer("CHECK", anais, null);
 		}
 	}
 	
@@ -90,14 +89,14 @@ public final class Anais extends AbstractNpcAI
 				}
 				if ((_current != null) || (_pot < 4))
 				{
-					Map<Integer, L2PcInstance> players = _anais.getKnownList().getKnownPlayers();
+					Map<Integer, L2PcInstance> players = npc.getKnownList().getKnownPlayers();
 					L2PcInstance target = players.get(getRandom(players.size() - 1));
 					_nextTarget = target;
 					if (_nextTarget == null)
 					{
-						_nextTarget = (L2PcInstance) _anais.getTarget();
+						_nextTarget = (L2PcInstance) npc.getTarget();
 					}
-					L2Npc b = _divineBurners[_pot];
+					L2Npc b = _divineBurners.get(_pot);
 					_pot = _pot + 1;
 					b.setDisplayEffect(1);
 					b.setIsRunning(false);
@@ -145,19 +144,19 @@ public final class Anais extends AbstractNpcAI
 	{
 		if (_pot == 0)
 		{
-			burnerOnAttack(0);
+			burnerOnAttack(0, npc);
 		}
 		else if ((npc.getCurrentHp() <= (npc.getMaxRecoverableHp() * 0.75)) && (_pot == 1))
 		{
-			burnerOnAttack(1);
+			burnerOnAttack(1, npc);
 		}
 		else if ((npc.getCurrentHp() <= (npc.getMaxRecoverableHp() * 0.5)) && (_pot == 2))
 		{
-			burnerOnAttack(2);
+			burnerOnAttack(2, npc);
 		}
 		else if ((npc.getCurrentHp() <= (npc.getMaxRecoverableHp() * 0.25)) && (_pot == 3))
 		{
-			burnerOnAttack(3);
+			burnerOnAttack(3, npc);
 		}
 		return super.onAttack(npc, attacker, damage, isSummon);
 	}
@@ -169,15 +168,7 @@ public final class Anais extends AbstractNpcAI
 	@Override
 	public String onSpawn(L2Npc npc)
 	{
-		if (!npc.isTeleporting())
-		{
-			int i = 0;
-			for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(DIVINE_BURNER))
-			{
-				_divineBurners[i++] = spawn.getLastSpawn();
-			}
-			_anais = SpawnTable.getInstance().getFirstSpawn(ANAIS).getLastSpawn();
-		}
+		_divineBurners.add(npc);
 		return super.onSpawn(npc);
 	}
 	
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/DrChaos.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/DrChaos.java
index 098a0bcbbe..e7b6683a6c 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/DrChaos.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/DrChaos.java
@@ -53,56 +53,65 @@ public final class DrChaos extends Quest
 	@Override
 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
 	{
-		if (event.equalsIgnoreCase("1"))
+		switch (event)
 		{
-			L2Npc machine = null;
-			for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(STRANGE_MACHINE))
+			case "1":
 			{
-				if (spawn != null)
+				L2Npc machine = null;
+				for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(STRANGE_MACHINE))
 				{
-					machine = spawn.getLastSpawn();
+					if (spawn != null)
+					{
+						machine = spawn.getLastSpawn();
+					}
 				}
+				if (machine != null)
+				{
+					npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, machine);
+					machine.broadcastPacket(new SpecialCamera(machine, 1, -200, 15, 10000, 1000, 20000, 0, 0, 0, 0, 0));
+				}
+				else
+				{
+					startQuestTimer("2", 2000, npc, player);
+				}
+				startQuestTimer("3", 10000, npc, player);
+				break;
 			}
-			if (machine != null)
+			case "2":
 			{
-				npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, machine);
-				machine.broadcastPacket(new SpecialCamera(machine, 1, -200, 15, 10000, 1000, 20000, 0, 0, 0, 0, 0));
+				npc.broadcastSocialAction(3);
+				break;
 			}
-			else
+			case "3":
 			{
-				startQuestTimer("2", 2000, npc, player);
+				npc.broadcastPacket(new SpecialCamera(npc, 1, -150, 10, 3000, 1000, 20000, 0, 0, 0, 0, 0));
+				startQuestTimer("4", 2500, npc, player);
+				break;
 			}
-			startQuestTimer("3", 10000, npc, player);
-		}
-		else if (event.equalsIgnoreCase("2"))
-		{
-			npc.broadcastSocialAction(3);
-		}
-		else if (event.equalsIgnoreCase("3"))
-		{
-			npc.broadcastPacket(new SpecialCamera(npc, 1, -150, 10, 3000, 1000, 20000, 0, 0, 0, 0, 0));
-			startQuestTimer("4", 2500, npc, player);
-		}
-		else if (event.equalsIgnoreCase("4"))
-		{
-			npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new Location(96055, -110759, -3312, 0));
-			startQuestTimer("5", 2000, npc, player);
-		}
-		else if (event.equalsIgnoreCase("5"))
-		{
-			player.teleToLocation(PLAYER_TELEPORT);
-			npc.teleToLocation(NPC_LOCATION);
-			if (!_IsGolemSpawned)
+			case "4":
 			{
-				L2Npc golem = addSpawn(CHAOS_GOLEM, 94640, -112496, -3336, 0, false, 0);
-				_IsGolemSpawned = true;
-				startQuestTimer("6", 1000, golem, player);
-				player.sendPacket(new PlaySound(1, "Rm03_A", 0, 0, 0, 0, 0));
+				npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new Location(96055, -110759, -3312, 0));
+				startQuestTimer("5", 2000, npc, player);
+				break;
+			}
+			case "5":
+			{
+				player.teleToLocation(PLAYER_TELEPORT);
+				npc.teleToLocation(NPC_LOCATION);
+				if (!_IsGolemSpawned)
+				{
+					L2Npc golem = addSpawn(CHAOS_GOLEM, 94640, -112496, -3336, 0, false, 0);
+					_IsGolemSpawned = true;
+					startQuestTimer("6", 1000, golem, player);
+					player.sendPacket(new PlaySound(1, "Rm03_A", 0, 0, 0, 0, 0));
+				}
+				break;
+			}
+			case "6":
+			{
+				npc.broadcastPacket(new SpecialCamera(npc, 30, -200, 20, 6000, 700, 8000, 0, 0, 0, 0, 0));
+				break;
 			}
-		}
-		else if (event.equalsIgnoreCase("6"))
-		{
-			npc.broadcastPacket(new SpecialCamera(npc, 30, -200, 20, 6000, 700, 8000, 0, 0, 0, 0, 0));
 		}
 		return super.onAdvEvent(event, npc, player);
 	}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/EvasGiftBox.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/EvasGiftBox.java
index 28b76b3349..697153fb22 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/EvasGiftBox.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/EvasGiftBox.java
@@ -20,8 +20,6 @@ package ai.individual;
 
 import ai.npc.AbstractNpcAI;
 
-import com.l2jserver.gameserver.datatables.SpawnTable;
-import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -46,11 +44,6 @@ public final class EvasGiftBox extends AbstractNpcAI
 		super(EvasGiftBox.class.getSimpleName(), "ai/individual");
 		addKillId(BOX);
 		addSpawnId(BOX);
-		
-		for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(BOX))
-		{
-			onSpawn(spawn.getLastSpawn());
-		}
 	}
 	
 	@Override
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/GraveRobbers.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/GraveRobbers.java
index 977cb3d364..16f05d2e22 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/GraveRobbers.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/GraveRobbers.java
@@ -20,13 +20,9 @@ package ai.individual;
 
 import ai.npc.AbstractNpcAI;
 
-import com.l2jserver.gameserver.datatables.SpawnTable;
-import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
-import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
 import com.l2jserver.gameserver.model.holders.MinionHolder;
-import com.l2jserver.util.Rnd;
 
 /**
  * Grove Robber's AI.<br>
@@ -45,47 +41,30 @@ public final class GraveRobbers extends AbstractNpcAI
 	{
 		super(GraveRobbers.class.getSimpleName(), "ai/individual");
 		addSpawnId(GRAVE_ROBBER_SUMMONER, GRAVE_ROBBER_MEGICIAN);
-		
-		for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(GRAVE_ROBBER_MEGICIAN))
-		{
-			onSpawn(spawn.getLastSpawn());
-		}
 	}
 	
 	@Override
 	public String onSpawn(L2Npc npc)
 	{
-		if (npc instanceof L2MonsterInstance)
+		if (getRandom(2) == 0)
 		{
-			if (!((L2MonsterInstance) npc).hasMinions())
-			{
-				L2NpcTemplate template = npc.getTemplate();
-				
-				if (Rnd.get(2) == 0)
-				{
-					if (template.getParameters().getMinionList("Privates1") != null)
-					{
-						for (MinionHolder is : template.getParameters().getMinionList("Privates1"))
-						{
-							addMinion((L2MonsterInstance) npc, is.getId());
-						}
-					}
-				}
-				else
-				{
-					if (template.getParameters().getMinionList("Privates2") != null)
-					{
-						for (MinionHolder is : template.getParameters().getMinionList("Privates2"))
-						{
-							addMinion((L2MonsterInstance) npc, is.getId());
-						}
-					}
-				}
-			}
+			spawnMinions(npc, "Privates1");
+		}
+		else
+		{
+			spawnMinions(npc, "Privates2");
 		}
 		return super.onSpawn(npc);
 	}
 	
+	private void spawnMinions(final L2Npc npc, final String spawnName)
+	{
+		for (MinionHolder is : npc.getTemplate().getParameters().getMinionList(spawnName))
+		{
+			addMinion((L2MonsterInstance) npc, is.getId());
+		}
+	}
+	
 	public static void main(String[] args)
 	{
 		new GraveRobbers();
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/RagnaOrcCommander.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/RagnaOrcCommander.java
index 5546e67e44..99291385a7 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/RagnaOrcCommander.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/RagnaOrcCommander.java
@@ -20,14 +20,9 @@ package ai.individual;
 
 import ai.npc.AbstractNpcAI;
 
-import com.l2jserver.gameserver.datatables.NpcData;
-import com.l2jserver.gameserver.datatables.SpawnTable;
-import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
-import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
 import com.l2jserver.gameserver.model.holders.MinionHolder;
-import com.l2jserver.util.Rnd;
 
 /**
  * Ragna Orc Commander AI.
@@ -41,56 +36,31 @@ public final class RagnaOrcCommander extends AbstractNpcAI
 	{
 		super(RagnaOrcCommander.class.getSimpleName(), "ai/individual");
 		addSpawnId(RAGNA_ORC_COMMANDER);
-		
-		for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(RAGNA_ORC_COMMANDER))
-		{
-			onSpawn(spawn.getLastSpawn());
-		}
 	}
 	
 	@Override
 	public String onSpawn(L2Npc npc)
 	{
-		if (npc instanceof L2MonsterInstance)
+		spawnMinions(npc, "Privates1");
+		if (getRandom(100) < 50)
 		{
-			L2MonsterInstance monster = (L2MonsterInstance) npc;
-			if (!monster.hasMinions())
-			{
-				L2NpcTemplate template = NpcData.getInstance().getTemplate(RAGNA_ORC_COMMANDER);
-				
-				if (template.getParameters().getMinionList("Privates1") != null)
-				{
-					for (MinionHolder is : template.getParameters().getMinionList("Privates1"))
-					{
-						addMinion((L2MonsterInstance) npc, is.getId());
-					}
-				}
-				
-				if (Rnd.get(100) < 50)
-				{
-					if (template.getParameters().getMinionList("Privates2") != null)
-					{
-						for (MinionHolder is : template.getParameters().getMinionList("Privates1"))
-						{
-							addMinion((L2MonsterInstance) npc, is.getId());
-						}
-					}
-				}
-				else
-				{
-					if (template.getParameters().getMinionList("Privates3") != null)
-					{
-						for (MinionHolder is : template.getParameters().getMinionList("Privates1"))
-						{
-							addMinion((L2MonsterInstance) npc, is.getId());
-						}
-					}
-				}
-			}
+			spawnMinions(npc, "Privates2");
+		}
+		else
+		{
+			spawnMinions(npc, "Privates3");
 		}
 		return super.onSpawn(npc);
 	}
 	
+	private void spawnMinions(final L2Npc npc, final String spawnName)
+	{
+		for (MinionHolder is : npc.getTemplate().getParameters().getMinionList(spawnName))
+		{
+			addMinion((L2MonsterInstance) npc, is.getId());
+		}
+	}
+	
 	public static void main(String[] args)
 	{
 		new RagnaOrcCommander();
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/RagnaOrcHero.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/RagnaOrcHero.java
index 1b85422742..0da58ba149 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/RagnaOrcHero.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/RagnaOrcHero.java
@@ -20,14 +20,9 @@ package ai.individual;
 
 import ai.npc.AbstractNpcAI;
 
-import com.l2jserver.gameserver.datatables.NpcData;
-import com.l2jserver.gameserver.datatables.SpawnTable;
-import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
-import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
 import com.l2jserver.gameserver.model.holders.MinionHolder;
-import com.l2jserver.util.Rnd;
 
 /**
  * Ragna Orc Hero AI.
@@ -41,50 +36,30 @@ public final class RagnaOrcHero extends AbstractNpcAI
 	{
 		super(RagnaOrcHero.class.getSimpleName(), "ai/individual");
 		addSpawnId(RAGNA_ORC_HERO);
-		
-		for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(RAGNA_ORC_HERO))
-		{
-			onSpawn(spawn.getLastSpawn());
-		}
 	}
 	
 	@Override
 	public String onSpawn(L2Npc npc)
 	{
-		if (npc instanceof L2MonsterInstance)
+		if (getRandom(100) < 70)
 		{
-			L2MonsterInstance monster = (L2MonsterInstance) npc;
-			
-			if (!monster.hasMinions())
-			{
-				L2NpcTemplate template = NpcData.getInstance().getTemplate(RAGNA_ORC_HERO);
-				
-				if (Rnd.get(100) < 70)
-				{
-					if (template.getParameters().getMinionList("Privates1") != null)
-					{
-						for (MinionHolder is : template.getParameters().getMinionList("Privates1"))
-						{
-							addMinion((L2MonsterInstance) npc, is.getId());
-						}
-					}
-				}
-				else
-				{
-					if (template.getParameters().getMinionList("Privates2") != null)
-					{
-						for (MinionHolder is : template.getParameters().getMinionList("Privates2"))
-						{
-							addMinion((L2MonsterInstance) npc, is.getId());
-						}
-					}
-				}
-			}
+			spawnMinions(npc, "Privates1");
+		}
+		else
+		{
+			spawnMinions(npc, "Privates2");
 		}
-		
 		return super.onSpawn(npc);
 	}
 	
+	private void spawnMinions(final L2Npc npc, final String spawnName)
+	{
+		for (MinionHolder is : npc.getTemplate().getParameters().getMinionList(spawnName))
+		{
+			addMinion((L2MonsterInstance) npc, is.getId());
+		}
+	}
+	
 	public static void main(String[] args)
 	{
 		new RagnaOrcHero();
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/RagnaOrcSeer.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/RagnaOrcSeer.java
index 4e142958b4..ed1e072967 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/RagnaOrcSeer.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/RagnaOrcSeer.java
@@ -20,14 +20,9 @@ package ai.individual;
 
 import ai.npc.AbstractNpcAI;
 
-import com.l2jserver.gameserver.datatables.NpcData;
-import com.l2jserver.gameserver.datatables.SpawnTable;
-import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
-import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
 import com.l2jserver.gameserver.model.holders.MinionHolder;
-import com.l2jserver.util.Rnd;
 
 /**
  * Ragna Orc Seer AI.
@@ -41,48 +36,31 @@ public final class RagnaOrcSeer extends AbstractNpcAI
 	{
 		super(RagnaOrcSeer.class.getSimpleName(), "ai/individual");
 		addSpawnId(RAGNA_ORC_SEER);
-		
-		for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(RAGNA_ORC_SEER))
-		{
-			onSpawn(spawn.getLastSpawn());
-		}
 	}
 	
 	@Override
 	public String onSpawn(L2Npc npc)
 	{
-		if (npc instanceof L2MonsterInstance)
+		
+		if (getRandom(100) < 50)
+		{
+			spawnMinions(npc, "Privates1");
+		}
+		else
 		{
-			L2MonsterInstance monster = (L2MonsterInstance) npc;
-			if (!monster.hasMinions())
-			{
-				L2NpcTemplate template = NpcData.getInstance().getTemplate(RAGNA_ORC_SEER);
-				
-				if (Rnd.get() < 50)
-				{
-					if (template.getParameters().getMinionList("Privates1") != null)
-					{
-						for (MinionHolder is : template.getParameters().getMinionList("Privates1"))
-						{
-							addMinion((L2MonsterInstance) npc, is.getId());
-						}
-					}
-				}
-				else
-				{
-					if (template.getParameters().getMinionList("Privates2") != null)
-					{
-						for (MinionHolder is : template.getParameters().getMinionList("Privates2"))
-						{
-							addMinion((L2MonsterInstance) npc, is.getId());
-						}
-					}
-				}
-			}
+			spawnMinions(npc, "Privates2");
 		}
 		return super.onSpawn(npc);
 	}
 	
+	private void spawnMinions(final L2Npc npc, final String spawnName)
+	{
+		for (MinionHolder is : npc.getTemplate().getParameters().getMinionList(spawnName))
+		{
+			addMinion((L2MonsterInstance) npc, is.getId());
+		}
+	}
+	
 	public static void main(String[] args)
 	{
 		new RagnaOrcSeer();
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Venom/Venom.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Venom/Venom.java
index ae0af834aa..e2e116e497 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Venom/Venom.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Venom/Venom.java
@@ -24,7 +24,6 @@ import java.util.List;
 import ai.npc.AbstractNpcAI;
 
 import com.l2jserver.gameserver.ai.CtrlIntention;
-import com.l2jserver.gameserver.datatables.SpawnTable;
 import com.l2jserver.gameserver.instancemanager.CastleManager;
 import com.l2jserver.gameserver.instancemanager.GlobalVariablesManager;
 import com.l2jserver.gameserver.model.Location;
@@ -106,7 +105,7 @@ public final class Venom extends AbstractNpcAI
 		addStartNpc(DUNGEON_KEEPER, TELEPORT_CUBE);
 		addFirstTalkId(DUNGEON_KEEPER, TELEPORT_CUBE);
 		addTalkId(DUNGEON_KEEPER, TELEPORT_CUBE);
-		addSpawnId(VENOM);
+		addSpawnId(VENOM, DUNGEON_KEEPER);
 		addSpellFinishedId(VENOM);
 		addAttackId(VENOM);
 		addKillId(VENOM);
@@ -261,32 +260,38 @@ public final class Venom extends AbstractNpcAI
 	@Override
 	public final String onSpawn(L2Npc npc)
 	{
-		if (!npc.isTeleporting())
+		switch (npc.getId())
 		{
-			if ((_massymore == null) || (_venom == null))
+			case DUNGEON_KEEPER:
+			{
+				_massymore = npc;
+				break;
+			}
+			case VENOM:
 			{
-				_massymore = SpawnTable.getInstance().getFirstSpawn(DUNGEON_KEEPER).getLastSpawn();
-				_venom = SpawnTable.getInstance().getFirstSpawn(VENOM).getLastSpawn();
+				_venom = npc;
 				
 				_loc = _venom.getLocation();
 				_venom.disableSkill(VENOM_TELEPORT.getSkill(), -1);
 				_venom.disableSkill(RANGE_TELEPORT.getSkill(), -1);
 				_venom.doRevive();
+				broadcastNpcSay(npc, Say2.NPC_SHOUT, NpcStringId.WHO_DARES_TO_COVET_THE_THRONE_OF_OUR_CASTLE_LEAVE_IMMEDIATELY_OR_YOU_WILL_PAY_THE_PRICE_OF_YOUR_AUDACITY_WITH_YOUR_VERY_OWN_BLOOD);
 				((L2Attackable) _venom).setCanReturnToSpawnPoint(false);
 				if (checkStatus() == DEAD)
 				{
 					_venom.deleteMe();
 				}
+				break;
 			}
-			if (checkStatus() == DEAD)
-			{
-				npc.deleteMe();
-			}
-			else
-			{
-				npc.doRevive();
-				broadcastNpcSay(npc, Say2.NPC_SHOUT, NpcStringId.WHO_DARES_TO_COVET_THE_THRONE_OF_OUR_CASTLE_LEAVE_IMMEDIATELY_OR_YOU_WILL_PAY_THE_PRICE_OF_YOUR_AUDACITY_WITH_YOUR_VERY_OWN_BLOOD);
-			}
+		}
+		if (checkStatus() == DEAD)
+		{
+			npc.deleteMe();
+		}
+		else
+		{
+			npc.doRevive();
+			
 		}
 		return super.onSpawn(npc);
 	}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Minigame/Minigame.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Minigame/Minigame.java
index 872b04d417..4c73ca91bb 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Minigame/Minigame.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Minigame/Minigame.java
@@ -18,6 +18,8 @@
  */
 package ai.npc.Minigame;
 
+import java.util.ArrayList;
+
 import ai.npc.AbstractNpcAI;
 
 import com.l2jserver.gameserver.datatables.SpawnTable;
@@ -56,7 +58,7 @@ public final class Minigame extends AbstractNpcAI
 	private static final int TIMER_INTERVAL = 3;
 	private static final int MAX_ATTEMPTS = 3;
 	
-	private final MinigameRoom _rooms[] = new MinigameRoom[2];
+	private final ArrayList<MinigameRoom> _rooms = new ArrayList<>(2);
 	
 	private Minigame()
 	{
@@ -64,13 +66,7 @@ public final class Minigame extends AbstractNpcAI
 		addStartNpc(SUMIEL);
 		addFirstTalkId(SUMIEL);
 		addTalkId(SUMIEL);
-		addSpawnId(TREASURE_BOX);
-		
-		int i = 0;
-		for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(SUMIEL))
-		{
-			_rooms[i++] = initRoom(spawn.getLastSpawn());
-		}
+		addSpawnId(SUMIEL, TREASURE_BOX);
 	}
 	
 	@Override
@@ -246,8 +242,20 @@ public final class Minigame extends AbstractNpcAI
 	@Override
 	public String onSpawn(L2Npc npc)
 	{
-		npc.disableCoreAI(true);
-		startQuestTimer("afterthat", 180000, npc, null);
+		switch (npc.getId())
+		{
+			case SUMIEL:
+			{
+				_rooms.add(initRoom(npc));
+				break;
+			}
+			case TREASURE_BOX:
+			{
+				npc.disableCoreAI(true);
+				startQuestTimer("afterthat", 180000, npc, null);
+				break;
+			}
+		}
 		return super.onSpawn(npc);
 	}
 	
@@ -342,7 +350,14 @@ public final class Minigame extends AbstractNpcAI
 	 */
 	private MinigameRoom getRoomByManager(L2Npc manager)
 	{
-		return (_rooms[0].getManager() == manager) ? _rooms[0] : _rooms[1];
+		for (MinigameRoom room : _rooms)
+		{
+			if (room.getManager() == manager)
+			{
+				return room;
+			}
+		}
+		return null;
 	}
 	
 	/**
@@ -352,7 +367,14 @@ public final class Minigame extends AbstractNpcAI
 	 */
 	private MinigameRoom getRoomByParticipant(L2PcInstance participant)
 	{
-		return (_rooms[0].getParticipant() == participant) ? _rooms[0] : _rooms[1];
+		for (MinigameRoom room : _rooms)
+		{
+			if (room.getParticipant() == participant)
+			{
+				return room;
+			}
+		}
+		return null;
 	}
 	
 	/**
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/TownPets/TownPets.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/TownPets/TownPets.java
index b916e88675..c4d21ec8e6 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/TownPets/TownPets.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/TownPets/TownPets.java
@@ -22,8 +22,6 @@ import ai.npc.AbstractNpcAI;
 
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.ai.CtrlIntention;
-import com.l2jserver.gameserver.datatables.SpawnTable;
-import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -54,14 +52,10 @@ public final class TownPets extends AbstractNpcAI
 	private TownPets()
 	{
 		super(TownPets.class.getSimpleName(), "ai/npc");
-		addSpawnId(PETS);
 		
-		for (int npcId : PETS)
+		if (Config.ALLOW_PET_WALKERS)
 		{
-			for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(npcId))
-			{
-				onSpawn(spawn.getLastSpawn());
-			}
+			addSpawnId(PETS);
 		}
 	}
 	
@@ -82,10 +76,7 @@ public final class TownPets extends AbstractNpcAI
 	@Override
 	public String onSpawn(L2Npc npc)
 	{
-		if (Config.ALLOW_PET_WALKERS)
-		{
-			startQuestTimer("move", 3000, npc, null);
-		}
+		startQuestTimer("move", 3000, npc, null);
 		return super.onSpawn(npc);
 	}
 	
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/gracia/AI/NPC/GeneralDilios/GeneralDilios.java b/L2J_DataPack_BETA/dist/game/data/scripts/gracia/AI/NPC/GeneralDilios/GeneralDilios.java
index e5a652ace1..b4b09bf073 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/gracia/AI/NPC/GeneralDilios/GeneralDilios.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/gracia/AI/NPC/GeneralDilios/GeneralDilios.java
@@ -18,11 +18,11 @@
  */
 package gracia.AI.NPC.GeneralDilios;
 
+import java.util.Collections;
 import java.util.Set;
 
 import ai.npc.AbstractNpcAI;
 
-import com.l2jserver.gameserver.datatables.SpawnTable;
 import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -39,8 +39,8 @@ public final class GeneralDilios extends AbstractNpcAI
 	private static final int GENERAL_ID = 32549;
 	private static final int GUARD_ID = 32619;
 	
-	private L2Npc _general;
-	private final Set<L2Spawn> _guards;
+	private L2Npc _general = null;
+	private final Set<L2Spawn> _guards = Collections.emptySet();
 	
 	private static final NpcStringId[] diliosText =
 	{
@@ -57,14 +57,6 @@ public final class GeneralDilios extends AbstractNpcAI
 	public GeneralDilios()
 	{
 		super(GeneralDilios.class.getSimpleName(), "gracia/AI/NPC");
-		_general = SpawnTable.getInstance().getFirstSpawn(GENERAL_ID).getLastSpawn();
-		_guards = SpawnTable.getInstance().getSpawns(GUARD_ID);
-		if ((_general == null) || _guards.isEmpty())
-		{
-			_log.warning(GeneralDilios.class.getSimpleName() + ": Cannot find NPCs!");
-			return;
-		}
-		startQuestTimer("command_0", 60000, null, null);
 	}
 	
 	@Override
@@ -99,4 +91,19 @@ public final class GeneralDilios extends AbstractNpcAI
 		}
 		return super.onAdvEvent(event, npc, player);
 	}
+	
+	@Override
+	public String onSpawn(L2Npc npc)
+	{
+		if (npc.getId() == GENERAL_ID)
+		{
+			startQuestTimer("command_0", 60000, null, null);
+			_general = npc;
+		}
+		else if (npc.getId() == GUARD_ID)
+		{
+			_guards.add(npc.getSpawn());
+		}
+		return super.onSpawn(npc);
+	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/gracia/AI/NPC/ZealotOfShilen/ZealotOfShilen.java b/L2J_DataPack_BETA/dist/game/data/scripts/gracia/AI/NPC/ZealotOfShilen/ZealotOfShilen.java
index 40d08e952a..10f33da820 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/gracia/AI/NPC/ZealotOfShilen/ZealotOfShilen.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/gracia/AI/NPC/ZealotOfShilen/ZealotOfShilen.java
@@ -21,8 +21,6 @@ package gracia.AI.NPC.ZealotOfShilen;
 import ai.npc.AbstractNpcAI;
 
 import com.l2jserver.gameserver.ai.CtrlIntention;
-import com.l2jserver.gameserver.datatables.SpawnTable;
-import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Npc;
@@ -46,27 +44,19 @@ public final class ZealotOfShilen extends AbstractNpcAI
 	{
 		super(ZealotOfShilen.class.getSimpleName(), "gracia/AI/NPC");
 		addSpawnId(ZEALOT);
+		addSpawnId(GUARDS);
 		addFirstTalkId(GUARDS);
-		
-		for (int npcId : GUARDS)
-		{
-			for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(npcId))
-			{
-				L2Npc guard = spawn.getLastSpawn();
-				guard.setIsInvul(true);
-				((L2Attackable) guard).setCanReturnToSpawnPoint(false);
-				startQuestTimer("WATCHING", 10000, guard, null, true);
-			}
-		}
-		for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(ZEALOT))
-		{
-			spawn.getLastSpawn().setIsNoRndWalk(true);
-		}
 	}
 	
 	@Override
 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
 	{
+		if (npc == null)
+		{
+			return null;
+		}
+		
+		startQuestTimer("WATCHING", 10000, npc, null, true);
 		if (event.equalsIgnoreCase("WATCHING") && !npc.isAttackingNow())
 		{
 			for (L2Character character : npc.getKnownList().getKnownCharacters())
@@ -91,7 +81,16 @@ public final class ZealotOfShilen extends AbstractNpcAI
 	@Override
 	public String onSpawn(L2Npc npc)
 	{
-		npc.setIsNoRndWalk(true);
+		if (npc.getId() == ZEALOT)
+		{
+			npc.setIsNoRndWalk(true);
+		}
+		else
+		{
+			npc.setIsInvul(true);
+			((L2Attackable) npc).setCanReturnToSpawnPoint(false);
+			startQuestTimer("WATCHING", 10000, npc, null, true);
+		}
 		return super.onSpawn(npc);
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/gracia/AI/SeedOfAnnihilation/SeedOfAnnihilation.java b/L2J_DataPack_BETA/dist/game/data/scripts/gracia/AI/SeedOfAnnihilation/SeedOfAnnihilation.java
index c8893b9a19..57bac3d947 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/gracia/AI/SeedOfAnnihilation/SeedOfAnnihilation.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/gracia/AI/SeedOfAnnihilation/SeedOfAnnihilation.java
@@ -25,9 +25,7 @@ import javolution.util.FastMap;
 import ai.npc.AbstractNpcAI;
 
 import com.l2jserver.gameserver.datatables.SkillData;
-import com.l2jserver.gameserver.datatables.SpawnTable;
 import com.l2jserver.gameserver.instancemanager.ZoneManager;
-import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Npc;
@@ -96,7 +94,6 @@ public class SeedOfAnnihilation extends AbstractNpcAI
 		}
 		addStartNpc(32739);
 		addTalkId(32739);
-		initialMinionsSpawn();
 		startEffectZonesControl();
 	}
 	
@@ -278,25 +275,6 @@ public class SeedOfAnnihilation extends AbstractNpcAI
 		startQuestTimer("ChangeSeedsStatus", _seedsNextStatusChange - System.currentTimeMillis(), null, null);
 	}
 	
-	private void initialMinionsSpawn()
-	{
-		L2MonsterInstance mob;
-		for (SeedRegion sr : _regionsData)
-		{
-			for (int npcId : sr.elite_mob_ids)
-			{
-				for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(npcId))
-				{
-					mob = (L2MonsterInstance) spawn.getLastSpawn();
-					if (mob != null)
-					{
-						spawnGroupOfMinion(mob, sr.minion_lists[getRandom(sr.minion_lists.length)]);
-					}
-				}
-			}
-		}
-	}
-	
 	private void spawnGroupOfMinion(L2MonsterInstance npc, int[] mobIds)
 	{
 		for (int mobId : mobIds)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminAdmin.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminAdmin.java
index 4aac400c4a..38d4c4a341 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminAdmin.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminAdmin.java
@@ -26,6 +26,7 @@ import javolution.text.TextBuilder;
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.datatables.AdminTable;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
+import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.Hero;
 import com.l2jserver.gameserver.model.olympiad.Olympiad;
@@ -70,6 +71,9 @@ public class AdminAdmin implements IAdminCommandHandler
 	@Override
 	public boolean useAdminCommand(String command, L2PcInstance activeChar)
 	{
+		L2MonsterInstance mon = (L2MonsterInstance) activeChar.getTarget();
+		
+		mon.teleToLocation(activeChar.getLocation());
 		if (command.startsWith("admin_admin"))
 		{
 			showMainPage(activeChar, command);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/AI/Amaskari.java b/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/AI/Amaskari.java
index fa8f199a19..d3473d109d 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/AI/Amaskari.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/AI/Amaskari.java
@@ -175,10 +175,7 @@ public final class Amaskari extends AbstractNpcAI
 	@Override
 	public final String onSpawn(L2Npc npc)
 	{
-		if (!npc.isTeleporting())
-		{
-			startQuestTimer("onspawn_msg", (getRandom(3) + 1) * 30000, npc, null);
-		}
+		startQuestTimer("onspawn_msg", (getRandom(3) + 1) * 30000, npc, null);
 		return super.onSpawn(npc);
 	}
 }
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/AI/Chimeras.java b/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/AI/Chimeras.java
index e0712f2efc..87ce358302 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/AI/Chimeras.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/AI/Chimeras.java
@@ -70,7 +70,7 @@ public final class Chimeras extends AbstractNpcAI
 	@Override
 	public final String onSpawn(L2Npc npc)
 	{
-		if ((HellboundEngine.getInstance().getLevel() == 7) && !npc.isTeleporting()) // Have random spawn points only in 7 lvl
+		if (HellboundEngine.getInstance().getLevel() == 7) // Have random spawn points only in 7 lvl
 		{
 			final Location loc = LOCATIONS[getRandom(LOCATIONS.length)];
 			if (!npc.isInsideRadius(loc, 200, false, false))
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/AI/Keltas.java b/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/AI/Keltas.java
index f8d2705c1a..99775950d2 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/AI/Keltas.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/AI/Keltas.java
@@ -179,13 +179,10 @@ public final class Keltas extends AbstractNpcAI
 	@Override
 	public final String onSpawn(L2Npc npc)
 	{
-		if (!npc.isTeleporting())
-		{
-			_spawnedKeltas = (L2MonsterInstance) npc;
-			broadcastNpcSay(_spawnedKeltas, Say2.NPC_SHOUT, NpcStringId.GUYS_SHOW_THEM_OUR_POWER);
-			spawnMinions();
-			startQuestTimer("despawn", 1800000, null, null);
-		}
+		_spawnedKeltas = (L2MonsterInstance) npc;
+		broadcastNpcSay(_spawnedKeltas, Say2.NPC_SHOUT, NpcStringId.GUYS_SHOW_THEM_OUR_POWER);
+		spawnMinions();
+		startQuestTimer("despawn", 1800000, null, null);
 		return super.onSpawn(npc);
 	}
 }
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/AI/NPC/Shadai/Shadai.java b/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/AI/NPC/Shadai/Shadai.java
index 94b8c940bc..245ed350a5 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/AI/NPC/Shadai/Shadai.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/AI/NPC/Shadai/Shadai.java
@@ -72,10 +72,7 @@ public final class Shadai extends AbstractNpcAI
 	@Override
 	public final String onSpawn(L2Npc npc)
 	{
-		if (!npc.isTeleporting())
-		{
-			startQuestTimer("VALIDATE_POS", 60000, npc, null, true);
-		}
+		startQuestTimer("VALIDATE_POS", 60000, npc, null, true);
 		return super.onSpawn(npc);
 	}
 }
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/AI/Typhoon.java b/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/AI/Typhoon.java
index 0ea0afb8e5..94b6082f13 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/AI/Typhoon.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/AI/Typhoon.java
@@ -71,10 +71,7 @@ public final class Typhoon extends AbstractNpcAI
 	@Override
 	public final String onSpawn(L2Npc npc)
 	{
-		if (!npc.isTeleporting())
-		{
-			startQuestTimer("CAST", 5000, npc, null);
-		}
+		startQuestTimer("CAST", 5000, npc, null);
 		return super.onSpawn(npc);
 	}
 }
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/AI/Zones/AnomicFoundry/AnomicFoundry.java b/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/AI/Zones/AnomicFoundry/AnomicFoundry.java
index 93e2be7eab..9558fc0cf7 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/AI/Zones/AnomicFoundry/AnomicFoundry.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/AI/Zones/AnomicFoundry/AnomicFoundry.java
@@ -80,12 +80,9 @@ public final class AnomicFoundry extends AbstractNpcAI
 		super(AnomicFoundry.class.getSimpleName(), "hellbound/AI/Zones");
 		addAggroRangeEnterId(LABORER);
 		addAttackId(LABORER);
-		addKillId(LABORER);
-		addKillId(LESSER_EVIL);
-		addKillId(GREATER_EVIL);
-		addSpawnId(LABORER);
-		addSpawnId(LESSER_EVIL);
-		addSpawnId(GREATER_EVIL);
+		addKillId(LABORER, LESSER_EVIL, GREATER_EVIL);
+		addSpawnId(LABORER, LESSER_EVIL, GREATER_EVIL);
+		addTeleportId(LABORER, LESSER_EVIL, GREATER_EVIL);
 		startQuestTimer("make_spawn_1", respawnTime, null, null);
 	}
 	
@@ -205,40 +202,39 @@ public final class AnomicFoundry extends AbstractNpcAI
 	@Override
 	public final String onSpawn(L2Npc npc)
 	{
-		if (!npc.isTeleporting())
+		SpawnTable.getInstance().addNewSpawn(npc.getSpawn(), false);
+		if (getSpawnGroup(npc) >= 0)
 		{
-			SpawnTable.getInstance().addNewSpawn(npc.getSpawn(), false);
-			if (getSpawnGroup(npc) >= 0)
-			{
-				_spawned[getSpawnGroup(npc)]++;
-			}
-			
-			if (npc.getId() == LABORER)
-			{
-				npc.setIsNoRndWalk(true);
-			}
+			_spawned[getSpawnGroup(npc)]++;
 		}
-		else
+		
+		if (npc.getId() == LABORER)
 		{
-			if ((getSpawnGroup(npc) >= 0) && (getSpawnGroup(npc) <= 2))
-			{
-				_spawned[getSpawnGroup(npc)]--;
-				SpawnTable.getInstance().deleteSpawn(npc.getSpawn(), false);
-				npc.scheduleDespawn(100);
-				if (_spawned[3] < SPAWNS[3][5])
-				{
-					addSpawn(SPAWNS[3][0], SPAWNS[3][1], SPAWNS[3][2], SPAWNS[3][3], SPAWNS[3][4], false, 0, false);
-				}
-			}
-			else if (getSpawnGroup(npc) == 3)
+			npc.setIsNoRndWalk(true);
+		}
+		return super.onSpawn(npc);
+	}
+	
+	@Override
+	protected void onTeleport(L2Npc npc)
+	{
+		if ((getSpawnGroup(npc) >= 0) && (getSpawnGroup(npc) <= 2))
+		{
+			_spawned[getSpawnGroup(npc)]--;
+			SpawnTable.getInstance().deleteSpawn(npc.getSpawn(), false);
+			npc.scheduleDespawn(100);
+			if (_spawned[3] < SPAWNS[3][5])
 			{
-				startQuestTimer("make_spawn_2", respawnTime * 2, null, null);
-				_spawned[3]--;
-				SpawnTable.getInstance().deleteSpawn(npc.getSpawn(), false);
-				npc.scheduleDespawn(100);
+				addSpawn(SPAWNS[3][0], SPAWNS[3][1], SPAWNS[3][2], SPAWNS[3][3], SPAWNS[3][4], false, 0, false);
 			}
 		}
-		return super.onSpawn(npc);
+		else if (getSpawnGroup(npc) == 3)
+		{
+			startQuestTimer("make_spawn_2", respawnTime * 2, null, null);
+			_spawned[3]--;
+			SpawnTable.getInstance().deleteSpawn(npc.getSpawn(), false);
+			npc.scheduleDespawn(100);
+		}
 	}
 	
 	private static int getSpawnGroup(L2Npc npc)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/AI/Zones/TowerOfNaia/TowerOfNaia.java b/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/AI/Zones/TowerOfNaia/TowerOfNaia.java
index 81e681002d..fc18b284b8 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/AI/Zones/TowerOfNaia/TowerOfNaia.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/AI/Zones/TowerOfNaia/TowerOfNaia.java
@@ -760,7 +760,7 @@ public final class TowerOfNaia extends AbstractNpcAI
 	{
 		final int npcId = npc.getId();
 		
-		if ((npcId == MUTATED_ELPY) && !npc.isTeleporting())
+		if (npcId == MUTATED_ELPY)
 		{
 			DoorTable.getInstance().getDoor(18250025).openMe();
 			ZoneManager.getInstance().getZoneById(200100).setEnabled(false);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00457_LostAndFound/Q00457_LostAndFound.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00457_LostAndFound/Q00457_LostAndFound.java
index acb467e0b2..5b7da60d0a 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00457_LostAndFound/Q00457_LostAndFound.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00457_LostAndFound/Q00457_LostAndFound.java
@@ -60,11 +60,10 @@ public final class Q00457_LostAndFound extends Quest
 	{
 		super(457, Q00457_LostAndFound.class.getSimpleName(), "Lost and Found");
 		addStartNpc(GUMIEL);
+		addSpawnId(ESCORT_CHECKER);
 		addFirstTalkId(GUMIEL);
 		addTalkId(GUMIEL);
 		addKillId(SOLINA_CLAN);
-		
-		_escortCheckers = SpawnTable.getInstance().getSpawns(ESCORT_CHECKER);
 	}
 	
 	@Override
@@ -238,6 +237,13 @@ public final class Q00457_LostAndFound extends Quest
 		return htmltext;
 	}
 	
+	@Override
+	public String onSpawn(L2Npc npc)
+	{
+		_escortCheckers = SpawnTable.getInstance().getSpawns(ESCORT_CHECKER);
+		return super.onSpawn(npc);
+	}
+	
 	public void broadcastNpcSay(L2Npc npc, L2PcInstance player, NpcStringId stringId, boolean whisper)
 	{
 		((whisper) ? player : npc).sendPacket(new NpcSay(npc.getObjectId(), ((whisper) ? Say2.TELL : Say2.ALL), npc.getId(), stringId));
-- 
GitLab