From d48c3a4a8e3423b7c2720eab546df1b02de0054a Mon Sep 17 00:00:00 2001
From: xban1x <urban.lavbic@gmail.com>
Date: Sat, 24 Aug 2013 18:38:21 +0000
Subject: [PATCH] BETA: DP-Part for [L6170] 	* Reviewed by: Zoey76,
 UnAfraid, Nos 	* Tested by: zatei

---
 .../ai/group_template/EnergySeeds.java        |  11 +-
 .../ai/group_template/PrisonGuards.java       |   4 +-
 .../data/scripts/ai/individual/Baium.java     |  35 ++--
 .../data/scripts/ai/individual/Beleth.java    |   4 +-
 .../data/scripts/ai/individual/DrChaos.java   |   7 +-
 .../data/scripts/ai/individual/Orfen.java     |   6 +-
 .../data/scripts/ai/individual/QueenAnt.java  |  11 +-
 .../data/scripts/ai/individual/Ranku.java     |   2 +-
 .../data/scripts/ai/individual/Valakas.java   |   9 +-
 .../scripts/ai/individual/Venom/Venom.java    |  18 +-
 .../data/scripts/ai/individual/Zaken.java     |  67 +++---
 .../npc/Teleports/CrumaTower/CrumaTower.java  |   5 +-
 .../ElrokiTeleporters/ElrokiTeleporters.java  |   8 +-
 .../GrandBossTeleporters.java                 |  17 +-
 .../OracleTeleport/OracleTeleport.java        |  20 +-
 .../PaganTeleporters/PaganTeleporters.java    |  24 ++-
 .../SteelCitadelTeleport.java                 |   5 +-
 .../ai/npc/Teleports/Survivor/Survivor.java   |   5 +-
 .../TeleportToFantasy/TeleportToFantasy.java  |   4 +-
 .../TeleportToRaceTrack.java                  |   6 +-
 .../TeleportWithCharm/TeleportWithCharm.java  |   8 +-
 .../ai/npc/Teleports/ToIVortex/ToIVortex.java | 198 ++++--------------
 .../ai/npc/Teleports/Warpgate/Warpgate.java   |   8 +-
 .../RainbowSpringsChateau.java                |  41 +---
 .../admincommandhandlers/AdminEffects.java    |   2 +-
 .../AdminEventEngine.java                     |   4 +-
 .../admincommandhandlers/AdminInstance.java   |   2 +-
 .../admincommandhandlers/AdminMammon.java     |   4 +-
 .../admincommandhandlers/AdminMenu.java       |  21 +-
 .../admincommandhandlers/AdminSpawn.java      |   2 +-
 .../admincommandhandlers/AdminTeleport.java   |  18 +-
 .../handlers/bypasshandlers/Observation.java  |   3 +-
 .../handlers/effecthandlers/CallParty.java    |   2 +-
 .../voicedcommandhandlers/Wedding.java        |  17 +-
 .../scripts/hellbound/Deltuva/Deltuva.java    |   5 +-
 .../data/scripts/hellbound/Quarry/Quarry.java |   2 +-
 .../data/scripts/hellbound/Shadai/Shadai.java |  27 +--
 .../TowerOfInfinitum/TowerOfInfinitum.java    |   4 +-
 .../instances/ChambersOfDelusion/Chamber.java |   4 +-
 .../CrystalCaverns/CrystalCaverns.java        |   4 +-
 .../HellboundTown/HellboundTown.java          |   2 +-
 .../HideoutOfTheDawn/HideoutOfTheDawn.java    |   2 +-
 .../Q10288_SecretMission.java                 |   5 +-
 43 files changed, 264 insertions(+), 389 deletions(-)

diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/EnergySeeds.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/EnergySeeds.java
index a27f27f9de..c89b6f8694 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/EnergySeeds.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/EnergySeeds.java
@@ -82,10 +82,7 @@ public class EnergySeeds extends AbstractNpcAI
 		12240024, 12240025, 12240026, 12240027, 12240028, 12240029, 12240030,
 		12240031
 	};
-	private static final int[] SOD_EXIT_POINT =
-	{
-		-248717, 250260, 4337
-	};
+	private static final Location SOD_EXIT_POINT = new Location(-248717, 250260, 4337);
 	// @formatter:off
 	private static final int SOD_ZONE = 60009;
 	
@@ -213,7 +210,7 @@ public class EnergySeeds extends AbstractNpcAI
 			{
 				if (ch != null)
 				{
-					ch.teleToLocation(SOD_EXIT_POINT[0], SOD_EXIT_POINT[1], SOD_EXIT_POINT[2]);
+					ch.teleToLocation(SOD_EXIT_POINT);
 				}
 			}
 			stopAI(GraciaSeeds.DESTRUCTION);
@@ -237,7 +234,7 @@ public class EnergySeeds extends AbstractNpcAI
 	{
 		if (npc.getId() == TEMPORARY_TELEPORTER)
 		{
-			player.teleToLocation(SOD_EXIT_POINT[0], SOD_EXIT_POINT[1], SOD_EXIT_POINT[2]);
+			player.teleToLocation(SOD_EXIT_POINT);
 		}
 		player.sendPacket(ActionFailed.STATIC_PACKET);
 		return null;
@@ -269,7 +266,7 @@ public class EnergySeeds extends AbstractNpcAI
 				case SOD_ZONE:
 					if (!isSeedActive(GraciaSeeds.DESTRUCTION) && !character.isGM())
 					{
-						character.teleToLocation(SOD_EXIT_POINT[0], SOD_EXIT_POINT[1], SOD_EXIT_POINT[2]);
+						character.teleToLocation(SOD_EXIT_POINT);
 					}
 					break;
 			}
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 e6c6157772..03606bf2d7 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
@@ -120,7 +120,7 @@ public class PrisonGuards extends AbstractNpcAI
 		{
 			if ((npc.getX() != npc.getSpawn().getX()) || (npc.getY() != npc.getSpawn().getY()))
 			{
-				npc.teleToLocation(npc.getSpawn().getX(), npc.getSpawn().getY(), npc.getSpawn().getZ(), npc.getSpawn().getHeading(), false);
+				npc.teleToLocation(npc.getSpawn().getLocation());
 				npc.setIsImmobilized(true);
 			}
 			((L2Attackable) npc).getAggroList().clear();
@@ -171,7 +171,7 @@ public class PrisonGuards extends AbstractNpcAI
 			{
 				if ((npc.getX() != npc.getSpawn().getX()) || (npc.getY() != npc.getSpawn().getY()))
 				{
-					npc.teleToLocation(npc.getSpawn().getX(), npc.getSpawn().getY(), npc.getSpawn().getZ(), npc.getSpawn().getHeading(), false);
+					npc.teleToLocation(npc.getSpawn().getLocation());
 					npc.setIsImmobilized(true);
 				}
 				((L2Attackable) npc).getAggroList().remove(target);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Baium.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Baium.java
index 6aeb785587..587b19ef6a 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Baium.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Baium.java
@@ -79,7 +79,14 @@ public class Baium extends AbstractNpcAI
 		new Location(115168, 17200, 10080, 0),
 		new Location(115792, 16608, 10080, 0)
 	};
-	
+	private static final Location[] TELEPORT_CUBIC_LOCATION = new Location[]
+	{
+		new Location(108784, 16000, -4928),
+		new Location(113824, 10448, -5164),
+		new Location(115488, 22096, -5168),
+	};
+	private static final Location BAIUM_DESPAWN = new Location(116033, 17447, 10104);
+	private static final Location BAIUM_ENTER = new Location(113100, 14500, 10077);
 	// Skills
 	private static final SkillHolder GENERAL_ATTACK = new SkillHolder(4127, 1);
 	private static final SkillHolder WIND_OF_FORCE = new SkillHolder(4128, 1);
@@ -274,7 +281,7 @@ public class Baium extends AbstractNpcAI
 					}
 					else if (!_Zone.isInsideZone(npc))
 					{
-						npc.teleToLocation(116033, 17447, 10104);
+						npc.teleToLocation(BAIUM_DESPAWN);
 					}
 				}
 				break;
@@ -352,7 +359,7 @@ public class Baium extends AbstractNpcAI
 					// allow entry for the player for the next 30 secs (more than enough time for the TP to happen)
 					// Note: this just means 30secs to get in, no limits on how long it takes before we get out.
 					_Zone.allowPlayerEntry(player, 30);
-					player.teleToLocation(113100, 14500, 10077);
+					player.teleToLocation(BAIUM_ENTER);
 				}
 				else
 				{
@@ -362,26 +369,8 @@ public class Baium extends AbstractNpcAI
 			}
 			case TELEPORT_CUBIC:
 			{
-				int x, y, z;
-				switch (getRandom(3))
-				{
-					case 0:
-						x = 108784 + getRandom(100);
-						y = 16000 + getRandom(100);
-						z = -4928;
-						break;
-					case 1:
-						x = 113824 + getRandom(100);
-						y = 10448 + getRandom(100);
-						z = -5164;
-						break;
-					default:
-						x = 115488 + getRandom(100);
-						y = 22096 + getRandom(100);
-						z = -5168;
-						break;
-				}
-				player.teleToLocation(x, y, z);
+				final Location loc = TELEPORT_CUBIC_LOCATION[getRandom(TELEPORT_CUBIC_LOCATION.length)];
+				player.teleToLocation(loc.getX() + getRandom(100), loc.getY() + getRandom(100), loc.getZ());
 				break;
 			}
 		}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Beleth.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Beleth.java
index 9c25d65d02..753e1cfd53 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Beleth.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Beleth.java
@@ -80,6 +80,8 @@ public class Beleth extends AbstractNpcAI
 	private static SkillHolder HORN_OF_RISING = new SkillHolder(5497, 1);
 	private static SkillHolder LIGHTENING = new SkillHolder(5499, 1);
 	
