Quests Sakums Trace (10359) and Rebellion of Monsters (10368).

Contributed by spider.
This commit is contained in:
MobiusDev
2015-08-08 08:02:37 +00:00
parent c3510abc6f
commit a948d5ee3f
28 changed files with 542 additions and 0 deletions

View File

@ -0,0 +1,4 @@
<html><body>Grand Master:<br>
Young one! I was looking for you! I heard you did so many good things for the village, and wanted to thank you on behalf of the lord. You have... wait... is something wrong?<br>
<button ALIGN=LEFT icon=NORMAL action="bypass -h Quest Q10359_SakumsTrace 30297-02.html">"Sakum's Scale was found in the Wasteland."</button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Grand Master:<br>
So then Sakum is in Wasteland!<br>
Well! Did Guard Fred say anything else?<br>
<button ALIGN=LEFT icon=NORMAL action="bypass -h Quest Q10359_SakumsTrace 30297-03.html">"He wanted someone to fight Sakum."</button>

View File

@ -0,0 +1,4 @@
<html><body>Grand Master:<br>
As there isn't much we can do at the moment witch all the skilled soldiers gone. We must hold a race meeting to consider all possible measures.<br>
I think we will soon have a job for you to show what you can do, so please come back later.
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Adventure Guildsman:<br>
When will Sakum be caught?! We can't just keep chasing it around...<br>
When they said that ferocious monster were appearing in the Wasteland, we wondered whether Sakum had appeared.<br>
But we couldn't send all our powerful warriors to the outlands. You know Sakum, right?<br>
<button ALIGN=LEFT icon=NORMAL action="bypass -h Quest Q10359_SakumsTrace 31795-02.htm">"Yes, I do."</button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Adventure Guildsman:<br>
Of course. There is no way that someone of your caliber wouldn't know about Sakum!<br>
The fact that ferocious monsters have appeared at the <font color="LEVEL">Wasteland </font> might indicate Sakum's presence.<br>
Now is the time for us adventurers to step up to the plate! Care to join?<br>
<button ALIGN=LEFT icon=NORMAL action="bypass -h Quest Q10359_SakumsTrace 31795-03.htm">"I will join you!"</button>
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Adventure Guildsman:<br>
I knew it! You're an amazing adventurer. Find <font color="LEVEL">Guard Fred</font> at the <font color="LEVEL">Entrance to the Wastelands</font>, and help him and determine where Sakum appears.
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Guard Fred:<br>
I've heard that an Adventure Guildsman from Gludio sent a great adventurer here. Was that person you?<br>
I know that you were sent by the Adventure Guildsman, but I don't know if I can trust...<br>
Don't feel top bad about that - I'm looking out for your back as well as mine.<br>
<button align=left icon=NORMAL action="bypass -h Quest Q10359_SakumsTrace 33179-02.html">"What's going on with the monsters?"</button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Guard Fred:<br>
I wouldn't say monster in the Wasteland were ever very docile, but the look different now. They have became more powerful than before, too.<br>
And recently I was investigating this area and found suspicious looking fragment from the carcass of a monster. Maybe it's because the monster has been dead for a long, but the fragment was too small for me to identify.<br>
Could you help to discover what it might be?<br>
<button align=left icon=NORMAL action="bypass -h Quest Q10359_SakumsTrace 33179-03.html">"Sure."</button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Guard Fred:<br>
Thank you. I believe that you find these Suspicious Fragments from monsters such as <font color="LEVEL">Monster Eye Watchers, Lesser Basilisks, Basilisks, Skeleton Marauders, Granite Golems, Saharas, and Tyrants</font><br>
Okay then, good luck and please stay safe...
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Guard Fred:<br>
Maybe you were rooted to the spot in fear, hmm?<br>
You need to collect the <font color="LEVEL">Suspicious Fragments</font> from the monsters in the Wasteland.
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Guard Fred:<br>
You've done it! Show me the Suspicious Fragments.<br>
Oh no, this... this... Sakum's scale! So, the monsters have become ferocious because of Sakum?! There is no time waste - sprint back to Gludio, inform <font color="LEVEL">High Priest Raymond </font> in the <font color="LEVEL">Einhasad Temple</font> of our findings, and ask him to send the strongest he's got here. I will remain behind and uncover the beast's location!
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Guard Fred:<br>
You've done it! Show me the Suspicious Fragments.<br>
Oh no, this... this... Sakum's scale! So, the monsters have become ferocious because of Sakum?! There is no time waste - sprint back to Gludio, inform <font color="LEVEL">Grand Master Rains</font> in the <font color="LEVEL">Warrior Guild</font> of our findings, and ask him to send the strongest he's got here. I will remain behind and uncover the beast's location!
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Guard Fred:<br>
You've done it! Show me the Suspicious Fragments.<br>
Oh no, this... this... Sakum's scale! So, the monsters have become ferocious because of Sakum?! There is no time waste - sprint back to Gludio, inform <font color="LEVEL">Grand Magister Esrandell</font> in the <font color="LEVEL">Einhasad Temple</font> of our findings, and ask him to send the strongest he's got here. I will remain behind and uncover the beast's location!
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Guard Fred:<br>
You've done it! Show me the Suspicious Fragments.<br>
Oh no, this... this... Sakum's scale! So, the monsters have become ferocious because of Sakum?! There is no time waste - sprint back to Gludio, inform <font color="LEVEL">Grand Master Ellenia</font> in the <font color="LEVEL">Warrior Guild</font> of our findings, and ask him to send the strongest he's got here. I will remain behind and uncover the beast's location!
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Guard Fred:<br>
You've done it! Show me the Suspicious Fragments.<br>
Oh no, this... this... Sakum's scale! So, the monsters have become ferocious because of Sakum?! There is no time waste - sprint back to Gludio, inform <font color="LEVEL">Grand Master Tobias</font> in the <font color="LEVEL">Dark Elf Guild</font> of our findings, and ask him to send the strongest he's got here. I will remain behind and uncover the beast's location!
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Guard Fred:<br>
You've done it! Show me the Suspicious Fragments.<br>
Oh no, this... this... Sakum's scale! So, the monsters have become ferocious because of Sakum?! There is no time waste - sprint back to Gludio, inform <font color="LEVEL">High Prefect Drikus</font> in the <font color="LEVEL">Orc Guild</font> of our findings, and ask him to send the strongest he's got here. I will remain behind and uncover the beast's location!
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Guard Fred:<br>
You've done it! Show me the Suspicious Fragments.<br>
Oh no, this... this... Sakum's scale! So, the monsters have become ferocious because of Sakum?! There is no time waste - sprint back to Gludio, inform <font color="LEVEL">Head Blacksmith Mendio</font> in the <font color="LEVEL">Blacksmith Workshop</font> of our findings, and ask him to send the strongest he's got here. I will remain behind and uncover the beast's location!
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Guard Fred:<br>
You've done it! Show me the Suspicious Fragments.<br>
Oh no, this... this... Sakum's scale! So, the monsters have become ferocious because of Sakum?! There is no time waste - sprint back to Gludio, inform <font color="LEVEL">Grand Master Gershwin</font> in the <font color="LEVEL">Kamael Guild</font> of our findings, and ask him to send the strongest he's got here. I will remain behind and uncover the beast's location!
</body></html>

