Addition of quests 109, 617, 622, 623, 628 and 640.

Thanks to veriongt.
This commit is contained in:
MobiusDevelopment
2024-04-10 12:49:25 +03:00
parent 7aab41e962
commit de4e7e7ae7
97 changed files with 1762 additions and 0 deletions

View File

@@ -0,0 +1,5 @@
<html><body>Mercenary Captain Pierce:<br>
Excellent! I hate to throw you into the fire on your first mission, but it's vital that we find out what happened to our scout!<br>
Cool your heels a minute and I'll tell you where to focus your search.<br>
We lost contact with him inside the Swamp of Screams. If you follow the path you can't miss it. I also marked it on your map, so don't get lost! Last thing I need is another missing person.
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Mercenary Captain Pierce:<br>
We have no use for someone so inexperienced. Get some more training and we'll see what we can do for you...<br>
(Only characters who are level 81 or higher may undertake this quest.)
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Mercenary Captain Pierce:<br>
I'm glad to have you on the force! Makes me more optimistic about our chances...<br>
Anyway, I called you here to ask you a favor. I sent a group of scouts into the Swamp of Screams to investigate the ongoing conflict there, but we've lost contact with one of them. I need someone to find out what happened. Are you up to the task?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00109_InSearchOfTheNest 31553-0.htm">"Sure, no big deal. I'll do it."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Mercenary Captain Pierce:<br>
What's the hold up?<br>
We lost contact with the scout inside the Swamp of Screams. Follow the path and you can't miss it. I marked it on the map so you shouldn't get lost. Remember, countless lives are at stake here! We need to find that scout!
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Mercenary Captain Pierce:<br>
I can tell by your looks that you found something. Well? Is my scout OK?<br>
Spit it out, soldier! What do you know?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00109_InSearchOfTheNest 31553-3.html">"Read this memo."</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Mercenary Captain Pierce:<br>
Ah, I see... He's dead, then.<br>
Good work. At least he gave us some important information: the Stakatos are becoming both wilder and stronger, though we don't know why.<br>
Our Golden Ram Mercenaries must now prepare for what may well be our final battle. Take this news to <font color="LEVEL">Kahman</font>. He will reward you for your efforts.
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Mercenary Captain Pierce:<br>
You've done your part, and I thank you for it. Go to see <font color="LEVEL">Kahman</font> over there for your reward.
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Mercenary Kahman:<br>
State your business here! We received no order.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00109_InSearchOfTheNest 31554-2.html">"Pierce sent me."</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Mercenary Kahman:<br>
Oh, yeah! It's you! Right, then. Here you go! Don't be too disappointed if it's less than you'd like. Come back later and there'll be more work for you.
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body><br>
The corpse of Pierce's scout, who came here looking for the entrance. Search for any clues he might have left.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00109_InSearchOfTheNest 32015-2.html">Search the corpse.</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body><br>
(Beneath the corpse you find a memo. You should take it to Mercenary Captain Pierce.)
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body><br>
(There's nothing else here. Take the memo to Mercenary Captain Pierce.)
</body></html>

View File

@@ -0,0 +1,157 @@
/*
* 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.Q00109_InSearchOfTheNest;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState;
import org.l2jmobius.gameserver.model.quest.State;
/**
* In Search of the Nest (109)
* @author Adry_85
*/
public class Q00109_InSearchOfTheNest extends Quest
{
// NPCs
private static final int PIERCE = 31553;
private static final int SCOUTS_CORPSE = 32015;
private static final int KAHMAN = 31554;
// Items
private static final int SCOUTS_NOTE = 14858;
public Q00109_InSearchOfTheNest()
{
super(109);
addStartNpc(PIERCE);
addTalkId(PIERCE, SCOUTS_CORPSE, KAHMAN);
registerQuestItems(SCOUTS_NOTE);
}
@Override
public String onAdvEvent(String event, Npc npc, Player player)
{
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return getNoQuestMsg(player);
}
switch (event)
{
case "31553-0.htm":
{
qs.startQuest();
break;
}
case "32015-2.html":
{
giveItems(player, SCOUTS_NOTE, 1);
qs.setCond(2, true);
break;
}
case "31553-3.html":
{
takeItems(player, SCOUTS_NOTE, -1);
qs.setCond(3, true);
break;
}
case "31554-2.html":
{
giveAdena(player, 161500, true);
addExpAndSp(player, 701500, 50000);
qs.exitQuest(false, true);
break;
}
}
return event;
}
@Override
public String onTalk(Npc npc, Player player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
switch (npc.getId())
{
case PIERCE:
{
switch (qs.getState())
{
case State.CREATED:
{
htmltext = (player.getLevel() < 81) ? "31553-0a.htm" : "31553-0b.htm";
break;
}
case State.STARTED:
{
switch (qs.getCond())
{
case 1:
{
htmltext = "31553-1.html";
break;
}
case 2:
{
htmltext = "31553-2.html";
break;
}
case 3:
{
htmltext = "31553-3a.html";
break;
}
}
break;
}
case State.COMPLETED:
{
htmltext = getAlreadyCompletedMsg(player);
break;
}
}
break;
}
case SCOUTS_CORPSE:
{
if (qs.isStarted())
{
if (qs.isCond(1))
{
htmltext = "32015-1.html";
}
else if (qs.isCond(2))
{
htmltext = "32015-3.html";
}
}
break;
}
case KAHMAN:
{
if (qs.isStarted() && qs.isCond(3))
{
htmltext = "31554-1.html";
}
break;
}
}
return htmltext;
}
}

View File

