Sync with L2JServer Jan 9th 2015.

This commit is contained in:
mobius
2015-01-09 19:55:02 +00:00
parent 9c9b0aaff7
commit 4c2db62a63
618 changed files with 19803 additions and 7853 deletions

View File

@@ -1,4 +1,4 @@
<html><body>Pantheon:<br>
<html><body>Pantheon:<br>
Welcome to the newly reconstructed Talking Island Village. It only took a few months for us to get to where we are now.<br>
It must be odd getting started in a town that isn't your old home. Fear not, you are not alone. Adventurers of all races start their journey here in
Talking Island Village. If you want I can help you get familiar with your new surroundings.<br>

View File

@@ -31,7 +31,11 @@ import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.model.quest.QuestState;
import com.l2jserver.gameserver.model.quest.State;
import com.l2jserver.gameserver.model.zone.L2ZoneType;
import com.l2jserver.gameserver.network.NpcStringId;
import com.l2jserver.gameserver.network.clientpackets.Say2;
import com.l2jserver.gameserver.network.serverpackets.NpcSay;
import com.l2jserver.gameserver.network.serverpackets.TutorialShowHtml;
import com.l2jserver.gameserver.util.Broadcast;
/**
* Let's Go To The Central Square (10320)
@@ -92,6 +96,7 @@ public final class Q10320_LetsGoToTheCentralSquare extends Quest
addExpAndSp(player, 30, 5);
qs.exitQuest(false, true);
htmltext = event;
Broadcast.toKnownPlayers(npc, new NpcSay(npc.getObjectId(), Say2.NPC_ALL, npc.getTemplate().getDisplayId(), NpcStringId.WAIT_WAIT_A_MINUTE_I_STILL_HAVE_TIME));
break;
}
}

View File

@@ -60,31 +60,22 @@ public final class Q10322_SearchingForTheMysteriousPower extends Quest
// Buffs
private static final SkillHolder[] FIGHTER_BUFFS =
{
new SkillHolder(5182, 1), // Blessing of Protection
new SkillHolder(15642, 1), // Horn Melody
new SkillHolder(15643, 1), // Drum Melody
new SkillHolder(15644, 1), // Pipe Organ Melody
new SkillHolder(15645, 1), // Guitar Melody
new SkillHolder(15646, 1), // Harp Melody
new SkillHolder(15647, 1), // Lute Melody
new SkillHolder(15651, 1), // Prevailing Sonata
new SkillHolder(15652, 1), // Daring Sonata
new SkillHolder(15653, 1), // Refreshing Sonata
new SkillHolder(15649, 1), // Warrior Harmony
new SkillHolder(4322, 1), // Wind Walk
new SkillHolder(4323, 1), // Shield
new SkillHolder(5637, 1), // Magic Barrier
new SkillHolder(4324, 1), // Bless the Body
new SkillHolder(4325, 1), // Vampiric Rage
new SkillHolder(4326, 1), // Regeneration
};
private static final SkillHolder[] MAGE_BUFFS =
{
new SkillHolder(5182, 1), // Blessing of Protection
new SkillHolder(15642, 1), // Horn Melody
new SkillHolder(15643, 1), // Drum Melody
new SkillHolder(15644, 1), // Pipe Organ Melody
new SkillHolder(15645, 1), // Guitar Melody
new SkillHolder(15646, 1), // Harp Melody
new SkillHolder(15647, 1), // Lute Melody
new SkillHolder(15651, 1), // Prevailing Sonata
new SkillHolder(15652, 1), // Daring Sonata
new SkillHolder(15653, 1), // Refreshing Sonata
new SkillHolder(15650, 1), // Wizard Harmony
new SkillHolder(4322, 1), // Wind Walk
new SkillHolder(4323, 1), // Shield
new SkillHolder(5637, 1), // Magic Barrier
new SkillHolder(4328, 1), // Bless the Soul
new SkillHolder(4329, 1), // Acumen
new SkillHolder(4330, 1), // Concentration
new SkillHolder(4331, 1), // Empower
};
public Q10322_SearchingForTheMysteriousPower()

View File

@@ -0,0 +1,15 @@
<html>
<head>
<body>Hermuncus:<br>
Thank you for listening to my plea for help. You have saved me from a most terrible fate! Because of you I am free from
the bindings that the gods placed upon me.<br>
I am the Last Giant Hermuncus. I am the true and rightful master to all races of this world. As I promised, I will show
you the way to become Awakened and learn how to use the Giant's power. Here is the <font color="LEVEL">Scroll of
Afterlife</font>. The power of the Giants has been passed down from generation to generation embedding their power
within this tome.<br>
Before accepting this power I must warn you that you will have to give up all that you have learned. Also, you can be
consumed by this power if you do not know how to control it. Although, by looking at you I can tell that despite these
warnings you still wish to accept the power of the Giants.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10338_SeizeYourDestiny 33340-02.htm">Accept the Scroll of Afterlife.</Button>
</body>
</html>

View File

@@ -0,0 +1,11 @@
<html>
<head>
<body>Hermuncus:<br>
Even for Giants, there were far too many that were consumed by the power they received. Your inner strength will decide
the final outcome, not my influence.<br>
Take the <font color="LEVEL">Scroll of Afterlife</font> to one of the <font color="LEVEL">Ancient Giant statues</font>
in the <font color="LEVEL">Reliquary of the Giants</font>. There you will learn about which Giant hero you wish to
receive your power from and become <font color="LEVEL">Awakened</font>.<br>
When you are ready I will send you there.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10338_SeizeYourDestiny TELEPORT">Go to the Reliquary of the Giants.</Button>
</html>

View File

@@ -0,0 +1,6 @@
<html><head><body>Hermuncus:<br>
Use the <font color="LEVEL">Scroll of Afterlife</font> that I gave you in front of the ancient <font color="LEVEL">Mark of the Giant</font> in the Reliquary of the Giants. If you're strong enough, you'll <font color="LEVEL">awaken</font> with new power! <br1>
I will send you there, if you're ready.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10338_SeizeYourDestiny TELEPORT">"I am ready!"</Button>(You already completed this quest. To awaken, you need to go to the Reliquary of the Giants.)
<br>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><head><body>Hermuncus:<br>
Come back in your natural form.<br>
(This quest can only be fulfilled while you are in the same class state as when you accepted the quest.)
<br>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><head><body>Hermuncus:<br>
I cannot send you to the Reliquary of the Giants as you are. Return to your original form. <br>
(This quest may be undertaken only while in the class that accepted the quest.)
<br>
</body></html>

View File

@@ -0,0 +1,10 @@
<html>
<head>
<body>Hadel:<br>
There is something… strange about you. I am Hadel, a disciple of the great Giant Hermuncus.
What brings you to this place? Are you another one of those tomb raiders looking to steal artifacts from the Giants? Speak!<br>
Oh, Cellphine sent you here… then that is what I sense about you. You are here to free my master Hermuncus.
I can feel strong and unyielding energy resonating within your soul. Yes, you do seem to have certain strength about you suitable to save the master.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10338_SeizeYourDestiny 33344-02.htm">"Tell me more about Hermuncus."</Button>
</body>
</html>

View File

@@ -0,0 +1,15 @@
<html>
<head>
<body>Hadel:<br>
My master, <font color="LEVEL">Hermuncus</font>, is the last Giant. In the distant past, there was a war between the
gods and the Giants. My master fought against the light and managed to steal the power from the gods! But, in the end,
the Giants were defeated. All but my master were exterminated, and my master was facing his final days...<br>
Even the gods found it too difficult to kill a Giant as huge and powerful as my master. For his crimes, his soul was
torn from his body and imprisoned in Ye Sagira. His shell of a corpse was ripped apart and scattered across the land. He
was to be an example of what would happen if anyone challenged the gods ever again.<br>
When Shilen tore Ye Sagira from the sky causing it to crash it broke part of the seal that contained Hermuncus soul,
allowing him to find those who would be able help him. You need to find Hermuncus and break the remaining seals to free
his soul.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10338_SeizeYourDestiny 33344-03.htm">"Is that safe? I mean, he challenged the gods!"</Button>
</body>
</html>

View File

@@ -0,0 +1,16 @@
<html>
<head>
<body>Hadel:<br>
The gods? Take a moment to reflect on the gods, <font color="LEVEL">Einhasad</font>, <font color="LEVEL">Gran Kain</font>,
and their ilk. Think upon the origins of the gods, their abilities and their inabilities. All the gods are capable of creation
and destruction... that is it. And, they do it indiscriminately.<br>Theyre like children who build cities in the sand only to
destroy them... for the sheer joy of creation and destruction. Do they ever for once do anything other than repeat this cycle?
The Giants wanted to change all that. They felt that everything that existed in the world had a purpose and a right to exist.
People believe that they are the beginning and end simply because they were here first... What kind of reasoning is that?<br>
Look around you...Our world is collapsing into chaos and we are at the end of this cycle. The gods have sent in their destroyer.
Shilen will destroy this world so that the gods may start again. Why do you think they are not doing anything to stop her?
They are simply sitting and waiting... there is no interest in saving what is already here. How about you? Can you just sit
here and wait for the world to come to an end?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10338_SeizeYourDestiny 33344-04.htm">"No. No I can't!"</Button>
</body>
</html>

View File

@@ -0,0 +1,11 @@
<html>
<head>
<body>Hadel:<br>
Im sorry. I get too passionate when I think about this. I do not mean to force my beliefs upon you. Exterminating the
gods would be no better than what they did to the Giants and what they are planning on doing to us. If you
<font color="LEVEL">free Hermuncus... if you accept the power that he can give you... you will wield the power to save our world.</font>!<br>
The choice is yours. <font color="LEVEL">Do you wish to wield the power of Giants</font>, or
<font color="LEVEL">do you want to wait for Shilen to destroy us all</font>?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10338_SeizeYourDestiny 33344-05.htm">"I'll help Hermuncus."</Button>
</body>
</html>

View File

@@ -0,0 +1,12 @@
<html>
<head>
<body>Hadel:<br>
I know you have heard the masters call. Only a part of his soul was free but the rest remains by the seal of light
within the <font color="LEVEL">Disconnected Labyrinth</font> of Ruins of Ye Sagira. The ghost of the Ancient Giant King,
<font color="LEVEL">Harnak's Wraith</font>, serves as the warden of the prison where Hermuncus is held. You will face the
ghosts of Giants corrupted by the light. Defeat Harnak and the seal will be completely broken freeing the soul of Hermuncus.
<br>Once Hermuncus has been freed, he will instruct you on how to acquire the <font color="LEVEL">power</font> that the
ancient giants once used.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest HarnakUndergroundRuins enter_instance">Enter the Disconnected Labyrinth</Button>
</body>
</html>

View File

@@ -0,0 +1,5 @@
<html><head><body>Hadel:<br>
Your level is low to enter this place. I'm sorry, but it would be too dangerous for you. <br>
(This quest can only be fulfilled by level 85 or above characters, with no awakening.)
<br>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><head><body>Hadel:<br>
We have no need of your services at this time. Rest assured, we will contact you again when we next have need of your unique skills. <br>
(You have already completed this quest.)
<br>
</body></html>

View File

@@ -0,0 +1,6 @@
<html><head><body>Hadel:<br>
I know you have heard the masters call. Only a part of his soul was free but the rest remains by the seal of light within the <font color="LEVEL">Disconnected Labyrinth</font> of the Ruins of Ye Sagira. The ghost of the Ancient Giant King, <font color="LEVEL">Harnak's Wraith</font>, serves as the warden of the prison where Hermuncus is held. You will face the ghosts of giants corrupted by the light. Defeat Harnak and the seal will be completely broken freeing the soul of Hermuncus.<br>
Once Hermuncus has been freed, he will instruct you on how to acquire the <font color="LEVEL">power</font> that the ancient giants once used.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest HarnakUndergroundRuins enter_instance">Enter the Disconnected Labyrinth</Button>
<br>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><head><body>Hadel:<br>
You've changed since we last me. Change back, then come see me again. <br>
(This quest can only be finished if the character is in the same class state as when the quest was accepted.)
<br>
</body></html>

View File

@@ -0,0 +1,11 @@
<html>
<head>
<body>Cellphine:<br>
Tell me, do you still believe the gods look after you? I am Cellphine. I serve the Giants and despite what you may have
heard they are not completely extinct. I serve one who has awoken after thousands of years. I’ve been searching for one
who is able to free him from his imprisonment.<br>
Was it fate that brought you here, or something else? I can sense that you have a power that few possess that could help
my master. Will you help free my master from his imprisonment?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10338_SeizeYourDestiny 33477-02.htm">"Depends. Who's your master?"</Button>
</body>
</html>

View File

@@ -0,0 +1,14 @@
<html>
<head>
<body>Cellphine:<br>
My master is the last Giant… the leader of the Giants… Hermuncus. After the war was lost, the Gods convicted him of
stealing their power. His soul was torn from his body and was to spend eternity imprisoned within Ye Sagira. His body
was ripped apart and scattered the land. He was to be an example to those who would dare rise against the gods. Makes me
shudder just thinking about it.<br>
Hermuncus soul slept until recently. When Shilen tore Ye Sagira from the sky causing it to crash into this island this
act released a seal on his spirit allowing him to call upon those who would help him.<br>
If you help him, it could be possible that he will help you Awaken your true power. You could have the same power that
the gods and Giants once had. Will you help free Hermuncus?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10338_SeizeYourDestiny 33477-03.htm">The power of the Giants do sound nice.</Button>
</body>
</html>

View File

@@ -0,0 +1,10 @@
<html>
<head>
<body>Cellphine:<br>
If you can absorb the power of the Giants who faced the very gods themselves¦ Tou'll be such a hero as has not been seen
in thousands of years. A tempting offer, no? Hmm... With that kind of power you could easily face Shilen. No more
trembling in fear¦ not that I think you're trembling. Not you...<br>
You must find <font color="LEVEL">Hadel</font> in <font color="LEVEL">Ye Sagira Ruins</font>. Tell her that I sent you
and she will show you the way to our master.
</body>
</html>

View File

@@ -0,0 +1,6 @@
<html>
<head>
<body>Cellphine:<br>Go talk to <font color="LEVEL">Hadel</font> in the <font color="LEVEL">Sagira Ruins, exploration
zone 1</font>. Tell her that I sent you and she'll lead you to the master.
</body>
</html>

View File

@@ -0,0 +1,5 @@
<html><head><body>Cellphine:<br>
I'll need your help to completely resurrect the master. I'll call you when it's time. <br>
(This quest is already completed.)
<br>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><head><body>Cellphine:<br>
Go talk to <font color="LEVEL">Hadel</font> in the <font color="LEVEL">Sagira Ruins, exploration zone 1</font>. Tell her that I sent you and she'll lead you to the master.
<br>
</body></html>

View File

@@ -0,0 +1,223 @@
/*
* Copyright (C) 2004-2015 L2J DataPack
*
* This file is part of L2J DataPack.
*
* L2J DataPack 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.
*
* L2J DataPack 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.Q10338_SeizeYourDestiny;
import com.l2jserver.gameserver.enums.CategoryType;
import com.l2jserver.gameserver.model.Location;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.base.ClassId;
import com.l2jserver.gameserver.model.holders.ItemHolder;
import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.model.quest.QuestState;
import com.l2jserver.gameserver.network.NpcStringId;
import com.l2jserver.gameserver.network.serverpackets.ExShowScreenMessage;
/**
* @author Sdw
*/
public class Q10338_SeizeYourDestiny extends Quest
{
// NPCs
private static final int CELLPHINE = 33477;
private static final int HADEL = 33344;
private static final int HERMUNCUS = 33340;
// Monsters
private static final int HARNAKS_WRAITH = 27445;
// Items
private static final ItemHolder SCROLL_OF_AFTERLIFE = new ItemHolder(17600, 1);
private static final ItemHolder STEEL_DOOR_GUILD_COIN = new ItemHolder(37045, 400);
// Teleport
private static final Location RELIQUARY_OF_THE_GIANT = new Location(-114962, 226564, -2864);
// Movie
private static final int RELIQUARY_OF_THE_GIANT_SCENE = 55;
public Q10338_SeizeYourDestiny()
{
super(10338, Q10338_SeizeYourDestiny.class.getSimpleName(), "Seize Your Destiny");
addStartNpc(CELLPHINE);
addTalkId(CELLPHINE, HADEL, HERMUNCUS);
addKillId(HARNAKS_WRAITH);
addCondNotClassId(ClassId.JUDICATOR, "33477-04.htm");
addCondIsNotSubClassActive("33477-04.htm");
addCondMinLevel(85, "33477-04.htm");
addCondInCategory(CategoryType.FOURTH_CLASS_GROUP, "33477-04.htm");
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return null;
}
String htmltext = null;
switch (event)
{
case "TELEPORT":
{
if (player.isSubClassActive() && !player.isDualClassActive())
{
htmltext = "";
break;
}
teleportPlayer(player, RELIQUARY_OF_THE_GIANT, 0);
player.showQuestMovie(RELIQUARY_OF_THE_GIANT_SCENE);
break;
}
case "33477-03.htm":
{
qs.startQuest();
htmltext = event;
break;
}
case "33344-05.htm":
{
if (qs.isCond(1))
{
qs.setCond(2, true);
htmltext = event;
}
break;
}
case "33340-02.htm":
{
if (qs.isCond(3))
{
showOnScreenMsg(player, NpcStringId.YOU_MAY_USE_SCROLL_OF_AFTERLIFE_FROM_HERMUNCUS_TO_AWAKEN, ExShowScreenMessage.TOP_CENTER, 10000);
giveItems(player, SCROLL_OF_AFTERLIFE);
rewardItems(player, STEEL_DOOR_GUILD_COIN);
qs.exitQuest(false, true);
htmltext = event;
}
break;
}
case "33344-02.htm":
case "33344-03.htm":
case "33344-04.htm":
case "33477-02.htm":
{
htmltext = event;
break;
}
}
return htmltext;
}
@Override
public String onTalk(L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
switch (npc.getId())
{
case CELLPHINE:
{
if (qs.isStarted())
{
htmltext = "33477-06.htm";
}
else if (qs.hasQuestItems(SCROLL_OF_AFTERLIFE.getId()) || qs.isCompleted())
{
htmltext = "33477-05.htm";
}
else if (qs.isCreated())
{
htmltext = "33477-01.htm";
}
break;
}
case HADEL:
{
if (qs.isCompleted() || player.isInCategory(CategoryType.AWAKEN_GROUP) || qs.hasQuestItems(SCROLL_OF_AFTERLIFE.getId()))
{
htmltext = "33344-07.htm";
}
else if (player.getLevel() < 85)
{
htmltext = "33344-06.htm";
}
else if (player.isSubClassActive() && !player.isDualClassActive())
{
htmltext = "33344-09.htm";
}
else
{
switch (qs.getCond())
{
case 1:
{
htmltext = "33344-01.htm";
break;
}
case 2:
{
htmltext = "33344-08.htm";
break;
}
case 3:
{
htmltext = "33344-07.htm";
break;
}
}
}
break;
}
case HERMUNCUS:
{
if (player.isSubClassActive() && !player.isDualClassActive())
{
htmltext = "33340-04.htm";
break;
}
else if (qs.isCond(3))
{
htmltext = "33340-01.htm";
break;
}
else if (qs.hasQuestItems(SCROLL_OF_AFTERLIFE.getId()))
{
htmltext = "33340-03.htm";
break;
}
break;
}
}
return htmltext;
}
@Override
public String onKill(L2Npc npc, L2PcInstance player, boolean isSummon)
{
if (npc.getId() == HARNAKS_WRAITH)
{
final QuestState qs = getQuestState(player, false);
if ((qs != null) && qs.isCond(2))
{
qs.setCond(3, true);
}
}
return super.onKill(npc, player, isSummon);
}
}