View File

@ -0,0 +1,265 @@
/*
* Copyright (C) 2004-2015 L2J Server
*
* This file is part of L2J Server.
*
* L2J Server 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 Server 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.Q10359_SakumsTrace;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
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.util.Util;
/**
* Sakum's Trace (10359)
* @author spider
*/
public class Q10359_SakumsTrace extends Quest
{
// NPCs
private static final int ADV_GUILDSMAN = 31795;
private static final int FRED = 33179;
private static final int TOBIAS = 30297;
private static final int RAYMOND = 30289;
private static final int RAINS = 30288;
private static final int DRIKUS = 30505;
private static final int MENDIO = 30504;
private static final int GERSHWIN = 32196;
private static final int ELLENIA = 30155;
private static final int ESRANDELL = 30158;
// Monsters
private static final int MONSTER_EYE_WATCHER = 20067;
private static final int LESSER_BASILISK = 20070;
private static final int BASILISK = 20072;
private static final int SKELETON_MARAUDER = 20190;
private static final int GRANITE_GOLEM = 23098;
private static final int SAHARA = 23026;
private static final int TYRANT = 20192;
// Items
private static final int SUSPICIOUS_FRAGMENT = 17586;
private static final int SUSPICIOUS_FRAGMENT_REQUIRED = 20;
// Rewards
private static final int ADENA_REWARD = 108000;
private static final int EXP_REWARD = 900000;
private static final int SP_REWARD = 216;
// Others
private static final int MIN_LEVEL = 34;
private static final int MAX_LEVEL = 40;
public Q10359_SakumsTrace()
{
super(10359, Q10359_SakumsTrace.class.getSimpleName(), "Sakum's Trace");
addCondLevel(MIN_LEVEL, MAX_LEVEL, "no_level.htm");
addTalkId(ADV_GUILDSMAN, FRED, TOBIAS, RAYMOND, RAINS, DRIKUS, MENDIO, GERSHWIN, ELLENIA, ESRANDELL);
addKillId(MONSTER_EYE_WATCHER, LESSER_BASILISK, BASILISK, SKELETON_MARAUDER, GRANITE_GOLEM, SAHARA, TYRANT);
registerQuestItems(SUSPICIOUS_FRAGMENT);
}
@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 "30297-02.html":
{
htmltext = event;
break;
}
case "30297-03.html": // end quest
{
if (qs.getCond() > 3)
{
giveAdena(player, ADENA_REWARD, true);
addExpAndSp(player, EXP_REWARD, SP_REWARD);
qs.exitQuest(false, true);
htmltext = event;
break;
}
}
case "31795-02.htm":
{
htmltext = event;
break;
}
case "31795-03.htm": // start quest
{
qs.startQuest();
htmltext = event;
break;
}
case "33179-02.html":
{
htmltext = event;
break;
}
case "33179-03.html": // go kill mobs
{
if (qs.isCond(1))
{
qs.setCond(2);
htmltext = event;
}
break;
}
}
return htmltext;
}
@Override
public String onTalk(L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = null;
switch (qs.getState())
{
case State.CREATED:
{
htmltext = npc.getId() == ADV_GUILDSMAN ? "31795-01.htm" : getNoQuestMsg(player);
break;
}
case State.STARTED:
{
switch (npc.getId())
{
case ADV_GUILDSMAN:
{
htmltext = "31795-03.htm";
break;
}
case FRED:
{
if (qs.isCond(1))
{
htmltext = "33179-01.html";
}
else if (qs.isCond(2))
{
htmltext = "33179-04.html";
}
else if (qs.isCond(3)) // go to race master
{
switch (player.getRace())
{
case HUMAN:
{
if (player.isMageClass())
{
qs.setCond(4); // go to High Priest Raymond Einhasad Temple
htmltext = "33179-05a.html";
}
else
{
qs.setCond(5); // go to Grand Master Rains
htmltext = "33179-05b.html";
}
break;
}
case ELF:
{
if (player.isMageClass())
{
qs.setCond(11); // Grand Magister Esrandell in Einhasad Temple
htmltext = "33179-06a.html";
}
else
{
qs.setCond(10); // Grand Master Ellenia in Warrior Guild
htmltext = "33179-06b.html";
}
break;
}
case DARK_ELF:
{
qs.setCond(6); // go to Tobias DE guild
htmltext = "33179-07.html";
break;
}
case ORC:
{
qs.setCond(7); // High Prefect Drikus in Orc Guild
htmltext = "33179-08.html";
break;
}
case DWARF:
{
qs.setCond(8); // Head Blacksmith Mendio in the Blacksmith Workshop
htmltext = "33179-09.html";
break;
}
case KAMAEL:
{
qs.setCond(9); // Grand Master Gershwin in Kamael Guild
htmltext = "33179-10.html";
break;
}
}
}
break;
}
case RAYMOND: // TODO: get all race-specific texts
case RAINS:
case DRIKUS:
case MENDIO:
case GERSHWIN:
case ELLENIA:
case ESRANDELL:
case TOBIAS:
{
if (qs.getCond() > 3)
{
htmltext = "30297-01.html";
}
break;
}
}
break;
}
case State.COMPLETED:
{
htmltext = getAlreadyCompletedMsg(player);
break;
}
}
return htmltext;
}
@Override
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
{
final QuestState qs = getRandomPartyMemberState(killer, -1, 3, npc);
if ((qs != null) && qs.isStarted() && qs.isCond(2) && (Util.checkIfInRange(1500, npc, qs.getPlayer(), false)))
{
if (getQuestItemsCount(qs.getPlayer(), SUSPICIOUS_FRAGMENT) < SUSPICIOUS_FRAGMENT_REQUIRED)
{
giveItemRandomly(qs.getPlayer(), npc, SUSPICIOUS_FRAGMENT, 1, SUSPICIOUS_FRAGMENT_REQUIRED, 0.25, true);
}
else
{
qs.setCond(3);
}
}
return super.onKill(npc, killer, isSummon);
}
}