@@ -0,0 +1,5 @@
<html><body>Blacksmith Hilda:<br>
I've a tale to interest you. Have you heard tell of <font color="LEVEL">Vulcan</font>, the blacksmith? Now, all us blacksmiths have much to say about fire - we depend on it for our livelihood. Vulcan, though, he spoke of nothing else, and his talk was the marvel of all who heard it. He said that the fire was the actual life of the blacksmith, and could think of nothing but ways to make his fire hotter and fiercer.<br>
Eventually, he followed his notions right into the deeps of the <font color="LEVEL">Gods' Forge</font>, where he said he could collect and use all the fire he could want. It's a horribly dangerous place, and he's looking for those who can accompany him, adventurers who are not shy of danger and who can help him collect the flames. Do you reckon to be interested?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00617_GatherTheFlames 31271-03.htm">Express interest in the venture.</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Blacksmith Hilda:<br>
Ho, there! I'm Hilda the Blacksmith, and if you want good, solid work done, there's none better here.<br>
Don't pay any attention to the claims of that crackpot <font color="LEVEL">Vulcan</font>. He's mad through and through. Fire is his obsession - he's forever searching for ways to make fire hotter and fiercer. I care for my fire, as does any competent blacksmith, but there are limits. Anyway, he won't live long enough to help you with anything; he's in the habit of venturing into the <font color="LEVEL">Forge of the Gods</font>, and one day its dangers will claim him - and his eternal fire too!<br>
I've heard he is looking for adventurers to help him collect flames, but take my advice: leave that job to tougher adventurers, or wait until you yourselves are tougher. If you accompany him now, you'll die right alongside him.
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Blacksmith Hilda:<br>
Very well, then. Defeat the <font color="LEVEL">monsters in the Gods' Forge</font>, collect the flames you find there, and bring them to Vulcan. He's mad, but he's a canny blacksmith; he'll give you an S-grade weapon recipe if you can bring him <font color="LEVEL">1000 flames</font>.<br>
You may have heard tell of Vulcan's younger brother <font color="LEVEL">Rooney</font>. No? Well, he's as mad as his brother is, and perhaps even cannier as a blacksmith. He's a wandering lad, but he has a lot of different S-grade weapon recipes. <font color="LEVEL">Give Rooney 1200 flames, and he'll reward you with an S-grade weapon recipe.</font> If you can find him in his wanderings, it might be a good idea for you to meet with him too.
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Blacksmith Hilda:<br>
So you met with Vulcan, did you? Did he give you an earful of his madness? Well, he's mad about flame, but the rewards he offers are real. Defeat the <font color="LEVEL">monsters in the Gods' Forge</font>, collect the flames you find, and go to him; he will give you an S-grade weapon recipe if you bring him <font color="LEVEL">1000 flames</font>.<br>
If you gather even more flames, you might see about meeting Vulcan's younger brother <font color="LEVEL">Rooney</font>. He's as mad as his brother, and he's engaged in the same quest. <font color="LEVEL">Bring him 1200 flames and he will give you an S-grade weapon recipe.</font>. Rooney wanders from here to there, so he's not easy to find...but it might be worth your while to deal with him.
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Vulcan, Blacksmith of the Flame:<br>
Fire is the lifeblood of a blacksmith. I need a hotter fire to make this high quality weapon. I'm gathering flames from Forge of the Gods, can you help me?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00617_GatherTheFlames 31539-03.htm">Quest</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Vulcan, Blacksmith of the Flame:<br>
Fire is the lifeblood of a blacksmith. I need a hotter fire to make this high quality weapon. I'm gathering flames from Forge of the Gods. You don't want to get burned, do you?<br>
(This quest may only be undertaken by a charachter level 74 or above.)
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Vulcan, Blacksmith of the Flame:<br>
Very well! Let me ask you a favor! Bring me <font color="LEVEL">1000 Flames</font> from the <font color="LEVEL">monsters inside the Forge of the Gods</font>. I'll give you a Weapon Recipe: Grade S that I have.<br>
Oh, I just remembered that my younger brother, <font color="LEVEL">Rooney</font>, also collects Flames in the Forge of the Gods. He's a wanderer, that boy! I've heard that <font color="LEVEL">he gives a Weapon Recipe: Grade S to anyone who brings him 1200 Flames</font>, but he probably won't be easy to find!
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>Vulcan, Blacksmith of the Flame:<br>
Oh! You brought 1000 flames! What do you think? Do you want to trade the 1000 flames for my Weapon Recipe: Grade S?<br>
I just remembered that my younger brother, <font color="LEVEL">Rooney</font>, also collects Flames in the Forge of the Gods. He's a wanderer, that boy! I've heard that <font color="LEVEL">he gives a Weapon Recipe: Grade S to anyone who brings him 1200 Flames</font>, but he probably won't be easy to find!<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00617_GatherTheFlames 31539-06.html">"I don't want to trade right now."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00617_GatherTheFlames 31539-07.html">"Let's trade."</Button>
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>Vulcan, Blacksmith of the Flame:<br>
Hey, are you gathering Flames? Alas, you have not gotten 1000 of them yet. You do realize that you can get them from the <font color="LEVEL">Monsters located within the Forge of the Gods</font>. If you so happen to bring me <font color="LEVEL">1000 Flames</font>, I'll give you something special in return.<br>
It might also be useful for me to mention that my younger brother, <font color="LEVEL">Rooney</font>, also collects these Flames in the Forge of the Gods. Aye, that lad... he be a wanderer no doubt! He's mentioned that <font color="LEVEL">he will part with one of his belongings to anyone who delivers 1200 Flames to him</font>. He is not someone easy to locate however!<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00617_GatherTheFlames 31539-06.html">"I want to continue to collect Flames."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00617_GatherTheFlames 31539-08.html">"I want to stop collecting Flames."</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Vulcan, Blacksmith of the Flame:<br>
Continue gathering flames from <font color="LEVEL">monsters in Forge of the Gods</font>.
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Blacksmith of Flame Vulcan:<br>
Now. Here it is.<br>
What do you think? This S-grade weapon recipe is not easy to obtain. Whether it pleases you or not, you should recognize that it is a precious item. Even if it is not the weapon recipe that you wanted, an S-grade weapon recipe is valuable enough in and of itself...<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00617_GatherTheFlames 31539-04.html">Receive reward again.</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Vulcan, Blacksmith of the Flame:<br>
Come back anytime if you change your mind, I'll be here.
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Blacksmith of Wind Rooney:<br>
I'm collecting Flames like my brother Vulcan does. Unlike Vulcan, I wander around occasionally, so I was able to get various S-grade Weapon Recipes. If you <font color="LEVEL">collect and bring me 1200 Flames, I'll give you a recipe.</font>
</body></html>

View File

@@ -0,0 +1,13 @@
<html><body>Blacksmith of Wind Rooney:<br>
Um, look here. You have a lot of Flames here! If you give me 1200 Flames, I will exchange them for the S-Grade weapon recipe. I am taking more than Vulcan? Well, this recipe contains my effort, sweat and blood, so I can't take any less...<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00617_GatherTheFlames 6881">Recipe: Forgotten Blade (60%)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00617_GatherTheFlames 6883">Recipe: Basalt Battlehammer (60%)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00617_GatherTheFlames 6885">Recipe: Imperial Staff (60%)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00617_GatherTheFlames 6887">Recipe: Angel Slayer (60%)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00617_GatherTheFlames 7580">Recipe: Draconic Bow (60%)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00617_GatherTheFlames 6891">Recipe: Dragon Hunter Axe (60%)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00617_GatherTheFlames 6893">Recipe: Saint Spear (60%)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00617_GatherTheFlames 6895">Recipe: Demon Splinter (60%)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00617_GatherTheFlames 6897">Recipe: Heaven's Divider (60%)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00617_GatherTheFlames 6899">Recipe: Arcana Mace (60%)</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Blacksmith of Wind Rooney:<br>
Here it is. I'll exchange with you again if you bring back some more.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00617_GatherTheFlames 32049-02.html">Receive reward again.</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Blacksmith of Wind Rooney:<br>
Here it is. Bring me more Flames and I'll trade for them.
</body></html>

View File