+	protected static final Location BELETH_SPAWN = new Location(16323, 213059, -9357, 49152);
+	
 	private Beleth(String name, String descr)
 	{
 		super(name, descr);
@@ -274,7 +276,7 @@ public class Beleth extends AbstractNpcAI
 						ThreadPoolManager.getInstance().scheduleGeneral(new Spawn(16), 1400);
 						break;
 					case 16:
-						BELETH.teleToLocation(16323, 213059, -9357, 49152, false);
+						BELETH.teleToLocation(BELETH_SPAWN);
 						ThreadPoolManager.getInstance().scheduleGeneral(new Spawn(17), 200);
 						break;
 					case 17:
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 4ba34374a1..6644753390 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
@@ -39,6 +39,9 @@ public class DrChaos extends Quest
 	private static final int CHAOS_GOLEM = 25703;
 	private static boolean _IsGolemSpawned;
 	
+	private static final Location PLAYER_TELEPORT = new Location(94832, -112624, -3304);
+	private static final Location NPC_LOCATION = new Location(-113091, -243942, -15536);
+	
 	private DrChaos(int questId, String name, String descr)
 	{
 		super(questId, name, descr);
@@ -87,8 +90,8 @@ public class DrChaos extends Quest
 		}
 		else if (event.equalsIgnoreCase("5"))
 		{
-			player.teleToLocation(94832, -112624, -3304);
-			npc.teleToLocation(-113091, -243942, -15536);
+			player.teleToLocation(PLAYER_TELEPORT);
+			npc.teleToLocation(NPC_LOCATION);
 			if (!_IsGolemSpawned)
 			{
 				L2Npc golem = addSpawn(CHAOS_GOLEM, 94640, -112496, -3336, 0, false, 0);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Orfen.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Orfen.java
index 30f935ab06..17b4f844c0 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Orfen.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Orfen.java
@@ -213,7 +213,7 @@ public class Orfen extends AbstractNpcAI
 				L2Attackable mob = _Minions.get(i);
 				if (!npc.isInsideRadius(mob, 3000, false, false))
 				{
-					mob.teleToLocation(npc.getX(), npc.getY(), npc.getZ());
+					mob.teleToLocation(npc.getLocation());
 					((L2Attackable) npc).clearAggroList();
 					npc.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE, null, null);
 				}
@@ -251,7 +251,7 @@ public class Orfen extends AbstractNpcAI
 				NpcSay packet = new NpcSay(npc.getObjectId(), Say2.NPC_ALL, npc.getId(), TEXT[getRandom(4)]);
 				packet.addStringParameter(caster.getName().toString());
 				npc.broadcastPacket(packet);
-				originalCaster.teleToLocation(npc.getX(), npc.getY(), npc.getZ());
+				originalCaster.teleToLocation(npc.getLocation());
 				npc.setTarget(originalCaster);
 				npc.doCast(SkillTable.getInstance().getInfo(4064, 1));
 			}
@@ -306,7 +306,7 @@ public class Orfen extends AbstractNpcAI
 				NpcSay packet = new NpcSay(npc.getObjectId(), Say2.NPC_ALL, npcId, TEXT[getRandom(3)]);
 				packet.addStringParameter(attacker.getName().toString());
 				npc.broadcastPacket(packet);
-				attacker.teleToLocation(npc.getX(), npc.getY(), npc.getZ());
+				attacker.teleToLocation(npc.getLocation());
 				npc.setTarget(attacker);
 				npc.doCast(SkillTable.getInstance().getInfo(4064, 1));
 			}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/QueenAnt.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/QueenAnt.java
index 6a0d44b3ef..2eb42e3417 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/QueenAnt.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/QueenAnt.java
@@ -27,6 +27,7 @@ import com.l2jserver.Config;
 import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.datatables.SkillTable;
 import com.l2jserver.gameserver.instancemanager.GrandBossManager;
+import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.StatsSet;
 import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Npc;
@@ -61,6 +62,10 @@ public class QueenAnt extends AbstractNpcAI
 		ROYAL
 	};
 	
+	private static final Location OUST_LOC_1 = new Location(-19480, 187344, -5600);
+	private static final Location OUST_LOC_2 = new Location(-17928, 180912, -5520);
+	private static final Location OUST_LOC_3 = new Location(-23808, 182368, -5600);
+	
 	private static final int QUEEN_X = -21610;
 	private static final int QUEEN_Y = 181594;
 	private static final int QUEEN_Z = -5734;
@@ -132,15 +137,15 @@ public class QueenAnt extends AbstractNpcAI
 		GrandBossManager.getInstance().addBoss(npc);
 		if (getRandom(100) < 33)
 		{
-			_zone.movePlayersTo(-19480, 187344, -5600);
+			_zone.movePlayersTo(OUST_LOC_1);
 		}
 		else if (getRandom(100) < 50)
 		{
-			_zone.movePlayersTo(-17928, 180912, -5520);
+			_zone.movePlayersTo(OUST_LOC_2);
 		}
 		else
 		{
-			_zone.movePlayersTo(-23808, 182368, -5600);
+			_zone.movePlayersTo(OUST_LOC_3);
 		}
 		GrandBossManager.getInstance().addBoss(npc);
 		startQuestTimer("action", 10000, npc, null, true);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Ranku.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Ranku.java
index df054b0b33..b01c85ef6b 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Ranku.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Ranku.java
@@ -102,7 +102,7 @@ public class Ranku extends AbstractNpcAI
 			if ((master != null) && !master.isDead())
 			{
 				L2MonsterInstance minion2 = MinionList.spawnMinion(master, MINION_2);
-				minion2.teleToLocation(npc.getX(), npc.getY(), npc.getZ());
+				minion2.teleToLocation(npc.getLocation());
 			}
 		}
 		else if (npc.getId() == RANKU)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Valakas.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Valakas.java
index f62f2aae49..7cc6883083 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Valakas.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Valakas.java
@@ -104,6 +104,9 @@ public class Valakas extends AbstractNpcAI
 		new Location(215456, -117328, -1392),
 		new Location(213200, -118160, -1424)
 	};
+	private static final Location ATTACKER_REMOVE = new Location(150037, -57255, -2976);
+	private static final Location VALAKAS_LAIR = new Location(212852, -114842, -1632);
+	private static final Location VALAKAS_REGENERATION_LOC = new Location(-105200, -253104, -15264);
 	// Valakas status.
 	private static final byte DORMANT = 0; // Valakas is spawned and no one has entered yet. Entry is unlocked.
 	private static final byte WAITING = 1; // Valakas is spawned and someone has entered, triggering a 30 minute window for additional people to enter. Entry is unlocked.
@@ -195,7 +198,7 @@ public class Valakas extends AbstractNpcAI
 				_timeTracker = System.currentTimeMillis();
 				
 				// Teleport Valakas to his lair.
-				npc.teleToLocation(212852, -114842, -1632);
+				npc.teleToLocation(VALAKAS_LAIR);
 				
 				// Sound + socialAction.
 				for (L2PcInstance plyr : ZONE.getPlayersInside())