View File

@ -0,0 +1,3 @@
<html><body>You don't meet level requirements<br>
(Quest available from level 34 to level 40)
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Guard Fred:<br>
The biggest problem is the appearance of the Ancient Monster Sakum. The native monsters have become agitated by his arrival, and many have become much stronger, while others have come from the depths of the world itself!<br>
Sigh... There are too many monsters, and not enough arriors. We need help.<br>
<button align=left icon=NORMAl action="bypass -h Quest Q10368_RebellionOfMonsters 33179-02.htm" >"Tell me what's going on."</button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Guard Fred:<br>
The monsters that have recently been running rampant are the Weary Jaguars and Ant Soldiers. They are not that ferocious, but their numbers are growing faster than we can control them.<br>
Can you help?<br>
<button align=left icon=NORMAl action="bypass -h Quest Q10368_RebellionOfMonsters 33179-03.htm" >"Of course."</button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Guard Fred:<br>
Excellent! please defeat the <font color="LEVEL">Weary Jaguars, Weary Jaguar Scouts, Ant Soldiers, and Ant Warrior Captains</font> here in the Wasteland.<br>
I'm sorry that I've assigned you several things. But timing is delicate thing...
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Guard Fred:<br>
Please defeat the <font color="LEVEL">Weary Jaguars, Weary Jaguar Scouts, Ant Soldiers, and Ant Warrior Captains</font> here in the Wasteland. Go!
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Guard Fred:<br>
Ah, excellent - I thought they'd piped down a bit since you left!<br>
Thanks to you, the wasteland search will be much easier now. Thank you!
</body></html>