View File

@@ -89,6 +89,7 @@ public class Q10733_TheTestForSurvival extends Quest
case "33942-01.htm":
case "33943-01.htm":
case "34005-02.htm":
case "34005-05.htm":
{
htmltext = event;
break;

View File

@@ -0,0 +1,6 @@
<html><head><body>Magister Ayanthe:<br>
Break's over. It's time to begin some earnest training.<br>
We're going to the training camp. The monsters there are illusions based on actual monsters that live outside this town. Practice means getting some real battle experience while overcoming its dangers. I'll be going with you, so don't be scared.<br>
So, are we ready?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10735_ASpecialPower 33942-02.htm">"I am ready."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><head><body>Magister Ayanthe:<br>
Good. Shall we start?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FaeronTrainingGrounds1 enter_instance">"Let's enter the training camp."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><head><body>Magister Ayanthe:<br>
Meeting outside is a nice change, isn't it?<br>
You've certainly worked very hard. I'm proud to call you my pupil.
</body></html>

View File

@@ -0,0 +1,5 @@
<html><head><body>Magister Ayanthe:<br>
It's not a good habit to leave while training. You need to focus when you're back in there.<br>
Are you ready<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FaeronTrainingGrounds1 enter_instance">"I'm ready"</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><head><body>Magister Ayanthe:<br>
The monsters are coming. Concentrate and attack!
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Magister Ayanthe:<br>
Focus on the fight!<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10735_ASpecialPower 33944-03.htm">"Create more monsters so I can train."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><head><body>Magister Ayanthe:<br>
Good. It pleases me that you're taking your training so seriously.<br>
But bear in mind that this is training, and not the real world. We will limit the number of monsters you face in a single encounter.
</body></html>

View File

@@ -0,0 +1,7 @@
<html><head><body>Magister Ayanthe:<br>
You're better than I expected. Feels different from training with a dummy, right?<br>
Here, take these <font color="LEVEL">Spiritshots</font>. Right now, your weapon has no grade, but as you become stronger, you'll be using D-grade, C-grade, and even R-grade weapons. They're proving to be very valuable in the Material Realm.<br>
Go ahead and <font color="LEVEL">activate the Spiritshots</font>.<br>
I'll go prepare more monsters for your next training session, so let me know when the Spiritshots have been activated.<br>
(You can conveniently automate your Spiritshots by creating a <font color="LEVEL">shortcut</font> and then <font color="LEVEL">right-click</font> on it.)
</body></html>

View File

@@ -0,0 +1,3 @@
<html><head><body>Magister Ayanthe:<br>
All right, now your training begins again!
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>Magister Ayanthe:<br>
I see you're a quick study. I'm impressed. I can't wait to see how much you'll have improved in the future. You have recovered some of your power that has been sealed while passing through the Dimensional Rift. These are called <font color="LEVEL">Skills</font>.<br>
The more abilities you recover, the stronger you'll grow.<br>
Now that you've recovered some of your power, shall we face tougher enemies? Are you ready?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10735_ASpecialPower 33944-07.htm">"My body is ready."</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><head><body>Magister Ayanthe:<br>
If you don't use your <font color="LEVEL">skills</font>, this next battle will be difficult!
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Magister Ayanthe:<br>
Great work. You've made me very proud. You must be exhausted. Shall we steep outside?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FaeronTrainingGrounds1 exit_instance">"I'd like to go outside."</Button>
</body></html>

View File

@@ -0,0 +1,278 @@
/*
* Copyright (C) 2004-2015 L2J DataPack
*
* This file is part of L2J DataPack.
*
* L2J DataPack 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.
*
* L2J DataPack 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.Q10735_ASpecialPower;
import quests.Q10734_DoOrDie.Q10734_DoOrDie;
import com.l2jserver.gameserver.enums.QuestSound;
import com.l2jserver.gameserver.enums.Race;
import com.l2jserver.gameserver.model.Location;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.base.ClassId;
import com.l2jserver.gameserver.model.holders.ItemHolder;
import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.model.quest.QuestState;
import com.l2jserver.gameserver.model.quest.State;
import com.l2jserver.gameserver.network.NpcStringId;
import com.l2jserver.gameserver.network.serverpackets.ExShowScreenMessage;
import com.l2jserver.gameserver.network.serverpackets.TutorialShowHtml;
/**
* @author Sdw
*/
public class Q10735_ASpecialPower extends Quest
{
// NPC's
private static final int AYANTHE = 33942;
private static final int AYANTHE_2 = 33944;
private static final int FLOATO = 27526;
private static final int RATEL = 27527;
// Misc
private static final int MIN_LEVEL = 4;
private static final int MAX_LEVEL = 20;
// Items
private static final ItemHolder SPIRITSHOTS_TRAINING = new ItemHolder(2509, 150);
private static final ItemHolder SPIRITSHOTS_REWARD = new ItemHolder(2509, 500);
// Locations
private static final Location MOB_1 = new Location(-75112, 240760, -3615);
private static final Location MOB_2 = new Location(-75016, 240456, -3628);
private static final int KILL_COUNT_ID = 0;
public Q10735_ASpecialPower()
{
super(10735, Q10735_ASpecialPower.class.getSimpleName(), "A Special Power");
addStartNpc(AYANTHE);
addTalkId(AYANTHE, AYANTHE_2);
addKillId(FLOATO, RATEL);
addCondLevel(MIN_LEVEL, MAX_LEVEL, "fixme.htm");
addCondRace(Race.ERTHEIA, "fixme.htm");
addCondClassId(ClassId.ERTHEIA_WIZARD, "fixme.html");
addCondCompletedQuest(Q10734_DoOrDie.class.getSimpleName(), "fixme.htm");
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return null;
}
String htmltext = null;
switch (event)
{
case "33942-02.htm":
{
qs.startQuest();
htmltext = event;
break;
}
case "33944-03.htm":
{
htmltext = event;
showOnScreenMsg(player, NpcStringId.ATTACK_THE_MONSTER, ExShowScreenMessage.TOP_CENTER, 4500);
break;
}
case "showscreen_1":
{
showOnScreenMsg(player, NpcStringId.AUTOMATE_SPIRITSHOT_AS_SHOWN_IN_THE_TUTORIAL, ExShowScreenMessage.TOP_CENTER, 4500);
break;
}
case "33944-07.htm":
{
if (qs.isCond(5))
{
qs.setCond(6);
showOnScreenMsg(player, NpcStringId.FIGHT_USING_SKILLS, ExShowScreenMessage.TOP_CENTER, 4500);
addSpawn(RATEL, MOB_1, false, 0, false, player.getInstanceId());
addSpawn(RATEL, MOB_2, false, 0, false, player.getInstanceId());
htmltext = event;
}
break;
}
}
return htmltext;
}
@Override
public String onTalk(L2Npc npc, L2PcInstance player)
{
QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
if (qs.isCompleted())
{
htmltext = getAlreadyCompletedMsg(player);
}
switch (npc.getId())
{
case AYANTHE:
{
switch (qs.getState())
{
case State.CREATED:
{
htmltext = "33942-01.htm";
break;
}
case State.STARTED:
{
switch (qs.getCond())
{
case 1:
{
htmltext = "33942-02.htm";
break;
}
case 2:
case 3:
case 4:
case 5:
case 6:
{
htmltext = "33942-04.htm";
break;
}
case 7:
{
htmltext = "33942-03.htm";
giveAdena(player, 900, true);
rewardItems(player, SPIRITSHOTS_REWARD);
addExpAndSp(player, 3154, 0);
qs.exitQuest(false, true);
break;
}
}
break;
}
}
break;
}
case AYANTHE_2:
{
switch (qs.getCond())
{
case 1:
{
showOnScreenMsg(player, NpcStringId.ATTACK_THE_MONSTER, ExShowScreenMessage.TOP_CENTER, 4500);
qs.setCond(2, true);
addSpawn(FLOATO, MOB_1, false, 0, false, player.getInstanceId());
addSpawn(FLOATO, MOB_2, false, 0, false, player.getInstanceId());
htmltext = "33944-01.htm";
break;
}
case 2:
case 4:
case 6:
{
htmltext = "33944-02.htm";
break;
}
case 3:
{
if (qs.getInt("ss") == 1)
{
addSpawn(FLOATO, MOB_1, false, 0, false, player.getInstanceId());
addSpawn(FLOATO, MOB_2, false, 0, false, player.getInstanceId());
showOnScreenMsg(player, NpcStringId.ATTACK_THE_MONSTER, ExShowScreenMessage.TOP_CENTER, 4500);
htmltext = "33944-05.htm";
qs.setCond(4, true);
}
else
{
giveItems(player, SPIRITSHOTS_TRAINING);
showOnScreenMsg(player, NpcStringId.SPIRITSHOT_HAVE_BEEN_ADDED_TO_YOUR_INVENTORY, ExShowScreenMessage.TOP_CENTER, 4500);
startQuestTimer("showscreen_1", 4500, npc, player);
player.sendPacket(new TutorialShowHtml(npc.getObjectId(), "..\\L2Text\\QT_003_bullet_01.htm", TutorialShowHtml.LARGE_WINDOW));
htmltext = "33944-04.htm";
qs.set("ss", 1);
}
break;
}
case 5:
{
htmltext = "33944-06.htm";
player.sendPacket(new TutorialShowHtml(npc.getObjectId(), "..\\L2Text\\QT_004_skill_01.htm", TutorialShowHtml.LARGE_WINDOW));
break;
}
case 7:
{
htmltext = "33944-08.htm";
break;
}
}
break;
}
}
return htmltext;
}
@Override
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
{
final QuestState qs = getQuestState(killer, false);
if (qs != null)
{
final int cond = qs.getCond();
if (npc.getId() == FLOATO)
{
if ((cond == 2) || (cond == 4))
{
final int value = qs.getMemoStateEx(KILL_COUNT_ID) + 1;
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
if (value >= 2)
{
qs.setCond(cond + 1, true);
qs.setMemoStateEx(KILL_COUNT_ID, 0);
}
else
{
qs.setMemoStateEx(KILL_COUNT_ID, value);
}
}
}
else if (npc.getId() == RATEL)
{
if (cond == 6)
{
final int value = qs.getMemoStateEx(KILL_COUNT_ID) + 1;
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
if (value >= 2)
{
qs.setCond(cond + 1, true);
qs.setMemoStateEx(KILL_COUNT_ID, 0);
showOnScreenMsg(killer, NpcStringId.TALK_TO_AYANTHE_TO_LEAVE_THE_TRAINING_GROUNDS, ExShowScreenMessage.TOP_CENTER, 4500);
}
else
{
qs.setMemoStateEx(KILL_COUNT_ID, value);
}
}
}
}
return super.onKill(npc, killer, isSummon);
}
}