@@ -225,7 +228,7 @@ public class Valakas extends AbstractNpcAI
 					if ((_timeTracker + 900000) < System.currentTimeMillis())
 					{
 						npc.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
-						npc.teleToLocation(-105200, -253104, -15264);
+						npc.teleToLocation(VALAKAS_REGENERATION_LOC);
 						
 						GrandBossManager.getInstance().setBossStatus(VALAKAS, DORMANT);
 						npc.setCurrentHpMp(npc.getMaxHp(), npc.getMaxMp());
@@ -398,7 +401,7 @@ public class Valakas extends AbstractNpcAI
 		
 		if (GrandBossManager.getInstance().getBossStatus(VALAKAS) != FIGHTING)
 		{
-			attacker.teleToLocation(150037, -57255, -2976);
+			attacker.teleToLocation(ATTACKER_REMOVE);
 			return null;
 		}
 		
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 087159278b..8976e0abea 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
@@ -85,9 +85,7 @@ public final class Venom extends AbstractNpcAI
 	private L2Npc _venom;
 	private final L2Npc _massymore;
 	
-	private int _venomX;
-	private int _venomY;
-	private int _venomZ;
+	private final Location _loc;
 	
 	private boolean _aggroMode = false;
 	private boolean _prisonIsOpen = false;
@@ -117,9 +115,7 @@ public final class Venom extends AbstractNpcAI
 		
 		_massymore = SpawnTable.getInstance().getFirstSpawn(DUNGEON_KEEPER).getLastSpawn();
 		_venom = SpawnTable.getInstance().getFirstSpawn(VENOM).getLastSpawn();
-		_venomX = _venom.getX();
-		_venomY = _venom.getY();
-		_venomZ = _venom.getZ();
+		_loc = _venom.getLocation();
 		_venom.disableSkill(VENOM_TELEPORT.getSkill(), 0);
 		_venom.disableSkill(RANGE_TELEPORT.getSkill(), 0);
 		_venom.doRevive();
@@ -152,7 +148,7 @@ public final class Venom extends AbstractNpcAI
 			{
 				if (_prisonIsOpen)
 				{
-					talker.teleToLocation(TELEPORT, 0);
+					talker.teleToLocation(TELEPORT);
 				}
 				else
 				{
@@ -181,7 +177,7 @@ public final class Venom extends AbstractNpcAI
 			case "raid_check":
 				if (!npc.isInsideZone(ZoneId.SIEGE) && !npc.isTeleporting())
 				{
-					npc.teleToLocation(new Location(_venomX, _venomY, _venomZ), false);
+					npc.teleToLocation(_loc);
 				}
 				break;
 			case "cube_despawn":
@@ -257,7 +253,7 @@ public final class Venom extends AbstractNpcAI
 		switch (skill.getId())
 		{
 			case 4222:
-				npc.teleToLocation(new Location(_venomX, _venomY, _venomZ), false);
+				npc.teleToLocation(_loc);
 				break;
 			case 4995:
 				teleportTarget(player);
@@ -370,9 +366,7 @@ public final class Venom extends AbstractNpcAI
 				cancelQuestTimer("tower_check", _venom, null);
 				break;
 		}
-		_venomX = _venom.getX();
-		_venomY = _venom.getY();
-		_venomZ = _venom.getZ();
+		_loc.setLocation(_venom.getLocation());
 	}
 	
 	private void teleportTarget(L2PcInstance player)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Zaken.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Zaken.java
index 9f795fbe75..2d46908702 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Zaken.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Zaken.java
@@ -28,6 +28,7 @@ import com.l2jserver.gameserver.datatables.DoorTable;
 import com.l2jserver.gameserver.datatables.SkillTable;
 import com.l2jserver.gameserver.instancemanager.GrandBossManager;
 import com.l2jserver.gameserver.model.L2Object;
+import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.MountType;
 import com.l2jserver.gameserver.model.StatsSet;
 import com.l2jserver.gameserver.model.actor.L2Attackable;
@@ -47,9 +48,7 @@ public class Zaken extends AbstractNpcAI
 {
 	private int _1001 = 0; // used for first cancel of QuestTimer "1001"
 	private int _ai0 = 0; // used for zaken coords updater
-	private int _ai1 = 0; // used for X coord tracking for non-random teleporting in zaken's self teleport skill
-	private int _ai2 = 0; // used for Y coord tracking for non-random teleporting in zaken's self teleport skill
-	private int _ai3 = 0; // used for Z coord tracking for non-random teleporting in zaken's self teleport skill
+	private final Location _loc = new Location(0, 0, 0);
 	private int _ai4 = 0; // used for spawning minions cycles
 	private int _quest0 = 0; // used for teleporting progress
 	private int _quest1 = 0; // used for most hated players progress
@@ -223,9 +222,7 @@ public class Zaken extends AbstractNpcAI
 		
 		npc.broadcastPacket(new PlaySound(1, "BS01_A", 1, npc.getObjectId(), npc.getX(), npc.getY(), npc.getZ()));
 		_ai0 = 0;
-		_ai1 = npc.getX();
-		_ai2 = npc.getY();
-		_ai3 = npc.getZ();
+		_loc.setLocation(npc.getLocation());
 		_quest0 = 0;
 		_quest1 = 0;
 		_quest2 = 3;
@@ -278,9 +275,7 @@ public class Zaken extends AbstractNpcAI
 				{
 					npc.setTarget(npc);
 					npc.doCast(SkillTable.getInstance().getInfo(4224, 1));
-					_ai1 = npc.getX();
-					_ai2 = npc.getY();
-					_ai3 = npc.getZ();
+					_loc.setLocation(npc.getLocation());
 				}
 				if (sk_4227 == 0) // use zaken regeneration
 				{
@@ -293,7 +288,7 @@ public class Zaken extends AbstractNpcAI
 					int i1 = 1;
 					if (((L2Attackable) npc).getMostHated() != null)
 					{
-						if ((((((L2Attackable) npc).getMostHated().getX() - _ai1) * (((L2Attackable) npc).getMostHated().getX() - _ai1)) + ((((L2Attackable) npc).getMostHated().getY() - _ai2) * (((L2Attackable) npc).getMostHated().getY() - _ai2))) > (1500 * 1500))
+						if ((((((L2Attackable) npc).getMostHated().getX() - _loc.getX()) * (((L2Attackable) npc).getMostHated().getX() - _loc.getX())) + ((((L2Attackable) npc).getMostHated().getY() - _loc.getY()) * (((L2Attackable) npc).getMostHated().getY() - _loc.getY()))) > (1500 * 1500))
 						{
 							i0 = 1;
 						}
@@ -311,7 +306,7 @@ public class Zaken extends AbstractNpcAI
 							{
 								i0 = 0;
 							}
-							else if ((((c_quest0.getX() - _ai1) * (c_quest0.getX() - _ai1)) + ((c_quest0.getY() - _ai2) * (c_quest0.getY() - _ai2))) > (1500 * 1500))
+							else if ((((c_quest0.getX() - _loc.getX()) * (c_quest0.getX() - _loc.getX())) + ((c_quest0.getY() - _loc.getY()) * (c_quest0.getY() - _loc.getY()))) > (1500 * 1500))
 							{
 								i0 = 1;
 							}
@@ -330,7 +325,7 @@ public class Zaken extends AbstractNpcAI
 							{
 								i0 = 0;
 							}
-							else if ((((c_quest1.getX() - _ai1) * (c_quest1.getX() - _ai1)) + ((c_quest1.getY() - _ai2) * (c_quest1.getY() - _ai2))) > (1500 * 1500))
+							else if ((((c_quest1.getX() - _loc.getX()) * (c_quest1.getX() - _loc.getX())) + ((c_quest1.getY() - _loc.getY()) * (c_quest1.getY() - _loc.getY()))) > (1500 * 1500))
 							{
 								i0 = 1;
 							}
@@ -349,7 +344,7 @@ public class Zaken extends AbstractNpcAI
 							{
 								i0 = 0;
 							}
-							else if ((((c_quest2.getX() - _ai1) * (c_quest2.getX() - _ai1)) + ((c_quest2.getY() - _ai2) * (c_quest2.getY() - _ai2))) > (1500 * 1500))
+							else if ((((c_quest2.getX() - _loc.getX()) * (c_quest2.getX() - _loc.getX())) + ((c_quest2.getY() - _loc.getY()) * (c_quest2.getY() - _loc.getY()))) > (1500 * 1500))
 							{
 								i0 = 1;
 							}
@@ -368,7 +363,7 @@ public class Zaken extends AbstractNpcAI
 							{
 								i0 = 0;
 							}
-							else if ((((c_quest3.getX() - _ai1) * (c_quest3.getX() - _ai1)) + ((c_quest3.getY() - _ai2) * (c_quest3.getY() - _ai2))) > (1500 * 1500))
+							else if ((((c_quest3.getX() - _loc.getX()) * (c_quest3.getX() - _loc.getX())) + ((c_quest3.getY() - _loc.getY()) * (c_quest3.getY() - _loc.getY()))) > (1500 * 1500))
 							{
 								i0 = 1;
 							}
@@ -387,7 +382,7 @@ public class Zaken extends AbstractNpcAI
 							{
 								i0 = 0;
 							}
-							else if ((((c_quest4.getX() - _ai1) * (c_quest4.getX() - _ai1)) + ((c_quest4.getY() - _ai2) * (c_quest4.getY() - _ai2))) > (1500 * 1500))
+							else if ((((c_quest4.getX() - _loc.getX()) * (c_quest4.getX() - _loc.getX())) + ((c_quest4.getY() - _loc.getY()) * (c_quest4.getY() - _loc.getY()))) > (1500 * 1500))
 							{
 								i0 = 1;
 							}
@@ -404,9 +399,9 @@ public class Zaken extends AbstractNpcAI
 						{
 							_quest0 = 0;
 							int i2 = getRandom(15);
-							_ai1 = Xcoords[i2] + getRandom(650);
-							_ai2 = Ycoords[i2] + getRandom(650);
-							_ai3 = Zcoords[i2];
+							_loc.setX(Xcoords[i2] + getRandom(650));
+							_loc.setY(Ycoords[i2] + getRandom(650));
+							_loc.setZ(Zcoords[i2]);
 							npc.setTarget(npc);
 							npc.doCast(SkillTable.getInstance().getInfo(4222, 1));
 						}
@@ -414,9 +409,7 @@ public class Zaken extends AbstractNpcAI
 				}
 				if ((getRandom(20) < 1) && (_ai0 == 0))
 				{
-					_ai1 = npc.getX();
-					_ai2 = npc.getY();
-					_ai3 = npc.getZ();
+					_loc.setLocation(npc.getLocation());
 				}
 				L2Character c_ai0 = null;
 				if ((npc.getAI().getIntention() == CtrlIntention.AI_INTENTION_ATTACK) && (_quest1 == 0))
@@ -471,9 +464,9 @@ public class Zaken extends AbstractNpcAI
 			if (getRandom(40) < 1)
 			{
 				int i2 = getRandom(15);
-				_ai1 = Xcoords[i2] + getRandom(650);
-				_ai2 = Ycoords[i2] + getRandom(650);
-				_ai3 = Zcoords[i2];
+				_loc.setX(Xcoords[i2] + getRandom(650));
+				_loc.setY(Ycoords[i2] + getRandom(650));
+				_loc.setZ(Zcoords[i2]);
 				npc.setTarget(npc);
 				npc.doCast(SkillTable.getInstance().getInfo(4222, 1));
 			}
@@ -643,9 +636,7 @@ public class Zaken extends AbstractNpcAI
 			if ((npc.getAI().getIntention() == CtrlIntention.AI_INTENTION_IDLE) && (_ai0 == 0) && (damage < 10) && (getRandom((30 * 15)) < 1))// todo - damage missing
 			{
 				_ai0 = 1;
-				_ai1 = caller.getX();
-				_ai2 = caller.getY();
-				_ai3 = caller.getZ();
+				_loc.setLocation(caller.getLocation());
 				startQuestTimer("1002", 300, caller, null);
 			}
 		}
@@ -660,13 +651,13 @@ public class Zaken extends AbstractNpcAI
 			int skillId = skill.getId();
 			if (skillId == 4222)
 			{
-				npc.teleToLocation(_ai1, _ai2, _ai3);
+				npc.teleToLocation(_loc);
 				npc.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
 			}
 			else if (skillId == 4216)
 			{
 				int i1 = getRandom(15);
-				player.teleToLocation(Xcoords[i1] + getRandom(650), Ycoords[i1] + getRandom(650), Zcoords[i1]);
+				player.teleToLocation(new Location(Xcoords[i1] + getRandom(650), Ycoords[i1] + getRandom(650), Zcoords[i1]));
 				((L2Attackable) npc).stopHating(player);
 				L2Character nextTarget = ((L2Attackable) npc).getMostHated();
 				if (nextTarget != null)
@@ -679,7 +670,7 @@ public class Zaken extends AbstractNpcAI
 			{
 				int i0 = 0;
 				int i1 = getRandom(15);
-				player.teleToLocation(Xcoords[i1] + getRandom(650), Ycoords[i1] + getRandom(650), Zcoords[i1]);
+				player.teleToLocation(new Location(Xcoords[i1] + getRandom(650), Ycoords[i1] + getRandom(650), Zcoords[i1]));
 				((L2Attackable) npc).stopHating(player);
 				
 				if ((c_quest0 != null) && (_quest0 > 0) && (c_quest0 != player) && (c_quest0.getZ() > (player.getZ() - 100)) && (c_quest0.getZ() < (player.getZ() + 100)))
@@ -695,7 +686,7 @@ public class Zaken extends AbstractNpcAI
 					if (i0 == 0)
 					{
 						i1 = getRandom(15);
-						c_quest0.teleToLocation(Xcoords[i1] + getRandom(650), Ycoords[i1] + getRandom(650), Zcoords[i1]);
+						c_quest0.teleToLocation(new Location(Xcoords[i1] + getRandom(650), Ycoords[i1] + getRandom(650), Zcoords[i1]));
 						((L2Attackable) npc).stopHating(c_quest0);
 					}
 				}
@@ -712,7 +703,7 @@ public class Zaken extends AbstractNpcAI
 					if (i0 == 0)
 					{
 						i1 = getRandom(15);
-						c_quest1.teleToLocation(Xcoords[i1] + getRandom(650), Ycoords[i1] + getRandom(650), Zcoords[i1]);
+						c_quest1.teleToLocation(new Location(Xcoords[i1] + getRandom(650), Ycoords[i1] + getRandom(650), Zcoords[i1]));
 						((L2Attackable) npc).stopHating(c_quest1);
 					}
 				}
@@ -729,7 +720,7 @@ public class Zaken extends AbstractNpcAI
 					if (i0 == 0)
 					{
 						i1 = getRandom(15);
-						c_quest2.teleToLocation(Xcoords[i1] + getRandom(650), Ycoords[i1] + getRandom(650), Zcoords[i1]);
+						c_quest2.teleToLocation(new Location(Xcoords[i1] + getRandom(650), Ycoords[i1] + getRandom(650), Zcoords[i1]));
 						((L2Attackable) npc).stopHating(c_quest2);
 					}
 				}
@@ -746,7 +737,7 @@ public class Zaken extends AbstractNpcAI
 					if (i0 == 0)
 					{
 						i1 = getRandom(15);
-						c_quest3.teleToLocation(Xcoords[i1] + getRandom(650), Ycoords[i1] + getRandom(650), Zcoords[i1]);
+						c_quest3.teleToLocation(new Location(Xcoords[i1] + getRandom(650), Ycoords[i1] + getRandom(650), Zcoords[i1]));
 						((L2Attackable) npc).stopHating(c_quest3);
 					}
 				}
@@ -763,7 +754,7 @@ public class Zaken extends AbstractNpcAI
 					if (i0 == 0)
 					{
 						i1 = getRandom(15);
-						c_quest4.teleToLocation(Xcoords[i1] + getRandom(650), Ycoords[i1] + getRandom(650), Zcoords[i1]);
+						c_quest4.teleToLocation(new Location(Xcoords[i1] + getRandom(650), Ycoords[i1] + getRandom(650), Zcoords[i1]));
 						((L2Attackable) npc).stopHating(c_quest4);
 					}
 				}
@@ -856,9 +847,9 @@ public class Zaken extends AbstractNpcAI
 			{
 				_quest2 = (_quest2 - 1);
 				int i2 = getRandom(15);
-				_ai1 = Xcoords[i2] + getRandom(650);
-				_ai2 = Ycoords[i2] + getRandom(650);
-				_ai3 = Zcoords[i2];
+				_loc.setX(Xcoords[i2] + getRandom(650));
+				_loc.setY(Ycoords[i2] + getRandom(650));
+				_loc.setZ(Zcoords[i2]);
 				npc.setTarget(npc);
 				npc.doCast(SkillTable.getInstance().getInfo(4222, 1));
 			}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/CrumaTower/CrumaTower.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/CrumaTower/CrumaTower.java
index 058a9354fc..99710bb6dd 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/CrumaTower/CrumaTower.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/CrumaTower/CrumaTower.java
@@ -20,6 +20,7 @@ package ai.npc.Teleports.CrumaTower;
 
 import ai.npc.AbstractNpcAI;
 
