From 8432e3de7501c06eb384fd603f66d6de91e62ae2 Mon Sep 17 00:00:00 2001
From: Adry_85 <Adrya85@hotmail.it>
Date: Mon, 25 Mar 2013 15:37:14 +0000
Subject: [PATCH] BETA: Improved !SagaSuperClass script.

	Patch by: jurchiks, xban1x
	Reviewed by: Adry_85
---
 .../quests/SagasScripts/SagasSuperClass.java  | 1216 ++++++++---------
 1 file changed, 568 insertions(+), 648 deletions(-)

diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/SagasScripts/SagasSuperClass.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/SagasScripts/SagasSuperClass.java
index 94a10b96c7..a7bc01f0d9 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/SagasScripts/SagasSuperClass.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/SagasScripts/SagasSuperClass.java
@@ -30,7 +30,6 @@ import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.QuestState;
-import com.l2jserver.gameserver.model.quest.State;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
 import com.l2jserver.gameserver.network.serverpackets.NpcSay;
@@ -44,7 +43,7 @@ import com.l2jserver.util.L2FastMap;
 public class SagasSuperClass extends Quest
 {
 	private static L2FastList<Quest> _scripts = new L2FastList<>();
-	public String qn = "SagasSuperClass";
+	public String qn = SagasSuperClass.class.getSimpleName();
 	public int qnu;
 	public int[] NPC = {};
 	public int[] Items = {};
@@ -78,14 +77,7 @@ public class SagasSuperClass extends Quest
 		QuestState st = player.getQuestState(qn);
 		if (st != null)
 		{
-			if (qnu != 68)
-			{
-				if (player.getClassId().getId() == QuestClass[qnu - 67][0])
-				{
-					return st;
-				}
-			}
-			else
+			if (qnu == 68)
 			{
 				for (int q = 0; q < 2; q++)
 				{
@@ -95,6 +87,10 @@ public class SagasSuperClass extends Quest
 					}
 				}
 			}
+			else if (player.getClassId().getId() == QuestClass[qnu - 67][0])
+			{
+				return st;
+			}
 		}
 		return null;
 	}
@@ -136,7 +132,7 @@ public class SagasSuperClass extends Quest
 		return prevclass[0];
 	}
 	