View File

@@ -0,0 +1,6 @@
<html><head><body>Master Katalin:<br>
Now, we will go to a specially designed Training Camp for a real combat training. There are fake monsters in the Training Camp to simulate a real-life training for you.<br>
I will be with you, so it won't be dangerous. You can ease up.<br>
Shall we begin?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10736_ASpecialPower 33943-02.htm">"Sure."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><head><body>Master Katalin:<br>
Good! Let's get started!<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FaeronTrainingGrounds2 enter_instance">"Here we go."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><head><body>Master Katalin:<br>
I can feel a more powerful warrior's aura than when you entered.<br>
You can now leave the town after getting a few things.
</body></html>

View File

@@ -0,0 +1,5 @@
<html><head><body>Master Katalin:<br>
It's not a good habit to leave while training. You need to focus when you're back in there.<br>
Are you ready<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FaeronTrainingGrounds2 enter_instance">"I'm ready"</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><head><body>Master Katalin:<br>
The monsters are here.<br>
Stay focused in battle and take care not to get hurt.
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Master Katalin:<br>
Focus on your battle!<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10736_ASpecialPower 33945-03.htm">"More monsters please."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><head><body>Master Katalin:<br>
It's good to see you train hard.<br>
But for your safety, there's a limit to the number of monsters at once.
</body></html>

