From 462613f2526cce19bad84c9c0dfafb2c3ff205b8 Mon Sep 17 00:00:00 2001
From: Zoey76 <zoey_76@msn.com>
Date: Sun, 15 Dec 2013 16:12:00 +0000
Subject: [PATCH] BETA: Special Camera rework to accept post-C4 parameters in
 retail like order. 	* Added 3 new methods to `Quest` class to be able to
 easily handle cameras in scripts.

Tested by: FBIagent, janiko
Thanks to: Nos
---
 .../data/scripts/ai/individual/Antharas.java  | 12 ++--
 .../data/scripts/ai/individual/Beleth.java    | 56 +++++++--------
 .../data/scripts/ai/individual/DrChaos.java   |  6 +-
 .../data/scripts/ai/individual/Valakas.java   | 36 +++++-----
 .../admincommandhandlers/AdminCamera.java     | 56 ++++++++++++---
 .../CrystalCaverns/CrystalCaverns.java        |  8 +--
 .../FinalEmperialTomb/FinalEmperialTomb.java  | 68 +++++++++----------
 7 files changed, 139 insertions(+), 103 deletions(-)

diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Antharas.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Antharas.java
index 2bd37678fc..1535ba3b87 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Antharas.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Antharas.java
@@ -446,7 +446,7 @@ public final class Antharas extends AbstractNpcAI
 					break;
 				case 2:
 					// Set camera.
-					broadcastPacket(new SpecialCamera(_antharas.getObjectId(), 700, 13, -19, 0, 20000, 0, 0, 1, 0));
+					broadcastPacket(new SpecialCamera(_antharas, 700, 13, -19, 0, 10000, 20000, 0, 0, 0, 0, 0));
 					
 					// Set next task.
 					if (_socialTask != null)
@@ -459,7 +459,7 @@ public final class Antharas extends AbstractNpcAI
 				
 				case 3:
 					// Do social.