+import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 
@@ -31,6 +32,8 @@ public class CrumaTower extends AbstractNpcAI
 {
 	// NPC
 	private static final int MOZELLA = 30483;
+	// Location
+	private static final Location TELEPORT_LOC = new Location(17724, 114004, -11672);
 	// Misc
 	private static final int MAX_LEVEL = 55;
 	
@@ -39,7 +42,7 @@ public class CrumaTower extends AbstractNpcAI
 	{
 		if (player.getLevel() <= MAX_LEVEL)
 		{
-			player.teleToLocation(17724, 114004, -11672);
+			player.teleToLocation(TELEPORT_LOC);
 			return null;
 		}
 		return "30483-1.htm";
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/ElrokiTeleporters/ElrokiTeleporters.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/ElrokiTeleporters/ElrokiTeleporters.java
index 21d0020e4d..6d83ab0d36 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/ElrokiTeleporters/ElrokiTeleporters.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/ElrokiTeleporters/ElrokiTeleporters.java
@@ -20,6 +20,7 @@ package ai.npc.Teleports.ElrokiTeleporters;
 
 import ai.npc.AbstractNpcAI;
 
+import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 
@@ -33,6 +34,9 @@ public class ElrokiTeleporters extends AbstractNpcAI
 	// NPCs
 	private static final int ORAHOCHIN = 32111;
 	private static final int GARIACHIN = 32112;
+	// Locations
+	private static final Location TELEPORT_ORAHOCIN = new Location(4990, -1879, -3178);
+	private static final Location TELEPORT_GARIACHIN = new Location(7557, -5513, -3221);
 	
 	@Override
 	public String onTalk(L2Npc npc, L2PcInstance player)
@@ -45,12 +49,12 @@ public class ElrokiTeleporters extends AbstractNpcAI
 				{
 					return "32111-no.htm";
 				}
-				player.teleToLocation(4990, -1879, -3178);
+				player.teleToLocation(TELEPORT_ORAHOCIN);
 				break;
 			}
 			case GARIACHIN:
 			{
-				player.teleToLocation(7557, -5513, -3221);
+				player.teleToLocation(TELEPORT_GARIACHIN);
 				break;
 			}
 		}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/GrandBossTeleporters/GrandBossTeleporters.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/GrandBossTeleporters/GrandBossTeleporters.java
index 12ce31cddd..4c8db6542d 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/GrandBossTeleporters/GrandBossTeleporters.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/GrandBossTeleporters/GrandBossTeleporters.java
@@ -26,6 +26,7 @@ import com.l2jserver.Config;
 import com.l2jserver.gameserver.datatables.DoorTable;
 import com.l2jserver.gameserver.instancemanager.GrandBossManager;
 import com.l2jserver.gameserver.instancemanager.QuestManager;
+import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2GrandBossInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -55,6 +56,11 @@ public class GrandBossTeleporters extends AbstractNpcAI
 	// Items
 	private static final int PORTAL_STONE = 3865;
 	private static final int VACUALITE_FLOATING_STONE = 7267;
+	private static final Location ENTER_HALL_OF_FLAMES = new Location(183813, -115157, -3303);
+	private static final Location TELEPORT_INTO_ANTHARAS_LAIR = new Location(179700, 113800, -7709);
+	private static final Location TELEPORT_OUT_OF_ANTHARAS_LAIR = new Location(79800, 151200, -3534);
+	private static final Location TELEPORT_INTO_VALAKAS_LAIR = new Location(204328, -111874, 70);
+	private static final Location TELEPORT_OUT_OF_VALAKAS_LAIR = new Location(150037, -57720, -2976);
 	
 	private Quest valakasAI()
 	{
@@ -81,7 +87,7 @@ public class GrandBossTeleporters extends AbstractNpcAI
 		
 		if (st.hasQuestItems(VACUALITE_FLOATING_STONE))
 		{
-			player.teleToLocation(183813, -115157, -3303);
+			player.teleToLocation(ENTER_HALL_OF_FLAMES);
 			st.set("allowEnter", "1");
 		}
 		else
@@ -132,7 +138,7 @@ public class GrandBossTeleporters extends AbstractNpcAI
 								zone.allowPlayerEntry(player, 30);
 							}
 							
-							player.teleToLocation(179700 + getRandom(700), 113800 + getRandom(2100), -7709);
+							player.teleToLocation(TELEPORT_INTO_ANTHARAS_LAIR.getX() + getRandom(700), TELEPORT_INTO_ANTHARAS_LAIR.getY() + getRandom(2100), TELEPORT_INTO_ANTHARAS_LAIR.getZ());
 							
 							if (status == 0)
 							{
@@ -150,7 +156,8 @@ public class GrandBossTeleporters extends AbstractNpcAI
 			}
 			case 31859:
 			{
-				player.teleToLocation(79800 + getRandom(600), 151200 + getRandom(1100), -3534);
+				
+				player.teleToLocation(TELEPORT_OUT_OF_ANTHARAS_LAIR.getX() + getRandom(600), TELEPORT_OUT_OF_ANTHARAS_LAIR.getY() + getRandom(1100), TELEPORT_OUT_OF_ANTHARAS_LAIR.getZ());
 				break;
 			}
 			case 31385:
@@ -175,7 +182,7 @@ public class GrandBossTeleporters extends AbstractNpcAI
 								zone.allowPlayerEntry(player, 30);
 							}
 							
-							player.teleToLocation(204328 + getRandom(600), -111874 + getRandom(600), 70);
+							player.teleToLocation(TELEPORT_INTO_VALAKAS_LAIR.getX() + getRandom(600), TELEPORT_INTO_VALAKAS_LAIR.getY() + getRandom(600), TELEPORT_INTO_VALAKAS_LAIR.getZ());
 							
 							playerCount++;
 							
@@ -247,7 +254,7 @@ public class GrandBossTeleporters extends AbstractNpcAI
 			}
 			case 31759:
 			{
-				player.teleToLocation(150037 + getRandom(500), -57720 + getRandom(500), -2976);
+				player.teleToLocation(TELEPORT_OUT_OF_VALAKAS_LAIR.getX() + getRandom(500), TELEPORT_OUT_OF_VALAKAS_LAIR.getY() + getRandom(500), TELEPORT_OUT_OF_VALAKAS_LAIR.getZ());
 				break;
 			}
 		}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/OracleTeleport/OracleTeleport.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/OracleTeleport/OracleTeleport.java
index 91ae8e0e1a..75c41ddde9 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/OracleTeleport/OracleTeleport.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/OracleTeleport/OracleTeleport.java
@@ -254,15 +254,13 @@ public class OracleTeleport extends AbstractNpcAI
 		{
 			if (Util.contains(TEMPLE_PRIEST, npcId) && (st.getState() == State.STARTED))
 			{
-				Location loc = RETURN_LOCS[st.getInt("id")];
-				player.teleToLocation(loc.getX(), loc.getY(), loc.getZ());
+				player.teleToLocation(RETURN_LOCS[st.getInt("id")]);
 				player.setIsIn7sDungeon(false);
 				st.exitQuest(true);
 			}
 			else if (Util.contains(RIFT_POSTERS, npcId) && (st.getState() == State.STARTED))
 			{
-				Location loc = RETURN_LOCS[st.getInt("id")];
-				player.teleToLocation(loc.getX(), loc.getY(), loc.getZ());
+				player.teleToLocation(RETURN_LOCS[st.getInt("id")]);
 				htmltext = "rift_back.htm";
 				st.exitQuest(true);
 			}
@@ -272,12 +270,12 @@ public class OracleTeleport extends AbstractNpcAI
 			int id = st.getInt("id");
 			if (Util.contains(TOWN_DAWN, id))
 			{
-				player.teleToLocation(-80157, 111344, -4901);
+				player.teleToLocation(new Location(-80157, 111344, -4901));
 				player.setIsIn7sDungeon(true);
 			}
 			else if (Util.contains(TOWN_DUSK, id))
 			{
-				player.teleToLocation(-81261, 86531, -5157);
+				player.teleToLocation(new Location(-81261, 86531, -5157));
 				player.setIsIn7sDungeon(true);
 			}
 			else
@@ -288,7 +286,7 @@ public class OracleTeleport extends AbstractNpcAI
 		else if (event.equalsIgnoreCase("Dimensional"))
 		{
 			htmltext = "oracle.htm";
-			player.teleToLocation(-114755, -179466, -6752);
+			player.teleToLocation(new Location(-114755, -179466, -6752));
 		}
 		else if (event.equalsIgnoreCase("5.htm"))
 		{
@@ -308,7 +306,7 @@ public class OracleTeleport extends AbstractNpcAI
 			}
 			st.set("id", Integer.toString(i));
 			st.setState(State.STARTED);
-			player.teleToLocation(-114755, -179466, -6752);
+			player.teleToLocation(new Location(-114755, -179466, -6752));
 		}
 		else if (event.equalsIgnoreCase("6.htm"))
 		{
@@ -355,7 +353,7 @@ public class OracleTeleport extends AbstractNpcAI
 			st.setState(State.STARTED);
 			st.playSound(QuestSound.ITEMSOUND_QUEST_ACCEPT);
 			htmltext = "ziggurat_rift.htm";
-			player.teleToLocation(-114755, -179466, -6752);
+			player.teleToLocation(new Location(-114755, -179466, -6752));
 		}
 		return htmltext;
 	}
@@ -381,7 +379,7 @@ public class OracleTeleport extends AbstractNpcAI
 			}
 			st.set("id", Integer.toString(i));
 			st.playSound(QuestSound.ITEMSOUND_QUEST_ACCEPT);
-			player.teleToLocation(-80157, 111344, -4901);
+			player.teleToLocation(new Location(-80157, 111344, -4901));
 			player.setIsIn7sDungeon(true);
 		}
 		if (Util.contains(TOWN_DUSK, npcId))
@@ -398,7 +396,7 @@ public class OracleTeleport extends AbstractNpcAI
 			}
 			st.set("id", Integer.toString(i));
 			st.playSound(QuestSound.ITEMSOUND_QUEST_ACCEPT);
-			player.teleToLocation(-81261, 86531, -5157);
+			player.teleToLocation(new Location(-81261, 86531, -5157));
 			player.setIsIn7sDungeon(true);
 		}
 		else if ((npcId >= 31494) && (npcId <= 31507))
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/PaganTeleporters/PaganTeleporters.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/PaganTeleporters/PaganTeleporters.java
index 944068b78f..5361114dab 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/PaganTeleporters/PaganTeleporters.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/PaganTeleporters/PaganTeleporters.java
@@ -18,8 +18,12 @@
  */
 package ai.npc.Teleports.PaganTeleporters;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import ai.npc.AbstractNpcAI;
 
+import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 
@@ -33,6 +37,13 @@ public class PaganTeleporters extends AbstractNpcAI
 	// NPCs
 	private static final int TRIOLS_MIRROR_1 = 32039;
 	private static final int TRIOLS_MIRROR_2 = 32040;