@@ -0,0 +1,228 @@
/*
* 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.Q00617_GatherTheFlames;
import java.util.HashMap;
import java.util.Map;
import org.l2jmobius.gameserver.enums.QuestSound;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState;
/**
* Gather the Flames (617)
* @author malyelfik
*/
public class Q00617_GatherTheFlames extends Quest
{
// NPCs
private static final int HILDA = 31271;
private static final int VULCAN = 31539;
private static final int ROONEY = 32049;
// Item
private static final int TORCH = 7264;
// Reward
private static final int[] REWARD =
{
6881,
6883,
6885,
6887,
6891,
6893,
6895,
6897,
6899,
7580
};
// Monsters
private static final Map<Integer, Integer> MOBS = new HashMap<>();
static
{
MOBS.put(22634, 639);
MOBS.put(22635, 611);
MOBS.put(22636, 649);
MOBS.put(22637, 639);
MOBS.put(22638, 639);
MOBS.put(22639, 645);
MOBS.put(22640, 559);
MOBS.put(22641, 588);
MOBS.put(22642, 537);
MOBS.put(22643, 618);
MOBS.put(22644, 633);
MOBS.put(22645, 550);
MOBS.put(22646, 593);
MOBS.put(22647, 688);
MOBS.put(22648, 632);
MOBS.put(22649, 685);
}
public Q00617_GatherTheFlames()
{
super(617);
addStartNpc(HILDA, VULCAN);
addTalkId(ROONEY, HILDA, VULCAN);
addKillId(MOBS.keySet());
registerQuestItems(TORCH);
}
@Override
public String onAdvEvent(String event, Npc npc, Player player)
{
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return getNoQuestMsg(player);
}
String htmltext = event;
switch (event)
{
case "31539-03.htm":
case "31271-03.htm":
{
qs.startQuest();
break;
}
case "32049-02.html":
case "31539-04.html":
case "31539-06.html":
{
break;
}
case "31539-07.html":
{
if ((getQuestItemsCount(player, TORCH) < 1000) || !qs.isStarted())
{
return getNoQuestMsg(player);
}
giveItems(player, getRandomEntry(REWARD), 1);
takeItems(player, TORCH, 1000);
break;
}
case "31539-08.html":
{
qs.exitQuest(true, true);
break;
}
case "6883":
case "6885":
case "7580":
case "6891":
case "6893":
case "6895":
case "6897":
case "6899":
{
if ((getQuestItemsCount(player, TORCH) < 1200) || !qs.isStarted())
{
return getNoQuestMsg(player);
}
giveItems(player, Integer.parseInt(event), 1);
takeItems(player, TORCH, 1200);
htmltext = "32049-04.html";
break;
}
case "6887":
case "6881":
{
if ((getQuestItemsCount(player, TORCH) < 1200) || !qs.isStarted())
{
return getNoQuestMsg(player);
}
giveItems(player, Integer.parseInt(event), 1);
takeItems(player, TORCH, 1200);
htmltext = "32049-03.html";
break;
}
default:
{
htmltext = null;
break;
}
}
return htmltext;
}
@Override
public String onKill(Npc npc, Player player, boolean isSummon)
{
final Player partyMember = getRandomPartyMember(player, 1);
if (partyMember == null)
{
return super.onKill(npc, player, isSummon);
}
if (getRandom(1000) < MOBS.get(npc.getId()))
{
giveItems(partyMember, TORCH, 2);
}
else
{
giveItems(partyMember, TORCH, 1);
}
playSound(partyMember, QuestSound.ITEMSOUND_QUEST_ITEMGET);
return super.onKill(npc, player, isSummon);
}
@Override
public String onTalk(Npc npc, Player player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
switch (npc.getId())
{
case ROONEY:
{
if (qs.isStarted())
{
htmltext = (getQuestItemsCount(player, TORCH) >= 1200) ? "32049-02.html" : "32049-01.html";
}
break;
}
case VULCAN:
{
if (qs.isCreated())
{
htmltext = (player.getLevel() >= 74) ? "31539-01.htm" : "31539-02.htm";
}
else
{
htmltext = (getQuestItemsCount(player, TORCH) >= 1000) ? "31539-04.html" : "31539-05.html";
}
break;
}
case HILDA:
{
if (qs.isCreated())
{
htmltext = (player.getLevel() >= 74) ? "31271-01.htm" : "31271-02.htm";
}
else
{
htmltext = "31271-04.html";
}
break;
}
}
return htmltext;
}
}

View File

@@ -0,0 +1,4 @@
<head><body>Lietta:<br>
Are you here for something? Or perhaps to drop something off?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00622_SpecialtyLiquorDelivery 31267-02.html">"Jeremy sent me to get some Adena."</Button>
</head></body>

View File

@@ -0,0 +1,5 @@
<head><body>Lietta:<br>
Oh, I see. Jeremy didn't pay you after you did work for him? That sounds like Jeremy!<br>
Hold on...<br>
Here you are. This should be enough.
</head></body>

View File

@@ -0,0 +1,6 @@
<head><body>Chef Jeremy:<br>
You look like you could use a few extra Adena...<br>
Well I'm looking for a helper! You'll earn an honest wage around here, that's for sure!<br>
All you have to do is take these specialty liquors to my customers. Their names are already written down. Deliver them quickly, and who knows? I might teach you a secret cooking technique! Ha!<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00622_SpecialtyLiquorDelivery 31521-03.htm">"I'll deliver your liquor."</Button>
</head></body>

View File

@@ -0,0 +1,4 @@
<head><body>Chef Jeremy:<br>
Many dangerous and ferocious beasts lurk these parts. I'd really hate to have to bury another assistant!<br>
(Only a character of level 68 or above may undertake this quest.)
</head></body>

View File

@@ -0,0 +1,4 @@
<head><body>Chef Jeremy:<br>
Please take this specialty liquor to my customers at the hot springs resort.<br>
Our motto is "The Customer Always Comes First!" Don't ever forget it!
</head></body>

View File

@@ -0,0 +1,4 @@
<head><body>Chef Jeremy:<br>
What are you waiting for?<br>
Think my customers who are waiting for my delicious liquor to arrive! Get going!
</head></body>

View File

@@ -0,0 +1,5 @@
<head><body>Jeremy:<br>
You've come back?<br>
Did you finish delivering all the liquor?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00622_SpecialtyLiquorDelivery 31521-06.html">"I completed the delivery."</Button>
</head></body>

View File

@@ -0,0 +1,4 @@
<head><body>Jeremy:<br>
My mother's mother's mother made this wine for the soldiers fighting in the war. They say that when the soldiers drank it, it so raised their fighting spirit that they won the battle. Believe it or not!<br>
In any case, I'd like to pay you for your work, but I'm afraid that I don't have any money with me at the moment. I know it's a bit of trouble, but if you visit Warehouse Keeper Lietta in Goddard Castle Town and tell her that I sent you, she'll give you what you deserve.
</head></body>

View File

@@ -0,0 +1,3 @@
<head><body>Jeremy:<br>
Deliver and collect the money, deliver and collect the money. You just have to keep repeating. Go finish the rest of your deliveries and get back here.
</head></body>

View File

@@ -0,0 +1,4 @@
<head><body>Jeremy:<br>
What are you still doing here? Have you forgotten what you were supposed to do?<br>
Go to Warehouse Keeper Lietta in the Town of Goddard and say that you've come on my orders.
</head></body>

View File

@@ -0,0 +1,4 @@
<head><body>Pulin:<br>
You're the liquor delivery man, right? Show me the booze! I came all the way from Horse Island for a drink!<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00622_SpecialtyLiquorDelivery 31543-02.html">"Here's the liquor delivery."</Button>
</head></body>

View File

@@ -0,0 +1,5 @@
<head><body>Pulin:<br>
Actually, I'm not much of a drinker...<br>
I thought this might be different!<br>
Here's your money.
</head></body>

View File

@@ -0,0 +1,3 @@
<head><body>Pulin:<br>
Does alcohol taste different here? I'm scared but excited at the same time! I want a drink!
</head></body>

View File

@@ -0,0 +1,3 @@
<head><body>Pulin:<br>
I think the taste of this liquor is starting to grow on me! I'll probably be seeing you again!
</head></body>

View File

@@ -0,0 +1,5 @@
<head><body>Naff:<br>
The hot springs always reminds me of Jeremy's special liquor!<br>
Let me guess... You must be Jeremy's delivery man!<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00622_SpecialtyLiquorDelivery 31544-02.html">Say "I've brought you some specially brewed liquor!"</Button>
</head></body>

View File

@@ -0,0 +1,4 @@
<head><body>Naff:<br>
What a marvelous taste!<br>
It's truly worthy of the gods!
</head></body>

View File

@@ -0,0 +1,4 @@
<head><body>Naff:<br>
I'm trying to be patient, but it's not working!<br>
Where the hell is my liquor?
</head></body>

View File

@@ -0,0 +1,4 @@
<head><body>Naff:<br>
How could I have gotten so drunk from one glass?<br>
Woohoo! I feel great!
</head></body>

View File

@@ -0,0 +1,4 @@
<head><body>Crocus:<br>
I need a drink! Do you have any liquor?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00622_SpecialtyLiquorDelivery 31545-02.html">"I have your liquor right here!"</Button>
</head></body>

View File

@@ -0,0 +1,4 @@
<head><body>Crocus:<br>
The fruity bouquet and sparkling sensation on my tongue is awesome! There's absolutely nothing like this in the whole world!<br>
Jeremy's liquor is unique to this region but very popular everywhere! I'm so glad I came here.
</head></body>

View File

@@ -0,0 +1,3 @@
<head><body>Crocus:<br>
What a wonderful diversion! I'll wager that even the gods are jealous! If only I could snack on some of Jeremy's eggs...
</head></body>

View File

