ZURSULUS L2

Saga of the Dominator

ID
77
Название
Saga of the Dominator
start_npcs_json
[]
npc_ids_json
[]
constants_json
{}
Статус разбора
metadata_only; dynamic Java conditions/rewards retained in source; unresolved starts: []
Источник
game/data/scripts/quests/Q00077_SagaOfTheDominator/Q00077_SagaOfTheDominator.java

NPC квеста

Записей нет.

Условия уровней: выражения из Java

if (player.getLevel() < 76)
if (player.getLevel() < 76)
if (player.getLevel() >= 76)

Выдача предметов, адены и опыта: выражения из Java

giveItems(player, _items[10], 1);
addExpAndSp(player, 2299404, 0);
giveAdena(player, 5000000, true);
giveItems(player, 6622, 1);
giveItems(player, _items[1], 1);
giveItems(player, _items[4], 1);
giveItems(player, _items[7], 1);
giveItems(player, _items[9], 1);
giveItems(player, _items[9], 1);
giveItems(player, _items[8], 1);
giveItems(player, _items[5], 1);
giveItems(player, _items[6], 1);
giveItems(player, _items[8], 1);
addExpAndSp(player, 2299404, 0);
giveAdena(player, 5000000, true);
giveItems(player, 6622, 1); // XXX rewardItems?
giveItems(player, _items[3], getRandom(1, 4));

Квесты содержат динамические условия Java. Выражения выдачи включают промежуточные предметы, варианты и случайные награды; это не гарантированная награда. Константы приведены выше. Полные условия — в исходнике.

Тексты квеста