-	private void giveHallishaMark(QuestState st2)
+	private void giveHalishaMark(QuestState st2)
 	{
 		if (st2.getInt("spawned") == 0)
 		{
@@ -165,331 +161,282 @@ public class SagasSuperClass extends Quest
 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
 	{
 		QuestState st = player.getQuestState(qn);
-		String htmltext = "";
+		String htmltext = null;
 		if (st != null)
 		{
-			if (event.equalsIgnoreCase("0-011.htm") || event.equalsIgnoreCase("0-012.htm") || event.equalsIgnoreCase("0-013.htm") || event.equalsIgnoreCase("0-014.htm") || event.equalsIgnoreCase("0-015.htm"))
-			{
-				htmltext = event;
-			}
-			else if (event.equalsIgnoreCase("accept"))
+			switch (event)
 			{
-				st.startQuest();
-				st.giveItems(Items[10], 1);
-				htmltext = "0-03.htm";
-			}
-			else if (event.equalsIgnoreCase("0-1"))
-			{
-				if (player.getLevel() < 76)
-				{
-					htmltext = "0-02.htm";
-					if (st.getState() == State.CREATED)
+				case "0-011.htm":
+				case "0-012.htm":
+				case "0-013.htm":
+				case "0-014.htm":
+				case "0-015.htm":
+					htmltext = event;
+					break;
+				case "accept":
+					st.startQuest();
+					giveItems(player, Items[10], 1);
+					htmltext = "0-03.htm";
+					break;
+				case "0-1":
+					if (player.getLevel() < 76)
 					{
-						st.exitQuest(true);
+						htmltext = "0-02.htm";
+						if (st.isCreated())
+						{
+							st.exitQuest(true);
+						}
 					}
-				}
-				else
-				{
-					htmltext = "0-05.htm";
-				}
-			}
-			else if (event.equalsIgnoreCase("0-2"))
-			{
-				if (player.getLevel() >= 76)
-				{
-					st.exitQuest(false);
-					st.set("cond", "0");
-					htmltext = "0-07.htm";
-					st.takeItems(Items[10], -1);
-					st.addExpAndSp(2299404, 0);
-					st.giveItems(57, 5000000);
-					st.giveItems(6622, 1);
-					int Class = getClassId(player);
-					int prevClass = getPrevClass(player);
-					player.setClassId(Class);
-					if (!player.isSubClassActive() && (player.getBaseClass() == prevClass))
+					else
 					{
-						player.setBaseClass(Class);
+						htmltext = "0-05.htm";
 					}
-					player.broadcastUserInfo();
-					cast(npc, player, 4339, 1);
-				}
-				else
-				{
-					st.takeItems(Items[10], -1);
-					st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
-					st.set("cond", "20");
-					htmltext = "0-08.htm";
-				}
-			}
-			else if (event.equalsIgnoreCase("1-3"))
-			{
-				st.set("cond", "3");
-				htmltext = "1-05.htm";
-			}
-			else if (event.equalsIgnoreCase("1-4"))
-			{
-				st.set("cond", "4");
-				st.takeItems(Items[0], 1);
-				if (Items[11] != 0)
-				{
-					st.takeItems(Items[11], 1);
-				}
-				st.giveItems(Items[1], 1);
-				htmltext = "1-06.htm";
-			}
-			else if (event.equalsIgnoreCase("2-1"))
-			{
-				st.set("cond", "2");
-				htmltext = "2-05.htm";
-			}
-			else if (event.equalsIgnoreCase("2-2"))
-			{
-				st.set("cond", "5");
-				st.takeItems(Items[1], 1);
-				st.giveItems(Items[4], 1);
-				htmltext = "2-06.htm";
-			}
-			else if (event.equalsIgnoreCase("3-5"))
-			{
-				htmltext = "3-07.htm";
-			}
-			else if (event.equalsIgnoreCase("3-6"))
-			{
-				st.set("cond", "11");
-				htmltext = "3-02.htm";
-			}
-			else if (event.equalsIgnoreCase("3-7"))
-			{
-				st.set("cond", "12");
-				htmltext = "3-03.htm";
-			}
-			else if (event.equalsIgnoreCase("3-8"))
-			{
-				st.set("cond", "13");
-				st.takeItems(Items[2], 1);
-				st.giveItems(Items[7], 1);
-				htmltext = "3-08.htm";
-			}
-			else if (event.equalsIgnoreCase("4-1"))
-			{
-				htmltext = "4-010.htm";
-			}
-			else if (event.equalsIgnoreCase("4-2"))
-			{
-				st.giveItems(Items[9], 1);
-				st.set("cond", "18");
-				st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
-				htmltext = "4-011.htm";
-			}
-			else if (event.equalsIgnoreCase("4-3"))
-			{
-				st.giveItems(Items[9], 1);
-				st.set("cond", "18");
-				autoChat(npc, Text[13].replace("PLAYERNAME", player.getName()));
-				st.set("Quest0", "0");
-				cancelQuestTimer("Mob_2 has despawned", npc, player);
-				st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
-				DeleteSpawn(st, npc);
-				return null;
-			}
-			else if (event.equalsIgnoreCase("5-1"))
-			{
-				st.set("cond", "6");
-				st.takeItems(Items[4], 1);
-				cast(npc, player, 4546, 1);
-				st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
-				htmltext = "5-02.htm";
-			}
-			else if (event.equalsIgnoreCase("6-1"))
-			{
-				st.set("cond", "8");
-				st.takeItems(Items[5], 1);
-				cast(npc, player, 4546, 1);
-				st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
-				htmltext = "6-03.htm";
-			}
-			else if (event.equalsIgnoreCase("7-1"))
-			{
-				if (st.getInt("spawned") == 1)
-				{
-					htmltext = "7-03.htm";
-				}
-				else if (st.getInt("spawned") == 0)
-				{
-					L2Npc Mob_1 = st.addSpawn(Mob[0], X[0], Y[0], Z[0]);
-					st.set("spawned", "1");
-					st.startQuestTimer("Mob_1 Timer 1", 500, Mob_1);
-					st.startQuestTimer("Mob_1 has despawned", 300000, Mob_1);
-					addSpawn(st, Mob_1);
-					htmltext = "7-02.htm";
-				}
-				else
-				{
-					htmltext = "7-04.htm";
-				}
-			}
-			else if (event.equalsIgnoreCase("7-2"))
-			{
-				st.set("cond", "10");
-				st.takeItems(Items[6], 1);
-				cast(npc, player, 4546, 1);
-				st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
-				htmltext = "7-06.htm";
-			}
-			else if (event.equalsIgnoreCase("8-1"))
-			{
-				st.set("cond", "14");
-				st.takeItems(Items[7], 1);
-				cast(npc, player, 4546, 1);
-				st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
-				htmltext = "8-02.htm";
-			}
-			else if (event.equalsIgnoreCase("9-1"))
-			{
-				st.set("cond", "17");
-				st.takeItems(Items[8], 1);
-				cast(npc, player, 4546, 1);
-				st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
-				htmltext = "9-03.htm";
-			}
-			else if (event.equalsIgnoreCase("10-1"))
-			{
-				if (st.getInt("Quest0") == 0)
-				{
-					L2Npc Mob_3 = st.addSpawn(Mob[2], X[1], Y[1], Z[1]);
-					L2Npc Mob_2 = st.addSpawn(NPC[4], X[2], Y[2], Z[2]);
-					addSpawn(st, Mob_3);
-					addSpawn(st, Mob_2);
-					st.set("Mob_2", String.valueOf(Mob_2.getObjectId()));
-					st.set("Quest0", "1");
-					st.set("Quest1", "45");
-					st.startRepeatingQuestTimer("Mob_3 Timer 1", 500, Mob_3);
-					st.startQuestTimer("Mob_3 has despawned", 59000, Mob_3);
-					st.startQuestTimer("Mob_2 Timer 1", 500, Mob_2);
-					st.startQuestTimer("Mob_2 has despawned", 60000, Mob_2);
-					htmltext = "10-02.htm";
-				}
-				else if (st.getInt("Quest1") == 45)
-				{
-					htmltext = "10-03.htm";
-				}
-				else
-				{
-					htmltext = "10-04.htm";
-				}
-			}
-			else if (event.equalsIgnoreCase("10-2"))
-			{
-				st.set("cond", "19");
-				st.takeItems(Items[9], 1);
-				cast(npc, player, 4546, 1);
-				st.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
-				htmltext = "10-06.htm";
-			}
-			else if (event.equalsIgnoreCase("11-9"))
-			{
-				st.set("cond", "15");
-				htmltext = "11-03.htm";
-			}
-			else if (event.equalsIgnoreCase("Mob_1 Timer 1"))
-			{
-				autoChat(npc, Text[0].replace("PLAYERNAME", player.getName()));
-				return null;
-			}
-			else if (event.equalsIgnoreCase("Mob_1 has despawned"))
-			{
-				autoChat(npc, Text[1].replace("PLAYERNAME", player.getName()));
-				st.set("spawned", "0");
-				DeleteSpawn(st, npc);
-				return null;
-			}
-			else if (event.equalsIgnoreCase("Archon Hellisha has despawned"))
-			{
-				autoChat(npc, Text[6].replace("PLAYERNAME", player.getName()));
-				st.set("spawned", "0");
-				DeleteSpawn(st, npc);
-				return null;
-			}
-			else if (event.equalsIgnoreCase("Mob_3 Timer 1"))
-			{
-				L2Npc Mob_2 = FindSpawn(player, (L2Npc) L2World.getInstance().findObject(st.getInt("Mob_2")));
-				if (npc.getKnownList().knowsObject(Mob_2))
-				{
-					((L2Attackable) npc).addDamageHate(Mob_2, 0, 99999);
-					npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, Mob_2, null);
-					Mob_2.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, npc, null);
-					autoChat(npc, Text[14].replace("PLAYERNAME", player.getName()));
-					cancelQuestTimer("Mob_3 Timer 1", npc, player);
-				}
-				return null;
-			}
-			else if (event.equalsIgnoreCase("Mob_3 has despawned"))
-			{
-				autoChat(npc, Text[15].replace("PLAYERNAME", player.getName()));
-				st.set("Quest0", "2");
-				DeleteSpawn(st, npc);
-				return null;
-			}
-			else if (event.equalsIgnoreCase("Mob_2 Timer 1"))
-			{
-				autoChat(npc, Text[7].replace("PLAYERNAME", player.getName()));
-				st.startQuestTimer("Mob_2 Timer 2", 1500, npc);
-				if (st.getInt("Quest1") == 45)
-				{
-					st.set("Quest1", "0");
-				}
-				return null;
-			}
-			else if (event.equalsIgnoreCase("Mob_2 Timer 2"))
-			{
-				autoChat(npc, Text[8].replace("PLAYERNAME", player.getName()));
-				st.startQuestTimer("Mob_2 Timer 3", 10000, npc);
-				return null;
-			}
-			else if (event.equalsIgnoreCase("Mob_2 Timer 3"))
-			{
-				if (st.getInt("Quest0") == 0)
-				{
-					st.startQuestTimer("Mob_2 Timer 3", 13000, npc);
-					if (getRandom(2) == 0)
+					break;
+				case "0-2":
+					if (player.getLevel() < 76)
 					{
-						autoChat(npc, Text[9].replace("PLAYERNAME", player.getName()));
+						takeItems(player, Items[10], -1);
+						st.setCond(20, true);
+						htmltext = "0-08.htm";
 					}
 					else
 					{
-						autoChat(npc, Text[10].replace("PLAYERNAME", player.getName()));
+						takeItems(player, Items[10], -1);
+						addExpAndSp(player, 2299404, 0);
+						giveAdena(player, 5000000, true);
+						giveItems(player, 6622, 1);
+						int Class = getClassId(player);
+						int prevClass = getPrevClass(player);
+						player.setClassId(Class);
+						if (!player.isSubClassActive() && (player.getBaseClass() == prevClass))
+						{
+							player.setBaseClass(Class);
+						}
+						player.broadcastUserInfo();
+						cast(npc, player, 4339, 1);
+						st.exitQuest(false);
+						htmltext = "0-07.htm";
 					}
-				}
-				return null;
-			}
-			else if (event.equalsIgnoreCase("Mob_2 has despawned"))
-			{
-				st.set("Quest1", String.valueOf(st.getInt("Quest1") + 1));
-				if ((st.getInt("Quest0") == 1) || (st.getInt("Quest0") == 2) || (st.getInt("Quest1") > 3))
-				{
+					break;
+				case "1-3":
+					st.setCond(3);
+					htmltext = "1-05.htm";
+					break;
+				case "1-4":
+					st.setCond(4);
+					takeItems(player, Items[0], 1);
+					if (Items[11] != 0)
+					{
+						takeItems(player, Items[11], 1);
+					}
+					giveItems(player, Items[1], 1);
+					htmltext = "1-06.htm";
+					break;
+				case "2-1":
+					st.setCond(2);
+					htmltext = "2-05.htm";
+					break;
+				case "2-2":
+					st.setCond(5);
+					takeItems(player, Items[1], 1);
+					giveItems(player, Items[4], 1);
+					htmltext = "2-06.htm";
+					break;
+				case "3-5":
+					htmltext = "3-07.htm";
+					break;
+				case "3-6":
+					st.setCond(11);
+					htmltext = "3-02.htm";
+					break;
+				case "3-7":
+					st.setCond(12);
+					htmltext = "3-03.htm";
+					break;
+				case "3-8":
+					st.setCond(13);
+					takeItems(player, Items[2], 1);
+					giveItems(player, Items[7], 1);
+					htmltext = "3-08.htm";
+					break;
+				case "4-1":
+					htmltext = "4-010.htm";
+					break;
+				case "4-2":
+					giveItems(player, Items[9], 1);
+					st.setCond(18, true);
+					htmltext = "4-011.htm";
+					break;
+				case "4-3":
+					giveItems(player, Items[9], 1);
+					st.setCond(18, true);
+					autoChat(npc, Text[13].replace("PLAYERNAME", player.getName()));
 					st.set("Quest0", "0");
-					if (st.getInt("Quest0") == 1)
+					cancelQuestTimer("Mob_2 has despawned", npc, player);
+					DeleteSpawn(st, npc);
+					return null;
+				case "5-1":
+					st.setCond(6, true);
+					takeItems(player, Items[4], 1);
+					cast(npc, player, 4546, 1);
+					htmltext = "5-02.htm";
+					break;
+				case "6-1":
+					st.setCond(8, true);
+					takeItems(player, Items[5], 1);
+					cast(npc, player, 4546, 1);
+					htmltext = "6-03.htm";
+					break;
+				case "7-1":
+					if (st.getInt("spawned") == 1)
+					{
+						htmltext = "7-03.htm";
+					}
+					else if (st.getInt("spawned") == 0)
+					{
+						L2Npc Mob_1 = st.addSpawn(Mob[0], X[0], Y[0], Z[0]);
+						st.set("spawned", "1");
+						st.startQuestTimer("Mob_1 Timer 1", 500, Mob_1);
+						st.startQuestTimer("Mob_1 has despawned", 300000, Mob_1);
+						addSpawn(st, Mob_1);
+						htmltext = "7-02.htm";
+					}
+					else
+					{
+						htmltext = "7-04.htm";
+					}
+					break;
+				case "7-2":
+					st.setCond(10, true);
+					takeItems(player, Items[6], 1);
+					cast(npc, player, 4546, 1);
+					htmltext = "7-06.htm";
+					break;
+				case "8-1":
+					st.setCond(14, true);
+					takeItems(player, Items[7], 1);
+					cast(npc, player, 4546, 1);
+					htmltext = "8-02.htm";
+					break;
+				case "9-1":
+					st.setCond(17, true);
+					takeItems(player, Items[8], 1);
+					cast(npc, player, 4546, 1);
+					htmltext = "9-03.htm";
+					break;
+				case "10-1":
+					if (st.getInt("Quest0") == 0)
 					{
-						autoChat(npc, Text[11].replace("PLAYERNAME", player.getName()));
+						L2Npc Mob_3 = st.addSpawn(Mob[2], X[1], Y[1], Z[1]);
+						L2Npc Mob_2 = st.addSpawn(NPC[4], X[2], Y[2], Z[2]);
+						addSpawn(st, Mob_3);
+						addSpawn(st, Mob_2);
+						st.set("Mob_2", String.valueOf(Mob_2.getObjectId()));
+						st.set("Quest0", "1");
+						st.set("Quest1", "45");
+						st.startRepeatingQuestTimer("Mob_3 Timer 1", 500, Mob_3);
+						st.startQuestTimer("Mob_3 has despawned", 59000, Mob_3);
+						st.startQuestTimer("Mob_2 Timer 1", 500, Mob_2);
+						st.startQuestTimer("Mob_2 has despawned", 60000, Mob_2);
+						htmltext = "10-02.htm";
+					}
+					else if (st.getInt("Quest1") == 45)
+					{
+						htmltext = "10-03.htm";
 					}
 					else
 					{
-						autoChat(npc, Text[12].replace("PLAYERNAME", player.getName()));
+						htmltext = "10-04.htm";
 					}
+					break;
+				case "10-2":
+					st.setCond(19, true);
+					takeItems(player, Items[9], 1);
+					cast(npc, player, 4546, 1);
+					htmltext = "10-06.htm";
+					break;
+				case "11-9":
+					st.setCond(15);
+					htmltext = "11-03.htm";
+					break;
+				case "Mob_1 Timer 1":
+					autoChat(npc, Text[0].replace("PLAYERNAME", player.getName()));
+					return null;
+				case "Mob_1 has despawned":
+					autoChat(npc, Text[1].replace("PLAYERNAME", player.getName()));
+					st.set("spawned", "0");
 					DeleteSpawn(st, npc);
-				}
-				else
-				{
-					st.startQuestTimer("Mob_2 has despawned", 1000, npc);
-				}
-				return null;
+					return null;
+				case "Archon Hellisha has despawned":
+					autoChat(npc, Text[6].replace("PLAYERNAME", player.getName()));
+					st.set("spawned", "0");
+					DeleteSpawn(st, npc);
+					return null;
+				case "Mob_3 Timer 1":
+					L2Npc Mob_2 = FindSpawn(player, (L2Npc) L2World.getInstance().findObject(st.getInt("Mob_2")));
+					if (npc.getKnownList().knowsObject(Mob_2))
+					{
+						((L2Attackable) npc).addDamageHate(Mob_2, 0, 99999);
+						npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, Mob_2, null);
+						Mob_2.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, npc, null);
+						autoChat(npc, Text[14].replace("PLAYERNAME", player.getName()));
+						cancelQuestTimer("Mob_3 Timer 1", npc, player);
+					}
+					return null;
+				case "Mob_3 has despawned":
+					autoChat(npc, Text[15].replace("PLAYERNAME", player.getName()));
+					st.set("Quest0", "2");
+					DeleteSpawn(st, npc);
+					return null;
+				case "Mob_2 Timer 1":
+					autoChat(npc, Text[7].replace("PLAYERNAME", player.getName()));
+					st.startQuestTimer("Mob_2 Timer 2", 1500, npc);
+					if (st.getInt("Quest1") == 45)
+					{
+						st.set("Quest1", "0");
+					}
+					return null;
+				case "Mob_2 Timer 2":
+					autoChat(npc, Text[8].replace("PLAYERNAME", player.getName()));
+					st.startQuestTimer("Mob_2 Timer 3", 10000, npc);
+					return null;
+				case "Mob_2 Timer 3":
+					if (st.getInt("Quest0") == 0)
+					{
+						st.startQuestTimer("Mob_2 Timer 3", 13000, npc);
+						if (getRandom(2) == 0)
+						{
+							autoChat(npc, Text[9].replace("PLAYERNAME", player.getName()));
+						}
+						else
+						{
+							autoChat(npc, Text[10].replace("PLAYERNAME", player.getName()));
+						}
+					}
+					return null;
+				case "Mob_2 has despawned":
+					st.set("Quest1", String.valueOf(st.getInt("Quest1") + 1));
+					if ((st.getInt("Quest0") == 1) || (st.getInt("Quest0") == 2) || (st.getInt("Quest1") > 3))
+					{
+						st.set("Quest0", "0");
+						// TODO this IF will never be true
+						if (st.getInt("Quest0") == 1)
+						{
+							autoChat(npc, Text[11].replace("PLAYERNAME", player.getName()));
+						}
+						else
+						{
+							autoChat(npc, Text[12].replace("PLAYERNAME", player.getName()));
+						}
+						DeleteSpawn(st, npc);
+					}
+					else
+					{
+						st.startQuestTimer("Mob_2 has despawned", 1000, npc);
+					}
+					return null;
 			}
 		}