-					broadcastPacket(new SpecialCamera(_antharas.getObjectId(), 700, 13, 0, 6000, 20000, 0, 0, 1, 0));
+					broadcastPacket(new SpecialCamera(_antharas, 700, 13, 0, 6000, 10000, 20000, 0, 0, 0, 0, 0));
 					// Set next task.
 					if (_socialTask != null)
 					{
@@ -469,7 +469,7 @@ public final class Antharas extends AbstractNpcAI
 					_socialTask = ThreadPoolManager.getInstance().scheduleGeneral(new AntharasSpawn(4), 10000);
 					break;
 				case 4:
-					broadcastPacket(new SpecialCamera(_antharas.getObjectId(), 3700, 0, -3, 0, 10000, 0, 0, 1, 0));
+					broadcastPacket(new SpecialCamera(_antharas, 3700, 0, -3, 0, 10000, 10000, 0, 0, 0, 0, 0));
 					// Set next task.
 					if (_socialTask != null)
 					{
@@ -481,7 +481,7 @@ public final class Antharas extends AbstractNpcAI
 				
 				case 5:
 					// Do social.
-					broadcastPacket(new SpecialCamera(_antharas.getObjectId(), 1100, 0, -3, 22000, 30000, 0, 0, 1, 0));
+					broadcastPacket(new SpecialCamera(_antharas, 1100, 0, -3, 22000, 10000, 30000, 0, 0, 0, 0, 0));
 					// Set next task.
 					if (_socialTask != null)
 					{
@@ -493,7 +493,7 @@ public final class Antharas extends AbstractNpcAI
 				
 				case 6:
 					// Set camera.
-					broadcastPacket(new SpecialCamera(_antharas.getObjectId(), 1100, 0, -3, 300, 7000, 0, 0, 1, 0));
+					broadcastPacket(new SpecialCamera(_antharas, 1100, 0, -3, 300, 10000, 7000, 0, 0, 0, 0, 0));
 					// Set next task.
 					if (_socialTask != null)
 					{
@@ -915,7 +915,7 @@ public final class Antharas extends AbstractNpcAI
 	{
 		if ((npc.getId() == 29019) || (npc.getId() == 29066) || (npc.getId() == 29067) || (npc.getId() == 29068))
 		{
-			broadcastPacket(new SpecialCamera(_antharas.getObjectId(), 1200, 20, -10, 0, 13000, 0, 0, 1, 0));
+			broadcastPacket(new SpecialCamera(_antharas, 1200, 20, -10, 0, 10000, 13000, 0, 0, 0, 0, 0));
 			npc.broadcastPacket(new PlaySound(1, "BS01_D", 1, npc.getObjectId(), npc.getX(), npc.getY(), npc.getZ()));
 			_cubeSpawnTask = ThreadPoolManager.getInstance().scheduleGeneral(new CubeSpawn(0), 10000);
 			GrandBossManager.getInstance().setBossStatus(npc.getId(), DEAD);
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 a29468b71e..4cf61a1bfc 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
@@ -200,24 +200,24 @@ public final class Beleth extends AbstractNpcAI
 						CAMERA3 = spawn(29122, new Location(16323, 213170, -9357, 0, instanceId));
 						CAMERA4 = spawn(29123, new Location(16323, 214917, -9356, 0, instanceId));
 						ZONE.broadcastPacket(new PlaySound(1, "BS07_A", 1, CAMERA.getObjectId(), CAMERA.getX(), CAMERA.getY(), CAMERA.getZ()));
-						ZONE.broadcastPacket(new SpecialCamera(CAMERA.getObjectId(), 400, 75, -25, 0, 2500, 0, 0, 1, 0));
-						ZONE.broadcastPacket(new SpecialCamera(CAMERA.getObjectId(), 400, 75, -25, 0, 2500, 0, 0, 1, 0));
+						ZONE.broadcastPacket(new SpecialCamera(CAMERA, 400, 75, -25, 0, 2500, 0, 0, 1, 0, 0));
+						ZONE.broadcastPacket(new SpecialCamera(CAMERA, 400, 75, -25, 0, 2500, 0, 0, 1, 0, 0));
 						ThreadPoolManager.getInstance().scheduleGeneral(new Spawn(2), 300);
 						break;
 					case 2:
-						ZONE.broadcastPacket(new SpecialCamera(CAMERA.getObjectId(), 1800, -45, -45, 5000, 5000, 0, 0, 1, 0));
+						ZONE.broadcastPacket(new SpecialCamera(CAMERA, 1800, -45, -45, 5000, 5000, 0, 0, 1, 0, 0));
 						ThreadPoolManager.getInstance().scheduleGeneral(new Spawn(3), 4900);
 						break;
 					case 3:
-						ZONE.broadcastPacket(new SpecialCamera(CAMERA.getObjectId(), 2500, -120, -45, 5000, 5000, 0, 0, 1, 0));
+						ZONE.broadcastPacket(new SpecialCamera(CAMERA, 2500, -120, -45, 5000, 5000, 0, 0, 1, 0, 0));
 						ThreadPoolManager.getInstance().scheduleGeneral(new Spawn(4), 4900);
 						break;
 					case 4:
-						ZONE.broadcastPacket(new SpecialCamera(CAMERA2.getObjectId(), 2200, 130, 0, 0, 1500, -20, 15, 1, 0));
+						ZONE.broadcastPacket(new SpecialCamera(CAMERA2, 2200, 130, 0, 0, 1500, -20, 15, 1, 0, 0));
 						ThreadPoolManager.getInstance().scheduleGeneral(new Spawn(5), 1400);
 						break;
 					case 5:
-						ZONE.broadcastPacket(new SpecialCamera(CAMERA2.getObjectId(), 2300, 100, 0, 2000, 4500, 0, 10, 1, 0));
+						ZONE.broadcastPacket(new SpecialCamera(CAMERA2, 2300, 100, 0, 2000, 4500, 0, 10, 1, 0, 0));
 						ThreadPoolManager.getInstance().scheduleGeneral(new Spawn(6), 2500);
 						break;
 					case 6:
@@ -228,17 +228,17 @@ public final class Beleth extends AbstractNpcAI
 						ThreadPoolManager.getInstance().scheduleGeneral(new Spawn(7), 1700);
 						break;
 					case 7:
-						ZONE.broadcastPacket(new SpecialCamera(CAMERA4.getObjectId(), 1500, 210, 0, 0, 1500, 0, 0, 1, 0));
-						ZONE.broadcastPacket(new SpecialCamera(CAMERA4.getObjectId(), 900, 255, 0, 5000, 6500, 0, 10, 1, 0));
+						ZONE.broadcastPacket(new SpecialCamera(CAMERA4, 1500, 210, 0, 0, 1500, 0, 0, 1, 0, 0));
+						ZONE.broadcastPacket(new SpecialCamera(CAMERA4, 900, 255, 0, 5000, 6500, 0, 10, 1, 0, 0));
 						ThreadPoolManager.getInstance().scheduleGeneral(new Spawn(8), 6000);
 						break;
 					case 8:
 						spawn(29125, new Location(16323, 214917, -9356, 0, instanceId));
-						ZONE.broadcastPacket(new SpecialCamera(CAMERA4.getObjectId(), 900, 255, 0, 0, 1500, 0, 10, 1, 0));
+						ZONE.broadcastPacket(new SpecialCamera(CAMERA4, 900, 255, 0, 0, 1500, 0, 10, 1, 0, 0));
 						ThreadPoolManager.getInstance().scheduleGeneral(new Spawn(9), 1000);
 						break;
 					case 9:
-						ZONE.broadcastPacket(new SpecialCamera(CAMERA4.getObjectId(), 1000, 255, 0, 7000, 17000, 0, 25, 1, 0));
+						ZONE.broadcastPacket(new SpecialCamera(CAMERA4, 1000, 255, 0, 7000, 17000, 0, 25, 1, 0, 0));
 						ThreadPoolManager.getInstance().scheduleGeneral(new Spawn(10), 3000);
 						break;
 					case 10:
@@ -259,20 +259,20 @@ public final class Beleth extends AbstractNpcAI
 						ThreadPoolManager.getInstance().scheduleGeneral(new Spawn(12), 6800);
 						break;
 					case 12:
-						ZONE.broadcastPacket(new SpecialCamera(BELETH.getObjectId(), 0, 270, -5, 0, 4000, 0, 0, 1, 0));
+						ZONE.broadcastPacket(new SpecialCamera(BELETH, 0, 270, -5, 0, 4000, 0, 0, 1, 0, 0));
 						ThreadPoolManager.getInstance().scheduleGeneral(new Spawn(13), 3500);
 						break;
 					case 13:
-						ZONE.broadcastPacket(new SpecialCamera(BELETH.getObjectId(), 800, 270, 10, 3000, 6000, 0, 0, 1, 0));
+						ZONE.broadcastPacket(new SpecialCamera(BELETH, 800, 270, 10, 3000, 6000, 0, 0, 1, 0, 0));
 						ThreadPoolManager.getInstance().scheduleGeneral(new Spawn(14), 5000);
 						break;
 					case 14:
-						ZONE.broadcastPacket(new SpecialCamera(CAMERA3.getObjectId(), 100, 270, 15, 0, 5000, 0, 0, 1, 0));
-						ZONE.broadcastPacket(new SpecialCamera(CAMERA3.getObjectId(), 100, 270, 15, 0, 5000, 0, 0, 1, 0));
+						ZONE.broadcastPacket(new SpecialCamera(CAMERA3, 100, 270, 15, 0, 5000, 0, 0, 1, 0, 0));
+						ZONE.broadcastPacket(new SpecialCamera(CAMERA3, 100, 270, 15, 0, 5000, 0, 0, 1, 0, 0));
 						ThreadPoolManager.getInstance().scheduleGeneral(new Spawn(15), 100);
 						break;
 					case 15:
-						ZONE.broadcastPacket(new SpecialCamera(CAMERA3.getObjectId(), 100, 270, 15, 3000, 6000, 0, 5, 1, 0));
+						ZONE.broadcastPacket(new SpecialCamera(CAMERA3, 100, 270, 15, 3000, 6000, 0, 5, 1, 0, 0));
 						ThreadPoolManager.getInstance().scheduleGeneral(new Spawn(16), 1400);
 						break;
 					case 16:
@@ -284,11 +284,11 @@ public final class Beleth extends AbstractNpcAI
 						ThreadPoolManager.getInstance().scheduleGeneral(new Spawn(18), 2000);
 						break;
 					case 18:
-						ZONE.broadcastPacket(new SpecialCamera(CAMERA3.getObjectId(), 700, 270, 20, 1500, 8000, 0, 0, 1, 0));
+						ZONE.broadcastPacket(new SpecialCamera(CAMERA3, 700, 270, 20, 1500, 8000, 0, 0, 1, 0, 0));
 						ThreadPoolManager.getInstance().scheduleGeneral(new Spawn(19), 6900);
 						break;
 					case 19:
-						ZONE.broadcastPacket(new SpecialCamera(CAMERA3.getObjectId(), 40, 260, 0, 0, 4000, 0, 0, 1, 0));
+						ZONE.broadcastPacket(new SpecialCamera(CAMERA3, 40, 260, 0, 0, 4000, 0, 0, 1, 0, 0));
 						for (L2Npc blth : MINIONS)
 						{
 							blth.spawnMe();
@@ -296,11 +296,11 @@ public final class Beleth extends AbstractNpcAI
 						ThreadPoolManager.getInstance().scheduleGeneral(new Spawn(20), 3000);
 						break;
 					case 20:
-						ZONE.broadcastPacket(new SpecialCamera(CAMERA3.getObjectId(), 40, 280, 0, 0, 4000, 5, 0, 1, 0));
+						ZONE.broadcastPacket(new SpecialCamera(CAMERA3, 40, 280, 0, 0, 4000, 5, 0, 1, 0, 0));
 						ThreadPoolManager.getInstance().scheduleGeneral(new Spawn(21), 3000);
 						break;
 					case 21:
-						ZONE.broadcastPacket(new SpecialCamera(CAMERA3.getObjectId(), 5, 250, 5, 0, 13000, 20, 15, 1, 0));
+						ZONE.broadcastPacket(new SpecialCamera(CAMERA3, 5, 250, 5, 0, 13000, 20, 15, 1, 0, 0));
 						ThreadPoolManager.getInstance().scheduleGeneral(new Spawn(22), 1000);
 						break;
 					case 22:
@@ -340,23 +340,23 @@ public final class Beleth extends AbstractNpcAI
 						BELETH.doDie(null);
 						CAMERA = spawn(29122, new Location(16323, 213170, -9357, 0, instanceId));
 						CAMERA.broadcastPacket(new PlaySound(1, "BS07_D", 1, CAMERA.getObjectId(), CAMERA.getX(), CAMERA.getY(), CAMERA.getZ()));
-						ZONE.broadcastPacket(new SpecialCamera(CAMERA.getObjectId(), 400, 290, 25, 0, 10000, 0, 0, 1, 0));
-						ZONE.broadcastPacket(new SpecialCamera(CAMERA.getObjectId(), 400, 290, 25, 0, 10000, 0, 0, 1, 0));
-						ZONE.broadcastPacket(new SpecialCamera(CAMERA.getObjectId(), 400, 110, 25, 4000, 10000, 0, 0, 1, 0));
+						ZONE.broadcastPacket(new SpecialCamera(CAMERA, 400, 290, 25, 0, 10000, 0, 0, 1, 0, 0));
+						ZONE.broadcastPacket(new SpecialCamera(CAMERA, 400, 290, 25, 0, 10000, 0, 0, 1, 0, 0));
+						ZONE.broadcastPacket(new SpecialCamera(CAMERA, 400, 110, 25, 4000, 10000, 0, 0, 1, 0, 0));
 						ZONE.broadcastPacket(new SocialAction(BELETH.getObjectId(), 5));
 						ThreadPoolManager.getInstance().scheduleGeneral(new Spawn(28), 4000);
 						break;
 					case 28:
-						ZONE.broadcastPacket(new SpecialCamera(CAMERA.getObjectId(), 400, 295, 25, 4000, 5000, 0, 0, 1, 0));
+						ZONE.broadcastPacket(new SpecialCamera(CAMERA, 400, 295, 25, 4000, 5000, 0, 0, 1, 0, 0));
 						ThreadPoolManager.getInstance().scheduleGeneral(new Spawn(29), 4500);
 						break;
 					case 29:
-						ZONE.broadcastPacket(new SpecialCamera(CAMERA.getObjectId(), 400, 295, 10, 4000, 11000, 0, 25, 1, 0));
+						ZONE.broadcastPacket(new SpecialCamera(CAMERA, 400, 295, 10, 4000, 11000, 0, 25, 1, 0, 0));
 						ThreadPoolManager.getInstance().scheduleGeneral(new Spawn(30), 9000);
 						break;
 					case 30:
-						ZONE.broadcastPacket(new SpecialCamera(CAMERA.getObjectId(), 250, 90, 25, 0, 1000, 0, 0, 1, 0));
-						ZONE.broadcastPacket(new SpecialCamera(CAMERA.getObjectId(), 250, 90, 25, 0, 10000, 0, 0, 1, 0));
+						ZONE.broadcastPacket(new SpecialCamera(CAMERA, 250, 90, 25, 0, 1000, 0, 0, 1, 0, 0));
+						ZONE.broadcastPacket(new SpecialCamera(CAMERA, 250, 90, 25, 0, 10000, 0, 0, 1, 0, 0));
 						ThreadPoolManager.getInstance().scheduleGeneral(new Spawn(31), 2000);
 						break;
 					case 31:
@@ -366,8 +366,8 @@ public final class Beleth extends AbstractNpcAI
 						ThreadPoolManager.getInstance().scheduleGeneral(new Spawn(32), 3500);
 						break;
 					case 32:
-						ZONE.broadcastPacket(new SpecialCamera(CAMERA2.getObjectId(), 800, 180, 0, 0, 4000, 0, 10, 1, 0));
-						ZONE.broadcastPacket(new SpecialCamera(CAMERA2.getObjectId(), 800, 180, 0, 0, 4000, 0, 10, 1, 0));
+						ZONE.broadcastPacket(new SpecialCamera(CAMERA2, 800, 180, 0, 0, 4000, 0, 10, 1, 0, 0));
+						ZONE.broadcastPacket(new SpecialCamera(CAMERA2, 800, 180, 0, 0, 4000, 0, 10, 1, 0, 0));
 						L2DoorInstance door2 = DoorTable.getInstance().getDoor(20240002);
 						door2.openMe();
 						ZONE.broadcastPacket(new StaticObject(door2, false));
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 8e297fbb4d..ed9cd11b88 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
@@ -66,7 +66,7 @@ public final class DrChaos extends Quest
 			if (machine != null)
 			{
 				npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, machine);
-				machine.broadcastPacket(new SpecialCamera(machine.getObjectId(), 1, -200, 15, 10000, 20000, 0, 0, 1, 0));
+				machine.broadcastPacket(new SpecialCamera(machine, 1, -200, 15, 10000, 1000, 20000, 0, 0, 0, 0, 0));
 			}
 			else
 			{
@@ -80,7 +80,7 @@ public final class DrChaos extends Quest
 		}
 		else if (event.equalsIgnoreCase("3"))
 		{
-			npc.broadcastPacket(new SpecialCamera(npc.getObjectId(), 1, -150, 10, 3000, 20000, 0, 0, 1, 0));
+			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"))
@@ -102,7 +102,7 @@ public final class DrChaos extends Quest
 		}
 		else if (event.equalsIgnoreCase("6"))
 		{
-			npc.broadcastPacket(new SpecialCamera(npc.getObjectId(), 30, -200, 20, 6000, 8000, 0, 0, 1, 0));
+			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/Valakas.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Valakas.java
index e16a73e726..2c66bb216a 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
@@ -274,39 +274,39 @@ public final class Valakas extends AbstractNpcAI
 			// Spawn cinematic, regen_task and choose of skill.
 			else if (event.equalsIgnoreCase("spawn_1"))
 			{
-				ZONE.broadcastPacket(new SpecialCamera(npc.getObjectId(), 1800, 180, -1, 1500, 10000, 0, 0, 1, 0));
+				ZONE.broadcastPacket(new SpecialCamera(npc, 1800, 180, -1, 1500, 15000, 10000, 0, 0, 1, 0, 0));
 			}
 			else if (event.equalsIgnoreCase("spawn_2"))
 			{
-				ZONE.broadcastPacket(new SpecialCamera(npc.getObjectId(), 1300, 180, -5, 3000, 10000, 0, -5, 1, 0));
+				ZONE.broadcastPacket(new SpecialCamera(npc, 1300, 180, -5, 3000, 15000, 10000, 0, -5, 1, 0, 0));
 			}
 			else if (event.equalsIgnoreCase("spawn_3"))
 			{
-				ZONE.broadcastPacket(new SpecialCamera(npc.getObjectId(), 500, 180, -8, 600, 10000, 0, 60, 1, 0));
+				ZONE.broadcastPacket(new SpecialCamera(npc, 500, 180, -8, 600, 15000, 10000, 0, 60, 1, 0, 0));
 			}
 			else if (event.equalsIgnoreCase("spawn_4"))
 			{
-				ZONE.broadcastPacket(new SpecialCamera(npc.getObjectId(), 800, 180, -8, 2700, 10000, 0, 30, 1, 0));
+				ZONE.broadcastPacket(new SpecialCamera(npc, 800, 180, -8, 2700, 15000, 10000, 0, 30, 1, 0, 0));
 			}
 			else if (event.equalsIgnoreCase("spawn_5"))
 			{
-				ZONE.broadcastPacket(new SpecialCamera(npc.getObjectId(), 200, 250, 70, 0, 10000, 30, 80, 1, 0));
+				ZONE.broadcastPacket(new SpecialCamera(npc, 200, 250, 70, 0, 15000, 10000, 30, 80, 1, 0, 0));
 			}
 			else if (event.equalsIgnoreCase("spawn_6"))
 			{
-				ZONE.broadcastPacket(new SpecialCamera(npc.getObjectId(), 1100, 250, 70, 2500, 10000, 30, 80, 1, 0));
+				ZONE.broadcastPacket(new SpecialCamera(npc, 1100, 250, 70, 2500, 15000, 10000, 30, 80, 1, 0, 0));
 			}
 			else if (event.equalsIgnoreCase("spawn_7"))
 			{
-				ZONE.broadcastPacket(new SpecialCamera(npc.getObjectId(), 700, 150, 30, 0, 10000, -10, 60, 1, 0));
+				ZONE.broadcastPacket(new SpecialCamera(npc, 700, 150, 30, 0, 15000, 10000, -10, 60, 1, 0, 0));
 			}
 			else if (event.equalsIgnoreCase("spawn_8"))
 			{
-				ZONE.broadcastPacket(new SpecialCamera(npc.getObjectId(), 1200, 150, 20, 2900, 10000, -10, 30, 1, 0));
+				ZONE.broadcastPacket(new SpecialCamera(npc, 1200, 150, 20, 2900, 15000, 10000, -10, 30, 1, 0, 0));
 			}
 			else if (event.equalsIgnoreCase("spawn_9"))
 			{
-				ZONE.broadcastPacket(new SpecialCamera(npc.getObjectId(), 750, 170, -10, 3400, 4000, 10, -15, 1, 0));
+				ZONE.broadcastPacket(new SpecialCamera(npc, 750, 170, -10, 3400, 15000, 4000, 10, -15, 1, 0, 0));
 			}
 			else if (event.equalsIgnoreCase("spawn_10"))
 			{
@@ -319,35 +319,35 @@ public final class Valakas extends AbstractNpcAI
 			// Death cinematic, spawn of Teleport Cubes.
 			else if (event.equalsIgnoreCase("die_1"))
 			{
-				ZONE.broadcastPacket(new SpecialCamera(npc.getObjectId(), 2000, 130, -1, 0, 10000, 0, 0, 1, 1));
+				ZONE.broadcastPacket(new SpecialCamera(npc, 2000, 130, -1, 0, 15000, 10000, 0, 0, 1, 1, 0));
 			}
 			else if (event.equalsIgnoreCase("die_2"))
 			{
-				ZONE.broadcastPacket(new SpecialCamera(npc.getObjectId(), 1100, 210, -5, 3000, 10000, -13, 0, 1, 1));
+				ZONE.broadcastPacket(new SpecialCamera(npc, 1100, 210, -5, 3000, 15000, 10000, -13, 0, 1, 1, 0));
 			}
 			else if (event.equalsIgnoreCase("die_3"))
 			{
-				ZONE.broadcastPacket(new SpecialCamera(npc.getObjectId(), 1300, 200, -8, 3000, 10000, 0, 15, 1, 1));
+				ZONE.broadcastPacket(new SpecialCamera(npc, 1300, 200, -8, 3000, 15000, 10000, 0, 15, 1, 1, 0));
 			}
 			else if (event.equalsIgnoreCase("die_4"))
 			{
-				ZONE.broadcastPacket(new SpecialCamera(npc.getObjectId(), 1000, 190, 0, 500, 10000, 0, 10, 1, 1));
+				ZONE.broadcastPacket(new SpecialCamera(npc, 1000, 190, 0, 500, 15000, 10000, 0, 10, 1, 1, 0));
 			}
 			else if (event.equalsIgnoreCase("die_5"))
 			{
-				ZONE.broadcastPacket(new SpecialCamera(npc.getObjectId(), 1700, 120, 0, 2500, 10000, 12, 40, 1, 1));
+				ZONE.broadcastPacket(new SpecialCamera(npc, 1700, 120, 0, 2500, 15000, 10000, 12, 40, 1, 1, 0));
 			}
 			else if (event.equalsIgnoreCase("die_6"))
 			{
-				ZONE.broadcastPacket(new SpecialCamera(npc.getObjectId(), 1700, 20, 0, 700, 10000, 10, 10, 1, 1));
+				ZONE.broadcastPacket(new SpecialCamera(npc, 1700, 20, 0, 700, 15000, 10000, 10, 10, 1, 1, 0));
 			}
 			else if (event.equalsIgnoreCase("die_7"))
 			{
-				ZONE.broadcastPacket(new SpecialCamera(npc.getObjectId(), 1700, 10, 0, 1000, 10000, 20, 70, 1, 1));
+				ZONE.broadcastPacket(new SpecialCamera(npc, 1700, 10, 0, 1000, 15000, 10000, 20, 70, 1, 1, 0));
 			}
 			else if (event.equalsIgnoreCase("die_8"))
 			{
-				ZONE.broadcastPacket(new SpecialCamera(npc.getObjectId(), 1700, 10, 0, 300, 250, 20, -20, 1, 1));
+				ZONE.broadcastPacket(new SpecialCamera(npc, 1700, 10, 0, 300, 15000, 250, 20, -20, 1, 1, 0));
 				
 				for (Location loc : TELEPORT_CUBE_LOCATIONS)
 				{
@@ -428,7 +428,7 @@ public final class Valakas extends AbstractNpcAI
 		
 		// Launch death animation.
 		ZONE.broadcastPacket(new PlaySound(1, "B03_D", 0, 0, 0, 0, 0));
-		ZONE.broadcastPacket(new SpecialCamera(npc.getObjectId(), 1200, 20, -10, 0, 13000, 0, 0, 1, 0));
+		ZONE.broadcastPacket(new SpecialCamera(npc, 1200, 20, -10, 0, 10000, 13000, 0, 0, 0, 0, 0));
 		
 		startQuestTimer("die_1", 300, npc, null); // 300
 		startQuestTimer("die_2", 600, npc, null); // 300
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminCamera.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminCamera.java
index 49946bd6ed..aa3899388d 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminCamera.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminCamera.java
@@ -21,29 +21,65 @@ package handlers.admincommandhandlers;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.network.serverpackets.SpecialCamera;
+import com.l2jserver.gameserver.model.quest.Quest;
+import com.l2jserver.gameserver.network.SystemMessageId;
 
+/**
+ * Camera commands.
+ * @author Zoey76
+ */
 public class AdminCamera implements IAdminCommandHandler
 {
 	private static final String[] ADMIN_COMMANDS =
 	{
-		"admin_camera"
+		"admin_cam",
+		"admin_camex",
+		"admin_cam3"
 	};
 	
 	@Override
 	public boolean useAdminCommand(String command, L2PcInstance activeChar)
 	{
-		try
+		if ((activeChar.getTarget() == null) || !activeChar.getTarget().isCharacter())
 		{
-			final L2Character target = (L2Character) activeChar.getTarget();
-			final String[] com = command.split(" ");
-			
-			target.broadcastPacket(new SpecialCamera(target.getObjectId(), Integer.parseInt(com[1]), Integer.parseInt(com[2]), Integer.parseInt(com[3]), Integer.parseInt(com[4]), Integer.parseInt(com[5]), Integer.parseInt(com[6]), Integer.parseInt(com[7]), Integer.parseInt(com[8]), Integer.parseInt(com[9])));
+			activeChar.sendPacket(SystemMessageId.TARGET_CANT_FOUND);
+			return false;
 		}
-		catch (Exception e)
+		
+		final L2Character target = (L2Character) activeChar.getTarget();
+		final String[] com = command.split(" ");
+		switch (com[0])
 		{
-			activeChar.sendMessage("Usage: //camera dist yaw pitch time duration turn rise widescreen unknown");
-			return false;
+			case "admin_cam":
+			{
+				if (com.length != 12)
+				{
+					activeChar.sendMessage("Usage: //cam force angle1 angle2 time range duration relYaw relPitch isWide relAngle");
+					return false;
+				}
+				Quest.specialCamera(activeChar, target, Integer.parseInt(com[1]), Integer.parseInt(com[2]), Integer.parseInt(com[3]), Integer.parseInt(com[4]), Integer.parseInt(com[5]), Integer.parseInt(com[6]), Integer.parseInt(com[7]), Integer.parseInt(com[8]), Integer.parseInt(com[9]), Integer.parseInt(com[10]));
+				break;
+			}
+			case "admin_camex":
+			{
+				if (com.length != 10)
+				{
+					activeChar.sendMessage("Usage: //camex force angle1 angle2 time duration relYaw relPitch isWide relAngle");
+					return false;
+				}
+				Quest.specialCameraEx(activeChar, target, Integer.parseInt(com[1]), Integer.parseInt(com[2]), Integer.parseInt(com[3]), Integer.parseInt(com[4]), Integer.parseInt(com[5]), Integer.parseInt(com[6]), Integer.parseInt(com[7]), Integer.parseInt(com[8]), Integer.parseInt(com[9]));
+				break;
+			}
+			case "admin_cam3":
+			{
+				if (com.length != 12)
+				{
+					activeChar.sendMessage("Usage: //cam3 force angle1 angle2 time range duration relYaw relPitch isWide relAngle unk");
+					return false;
+				}
+				Quest.specialCamera3(activeChar, target, Integer.parseInt(com[1]), Integer.parseInt(com[2]), Integer.parseInt(com[3]), Integer.parseInt(com[4]), Integer.parseInt(com[5]), Integer.parseInt(com[6]), Integer.parseInt(com[7]), Integer.parseInt(com[8]), Integer.parseInt(com[9]), Integer.parseInt(com[10]), Integer.parseInt(com[11]));
+				break;
+			}
 		}
 		return true;
 	}
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 338b9ac13b..e1c7d76fc0 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
@@ -2220,17 +2220,17 @@ public final class CrystalCaverns extends Quest
 			}
 			else if (event.equalsIgnoreCase("baylorCamera0"))
 			{
-				npc.broadcastPacket(new SpecialCamera(npc.getObjectId(), 500, -45, 170, 5000, 9000, 0, 0, 1, 0));
+				npc.broadcastPacket(new SpecialCamera(npc, 500, -45, 170, 5000, 9000, 0, 0, 1, 0, 0));
 			}
 			else if (event.equalsIgnoreCase("baylorEffect1"))
 			{
-				npc.broadcastPacket(new SpecialCamera(npc.getObjectId(), 300, 0, 120, 2000, 5000, 0, 0, 1, 0));
+				npc.broadcastPacket(new SpecialCamera(npc, 300, 0, 120, 2000, 5000, 0, 0, 1, 0, 0));
 				npc.broadcastSocialAction(3);
 				startQuestTimer("baylorEffect2", 4000, npc, null);
 			}
 			else if (event.equalsIgnoreCase("baylorEffect2"))
 			{
-				npc.broadcastPacket(new SpecialCamera(npc.getObjectId(), 747, 0, 160, 2000, 3000, 0, 0, 1, 0));
+				npc.broadcastPacket(new SpecialCamera(npc, 747, 0, 160, 2000, 3000, 0, 0, 1, 0, 0));
 				npc.broadcastPacket(new MagicSkillUse(npc, npc, 5402, 1, 2000, 0));
 				startQuestTimer("RaidStart", 2000, npc, null);
 			}
@@ -2343,7 +2343,7 @@ public final class CrystalCaverns extends Quest
 				world._baylor = addSpawn(29099, 153572, 142075, -12738, 10800, false, 0, false, world.getInstanceId());
 				world._baylor.setIsParalyzed(true);
 				world._camera = addSpawn(29120, 153273, 141400, -12738, 10800, false, 0, false, world.getInstanceId());
-				world._camera.broadcastPacket(new SpecialCamera(world._camera.getObjectId(), 700, -45, 160, 500, 15200, 0, 0, 1, 0));
+				world._camera.broadcastPacket(new SpecialCamera(world._camera, 700, -45, 160, 500, 15200, 0, 0, 1, 0, 0));
 				startQuestTimer("baylorMinions", 2000, world._baylor, null);
 			}
 			else if (!event.endsWith("Food"))
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/instances/FinalEmperialTomb/FinalEmperialTomb.java b/L2J_DataPack_BETA/dist/game/data/scripts/instances/FinalEmperialTomb/FinalEmperialTomb.java
index e80cff3a47..8c5cedbc3a 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/instances/FinalEmperialTomb/FinalEmperialTomb.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/instances/FinalEmperialTomb/FinalEmperialTomb.java
@@ -1032,9 +1032,9 @@ public final class FinalEmperialTomb extends Quest
 					ThreadPoolManager.getInstance().scheduleGeneral(new IntroTask(_world, 3), 1000);
 					break;
 				case 3:
-					broadCastPacket(_world, new SpecialCamera(_world.overheadDummy.getObjectId(), 0, 75, -89, 0, 100, 0, 0, 1, 0));
-					broadCastPacket(_world, new SpecialCamera(_world.overheadDummy.getObjectId(), 0, 75, -89, 0, 100, 0, 0, 1, 0));
-					broadCastPacket(_world, new SpecialCamera(_world.overheadDummy.getObjectId(), 300, 90, -10, 6500, 7000, 0, 0, 1, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.overheadDummy, 0, 75, -89, 0, 100, 0, 0, 1, 0, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.overheadDummy, 0, 75, -89, 0, 100, 0, 0, 1, 0, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.overheadDummy, 300, 90, -10, 6500, 7000, 0, 0, 1, 0, 0));
 					
 					_world.frintezza = (L2GrandBossInstance) addSpawn(FRINTEZZA, -87780, -155086, -9080, 16384, false, 0, false, _world.getInstanceId());
 					_world.frintezza.setIsImmobilized(true);
@@ -1053,16 +1053,16 @@ public final class FinalEmperialTomb extends Quest
 					ThreadPoolManager.getInstance().scheduleGeneral(new IntroTask(_world, 4), 6500);
 					break;
 				case 4:
-					broadCastPacket(_world, new SpecialCamera(_world.frintezzaDummy.getObjectId(), 1800, 90, 8, 6500, 7000, 0, 0, 1, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.frintezzaDummy, 1800, 90, 8, 6500, 7000, 0, 0, 1, 0, 0));
 					ThreadPoolManager.getInstance().scheduleGeneral(new IntroTask(_world, 5), 900);
 					break;
 				case 5:
-					broadCastPacket(_world, new SpecialCamera(_world.frintezzaDummy.getObjectId(), 140, 90, 10, 2500, 4500, 0, 0, 1, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.frintezzaDummy, 140, 90, 10, 2500, 4500, 0, 0, 1, 0, 0));
 					ThreadPoolManager.getInstance().scheduleGeneral(new IntroTask(_world, 6), 4000);
 					break;
 				case 6:
-					broadCastPacket(_world, new SpecialCamera(_world.frintezza.getObjectId(), 40, 75, -10, 0, 1000, 0, 0, 1, 0));
-					broadCastPacket(_world, new SpecialCamera(_world.frintezza.getObjectId(), 40, 75, -10, 0, 12000, 0, 0, 1, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.frintezza, 40, 75, -10, 0, 1000, 0, 0, 1, 0, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.frintezza, 40, 75, -10, 0, 12000, 0, 0, 1, 0, 0));
 					ThreadPoolManager.getInstance().scheduleGeneral(new IntroTask(_world, 7), 1350);
 					break;
 				case 7:
@@ -1082,13 +1082,13 @@ public final class FinalEmperialTomb extends Quest
 				case 10:
 					broadCastPacket(_world, new SocialAction(_world.demons.get(0).getObjectId(), 1));
 					broadCastPacket(_world, new SocialAction(_world.demons.get(3).getObjectId(), 1));
-					sendPacketX(new SpecialCamera(_world.portraitDummy1.getObjectId(), 1000, 118, 0, 0, 1000, 0, 0, 1, 0), new SpecialCamera(_world.portraitDummy3.getObjectId(), 1000, 62, 0, 0, 1000, 0, 0, 1, 0), -87784);
-					sendPacketX(new SpecialCamera(_world.portraitDummy1.getObjectId(), 1000, 118, 0, 0, 10000, 0, 0, 1, 0), new SpecialCamera(_world.portraitDummy3.getObjectId(), 1000, 62, 0, 0, 10000, 0, 0, 1, 0), -87784);
+					sendPacketX(new SpecialCamera(_world.portraitDummy1, 1000, 118, 0, 0, 1000, 0, 0, 1, 0, 0), new SpecialCamera(_world.portraitDummy3, 1000, 62, 0, 0, 1000, 0, 0, 1, 0, 0), -87784);
+					sendPacketX(new SpecialCamera(_world.portraitDummy1, 1000, 118, 0, 0, 10000, 0, 0, 1, 0, 0), new SpecialCamera(_world.portraitDummy3, 1000, 62, 0, 0, 10000, 0, 0, 1, 0, 0), -87784);
 					ThreadPoolManager.getInstance().scheduleGeneral(new IntroTask(_world, 11), 2000);
 					break;
 				case 11:
-					broadCastPacket(_world, new SpecialCamera(_world.frintezza.getObjectId(), 240, 90, 0, 0, 1000, 0, 0, 1, 0));
-					broadCastPacket(_world, new SpecialCamera(_world.frintezza.getObjectId(), 240, 90, 25, 5500, 10000, 0, 0, 1, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.frintezza, 240, 90, 0, 0, 1000, 0, 0, 1, 0, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.frintezza, 240, 90, 25, 5500, 10000, 0, 0, 1, 0, 0));
 					broadCastPacket(_world, new SocialAction(_world.frintezza.getObjectId(), 3));
 					_world.portraitDummy1.deleteMe();
 					_world.portraitDummy3.deleteMe();
@@ -1097,30 +1097,30 @@ public final class FinalEmperialTomb extends Quest
 					ThreadPoolManager.getInstance().scheduleGeneral(new IntroTask(_world, 12), 4500);
 					break;
 				case 12:
-					broadCastPacket(_world, new SpecialCamera(_world.frintezza.getObjectId(), 100, 195, 35, 0, 10000, 0, 0, 1, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.frintezza, 100, 195, 35, 0, 10000, 0, 0, 1, 0, 0));
 					ThreadPoolManager.getInstance().scheduleGeneral(new IntroTask(_world, 13), 700);
 					break;
 				case 13:
-					broadCastPacket(_world, new SpecialCamera(_world.frintezza.getObjectId(), 100, 195, 35, 0, 10000, 0, 0, 1, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.frintezza, 100, 195, 35, 0, 10000, 0, 0, 1, 0, 0));
 					ThreadPoolManager.getInstance().scheduleGeneral(new IntroTask(_world, 14), 1300);
 					break;
 				case 14:
 					broadCastPacket(_world, new ExShowScreenMessage(NpcStringId.MOURNFUL_CHORALE_PRELUDE, 2, 5000));
-					broadCastPacket(_world, new SpecialCamera(_world.frintezza.getObjectId(), 120, 180, 45, 1500, 10000, 0, 0, 1, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.frintezza, 120, 180, 45, 1500, 10000, 0, 0, 1, 0, 0));
 					broadCastPacket(_world, new MagicSkillUse(_world.frintezza, _world.frintezza, 5006, 1, 34000, 0));
 					ThreadPoolManager.getInstance().scheduleGeneral(new IntroTask(_world, 15), 1500);
 					break;
 				case 15:
-					broadCastPacket(_world, new SpecialCamera(_world.frintezza.getObjectId(), 520, 135, 45, 8000, 10000, 0, 0, 1, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.frintezza, 520, 135, 45, 8000, 10000, 0, 0, 1, 0, 0));
 					ThreadPoolManager.getInstance().scheduleGeneral(new IntroTask(_world, 16), 7500);
 					break;
 				case 16:
-					broadCastPacket(_world, new SpecialCamera(_world.frintezza.getObjectId(), 1500, 110, 25, 10000, 13000, 0, 0, 1, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.frintezza, 1500, 110, 25, 10000, 13000, 0, 0, 1, 0, 0));
 					ThreadPoolManager.getInstance().scheduleGeneral(new IntroTask(_world, 17), 9500);
 					break;
 				case 17:
-					broadCastPacket(_world, new SpecialCamera(_world.overheadDummy.getObjectId(), 930, 160, -20, 0, 1000, 0, 0, 1, 0));
-					broadCastPacket(_world, new SpecialCamera(_world.overheadDummy.getObjectId(), 600, 180, -25, 0, 10000, 0, 0, 1, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.overheadDummy, 930, 160, -20, 0, 1000, 0, 0, 1, 0, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.overheadDummy, 600, 180, -25, 0, 10000, 0, 0, 1, 0, 0));
 					broadCastPacket(_world, new MagicSkillUse(_world.scarletDummy, _world.overheadDummy, 5004, 1, 5800, 0));
 					
 					ThreadPoolManager.getInstance().scheduleGeneral(new IntroTask(_world, 18), 5000);
@@ -1133,15 +1133,15 @@ public final class FinalEmperialTomb extends Quest
 					_world.activeScarlet.disableAllSkills();
 					updateKnownList(_world, _world.activeScarlet);
 					broadCastPacket(_world, new SocialAction(_world.activeScarlet.getObjectId(), 3));
-					broadCastPacket(_world, new SpecialCamera(_world.scarletDummy.getObjectId(), 800, 180, 10, 1000, 10000, 0, 0, 1, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.scarletDummy, 800, 180, 10, 1000, 10000, 0, 0, 1, 0, 0));
 					ThreadPoolManager.getInstance().scheduleGeneral(new IntroTask(_world, 19), 2100);
 					break;
 				case 19:
-					broadCastPacket(_world, new SpecialCamera(_world.activeScarlet.getObjectId(), 300, 60, 8, 0, 10000, 0, 0, 1, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.activeScarlet, 300, 60, 8, 0, 10000, 0, 0, 1, 0, 0));
 					ThreadPoolManager.getInstance().scheduleGeneral(new IntroTask(_world, 20), 2000);
 					break;
 				case 20:
-					broadCastPacket(_world, new SpecialCamera(_world.activeScarlet.getObjectId(), 500, 90, 10, 3000, 5000, 0, 0, 1, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.activeScarlet, 500, 90, 10, 3000, 5000, 0, 0, 1, 0, 0));
 					_world.songTask = ThreadPoolManager.getInstance().scheduleGeneral(new SongTask(_world, 0), 100);
 					ThreadPoolManager.getInstance().scheduleGeneral(new IntroTask(_world, 21), 3000);
 					break;
@@ -1183,8 +1183,8 @@ public final class FinalEmperialTomb extends Quest
 					break;
 				case 24:
 					stopPc();
-					broadCastPacket(_world, new SpecialCamera(_world.frintezza.getObjectId(), 250, 120, 15, 0, 1000, 0, 0, 1, 0));
-					broadCastPacket(_world, new SpecialCamera(_world.frintezza.getObjectId(), 250, 120, 15, 0, 10000, 0, 0, 1, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.frintezza, 250, 120, 15, 0, 1000, 0, 0, 1, 0, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.frintezza, 250, 120, 15, 0, 10000, 0, 0, 1, 0, 0));
 					_world.activeScarlet.abortAttack();
 					_world.activeScarlet.abortCast();
 					_world.activeScarlet.setIsInvul(true);
@@ -1194,11 +1194,11 @@ public final class FinalEmperialTomb extends Quest
 					break;
 				case 25:
 					broadCastPacket(_world, new MagicSkillUse(_world.frintezza, _world.frintezza, 5006, 1, 34000, 0));
-					broadCastPacket(_world, new SpecialCamera(_world.frintezza.getObjectId(), 500, 70, 15, 3000, 10000, 0, 0, 1, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.frintezza, 500, 70, 15, 3000, 10000, 0, 0, 1, 0, 0));
 					ThreadPoolManager.getInstance().scheduleGeneral(new IntroTask(_world, 26), 3000);
 					break;
 				case 26:
-					broadCastPacket(_world, new SpecialCamera(_world.frintezza.getObjectId(), 2500, 90, 12, 6000, 10000, 0, 0, 1, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.frintezza, 2500, 90, 12, 6000, 10000, 0, 0, 1, 0, 0));
 					ThreadPoolManager.getInstance().scheduleGeneral(new IntroTask(_world, 27), 3000);
 					break;
 				case 27:
@@ -1214,13 +1214,13 @@ public final class FinalEmperialTomb extends Quest
 					{
 						_world.scarlet_a = Math.abs(540 - (int) (_world.scarlet_h / 182.044444444));
 					}
-					broadCastPacket(_world, new SpecialCamera(_world.activeScarlet.getObjectId(), 250, _world.scarlet_a, 12, 0, 1000, 0, 0, 1, 0));
-					broadCastPacket(_world, new SpecialCamera(_world.activeScarlet.getObjectId(), 250, _world.scarlet_a, 12, 0, 10000, 0, 0, 1, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.activeScarlet, 250, _world.scarlet_a, 12, 0, 1000, 0, 0, 1, 0, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.activeScarlet, 250, _world.scarlet_a, 12, 0, 10000, 0, 0, 1, 0, 0));
 					ThreadPoolManager.getInstance().scheduleGeneral(new IntroTask(_world, 28), 500);
 					break;
 				case 28:
 					_world.activeScarlet.doDie(_world.activeScarlet);
-					broadCastPacket(_world, new SpecialCamera(_world.activeScarlet.getObjectId(), 450, _world.scarlet_a, 14, 8000, 8000, 0, 0, 1, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.activeScarlet, 450, _world.scarlet_a, 14, 8000, 8000, 0, 0, 1, 0, 0));
 					ThreadPoolManager.getInstance().scheduleGeneral(new IntroTask(_world, 29), 6250);
 					ThreadPoolManager.getInstance().scheduleGeneral(new IntroTask(_world, 30), 7200);
 					break;
@@ -1235,7 +1235,7 @@ public final class FinalEmperialTomb extends Quest
 					_world.activeScarlet.disableAllSkills();
 					updateKnownList(_world, _world.activeScarlet);
 					
-					broadCastPacket(_world, new SpecialCamera(_world.activeScarlet.getObjectId(), 450, _world.scarlet_a, 12, 500, 14000, 0, 0, 1, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.activeScarlet, 450, _world.scarlet_a, 12, 500, 14000, 0, 0, 1, 0, 0));
 					
 					ThreadPoolManager.getInstance().scheduleGeneral(new IntroTask(_world, 31), 8100);
 					break;
@@ -1251,8 +1251,8 @@ public final class FinalEmperialTomb extends Quest
 					_world.isVideo = false;
 					break;
 				case 33:
-					broadCastPacket(_world, new SpecialCamera(_world.activeScarlet.getObjectId(), 300, _world.scarlet_a - 180, 5, 0, 7000, 0, 0, 1, 0));
-					broadCastPacket(_world, new SpecialCamera(_world.activeScarlet.getObjectId(), 200, _world.scarlet_a, 85, 4000, 10000, 0, 0, 1, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.activeScarlet, 300, _world.scarlet_a - 180, 5, 0, 7000, 0, 0, 1, 0, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.activeScarlet, 200, _world.scarlet_a, 85, 4000, 10000, 0, 0, 1, 0, 0));
 					ThreadPoolManager.getInstance().scheduleGeneral(new IntroTask(_world, 34), 7400);
 					ThreadPoolManager.getInstance().scheduleGeneral(new IntroTask(_world, 35), 7500);
 					break;
@@ -1260,12 +1260,12 @@ public final class FinalEmperialTomb extends Quest
 					_world.frintezza.doDie(_world.frintezza);
 					break;
 				case 35:
-					broadCastPacket(_world, new SpecialCamera(_world.frintezza.getObjectId(), 100, 120, 5, 0, 7000, 0, 0, 1, 0));
-					broadCastPacket(_world, new SpecialCamera(_world.frintezza.getObjectId(), 100, 90, 5, 5000, 15000, 0, 0, 1, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.frintezza, 100, 120, 5, 0, 7000, 0, 0, 1, 0, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.frintezza, 100, 90, 5, 5000, 15000, 0, 0, 1, 0, 0));
 					ThreadPoolManager.getInstance().scheduleGeneral(new IntroTask(_world, 36), 7000);
 					break;
 				case 36:
-					broadCastPacket(_world, new SpecialCamera(_world.frintezza.getObjectId(), 900, 90, 25, 7000, 10000, 0, 0, 1, 0));
+					broadCastPacket(_world, new SpecialCamera(_world.frintezza, 900, 90, 25, 7000, 10000, 0, 0, 1, 0, 0));
 					ThreadPoolManager.getInstance().scheduleGeneral(new IntroTask(_world, 37), 9000);
 					break;
 				case 37:
-- 
GitLab