View File

@ -0,0 +1,167 @@
/*
* Copyright (C) 2004-2015 L2J Server
*
* This file is part of L2J Server.
*
* L2J Server 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 Server 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.Q10368_RebellionOfMonsters;
import java.util.HashMap;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
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.serverpackets.ExQuestNpcLogList;
import com.l2jserver.gameserver.util.Util;
/**
* Rebellion of Monsters (10368)
* @author spider
*/
public class Q10368_RebellionOfMonsters extends Quest
{
// NPCs
private static final int FRED = 33179;
// Monsters
private static final int WEARY_JAGUAR = 23024;
private static final int WEARY_JAGUAR_SCOUT = 23025;
private static final int ANT_SOLDIER = 23099;
private static final int ANT_WARRIOR_CAPTAIN = 23100;
private static final HashMap<Integer, Integer> MOBS_REQUIRED = new HashMap<>();
{
MOBS_REQUIRED.put(WEARY_JAGUAR, 10);
MOBS_REQUIRED.put(WEARY_JAGUAR_SCOUT, 15);
MOBS_REQUIRED.put(ANT_SOLDIER, 15);
MOBS_REQUIRED.put(ANT_WARRIOR_CAPTAIN, 20);
}
// Rewards
private static final int ADENA_REWARD = 99000;
private static final int EXP_REWARD = 750000;
private static final int SP_REWARD = 180;
// Others
private static final int MIN_LEVEL = 34;
private static final int MAX_LEVEL = 40;
public Q10368_RebellionOfMonsters()
{
super(10368, Q10368_RebellionOfMonsters.class.getSimpleName(), "Rebellion of Monsters");
addCondLevel(MIN_LEVEL, MAX_LEVEL, "no_level.htm");
addStartNpc(FRED);
addTalkId(FRED);
addKillId(MOBS_REQUIRED.keySet());
}
@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 "33179-02.htm":
{
htmltext = event;
break;
}
case "33179-03.htm": // start quest
{
qs.startQuest();
qs.set(Integer.toString(WEARY_JAGUAR), 0);
qs.set(Integer.toString(WEARY_JAGUAR_SCOUT), 0);
qs.set(Integer.toString(ANT_SOLDIER), 0);
qs.set(Integer.toString(ANT_WARRIOR_CAPTAIN), 0);
qs.setCond(2);
qs.setCond(1); // arrow hack
}
}
return htmltext;
}
@Override
public String onTalk(L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = null;
switch (qs.getState())
{
case State.CREATED:
{
htmltext = "33179-01.htm";
break;
}
case State.STARTED:
{
if (qs.isCond(1))
{
htmltext = "33179-04.html";
}
else if (qs.isCond(2)) // end quest
{
giveAdena(player, ADENA_REWARD, true);
addExpAndSp(player, EXP_REWARD, SP_REWARD);
qs.unset(Integer.toString(WEARY_JAGUAR));
qs.unset(Integer.toString(WEARY_JAGUAR_SCOUT));
qs.unset(Integer.toString(ANT_SOLDIER));
qs.unset(Integer.toString(ANT_WARRIOR_CAPTAIN));
qs.exitQuest(false, true);
htmltext = "33179-05.html";
}
break;
}
case State.COMPLETED:
{
htmltext = getAlreadyCompletedMsg(player);
break;
}
}
return htmltext;
}
@Override
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
{
final QuestState qs = getRandomPartyMemberState(killer, -1, 3, npc);
if ((qs != null) && qs.isStarted() && qs.isCond(1) && (Util.checkIfInRange(1500, npc, qs.getPlayer(), false)))
{
if (qs.getInt(Integer.toString(npc.getId())) < MOBS_REQUIRED.get(npc.getId()))
{
int kills = qs.getInt(Integer.toString(npc.getId()));
kills++;
qs.set(Integer.toString(npc.getId()), kills);
}
ExQuestNpcLogList log = new ExQuestNpcLogList(getId());
log.addNpc(WEARY_JAGUAR, qs.getInt(Integer.toString(WEARY_JAGUAR)));
log.addNpc(WEARY_JAGUAR_SCOUT, qs.getInt(Integer.toString(WEARY_JAGUAR_SCOUT)));
log.addNpc(ANT_SOLDIER, qs.getInt(Integer.toString(ANT_SOLDIER)));
log.addNpc(ANT_WARRIOR_CAPTAIN, qs.getInt(Integer.toString(ANT_WARRIOR_CAPTAIN)));
killer.sendPacket(log);
if ((qs.getInt(Integer.toString(WEARY_JAGUAR)) >= MOBS_REQUIRED.get(WEARY_JAGUAR)) && (qs.getInt(Integer.toString(WEARY_JAGUAR_SCOUT)) >= MOBS_REQUIRED.get(WEARY_JAGUAR_SCOUT)) && (qs.getInt(Integer.toString(ANT_SOLDIER)) >= MOBS_REQUIRED.get(ANT_SOLDIER)) && (qs.getInt(Integer.toString(ANT_WARRIOR_CAPTAIN)) >= MOBS_REQUIRED.get(ANT_WARRIOR_CAPTAIN)))
{
qs.setCond(2);
}
}
return super.onKill(npc, killer, isSummon);
}
}