@@ -0,0 +1,3 @@
<head><body>Crocus:<br>
If I could eat just one of Jeremy's eggs, I'd be the happiest person in the world!
</head></body>

View File

@@ -0,0 +1,4 @@
<head><body>Kuber:<br>
That feels so good! I ordered a boiled egg to go with my drink! Once the liquor and the egg arrive, I'll be in heaven!<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00622_SpecialtyLiquorDelivery 31546-02.html">"I'm here to deliver some liquor."</Button>
</head></body>

View File

@@ -0,0 +1,4 @@
<head><body>Kuber:<br>
Mmm... That's delicious!<br>
You look tired! Can I buy you a drink?
</head></body>

View File

@@ -0,0 +1,3 @@
<head><body>Kuber:<br>
What happened to my liquor? I can't wait any longer!
</head></body>

View File

@@ -0,0 +1,3 @@
<head><body>Kuber:<br>
Thank you so much! I look forward to getting more deliveries from you!
</head></body>

View File

@@ -0,0 +1,4 @@
<head><body>Beolin:<br>
Dammit! I need a drink! When will that liquor order get here?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00622_SpecialtyLiquorDelivery 31547-02.html">"I'm here to deliver some liquor."</Button>
</head></body>

View File

@@ -0,0 +1,6 @@
<head><body>Beolin:<br>
It's about time!<br>
Mmm... These hot springs just aren't the same without a nice glass of wine...<br>
Hee hee... I'll never get tired of drinking this stuff!<br>
Oh, thanks for the delivery! Here's the money for the wine.
</head></body>

View File

@@ -0,0 +1,3 @@
<head><body>Beolin:<br>
Boy, do I need a drink! Are you by any chance the deliveryman Jeremy sent? He should be here by now!
</head></body>

View File

@@ -0,0 +1,6 @@
<head><body>Beolin:<br>
Mmm!<br>
Gulp~!<br>
Oh, yeah! That's the stuff!<br>
What are you staring at, stranger?
</head></body>

View File

@@ -0,0 +1,277 @@
/*
* 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.Q00622_SpecialtyLiquorDelivery;
import java.util.Arrays;
import java.util.List;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState;
import org.l2jmobius.gameserver.model.quest.State;
/**
* Specialty Liquor Delivery (622)
* @author Janiko
*/
public class Q00622_SpecialtyLiquorDelivery extends Quest
{
// NPCs
private static final int JEREMY = 31521;
private static final int PULIN = 31543;
private static final int NAFF = 31544;
private static final int CROCUS = 31545;
private static final int KUBER = 31546;
private static final int BOELIN = 31547;
private static final int LIETTA = 31267;
// Items
private static final int SPECIAL_DRINK = 7197;
private static final int SPECIAL_DRINK_PRICE = 7198;
// Rewards
private static final int QUICK_STEP_POTION = 734;
private static final int SEALED_RING_OF_AURAKYRA = 6849;
private static final int SEALED_SANDDRAGONS_EARING = 6847;
private static final int SEALED_DRAGON_NECKLACE = 6851;
// Misc
private static final int MIN_LEVEL = 68;
// Talkers
private static final List<Integer> TALKERS = Arrays.asList(KUBER, CROCUS, NAFF, PULIN);
public Q00622_SpecialtyLiquorDelivery()
{
super(622);
addStartNpc(JEREMY);
addTalkId(JEREMY, BOELIN, LIETTA);
addTalkId(TALKERS);
registerQuestItems(SPECIAL_DRINK, SPECIAL_DRINK_PRICE);
}
@Override
public String onAdvEvent(String event, Npc npc, Player player)
{
final QuestState qs = getQuestState(player, false);
String htmltext = null;
if (qs == null)
{
return htmltext;
}
switch (event)
{
case "31521-03.htm":
{
if (qs.isCreated())
{
qs.startQuest();
giveItems(player, SPECIAL_DRINK, 5);
htmltext = event;
}
break;
}
case "31521-06.html":
{
if (qs.isCond(6))
{
if (getQuestItemsCount(player, SPECIAL_DRINK_PRICE) >= 5)
{
qs.setCond(7, true);
takeItems(player, -1, SPECIAL_DRINK_PRICE);
htmltext = event;
}
else
{
htmltext = "31521-07.html";
}
}
break;
}
case "31547-02.html":
{
if (qs.isCond(1))
{
if (hasQuestItems(player, SPECIAL_DRINK))
{
qs.setCond(2, true);
takeItems(player, SPECIAL_DRINK, 1);
giveItems(player, SPECIAL_DRINK_PRICE, 1);
htmltext = event;
}
else
{
htmltext = "31547-03.html";
}
}
break;
}
case "31543-02.html":
case "31544-02.html":
case "31545-02.html":
case "31546-02.html":
{
if (TALKERS.contains(npc.getId()) && qs.isCond(TALKERS.indexOf(npc.getId()) + 2))
{
if (hasQuestItems(player, SPECIAL_DRINK))
{
qs.setCond(qs.getCond() + 1, true);
takeItems(player, SPECIAL_DRINK, 1);
giveItems(player, SPECIAL_DRINK_PRICE, 1);
htmltext = event;
}
else
{
htmltext = npc.getId() + "-03.html";
}
}
break;
}
case "31267-02.html":
{
if (qs.isCond(7))
{
final int rnd = getRandom(1000);
if (rnd < 800)
{
rewardItems(player, QUICK_STEP_POTION, 1);
giveAdena(player, 18800, true);
}
else if (rnd < 880)
{
rewardItems(player, SEALED_RING_OF_AURAKYRA, 1);
}
else if (rnd < 960)
{
rewardItems(player, SEALED_SANDDRAGONS_EARING, 1);
}
else
{
rewardItems(player, SEALED_DRAGON_NECKLACE, 1);
}
qs.exitQuest(true, true);
htmltext = event;
}
break;
}
}
return htmltext;
}
@Override
public String onTalk(Npc npc, Player talker)
{
final QuestState qs = getQuestState(talker, true);
String htmltext = getNoQuestMsg(talker);
switch (npc.getId())
{
case JEREMY:
{
switch (qs.getState())
{
case State.CREATED:
{
htmltext = (talker.getLevel() >= MIN_LEVEL) ? "31521-01.htm" : "31521-02.htm";
break;
}
case State.STARTED:
{
switch (qs.getCond())
{
case 1:
{
htmltext = "31521-04.html";
break;
}
case 6:
{
if (hasQuestItems(talker, SPECIAL_DRINK_PRICE))
{
htmltext = "31521-05.html";
}
break;
}
case 7:
{
if (!hasQuestItems(talker, SPECIAL_DRINK))
{
htmltext = "31521-08.html";
}
break;
}
}
break;
}
case State.COMPLETED:
{
htmltext = getAlreadyCompletedMsg(talker);
break;
}
}
break;
}
case BOELIN:
{
if (qs.isStarted())
{
switch (qs.getCond())
{
case 1:
{
if (getQuestItemsCount(talker, SPECIAL_DRINK) >= 5)
{
htmltext = "31547-01.html";
}
break;
}
case 2:
{
htmltext = "31547-04.html";
break;
}
}
}
break;
}
case KUBER:
case CROCUS:
case NAFF:
case PULIN:
{
if (qs.isStarted())
{
final int cond = TALKERS.indexOf(npc.getId()) + 2;
if (qs.isCond(cond) && hasQuestItems(talker, SPECIAL_DRINK_PRICE)) // 2,3,4,5
{
htmltext = npc.getId() + "-01.html";
}
else if (qs.isCond(cond + 1)) // 3,4,5,6
{
htmltext = npc.getId() + "-04.html";
}
}
break;
}
case LIETTA:
{
if (qs.isStarted() && qs.isCond(7))
{
htmltext = "31267-01.html";
}
break;
}
}
return htmltext;
}
}

View File