View File

@@ -0,0 +1,7 @@
<html><head><body>Master Katalin:<br>
Different from the Training Dummies?<br>
Take these <font color="LEVEL">Soulshots</font>. They have no grade, but as you get stronger and get better weapons, you can use Grade D, C, B, A, S, S-80, and eventually R. It's very important in the Material Realm.<br>
<font color="LEVEL">Activate Soulshots</font>.<br>
I will prepare the next set of monsters. Tell me when you have activated the Soulshots.<br>
(How to Enable Auto-Use Soulshot or Spiritshot: Open your <font color="LEVEL">Inventory. Click and Drag</font> Soulshot/Spiritshot into your Shortcut Bar. Right Click the Soulshot/Spiritshot Shortcut Icon to use it automatically.)
</body></html>

View File

@@ -0,0 +1,3 @@
<html><head><body>Master Katalin:<br>
Okay, here we go again.
</body></html>

View File

@@ -0,0 +1,7 @@
<html><body>Master Katalin:<br>
Do you know what just happened? You were able to use a lot of abilities when you were in the Wind Spirit Realm. But as you came through the Dimensional Rift, your abilities were locked.<br>
But you just unlocked one of those abilities. They call them <font color="LEVEL">Skills</font> here.<br>
As you train more, you will be able to get more skills back.<br>
Shall we fight a more powerfull enemy with your new skill?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10736_ASpecialPower 33945-07.htm">"Okay."</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Master Katalin:<br>
This battle won't be easy without your <font color="LEVEL">Skills</font>!<br>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Master Katalin:<br>
Good work! I am proud of you.<br>
We're done. Let's get out.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FaeronTrainingGrounds2 exit_instance">"Okay."</Button>
</body></html>

View File

@@ -0,0 +1,276 @@
/*
* Copyright (C) 2004-2015 L2J DataPack
*
* This file is part of L2J DataPack.
*
* L2J DataPack 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.
*
* L2J DataPack 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.Q10736_ASpecialPower;
import quests.Q10734_DoOrDie.Q10734_DoOrDie;
import com.l2jserver.gameserver.enums.QuestSound;
import com.l2jserver.gameserver.enums.Race;
import com.l2jserver.gameserver.model.Location;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.base.ClassId;
import com.l2jserver.gameserver.model.holders.ItemHolder;
import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.model.quest.QuestState;
import com.l2jserver.gameserver.model.quest.State;
import com.l2jserver.gameserver.network.NpcStringId;
import com.l2jserver.gameserver.network.serverpackets.ExShowScreenMessage;
import com.l2jserver.gameserver.network.serverpackets.TutorialShowHtml;
/**
* @author Sdw
*/
public class Q10736_ASpecialPower extends Quest
{
// NPC's
private static final int KATALIN = 33943;
private static final int KATALIN_2 = 33945;
private static final int FLOATO = 27526;
private static final int RATEL = 27527;
// Misc
private static final int MIN_LEVEL = 4;
private static final int MAX_LEVEL = 20;
// Items
private static final ItemHolder SOULSHOTS_TRAINING = new ItemHolder(1835, 150);
private static final ItemHolder SOULSHOTS_REWARD = new ItemHolder(1835, 500);
// Locations
private static final Location MOB_1 = new Location(-75112, 240760, -3615);
private static final Location MOB_2 = new Location(-75016, 240456, -3628);
private static final int KILL_COUNT_ID = 0;
public Q10736_ASpecialPower()
{
super(10735, Q10736_ASpecialPower.class.getSimpleName(), "A Special Power");
addStartNpc(KATALIN);
addTalkId(KATALIN, KATALIN_2);
addKillId(FLOATO, RATEL);
addCondLevel(MIN_LEVEL, MAX_LEVEL, "fixme.htm");
addCondRace(Race.ERTHEIA, "fixme.htm");
addCondClassId(ClassId.ERTHEIA_FIGHTER, "fixme.html");
addCondCompletedQuest(Q10734_DoOrDie.class.getSimpleName(), "fixme.htm");
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return null;
}
String htmltext = null;
switch (event)
{
case "33943-02.htm":
{
qs.startQuest();
htmltext = event;
break;
}
case "33945-03.htm":
{
htmltext = event;
showOnScreenMsg(player, NpcStringId.ATTACK_THE_MONSTER, ExShowScreenMessage.TOP_CENTER, 4500);
break;
}
case "showscreen_1":
{
showOnScreenMsg(player, NpcStringId.AUTOMATE_SOULSHOT_AS_SHOWN_IN_THE_TUTORIAL, ExShowScreenMessage.TOP_CENTER, 4500);
break;
}
case "33945-07.htm":
{
if (qs.isCond(5))
{
qs.setCond(6);
showOnScreenMsg(player, NpcStringId.FIGHT_USING_SKILLS, ExShowScreenMessage.TOP_CENTER, 4500);
addSpawn(RATEL, MOB_1, false, 0, false, player.getInstanceId());
addSpawn(RATEL, MOB_2, false, 0, false, player.getInstanceId());
htmltext = event;
}
break;
}
}
return htmltext;
}
@Override
public String onTalk(L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
if (qs.isCompleted())
{
htmltext = getAlreadyCompletedMsg(player);
}
switch (npc.getId())
{
case KATALIN:
{
switch (qs.getState())
{
case State.CREATED:
{
htmltext = "33943-01.htm";
break;
}
case State.STARTED:
{
switch (qs.getCond())
{
case 1:
{
htmltext = "33943-02.htm";
break;
}
case 2:
case 3:
case 4:
case 5:
case 6:
{
htmltext = "33943-04.htm";
break;
}
case 7:
{
htmltext = "33943-03.htm";
giveAdena(player, 900, true);
rewardItems(player, SOULSHOTS_REWARD);
addExpAndSp(player, 3154, 0);
qs.exitQuest(false, true);
break;
}
}
break;
}
}
break;
}
case KATALIN_2:
{
switch (qs.getCond())
{
case 1:
{
showOnScreenMsg(player, NpcStringId.ATTACK_THE_MONSTER, ExShowScreenMessage.TOP_CENTER, 4500);
qs.setCond(2, true);
addSpawn(FLOATO, MOB_1, false, 0, false, player.getInstanceId());
addSpawn(FLOATO, MOB_2, false, 0, false, player.getInstanceId());
htmltext = "33945-01.htm";
break;
}
case 2:
case 4:
case 6:
{
htmltext = "33945-02.htm";
break;
}
case 3:
{
if (qs.getInt("ss") == 1)
{
addSpawn(FLOATO, MOB_1, false, 0, false, player.getInstanceId());
addSpawn(FLOATO, MOB_2, false, 0, false, player.getInstanceId());
showOnScreenMsg(player, NpcStringId.ATTACK_THE_MONSTER, ExShowScreenMessage.TOP_CENTER, 4500);
htmltext = "33945-05.htm";
qs.setCond(4, true);
}
else
{
giveItems(player, SOULSHOTS_TRAINING);
showOnScreenMsg(player, NpcStringId.SOULSHOT_HAVE_BEEN_ADDED_TO_YOUR_INVENTORY, ExShowScreenMessage.TOP_CENTER, 4500);
startQuestTimer("showscreen_1", 4500, npc, player);
player.sendPacket(new TutorialShowHtml(npc.getObjectId(), "..\\L2Text\\QT_003_bullet_01.htm", TutorialShowHtml.LARGE_WINDOW));
htmltext = "33945-04.htm";
qs.set("ss", 1);
}
break;
}
case 5:
{
htmltext = "33945-06.htm";
player.sendPacket(new TutorialShowHtml(npc.getObjectId(), "..\\L2Text\\QT_004_skill_01.htm", TutorialShowHtml.LARGE_WINDOW));
break;
}
case 7:
{
htmltext = "33945-08.htm";
break;
}
}
}
}
return htmltext;
}
@Override
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
{
final QuestState qs = getQuestState(killer, false);
if (qs != null)
{
final int cond = qs.getCond();
if (npc.getId() == FLOATO)
{
if ((cond == 2) || (cond == 4))
{
final int value = qs.getMemoStateEx(KILL_COUNT_ID) + 1;
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
if (value >= 2)
{
qs.setCond(cond + 1, true);
qs.setMemoStateEx(KILL_COUNT_ID, 0);
}
else
{
qs.setMemoStateEx(KILL_COUNT_ID, value);
}
}
}
else if (npc.getId() == RATEL)
{
if (cond == 6)
{
final int value = qs.getMemoStateEx(KILL_COUNT_ID) + 1;
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
if (value >= 2)
{
qs.setCond(cond + 1, true);
qs.setMemoStateEx(KILL_COUNT_ID, 0);
showOnScreenMsg(killer, NpcStringId.TALK_TO_AYANTHE_TO_LEAVE_THE_TRAINING_GROUNDS, ExShowScreenMessage.TOP_CENTER, 4500);
}
else
{
qs.setMemoStateEx(KILL_COUNT_ID, value);
}
}
}
}
return super.onKill(npc, killer, isSummon);
}
}