[0-01.htm] Grand Seer Rahorakti: Welcome, young Overlord! Have you heard of the recent goings-on among the six Orc tribes? "No! Please, go on." [0-010.htm] Grand Seer Rahorakti: Although you have what it takes to be a king, you should go and get stronger. Authority without power is meaningless! (Only a character of level 76 may transfer class. Don't abandon the quest before class transfer is complete!) [0-02.htm] Grand Seer Rahorakti: Flame Lord Kakai has amazing powers, but even they aren't enough alone! I have great hopes for you, but you're not ready yet. (This quest may only be undertaken by an Overlord of level 76 or above.) [0-03.htm] Grand Seer Rahorakti: Flame Lord Kakai has truly amazing power! Without him we would never survive the endless winter! But alas, he has no successor. If he dies now, who will save us? Overlords are quite rare in these parts. Among them, those worthy of becoming king are even fewer! I've lost touch with Cardia of the Hestui tribe and Akkan of the Neruga tribe... Even Atlus of the Gandi tribe has disappeared without a trace! You're my only hope! All I could find out from the Dudamara was where Flame Successor Akkan may be headed! Please go after him, my Overlord! I've heard that a Ketra Orc Messenger of the Betrayer Lesser Orcs has met with him. You must find Akkan! [0-04.htm] Grand Seer Rahorakti: All I could find out from the Dudamara was where Flame Successor Akkan may be headed! Please go after him, my Overlord! I've heard that a Ketra Orc Messenger of the Betrayer Lesser Orcs has met with him. You must find Akkan! [0-05.htm] Grand Seer Rahorakti: In the beginning, the six Orc tribes were equal. Over time, the Hestuis rose to prominence, and the other tribes began following them. The Atubas were in charge of raising Warriors, the Dudamaras were in charge of Khavatari and the Hestui tribe performed all the rituals for the ancestors. Now, with the endless winter upon us, we are threatened by total chaos! "Why?" [0-06.htm] Grand Seer Rahorakti: Thank you, Overlord! Although you couldn't find Atlus of the Gandi tribe, thanks to you, Flame Successor Akkan has returned to us! Let me tell you one more thing. Your success means that you've completed the Pilgrimage of the King! No one's done that since ancient times! "No big deal, right?" [0-07.htm] Grand Seer Rahorakti: According to historical documents, whoever completes the Pilgrimage of the King obtains the right to rule! Flame Successor Akkan has recommended that you become one of the successors of the sacred flame! Of course, this doesn't mean that you could be king, but at least now you stand a better chance of becoming a chief! Judging by the way the Dudamara told me you led the king's pilgrim, you definitely have what it takes to lead a tribe! You must remember to always behave accordingly! Your world is what you make it! [0-08.htm] Grand Seer Rahorakti: You now have the opportunity to become a ruler. Flame Successor Akkan has recommended you personally to Flame Lord Kakai! You'll be right at the top with Akkan and Cardia, my friend! Why don't you go try to get a little stronger? (Only a character of level 76 may transfer class. Do not abandon the quest before class transfer is complete.) [0-09.htm] Grand Seer Rahorakti: According to the Dudamara, you have what it takes to rule a tribe. Act accordingly! [1-01.htm] Chef Donath: Bitter Cold Vodka? Isn't that the Orcish liquor made by mixing the flames of Pa'agrio with the power of 99 dead spirits? You can't just ask me to make such a.... "Well you see, it's like this..." [1-02.htm] Chef Donath: Genuine Bitter Cold Vodka is practically impossible to make, but I can get pretty close! I'll need a divine ingredient known as an ice crystal. Chef Jeremy can tell you where to find one. I can't make Bitter Cold Vodka without it! [1-03.htm] Chef Donath: You brought the ice crystal! Excellent! Now I'll make the Bitter Cold Vodka. I must warn you, the power of the spirits within the liquor is not that strong, and over time, it loses its effect. Will that be acceptable? "That's OK." [1-04.htm] Chef Donath: Take the vodka at the absolute zero point, and return to Ketra's Messenger Wahkan. [1-05.htm] Chef Donath: Hmm... if that's what you want, I'll do it. I should able to get pretty close to the original! It will work for a simple ritual, but not in a formal religious rite. I must have a divine ingredient known as an ice crystal. Chef Jeremy can tell you where to find one. I can't make Bitter Cold Vodka without it. [1-06.htm] Chef Donath: Okay, then. Here it is! Take this, and return to Ketra's Messenger Wahkan. It should work fine! [10-01.htm] Tablet of Vision: You hear angry screams and the sounds of battle. The power of a tyrant is present here. The tablet is before your eyes. Step closer. [10-02.htm] Tablet of Vision: Darkness surrounds the king who is not king. Flame Successor Akkan rules the kingdom in all but name. [10-03.htm] Tablet of Vision: The tablet is still and dark. Akkan turns this way and smiles. [10-04.htm] Tablet of Vision: There is someone else here. You hear fighting. [10-05.htm] Tablet of Vision: The Stone of Commune emits light as you approach. Commune with the Tablet of Vision. [10-06.htm] Tablet of Vision: Great knowledge rushes into your mind. You hear the sound of distant laughter. A voice whispers, "Another Hero is born." A lady in blue answers, "No, he's just beginning. I can't give him much power yet, but he conjured the soul himself and filled my brother's vacancy." As the power of a king rises, so does the darkness surrounding him. A king must know his boundaries as his power can be defeated by shadow or light. A tyrant that seeks power above all else may lose his following, yet one who cowers behind the light must call upon people with greater powers than his own. Speak with Grand Seer Rahorakti. [10-07.htm] Tablet of Vision: Further communion with this tablet would be futile. Everything has been solved! Speak with Rahorakti in Rune Castle Town. [11-01.htm] Seer Skahi: Tejakar Pa'agrio! You returned! Flame Successor Akkan has learned that the greater your deeds are, the darker your shadow is. Wisdom and strength are not the only qualities of a king. What do you think it means to be a king? "What did Akkan say?" [11-02.htm] Seer Skahi: Find the Archon of Halisha inside the Four Sepulchers at the Human Imperial Tomb. If entering is too difficult, go to the Shrine of the Loyal and fight Halisha's minions. He'll show up if you kill enough of them! Defeat him and get the Stone of Commune. [11-03.htm] Seer Skahi: Follow him to get to the truth. You must find the Stone of Commune. The power of the king that you seek was created by the gods, but stolen by devils. Find the Archon of Halisha inside the Four Sepulchers at the Human Imperial Tomb! If entering is too difficult, go to the Shrine of the Loyal and fight Halisha's minions! He'll show up if you kill enough of them. Defeat him and get the Stone of Commune! [2-01.htm] Ketra's Messenger Wahkan: Does your visit have anything to do with the Flame Successor who recently passed by? "Do you know him?" [2-02.htm] Ketra's Messenger Wahkan: Not done yet? Find Master Chef Donath. [2-03.htm] Ketra's Messenger Wahkan: Our chief shaman uses something similar to perform a ritual, but what you have clearly has more divine power! The Flame Successor is one of very few Orcs who has the qualities of a king! "What are the qualities?" [2-04.htm] Ketra's Messenger Wahkan: Take the stone to the south of the Tower of Insolence! That's all we know of the King's journeys. [2-05.htm] Ketra's Messenger Wahkan: Want to know more, huh? First do me a favor! Bring me the Bitter Cold Vodka that the 6 Noble Orcs stole to dedicate to the 99 souls. You must not be caught by the Lord of Flame! Meet Master Chef Donath in the northern hot springs area. [2-06.htm] Ketra's Messenger Wahkan: An Overlord should know about the qualities of a King! It's not about the power. There are so many cultures lost because of the Humans. You must look beyond your roots to understand. Despite our long bloodlines, the Orc Kingdom is descended from you, the family of flame! This sacred stone of vision holds the mystery of the King's path. He was on the forgotten pilgrimage of the Orcs. This is all that I know. Take this stone to the south of the Tower of Insolence! [3-01.htm] Seer Skahi: The spidersilk of Duda-Mara told me you would come. We will meet again, but you must do something first. "What is it?" [3-02.htm] Seer Skahi: Go to the Ketra Orc outpost and see Messenger Wahkan. Gain their trust by lending your strength. Show the spirit of a warrior! If you feel betrayed, there is another way. [3-03.htm] Seer Skahi: Meet Varka's Messenger Naran Ashanuk in the Varka Silenos stronghold. Gain their trust by lending your strength! To fight the betrayer Orcs is the spirit of a warrior! If your suffering is too great, there is another way! [3-04.htm] Seer Skahi: Warrior, you must bring the Divine Stone of Wisdom! To get it you must choose sides in this war. Find Messenger Wahkan of the Ketra Orcs or Messenger Naran Ashanuk of the Varka Silenos. [3-05.htm] Seer Skahi: Warrior, you have shown the qualities of a king and passed the test by getting the Divine Stone of Wisdom! Don't forget the people you helped or the blood you spilled. Never forget that Duda-Mara's spidersilk protects you. Hand me the stone! "Here's the stone." [3-06.htm] Seer Skahi: Go to the northe of the Varka Silenos Barracks and commune with the Tablet! [3-07.htm] Seer Skahi: You'd be called a king if you had a throne! Here is your test. The Ketra Orcs, a lower race who betrayed us long ago, and the Varka Silenos are at war. They each have a Divine Stone of Wisdom, but you must earn their absolute trust to get it. Bring either stone to pass the test. Which side do you choose? The Ketra Orcs The Varka Silenos [3-08.htm] Seer Skahi: Hear my words Soul that is contained within the stone! Wake up and restore the power of the Stone of Commune! The one who has the quality of a king, receive this Stone of Commune you restored! Go to the Tablet in the north of the Varka Silenos Barracks and tell it what you have done! The Eternal Flame is watching you always! Tejakar Oroka! [4-01.htm] Flame Successor Akkan: At last, someone to help me deal with that despot! [4-010.htm] Flame Successor Akkan: My older sister Cardia told me long ago that she wasn't fit to be queen. Now I know why! I'll never forget what I felt during those fights! I'm not sure what's coming next, but at least I know myself! Take this Stone of Commune, you'll need it on your pilgrimage. Now I must return to Flame Lord Kakai. Goodbye for now! "Wait!" [4-011.htm] Flame Successor Akkan: My elder sister Cardia told me long ago she wasn't fit to be queen. I can't say exactly what's next, but now I know how big my vessel is! You'll need this Stone of Commune for the Pilgrimage of the King. Now I must return to Flame Lord Kakai. Goodbye for now! [4-02.htm] Flame Successor Akkan: That man is a despot! If you don't leave, you might be sacrificed! [4-03.htm] Flame Successor Akkan: I can't let this go. I need some help dealing with this despot. [4-04.htm] Flame Successor Akkan: I can't pretend I don't know anything like that old man of Elmore did. By Atlus of Gandi, I also won't be like Hallate, who said he saw something when he didn't! I must be of sound mind for the upcoming winter! Help me defeat him! [4-05.htm] Flame Successor Akkan: This is not your fight! I command you to leave! [4-06.htm] Flame Successor Akkan: Thanks to you, I defeated the despot! I now know what I must do. "What?" [4-07.htm] Flame Successor Akkan: Thanks, you saved my life! Now I know what I must do. "What?" [4-08.htm] Flame Successor Akkan: You haven't finished the Pilgrimage of the King yet? Use the Stone of Commune to find the stone tablet. [4-09.htm] Flame Successor Akkan: You haven't finished the Pilgrimage of the King yet? Use the Stone of Commune to find the stone tablet. [5-01.htm] Tablet of Vision: The Stone of Commune starts emitting light as soon as you near the Tablet of Vision. Commune with the Tablet of Vision. [5-02.htm] Tablet of Vision: Countless thoughts beyond comprehension sear painfully into your brain. A female voice seems to float on by as if the wind were singing... You sense that the next Stone of Commune is held by many warriors in a place south of the Valley of Saints. [5-03.htm] Tablet of Vision: Further communion with this tablet is futile. The Guardians of Forbidden Knowledge have the next Stone of Commune in the south of the Valley of Saints. Kill the guardians and take their stone! [6-01.htm] Tablet of Vision: The hieroglyphs on the tablet are indecipherable. Retrieve the Stone of Commune from the Guardians of Forbidden Knowledge. [6-02.htm] Tablet of Vision: The Stone of Commune starts emitting light as soon as you near the Tablet of Vision. Commune with the Tablet of Vision. [6-03.htm] Tablet of Vision: Countless thoughts beyond comprehension sear painfully into your brain. You hear the faint whisper of a woman's voice. You see Kadia, the Hestui who threw herself into the nest of Antharas in order to find herself, and Akkan, the Successor of Flame, who missed her so badly that he decided to become a king and went on a pilgrimage. And Atrus, in search of the ancient conqueror! Kadia found herself and Akkan found he wasn't really cut out to be a king. But Atrus... Well, she gave into the temptations of power! Now she stands before the Tablet of Vision holding the Stone of Commune! You can find her near the Ketra Orc Outpost! [6-04.htm] Tablet of Vision: Further communion with this tablet is futile. Kill Atrus of the Gandi tribe and take her Stone of Commune! You'll find her near the Ketra Orc Outpost. [7-01.htm] Tablet of Vision: As you near the Tablet of Vision, you sense the presence of the one who sought ultimate power by currying the favor of the King. It's the tyrant! He smiles smugly while rubbing the Stone of Commune. "Fight, you rascal!" [7-02.htm] Tablet of Vision: Overlord Atrus has no more qualities of a king than any common Orc! He's no more than a tyrant! [7-03.htm] Tablet of Vision: The tablet is engraved with indecipherable hieroglyphs. Atrus's offensive continues! [7-04.htm] Tablet of Vision: You sense a disturbance near the Tablet of Vision. The time has not yet come for you to prove yourself. [7-05.htm] Tablet of Vision: The Stone of Commune starts emitting light as soon as you near the Tablet of Vision. Commune with the Tablet of Vision. [7-06.htm] Tablet of Vision: Countless thoughts beyond comprehension sear painfully into your brain. You hear the faint whisper of a female's voice... What is a king? A king holds his people, land, army and magic in his arms. What an awesome responsibility! The Silvery Spidersilk shines in the dark. The seer of the Orc Guild in Goddard Castle Town has Skahi's ear. Skahi looks this way and motions you to come along quickly. [7-07.htm] Tablet of Vision: Further communion with this tablet is futile. You must find the next Stone of Commune! The one who has the next Stone of Commune is Seer Skahi in Goddard Castle Town. [8-01.htm] Tablet of Vision: The Stone of Commune starts emitting light as you approach the Tablet of Vision. Commune with the Tablet of Vision. [8-02.htm] Tablet of Vision: Countless thoughts beyond comprehension sear painfully into your brain. A vision appears of a mysterious dark knight... The King is tormented, and his mind is slipping. His inability to discern right from wrong has already led to needless deaths. In an epic battle between light and darkness, the King seems to be allowing the dark side to control him. The man walks with a heavy weight on his shoulders. He gave the Stone of Commune to Skahi! [8-03.htm] Tablet of Vision: Further communion with this tablet would be pointless at this time. Speak with Seer Skahi in Goddard Castle Town. [9-01.htm] Tablet of Vision: The tablet is still and dark. The Stone of Commune that can access this tablet may be obtained at the Imperial Tomb or the Shrine of the Loyal. [9-02.htm] Tablet of Vision: The Stone of Commune starts emitting light as you approach the Tablet of Vision. Commune with the Tablet of Vision. [9-03.htm] Tablet of Vision: A sharp blast of knowlege courses through your cranium! A vision appears of a black knight! And a long line of ancient kings! King of Unification Raul, Old King van Halter, King of Insolence Baium, Founding Emperor Shunaiman and the Queen of Elves Beora.... Those were the days! An Orc was the advance guard and an Elf was the page. And there is the King of the Giants! He was the best king, but his insolence poisoned his relationship with the goddess... A king of evil creeping in darkness with the power of a ruler! A kingdom rises or falls depending on the heart of its King! Only a very few are worthy to be called King! What does it mean to be King? Successor of Flame Akkan left to meet a tyrant with that question on his mind. He wants to know the difference between a king and a tyrant! [9-04.htm] Tablet of Vision: Further communion with this tablet would be futile. Confront the tyrant at the final Tablet of Vision in the Forest of the Dead!
Исходник условий и наград (Java)
/*
 * This file is part of the L2J Mobius project.
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
package quests.Q00077_SagaOfTheDominator;

import quests.AbstractSagaQuest;

/**
 * @author Emperorc
 */
public class Q00077_SagaOfTheDominator extends AbstractSagaQuest
{
	public Q00077_SagaOfTheDominator()
	{
		super(77, "Saga of the Dominator");
		_npc = new int[]
		{
			31336,
			31624,
			31371,
			31290,
			31636,
			31646,
			31648,
			31653,
			31654,
			31655,
			31656,
			31290
		};
		_items = new int[]
		{
			7080,
			7539,
			7081,
			7492,
			7275,
			7306,
			7337,
			7368,
			7399,
			7430,
			7100,
			0
		};
		_mob = new int[]
		{
			27294,
			27226,
			27262
		};
		_classId = new int[]
		{
			115
		};
		_prevClass = new int[]
		{
			0x33
		};
		_x = new int[]
		{
			164650,
			47429,
			47391
		};
		_y = new int[]
		{
			-74121,
			-56923,
			-56929
		};
		_z = new int[]
		{
			-2871,
			-2383,
			-2370
		};
		_text = new String[]
		{
			"PLAYERNAME! Pursued to here! However, I jumped out of the Banshouren boundaries! You look at the giant as the sign of power!",
			"... Oh ... good! So it was ... let's begin!",
			"I do not have the patience ..! I have been a giant force ...! Cough chatter ah ah ah!",
			"Paying homage to those who disrupt the orderly will be PLAYERNAME's death!",
			"Now, my soul freed from the shackles of the millennium, Halixia, to the back side I come ...",
			"Why do you interfere others' battles?",
			"This is a waste of time.. Say goodbye...!",
			"...That is the enemy",
			"...Goodness! PLAYERNAME you are still looking?",
			"PLAYERNAME ... Not just to whom the victory. Only personnel involved in the fighting are eligible to share in the victory.",
			"Your sword is not an ornament. Don't you think, PLAYERNAME?",
			"Goodness! I no longer sense a battle there now.",
			"let...",
			"Only engaged in the battle to bar their choice. Perhaps you should regret.",
			"The human nation was foolish to try and fight a giant's strength.",
			"Must...Retreat... Too...Strong.",
			"PLAYERNAME. Defeat...by...retaining...and...Mo...Hacker",
			"....! Fight...Defeat...It...Fight...Defeat...It..."
		};
		registerNPCs();
	}
}


// Shared quest dependency: AbstractSagaQuest.java
/*
 * Copyright (c) 2013 L2jMobius
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
 * IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
package quests;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.l2jmobius.gameserver.config.PlayerConfig;
import org.l2jmobius.gameserver.entity.World;
import org.l2jmobius.gameserver.entity.WorldObject;
import org.l2jmobius.gameserver.entity.actor.Creature;
import org.l2jmobius.gameserver.entity.actor.Npc;
import org.l2jmobius.gameserver.entity.actor.Player;
import org.l2jmobius.gameserver.entity.groups.Party;
import org.l2jmobius.gameserver.mechanics.script.Quest;
import org.l2jmobius.gameserver.mechanics.script.QuestState;
import org.l2jmobius.gameserver.mechanics.skill.Skill;
import org.l2jmobius.gameserver.network.enums.ChatType;
import org.l2jmobius.gameserver.network.serverpackets.MagicSkillUse;
import org.l2jmobius.gameserver.network.serverpackets.NpcSay;

public abstract class AbstractSagaQuest extends Quest
{
	protected int[] _npc = {};
	protected int[] _items = {};
	protected int[] _mob = {};
	protected int[] _classId = {};
	protected int[] _prevClass = {};
	protected int[] _x = {};
	protected int[] _y = {};
	protected int[] _z = {};
	protected String[] _text = {};
	private static final Map<Npc, Integer> SPAWN_LIST = new HashMap<>();
	// @formatter:off
	private static final int[][] QUEST_CLASSES =
	{
		{ 0x7f }, { 0x80, 0x81 }, { 0x82 }, { 0x05 }, { 0x14 }, { 0x15 },
		{ 0x02 }, { 0x03 }, { 0x2e }, { 0x30 }, { 0x33 }, { 0x34 }, { 0x08 },
		{ 0x17 }, { 0x24 }, { 0x09 }, { 0x18 }, { 0x25 }, { 0x10 }, { 0x11 },
		{ 0x1e }, { 0x0c }, { 0x1b }, { 0x28 }, { 0x0e }, { 0x1c }, { 0x29 },
		{ 0x0d }, { 0x06 }, { 0x22 }, { 0x21 }, { 0x2b }, { 0x37 }, { 0x39 }
	};
	// @formatter:on
	private static final int[] ARCHON_HALISHA_NORM =
	{
		18212,
		18214,
		18215,
		18216,
		18218
	};
	
	public AbstractSagaQuest(int questId, String description)
	{
		super(questId, description);
	}
	
	public void registerNPCs()
	{
		addStartNpc(_npc[0]);
		addAttackId(_mob[2]);
		addAttackId(_mob[1]);
		addSkillSeeId(_mob[1]);
		addFirstTalkId(_npc[4]);
		addTalkId(_npc);
		addKillId(_mob);
		final int[] questItemIds = _items.clone();
		questItemIds[0] = 0;
		questItemIds[2] = 0; // remove Ice Crystal and Divine Stone of Wisdom
		registerQuestItems(questItemIds);
		for (int archonMinion = 21646; archonMinion < 21652; archonMinion++)
		{
			addKillId(archonMinion);
		}
		
		addKillId(ARCHON_HALISHA_NORM);
		for (int guardianAngel = 27214; guardianAngel < 27217; guardianAngel++)
		{
			addKillId(guardianAngel);
		}
	}
	
	@Override
	public String onEvent(String event, Npc npc, Player player)
	{
		final QuestState st = getQuestState(player, false);
		if (st == null)
		{
			return null;
		}
		
		String htmltext = null;
		switch (event)
		{
			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)
				{
					htmltext = "0-02.htm";
					if (st.isCreated())
					{
						st.exitQuest(true);
					}
				}
				else
				{
					htmltext = "0-05.htm";
				}
				break;
			}
			case "0-2":
			{
				if (player.getLevel() < 76)
				{
					takeItems(player, _items[10], -1);
					st.setCond(20, true);
					htmltext = "0-08.htm";
				}
				else
				{
					takeItems(player, _items[10], -1);
					addExpAndSp(player, 2299404, 0);
					giveAdena(player, 5000000, true);
					giveItems(player, 6622, 1);
					final int playerClass = getPlayerClass(player);
					final int prevClass = getPrevClass(player);
					player.setPlayerClass(playerClass);
					if (!player.isSubClassActive() && (player.getBaseClass() == prevClass))
					{
						player.setBaseClass(playerClass);
					}
					
					player.broadcastUserInfo();
					cast(npc, player, 4339, 1);
					st.exitQuest(false);
					htmltext = "0-07.htm";
				}
				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");
				cancelQuestTimer("Mob_2 has despawned", npc, player);
				deleteSpawn(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);
				st.set("spawned", "0");
				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)
				{
					final Npc mob1 = addSpawn(_mob[0], _x[0], _y[0], _z[0], -1);
					st.set("spawned", "1");
					startQuestTimer("Mob_1 Timer 1", 500, mob1, player);
					startQuestTimer("Mob_1 has despawned", 300000, mob1, player);
					addSpawn(st, mob1);
					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);
				st.set("Quest0", "0");
				st.set("Tab", "0");
				takeItems(player, _items[8], 1);
				cast(npc, player, 4546, 1);
				htmltext = "9-03.htm";
				break;
			}
			case "10-1":
			{
				if (st.getInt("Quest0") == 0)
				{
					final Npc mob3 = addSpawn(_mob[2], _x[1], _y[1], _z[1], -1);
					final Npc mob2 = addSpawn(_npc[4], _x[2], _y[2], _z[2], -1);
					addSpawn(st, mob3);
					addSpawn(st, mob2);
					st.set("Mob_2", String.valueOf(mob2.getObjectId()));
					st.set("Quest0", "1");
					st.set("Quest1", "45");
					startQuestTimer("Mob_3 Timer 1", 500, mob3, player, true);
					startQuestTimer("Mob_3 has despawned", 59000, mob3, player);
					startQuestTimer("Mob_2 Timer 1", 500, mob2, player);
					startQuestTimer("Mob_2 has despawned", 60000, mob2, player);
					htmltext = "10-02.htm";
				}
				else if (st.getInt("Quest1") == 45)
				{
					htmltext = "10-03.htm";
				}
				else
				{
					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(npc);
				return null;
			}
			case "Archon Hellisha has despawned":
			{
				autoChat(npc, _text[6].replace("PLAYERNAME", player.getName()));
				st.set("spawned", "0");
				deleteSpawn(npc);
				return null;
			}
			case "Mob_3 Timer 1":
			{
				final Npc mob2 = findSpawn(player, World.findObject(st.getInt("Mob_2")).asNpc());
				if ((World.getFirstVisibleObject(npc, Npc.class, it -> it == mob2) != null))
				{
					npc.asAttackable().addDamageHate(mob2, 0, 99999);
					npc.getAI().setIntentionAttack(mob2);
					mob2.getAI().setIntentionAttack(npc);
					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(npc);
				return null;
			}
			case "Mob_2 Timer 1":
			{
				autoChat(npc, _text[7].replace("PLAYERNAME", player.getName()));
				startQuestTimer("Mob_2 Timer 2", 1500, npc, player);
				if (st.getInt("Quest1") == 45)
				{
					st.set("Quest1", "0");
				}
				
				return null;
			}
			case "Mob_2 Timer 2":
			{
				autoChat(npc, _text[8].replace("PLAYERNAME", player.getName()));
				startQuestTimer("Mob_2 Timer 3", 10000, npc, player);
				return null;
			}
			case "Mob_2 Timer 3":
			{
				if (st.getInt("Quest0") == 0)
				{
					startQuestTimer("Mob_2 Timer 3", 13000, npc, player);
					if (getRandomBoolean())
					{
						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(npc);
				}
				else
				{
					startQuestTimer("Mob_2 has despawned", 1000, npc, player);
				}
				
				return null;
			}
		}
		
		return htmltext;
	}
	
	@Override
	public void onAttack(Npc npc, Player player, int damage, boolean isSummon)
	{
		final QuestState st2 = findRightState(npc);
		if (st2 != null)
		{
			final int cond = st2.getCond();
			final QuestState st = getQuestState(player, false);
			final int npcId = npc.getId();
			if ((npcId == _mob[2]) && (st == st2) && (cond == 17))
			{
				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(npc);
				}
				
				st.set("Quest0", Integer.toString(quest0));
			}
			else if ((npcId == _mob[1]) && (cond == 15) && ((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(npc);
			}
		}
	}
	
	@Override
	public String onFirstTalk(Npc npc, Player player)
	{
		String htmltext = "";
		final QuestState st = getQuestState(player, false);
		final int npcId = npc.getId();
		if ((st != null) && (npcId == _npc[4]))
		{
			final int cond = st.getCond();
			if (cond == 17)
			{
				final QuestState st2 = findRightState(npc);
				if (st2 != null)
				{
					player.setLastQuestNpcObject(npc.getObjectId());
					final int tab = st.getInt("Tab");
					final int quest0 = st.getInt("Quest0");
					if (st == st2)
					{
						if (tab == 1)
						{
							if (quest0 == 0)
							{
								htmltext = "4-04.htm";
							}
							else if (quest0 == 1)
							{
								htmltext = "4-06.htm";
							}
						}
						else if (quest0 == 0)
						{
							htmltext = "4-01.htm";
						}
						else if (quest0 == 1)
						{
							htmltext = "4-03.htm";
						}
					}
					else if (tab == 1)
					{
						if (quest0 == 0)
						{
							htmltext = "4-05.htm";
						}
						else if (quest0 == 1)
						{
							htmltext = "4-07.htm";
						}
					}
					else if (quest0 == 0)
					{
						htmltext = "4-02.htm";
					}
				}
			}
			else if (cond == 18)
			{
				htmltext = "4-08.htm";
			}
		}
		
		if (htmltext.isEmpty())
		{
			npc.showChatWindow(player);
		}
		
		return htmltext;
	}
	
	@Override
	public void onKill(Npc npc, Player player, boolean isSummon)
	{
		final int npcId = npc.getId();
		QuestState st = getQuestState(player, false);
		for (int archonMinion = 21646; archonMinion < 21652; archonMinion++)
		{
			if (npcId == archonMinion)
			{
				final Party party = player.getParty();
				if (party != null)
				{
					final List<QuestState> partyQuestMembers = new ArrayList<>();
					for (Player player1 : party.getMembers())
					{
						final QuestState st1 = findQuest(player1);
						if ((st1 != null) && st1.isCond(15) && player1.isInsideRadius2D(player, PlayerConfig.ALT_PARTY_RANGE))
						{
							partyQuestMembers.add(st1);
						}
					}
					
					if (!partyQuestMembers.isEmpty())
					{
						final QuestState st2 = partyQuestMembers.get(getRandom(partyQuestMembers.size()));
						giveHalishaMark(st2);
					}
				}
				else
				{
					final QuestState st1 = findQuest(player);
					if ((st1 != null) && st1.isCond(15))
					{
						giveHalishaMark(st1);
					}
				}
				return;
			}
		}
		
		for (int element : ARCHON_HALISHA_NORM)
		{
			if (npcId == element)
			{
				final QuestState st1 = findQuest(player);
				if ((st1 != null) && 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()));
					giveItems(player, _items[8], 1);
					takeItems(player, _items[3], -1);
					st1.setCond(16, true);
				}
				return;
			}
		}
		
		for (int guardianAngel = 27214; guardianAngel < 27217; guardianAngel++)
		{
			if (npcId == guardianAngel)
			{
				final QuestState st1 = findQuest(player);
				if ((st1 != null) && st1.isCond(6))
				{
					final int kills = st1.getInt("kills");
					if (kills < 9)
					{
						st1.set("kills", Integer.toString(kills + 1));
					}
					else
					{
						giveItems(player, _items[5], 1);
						st.setCond(7, true);
					}
				}
				return;
			}
		}
		
		if ((st != null) && (npcId != _mob[2]))
		{
			final QuestState st2 = findRightState(npc);
			if (st2 != null)
			{
				final int cond = st.getCond();
				if ((npcId == _mob[0]) && (cond == 8))
				{
					if (!player.isInParty() && (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(npc);
				}
				else if ((npcId == _mob[1]) && (cond == 15))
				{
					if (!player.isInParty())
					{
						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(npc);
				}
			}
		}
		else if (npcId == _mob[0])
		{
			st = findRightState(npc);
			if (st != null)
			{
				cancelQuestTimer("Mob_1 has despawned", npc, st.getPlayer());
				st.set("spawned", "0");
				deleteSpawn(npc);
			}
		}
		else if (npcId == _mob[1])
		{
			st = findRightState(npc);
			if (st != null)
			{
				cancelQuestTimer("Archon Hellisha has despawned", npc, st.getPlayer());
				st.set("spawned", "0");
				deleteSpawn(npc);
			}
		}
		else if (npcId == _mob[2])
		{
			st = findRightState(npc);
			if (st != null)
			{
				st.setCond(18, true);
				autoChat(npc, _text[13].replace("PLAYERNAME", player.getName()));
				st.set("Quest0", "0");
				cancelQuestTimer("Mob_2 has despawned", npc, player);
				deleteSpawn(npc);
			}
		}
	}
	
	@Override
	public void onSkillSee(Npc npc, Player player, Skill skill, List<WorldObject> targets, boolean isSummon)
	{
		if (SPAWN_LIST.containsKey(npc) && (SPAWN_LIST.get(npc) != player.getObjectId()))
		{
			final Player questPlayer = World.findObject(SPAWN_LIST.get(npc)).asPlayer();
			if (questPlayer == null)
			{
				return;
			}
			
			for (WorldObject obj : targets)
			{
				if ((obj == questPlayer) || (obj == npc))
				{
					final QuestState st2 = findRightState(npc);
					if (st2 == null)
					{
						return;
					}
					
					autoChat(npc, _text[5].replace("PLAYERNAME", player.getName()));
					cancelQuestTimer("Archon Hellisha has despawned", npc, st2.getPlayer());
					st2.set("spawned", "0");
					deleteSpawn(npc);
				}
			}
		}
	}
	
	@Override
	public String onTalk(Npc npc, Player player)
	{
		final QuestState st = getQuestState(player, true);
		String htmltext = getNoQuestMsg(player);
		final int npcId = npc.getId();
		if ((npcId == _npc[0]) && st.isCompleted())
		{
			htmltext = getAlreadyCompletedMsg(player);
		}
		else if (player.getPlayerClass().getId() == getPrevClass(player))
		{
			switch (st.getCond())
			{
				case 0:
				{
					if (npcId == _npc[0])
					{
						htmltext = "0-01.htm";
					}
					break;
				}
				case 1:
				{
					if (npcId == _npc[0])
					{
						htmltext = "0-04.htm";
					}
					else if (npcId == _npc[2])
					{
						htmltext = "2-01.htm";
					}
					break;
				}
				case 2:
				{
					if (npcId == _npc[2])
					{
						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]))
						{
							htmltext = "1-03.htm";
						}
						else
						{
							htmltext = "1-02.htm";
						}
					}
					break;
				}
				case 4:
				{
					if (npcId == _npc[1])
					{
						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";
							
							st.exitQuest(false);
							addExpAndSp(player, 2299404, 0);
							giveAdena(player, 5000000, true);
							giveItems(player, 6622, 1); // XXX rewardItems?
							final int playerClass = getPlayerClass(player);
							final int prevClass = getPrevClass(player);
							player.setPlayerClass(playerClass);
							if (!player.isSubClassActive() && (player.getBaseClass() == prevClass))
							{
								player.setBaseClass(playerClass);
							}
							
							player.broadcastUserInfo();
							cast(npc, player, 4339, 1);
						}
						else
						{
							htmltext = "0-010.htm";
						}
					}
					break;
				}
			}
		}
		
		return htmltext;
	}
	
	private QuestState findQuest(Player player)
	{
		final QuestState st = getQuestState(player, false);
		if (st != null)
		{
			if (getId() == 68)
			{
				for (int q = 0; q < 2; q++)
				{
					if (player.getPlayerClass().getId() == QUEST_CLASSES[1][q])
					{
						return st;
					}
				}
			}
			else if (player.getPlayerClass().getId() == QUEST_CLASSES[getId() - 67][0])
			{
				return st;
			}
		}
		
		return null;
	}
	
	private void autoChat(Npc npc, String text)
	{
		npc.broadcastPacket(new NpcSay(npc.getObjectId(), ChatType.GENERAL, npc.getId(), text));
	}
	
	private void cast(Npc npc, Creature target, int skillId, int level)
	{
		target.broadcastSkillPacket(new MagicSkillUse(target, target, skillId, level, 6000, 1), target);
		target.broadcastSkillPacket(new MagicSkillUse(npc, npc, skillId, level, 6000, 1), npc);
	}
	
	private void addSpawn(QuestState st, Npc mob)
	{
		SPAWN_LIST.put(mob, st.getPlayer().getObjectId());
	}
	
	private static Npc findSpawn(Player player, Npc npc)
	{
		if (SPAWN_LIST.containsKey(npc) && (SPAWN_LIST.get(npc) == player.getObjectId()))
		{
			return npc;
		}
		
		return null;
	}
	
	private void deleteSpawn(Npc npc)
	{
		if (SPAWN_LIST.remove(npc) != null)
		{
			npc.deleteMe();
		}
	}
	
	private QuestState findRightState(Npc npc)
	{
		Player player = null;
		QuestState st = null;
		final Integer spawned = SPAWN_LIST.get(npc);
		if (spawned != null)
		{
			player = World.getPlayer(spawned);
			if (player != null)
			{
				st = player.getQuestState(getName());
			}
		}
		
		return st;
	}
	
	private int getPlayerClass(Player player)
	{
		if (player.getPlayerClass().getId() == 0x81)
		{
			return _classId[1];
		}
		
		return _classId[0];
	}
	
	private int getPrevClass(Player player)
	{
		if (player.getPlayerClass().getId() == 0x81)
		{
			if (_prevClass.length == 1)
			{
				return -1;
			}
			
			return _prevClass[1];
		}
		
		return _prevClass[0];
	}
	
	private void giveHalishaMark(QuestState st)
	{
		if (st.getInt("spawned") == 0)
		{
			final Player player = st.getPlayer();
			if (getQuestItemsCount(player, _items[3]) >= 700)
			{
				takeItems(player, _items[3], 20);
				final int xx = st.getPlayer().getX();
				final int yy = st.getPlayer().getY();
				final int zz = st.getPlayer().getZ();
				final Npc archon = addSpawn(_mob[1], xx, yy, zz, -1);
				addSpawn(st, archon);
				st.set("spawned", "1");
				startQuestTimer("Archon Hellisha has despawned", 600000, archon, player);
				autoChat(archon, _text[13].replace("PLAYERNAME", st.getPlayer().getName()));
				archon.asAttackable().addDamageHate(st.getPlayer(), 0, 99999);
				archon.getAI().setIntentionAttack(st.getPlayer());
			}
			else
			{
				giveItems(player, _items[3], getRandom(1, 4));
			}
		}
	}
}