View File

@ -0,0 +1,3 @@
<html><body>You don't meet level requirements<br>
(Quest available from level 34 to level 40)
</body></html>

View File

@ -203,7 +203,9 @@ import quests.Q10336_DividedSakumKanilov.Q10336_DividedSakumKanilov;
import quests.Q10337_SakumsInfluence.Q10337_SakumsInfluence;
import quests.Q10338_SeizeYourDestiny.Q10338_SeizeYourDestiny;
import quests.Q10358_DividedSakumPoslof.Q10358_DividedSakumPoslof;
import quests.Q10359_SakumsTrace.Q10359_SakumsTrace;
import quests.Q10365_SeekerEscort.Q10365_SeekerEscort;
import quests.Q10368_RebellionOfMonsters.Q10368_RebellionOfMonsters;
import quests.Q10390_KekropusLetter.Q10390_KekropusLetter;
import quests.Q10393_KekropusLetter_AClueCompleted.Q10393_KekropusLetter_AClueCompleted;
import quests.Q10397_KekropusLetter_ASuspiciousBadge.Q10397_KekropusLetter_ASuspiciousBadge;
@ -425,7 +427,9 @@ public class QuestMasterHandler
Q10337_SakumsInfluence.class,
Q10338_SeizeYourDestiny.class,
Q10358_DividedSakumPoslof.class,
Q10359_SakumsTrace.class,
Q10365_SeekerEscort.class,
Q10368_RebellionOfMonsters.class,
Q10390_KekropusLetter.class,
Q10393_KekropusLetter_AClueCompleted.class,
Q10397_KekropusLetter_ASuspiciousBadge.class,