+	// Locations
+	private static final Map<Integer, Location> TRIOLS_LOCS = new HashMap<>();
+	static
+	{
+		TRIOLS_LOCS.put(TRIOLS_MIRROR_1, new Location(-12766, -35840, -10856));
+		TRIOLS_LOCS.put(TRIOLS_MIRROR_2, new Location(36640, -51218, 718));
+	}
 	// @formatter:off
 	private static final int[] NPCS =
 	{
@@ -67,18 +78,9 @@ public class PaganTeleporters extends AbstractNpcAI
 	@Override
 	public String onFirstTalk(L2Npc npc, L2PcInstance player)
 	{
-		switch (npc.getId())
+		if (TRIOLS_LOCS.containsKey(npc.getId()))
 		{
-			case TRIOLS_MIRROR_1:
-			{
-				player.teleToLocation(-12766, -35840, -10856);
-				break;
-			}
-			case TRIOLS_MIRROR_2:
-			{
-				player.teleToLocation(36640, -51218, 718);
-				break;
-			}
+			player.teleToLocation(TRIOLS_LOCS.get(npc.getId()));
 		}
 		return "";
 	}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/SteelCitadelTeleport/SteelCitadelTeleport.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/SteelCitadelTeleport/SteelCitadelTeleport.java
index ab35476c07..f69618942d 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/SteelCitadelTeleport/SteelCitadelTeleport.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/SteelCitadelTeleport/SteelCitadelTeleport.java
@@ -25,6 +25,7 @@ import com.l2jserver.gameserver.instancemanager.GrandBossManager;
 import com.l2jserver.gameserver.instancemanager.ZoneManager;
 import com.l2jserver.gameserver.model.L2CommandChannel;
 import com.l2jserver.gameserver.model.L2Party;
+import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.zone.type.L2BossZone;
@@ -38,6 +39,8 @@ public class SteelCitadelTeleport extends AbstractNpcAI
 	// NPCs
 	private static final int BELETH = 29118;
 	private static final int NAIA_CUBE = 32376;
+	// Location
+	private static final Location TELEPORT_CITADEL = new Location(16342, 209557, -9352);
 	
 	private SteelCitadelTeleport()
 	{
@@ -83,7 +86,7 @@ public class SteelCitadelTeleport extends AbstractNpcAI
 					if (pl.isInsideRadius(npc.getX(), npc.getY(), npc.getZ(), 3000, true, false))
 					{
 						zone.allowPlayerEntry(pl, 30);
-						pl.teleToLocation(16342, 209557, -9352, true);
+						pl.teleToLocation(TELEPORT_CITADEL, true);
 					}
 				}
 			}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/Survivor/Survivor.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/Survivor/Survivor.java
index 72c97bd929..1fc71a5f53 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/Survivor/Survivor.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/Survivor/Survivor.java
@@ -20,6 +20,7 @@ package ai.npc.Teleports.Survivor;
 
 import ai.npc.AbstractNpcAI;
 
+import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.itemcontainer.PcInventory;
@@ -35,6 +36,8 @@ public class Survivor extends AbstractNpcAI
 	private static final int SURVIVOR = 32632;
 	// Misc
 	private static final int MIN_LEVEL = 75;
+	// Location
+	private static final Location TELEPORT = new Location(-149406, 255247, -80);
 	
 	@Override
 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
@@ -52,7 +55,7 @@ public class Survivor extends AbstractNpcAI
 			else
 			{
 				takeItems(player, PcInventory.ADENA_ID, 150000);
-				player.teleToLocation(-149406, 255247, -80);
+				player.teleToLocation(TELEPORT);
 				return null;
 			}
 		}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/TeleportToFantasy/TeleportToFantasy.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/TeleportToFantasy/TeleportToFantasy.java
index 0d21a988a2..694b93df81 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/TeleportToFantasy/TeleportToFantasy.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/TeleportToFantasy/TeleportToFantasy.java
@@ -68,6 +68,8 @@ public class TeleportToFantasy extends AbstractNpcAI
 		new Location(-59720, -55921, -2032)
 	};
 	
+	private static final Location RUNE_TOWNSHIP = new Location(43835, -47749, -792);
+	
 	@Override
 	public String onTalk(L2Npc npc, L2PcInstance player)
 	{
@@ -99,7 +101,7 @@ public class TeleportToFantasy extends AbstractNpcAI
 			else
 			{
 				player.sendPacket(new NpcSay(npc.getObjectId(), Say2.NPC_ALL, npc.getId(), NpcStringId.IF_YOUR_MEANS_OF_ARRIVAL_WAS_A_BIT_UNCONVENTIONAL_THEN_ILL_BE_SENDING_YOU_BACK_TO_RUNE_TOWNSHIP_WHICH_IS_THE_NEAREST_TOWN));
-				player.teleToLocation(43835, -47749, -792);
+				player.teleToLocation(RUNE_TOWNSHIP);
 			}
 			st.exitQuest(true);
 		}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/TeleportToRaceTrack/TeleportToRaceTrack.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/TeleportToRaceTrack/TeleportToRaceTrack.java
index 94593c69c6..1ac4580f20 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/TeleportToRaceTrack/TeleportToRaceTrack.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/TeleportToRaceTrack/TeleportToRaceTrack.java
@@ -57,6 +57,8 @@ public class TeleportToRaceTrack extends AbstractNpcAI
 		new Location(87386, -143246, -1293),
 		new Location(12882, 181053, -3560)
 	};
+	private static final Location TELEPORT = new Location(12661, 181687, -3560);
+	private static final Location DION_CASTLE_TOWN = new Location(15670, 142983, -2700);
 	
 	@Override
 	public String onTalk(L2Npc npc, L2PcInstance player)
@@ -71,7 +73,7 @@ public class TeleportToRaceTrack extends AbstractNpcAI
 		
 		if (TELEPORTERS.containsKey(npc.getId()))
 		{
-			st.getPlayer().teleToLocation(12661, 181687, -3560);
+			st.getPlayer().teleToLocation(TELEPORT);
 			st.setState(State.STARTED);
 			st.set("id", String.valueOf(TELEPORTERS.get(npc.getId())));
 		}
@@ -89,7 +91,7 @@ public class TeleportToRaceTrack extends AbstractNpcAI
 			else
 			{
 				player.sendPacket(new NpcSay(npc.getObjectId(), 0, npc.getId(), "You've arrived here from a different way. I'll send you to Dion Castle Town which is the nearest town."));
-				st.getPlayer().teleToLocation(15670, 142983, -2700);
+				st.getPlayer().teleToLocation(DION_CASTLE_TOWN);
 			}
 			st.exitQuest(true);
 		}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/TeleportWithCharm/TeleportWithCharm.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/TeleportWithCharm/TeleportWithCharm.java
index d20b6275a2..46ecb9d619 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/TeleportWithCharm/TeleportWithCharm.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/TeleportWithCharm/TeleportWithCharm.java
@@ -20,6 +20,7 @@ package ai.npc.Teleports.TeleportWithCharm;
 
 import ai.npc.AbstractNpcAI;
 
+import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 
@@ -36,6 +37,9 @@ public class TeleportWithCharm extends AbstractNpcAI
 	// Items
 	private final static int ORC_GATEKEEPER_CHARM = 1658;
 	private final static int DWARF_GATEKEEPER_TOKEN = 1659;
+	// Locations
+	private final static Location ORC_TELEPORT = new Location(-80826, 149775, -3043);
+	private final static Location DWARF_TELEPORT = new Location(-80826, 149775, -3043);
 	
 	@Override
 	public String onTalk(L2Npc npc, L2PcInstance player)