@@ -0,0 +1,10 @@
<html><body>Chef Jeremy:<br>
Long ago, the most distinguished aristocrats of the empire came here for their excursions. Those bastards! When I refused to be their personal chef, they insulted my food! They have no appreciation for haute cuisine!<br>
As hard as they tried, no one could find fault with my food!<br>
Those cretins had the nerve to point out that they weren't served a specialty dish indigenous to this region!<br>
Then and there I resolved to make a dish so indigenous to this region that those barbarians would be silenced once and for all!<br>
But, as I'm sure you're aware, it takes more than ingredients to make a dish.<br>
The monsters in this region are too tough, don't you think?<br>
Will you help me?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00623_TheFinestFood 31521-03.htm">"I'll help you."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Chef Jeremy:<br>
Thanks anyway, but you're definitely not up to it.<br>
(Only a character of level 71 or above may undertake this quest.)
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Chef Jeremy:<br>
Wonderful!<br>
I need some <font color="LEVEL">Leaves of Hot Springs Flava</font>, <font color="LEVEL">Meat of Hot Springs Buffalo</font> and <font color="LEVEL">Horn of Hot Springs Antelope</font>. Please bring me one hundred of each.<br>
I know it's a lot, but what can I say? Do it for the advancement of culinary science!
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Chef Jeremy:<br>
No, no, no!<br>
I can't do it unless you bring me the exact amount of ingredients!<br>
What did I do to deserve this?
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Chef Jeremy:<br>
Excellent! I didn't think you'd survive! Oh, did I say that out loud?<br>
I meant to say, I'm very happy to see you back so soon! Now, let's have a look at those ingredients.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00623_TheFinestFood 31521-06.html">"Here you go."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Chef Jeremy:<br>
Fantastic! You obviously know talent when you see it!<br>
This is my current menu. It changes frequently, since my customers are constantly dropping off delicious new ingredients!
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Chef Jeremy:<br>
This amount of materials is not enough!
</body></html>

View File

@@ -0,0 +1,179 @@
/*
* 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.Q00623_TheFinestFood;
import java.util.HashMap;
import java.util.Map;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState;
/**
* The Finest Food (623)
* @author janiko
*/
public class Q00623_TheFinestFood extends Quest
{
// NPCs
private static final int JEREMY = 31521;
// Monsters
private static final int THERMAL_BUFFALO = 21315;
private static final int THERMAL_FLAVA = 21316;
private static final int THERMAL_ANTELOPE = 21318;
// Items
private static final ItemHolder LEAF_OF_FLAVA = new ItemHolder(7199, 100);
private static final ItemHolder BUFFALO_MEAT = new ItemHolder(7200, 100);
private static final ItemHolder HORN_OF_ANTELOPE = new ItemHolder(7201, 100);
// Rewards
private static final ItemHolder RING_OF_AURAKYRA = new ItemHolder(6849, 1);
private static final ItemHolder SEALED_SANDDRAGONS_EARING = new ItemHolder(6847, 1);
private static final ItemHolder DRAGON_NECKLACE = new ItemHolder(6851, 1);
// Misc
private static final int MIN_LEVEL = 71;
private static final Map<Integer, ItemHolder> MONSTER_DROPS = new HashMap<>();
static
{
MONSTER_DROPS.put(THERMAL_BUFFALO, BUFFALO_MEAT);
MONSTER_DROPS.put(THERMAL_FLAVA, LEAF_OF_FLAVA);
MONSTER_DROPS.put(THERMAL_ANTELOPE, HORN_OF_ANTELOPE);
}
public Q00623_TheFinestFood()
{
super(623);
addStartNpc(JEREMY);
addTalkId(JEREMY);
addKillId(THERMAL_BUFFALO, THERMAL_FLAVA, THERMAL_ANTELOPE);
registerQuestItems(LEAF_OF_FLAVA.getId(), BUFFALO_MEAT.getId(), HORN_OF_ANTELOPE.getId());
}
@Override
public String onAdvEvent(String event, Npc npc, Player player)
{
final QuestState qs = getQuestState(player, false);
String htmltext = null;
if (qs == null)
{
return htmltext;
}
switch (event)
{
case "31521-03.htm":
{
if (qs.isCreated())
{
qs.startQuest();
htmltext = event;
}
break;
}
case "31521-06.html":
{
if (qs.isCond(2))
{
if (hasAllItems(player, true, LEAF_OF_FLAVA, BUFFALO_MEAT, HORN_OF_ANTELOPE))
{
final int random = getRandom(1000);
if (random < 120)
{
giveAdena(player, 25000, true);
rewardItems(player, RING_OF_AURAKYRA);
}
else if (random < 240)
{
giveAdena(player, 65000, true);
rewardItems(player, SEALED_SANDDRAGONS_EARING);
}
else if (random < 340)
{
giveAdena(player, 25000, true);
rewardItems(player, DRAGON_NECKLACE);
}
else if (random < 940)
{
giveAdena(player, 73000, true);
addExpAndSp(player, 230000, 18200);
}
qs.exitQuest(true, true);
htmltext = event;
}
else
{
htmltext = "31521-07.html";
}
}
break;
}
}
return htmltext;
}
@Override
public String onTalk(Npc npc, Player talker)
{
final QuestState qs = getQuestState(talker, true);
String htmltext = getNoQuestMsg(talker);
switch (npc.getId())
{
case JEREMY:
{
if (qs.isCreated())
{
htmltext = (talker.getLevel() >= MIN_LEVEL) ? "31521-01.htm" : "31521-02.htm";
}
else if (qs.isStarted())
{
switch (qs.getCond())
{
case 1:
{
htmltext = "31521-04.html";
break;
}
case 2:
{
htmltext = "31521-05.html";
break;
}
}
}
else if (qs.isCompleted())
{
htmltext = getAlreadyCompletedMsg(talker);
}
break;
}
}
return htmltext;
}
@Override
public String onKill(Npc npc, Player killer, boolean isSummon)
{
final QuestState qs = getRandomPartyMemberState(killer, 1, 3, npc);
final ItemHolder holder = MONSTER_DROPS.get(npc.getId());
if ((qs != null) && giveItemRandomly(qs.getPlayer(), npc, holder.getId(), 1, holder.getCount(), 1, true) && hasAllItems(qs.getPlayer(), true, BUFFALO_MEAT, HORN_OF_ANTELOPE, LEAF_OF_FLAVA))
{
qs.setCond(2);
}
return super.onKill(npc, killer, isSummon);
}
}

View File