View File

@@ -1,7 +1,7 @@
<html><body>Magister Ayanthe:<br>
The more Ertheia there is coming here, the more I train. There are many things I need to prepare in order to take care of them all.<br>
I'll need plenty of Spiritshots.<br>
Of course, I'm not the only person trying to help. Some people have been sent from the continent to the administrative area.<br>
Want me to tell you about them?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10737_GrakonsWarehouse 33942-02.htm">"Tell me"</Button>
<html><head><body>Magister Ayanthe:<br>
The more Ertheia there is coming here, the more I train. There are many things I need to prepare in order to take care of them all.<br>
I'll need plenty of Spiritshots.<br>
Of course, I'm not the only person trying to help. Some people have been sent from the continent to the administrative area.<br>
Want me to tell you about them?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10737_GrakonsWarehouse 33942-02.htm">"Tell me"</Button>
</body></html>

View File

@@ -1,6 +1,6 @@
<html><body>Master Katalin:<br>
The people who can send you across space to a different territory -- Gatekeepers, Adventurer's Guidess Auction Hourse Mangers, Mentor Guides, Warehouse Keepers -- are truly beyond counting.<br>
But of these, I find <font color="LEVEL"> Warehouse Manager Grakon</font> to be most helpful I am in the habit of using the warehouse since I am weighed down by many heavy tags when I travel about. Even now I'm overburdened!<br>
And so, a favor! I cannot abandon my position here, so I cannot deposit my bags. Would you be so king as to deposit them for me? As a reward, I will give you something useful for when you leave town.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10737_GrakonsWarehouse 33942-03.htm">"I always wanted to be a porter"</Button>
<html><head><body>Master Katalin:<br>
The people who can send you across space to a different territory -- Gatekeepers, Adventurer's Guidess Auction Hourse Mangers, Mentor Guides, Warehouse Keepers -- are truly beyond counting.<br>
But of these, I find <font color="LEVEL"> Warehouse Manager Grakon</font> to be most helpful I am in the habit of using the warehouse since I am weighed down by many heavy tags when I travel about. Even now I'm overburdened!<br>
And so, a favor! I cannot abandon my position here, so I cannot deposit my bags. Would you be so king as to deposit them for me? As a reward, I will give you something useful for when you leave town.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10737_GrakonsWarehouse 33942-03.htm">"I always wanted to be a porter"</Button>
</body></html>

View File

@@ -1,5 +1,5 @@
<html><body>Magister Ayanthe:<br>
I knew you'd help me.<br>
The item I promised you is in <font color="LEVEL">Grakon's Warehouse.</font> The warehouse is probably full right now.<br>
Just take what's yours from the warehouse and store my things in its place. Thanks you.<br>
<html><head><body>Magister Ayanthe:<br>
I knew you'd help me.<br>
The item I promised you is in <font color="LEVEL">Grakon's Warehouse.</font> The warehouse is probably full right now.<br>
Just take what's yours from the warehouse and store my things in its place. Thanks you.<br>
</body></html>

View File

@@ -1,7 +1,7 @@
<html><body>Master Katalin:<br>
The more Ertheia there is coming here, the more I train. There are many things I need to prepare in order to take care of them all.<br>
I'll need plenty of Spiritshots.<br>
Of course, I'm not the only person trying to help. Some people have been sent from the continent to the administrative area.<br>
Want me to tell you about them?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10737_GrakonsWarehouse 33942-02.htm">"Tell me"</Button>
<html><head><body>Master Katalin:<br>
The more Ertheia there is coming here, the more I train. There are many things I need to prepare in order to take care of them all.<br>
I'll need plenty of Spiritshots.<br>
Of course, I'm not the only person trying to help. Some people have been sent from the continent to the administrative area.<br>
Want me to tell you about them?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10737_GrakonsWarehouse 33942-02.htm">"Tell me"</Button>
</body></html>

View File

@@ -1,6 +1,6 @@
<html><body>Magister Ayanthe:<br>
The people who can send you across space to a different territory -- Gatekeepers, Adventurer's Guidess Auction Hourse Mangers, Mentor Guides, Warehouse Keepers -- are truly beyond counting.<br>
But of these, I find <font color="LEVEL"> Warehouse Manager Grakon</font> to be most helpful I am in the habit of using the warehouse since I am weighed down by many heavy tags when I travel about. Even now I'm overburdened!<br>
And so, a favor! I cannot abandon my position here, so I cannot deposit my bags. Would you be so king as to deposit them for me? As a reward, I will give you something useful for when you leave town.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10737_GrakonsWarehouse 33943-03.htm">"I always wanted to be a porter"</Button>
<html><head><body>Magister Ayanthe:<br>
The people who can send you across space to a different territory -- Gatekeepers, Adventurer's Guidess Auction Hourse Mangers, Mentor Guides, Warehouse Keepers -- are truly beyond counting.<br>
But of these, I find <font color="LEVEL"> Warehouse Manager Grakon</font> to be most helpful I am in the habit of using the warehouse since I am weighed down by many heavy tags when I travel about. Even now I'm overburdened!<br>
And so, a favor! I cannot abandon my position here, so I cannot deposit my bags. Would you be so king as to deposit them for me? As a reward, I will give you something useful for when you leave town.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10737_GrakonsWarehouse 33942-03.htm">"I always wanted to be a porter"</Button>
</body></html>

View File

@@ -1,5 +1,5 @@
<html><body>Master Katalin:<br>
I knew you'd help me.<br>
The item I promised you is in <font color="LEVEL">Grakon's Warehouse.</font> The warehouse is probably full right now.<br>
Just take what's yours from the warehouse and store my things in its place. Thanks you.<br>
<html><head><body>Master Katalin:<br>
I knew you'd help me.<br>
The item I promised you is in <font color="LEVEL">Grakon's Warehouse.</font> The warehouse is probably full right now.<br>
Just take what's yours from the warehouse and store my things in its place. Thanks you.<br>
</body></html>

View File

@@ -1,5 +1,5 @@
<html><body>Warehouse Keeper Grakon:<br>
Ow, my legs. Whatcha staring at? You should show some respect to someone who obviously looks older than you.<br>
Don't look at me like that. I know I look older than every Ertheia here! So what do you want?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10737_GrakonsWarehouse 33947-02.htm">"Master Katalin sent me"</Button>
<html><body>Warehouse Keeper Grakon:<br>
Ow, my legs. Whatcha staring at? You should show some respect to someone who obviously looks older than you.<br>
Don't look at me like that. I know I look older than every Ertheia here! So what do you want?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10737_GrakonsWarehouse 33947-02.htm">"Master Katalin sent me"</Button>
</body></html>

View File

@@ -1,5 +1,5 @@
<html><body>Warehouse Keeper Grakon:<br>
Oh, I see. I've got so much of that woman's stuff, my warehouse is about to burst. She's always storring items, but never takes any out.<br>
All right then, which item have you come for?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10737_GrakonsWarehouse 33947-03.htm">"Well, I want to take one and leave one."</Button>
<html><body>Warehouse Keeper Grakon:<br>
Oh, I see. I've got so much of that woman's stuff, my warehouse is about to burst. She's always storring items, but never takes any out.<br>
All right then, which item have you come for?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10737_GrakonsWarehouse 33947-03.htm">"Well, I want to take one and leave one."</Button>
</body></html>