@@ -47,7 +51,7 @@ public class TeleportWithCharm extends AbstractNpcAI
 				if (hasQuestItems(player, DWARF_GATEKEEPER_TOKEN))
 				{
 					takeItems(player, DWARF_GATEKEEPER_TOKEN, 1);
-					player.teleToLocation(-80826, 149775, -3043);
+					player.teleToLocation(DWARF_TELEPORT);
 				}
 				else
 				{
@@ -60,7 +64,7 @@ public class TeleportWithCharm extends AbstractNpcAI
 				if (hasQuestItems(player, ORC_GATEKEEPER_CHARM))
 				{
 					takeItems(player, ORC_GATEKEEPER_CHARM, 1);
-					player.teleToLocation(-80826, 149775, -3043);
+					player.teleToLocation(ORC_TELEPORT);
 				}
 				else
 				{
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/ToIVortex/ToIVortex.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/ToIVortex/ToIVortex.java
index ab7f19be99..e0e816e916 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/ToIVortex/ToIVortex.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/ToIVortex/ToIVortex.java
@@ -18,18 +18,23 @@
  */
 package ai.npc.Teleports.ToIVortex;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import ai.npc.AbstractNpcAI;
 
+import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.itemcontainer.PcInventory;
 
 /**
  * Tower of Insolence Vortex teleport AI.<br>
- * Updated to High Five by pmq.
+ * Updated to High Five by pmq.<br>
+ * Reworked by xban1x.
  * @author Plim
  */
-public class ToIVortex extends AbstractNpcAI
+public final class ToIVortex extends AbstractNpcAI
 {
 	// NPCs
 	private static final int KEPLON = 30949;
@@ -42,6 +47,34 @@ public class ToIVortex extends AbstractNpcAI
 	private static final int GREEN_DIMENSION_STONE = 4401;
 	private static final int BLUE_DIMENSION_STONE = 4402;
 	private static final int RED_DIMENSION_STONE = 4403;
+	// Locations
+	private static final Map<String, Location> TOI_FLOORS = new HashMap<>();
+	// Misc
+	private static final Map<String, Integer> DIMENSION_TRADE = new HashMap<>();
+	static
+	{
+		TOI_FLOORS.put("1", new Location(114356, 13423, -5096, GREEN_DIMENSION_STONE));
+		TOI_FLOORS.put("2", new Location(114666, 13380, -3608, GREEN_DIMENSION_STONE));
+		TOI_FLOORS.put("3", new Location(111982, 16028, -2120, GREEN_DIMENSION_STONE));
+		TOI_FLOORS.put("4", new Location(114636, 13413, -640, BLUE_DIMENSION_STONE));
+		TOI_FLOORS.put("5", new Location(114152, 19902, 928, BLUE_DIMENSION_STONE));
+		TOI_FLOORS.put("6", new Location(117131, 16044, 1944, BLUE_DIMENSION_STONE));
+		TOI_FLOORS.put("7", new Location(113026, 17687, 2952, RED_DIMENSION_STONE));
+		TOI_FLOORS.put("8", new Location(115571, 13723, 3960, RED_DIMENSION_STONE));
+		TOI_FLOORS.put("9", new Location(114649, 14144, 4976, RED_DIMENSION_STONE));
+		TOI_FLOORS.put("10", new Location(118507, 16605, 5984, RED_DIMENSION_STONE));
+		
+		DIMENSION_TRADE.put("GREEN", GREEN_DIMENSION_STONE);
+		DIMENSION_TRADE.put("BLUE", BLUE_DIMENSION_STONE);
+		DIMENSION_TRADE.put("RED", RED_DIMENSION_STONE);
+	}
+	
+	private ToIVortex()
+	{
+		super(ToIVortex.class.getSimpleName(), "ai/npc/Teleports");
+		addStartNpc(KEPLON, EUCLIE, PITHGON, DIMENSION_VORTEX_1, DIMENSION_VORTEX_2, DIMENSION_VORTEX_3);
+		addTalkId(KEPLON, EUCLIE, PITHGON, DIMENSION_VORTEX_1, DIMENSION_VORTEX_2, DIMENSION_VORTEX_3);
+	}
 	
 	@Override
 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
@@ -51,138 +84,22 @@ public class ToIVortex extends AbstractNpcAI
 		switch (event)
 		{
 			case "1":
-			{
-				// 1st Floor
-				if (hasQuestItems(player, GREEN_DIMENSION_STONE))
-				{
-					takeItems(player, GREEN_DIMENSION_STONE, 1);
-					player.teleToLocation(114356, 13423, -5096, true);
-				}
-				else
-				{
-					return "no-stones.htm";
-				}
-				break;
-			}
 			case "2":
-			{
-				// 2nd Floor
-				if (hasQuestItems(player, GREEN_DIMENSION_STONE))
-				{
-					takeItems(player, GREEN_DIMENSION_STONE, 1);
-					player.teleToLocation(114666, 13380, -3608, true);
-				}
-				else
-				{
-					return "no-stones.htm";
-				}
-				break;
-			}
 			case "3":
-			{
-				// 3rd Floor
-				if (hasQuestItems(player, GREEN_DIMENSION_STONE))
-				{
-					takeItems(player, GREEN_DIMENSION_STONE, 1);
-					player.teleToLocation(111982, 16028, -2120, true);
-				}
-				else
-				{
-					return "no-stones.htm";
-				}
-				break;
-			}
 			case "4":
-			{
-				// 4th Floor
-				if (hasQuestItems(player, BLUE_DIMENSION_STONE))
-				{
-					takeItems(player, BLUE_DIMENSION_STONE, 1);
-					player.teleToLocation(114636, 13413, -640, true);
-				}
-				else
-				{
-					return "no-stones.htm";
-				}
-				break;
-			}
 			case "5":
-			{
-				// 5th Floor
-				if (hasQuestItems(player, BLUE_DIMENSION_STONE))
-				{
-					takeItems(player, BLUE_DIMENSION_STONE, 1);
-					player.teleToLocation(114152, 19902, 928, true);
-				}
-				else
-				{
-					return "no-stones.htm";
-				}
-				break;
-			}
 			case "6":
-			{
-				// 6th Floor
-				if (hasQuestItems(player, BLUE_DIMENSION_STONE))
-				{
-					takeItems(player, BLUE_DIMENSION_STONE, 1);
-					player.teleToLocation(117131, 16044, 1944, true);
-				}
-				else
-				{
-					return "no-stones.htm";
-				}
-				break;
-			}
 			case "7":
-			{
-				// 7th Floor
-				if (hasQuestItems(player, RED_DIMENSION_STONE))
-				{
-					takeItems(player, RED_DIMENSION_STONE, 1);
-					player.teleToLocation(113026, 17687, 2952, true);
-				}
-				else
-				{
-					return "no-stones.htm";
-				}
-				break;
-			}
 			case "8":
-			{
-				// 8th Floor
-				if (hasQuestItems(player, RED_DIMENSION_STONE))
-				{
-					takeItems(player, RED_DIMENSION_STONE, 1);
-					player.teleToLocation(115571, 13723, 3960, true);
-				}
-				else
-				{
-					return "no-stones.htm";
-				}
-				break;
-			}
 			case "9":
-			{
-				// 9th Floor
-				if (hasQuestItems(player, RED_DIMENSION_STONE))
-				{
-					takeItems(player, RED_DIMENSION_STONE, 1);
-					player.teleToLocation(114649, 14144, 4976, true);
-				}
-				else
-				{
-					return "no-stones.htm";
-				}
-				break;
-			}
 			case "10":
 			{
-				// 10 Floor
-				if (hasQuestItems(player, RED_DIMENSION_STONE))
+				final Location loc = TOI_FLOORS.get(event);
+				if (hasQuestItems(player, loc.getHeading()))
 				{
-					takeItems(player, RED_DIMENSION_STONE, 1);
-					player.teleToLocation(118507, 16605, 5984, true);
+					takeItems(player, loc.getHeading(), 1);
+					loc.setHeading(0);
+					player.teleToLocation(loc, true);
 				}
 				else
 				{
@@ -191,37 +108,13 @@ public class ToIVortex extends AbstractNpcAI
 				break;
 			}
 			case "GREEN":
-			{
-				if (player.getAdena() >= 10000)
-				{
-					takeItems(player, PcInventory.ADENA_ID, 10000);
-					giveItems(player, GREEN_DIMENSION_STONE, 1);
-				}
-				else
-				{
-					return npcId + "no-adena.htm";
-				}
-				break;
-			}
 			case "BLUE":
-			{
-				if (player.getAdena() >= 10000)
-				{
-					takeItems(player, PcInventory.ADENA_ID, 10000);
-					giveItems(player, BLUE_DIMENSION_STONE, 1);
-				}
-				else
-				{
-					return npcId + "no-adena.htm";
-				}
-				break;
-			}
 			case "RED":
 			{
 				if (player.getAdena() >= 10000)
 				{
 					takeItems(player, PcInventory.ADENA_ID, 10000);
-					giveItems(player, RED_DIMENSION_STONE, 1);
+					giveItems(player, DIMENSION_TRADE.get(event), 1);
 				}
 				else
 				{
@@ -233,15 +126,8 @@ public class ToIVortex extends AbstractNpcAI
 		return super.onAdvEvent(event, npc, player);
 	}
 	
-	private ToIVortex(String name, String descr)
-	{
-		super(name, descr);
-		addStartNpc(KEPLON, EUCLIE, PITHGON, DIMENSION_VORTEX_1, DIMENSION_VORTEX_2, DIMENSION_VORTEX_3);
-		addTalkId(KEPLON, EUCLIE, PITHGON, DIMENSION_VORTEX_1, DIMENSION_VORTEX_2, DIMENSION_VORTEX_3);
-	}
-	
 	public static void main(String[] args)
 	{
-		new ToIVortex(ToIVortex.class.getSimpleName(), "ai/npc/Teleports");
+		new ToIVortex();
 	}
 }
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/Warpgate/Warpgate.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/Warpgate/Warpgate.java
index fa91490668..67ebc8053d 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/Warpgate/Warpgate.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/Teleports/Warpgate/Warpgate.java
@@ -25,6 +25,7 @@ import ai.npc.AbstractNpcAI;
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.ThreadPoolManager;
 import com.l2jserver.gameserver.instancemanager.HellboundManager;
+import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.PcCondOverride;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Npc;
@@ -51,6 +52,9 @@ public class Warpgate extends AbstractNpcAI
 		32318,
 		32319
 	};
+	// Locations
+	private static final Location HELLBOUND = new Location(-11272, 236464, -3248);
+	protected static final Location REMOVE_LOC = new Location(-16555, 209375, -3670);
 	
 	private static final boolean canEnter(L2PcInstance player)
 	{
@@ -98,7 +102,7 @@ public class Warpgate extends AbstractNpcAI
 			return "warpgate-no.htm";
 		}
 		
-		player.teleToLocation(-11272, 236464, -3248, true);
+		player.teleToLocation(HELLBOUND, true);
 		HellboundManager.getInstance().unlock();
 		return null;
 	}
@@ -137,7 +141,7 @@ public class Warpgate extends AbstractNpcAI
 		{
 			try
 			{
-				_char.teleToLocation(-16555, 209375, -3670, true);
+				_char.teleToLocation(REMOVE_LOC, true);
 			}
 			catch (Exception e)
 			{
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/conquerablehalls/RainbowSpringsChateau/RainbowSpringsChateau.java b/L2J_DataPack_BETA/dist/game/data/scripts/conquerablehalls/RainbowSpringsChateau/RainbowSpringsChateau.java
index 19bd213c49..be252dc61e 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/conquerablehalls/RainbowSpringsChateau/RainbowSpringsChateau.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/conquerablehalls/RainbowSpringsChateau/RainbowSpringsChateau.java
@@ -46,6 +46,7 @@ import com.l2jserver.gameserver.model.L2Clan;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.L2Party;
 import com.l2jserver.gameserver.model.L2Spawn;
+import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.TeleportWhereType;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Npc;
@@ -233,28 +234,12 @@ public class RainbowSpringsChateau extends Quest
 		35599
 	};
 	
-	private static final int[][] ARENAS =
+	private static final Location[] ARENAS = new Location[]
 	{
-		{
-			151562,
-			-127080,
-			-2214
-		}, // Arena 1
-		{
-			153141,
-			-125335,
-			-2214
-		}, // Arena 2
-		{
-			153892,
-			-127530,
-			-2214
-		}, // Arena 3
-		{
-			155657,
-			-125752,
-			-2214
-		}, // Arena 4
+		new Location(151562, -127080, -2214), // Arena 1
+		new Location(153141, -125335, -2214), // Arena 2
+		new Location(153892, -127530, -2214), // Arena 3
+		new Location(155657, -125752, -2214), // Arena 4
 	};
 	
 	protected static final int[] ARENA_ZONES =
@@ -724,7 +709,7 @@ public class RainbowSpringsChateau extends Quest
 				{
 					pc.getSummon().unSummon(pc);
 				}
-				pc.teleToLocation(ARENAS[arena][0], ARENAS[arena][1], ARENAS[arena][2]);
+				pc.teleToLocation(ARENAS[arena]);
 			}
 		}
 	}
@@ -738,9 +723,9 @@ public class RainbowSpringsChateau extends Quest
 				try
 				{
 					_gourds[i] = new L2Spawn(NpcTable.getInstance().getTemplate(GOURDS[i]));
-					_gourds[i].setX(ARENAS[i][0] + 150);
-					_gourds[i].setY(ARENAS[i][1] + 150);
-					_gourds[i].setZ(ARENAS[i][2]);
+					_gourds[i].setX(ARENAS[i].getX() + 150);
+					_gourds[i].setY(ARENAS[i].getY() + 150);
+					_gourds[i].setZ(ARENAS[i].getZ());
 					_gourds[i].setHeading(1);
 					_gourds[i].setAmount(1);
 				}
@@ -774,11 +759,7 @@ public class RainbowSpringsChateau extends Quest
 			
 			_gourds[(iterator - 1) - i] = curSpawn;
 			
-			int newX = oldSpawn.getX();
-			int newY = oldSpawn.getY();
-			int newZ = oldSpawn.getZ();
-			
-			curSpawn.getLastSpawn().teleToLocation(newX, newY, newZ);
+			curSpawn.getLastSpawn().teleToLocation(oldSpawn.getLocation());
 		}
 	}
 	
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminEffects.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminEffects.java
index aa04fcbdfd..5bd6d01b38 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminEffects.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminEffects.java
@@ -355,7 +355,7 @@ public class AdminEffects implements IAdminCommandHandler
 			{
 				String id = st.nextToken();
 				activeChar.getPoly().setPolyInfo("npc", id);
-				activeChar.teleToLocation(activeChar.getX(), activeChar.getY(), activeChar.getZ(), false);
+				activeChar.teleToLocation(activeChar.getLocation());
 				CharInfo info1 = new CharInfo(activeChar);
 				activeChar.broadcastPacket(info1);
 				UserInfo info2 = new UserInfo(activeChar);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminEventEngine.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminEventEngine.java
index a4fc560088..13e2718afd 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminEventEngine.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminEventEngine.java
@@ -253,7 +253,7 @@ public class AdminEventEngine implements IAdminCommandHandler
 					for (L2PcInstance player : L2Event._teams.get(teamId))
 					{
 						player.setTitle(L2Event._teamNames.get(teamId));
-						player.teleToLocation(activeChar.getX(), activeChar.getY(), activeChar.getZ(), true);
+						player.teleToLocation(activeChar.getLocation(), true);
 						player.setInstanceId(activeChar.getInstanceId());
 					}
 				}
@@ -326,7 +326,7 @@ public class AdminEventEngine implements IAdminCommandHandler
 				for (L2PcInstance player : L2Event._teams.get(teamId))
 				{
 					player.getPoly().setPolyInfo("npc", polyIds[Rnd.get(polyIds.length)]);
-					player.teleToLocation(player.getX(), player.getY(), player.getZ(), true);
+					player.teleToLocation(player.getLocation(), true);
 					CharInfo info1 = new CharInfo(player);
 					player.broadcastPacket(info1);
 					UserInfo info2 = new UserInfo(player);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminInstance.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminInstance.java
index 4caa553300..c2f9625da2 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminInstance.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminInstance.java
@@ -107,7 +107,7 @@ public class AdminInstance implements IAdminCommandHandler
 				{
 					L2PcInstance player = (L2PcInstance) target;
 					player.sendMessage("Admin set your instance to:" + val);
-					player.teleToLocation(player.getX(), player.getY(), player.getZ());
+					player.teleToLocation(player.getLocation());
 				}
 				activeChar.sendMessage("Moved " + target.getName() + " to instance " + target.getInstanceId() + ".");
 				return true;
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminMammon.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminMammon.java
index 825b707f00..be715c762d 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminMammon.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminMammon.java
@@ -77,7 +77,7 @@ public class AdminMammon implements IAdminCommandHandler
 					activeChar.sendMessage("Blacksmith of Mammon: " + x1 + " " + y1 + " " + z1);
 					if (teleportIndex == 1)
 					{
-						activeChar.teleToLocation(x1, y1, z1, true);
+						activeChar.teleToLocation(blackInst[0].getLocation(), true);
 					}
 				}
 			}