@@ -0,0 +1,4 @@
<html><body>Mercenary Kahman:<br>
I'm in charge of finding skilled soldiers to become brothers in our Golden Ram Mercenary Force! Are you up to the task?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00628_HuntGoldenRam accept">"Accept quest."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Mercenary Kahman:<br>
I admire your courage, but you lack the required skills to join us.<br>
(Quest available only for characters level 66 or above.)
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>Mercenary Kahman:<br>
We are here to destroy the Stakatos in the Swamp of Screams. They're no match for our skills, but they're tough and outnumber us, so we need all the skilled help we can get.<br>
You meet the basic requirements, but you must prove yourself if you want to be a member of the Golden Ram Mercenary Force!<br>
Kill <font color="LEVEL">Splinter Stakatos, Splinter Stakato Walkers, Splinter Stakato Soldiers and Splinter Stakato Drones</font> and bring back <font color="LEVEL">one-hundred Stakato Chitins</font> to prove your worth.<br>
Good luck to you!
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>Mercenary Kahman:<br>
There are two classes here, rookie and elite.<br>
An elite mercenary is a veteran with a long record of active service. The title earns you special priviliges.<br>
Rookies must kill Needle Stakatos as well as Splinter Stakatos to gain elite status. Collect <font color="LEVEL">one-hundred Chitins each of Splinter Stakatos and Needle Stakatos</font> to earn the title.<br>
Show them what you're worth!
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Mercenary Kahman:<br>
You're already an elite warrior! What more do you want? You are free to choose.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00628_HuntGoldenRam 31554-13.html">"I want to return to the fight!"</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00628_HuntGoldenRam 31554-12.html">"I want to end our Contract."</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Mercenary Kahman:<br>
To become an honorable member of the Golden Ram Mercenary Force, you must collect <font color="LEVEL">100 Chitins of Splinter Stakatos</font> from the Swamp of Screams. Now go!
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Mercenary Kahman:<br>
You're back! Have you taught the stakatos a lesson?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00628_HuntGoldenRam 31554-08.html">"Here are the 100 stakato Chitins."</Button>
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>Mercenary Kahman:<br>
Great work, my soldier! You are fully qualified to become a brother of the Golden Ram Mercenary Force!<br>
Well, take this <font color="LEVEL">mark of Golden Ram - Recruit</font>! From now on, you are a brother of the Golden Ram Mercenary Force. Congratulations!<br>
But, you must get stronger, stranger, if you want to become an elite soldier! Go into the Swamp of Screams, kill Splinter Stakatos and Needle Stakatos, and collect <font color="LEVEL">100 Chitins each of Splinter Stakatos and Needle Stakatos</font>!<br>
If you can't carry out such a task, you will not be able to become the Elite!
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>Mercenary Kahman:<br>
To become an elite member of the Golden Ram Mercenary Force, you must collect <font color="LEVEL">100 Chitins each of Splinter Stakatos and Needle Stakatos</font>.<br>
Prove your skills and you can rise in the ranks!<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00628_HuntGoldenRam 31554-13.html">"I'm ready to fight!"</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00628_HuntGoldenRam 31554-12.html">"I want to quit."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Mercenary Kahman:<br>
Your skills and long record of active service have earned you the title of elite mercenary in the Golden Ram Force!<br>
Take this <font color="LEVEL">Golden Ram Badge - Soldier</font>. Congratulations, brother!
</body></html>

View File

@@ -0,0 +1,7 @@
<html><body>Mercenary Kahman:<br>
See Mercenary Medic Selina and Mercenary Supplier Abercrombie if you need anything.<br>
Selina will help you with magic and Abercrombie will help you with supplies.<br>
Let me know if you've ever had enough.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00628_HuntGoldenRam 31554-13.html">"I'm ready to fight!"</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00628_HuntGoldenRam 31554-12.html">"I want to quit."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Mercenary Kahman:<br>
It's not easy to become a member. If you quit now, you may regret it later! You'll have to start from the beginning if you come back. Are you sure?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00628_HuntGoldenRam 31554-14.html">"I'm sure."</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Mercenary Kahman:<br>
That's the spirit! Kill with extreme prejudice in the name of the Golden Ram!
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Mercenary Kahman:<br>
What a pity. We can't afford to lose such skills, but I'll respect your decision.<br>
I hope to hear of your great deeds someday. May Pa'agrio's Flame be with you!
</body></html>

View File