View File

@@ -1,7 +1,7 @@
<html><body>Warehouse Keeper Grakon:<br>
What? Take something and leave something? This is driving me nuts.
Next time you see her, tell her to come to the warehouse and organize her things.
The item you're looking for is...Oh! I see it. It's labeled as a newbie help box or something.<br>
Shall we make the swap?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10737_GrakonsWarehouse 33947-04.htm">"Give it!"</Button>
<html><body>Warehouse Keeper Grakon:<br>
What? Take something and leave something? This is driving me nuts.
Next time you see her, tell her to come to the warehouse and organize her things.
The item you're looking for is...Oh! I see it. It's labeled as a newbie help box or something.<br>
Shall we make the swap?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10737_GrakonsWarehouse 33947-04.htm">"Give it!"</Button>
</body></html>

View File

@@ -1,6 +1,6 @@
<html><body>Warehouse Keeper Grakon:<br>
If you yourself ever need to store something in the <font color="LEVEL">warehouse</font>, you're always welcome to come back.
Of course, it's not free -- there's a small <font color="LEVEL">fee.</font><br>
Just as long as you don't go abusing my services like somebody we know. You can even send <font color="LEVEL">mail</font> to a friend.
If I'm ever unsure about keeping or discarding something. I'll mail it to a friend. Haha!<br>
<html><body>Warehouse Keeper Grakon:<br>
If you yourself ever need to store something in the <font color="LEVEL">warehouse</font>, you're always welcome to come back.
Of course, it's not free -- there's a small <font color="LEVEL">fee.</font><br>
Just as long as you don't go abusing my services like somebody we know. You can even send <font color="LEVEL">mail</font> to a friend.
If I'm ever unsure about keeping or discarding something. I'll mail it to a friend. Haha!<br>
</body></html>

View File

@@ -1,5 +1,5 @@
<html><body>Warehouse Keeper Grakon:<br>
Ow, my legs. Whatcha staring at? You should show some respect to someone who obviously looks older than you.<br>
Don't look at me like that. I know I look older than every Ertheia here! So what do you want?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10737_GrakonsWarehouse 33947-06.htm">"Magister Ayanthe sent me"</Button>
<html><body>Warehouse Keeper Grakon:<br>
Ow, my legs. Whatcha staring at? You should show some respect to someone who obviously looks older than you.<br>
Don't look at me like that. I know I look older than every Ertheia here! So what do you want?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10737_GrakonsWarehouse 33947-06.htm">"Magister Ayanthe sent me"</Button>
</body></html>

View File

@@ -1,5 +1,5 @@
<html><body>Warehouse Keeper Grakon:<br>
Oh, I see. I've got so much of that woman's stuff, my warehouse is about to burst. She's always storring items, but never takes any out.<br>
All right then, which item have you come for?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10737_GrakonsWarehouse 33947-07.htm">"Well, I want to take one and leave one."</Button>
<html><body>Warehouse Keeper Grakon:<br>
Oh, I see. I've got so much of that woman's stuff, my warehouse is about to burst. She's always storring items, but never takes any out.<br>
All right then, which item have you come for?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10737_GrakonsWarehouse 33947-07.htm">"Well, I want to take one and leave one."</Button>
</body></html>

View File

@@ -1,7 +1,7 @@
<html><body>Warehouse Keeper Grakon:<br>
What? Take something and leave something? This is driving me nuts.
Next time you see her, tell her to come to the warehouse and organize her things.
The item you're looking for is...Oh! I see it. It's labeled as a newbie help box or something.<br>
Shall we make the swap?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10737_GrakonsWarehouse 33947-08.htm">"Give it!"</Button>
<html><body>Warehouse Keeper Grakon:<br>
What? Take something and leave something? This is driving me nuts.
Next time you see her, tell her to come to the warehouse and organize her things.
The item you're looking for is...Oh! I see it. It's labeled as a newbie help box or something.<br>
Shall we make the swap?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10737_GrakonsWarehouse 33947-08.htm">"Give it!"</Button>
</body></html>

View File

@@ -1,6 +1,6 @@
<html><body>Warehouse Keeper Grakon:<br>
If you yourself ever need to store something in the <font color="LEVEL">warehouse</font>, you're always welcome to come back.
Of course, it's not free -- there's a small <font color="LEVEL">fee.</font><br>
Just as long as you don't go abusing my services like somebody we know. You can even send <font color="LEVEL">mail</font> to a friend.
If I'm ever unsure about keeping or discarding something. I'll mail it to a friend. Haha!<br>
<html><body>Warehouse Keeper Grakon:<br>
If you yourself ever need to store something in the <font color="LEVEL">warehouse</font>, you're always welcome to come back.
Of course, it's not free -- there's a small <font color="LEVEL">fee.</font><br>
Just as long as you don't go abusing my services like somebody we know. You can even send <font color="LEVEL">mail</font> to a friend.
If I'm ever unsure about keeping or discarding something. I'll mail it to a friend. Haha!<br>
</body></html>

View File

@@ -22,88 +22,79 @@ import com.l2jserver.gameserver.enums.Race;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.base.ClassId;
import com.l2jserver.gameserver.model.holders.ItemHolder;
import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.model.quest.QuestState;
/**
* @author Krash
* @author Sdw
*/
public class Q10737_GrakonsWarehouse extends Quest
{
// Npcs
private static final int Grakon = 33947;
private static final int Katalin = 33943;
private static final int Ayanthe = 33942;
// Items
private static final int Apprentice_Support_Box = 39520;
private static final int Apprentice_Adventurer_Staff = 7816;
private static final int Apprentice_Adventurer_Fists = 7819;
// Level Check
// NPC's
private static final int KATALIN = 33943;
private static final int AYANTHE = 33942;
private static final int GRAKON = 33947;
// Misc
private static final int MIN_LEVEL = 5;
private static final int MAX_LEVEL = 20;
// Items
private static final ItemHolder APPRENTICE_SUPPORT_BOX = new ItemHolder(39520, 1);
private static final ItemHolder APPRENTICE_ADVENTURER_STAFF = new ItemHolder(7816, 1);
private static final ItemHolder APPRENTICE_ADVENTURER_FISTS = new ItemHolder(7819, 1);
public Q10737_GrakonsWarehouse()
{
super(10737, Q10737_GrakonsWarehouse.class.getSimpleName(), "Grakon's Warehouse");
addStartNpc(Katalin, Ayanthe);
addTalkId(Katalin, Ayanthe, Grakon);
registerQuestItems(Apprentice_Support_Box);
addCondMinLevel(MIN_LEVEL, "");
addCondMaxLevel(MAX_LEVEL, "");
addCondRace(Race.ERTHEIA, "");
addStartNpc(KATALIN, AYANTHE);
addTalkId(KATALIN, AYANTHE, GRAKON);
addCondLevel(MIN_LEVEL, MAX_LEVEL, "fixme.htm");
addCondRace(Race.ERTHEIA, "fixme.htm");
registerQuestItems(APPRENTICE_SUPPORT_BOX.getId());
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, false);
String htmltext = null;
if (qs == null)
{
return htmltext;
return null;
}
String htmltext = null;
switch (event)
{
case "33942-03.htm":
case "33943-03.htm":
{
qs.startQuest();
qs.setCond(1);
qs.giveItems(Apprentice_Support_Box, 1);
giveItems(player, APPRENTICE_SUPPORT_BOX);
htmltext = event;
break;
}
case "33947-04.htm":
{
if (qs.isCond(1))
{
giveAdena(player, 11000, true);
addExpAndSp(player, 2650, 0);
qs.giveItems(Apprentice_Adventurer_Fists, 1);
qs.exitQuest(false, true);
htmltext = event;
}
break;
}
case "33947-08.htm":
{
if (qs.isCond(1))
if (qs.isStarted())
{
giveAdena(player, 11000, true);
addExpAndSp(player, 2650, 0);
qs.giveItems(Apprentice_Adventurer_Staff, 1);
addExpAndSp(player, 2625, 0);
if (player.getClassId() == ClassId.ERTHEIA_FIGHTER)
{
giveItems(player, APPRENTICE_ADVENTURER_FISTS);
}
else if (player.getClassId() == ClassId.ERTHEIA_WIZARD)
{
giveItems(player, APPRENTICE_ADVENTURER_STAFF);
}
qs.exitQuest(false, true);
htmltext = event;
}
break;
}
case "33943-02.htm":
case "33942-02.htm":
case "33943-02.htm":
case "33947-02.htm":
case "33947-03.htm":
case "33947-06.htm":
@@ -113,7 +104,6 @@ public class Q10737_GrakonsWarehouse extends Quest
break;
}
}
return htmltext;
}
@@ -123,48 +113,29 @@ public class Q10737_GrakonsWarehouse extends Quest
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
if (qs.isCompleted())
{
htmltext = getAlreadyCompletedMsg(player);
}
switch (npc.getId())
{
case Katalin:
if (qs.isCond(0) && (player.getLevel() >= MIN_LEVEL) && (player.getLevel() <= MAX_LEVEL) && (player.getClassId() == ClassId.ERTHEIA_FIGHTER))
case KATALIN:
case AYANTHE:
{
if (qs.isCreated())
{
htmltext = "33943-01.htm";
htmltext = npc.getId() + "-01.htm";
}
else
else if (qs.isStarted())
{
htmltext = "33943-noLevel.htm";
}
if (qs.isCond(1))
{
htmltext = "33943-03.htm";
}
if ((player.getLevel() < MIN_LEVEL) && (player.getLevel() > MAX_LEVEL) && (player.getRace() != Race.ERTHEIA))
{
htmltext = "33943-noLevel.htm";
htmltext = npc.getId() + "-03.htm";
}
break;
case Ayanthe:
if (qs.isCond(0) && (player.getLevel() >= MIN_LEVEL) && (player.getLevel() <= MAX_LEVEL) && (player.getClassId() == ClassId.ERTHEIA_WIZARD))
{
htmltext = "33942-01.htm";
}
else
{
htmltext = "33942-noLevel.htm";
}
if (qs.isCond(1))
{
htmltext = "33942-03.htm";
}
if ((player.getLevel() < MIN_LEVEL) && (player.getLevel() > MAX_LEVEL) && (player.getRace() != Race.ERTHEIA))
{
htmltext = "33942-noLevel.htm";
}
break;
case Grakon:
if (qs.isCond(1) && qs.hasQuestItems(Apprentice_Support_Box))
}
case GRAKON:
{
if (qs.isStarted())
{
if (player.getClassId() == ClassId.ERTHEIA_FIGHTER)
{
@@ -176,8 +147,9 @@ public class Q10737_GrakonsWarehouse extends Quest
}
}
break;
}
}
return htmltext;
}
}
}