@@ -95,7 +95,7 @@ public class AdminMammon implements IAdminCommandHandler
 					activeChar.sendMessage("Merchant of Mammon: " + x2 + " " + y2 + " " + z2);
 					if (teleportIndex == 2)
 					{
-						activeChar.teleToLocation(x2, y2, z2, true);
+						activeChar.teleToLocation(merchInst[0].getLocation(), true);
 					}
 				}
 			}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminMenu.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminMenu.java
index 36aca15940..f9e5b11d65 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminMenu.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminMenu.java
@@ -29,6 +29,7 @@ import com.l2jserver.gameserver.handler.IAdminCommandHandler;
 import com.l2jserver.gameserver.model.L2Clan;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.L2World;
+import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
@@ -71,7 +72,7 @@ public class AdminMenu implements IAdminCommandHandler
 				L2PcInstance player = L2World.getInstance().getPlayer(playerName);
 				if (player != null)
 				{
-					teleportCharacter(player, Integer.parseInt(data[2]), Integer.parseInt(data[3]), Integer.parseInt(data[4]), activeChar, "Admin is teleporting you.");
+					teleportCharacter(player, new Location(Integer.parseInt(data[2]), Integer.parseInt(data[3]), Integer.parseInt(data[4])), activeChar, "Admin is teleporting you.");
 				}
 			}
 			showMainPage(activeChar);
@@ -82,7 +83,7 @@ public class AdminMenu implements IAdminCommandHandler
 			{
 				String targetName = command.substring(23);
 				L2PcInstance player = L2World.getInstance().getPlayer(targetName);
-				teleportCharacter(player, activeChar.getX(), activeChar.getY(), activeChar.getZ(), activeChar, "Admin is teleporting you.");
+				teleportCharacter(player, activeChar.getLocation(), activeChar, "Admin is teleporting you.");
 			}
 			catch (StringIndexOutOfBoundsException e)
 			{
@@ -90,7 +91,6 @@ public class AdminMenu implements IAdminCommandHandler
 		}
 		else if (command.startsWith("admin_recall_party_menu"))
 		{
-			int x = activeChar.getX(), y = activeChar.getY(), z = activeChar.getZ();
 			try
 			{
 				String targetName = command.substring(24);
@@ -103,12 +103,12 @@ public class AdminMenu implements IAdminCommandHandler
 				if (!player.isInParty())
 				{
 					activeChar.sendMessage("Player is not in party.");
-					teleportCharacter(player, x, y, z, activeChar, "Admin is teleporting you.");
+					teleportCharacter(player, activeChar.getLocation(), activeChar, "Admin is teleporting you.");
 					return true;
 				}
 				for (L2PcInstance pm : player.getParty().getMembers())
 				{
-					teleportCharacter(pm, x, y, z, activeChar, "Your party is being teleported by an Admin.");
+					teleportCharacter(pm, activeChar.getLocation(), activeChar, "Your party is being teleported by an Admin.");
 				}
 			}
 			catch (Exception e)
@@ -118,7 +118,6 @@ public class AdminMenu implements IAdminCommandHandler
 		}
 		else if (command.startsWith("admin_recall_clan_menu"))
 		{
-			int x = activeChar.getX(), y = activeChar.getY(), z = activeChar.getZ();
 			try
 			{
 				String targetName = command.substring(23);
@@ -132,13 +131,13 @@ public class AdminMenu implements IAdminCommandHandler
 				if (clan == null)
 				{
 					activeChar.sendMessage("Player is not in a clan.");
-					teleportCharacter(player, x, y, z, activeChar, "Admin is teleporting you.");
+					teleportCharacter(player, activeChar.getLocation(), activeChar, "Admin is teleporting you.");
 					return true;
 				}
 				
 				for (L2PcInstance member : clan.getOnlineMembers(0))
 				{
-					teleportCharacter(member, x, y, z, activeChar, "Your clan is being teleported by an Admin.");
+					teleportCharacter(member, activeChar.getLocation(), activeChar, "Your clan is being teleported by an Admin.");
 				}
 			}
 			catch (Exception e)
@@ -270,12 +269,12 @@ public class AdminMenu implements IAdminCommandHandler
 		AdminHtml.showAdminHtml(activeChar, filename);
 	}
 	
-	private void teleportCharacter(L2PcInstance player, int x, int y, int z, L2PcInstance activeChar, String message)
+	private void teleportCharacter(L2PcInstance player, Location loc, L2PcInstance activeChar, String message)
 	{
 		if (player != null)
 		{
 			player.sendMessage(message);
-			player.teleToLocation(x, y, z, true);
+			player.teleToLocation(loc, true);
 		}
 		showMainPage(activeChar);
 	}
@@ -299,7 +298,7 @@ public class AdminMenu implements IAdminCommandHandler
 		else
 		{
 			activeChar.setInstanceId(player.getInstanceId());
-			activeChar.teleToLocation(player.getX(), player.getY(), player.getZ(), true);
+			activeChar.teleToLocation(player.getLocation(), true);
 			activeChar.sendMessage("You're teleporting yourself to character " + player.getName());
 		}
 		showMainPage(activeChar);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminSpawn.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminSpawn.java
index 639c7baeb3..fedf4554f3 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminSpawn.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminSpawn.java
@@ -341,7 +341,7 @@ public class AdminSpawn implements IAdminCommandHandler
 				{
 					if (showposition && (npc != null))
 					{
-						activeChar.teleToLocation(npc.getX(), npc.getY(), npc.getZ(), true);
+						activeChar.teleToLocation(npc.getLocation(), true);
 					}
 					else
 					{
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminTeleport.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminTeleport.java
index d6300368e5..43463609c4 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminTeleport.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminTeleport.java
@@ -198,7 +198,7 @@ public class AdminTeleport implements IAdminCommandHandler
 				L2PcInstance player = L2World.getInstance().getPlayer(targetName);
 				if (player != null)
 				{
-					teleportCharacter(player, activeChar.getX(), activeChar.getY(), activeChar.getZ(), activeChar);
+					teleportCharacter(player, activeChar.getLocation(), activeChar);
 				}
 				else
 				{
@@ -250,7 +250,7 @@ public class AdminTeleport implements IAdminCommandHandler
 				{
 					z -= intVal;
 				}
-				activeChar.teleToLocation(x, y, z, false);
+				activeChar.teleToLocation(new Location(x, y, z));
 				showTeleportWindow(activeChar);
 			}
 			catch (Exception e)
@@ -346,7 +346,7 @@ public class AdminTeleport implements IAdminCommandHandler
 			int z = Integer.parseInt(z1);
 			
 			activeChar.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
-			activeChar.teleToLocation(x, y, z, false);
+			activeChar.teleToLocation(x, y, z);
 			
 			activeChar.sendMessage("You have been teleported to " + Coords);
 		}
@@ -410,7 +410,7 @@ public class AdminTeleport implements IAdminCommandHandler
 				int y = Integer.parseInt(y1);
 				String z1 = st.nextToken();
 				int z = Integer.parseInt(z1);
-				teleportCharacter(player, x, y, z, null);
+				teleportCharacter(player, new Location(x, y, z), null);
 			}
 			catch (NoSuchElementException nsee)
 			{
@@ -420,12 +420,10 @@ public class AdminTeleport implements IAdminCommandHandler
 	
 	/**
 	 * @param player
-	 * @param x
-	 * @param y
-	 * @param z
+	 * @param loc
 	 * @param activeChar
 	 */
-	private void teleportCharacter(L2PcInstance player, int x, int y, int z, L2PcInstance activeChar)
+	private void teleportCharacter(L2PcInstance player, Location loc, L2PcInstance activeChar)
 	{
 		if (player != null)
 		{
@@ -448,7 +446,7 @@ public class AdminTeleport implements IAdminCommandHandler
 				}
 				player.sendMessage("Admin is teleporting you.");
 				player.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
-				player.teleToLocation(x, y, z, true);
+				player.teleToLocation(loc, true);
 			}
 		}
 	}
@@ -486,7 +484,7 @@ public class AdminTeleport implements IAdminCommandHandler
 			int z = player.getZ();
 			
 			activeChar.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
-			activeChar.teleToLocation(x, y, z, true);
+			activeChar.teleToLocation(new Location(x, y, z), true);
 			
 			activeChar.sendMessage("You have teleported to character " + player.getName() + ".");
 		}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/bypasshandlers/Observation.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/bypasshandlers/Observation.java
index f56e12f945..184ba3591d 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/bypasshandlers/Observation.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/bypasshandlers/Observation.java
@@ -23,6 +23,7 @@ import java.util.logging.Level;
 
 import com.l2jserver.gameserver.handler.IBypassHandler;
 import com.l2jserver.gameserver.instancemanager.SiegeManager;
+import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -99,7 +100,7 @@ public class Observation implements IBypassHandler
 		if (player.reduceAdena("Broadcast", cost, npc, true))
 		{
 			// enter mode
-			player.enterObserverMode(x, y, z);
+			player.enterObserverMode(new Location(x, y, z));
 			player.sendPacket(new ItemList(player, false));
 		}
 		player.sendPacket(ActionFailed.STATIC_PACKET);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/CallParty.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/CallParty.java
index ab5ceff9dd..ed58ba0a37 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/CallParty.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/CallParty.java
@@ -60,7 +60,7 @@ public class CallParty extends L2Effect
 				{
 					if (getEffector() != partyMember)
 					{
-						partyMember.teleToLocation(getEffector().getX(), getEffector().getY(), getEffector().getZ(), true);
+						partyMember.teleToLocation(getEffector().getLocation(), true);
 					}
 				}
 			}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/voicedcommandhandlers/Wedding.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/voicedcommandhandlers/Wedding.java
index 2abd64b030..ad9b4fea9c 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/voicedcommandhandlers/Wedding.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/voicedcommandhandlers/Wedding.java
@@ -36,6 +36,7 @@ import com.l2jserver.gameserver.instancemanager.CoupleManager;
 import com.l2jserver.gameserver.instancemanager.GrandBossManager;
 import com.l2jserver.gameserver.instancemanager.SiegeManager;
 import com.l2jserver.gameserver.model.L2World;
+import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.effects.AbnormalEffect;
 import com.l2jserver.gameserver.model.entity.L2Event;
@@ -472,7 +473,7 @@ public class Wedding implements IVoicedCommandHandler
 		activeChar.sendPacket(sg);
 		// End SoE Animation section
 		
-		final EscapeFinalizer ef = new EscapeFinalizer(activeChar, partner.getX(), partner.getY(), partner.getZ(), partner.isIn7sDungeon());
+		final EscapeFinalizer ef = new EscapeFinalizer(activeChar, partner.getLocation(), partner.isIn7sDungeon());
 		// continue execution later
 		activeChar.setSkillCast(ThreadPoolManager.getInstance().scheduleGeneral(ef, teleportTimer));
 		activeChar.forceIsCasting(GameTimeController.getInstance().getGameTicks() + (teleportTimer / GameTimeController.MILLIS_IN_TICK));