@@ -0,0 +1,219 @@
/*
* 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.Q00628_HuntGoldenRam;
import java.util.HashMap;
import java.util.Map;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.holders.ItemChanceHolder;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState;
import org.l2jmobius.gameserver.model.quest.State;
/**
* Hunt of the Golden Ram Mercenary Force (628)
* @author netvirus, Zoey76
*/
public class Q00628_HuntGoldenRam extends Quest
{
// NPCs
private static final int KAHMAN = 31554;
// Items
private static final int GOLDEN_RAM_BADGE_RECRUIT = 7246;
private static final int GOLDEN_RAM_BADGE_SOLDIER = 7247;
private static final int SPLINTER_STAKATO_CHITIN = 7248;
private static final int NEEDLE_STAKATO_CHITIN = 7249;
// Misc
private static final int REQUIRED_ITEM_COUNT = 100;
private static final int MIN_LEVEL = 66;
// Mobs
private static final Map<Integer, ItemChanceHolder> MOBS_DROP_CHANCES = new HashMap<>();
static
{
MOBS_DROP_CHANCES.put(21508, new ItemChanceHolder(SPLINTER_STAKATO_CHITIN, 0.500, 1)); // splinter_stakato
MOBS_DROP_CHANCES.put(21509, new ItemChanceHolder(SPLINTER_STAKATO_CHITIN, 0.430, 1)); // splinter_stakato_worker
MOBS_DROP_CHANCES.put(21510, new ItemChanceHolder(SPLINTER_STAKATO_CHITIN, 0.521, 1)); // splinter_stakato_soldier
MOBS_DROP_CHANCES.put(21511, new ItemChanceHolder(SPLINTER_STAKATO_CHITIN, 0.575, 1)); // splinter_stakato_drone
MOBS_DROP_CHANCES.put(21512, new ItemChanceHolder(SPLINTER_STAKATO_CHITIN, 0.746, 1)); // splinter_stakato_drone_a
MOBS_DROP_CHANCES.put(21513, new ItemChanceHolder(NEEDLE_STAKATO_CHITIN, 0.500, 2)); // needle_stakato
MOBS_DROP_CHANCES.put(21514, new ItemChanceHolder(NEEDLE_STAKATO_CHITIN, 0.430, 2)); // needle_stakato_worker
MOBS_DROP_CHANCES.put(21515, new ItemChanceHolder(NEEDLE_STAKATO_CHITIN, 0.520, 2)); // needle_stakato_soldier
MOBS_DROP_CHANCES.put(21516, new ItemChanceHolder(NEEDLE_STAKATO_CHITIN, 0.531, 2)); // needle_stakato_drone
MOBS_DROP_CHANCES.put(21517, new ItemChanceHolder(NEEDLE_STAKATO_CHITIN, 0.744, 2)); // needle_stakato_drone_a
}
public Q00628_HuntGoldenRam()
{
super(628);
addStartNpc(KAHMAN);
addTalkId(KAHMAN);
addKillId(MOBS_DROP_CHANCES.keySet());
registerQuestItems(SPLINTER_STAKATO_CHITIN, NEEDLE_STAKATO_CHITIN);
}
@Override
public String onAdvEvent(String event, Npc npc, Player player)
{
final QuestState qs = getQuestState(player, false);
String htmltext = null;
if (qs == null)
{
return htmltext;
}
switch (event)
{
case "accept":
{
if (qs.isCreated() && (player.getLevel() >= MIN_LEVEL))
{
qs.startQuest();
if (hasQuestItems(player, GOLDEN_RAM_BADGE_SOLDIER))
{
qs.setCond(3);
htmltext = "31554-05.htm";
}
else if (hasQuestItems(player, GOLDEN_RAM_BADGE_RECRUIT))
{
qs.setCond(2);
htmltext = "31554-04.htm";
}
else
{
htmltext = "31554-03.htm";
}
}
break;
}
case "31554-08.html":
{
if (getQuestItemsCount(player, SPLINTER_STAKATO_CHITIN) >= REQUIRED_ITEM_COUNT)
{
giveItems(player, GOLDEN_RAM_BADGE_RECRUIT, 1);
takeItems(player, SPLINTER_STAKATO_CHITIN, -1);
qs.setCond(2, true);
htmltext = event;
}
break;
}
case "31554-12.html":
case "31554-13.html":
{
if (qs.isStarted())
{
htmltext = event;
}
break;
}
case "31554-14.html":
{
if (qs.isStarted())
{
qs.exitQuest(true, true);
htmltext = event;
}
break;
}
}
return htmltext;
}
@Override
public String onKill(Npc npc, Player killer, boolean isSummon)
{
final QuestState qs = getRandomPartyMemberState(killer, -1, 1, npc);
if ((qs != null) && !qs.isCond(3))
{
final ItemChanceHolder item = MOBS_DROP_CHANCES.get(npc.getId());
if (item.getCount() <= qs.getCond())
{
giveItemRandomly(qs.getPlayer(), npc, item.getId(), 1, REQUIRED_ITEM_COUNT, item.getChance(), true);
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public String onTalk(Npc npc, Player player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
switch (qs.getState())
{
case State.CREATED:
{
htmltext = ((player.getLevel() >= MIN_LEVEL) ? "31554-01.htm" : "31554-02.htm");
break;
}
case State.STARTED:
{
final long itemCountSplinter = getQuestItemsCount(player, SPLINTER_STAKATO_CHITIN);
final long itemCountNeedle = getQuestItemsCount(player, NEEDLE_STAKATO_CHITIN);
switch (qs.getCond())
{
case 1:
{
htmltext = ((itemCountSplinter >= REQUIRED_ITEM_COUNT) ? "31554-07.html" : "31554-06.html");
break;
}
case 2:
{
if (hasQuestItems(player, GOLDEN_RAM_BADGE_RECRUIT))
{
if ((itemCountSplinter >= REQUIRED_ITEM_COUNT) && (itemCountNeedle >= REQUIRED_ITEM_COUNT))
{
takeItems(player, GOLDEN_RAM_BADGE_RECRUIT, -1);
takeItems(player, SPLINTER_STAKATO_CHITIN, -1);
takeItems(player, NEEDLE_STAKATO_CHITIN, -1);
giveItems(player, GOLDEN_RAM_BADGE_SOLDIER, 1);
qs.setCond(3, true);
htmltext = "31554-10.html";
}
else
{
htmltext = "31554-09.html";
}
}
else
{
qs.setCond(1);
htmltext = ((itemCountSplinter >= REQUIRED_ITEM_COUNT) ? "31554-07.html" : "31554-06.html");
}
break;
}
case 3:
{
if (hasQuestItems(player, GOLDEN_RAM_BADGE_SOLDIER))
{
htmltext = "31554-11.html";
}
else
{
qs.setCond(1);
htmltext = ((itemCountSplinter >= REQUIRED_ITEM_COUNT) ? "31554-07.html" : "31554-06.html");
}
break;
}
}
break;
}
}
return htmltext;
}
}

View File

@@ -0,0 +1,4 @@
<html><body>Mercenary Kahman:<br>
Hate to say it, but you don't have the skills to work with me. Run along before you get hurt!<br>
(Only characters of level 66 and above may undertake this quest.)
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Mercenary Kahman:<br>
Welcome back! We'd never have found that Stakato's Nest without your help! Finally, we can quash the unrest! Will you join our assault on the Stakato's?<br><br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00640_TheZeroHour 31554-02.htm">"Let's do it"</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Mercenary Kahman:<br>
Perfect! I trust your skills, so I know you'll have our backs. Go to the <font color="LEVEL">Stakato's Nest</font> and kill them! It won't be an easy battle, so bring plenty of supplies with you. Don't forget to collect <font color="LEVEL">Fang of Stakato</font>. Now get going!
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Mercenary Kahman:<br>
What are you doing? There are no cowards in the Golden Ram Mercenaries! Suck it up, soldier, and show us what you're made of! Slaughter the <font color="LEVEL">Spiked Stakato, Spiked Stakato Worker, Spiked Stakato Guard, Male Spiked Stakato, Female Spiked Stakato, Spiked Stakato Sorcerer, Cannibalistic Stakato Leader, Spiked Stakato Soldier, Spiked Stakato Drone, Spiked Stakato Captain, Spiked Stakato Nurse and the Spiked Stakato Shaman.</font>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Mercenary Kahman:<br>
You showed real bravery in the face of those filthy Stakato's. Victory is ours! Give me your Stakato's Fang and then choose your reward!<br><br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00640_TheZeroHour 31554-05.htm">"Here they are!"</Button>
</body></html>

View File

@@ -0,0 +1,12 @@
<html><body>Mercenary Kahman:<br>
Which reward would you like?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00640_TheZeroHour 1">1 Enria (12 Fang of Stakato)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00640_TheZeroHour 2">1 Asofe (6 Fang of Stakato)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00640_TheZeroHour 3">1 Thons (6 Fang of Stakato)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00640_TheZeroHour 4">10 Varnish of Purity (81 Fang of Stakato)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00640_TheZeroHour 5">5 Synthetic Cokes (33 Fang of Stakato)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00640_TheZeroHour 6">10 Compound Braid (30 Fang of Stakato)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00640_TheZeroHour 7">10 Durable Metal Plate (150 Fang of Stakato)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00640_TheZeroHour 8">10 Mithril Alloy (131 Fang of Stakato)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00640_TheZeroHour 9">5 Oriharukon (123 Fang of Stakato)</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Mercenary Kahman:<br>
Where are the Fangs you said you had? You won't get money for nothing in this business, soldier! Don't even think about insulting the honor of the Golden Ram Mercenaries!<br><br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00640_TheZeroHour 31554-07.htm">"I won't! I'll go and fight again"</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00640_TheZeroHour 31554-08.htm">"I'm done with this"</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Mercenary Kahman:<br>
Had enough? No? Then get back out here and fight!
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Mercenary Kahman:<br>
Suit yourself. Goodbye.
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>Mercenary Kahman:<br>
I gave you your reward. What else do you want?<br><br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00640_TheZeroHour 31554-07.htm">"I'll bring more Fangs."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00640_TheZeroHour 31554-05.htm">"I'll looks somewhere else."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00640_TheZeroHour 31554-08.htm">"I'm done with this."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Mercenary Kahman:<br>
We haven't finished our investigation, so there's nothing for you right now. Come back later!.<br>
(Only characters who have completed "In Search of the Nest" can undertake this quest.)
</body></html>

View File

@@ -0,0 +1,291 @@
/*
* 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.Q00640_TheZeroHour;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.QuestSound;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState;
import org.l2jmobius.gameserver.model.quest.State;
import quests.Q00109_InSearchOfTheNest.Q00109_InSearchOfTheNest;
/**
* The Zero Hour (640)<br>
* @author Sacrifice
*/
public class Q00640_TheZeroHour extends Quest
{
// NPCs
private static final int KAHMAN = 31554;
private static final int[] MONSTERS_TO_HUNT =
{
22617, // Spiked Stakato
22618, // Spiked Stakato Worker
22619, // Spiked Stakato Guard
22620, // Female Spiked Stakato
22621, // Male Spiked Stakato
22622, // Male Spiked Stakato
22623, // Spiked Stakato Sorcerer
22625, // Cannibalistic Stakato Leader
22626, // Cannibalistic Stakato Leader
22627, // Spiked Stakato Soldier
22628, // Spiked Stakato Drone
22629, // Spiked Stakato Captain
22630, // Spike Stakato Nurse
22631, // Spike Stakato Nurse
22633 // Spiked Stakato Shaman
};
// Item
private static final int FANG_OF_STAKATO = 8085;
// Misc
private static final int MIN_LEVEL = 66;
public Q00640_TheZeroHour()
{
super(640);
addStartNpc(KAHMAN);
addTalkId(KAHMAN);
addKillId(MONSTERS_TO_HUNT);
registerQuestItems(FANG_OF_STAKATO);
}
@Override
public String onAdvEvent(String event, Npc npc, Player player)
{
final QuestState qs = getQuestState(player, false);
String htmltext = null;
if (qs == null)
{
return htmltext;
}
switch (event)
{
case "31554-02.htm":
{
qs.startQuest();
break;
}
case "31554-05.htm":
{
htmltext = "31554-05.htm";
break;
}
case "31554-08.htm":
{
qs.exitQuest(true, true);
break;
}
case "1":
{
if (getQuestItemsCount(player, FANG_OF_STAKATO) >= 12)
{
takeItems(player, FANG_OF_STAKATO, 12);
rewardItems(player, 4042, 1); // Enria
htmltext = "31554-09.htm";
}
else
{
htmltext = "31554-07.htm";
}
break;
}
case "2":
{
if (getQuestItemsCount(player, FANG_OF_STAKATO) >= 6)
{
takeItems(player, FANG_OF_STAKATO, 6);
rewardItems(player, 4043, 1); // Asofe
htmltext = "31554-09.htm";
}
else
{
htmltext = "31554-07.htm";
}
break;
}
case "3":
{
if (getQuestItemsCount(player, FANG_OF_STAKATO) >= 6)
{
takeItems(player, FANG_OF_STAKATO, 6);
rewardItems(player, 4044, 1); // Thons
htmltext = "31554-09.htm";
}
else
{
htmltext = "31554-07.htm";
}
break;
}
case "4":
{
if (getQuestItemsCount(player, FANG_OF_STAKATO) >= 81)
{
takeItems(player, FANG_OF_STAKATO, 81);
rewardItems(player, 1887, 10); // Varnish of Purity
htmltext = "31554-09.htm";
}
else
{
htmltext = "31554-07.htm";
}
break;
}
case "5":
{
if (getQuestItemsCount(player, FANG_OF_STAKATO) >= 33)
{
takeItems(player, FANG_OF_STAKATO, 33);
rewardItems(player, 1888, 5); // Synthetic Cokes
htmltext = "31554-09.htm";
}
else
{
htmltext = "31554-07.htm";
}
break;
}
case "6":
{
if (getQuestItemsCount(player, FANG_OF_STAKATO) >= 30)
{
takeItems(player, FANG_OF_STAKATO, 30);
rewardItems(player, 1889, 10); // Compound Braid
htmltext = "31554-09.htm";
}
else
{
htmltext = "31554-07.htm";
}
break;
}
case "7":
{
if (getQuestItemsCount(player, FANG_OF_STAKATO) >= 150)
{
takeItems(player, FANG_OF_STAKATO, 150);
rewardItems(player, 5550, 10); // Durable Metal Plate
htmltext = "31554-09.htm";
}
else
{
htmltext = "31554-07.htm";
}
break;
}
case "8":
{
if (getQuestItemsCount(player, FANG_OF_STAKATO) >= 131)
{
takeItems(player, FANG_OF_STAKATO, 131);
rewardItems(player, 1890, 10); // Mithril Alloy
htmltext = "31554-09.htm";
}
else
{
htmltext = "31554-07.htm";
}
break;
}
case "9":
{
if (getQuestItemsCount(player, FANG_OF_STAKATO) >= 123)
{
takeItems(player, FANG_OF_STAKATO, 123);
rewardItems(player, 1893, 5); // Oriharukon
htmltext = "31554-09.htm";
}
else
{
htmltext = "31554-07.htm";
}
break;
}
}
return htmltext;
}
@Override
public String onTalk(Npc npc, Player talker)
{
final QuestState qs = getQuestState(talker, true);
String htmlText = getNoQuestMsg(talker);
switch (qs.getState())
{
case State.CREATED:
{
if (talker.getLevel() >= MIN_LEVEL)
{
final QuestState qs2 = qs.getPlayer().getQuestState(Q00109_InSearchOfTheNest.class.getSimpleName());
if ((qs2 != null) && (qs2.getState() == State.COMPLETED))
{
htmlText = "31554-01.htm";
}
else
{
htmlText = "31554-10.htm";
}
}
else
{
htmlText = "31554-00.htm";
}
break;
}
case State.STARTED:
{
if (qs.isCond(1))
{
if (getQuestItemsCount(talker, FANG_OF_STAKATO) >= 1)
{
htmlText = "31554-04.htm";
}
else
{
htmlText = "31554-03.htm";
}
}
break;
}
}
return htmlText;
}
@Override
public String onKill(Npc npc, Player killer, boolean isSummon)
{
final Player partyMember = getRandomPartyMemberState(killer, State.STARTED);
if (partyMember == null)
{
return super.onKill(npc, killer, isSummon);
}
if (partyMember.getQuestState(Q00640_TheZeroHour.class.getSimpleName()) == null)
{
return super.onKill(npc, killer, isSummon);
}
giveItems(partyMember, FANG_OF_STAKATO, (long) Config.RATE_QUEST_DROP);
playSound(partyMember, QuestSound.ITEMSOUND_QUEST_ITEMGET);
return super.onKill(npc, killer, isSummon);
}
}

View File

@@ -59,6 +59,7 @@ import quests.Q00097_SagaOfTheShillienTemplar.Q00097_SagaOfTheShillienTemplar;
import quests.Q00098_SagaOfTheShillienSaint.Q00098_SagaOfTheShillienSaint;
import quests.Q00099_SagaOfTheFortuneSeeker.Q00099_SagaOfTheFortuneSeeker;
import quests.Q00100_SagaOfTheMaestro.Q00100_SagaOfTheMaestro;
import quests.Q00109_InSearchOfTheNest.Q00109_InSearchOfTheNest;
import quests.Q00110_ToThePrimevalIsle.Q00110_ToThePrimevalIsle;
import quests.Q00111_ElrokianHuntersProof.Q00111_ElrokianHuntersProof;
import quests.Q00124_MeetingTheElroki.Q00124_MeetingTheElroki;
@@ -167,7 +168,12 @@ import quests.Q00605_AllianceWithKetraOrcs.Q00605_AllianceWithKetraOrcs;
import quests.Q00606_BattleAgainstVarkaSilenos.Q00606_BattleAgainstVarkaSilenos;
import quests.Q00611_AllianceWithVarkaSilenos.Q00611_AllianceWithVarkaSilenos;
import quests.Q00612_BattleAgainstKetraOrcs.Q00612_BattleAgainstKetraOrcs;
import quests.Q00617_GatherTheFlames.Q00617_GatherTheFlames;
import quests.Q00620_FourGoblets.Q00620_FourGoblets;
import quests.Q00622_SpecialtyLiquorDelivery.Q00622_SpecialtyLiquorDelivery;
import quests.Q00623_TheFinestFood.Q00623_TheFinestFood;
import quests.Q00628_HuntGoldenRam.Q00628_HuntGoldenRam;
import quests.Q00640_TheZeroHour.Q00640_TheZeroHour;
import quests.Q00641_AttackSailren.Q00641_AttackSailren;
import quests.Q00642_APowerfulPrimevalCreature.Q00642_APowerfulPrimevalCreature;
import quests.Q00643_RiseAndFallOfTheElrokiTribe.Q00643_RiseAndFallOfTheElrokiTribe;
@@ -274,6 +280,7 @@ public class QuestMasterHandler
Q00098_SagaOfTheShillienSaint.class,
Q00099_SagaOfTheFortuneSeeker.class,
Q00100_SagaOfTheMaestro.class,
Q00109_InSearchOfTheNest.class,
Q00110_ToThePrimevalIsle.class, // FIXME: Grand Crusade
Q00111_ElrokianHuntersProof.class, // FIXME: Grand Crusade
Q00124_MeetingTheElroki.class, // FIXME: Grand Crusade
@@ -382,8 +389,13 @@ public class QuestMasterHandler
Q00606_BattleAgainstVarkaSilenos.class,
Q00611_AllianceWithVarkaSilenos.class,
Q00612_BattleAgainstKetraOrcs.class,
Q00617_GatherTheFlames.class,
Q00620_FourGoblets.class, // FIXME: Grand Crusade
Q00622_SpecialtyLiquorDelivery.class,
Q00623_TheFinestFood.class,
Q00628_HuntGoldenRam.class,
Q00630_PirateTreasureHunt.class, // TODO: Not done.
Q00640_TheZeroHour.class,
Q00641_AttackSailren.class, // FIXME: Grand Crusade
Q00642_APowerfulPrimevalCreature.class, // FIXME: Grand Crusade
Q00643_RiseAndFallOfTheElrokiTribe.class, // FIXME: Grand Crusade