View File

@@ -0,0 +1,4 @@
<html><body>Weapon Merchant Evna:<br>
Welcome! What do you want? Of course you want weapons from me. Take your pick. All my goods are durable.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10738_AnInnerBeauty 33935-02.htm">"Grakon sent me."</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Weapon Merchant Evna:<br>
Grakon? Who's that?<br>
You mean the old warehouse keeper? He creeps me out. I hate seeing him grinning at me whenever I visit. I try not to visit. But what's this about?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10738_AnInnerBeauty 33935-03.htm">"I have his note."</Button>
</body></html>

View File

@@ -0,0 +1,12 @@
<html><body>Weapon Merchant Evna:<br>
Hmm? A note? Let's see.<br>
To Evna.<br1>
I wrote a poem about you.<br>
<font color="LEVEL">The soft cooling breeze<br1>
reminds me of you.<br1>
The breeze heartlessly passes by.<br1>
When will you stay with me?</font><br>
Eww! What is this?<br1>
Hey! If you want business with me, then you'd better stop running his creepy errands.<br>
Almost had a heart attack there. I'm into someone beautiful and powerful. Like Venir. Got it?
</body></html>

View File

@@ -0,0 +1,7 @@
<html><body>Warehouse Keeper Grakon:<br>
<font color="LEVEL">That cool, gentle wind.<br1>
Reminds me of you.</font><br>
Ack! You scared me. How long were you standing there? Hm hm. You didn't hear what I just said, did you?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10738_AnInnerBeauty 33947-02.htm">"I heard everything."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10738_AnInnerBeauty 33947-03.htm">"I didn't hear anything."</Button>
<br></body></html>

View File

@@ -0,0 +1,7 @@
<html><body>Warehouse Keeper Grakon:<br>
Oh, how embarrassing. Actually, I wrote that poem with someone in mind. Heh.<br>
Who's it about, you say? How about you mind your own business and pay me for my recitation?<br>
Don't freeze up like that, naive fellow. I was just joking.<br>
I do have one request, though. Want to hear it?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10738_AnInnerBeauty 33947-04.htm">"Do I? I suppose..."</Button>
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>Warehouse Keeper Grakon:<br>
You didn't hear? Hmph. I see. What? I didn't say anything.<br>
No one ever hears me. No one wants to listen to my lonely heart! They only want me when they need me for something.<br>
You're not like that, are you? You'll listen, right? And do me a favor?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10738_AnInnerBeauty 33947-04.htm">"What? I didn't hear -- oh, fine."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Warehouse Keeper Grakon:<br>
Give <font color="LEVEL">Weapon Merchant Evna</font> this note telling her that there's something wrong with one of her stored items. Tell her to come here directly.<br>
If you don't hurry and get a move on, I'm going to have to show you my scary face!<br>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><head><body>Warehouse Keeper Grakon:<br>
Woe is me.<br>
Is there anyone who understands how I feel?<br>
(This quest can only be performed by Ertheia Lv. 20 or below who have completed "Grakon's Warehouse".)<br>
</body></html>

View File

@@ -0,0 +1,127 @@
/*
* Copyright (C) 2004-2015 L2J DataPack
*
* This file is part of L2J DataPack.
*
* L2J DataPack 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.
*
* L2J DataPack 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.Q10738_AnInnerBeauty;
import quests.Q10737_GrakonsWarehouse.Q10737_GrakonsWarehouse;
import com.l2jserver.gameserver.enums.Race;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.holders.ItemHolder;
import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.model.quest.QuestState;
/**
* @author Sdw
*/
public class Q10738_AnInnerBeauty extends Quest
{
// NPC's
private static final int GRAKON = 33947;
private static final int EVNA = 33935;
// Misc
private static final int MIN_LEVEL = 5;
private static final int MAX_LEVEL = 20;
// Items
private static final ItemHolder GRAKON_S_NOTE = new ItemHolder(39521, 1);
public Q10738_AnInnerBeauty()
{
super(10738, Q10738_AnInnerBeauty.class.getSimpleName(), "An Inner Beauty");
addStartNpc(GRAKON);
addTalkId(GRAKON, EVNA);
addCondLevel(MIN_LEVEL, MAX_LEVEL, "33947-05.htm");
addCondRace(Race.ERTHEIA, "33947-05.htm");
addCondCompletedQuest(Q10737_GrakonsWarehouse.class.getSimpleName(), "33947-05.htm");
registerQuestItems(GRAKON_S_NOTE.getId());
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return null;
}
String htmltext = null;
switch (event)
{
case "33947-02.htm":
case "33947-03.htm":
case "33935-02.htm":
{
htmltext = event;
break;
}
case "33947-04.htm":
{
qs.startQuest();
giveItems(player, GRAKON_S_NOTE);
htmltext = event;
break;
}
case "33935-03.htm":
{
if (qs.isStarted())
{
giveAdena(player, 12000, true);
addExpAndSp(player, 2625, 1);
qs.exitQuest(false, true);
htmltext = event;
}
break;
}
}
return htmltext;
}
@Override
public String onTalk(L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
if (qs.isCompleted())
{
htmltext = getAlreadyCompletedMsg(player);
}
if (npc.getId() == GRAKON)
{
if (qs.isCreated())
{
htmltext = "33947-01.htm";
}
else if (qs.isStarted())
{
htmltext = "33947-04.htm";
}
}
else if (npc.getId() == EVNA)
{
if (qs.isStarted())
{
htmltext = "33935-01.htm";
}
}
return htmltext;
}
}

View File

@@ -0,0 +1,8 @@
<html><body>Armor Merchant Denya:<br>
So you're about to begin a journey? I want to go out too, but I can't.<br>
But it's not like I hate my job. <font color="LEVEL">Armor</font> increases <font color="LEVEL">defense against physical attacks.</font>
I take pride in helping people protect themselves. A full set of a top, pants, gloves, boots, and a helmet will help you to withstand any attacks.<br>
But you don't look like you're here to buy armor.<br1>
What do you need?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10739_SupplyAndDemand 33934-02.htm">"I'm running errands for Evna."</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Armor Merchant Denya:<br>
You mean Weapon Merchant Evna? Oh! You're delivering supply boxes to the forest patrols.<br>
No offense. We can't leave our stores, so we always have to ask adventurers. I'm sure Evna told you that we always pay up.<br>
Let me ask you to deliver my Supply Box too. You will be walking a lot today. <font color="LEVEL">Pelu the Grocer</font> also has supplies.
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Armor Merchant Denya:<br>
Go to <font color="LEVEL">Grocer Pelu</font>.
</body></html>

View File

@@ -0,0 +1,8 @@
<html><body>Weapon Merchant Evna:<br>
Hmm, okay. That seems enough.<br1>
Huh? I was just talking to myself. Let's see what you're capable of.<br>
It's nothing. Outside the town, there is a place called <font color="LEVEL">Whispering Woods</font>.
It's about time we sent the shipment, but as you can see, I'm a merchant. Every second I spend outside costs me money.<br>
I'm sure all the merchants in the area feel the same.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10739_SupplyAndDemand 33935-02.htm">"Cut to the point."</Button>
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>Weapon Merchant Evna:<br>
Okay, okay! You're impatient. Some dwarves are dying to talk to me.<br>
I want you to take the shipment from me and other merchants here to the forest patrol. Of course, you will be handsomely rewarded.<br>
You get to make money, and I get to make money. It's a win-win.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10739_SupplyAndDemand 33935-03.htm">"I'll take the job"</Button>
</body></html>

View File

@@ -0,0 +1,8 @@
<html><body>Weapon Merchant Evna:<br>
I like how you're quick with your answer.<br>
Take my shipment first. it's heavy because it's a Weapon Supply Box.
There are good weapons inside, so don't lose it.
You can come to me when you need a weapon too!
I have daggers, bows, blunt weapons, everythings!<br>
Now go to <font color="LEVEL">Armor Merchant Denya</font> and get other supply boxes.<br>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Weapon Merchant Evna:<br>
Go to <font color="LEVEL">Armor Merchant Denya</font> and get her box.
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Grocer Pelu:<br>
Armor Merchant Denya sent you, didn't she? How did I know? My eyes are just that good. You were talking to her just now.<br>
By the way, do you know what I sell?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10739_SupplyAndDemand 33936-02.htm">"What do you sell?"</Button>
</body></html>

View File