-		else
-		{
-			return null;
-		}
 		return htmltext;
 	}
 	
@@ -497,37 +444,39 @@ public class SagasSuperClass extends Quest
 	public String onAttack(L2Npc npc, L2PcInstance player, int damage, boolean isSummon)
 	{
 		QuestState st2 = findRightState(npc);
-		if (st2 == null)
+		if (st2 != null)
 		{
-			return super.onAttack(npc, player, damage, isSummon);
-		}
-		int cond = st2.getInt("cond");
-		QuestState st = player.getQuestState(qn);
-		int npcId = npc.getNpcId();
-		if ((npcId == Mob[2]) && (st == st2) && (cond == 17))
-		{
-			st.set("Quest0", String.valueOf(st.getInt("Quest0") + 1));
-			if (st.getInt("Quest0") == 1)
-			{
-				autoChat(npc, Text[16].replace("PLAYERNAME", player.getName()));
-			}
-			if (st.getInt("Quest0") > 15)
+			int cond = st2.getCond();
+			QuestState st = player.getQuestState(qn);
+			int npcId = npc.getNpcId();
+			if ((npcId == Mob[2]) && (st == st2) && (cond == 17))
 			{
-				st.set("Quest0", "1");
-				autoChat(npc, Text[17].replace("PLAYERNAME", player.getName()));
-				cancelQuestTimer("Mob_3 has despawned", npc, st2.getPlayer());
-				st.set("Tab", "1");
-				DeleteSpawn(st, npc);
+				int quest0 = st.getInt("Quest0") + 1;
+				if (quest0 == 1)
+				{
+					autoChat(npc, Text[16].replace("PLAYERNAME", player.getName()));
+				}
+				
+				if (quest0 > 15)
+				{
+					quest0 = 1;
+					autoChat(npc, Text[17].replace("PLAYERNAME", player.getName()));
+					cancelQuestTimer("Mob_3 has despawned", npc, st2.getPlayer());
+					st.set("Tab", "1");
+					DeleteSpawn(st, npc);
+				}
+				
+				st.set("Quest0", Integer.toString(quest0));
 			}
-		}
-		else if ((npcId == Mob[1]) && (cond == 15))
-		{
-			if ((st != st2) || ((st == st2) && player.isInParty()))
+			else if ((npcId == Mob[1]) && (cond == 15))
 			{
-				autoChat(npc, Text[5].replace("PLAYERNAME", player.getName()));
-				cancelQuestTimer("Archon Hellisha has despawned", npc, st2.getPlayer());
-				st2.set("spawned", "0");
-				DeleteSpawn(st2, npc);
+				if ((st != st2) || ((st == st2) && player.isInParty()))
+				{
+					autoChat(npc, Text[5].replace("PLAYERNAME", player.getName()));
+					cancelQuestTimer("Archon Hellisha has despawned", npc, st2.getPlayer());
+					st2.set("spawned", "0");
+					DeleteSpawn(st2, npc);
+				}
 			}
 		}
 		return super.onAttack(npc, player, damage, isSummon);
@@ -541,61 +490,55 @@ public class SagasSuperClass extends Quest
 		int npcId = npc.getNpcId();
 		if (st != null)
 		{
-			int cond = st.getInt("cond");
 			if (npcId == NPC[4])
 			{
+				int cond = st.getCond();
 				if (cond == 17)
 				{
 					QuestState st2 = findRightState(npc);
 					if (st2 != null)
 					{
 						player.setLastQuestNpcObject(npc.getObjectId());
+						int tab = st.getInt("Tab");
+						int quest0 = st.getInt("Quest0");
+						
 						if (st == st2)
 						{
-							if (st.getInt("Tab") == 1)
+							if (tab == 1)
 							{
-								if (st.getInt("Quest0") == 0)
+								if (quest0 == 0)
 								{
 									htmltext = "4-04.htm";
 								}
-								else if (st.getInt("Quest0") == 1)
+								else if (quest0 == 1)
 								{
 									htmltext = "4-06.htm";
 								}
 							}
-							else
+							else if (quest0 == 0)
 							{
-								if (st.getInt("Quest0") == 0)
-								{
-									htmltext = "4-01.htm";
-								}
-								else if (st.getInt("Quest0") == 1)
-								{
-									htmltext = "4-03.htm";
-								}
+								htmltext = "4-01.htm";
+							}
+							else if (quest0 == 1)
+							{
+								htmltext = "4-03.htm";
 							}
 						}
-						else
+						else if (tab == 1)
 						{
-							if (st.getInt("Tab") == 1)
+							if (quest0 == 0)
 							{
-								if (st.getInt("Quest0") == 0)
-								{
-									htmltext = "4-05.htm";
-								}
-								else if (st.getInt("Quest0") == 1)
-								{
-									htmltext = "4-07.htm";
-								}
+								htmltext = "4-05.htm";
 							}
-							else
+							else if (quest0 == 1)
 							{
-								if (st.getInt("Quest0") == 0)
-								{
-									htmltext = "4-02.htm";
-								}
+								htmltext = "4-07.htm";
 							}
 						}
+						else if (quest0 == 0)
+						{
+							htmltext = "4-02.htm";
+						}
 					}
 				}
 				else if (cond == 18)
@@ -629,7 +572,7 @@ public class SagasSuperClass extends Quest
 						QuestState st1 = findQuest(player1);
 						if ((st1 != null) && player1.isInsideRadius(player, Config.ALT_PARTY_RANGE2, false, false))
 						{
-							if (st1.getInt("cond") == 15)
+							if (st1.isCond(15))
 							{
 								PartyQuestMembers.add(st1);
 							}
@@ -638,7 +581,7 @@ public class SagasSuperClass extends Quest
 					if (PartyQuestMembers.size() > 0)
 					{
 						QuestState st2 = PartyQuestMembers.get(getRandom(PartyQuestMembers.size()));
-						giveHallishaMark(st2);
+						giveHalishaMark(st2);
 					}
 				}
 				else
@@ -646,9 +589,9 @@ public class SagasSuperClass extends Quest
 					QuestState st1 = findQuest(player);
 					if (st1 != null)
 					{
-						if (st1.getInt("cond") == 15)
+						if (st1.isCond(15))
 						{
-							giveHallishaMark(st1);
+							giveHalishaMark(st1);
 						}
 					}
 				}
@@ -671,7 +614,7 @@ public class SagasSuperClass extends Quest
 				QuestState st1 = findQuest(player);
 				if (st1 != null)
 				{
-					if (st1.getInt("cond") == 15)
+					if (st1.isCond(15))
 					{
 						// This is just a guess....not really sure what it actually says, if anything
 						autoChat(npc, Text[4].replace("PLAYERNAME", st1.getPlayer().getName()));
@@ -679,7 +622,6 @@ public class SagasSuperClass extends Quest
 						st1.takeItems(Items[3], -1);
 						st1.setCond(16, true);
 					}
-					
 				}
 				return super.onKill(npc, player, isSummon);
 			}
@@ -690,21 +632,18 @@ public class SagasSuperClass extends Quest
 			if (npcId == Guardian_Angel)
 			{
 				QuestState st1 = findQuest(player);
-				if (st1 != null)
+				if ((st1 != null) && st1.isCond(6))
 				{
-					if (st1.getInt("cond") == 6)
+					int kills = st1.getInt("kills");
+					if (kills < 9)
 					{
-						if (st1.getInt("kills") < 9)
-						{
-							st1.set("kills", String.valueOf(st1.getInt("kills") + 1));
-						}
-						else
-						{
-							st1.giveItems(Items[5], 1);
-							st1.setCond(7, true);
-						}
+						st1.set("kills", Integer.toString(kills + 1));
+					}
+					else
+					{
+						st1.giveItems(Items[5], 1);
+						st.setCond(7, true);
 					}
-					
 				}
 				return super.onKill(npc, player, isSummon);
 			}
@@ -712,68 +651,64 @@ public class SagasSuperClass extends Quest
 		if ((st != null) && (npcId != Mob[2]))
 		{
 			QuestState st2 = findRightState(npc);
-			if (st2 == null)
+			if (st2 != null)
 			{
-				return super.onKill(npc, player, isSummon);
-			}
-			int cond = st.getInt("cond");
-			if ((npcId == Mob[0]) && (cond == 8))
-			{
-				if (!player.isInParty())
+				int cond = st.getCond();
+				if ((npcId == Mob[0]) && (cond == 8))
 				{
-					if (st == st2)
+					if (!player.isInParty())
 					{
-						autoChat(npc, Text[12].replace("PLAYERNAME", player.getName()));
-						st.giveItems(Items[6], 1);
-						st.setCond(9, true);
+						if (st == st2)
+						{
+							autoChat(npc, Text[12].replace("PLAYERNAME", player.getName()));
+							giveItems(player, Items[6], 1);
+							st.setCond(9, true);
+						}
 					}
+					cancelQuestTimer("Mob_1 has despawned", npc, st2.getPlayer());
+					st2.set("spawned", "0");
+					DeleteSpawn(st2, npc);
 				}
-				cancelQuestTimer("Mob_1 has despawned", npc, st2.getPlayer());
-				st2.set("spawned", "0");
-				DeleteSpawn(st2, npc);
-			}
-			else if ((npcId == Mob[1]) && (cond == 15))
-			{
-				if (!player.isInParty())
+				else if ((npcId == Mob[1]) && (cond == 15))
 				{
-					if (st == st2)
+					if (!player.isInParty())
 					{
-						autoChat(npc, Text[4].replace("PLAYERNAME", player.getName()));
-						st.giveItems(Items[8], 1);
-						st.takeItems(Items[3], -1);
-						st.setCond(16, true);
-					}
-					else
-					{
-						autoChat(npc, Text[5].replace("PLAYERNAME", player.getName()));
+						if (st == st2)
+						{
+							autoChat(npc, Text[4].replace("PLAYERNAME", player.getName()));
+							giveItems(player, Items[8], 1);
+							takeItems(player, Items[3], -1);
+							st.setCond(16, true);
+						}
+						else
+						{
+							autoChat(npc, Text[5].replace("PLAYERNAME", player.getName()));
+						}
 					}
+					cancelQuestTimer("Archon Hellisha has despawned", npc, st2.getPlayer());
+					st2.set("spawned", "0");
+					DeleteSpawn(st2, npc);
 				}
-				cancelQuestTimer("Archon Hellisha has despawned", npc, st2.getPlayer());
-				st2.set("spawned", "0");
-				DeleteSpawn(st2, npc);
 			}
 		}
-		else
+		else if (npcId == Mob[0])
 		{
-			if (npcId == Mob[0])
+			st = findRightState(npc);
+			if (st != null)
 			{
-				st = findRightState(npc);
-				if (st != null)
-				{
-					cancelQuestTimer("Mob_1 has despawned", npc, st.getPlayer());
-					st.set("spawned", "0");
-					DeleteSpawn(st, npc);
-				}
+				cancelQuestTimer("Mob_1 has despawned", npc, st.getPlayer());
+				st.set("spawned", "0");
+				DeleteSpawn(st, npc);
 			}
-			else if (npcId == Mob[1])
+		}
+		else if (npcId == Mob[1])
+		{
+			st = findRightState(npc);
+			if (st != null)
 			{
-				st = findRightState(npc);
-				if (st != null)
-				{
-					cancelQuestTimer("Archon Hellisha has despawned", npc, st.getPlayer());
-					st.set("spawned", "0");
-					DeleteSpawn(st, npc);
-				}
+				cancelQuestTimer("Archon Hellisha has despawned", npc, st.getPlayer());
+				st.set("spawned", "0");
+				DeleteSpawn(st, npc);
 			}
 		}
 		return super.onKill(npc, player, isSummon);
@@ -817,235 +752,220 @@ public class SagasSuperClass extends Quest
 		if (st != null)
 		{
 			int npcId = npc.getNpcId();
-			int cond = st.getInt("cond");
-			if (st.isCompleted() && (npcId == NPC[0]))
+			if ((npcId == NPC[0]) && st.isCompleted())
 			{
-				htmltext = "<html><body>You have already completed this quest!</body></html>";
+				htmltext = getAlreadyCompletedMsg(player);
 			}
 			else if (player.getClassId().getId() == getPrevClass(player))
 			{
-				if (cond == 0)
-				{
-					if (npcId == NPC[0])
-					{
-						htmltext = "0-01.htm";
-					}
-				}
-				else if (cond == 1)
-				{
-					if (npcId == NPC[0])
-					{
-						htmltext = "0-04.htm";
-					}
-					else if (npcId == NPC[2])
-					{
-						htmltext = "2-01.htm";
-					}
-				}
-				else if (cond == 2)
-				{
-					if (npcId == NPC[2])
-					{
-						htmltext = "2-02.htm";
-					}
-					else if (npcId == NPC[1])
-					{
-						htmltext = "1-01.htm";
-					}
-				}
-				else if (cond == 3)
+				switch (st.getCond())
 				{
-					if ((npcId == NPC[1]) && st.hasQuestItems(Items[0]))
-					{
-						htmltext = "1-02.htm";
-						if ((Items[11] == 0) || st.hasQuestItems(Items[11]))
+					case 0:
+						if (npcId == NPC[0])
 						{
-							htmltext = "1-03.htm";
+							htmltext = "0-01.htm";
 						}
-					}
-				}
-				else if (cond == 4)
-				{
-					if (npcId == NPC[1])
-					{
-						htmltext = "1-04.htm";
-					}
-					else if (npcId == NPC[2])
-					{
-						htmltext = "2-03.htm";
-					}
-				}
-				else if (cond == 5)
-				{
-					if (npcId == NPC[2])
-					{
-						htmltext = "2-04.htm";
-					}
-					else if (npcId == NPC[5])
-					{
-						htmltext = "5-01.htm";
-					}
-				}
-				else if (cond == 6)
-				{
-					if (npcId == NPC[5])
-					{
-						htmltext = "5-03.htm";
-					}
-					else if (npcId == NPC[6])
-					{
-						htmltext = "6-01.htm";
-					}
-				}
-				else if (cond == 7)
-				{
-					if (npcId == NPC[6])
-					{
-						htmltext = "6-02.htm";
-					}
-				}
-				else if (cond == 8)
-				{
-					if (npcId == NPC[6])
-					{
-						htmltext = "6-04.htm";
-					}
-					else if (npcId == NPC[7])
-					{
-						htmltext = "7-01.htm";
-					}
-				}
-				else if (cond == 9)
-				{
-					if (npcId == NPC[7])
-					{
-						htmltext = "7-05.htm";
-					}
-				}
-				else if (cond == 10)
-				{
-					if (npcId == NPC[7])
-					{
-						htmltext = "7-07.htm";
-					}
-					else if (npcId == NPC[3])
-					{
-						htmltext = "3-01.htm";
-					}
-				}
-				else if ((cond == 11) || (cond == 12))
-				{
-					if (npcId == NPC[3])
-					{
-						if (st.hasQuestItems(Items[2]))
+						break;
+					case 1:
+						if (npcId == NPC[0])
 						{
-							htmltext = "3-05.htm";
+							htmltext = "0-04.htm";
 						}
-						else
+						else if (npcId == NPC[2])
 						{
-							htmltext = "3-04.htm";
+							htmltext = "2-01.htm";
 						}
-					}
-				}
-				else if (cond == 13)
-				{
-					if (npcId == NPC[3])
-					{
-						htmltext = "3-06.htm";
-					}
-					else if (npcId == NPC[8])
-					{
-						htmltext = "8-01.htm";
-					}
-				}
-				else if (cond == 14)
-				{
-					if (npcId == NPC[8])
-					{
-						htmltext = "8-03.htm";
-					}
-					else if (npcId == NPC[11])
-					{
-						htmltext = "11-01.htm";
-					}
-				}
-				else if (cond == 15)
-				{
-					if (npcId == NPC[11])
-					{
-						htmltext = "11-02.htm";
-					}
-					else if (npcId == NPC[9])
-					{
-						htmltext = "9-01.htm";
-					}
-				}
-				else if (cond == 16)
-				{
-					if (npcId == NPC[9])
-					{
-						htmltext = "9-02.htm";
-					}
-				}
-				else if (cond == 17)
-				{
-					if (npcId == NPC[9])
-					{
-						htmltext = "9-04.htm";
-					}
-					else if (npcId == NPC[10])
-					{
-						htmltext = "10-01.htm";
-					}
-				}
-				else if (cond == 18)
-				{
-					if (npcId == NPC[10])
-					{
-						htmltext = "10-05.htm";
-					}
-				}
-				else if (cond == 19)
-				{
-					if (npcId == NPC[10])
-					{
-						htmltext = "10-07.htm";
-					}
-					else if (npcId == NPC[0])
-					{
-						htmltext = "0-06.htm";
-					}
-				}
-				else if (cond == 20)
-				{
-					if (npcId == NPC[0])
-					{
-						if (player.getLevel() >= 76)
+						break;
+					case 2:
+						if (npcId == NPC[2])
 						{
-							htmltext = "0-09.htm";
-							if ((getClassId(player) < 131) || (getClassId(player) > 135)) // in Kamael quests, npc wants to chat for a bit before changing class
+							htmltext = "2-02.htm";
+						}
+						else if (npcId == NPC[1])
+						{
+							htmltext = "1-01.htm";
+						}
+						break;
+					case 3:
+						if ((npcId == NPC[1]) && hasQuestItems(player, Items[0]))
+						{
+							if ((Items[11] == 0) || hasQuestItems(player, Items[11]))
 							{
-								st.exitQuest(false);
-								st.set("cond", "0");
-								st.addExpAndSp(2299404, 0);
-								st.giveItems(57, 5000000);
-								st.giveItems(6622, 1);
-								int Class = getClassId(player);
-								int prevClass = getPrevClass(player);
-								player.setClassId(Class);
-								if (!player.isSubClassActive() && (player.getBaseClass() == prevClass))
-								{
-									player.setBaseClass(Class);
-								}
-								player.broadcastUserInfo();
-								cast(npc, player, 4339, 1);
+								htmltext = "1-03.htm";
+							}
+							else
+							{
+								htmltext = "1-02.htm";
 							}
 						}
-						else
+						break;
+					case 4:
+						if (npcId == NPC[1])
 						{
-							htmltext = "0-010.htm";
+							htmltext = "1-04.htm";
 						}
-					}
+						else if (npcId == NPC[2])
+						{
+							htmltext = "2-03.htm";
+						}
+						break;
+					case 5:
+						if (npcId == NPC[2])
+						{
+							htmltext = "2-04.htm";
+						}
+						else if (npcId == NPC[5])
+						{
+							htmltext = "5-01.htm";
+						}
+						break;
+					case 6:
+						if (npcId == NPC[5])
+						{
+							htmltext = "5-03.htm";
+						}
+						else if (npcId == NPC[6])
+						{
+							htmltext = "6-01.htm";
+						}
+						break;
+					case 7:
+						if (npcId == NPC[6])
+						{
+							htmltext = "6-02.htm";
+						}
+						break;
+					case 8:
+						if (npcId == NPC[6])
+						{
+							htmltext = "6-04.htm";
+						}
+						else if (npcId == NPC[7])
+						{
+							htmltext = "7-01.htm";
+						}
+						break;
+					case 9:
+						if (npcId == NPC[7])
+						{
+							htmltext = "7-05.htm";
+						}
+						break;
+					case 10:
+						if (npcId == NPC[7])
+						{
+							htmltext = "7-07.htm";
+						}
+						else if (npcId == NPC[3])
+						{
+							htmltext = "3-01.htm";
+						}
+						break;
+					case 11:
+					case 12:
+						if (npcId == NPC[3])
+						{
+							if (hasQuestItems(player, Items[2]))
+							{
+								htmltext = "3-05.htm";
+							}
+							else
+							{
+								htmltext = "3-04.htm";
+							}
+						}
+						break;
+					case 13:
+						if (npcId == NPC[3])
+						{
+							htmltext = "3-06.htm";
+						}
+						else if (npcId == NPC[8])
+						{
+							htmltext = "8-01.htm";
+						}
+						break;
+					case 14:
+						if (npcId == NPC[8])
+						{
+							htmltext = "8-03.htm";
+						}
+						else if (npcId == NPC[11])
+						{
+							htmltext = "11-01.htm";
+						}
+						break;
+					case 15:
+						if (npcId == NPC[11])
+						{
+							htmltext = "11-02.htm";
+						}
+						else if (npcId == NPC[9])
+						{
+							htmltext = "9-01.htm";
+						}
+						break;
+					case 16:
+						if (npcId == NPC[9])
+						{
+							htmltext = "9-02.htm";
+						}
+						break;
+					case 17:
+						if (npcId == NPC[9])
+						{
+							htmltext = "9-04.htm";
+						}
+						else if (npcId == NPC[10])
+						{
+							htmltext = "10-01.htm";
+						}
+						break;
+					case 18:
+						if (npcId == NPC[10])
+						{
+							htmltext = "10-05.htm";
+						}
+						break;
+					case 19:
+						if (npcId == NPC[10])
+						{
+							htmltext = "10-07.htm";
+						}
+						else if (npcId == NPC[0])
+						{
+							htmltext = "0-06.htm";
+						}
+						break;
+					case 20:
+						if (npcId == NPC[0])
+						{
+							if (player.getLevel() >= 76)
+							{
+								htmltext = "0-09.htm";
+								if ((getClassId(player) < 131) || (getClassId(player) > 135)) // in Kamael quests, npc wants to chat for a bit before changing class
+								{
+									st.exitQuest(false);
+									addExpAndSp(player, 2299404, 0);
+									giveAdena(player, 5000000, true);
+									giveItems(player, 6622, 1); // XXX rewardItems?
+									int classId = getClassId(player);
+									int prevClass = getPrevClass(player);
+									player.setClassId(classId);
+									if (!player.isSubClassActive() && (player.getBaseClass() == prevClass))
+									{
+										player.setBaseClass(classId);
+									}
+									player.broadcastUserInfo();
+									cast(npc, player, 4339, 1);
+								}
+							}
+							else
+							{
+								htmltext = "0-010.htm";
+							}
+						}
+						break;
 				}
 			}
 		}
@@ -1144,7 +1064,7 @@ public class SagasSuperClass extends Quest
 	public static void main(String[] args)
 	{
 		// initialize superclass
-		new SagasSuperClass(-1, "SagasSuperClass", "Saga's SuperClass");
+		new SagasSuperClass(-1, SagasSuperClass.class.getSimpleName(), "Saga's SuperClass");
 		
 		// initialize subclasses
 		_scripts.add(new SagaOfEvasSaint());
-- 
GitLab