@@ -483,17 +484,13 @@ public class Wedding implements IVoicedCommandHandler
 	static class EscapeFinalizer implements Runnable
 	{
 		private final L2PcInstance _activeChar;
-		private final int _partnerx;
-		private final int _partnery;
-		private final int _partnerz;
+		private final Location _partnerLoc;
 		private final boolean _to7sDungeon;
 		
-		EscapeFinalizer(L2PcInstance activeChar, int x, int y, int z, boolean to7sDungeon)
+		EscapeFinalizer(L2PcInstance activeChar, Location loc, boolean to7sDungeon)
 		{
 			_activeChar = activeChar;
-			_partnerx = x;
-			_partnery = y;
-			_partnerz = z;
+			_partnerLoc = loc;
 			_to7sDungeon = to7sDungeon;
 		}
 		
@@ -505,7 +502,7 @@ public class Wedding implements IVoicedCommandHandler
 				return;
 			}
 			
-			if ((SiegeManager.getInstance().getSiege(_partnerx, _partnery, _partnerz) != null) && SiegeManager.getInstance().getSiege(_partnerx, _partnery, _partnerz).getIsInProgress())
+			if ((SiegeManager.getInstance().getSiege(_partnerLoc) != null) && SiegeManager.getInstance().getSiege(_partnerLoc).getIsInProgress())
 			{
 				_activeChar.sendMessage("Your partner is in siege, you can't go to your partner.");
 				return;
@@ -517,7 +514,7 @@ public class Wedding implements IVoicedCommandHandler
 			
 			try
 			{
-				_activeChar.teleToLocation(_partnerx, _partnery, _partnerz);
+				_activeChar.teleToLocation(_partnerLoc);
 			}
 			catch (Exception e)
 			{
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/Deltuva/Deltuva.java b/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/Deltuva/Deltuva.java
index 981839cbdf..c103c990a8 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/Deltuva/Deltuva.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/Deltuva/Deltuva.java
@@ -20,6 +20,7 @@ package hellbound.Deltuva;
 
 import quests.Q00132_MatrasCuriosity.Q00132_MatrasCuriosity;
 
+import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.quest.Quest;
@@ -31,6 +32,8 @@ import com.l2jserver.gameserver.model.quest.QuestState;
 public class Deltuva extends Quest
 {
 	private static final int DELTUVA = 32313;
+	// Location
+	private static final Location TELEPORT = new Location(17934, 283189, -9701);
 	
 	@Override
 	public final String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
@@ -45,7 +48,7 @@ public class Deltuva extends Quest
 			}
 			else
 			{
-				player.teleToLocation(17934, 283189, -9701);
+				player.teleToLocation(TELEPORT);
 			}
 		}
 		return htmltext;
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/Quarry/Quarry.java b/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/Quarry/Quarry.java
index 09744ba23a..e54f5a4294 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/Quarry/Quarry.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/Quarry/Quarry.java
@@ -85,7 +85,7 @@ public class Quarry extends Quest
 					npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE);
 					npc.setAutoAttackable(false);
 					npc.setRHandId(0);
-					npc.teleToLocation(npc.getSpawn().getLocation(), 0);
+					npc.teleToLocation(npc.getSpawn().getLocation());
 					return null;
 				}
 			}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/Shadai/Shadai.java b/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/Shadai/Shadai.java
index b1a2596b22..973d5dc510 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/Shadai/Shadai.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/Shadai/Shadai.java
@@ -20,6 +20,7 @@ package hellbound.Shadai;
 
 import com.l2jserver.gameserver.GameTimeController;
 import com.l2jserver.gameserver.ThreadPoolManager;
+import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.quest.Quest;
 
@@ -30,18 +31,8 @@ public class Shadai extends Quest
 {
 	private static final int SHADAI = 32347;
 	
-	private static final int[] DAY_COORDS =
-	{
-		16882,
-		238952,
-		9776
-	};
-	private static final int[] NIGHT_COORDS =
-	{
-		9064,
-		253037,
-		-1928
-	};
+	private static final Location DAY_COORDS = new Location(16882, 238952, 9776);
+	private static final Location NIGHT_COORDS = new Location(9064, 253037, -1928);
 	
 	@Override
 	public final String onSpawn(L2Npc npc)
@@ -56,24 +47,22 @@ public class Shadai extends Quest
 	
 	protected static void validatePosition(L2Npc npc)
 	{
-		int[] coords = DAY_COORDS;
+		Location coords = DAY_COORDS;
 		boolean mustRevalidate = false;
-		if ((npc.getX() != NIGHT_COORDS[0]) && GameTimeController.getInstance().isNight())
+		if ((npc.getX() != NIGHT_COORDS.getX()) && GameTimeController.getInstance().isNight())
 		{
 			coords = NIGHT_COORDS;
 			mustRevalidate = true;
 		}
-		else if ((npc.getX() != DAY_COORDS[0]) && !GameTimeController.getInstance().isNight())
+		else if ((npc.getX() != DAY_COORDS.getX()) && !GameTimeController.getInstance().isNight())
 		{
 			mustRevalidate = true;
 		}
 		
 		if (mustRevalidate)
 		{
-			npc.getSpawn().setX(coords[0]);
-			npc.getSpawn().setY(coords[1]);
-			npc.getSpawn().setZ(coords[2]);
-			npc.teleToLocation(coords[0], coords[1], coords[2]);
+			npc.getSpawn().setLocation(coords);
+			npc.teleToLocation(coords);
 		}
 	}
 	
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/TowerOfInfinitum/TowerOfInfinitum.java b/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/TowerOfInfinitum/TowerOfInfinitum.java
index bc30e72407..1d1ea93023 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/TowerOfInfinitum/TowerOfInfinitum.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/hellbound/TowerOfInfinitum/TowerOfInfinitum.java
@@ -96,6 +96,8 @@ public class TowerOfInfinitum extends Quest
 		});
 	}
 	
+	private static final Location ENTER_LOCATION = new Location(-22204, 277056, -15023);
+	
 	@Override
 	public final String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
 	{
@@ -118,7 +120,7 @@ public class TowerOfInfinitum extends Quest
 					}
 					for (L2PcInstance partyMember : party.getMembers())
 					{
-						partyMember.teleToLocation(-22204, 277056, -15023, true);
+						partyMember.teleToLocation(ENTER_LOCATION, true);
 					}
 					htmltext = null;
 				}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/instances/ChambersOfDelusion/Chamber.java b/L2J_DataPack_BETA/dist/game/data/scripts/instances/ChambersOfDelusion/Chamber.java
index 853aa5c044..5b5bc5dccf 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/instances/ChambersOfDelusion/Chamber.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/instances/ChambersOfDelusion/Chamber.java
@@ -327,7 +327,7 @@ public abstract class Chamber extends Quest
 			if (world.getInstanceId() == partyMember.getInstanceId())
 			{
 				partyMember.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
-				partyMember.teleToLocation(ROOM_ENTER_POINTS[newRoom], 50);
+				partyMember.teleToLocation(ROOM_ENTER_POINTS[newRoom], true);
 			}
 		}
 		
@@ -465,7 +465,7 @@ public abstract class Chamber extends Quest
 						int x = Integer.parseInt(coords[0]);
 						int y = Integer.parseInt(coords[1]);
 						int z = Integer.parseInt(coords[2]);
-						ret = new Location(x, y, z);
+						ret.setLocation(new Location(x, y, z));
 					}
 					catch (Exception e)
 					{
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/instances/CrystalCaverns/CrystalCaverns.java b/L2J_DataPack_BETA/dist/game/data/scripts/instances/CrystalCaverns/CrystalCaverns.java
index 34727e457d..a8c73cacf2 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/instances/CrystalCaverns/CrystalCaverns.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/instances/CrystalCaverns/CrystalCaverns.java
@@ -2891,11 +2891,11 @@ public class CrystalCaverns extends Quest
 				{
 					int x = (int) (radius * Math.cos((i * 2 * Math.PI) / members));
 					int y = (int) (radius * Math.sin((i++ * 2 * Math.PI) / members));
-					p.teleToLocation(153571 + x, 142075 + y, -12737);
+					p.teleToLocation(new Location(153571 + x, 142075 + y, -12737));
 					L2Summon pet = p.getSummon();
 					if (pet != null)
 					{
-						pet.teleToLocation(153571 + x, 142075 + y, -12737, true);
+						pet.teleToLocation(new Location(153571 + x, 142075 + y, -12737), true);
 						pet.broadcastPacket(new ValidateLocation(pet));
 					}
 					p.setIsParalyzed(true);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/instances/HellboundTown/HellboundTown.java b/L2J_DataPack_BETA/dist/game/data/scripts/instances/HellboundTown/HellboundTown.java
index 403342ef70..b8476bf1f3 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/instances/HellboundTown/HellboundTown.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/instances/HellboundTown/HellboundTown.java
@@ -458,7 +458,7 @@ public class HellboundTown extends Quest
 					
 					if ((world.spawnedAmaskari != null) && !world.spawnedAmaskari.isDead())
 					{
-						world.spawnedAmaskari.teleToLocation(_caller.getX(), _caller.getY(), _caller.getZ());
+						world.spawnedAmaskari.teleToLocation(_caller.getLocation());
 						world.spawnedAmaskari.broadcastPacket(new NpcSay(world.spawnedAmaskari.getObjectId(), Say2.NPC_ALL, world.spawnedAmaskari.getId(), NpcStringId.ILL_MAKE_YOU_FEEL_SUFFERING_LIKE_A_FLAME_THAT_IS_NEVER_EXTINGUISHED));
 					}
 				}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/instances/HideoutOfTheDawn/HideoutOfTheDawn.java b/L2J_DataPack_BETA/dist/game/data/scripts/instances/HideoutOfTheDawn/HideoutOfTheDawn.java
index 228aea366b..edc8c227f6 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/instances/HideoutOfTheDawn/HideoutOfTheDawn.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/instances/HideoutOfTheDawn/HideoutOfTheDawn.java
@@ -71,7 +71,7 @@ public class HideoutOfTheDawn extends Quest
 				final InstanceWorld world = InstanceManager.getInstance().getPlayerWorld(talker);
 				world.removeAllowed(talker.getObjectId());
 				talker.setInstanceId(0);
-				talker.teleToLocation(JAINA_LOC, 0);
+				talker.teleToLocation(JAINA_LOC);
 				return "32617-01.htm";
 			}
 		}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10288_SecretMission/Q10288_SecretMission.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10288_SecretMission/Q10288_SecretMission.java
index dc22d49467..cab795dfaa 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10288_SecretMission/Q10288_SecretMission.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q10288_SecretMission/Q10288_SecretMission.java
@@ -18,6 +18,7 @@
  */
 package quests.Q10288_SecretMission;
 
+import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.quest.Quest;
@@ -36,6 +37,8 @@ public class Q10288_SecretMission extends Quest
 	private static final int GREYMORE = 32757;
 	// Item
 	private static final int LETTER = 15529;
+	// Location
+	private static final Location TELEPORT = new Location(118833, -80589, -2688);
 	
 	public Q10288_SecretMission(int questId, String name, String descr)
 	{
@@ -86,7 +89,7 @@ public class Q10288_SecretMission extends Quest
 			case "teleport":
 				if ((npc.getId() == AQUILANI) && st.isCompleted())
 				{
-					player.teleToLocation(118833, -80589, -2688);
+					player.teleToLocation(TELEPORT);
 					return null;
 				}
 		}
-- 
GitLab