@@ -0,0 +1,8 @@
<html><body>Grocer Pelu:<br>
Groceries. Weapon Merchants sell weapons.<br1>
Armor Merchants sell armor. What would Grocers sell?<br>
Don't make that face. Grocers sell various goods.<font color="LEVEL">Scroll of Escape</font>, which takes you home. <font color="LEVEL">Recovery Potion</font>,
when you're hurt. <font color="LEVEL">Soulshots</font> or <font color="LEVEL">Spiritshots</font> for battle. I cannot even list them all. They are mostly <font color="LEVEL">consumables.</font><br>
What am I doing? There's no time. Here's my Supply Box. When the supplies arrive late, the Forest Patrols have a hard time. And I also get in trouble with the Queen. The Queen is not always so kind.<br>
Now go to <font color="LEVEL">Ceri the Accessory Merchant.</font> Good luck!
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Grocer Pelu:<br>
You need to see one more now. Cheer up! Go to <font color="LEVEL">Ceri the Accessory Merchant</font>.
</body></html>

View File

@@ -0,0 +1,7 @@
<html><body>Ceri the Accessory Merchant:<br>
You're finally here. I've been waiting for you. Am I the last one? You need to receive supply boxes from 4 people, including myself.<br>
Outside town, you will find the <font color="LEVEL">Whispering Woods.</font> It was transferred from the Wind Spirit Realm along with the village.
The animals and fairies there became violent as they came through the Dimensional Rift, so the Forest Patrols are watching them.<br>
You must deliver the supply box soon, so they don't get hurt doing their job.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10739_SupplyAndDemand 33937-02.htm">"What do I deliver?"</Button>
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>Ceri the Accessory Merchant:<br>
They are accessories such as <font color="LEVEL">earrings, necklaces, and rings.</font> Armor increases defense against physical attacks.
On the other hand, <font color="LEVEL">accessories</font> increase <font color="LEVEL">defense against magic.</font>
The enemies outside the village will attack you in various forms, which why it's important to wear both armor and accessories.<br>
Here, this is an accessory supply box. Please take it with the other supply boxes to <font color="LEVEL">Forest Patrol Sivanthe.</font>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Ceri the Accessory Merchant:<br>
Did you forget who you should go to?<br>
Please take the supply boxes to <font color="LEVEL">Forest Patrol Sivanthe</font>.
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Forest Patrol Sivanthe:<br>
You brought the supply boxes. Thanks you.<br>
I will delegate them to the Forest Patrols inside. You should learn about the Remembrance Tower while you're here.<br>
</body></html>

View File

@@ -0,0 +1,201 @@
/*
* Copyright (C) 2004-2015 L2J DataPack
*
* This file is part of L2J DataPack.
*
* L2J DataPack 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.
*
* L2J DataPack 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.Q10739_SupplyAndDemand;
import quests.Q10738_AnInnerBeauty.Q10738_AnInnerBeauty;
import com.l2jserver.gameserver.enums.Race;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.holders.ItemHolder;
import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.model.quest.QuestState;
import com.l2jserver.gameserver.network.NpcStringId;
import com.l2jserver.gameserver.network.serverpackets.ExShowScreenMessage;
/**
* @author Sdw
*/
public class Q10739_SupplyAndDemand extends Quest
{
// NPC's
private static final int EVNA = 33935;
private static final int DENYA = 33934;
private static final int PELU = 33936;
private static final int CERI = 33937;
private static final int SIVANTHE = 33951;
// Items
private static final ItemHolder WEAPON_SUPPLY_BOX = new ItemHolder(39522, 1);
private static final ItemHolder ARMOR_SUPPLY_BOX = new ItemHolder(39523, 1);
private static final ItemHolder GROCERY_SUPPLY_BOX = new ItemHolder(39524, 1);
private static final ItemHolder ACCESSORY_SUPPLY_BOX = new ItemHolder(39525, 1);
private static final ItemHolder LEATHER_SHIRT = new ItemHolder(21, 1);
private static final ItemHolder LEATHER_PANTS = new ItemHolder(29, 1);
private static final ItemHolder APPRENTICE_EARRING = new ItemHolder(112, 2);
private static final ItemHolder NECKLACE_OF_KNOWNLEDGE = new ItemHolder(906, 1);
// Misc
private static final int MIN_LEVEL = 6;
private static final int MAX_LEVEL = 20;
public Q10739_SupplyAndDemand()
{
super(10739, Q10739_SupplyAndDemand.class.getSimpleName(), "Supply And Demand");
addStartNpc(EVNA);
addTalkId(EVNA, DENYA, PELU, CERI, SIVANTHE);
registerQuestItems(WEAPON_SUPPLY_BOX.getId(), ARMOR_SUPPLY_BOX.getId(), GROCERY_SUPPLY_BOX.getId(), ACCESSORY_SUPPLY_BOX.getId());
addCondLevel(MIN_LEVEL, MAX_LEVEL, "33935-05.htm");
addCondRace(Race.ERTHEIA, "33935-05.htm");
addCondCompletedQuest(Q10738_AnInnerBeauty.class.getSimpleName(), "33935-05.htm");
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return null;
}
String htmltext = null;
switch (event)
{
case "33935-03.htm":
{
qs.startQuest();
giveItems(player, WEAPON_SUPPLY_BOX);
htmltext = event;
break;
}
case "33934-02.htm":
{
if (qs.isCond(1))
{
qs.setCond(2, true);
giveItems(player, ARMOR_SUPPLY_BOX);
htmltext = event;
}
break;
}
case "33936-02.htm":
{
if (qs.isCond(2))
{
qs.setCond(3, true);
giveItems(player, GROCERY_SUPPLY_BOX);
htmltext = event;
}
break;
}
case "33937-02.htm":
{
if (qs.isCond(3))
{
qs.setCond(4, true);
giveItems(player, ACCESSORY_SUPPLY_BOX);
htmltext = event;
}
break;
}
case "33935-02.htm":
{
htmltext = event;
break;
}
}
return htmltext;
}
@Override
public String onTalk(L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
if (qs.isCompleted())
{
htmltext = getAlreadyCompletedMsg(player);
}
switch (npc.getId())
{
case EVNA:
if (qs.isCreated())
{
htmltext = "33935-01.htm";
}
else if (qs.isStarted())
{
htmltext = "33935-04.htm";
}
break;
case DENYA:
if (qs.isCond(1))
{
htmltext = "33934-01.htm";
}
else if (qs.isCond(2))
{
htmltext = "33934-03.htm";
}
break;
case PELU:
if (qs.isCond(2))
{
htmltext = "33936-01.htm";
}
else if (qs.isCond(3))
{
htmltext = "33936-03.htm";
}
break;
case CERI:
if (qs.isCond(3))
{
htmltext = "33937-01.htm";
}
else if (qs.isCond(4))
{
htmltext = "33937-03.htm";
}
break;
case SIVANTHE:
if (qs.isCond(4))
{
giveItems(player, LEATHER_SHIRT);
giveItems(player, LEATHER_PANTS);
giveItems(player, APPRENTICE_EARRING);
giveItems(player, NECKLACE_OF_KNOWNLEDGE);
giveAdena(player, 1400, true);
addExpAndSp(player, 8136, 0);
qs.exitQuest(false, true);
showOnScreenMsg(player, NpcStringId.CHECK_YOUR_EQUIPMENT_IN_YOUR_INVENTORY, ExShowScreenMessage.TOP_CENTER, 4500);
htmltext = "33951-01.htm";
}
break;
}
return htmltext;
}
}

View File

@@ -0,0 +1,4 @@
<html><body>Forest Patrol Sivanthe:<br>
All of us are living well now. But it wasn't always like this. Some of us became III due to sudden environmental changes and died. Some were killed by the monsters in the Material Realm. The village is like this now after making painful sacrifices.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10740_NeverForget 33951-02.htm">"Go on."</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Forest Patrol Sivanthe:<br>
Did you see the tower on the way here? It's for those who were lost while we were settling in. On the day we were attacked by the monsters, I was in the Whispering Woods and calming the spirits...and Lorne was dying at that very moment. My love...he was a great man. A Surr, but without an ounce of prejudice or disdain for the Nann.<br>
I can't believe I'm talking about this to you. Why don't you <font color="LEVEL">do a job for the lost Ertheia</font>?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10740_NeverForget 33951-03.htm">"Sure."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Forest Patrol Sivanthe:<br>
You must have a warm heart to accept so readily.<br>
Among those who were lost on that day, many could not be found except for their belongings. We still have their articles in this area. They are often found by <font color="LEVEL">Keen Floato, Ratel, and Robust Ratel</font>. Please find <font color="LEVEL">The Belongings of the Dead</font> and put them by the tower.<br>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Forest Patrol Sivanthe:<br>
Among those who were lost on that day, many could not be found except for their belongings. We still have their articles in this area. They are often found by <font color="LEVEL">Floato</font>. Please find <font color="LEVEL">The Belongings of the Dead</font> and put them by the tower.<br>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Forest Patrol Sivanthe:<br>
Please put the Belogings of the Dead you found by the tower.
</body></html

View File

@@ -0,0 +1,4 @@
<html><body>Forest Patrol Sivanthe:<br>
Thank you.<br>
Do you think my Lorne is with Sayha now? I try not to think about him, but sometimes it hurts so much...
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Forest Patrol Sivanthe:<br>
Capable warriors are hard to come by these days, let alone capable AND trustworthy.<br>
(Only Ertheia characters Lv. 8 to 20 can perform this quest.)

View File

@@ -0,0 +1,4 @@
<html><body>Rememberance Tower:<br>
There is palpable grief in this tower.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10740_NeverForget 33989-02.htm">"I'll place the relics at the tower."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Rememberance Tower:<br>
A mysterious light traveled up the tower as the relics disappeared.<br>
Go back to Forest Patrol Sivanthe.
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Rememberance Tower:<br>
Go back to Forest Patrol Sivanthe.
</body></html>

Some files were not shown because too many files have changed in this diff Show More