Saga of the Elemental Master
- ID
- 92
- Название
- Saga of the Elemental Master
- start_npcs_json
- []
- npc_ids_json
- []
- constants_json
- {}
- Статус разбора
- metadata_only; dynamic Java conditions/rewards retained in source; unresolved starts: []
- Источник
- game/data/scripts/quests/Q00092_SagaOfTheElementalMaster/Q00092_SagaOfTheElementalMaster.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 Magister Arkenias: I feel the presence of many spirits around you. Your bond with the unicorns, who have been associated with our tribe since ancient times, tells me that you're the one who can stop the discord that has tarnished nature's harmony. Head Summoner Galatea told me about you. In fact, I've been watching you closely since you passed the Test of the Summoner! I've seen your wisdom grow by leaps and bounds! Your time has come. An Elemental Master will soon be born who will become the ultimate summoner in charge of the the beasts the belong to the goddess Eva, with holy poets and songs... Will you be the one? Are you up to the challenge? "I'm ready."
[0-010.htm] Grand Magister Arkenias: You've obtained the sacred knowledge, but you haven't yet made it entirely your own. Like food, it must be digested to become truly yours. You must be patient. (Only a character of level 76 or above can transfer to the Elemental Master class. Don't abandon the quest before class transfer is complete.)
[0-02.htm] Grand Magister Arkenias: I feel many forces around you. Human bodies, minds, spirits... Our tribe has had a Contract with the unicorns since ancient times. Now, we seek someone to restore nature's harmony. We're looking for someone who has passed the Test of the Summoner to become the ultimate summoner, an Elemental Master! (This quest may only be undertaken by a character of level 76 or above and of the Elemental Summoner class.)
[0-03.htm] Grand Magister Arkenias: Radyss is resting in Aden Castle Town. I'm afraid he doesn't have much time left. You must start your pilgrimage immediately! Although Elves' lives are practically eternal, we have no time to waste! Please read this report before you leave. It will tell you all you need to know about the spirit protecting one of the tablets. You must face this challenge bravely. Study the report carefully. Please, get going! May Eva's light guide your path!
[0-04.htm] Grand Magister Arkenias: High Summoner Radyss is waiting for you in Aden Castle Town. He'll tell you more about the pilgrimage you must undertake to become an Elemental Master. You must hurry! He's critically ill!
[0-05.htm] Grand Magister Arkenias: There are no scrolls or books that contain the spell of ultimate summoning. That information has always been restricted to the gods, far beyond the grasp of mere Elves. The secret is supposedly written on six ancient tablets, in the language of the gods. The gods put these tablets in very out-of-the-way places, and stationed formidable beasts nearby to guard them. If you can learn the secrets of the six tablets, you will pass the test. Luckily, there is someone who can help you... None less than the greatest Elemental Master of all time, Radyss! "Where is he?"
[0-06.htm] Grand Magister Arkenias: Welcome, pilgrim of vision! At last you've come to the end of your arduous journey! Radyss told me that you'd returned. Congratulations on behalf of all the Grand Magisters in the Ivory Tower! "So, what now?"
[0-07.htm] Grand Magister Arkenias: You've done it! I'm just a lowly magister who exists only to recognize those who have achieved the sacred knowledge! I hereby bestow upon you the title of Elemental Master! Lead our Elven brothers of the Ivory Tower towards a new enlightenment with your newly obtained knowledge. May Eva's blessings be with you!
[0-08.htm] Grand Magister Arkenias: You've obtained the sacred knowledge, but you haven't yet made it entirely your own. Like food, it must be digested to become truly yours. You must be patient. (Only a character of level 76 or above can transfer to the Elemental Master class. Don't abandon the quest before class transfer is complete.)
[0-09.htm] Grand Magister Arkenias: You've done it! I'm just a lowly magister who exists only to recognize those who have achieved the sacred knowledge! I hereby bestow upon you the title of Elemental Master! Lead our Elven brothers of the Ivory Tower towards a new enlightenment with your newly obtained knowledge. May Eva's blessings be with you!
[1-01.htm] Priest Cerenas: My father sent you here... I just want my father's pain to end. I pray to Eva everyday to let him find relief. This medicine only prolongs his suffering. If you ask me to make the medicine again, it is too painful for me. However, I cannot go against my father's will. So, become an Elemental Master and help him to find relief and go to the bosom of Eva. Now, I have to make the medicine. As you might hear from my father, I need a very rare material to make this medicine... "What is the material?"
[1-02.htm] Priest Cerenas: To make the medicine for my father, I need an ice crystal. In the northern part of this village, there is the hot springs area. There, meet Chef Gemeri. He will tell you how to get the ice crystal. I don't want to prolong my father's pain. Please hurry up.
[1-03.htm] Priest Cerenas: Thank you very much. Because you have the ice crystal, I now can make the medicine for my father. Please wait a moment while I prepare the materials. "Wait until the medicine is made."
[1-04.htm] Priest Cerenas: Take the medicine to my father, the Head Summoner Radyss. He is waiting for you in the Aden Castle Town. I heard that his health is getting worse and worse. Please hurry up.
[1-05.htm] Priest Cerenas: I need some Ice Crystals that can only be found in the northern part of Goddard. Speak with Chef Jeremy in the hot springs area just to the north of this village. He's been trying to find some soy sauce. If you help him, he'll tell you exactly how to get ice crystals.
[1-06.htm] Priest Cerenas: I overheard what people say about you. It's about what you've done in the hot springs area. Have you destroyed the violent monster Bumbalump? It is really great. Now I'm beginning to understand why my father designated you as his successor. Now it is done. Please take this medicine to my father, Head Summoner Radyss. He is waiting for you in the Aden Castle Town.
[10-01.htm] Tablet of Vision: You can feel the presence of the Stone of Commune near the tablet. You feel you can find out its exact location if you lay your hands on the tablet. Lay hands on the tablet.
[10-02.htm] Tablet of Vision: As you are about to lay your hands on the tablet, you hear the beast's growl. And a new creature that you haven't seen before appears...
[10-03.htm] Tablet of Vision: You need the Stone of Commune to decipher the hieroglyphs on the tablet. Speak with Unicorn Kaleidos about the Stone of Commune.
[10-04.htm] Tablet of Vision: Someone is already communing with the Tablet of Vision. Please try again later.
[10-05.htm] Tablet of Vision: The tablet is inscribed with indecipherable hieroglyphs. The letters emit a dim light and the tablet seems to manifest strong magical powers. Use the Stone of Commune.
[10-06.htm] Tablet of Vision: As you hold the Stone of Commune and concentrate on it, the tablet gets surrounded by bright light. You hear several hundred people simultaneously reading scriptures, and new knowledge starts to enter your mind. On one hand, you feel like you understand everything. On the other hand, you feel that you don't understand anything. You hear someone's low-pitched laughter. And you hear a man's voice. "You now have one more successor that you like." A blonde woman replies. "No, he's like a baby who just started walking. But he will no longer need his mother's protection..." All images disappear, and you start to recognize the surrounding environment. You are starting to understand the knowledge you have gained from the tablet little by little. The pilgrimage of the tablet seems to have ended. Return to Ivory Tower and see Grand Magister Arkenias.
[10-07.htm] Tablet of Vision: Nothing happens any more even when you lay your hands on the tablet. Now that you have finished your pilgrimage of the tablet, return to Ivory Tower and see Grand Magister Arkenias.
[11-01.htm] Head Summoner Radyss: Young leaf, I've been waiting for you! In your absence, I've examined several things. Yes, I found the fifth Stone of Commune. However, unfortunately, it lost its power. This is the Stone of Commune you sensed. But can't you tell that its power is weaker than before? Hack... Fortunately, I've learned that there are more Stones of Commune that are just like this one. One can be found at the Imperial Tomb and the other can be found at the Wall of Argos. Hack... At the cemetery, look in the Four Sepulchers. If you decide to go to the Wall of Argos, look in the Shrine of the Loyal in the northeastern part of the valley. And... "And?"
[11-02.htm] Head Summoner Radyss: Young leaf, you must destroy the Archon of Halisha to get the fifth Stone of Commune. Hack... Find the devil in the Imperial Tomb or at the Wall of Argos. If you go to the Imperial Tomb, you can confront him by entering the Four Sepulchers. If you go to the Shrine of the Loyal, you must attack his minions as you see them. Then the Archon of Halisha will appear. Keep in mind that you must destroy him to get the Stone of Commune.
[11-03.htm] Head Summoner Radyss: Either way, you must eventually confront the evil Archon of Halisha. Yes, Because he has the fifth Stone of Commune. If you go to the Imperial Tomb, you can confront him by entering the Four Sepulchers. If you go to the Shrine of the Loyal, you must attack his minions as you see them. Then the Archon of Halisha will appear. OK, leave now! Hack... I will pray to Eva for help.
[2-01.htm] Head Summoner Radyss: The young leaf of Mother Tree, you finally came... (Ack)... This old man has already lived for over 2000 years, and now the day is near when I return to the bosom of Eva. However, I have many things to teach you before I die. It is an obligation and the right way of the last Elemental Master. (Ack)... I am in pain... But I cannot die yet. I could not die peacefully until I see with my own two eyes the birth of the successor. You, the young leaf, I have a request. Please make the enzyme and bring it to me, so that my life may last just a while longer. "How can I make the enzyme?"
[2-02.htm] Head Summoner Radyss: Go to the Goddard Castle (Ack)... find Elf Priest Cerenas and get some medicine for me! I must last long enough to train my successor!
[2-03.htm] Head Summoner: Hack! Cough... Oh, you brought the medicine... Did it buy me more time...? This medicine... will ease my pain for the moment... Now, I will tell you about the tablet pilgrimage, the trial you must pass to be an Elemental Master. Young leaf, listen to what I say from now on... Even Elves like us cannot read the passage written on the Tablet of Vision. The gods don't want us to learn the highest level of magic. It's because we, the creatures would become arrogant and self-righteous too easily. They are afraid that a situation, such as when the Giants made war against them, might occur again. So, they broke the tablet, where the most profound principles of Magic were written (it should be used when teaching magic to the Elves like us), into six pieces and changed the letters on the tablet into the Gods' characters. The Gods' characters cannot be understood with the intelligence of creatures like us... But, I by chance found out how to read the characters on the six tablets! "What is the method?"
[2-04.htm] Head Summoner Radyss: The Stone of Commune I gave you, if you follow the lead of this Stone, you can find the first Tablet of Vision! If you don't know it well, find your way using the Map. I will pray that the wind of Shaiha leads you the right way.
[2-05.htm] Head Summoner Radyss: Hack... Go to the temple in the Goddard Castle, hack... And find the Elf Priest Cerenas. She will make a medicine for me. Help her get the materials necessary to make the medicine. Hack... Leave quickly. Time is running out. I will pray that the wind of Shaiha leads you the right way...
[2-06.htm] Head Summoner Radyss: The solution is in this gem! This is what we call the stone of vision. If you use the power contained in it, you can understand the Gods' characters written on the Tablet of Vision. Also, if you grasp this gem, you will know intuitively the location where this tablet is hidden. I don't know who the hell made this thing, but one thing is clear - someone or some being is helping the dark elves learn the knowledge that is forbidden by God. As the person who is exploring the true power of the magic, we cannot miss this good opportunity. Now, I will give you this stone of vision I've used in the past. If you go in the direction indicated by the stone of vision, you will find the first Tablet of Vision. Please become the Elemental Master who will succeed me. I will pray that the wind of Shaiha leads you the right way.
[3-01.htm] Head Summoner Radyss: Hack... Young leaf, welcome back. Maybe, the perverse Shilen is trying to take my life as soon as possible. My power is waning. I can barely stand even with Cerenas's medicine... Oh, Goddess of Eva! Please give me the power to endure this pain even for just one moment...! Come close to me! In your absence, I've examined several things, even though I was weak with disease. And I made some progress. "Progress...?"
[3-02.htm] Head Summoner Radyss: At first, go to the Messenger Wahkan of the Ketra Orcs. I heard that they are hiring the foreign mercenaries. If so, it is a good opportunity to gain their trust! The Divine Stone of Wisdom that we are looking for is possessed by the Soul Guide Asepha, the head shaman of the Ketra Orcs. Hack... If things are not going well, change the plan and approach the Varka Silenos tribe. I will pray to Eva for help.
[3-03.htm] Head Summoner Radyss: At first, go to the Messenger Naran Ashanuk of Varka Silenos. I heard that they are hiring the foreign mercenaries. If so, it is a good opportunity to gain their trust! The Divine Stone of Wisdom that we are looking for is possessed by the Soul Guide Udan Mardui, the head shaman of the Varka Silenos. Hack... If things are not going well, change the plan and approach the Ketra Orcs tribe. I will pray to Eva for help.
[3-04.htm] Head Summoner Radyss: Hack... In order to properly operate the fourth Stone of Commune, we have to get the Divine Stone of Wisdom worshipped by the Ketra Orcs or the Varka Silenos. At first, you have to gain their trust, but it will never be easy, because they are wild and warlike tribes.
[3-05.htm] Head Summoner Radyss: Hack... A fragment of the fourth Stone of Commune is actually worshipped by the barbarians in this area, who call it their "Divine Stone of Wisdom"! Now put these two stones together... "Put the Divine Stone of Wisdom and Pamela's fragment together."
[3-06.htm] Head Summoner Radyss: Hack... Young leaf, this is not the place you can stay. Quickly take the Stone of Commune and go to find the fourth Tablet of Vision. You will know its location intuitively, as long as you have the Stone of Commune. If it is difficult to find location, get the direction using the Map.
[3-07.htm] Head Summoner Radyss: When you responded to the third tablet, you sensed the location of the next Stone of Commune, didn't you? At that time, you should have seen me. I also felt your existence...! Hack... What you sensed is this small piece of stone. This is the fragment of the fourth Stone of Commune. However, you must find the other part and combine them in order to form a working Stone of Commune. The rest of the Stone of Commune is called "Divine Stone of Wisdom" and worshipped as an idol by the barbarians in this area. According to what I've learned, the Ketra Orcs and the Varka Silenos tribes enshrine the stone. To get this stone, you must gain their trust. Hack... However, it will never be easy, because they are wild and warlike tribes. Which tribe will you choose to approach? "I'll approach the Ketra Orcs!" "I'll approach the Varka Silenos!"
[3-08.htm] Head Summoner Radyss: The two pieces fit perfectly together! Now, young leaf, please accept this Stone of Commune. And start the pilgrimage again to find the fourth Tablet of Vision. Please become the successor of the Elemental Master as quickly as possible. I will pray to Eva for help.
[4-01.htm] Unicorn Kaleidos: Help, or I'll miss the hound dog!
[4-010.htm] Unicorn Kaleidos: Take this, Kelvas dropped it. I have to go back to my master Radyss and be there when he falls asleep. "Wait!"
[4-011.htm] Unicorn Kaleidos: Take this, Kelvas dropped it. I have to go back to my master Radyss and be there when he falls asleep.
[4-02.htm] Unicorn Kaleidos: I can't miss the hound dog!
[4-03.htm] Unicorn Kaleidos: You missed, better luck next time.
[4-04.htm] Unicorn Kaleidos: Help, or I'll miss the hound dog!
[4-05.htm] Unicorn Kaleidos: I can't miss the hound dog!
[4-06.htm] Unicorn Kaleidos: Radyss sent me. Kelvas has been hounding my race a lot, now I've bested him. "OK."
[4-07.htm] Unicorn Kaleidos: Radyss sent me. "OK."
[4-08.htm] Unicorn Kaleidos: Don't miss the hound dog. Commune with the tablet using the stone I gave you!
[4-09.htm] Unicorn Kaleidos: Commune with the tablet using the stone I gave you.
[5-01.htm] Tablet of Vision: Hieroglyphics are engraved on the tablet. They emit a dim light, with a mysterious and powerful magic. Use the stone.
[5-02.htm] Tablet of Vision: The Tablet of Vision becomes overwhelmed by bright lights. While you are holding the stone to work on it, you start to acquire a new sense of knowledge as you hear the voices of thousands reading scriptures in the background. You now realize the truth of the world and yet understand nothing. One of the voices is a familiar female whisper. But it quickly disappears. Slowly, you begin to visualize where the next Stone of Commune is... in the valley of dust... you see a second Tablet of Vision... and a female warrior in platinum armor. She is holding the stone... She then unfolds her wings and flies away along with other female warriors...... In an instant, the images disappear and then the stone goes completely dark.
[5-03.htm] Tablet of Vision: You visualize the stone once again when touching the Tablet. In the yellow-brown valley... you see a female warrior with platinum wings... She is holding the stone in her hand. You are compelled to go forth and find the stone right now!
[6-01.htm] Tablet of Vision: You must have the Stone of Commune to access this Tablet of Vision. The stone is being held by one of the female warriors with platinum wings.
[6-02.htm] Tablet of Vision: Hieroglyphics are engraved on the tablet. They emit a dim light, with a mysterious and powerful magic. Use the stone.
[6-03.htm] Tablet of Vision: The Tablet of Vision becomes overwhelmed by bright lights. While you are holding the stone to work on it, you start to acquire a new sense of knowledge as you hear the voices of thousands reading scriptures in the background. You now realize the truth of the world and yet understand nothing. One of the voices is a familiar female whisper. But it quickly disappears. Slowly, you sense the Stone of Commune... You see the third Tablet of Vision... and an angel with two pairs of wings... She is holding the stone in her hand... In an instant, the images disappear and then the stone goes completely dark.
[6-04.htm] Tablet of Vision: Once again, you see the third Tablet of Vision... and a female warrior with wings... She is holding the stone in her hand. You are compelled to go forth and find the stone right now!
[7-01.htm] Tablet of Vision: The Stone of Commune exists near the tablet. Putting your hands on the tablet will reveal the location of the stone. Put your hands on the tablet. Patrol the area.
[7-02.htm] Tablet of Vision: When putting your hands on the tablet, your entire body is knocked back by something powerful but invisible. Then, it begins to appear.
[7-03.htm] Tablet of Vision: The Tablet of Vision cannot be accessed without the Stone of Commune. Defeat Shakiel and take the stone from him.
[7-04.htm] Tablet of Vision: Someone else is currently communing with the Tablet of Vision. Come back later.
[7-05.htm] Tablet of Vision: Ancient, indecipherable hieroglyphs are engraved upon the tablet. They emit a mysterious, dim light. There is something magical and powerful in the tablet. Commune with the Tablet of Vision.
[7-06.htm] Tablet of Vision: The Tablet of Vision begins to illuminate the room and engulfs you in its wake. Thunderous chanting clogs your mind and yet gives you understand of something.... something that cannot be understood! You hear a familiar woman's voice whispering again...Arden Castle Town...there is Summoner Radyss, who has a bad cough... He lifts up his face and looks into your eyes, motioning you to come toward. Summoner Radyss has the stone! The vision disappears slowly, and the tablet goes dark.
[7-07.htm] Tablet of Vision: Putting your hands on the tablet, the location of the Stone of Commune again becomes clear. Summoner Radyss in the Aden Castle Town seems to have the fourth Stone of Commune. Go to Aden Castle Town and meet him.
[8-01.htm] Tablet of Vision: Ancient, indecipherable hieroglyphs are engraved upon the tablet. They emit a mysterious, dim light. There is something magical and powerful in the tablet. Commune with the Tablet of Vision.
[8-02.htm] Tablet of Vision: The Tablet of Vision becomes overwhelmed by bright lights. While you are holding the stone to work on it, you start to acquire a new sense of knowledge as you hear the voices of thousands reading scriptures in the background. You now realize the truth of the world and yet understand nothing. Both the absolute understanding, and the absolute ignorance of nature come across at the same time. There is a vision of a beautiful blonde woman and a knight with black armor. The vision disappears. Slowly, you begin to visualize where the next Stone of Commune is...There is Summoner Radyss...He gazes at you and smiles. He may have the Stone of Commune, but the beam from the stone is much weaker than before. In an instant, the images disappear and then the stone goes completely dark.
[8-03.htm] Tablet of Vision: Putting your hands on the tablet, the location of the Stone of Commune again becomes clear. Summoner Radyss in the Aden Castle Town has the fifth Stone of Commune. Go and get it from him!
[9-01.htm] Tablet of Vision: To decode the figures in the tablet, the Stone of Commune is needed. The fifth Stone of Commune is in the possession of the Archon of Halisha! You can find him at the Sepulchers or the Shrine of the Feudal Lords at the northeastern part of the Wall of Argos, and defeat low-grade evils.
[9-02.htm] Tablet of Vision: Ancient, indecipherable hieroglyphs are engraved upon the tablet. They emit a mysterious, dim light. There is something magical and powerful in the tablet. Commune with the Tablet of Vision.
[9-03.htm] Tablet of Vision: The Tablet of Vision becomes overwhelmed by bright lights. While you are holding the stone to work on it, you start to acquire a new sense of knowledge as you hear the voices of thousands reading scriptures in the background. You now realize the truth of the world and yet understand nothing. There is a vision of a beautiful blonde woman and a knight with black armor. The vision disappears. The location of the next commune is gradually becoming clear...A vision appears...The sixth Tablet of Vision hidden in the wilds. Standing before the sixth tablet is a beast with red eyes and sharp fangs!...and the Stone of Commune, held in the mouth of the beast, emits a dim light. In an instant, the images disappear and then the stone goes completely dark.
[9-04.htm] Tablet of Vision: Putting your hands on the tablet, the location of the Stone of Commune again becomes clear. The sixth Stone of Commune is hidden in the wilderbess and there's an ominious shadow of a beast...There is the Stone of Commune held in the mouth of the beast...Go and get the stone from it!
Исходник условий и наград (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.Q00092_SagaOfTheElementalMaster;
import quests.AbstractSagaQuest;
/**
* Saga of the Elemental Master (92)
* @author Emperorc
*/
public class Q00092_SagaOfTheElementalMaster extends AbstractSagaQuest
{
public Q00092_SagaOfTheElementalMaster()
{
super(92, "Saga of the Elemental Master");
_npc = new int[]
{
30174,
31281,
31614,
31614,
31629,
31646,
31648,
31652,
31654,
31655,
31659,
31614
};
_items = new int[]
{
7080,
7605,
7081,
7507,
7290,
7321,
7352,
7383,
7414,
7445,
7111,
0
};
_mob = new int[]
{
27314,
27241,
27311
};
_classId = new int[]
{
104
};
_prevClass = new int[]
{
0x1c
};
_x = new int[]
{
161719,
124376,
124355
};
_y = new int[]
{
-92823,
82127,
82155
};
_z = new int[]
{
-1893,
-2796,
-2803
};
_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));
}
}
}
}