ZURSULUS L2

Saga of the Shillien Saint

ID
98
Название
Saga of the Shillien Saint
start_npcs_json
[]
npc_ids_json
[]
constants_json
{}
Статус разбора
metadata_only; dynamic Java conditions/rewards retained in source; unresolved starts: []
Источник
game/data/scripts/quests/Q00098_SagaOfTheShillienSaint/Q00098_SagaOfTheShillienSaint.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] Magister Anastia: A Saint of Light has been sighted in Goddard Castle Town. It could be a fake, like the one that appeared briefly in Gludio, but things are a little different this time. "What's different?" [0-010.htm] Magister Anastia: Your understanding doesn't yet equal your faith. (Only a character of level 76 or above is allowed to transfer class. Do not abandon quest before transfer is complete!) [0-02.htm] Magister Anastia: I'll ask you who is following the Path of Faith. What are you doing to get away from your destiny? It seems that you still have to go further to the Path of Faith. Please come back when your convictions are stronger. (This quest may only be undertaken by a Shillien Elder of level 76 or above.) [0-03.htm] Magister Anastia: Meet with the Saint of Light in Goddard Castle Town. You must decide what to do from there. Come back when you are done. In this book you will find how to deal with the devil in the north should you run into it. [0-04.htm] Magister Anastia: Go to the Saint of Light in Goddard Castle Town and test your fate. [0-05.htm] Magister Anastia: Humans and Elves are already accepting signs that she's a real saint. Dawn Witness Franz has officially acknowledged her. Guide of Twilight Luna and Sage of Greenleaves Elexia are about to as well. Will you meet her and test your fate? "I will!" [0-06.htm] Magister Anastia: Congratulations! You've acquired new understanding and earned Alcadia's recognition. "What's next?" [0-07.htm] Magister Anastia: So, the title of Shillien Elder doesn't become you any more. You have earned the title of Shillien Saint. Your fate is to become a guiding light for others. [0-08.htm] Magister Anastia: Your understanding doesn't yet equal your faith! (Only a character of level 76 or above is allowed to transfer class. Do not abandon quest before transfer is complete!) [0-09.htm] Magister Anastia: The title of Shillien Elder doesn't become you any more. You've earned the title of Shillien Saint. May your steadfast faith be a guiding light to others! [1-01.htm] Chef Duncan: What can I do for you, priest? Saint Agnes sent you to me? Well come on in, then! How are things with Saint Agnes? Ah, yes, the starving people! She has a heart of gold, that one! I'll always do anything I can to help her. I'm glad you came! I'll need something to keep the food fresh on the trip back to her, however... "What do you need?" [1-02.htm] Chef Duncan: There's quite a bit of food here, and it's bound to spoil unless we have a way to preserve it. We'll need an ice crystal to keep it fresh. Chef Jeremy has them. You can go and ask him about them. [1-03.htm] Chef Duncan: You brought the ice crystals. I've already prepared all the food and packaged it to go. Now all I have to do is process it to keep it fresh. Give me an ice crystal now. "Here it is." [1-04.htm] Chef Duncan: You're still here? The food's been preserved, but it won't last forever! You should immediately take it to the saint! [1-05.htm] Chef Duncan: Ice crystals are crystallizations of cold energy. Bring one to me, and I'll process the food so that it won't spoil on your journey. Chef Jeremy has the ice crystals. Chef Jeremy has the ice crystals. You must meet and help him. He is laboring to prepare a cooking contest. That way you will find the ice crystals. Please do it for me. [1-06.htm] Chef Duncan: To keep it cool, place the ice crystal here and seal it completely like this... Voila! It's done! Take it to the saint! Do you think it's enough food? It's not a pretty box, but I put my heart into it! I trust the saint will divide it fairly among all the people in the village. Please, give my best regards to Saint Agnes! [10-01.htm] Tablet of Vision: The tablet begins to vibrate. The Stone of Commune must be nearby. Patrol the area. [10-02.htm] Tablet of Vision: The Stone of Commune begins to vibrate. A strong adversary appears, but is restrained by someone. [10-03.htm] Tablet of Vision: Without a Stone of Commune it's just a tablet. Find the person who protected you. [10-04.htm] Tablet of Vision: There's a disturbance nearby. Don't get involved. Wait and see what happens. [10-05.htm] Tablet of Vision: The tablet begins to vibrate. Touch the Stone of Commune to the Tablet of Vision. [10-06.htm] Tablet of Vision: Forbidden knowledge begins to flow into you without pain. Go and report to Magister Anastia of Hardin. [10-07.htm] Tablet of Vision: The tablet goes still. Everything has ended. Go and report to Magister Anastia in Hardin. [11-01.htm] Magister Kamilen: We meet again! Saint Agnes foretold everything correctly. I'll always trust her wisdom. She has more instructions for you. "What are they?" [11-02.htm] Magister Kamilen: You can get the next stone by killing the Archon of Halisha in the Four Sepulchers. You'll need help to gain entry. If that proves too difficult, go to the Shrine of the Loyal and slay Halisha's minions. If you collect 700 Halisha's Marks, the Archon will appear. The minions include Grave Scarabs, Scavenger Scarabs, Grave Ants, Scavenger Ants, Shrine Knights, and Shrine Guards. The next Tablet of Vision can be seen from the road between the Wall of Argos and Goddard. [11-03.htm] Magister Kamilen: You can get the next stone by killing the Archon of Halisha in the Four Sepulchers. You'll need help to gain entry. If that proves too difficult, go to the Shrine of the Loyal and slay Halisha's minions. If you collect 700 Halisha's Marks, the Archon will appear. The minions include Grave Scarabs, Scavenger Scarabs, Grave Ants, Scavenger Ants, Shrine Knights, and Shrine Guards. The next Tablet of Vision can be seen from the road between the Wall of Argos and Goddard. [2-01.htm] Saint of Light Agnes: I have heard of your undying passion as a Priest. Goddard Castle Town needs someone to help relieve the grief and suffering that is abundant here. The people have lost their hopes and dreams. Can you help me reignite their passions? "What can I do?" [2-02.htm] Saint of Light Agnes: Meet Duncan who is working in the hot springs area. He can help with the suffering caused by this famine. [2-03.htm] Saint of Light Agnes: The light shines brighter than ever in you, Priest. I gather your mission was a success. How is Duncan? May the blessing of light always be with him for this favor. "Here's the food you asked for." [2-04.htm] Saint of Light Agnes: I won't forget your kindness. Have you been to the Tablet of Vision to the south of the Tower of Insolence? I hope you find what you seek. [2-05.htm] Saint of Light Agnes: I wish to give light and hope to the people of this town, but they are blinded by hunger. Can you visit Duncan in the hot springs area and bring back some food? He has promised to help me. [2-06.htm] Saint of Light Agnes: I will fill the granary with this generous gift. Thanks to your help, these people can walk the path of light once more. Now I can help you on your way. A woman named Elkadia told me of how one can step beyond his own limitations. You remind me of her. Take this Stone of Commune to the Tablet of Vision, south of the Tower of Insolence. It can bring you new knowledge. [3-01.htm] Magister Kamilen: Did the power of the Stone of Commune draw you here? Saint Agnes gave it to me, but it's not whole. While you were gone, the granary in Goddard Castle Town spontaneously began to overflow! Even I am convinced by this miracle that she's a true saint. "What do I need to make the stone whole?" [3-02.htm] Magister Kamilen: I'll let you know the location of Ketra's Messenger Wahkan in the Ketra Orc Camp. First of all, you must gain trust of Ketra's Messenger Wahkan, and keep on working hard until you get the Divine Stone of Wisdom from Soul Guide Asefa who is the highest-ranking shaman of Ketra Orcs. [3-03.htm] Magister Kamilen: I'll let you know the location of Varka's Messenger Naran Ashanuk in the Varka Silenos Camp. First of all, you must gain trust of Varka's Messenger Naran Ashanuk, and keep on working hard until you get the Divine Stone of Wisdom from Soul Guide Udan Mardui who is the highest-ranking shaman of Varka Silenos. [3-04.htm] Magister Kamilen: Did you get the Divine Stone of Wisdom? Find the 'Divine Stone of Wisdom' by winning the trust of Asefa, chief shaman of the Ketra Orcs, or Udan Mardui, chief shaman of the Varka Silenos. If that doesn't work, speak to Ketra's Messenger Wahkan or Varka's Messenger Naran Ashanuk. [3-05.htm] Magister Kamilen: You've done well to get the Divine Stone of Wisdom! Shall I make it whole now? "Of course!" [3-06.htm] Magister Kamilen: I feel the time of destiny approaching. The vibration of Stone of Commune is stronger than ever. Go to the north side of the Varka Silenos barracks! [3-07.htm] Magister Kamilen: Saint Agnes spoke of the Divine Stone of Wisdom, a fragment of the Stone of Commune. Go to the Ketra Orcs or the Varka Silenos to get it. They know of its powerful magic, but not its exact use. They'll reward the wisest of their tribe with it. You'll have to earn the trust of Asefa, chief shaman of the Ketra Orcs, or Udan Mardui, chief shaman of the Varka Silenos. Bring it here, and I'll make it whole again. Which side will you choose? The Ketra Orcs The Varka Silenos [3-08.htm] Magister Kamilen: Combine the two pieces... It's done! I will hand this over to you as Agnes told me. May you be blessed by the light. Take it to the Tablet of Vision on the north side of the Varka Silenos stronghold. I hope to see you again! [4-01.htm] Abyssal Saint Elcardia: I know what you're up to, Tanakia! You won't fool me again! I may be alone, but I'm perfectly capable of defending myself! I owe that much to my supporters! Dear Priest, will you help me defeat Tanakia? [4-010.htm] Abyssal Saint Elcardia: Yes, it is. It's the reason you're here, isn't it? Tanakia must have brought me here to prevent the Stone of Commune from falling into your hands! But you've set me free, and now I can give it to you! Thank you! I hope our paths cross again someday! "Wait! Hold on!" [4-011.htm] Abyssal Saint Elcardia: Absolutely! You were destined to have the Stone of Commune! Here it is. [4-02.htm] Abyssal Saint Elcardia: Listen, this isn't your fight! This is something I've got to do alone. [4-03.htm] Abyssal Saint Elcardia: Whew, that was a close one, and it's not over yet! You'll have another chance at Tanakia! Good luck! [4-04.htm] Abyssal Saint Elcardia: You won't defeat Tanakia like that! He's a fallen angel, remember? You can't defeat him with half-measures... Get serious! I'll do my best to help you. [4-05.htm] Abyssal Saint Elcardia: Listen, this isn't your fight! This will be a tough struggle for both myself and whoever helps me... How can I say it... You're not up to it! I'm surprised you made it this far! Lucky for you I'm a nice guy! [4-06.htm] Abyssal Saint Elcardia: I came here with the noblest of intentions, to save the innocent from a grisly fate... Now, seeing you, I realize how naive I was! Now I see that I was meant to give you this Stone of Commune. Take it, you'll need it. "A Stone of Commune?" [4-07.htm] Abyssal Saint Elcardia: Fate has surely brought me to this place. I'm here to give you this stone. "Is that a Stone of Commune?" [4-08.htm] Abyssal Saint Elcardia: Your plan is bound to fail, Tanakia! It was all for nothing! You don't stand a chance! So now you have the Stone of Commune, eh? It works with that Tablet of Vision over there! Go on! Do it! [4-09.htm] Abyssal Saint Elcardia: Behold, the Stone of Commune! Tanakia doesn't want you to have it, and he's holding me hostage to make sure that doesn't happen! This stone can be used to communicate with the Tablet of Vision! Now, hurry to where the tablet is! This was all meant to be! [5-01.htm] Tablet of Vision: A rough tablet appears before you. It emits a faint hum similar to the Stone of Commune as you approach. Touch the Stone of Commune to the Tablet of Vision. [5-02.htm] Tablet of Vision: Countless thoughts beyond comprehension sear painfully into your brain. You suddenly realize that this isn't the only Stone of Commune nor Tablet of Vision, and the knowledge contained within these tablets could change the world! As the pain subsides, a strange vision appears before you. A creature with four white wings, flying above the Valley of Saints, carrying the Stone of Commune! In a moment, the vision fades... The tablet goes still and dark, as if nothing had happened. Go to the northeastern part of the Valley of Saints and find the Tablet of Vision. [5-03.htm] Tablet of Vision: The tablet goes still and dark, as if nothing had happened. Go to the northeastern part of the Valley of Saints and find the Stone of Commune. [6-01.htm] Tablet of Vision: You must have the Stone of Commune to access the Tablet of Vision. The Stone of Commune is held by a creature with four wings. [6-02.htm] Tablet of Vision: The unshaped tablet begins to shake and make noise as the Stone of Commune draws near. Touch the Tablet of Vision with the Stone of Commune. [6-03.htm] Tablet of Vision: Countless thoughts beyond comprehension sear painfully into your brain. The cascade of brief images is unintelligible at first... As the pain subsides, a vision of the next tablet emerges, and it seems to be north of the border outpost. There must be a Stone of Commune nearby! It looks like the legendary Naverius has it! And then the vision fades. You must immediately go north of the border outpost and find the Stone of Commune. [6-04.htm] Tablet of Vision: The tablet goes still and quiet, as if nothing had ever happened. Look north of the border outpost for the Stone of Commune. [7-01.htm] Tablet of Vision: The tablet begins to tremor. Someone is nearby! Examine the area carefully. [7-02.htm] Tablet of Vision: Suddenly, someone appears on the other side of the tablet. Could it be Naverius, the main character in the book from Anastia? [7-03.htm] Tablet of Vision: I must take the Stone of Commune from Naverius if I am to commune with the Tablet of Vision. [7-04.htm] Tablet of Vision: A vision appears of a fight, far away from here. This isn't the time to get involved. [7-05.htm] Tablet of Vision: The tablet begins to buzz as the Stone of Commune draws nearer. Touch the Stone of Commune to the Tablet of Vision. [7-06.htm] Tablet of Vision: Countless thoughts beyond comprehension sear painfully into your brain. The secrets of the tablet start to be revealed. Suddenly, the vision goes white... and emerging from within is a face... Could it be...? Kamilen? A strong feeling emerges that she has the Stone of Commune in Goddard Castle Town. [7-07.htm] Tablet of Vision: The tablet goes still and quiet, as if nothing had ever happened. Kamilen in Goddard Castle Town has the next Stone of Commune. [8-01.htm] Tablet of Vision: The Stone of Commune is shaking so violently you fear that it will destroy itself. Touch the Stone of Commune to the Tablet of Vision. [8-02.htm] Tablet of Vision: The pain signals that more knowledge is being absorbed. As the pain subsides, you realize that the communion has finished, and you still don't know where the next Stone of Commune is. Kamilen's last words were troubling. Talk to her again soon! [8-03.htm] Tablet of Vision: The tablet goes still and dark as if nothing had happened. Where is the next Stone of Commune? Speak with Kamilen again. [9-01.htm] Tablet of Vision: As Bastian said, kill the Archon of Halisha at the Wall of Argos or the Shrine of the Loyal and take the stone from him! [9-02.htm] Tablet of Vision: The reaction doesn't seem as dramatic as before, but it appears to be working. Approach the Tablet of Vision with the Stone of Commune. [9-03.htm] Tablet of Vision: Countless thoughts beyond comprehension once again sear painfully into your brain. Now the words of Naverius make sense. I know where the next Tablet of Vision is! It's somewhere to the North of Giants Cave. Someone is near the tablet has the Stone of Commune. It's hard to make out, but he seems to be riding something, and something else is bearing down on him from behind! And then the vision fades... I will go to the North of Giants Cave where the Stone of Commune is located. [9-04.htm] Tablet of Vision: The tablet has no response. Let's go to the North of Giants Cavewhere the Stone of Commune is located.
Исходник условий и наград (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.Q00098_SagaOfTheShillienSaint;

import quests.AbstractSagaQuest;

/**
 * Saga of the Shillien Saint (98)
 * @author Emperorc
 */
public class Q00098_SagaOfTheShillienSaint extends AbstractSagaQuest
{
	public Q00098_SagaOfTheShillienSaint()
	{
		super(98, "Saga of the Shillien Saint");
		_npc = new int[]
		{
			31581,
			31626,
			31588,
			31287,
			31621,
			31646,
			31647,
			31651,
			31654,
			31655,
			31658,
			31287
		};
		_items = new int[]
		{
			7080,
			7525,
			7081,
			7513,
			7296,
			7327,
			7358,
			7389,
			7420,
			7451,
			7090,
			0
		};
		_mob = new int[]
		{
			27270,
			27247,
			27277
		};
		_classId = new int[]
		{
			112
		};
		_prevClass = new int[]
		{
			0x2b
		};
		_x = new int[]
		{
			119518,
			181215,
			181227
		};
		_y = new int[]
		{
			-28658,
			36676,
			36703
		};
		_z = new int[]
		{
			-3811,
			-4812,
			-4816
		};
		_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));
			}
		}
	}
}