Addition of quests 561 and 580.

Contributed by NightBR.
This commit is contained in:
MobiusDevelopment
2019-04-08 12:10:03 +00:00
parent 1358f21f0a
commit b1150ad9ea
99 changed files with 1662 additions and 228 deletions

View File

@@ -1,5 +1,4 @@
504 Competition for the Bandit Stronghold 504 Competition for the Bandit Stronghold
561 Basic Mission: Harnak Underground Ruins
565 Basic Mission: Fairy Settlement - West 565 Basic Mission: Fairy Settlement - West
566 Basic Mission: Fairy Settlement - East 566 Basic Mission: Fairy Settlement - East
567 Basic Mission: Isle of Souls 567 Basic Mission: Isle of Souls
@@ -12,7 +11,6 @@
574 Special Mission: Nornil's Garden 574 Special Mission: Nornil's Garden
575 Special Mission: Fortuna 575 Special Mission: Fortuna
576 Special Mission: Defeat Spezion 576 Special Mission: Defeat Spezion
580 Beyond the Memories
585 Can't Go Against the Time 585 Can't Go Against the Time
586 Mutated Creatures 586 Mutated Creatures
587 More Aggressive Operation 587 More Aggressive Operation

View File

@@ -0,0 +1,4 @@
<html><body>Gatekeeper Milia:<br>
Are you going to the Ruins of Ye Sagira? I know how to get there.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 30006-02.html">"Go on."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Gatekeeper Milia:<br>
It is difficult to teleport directly to the Hamak Underground Ruins. You should take a detour. First, you must teleport to the entrance zone of the Ruins of Ye Sagira. I can help you do this. From there, go to the <font color="LEVEL">Ruins of Ye Sagira</font> and then to Exploration Area 1, where you can find Giant's Minion Hadel.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 30006-03.html">"Alright."</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Gatekeeper Milia:<br>
In fact, there is a shortcut. The Sayunes next to me can take you directly to Hadel.<br>
It doesn't matter which way you choose as long as it takes you to where you want to go.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 30006-04.html">"Alright."</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Gatekeeper Milia:<br>
I've explained everything I could about teleportation. Make the best use of Gatekeepers to get to where you want. See you!<br>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Gatekeeper Elisa:<br>
You want to know how to go to the Hamak Underground Ruins? I see! You must be from the Adventure Guild! I'll fill you in briefly on what us Gatekeepers do and also tell you how to teleport through us.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 30848-02.html">"Go on."</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Gatekeeper Elisa:<br>
We Gatekeepers use magic to Teleport long distances in a short time via the Gates of Time and Space. We've been trained in the Ivory Tower for a long time to learn these abilities.<br>
We charge you according to the distance of the teleport, as there are consumables needed for it. However, for adventurers in lower levels, we sometimes waiver the cost.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 30848-03.html">"Go on."</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Gatekeeper Elisa:<br>
However, at least, you have to know in which territory the location is, when you want to go somewhere. Is your final destination the <font color="LEVEL">Hamak Underground Ruins</font>? If you want to get there, you have to go to the <font color="LEVEL">Talking Island Village</font> first.<br>
If you are teleporting to a certain quest destination, the location will be at the top of the Teleport List so, it's more convenient. Easy, right? <br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 30848-04.html">"I understand."</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Gatekeeper Elisa:<br>
When you're ready, talk to me to experience teleporting. When you get to the Talking Island Village, talk to Milia the Gatekeeper. I wish you success.<br>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Giant's Minion Hadel:<br>
You are the one that the Adventure Guild sent, huh? Do you want to cooperate? No reason to say no.<br>
<font color="LEVEL">(To receive "Hamak Underground Ruins", you have to complete Hadel's quest "Beyond the Memories" first.)</font><br>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Adventure Guildsman Penny:<br>
Your're the one that Hephah has sent, right? If not, you should go meet Herphah and receive a mission from her before you continue. If you think it doesn't matter, I can continue anyway. Do you want me to continue?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 34413-02.htm">"Sure, no problem!"</button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Adventure Guildsman Penny:<br>
Herphah thought the best way for you to grow was to carry out missions with us.<br>
I agree with her. If you accomplish the missions I give you, I'm sure you'll quickly become more powerful.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 34413-03.htm">"Go on."</button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Adventure Guildsman Penny:<br>
I know that you're confused. But, you'll understand soon. If you accept the mission, I'll explain right away.<br>
Are you interested in further righteous work?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 34413-04.htm">"Alright."</Button>
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>Adventure Guildsman Penny:<br>
So you've already learned about the mission. In that case, you can start it right away, without any more explanation.<br>
But if you want to listen to my explanation again, I would be more than happy to tell you. <br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 34413-05.html">"Receive the mission."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 34413-09.html">"Hear the explanation again."</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Adventure Guildsman Penny:<br>
You have to accomplish the task at <font color="LEVEL">Hamak Underground Ruins</font> on <font color="LEVEL">Talking Island</font>. To do so, you need to move to the Ruins of Ye Sagira and talk to Giant's Minion Hadel.<br>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Adventure Guildsman Penny:<br>
Welcome back! So, did you do a good job?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 34413-07.html">"Yes, I did."</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Adventure Guildsman Penny:<br>
Thanks, you've done a great job! I'm sure eveyone in the Adventure Guild will know your name now. If there is another opportunity, we'd love for you to help us again. Good luck and farewell!<br>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Adventure Guildsman Penny:<br>
To do the mission, you have to go to <font color="LEVEL">Black Wizard Lapathia</font> at the <font color="LEVEL">Altar of Evil</font>. Do the mission that Lapathia gives. Then, come back to me. <br>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Adventure Guildsman Penny:<br>
In this world, there are many factions. The factions usually are based on their own regions. Sometimes, they are specialized in specific activities, such as fishing, and wield their influence. If you build relations with a faction and establish an Amity Level, you can conduct activities within the faction and take more missions.<br>
Among these factions, I am a part of the <font color="LEVEL">Adventure Guild</font>. When you implement the mission that I gave you, you'll assist the activities of the Adventure Guild. If you do well in the mission from our faction, I'll give you an even better mission.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 34413-10.html">"Gon on."</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Adventure Guildsman Penny:<br>
The mission I'll give you is to help the task at <font color="LEVEL">Hamak Underground Ruins</font> on <font color="LEVEL">Talking Island</font>.<br>
But first, you need to learn how get there.<br>
Go to <font color="LEVEL">Gatekeeper Elisa</font>, the Gatekeeper of this town, and she will tell you how to go to the <font color="LEVEL">Hamak Underground Ruins</font>. If you successfully arrive at the ruins, meet Giant's Minion Hadel and listen to him.<br>
</body></html>

View File

@@ -0,0 +1,222 @@
/*
* 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.Q00561_BasicMissionHarnakUndergroundRuins;
import com.l2jmobius.gameserver.enums.Faction;
import com.l2jmobius.gameserver.enums.QuestType;
import com.l2jmobius.gameserver.model.actor.Npc;
import com.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import com.l2jmobius.gameserver.model.quest.Quest;
import com.l2jmobius.gameserver.model.quest.QuestState;
import com.l2jmobius.gameserver.model.quest.State;
import com.l2jmobius.gameserver.network.serverpackets.ExTutorialShowId;
import com.l2jmobius.gameserver.network.serverpackets.TutorialShowHtml;
/**
* Q00561_BasicMissionHarnakUndergroundRuins
* @URL http://l2on.net/en/?c=quests&id=561&game=1
* @author NightBR
*/
public class Q00561_BasicMissionHarnakUndergroundRuins extends Quest
{
// NPCs
private static final int PENNY = 34413;
private static final int ELISA = 30848;
private static final int MILIA = 30006;
private static final int HADEL = 33344;
// Rewards
private static final long EXP = 115930275;
private static final int SP = 115920;
private static final int FP = 100; // Faction points
private static final int SCROLL_OF_ESCAPE_HARNAK_UNDERGROUND_RUINS = 39496;
private static final int SCROLL_OF_ESCAPE_TOWN_OF_ADEN = 48413;
// Misc
private static final int MIN_LEVEL = 85;
private static final int MAX_LEVEL = 87;
public Q00561_BasicMissionHarnakUndergroundRuins()
{
super(561);
addStartNpc(PENNY);
addTalkId(PENNY, ELISA, MILIA, HADEL);
addCondLevel(MIN_LEVEL, MAX_LEVEL, "nolevel.html");
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return null;
}
String htmltext = null;
switch (event)
{
case "34413-02.htm":
case "34413-03.htm":
case "34413-06.html":
case "34413-10.html":
case "30848-02.html":
case "30848-03.html":
case "30006-02.html":
case "30006-03.html":
{
htmltext = event;
break;
}
case "34413-04.htm":
{
qs.startQuest();
htmltext = event;
break;
}
case "34413-05.html":
{
qs.setCond(4, true);
htmltext = event;
break;
}
case "34413-09.html":
{
// Show Service/Help/Faction System page
// TODO: Find the correct Id for player.sendPacket(new ExTutorialShowId(22));
player.sendPacket(new TutorialShowHtml(npc.getObjectId(), "..\\L2Text\\help_faction.htm", TutorialShowHtml.LARGE_WINDOW));
qs.setCond(2, true);
htmltext = event;
break;
}
case "34413-07.html":
{
// Rewards
giveItems(player, SCROLL_OF_ESCAPE_HARNAK_UNDERGROUND_RUINS, 1);
addExpAndSp(player, EXP, SP);
addFactionPoints(player, Faction.ADVENTURE_GUILD, FP); // add FP points to ADVENTURE_GUILD Faction
qs.exitQuest(QuestType.DAILY, true);
htmltext = event;
break;
}
case "30848-04.html": // ELISA
{
// Show Service/Help/Gatekeeper page
player.sendPacket(new ExTutorialShowId(55));
qs.setCond(3, true);
htmltext = event;
break;
}
case "30006-04.html": // MILIA
{
qs.setCond(4, true);
htmltext = event;
break;
}
}
return htmltext;
}
@Override
public String onTalk(Npc npc, PlayerInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
switch (qs.getState())
{
case State.CREATED:
{
if (npc.getId() == PENNY)
{
htmltext = "34413-01.htm";
}
break;
}
case State.STARTED:
{
switch (npc.getId())
{
case PENNY:
{
if (qs.getCond() == 1)
{
htmltext = "34413-04.htm";
}
else if (qs.getCond() == 2)
{
htmltext = "33509-10.htm";
}
else if (qs.getCond() == 4)
{
htmltext = "34413-05.html";
}
else
{
htmltext = "34413-06.html";
}
break;
}
case ELISA:
{
htmltext = "30848-01.html";
break;
}
case MILIA:
{
htmltext = "30006-01.html";
break;
}
case HADEL:
{
if (qs.getCond() == 4)
{
qs.setCond(5, true);
htmltext = "33344-01.html";
}
else if (qs.getCond() == 5)
{
final QuestState st = player.getQuestState("Q00580_BeyondTheMemories");
if ((st != null) && st.isCompleted())
{
qs.setCond(7, true);
giveItems(player, SCROLL_OF_ESCAPE_TOWN_OF_ADEN, 1);
htmltext = null;
}
}
break;
}
}
break;
}
case State.COMPLETED:
{
if (qs.isNowAvailable())
{
qs.setState(State.CREATED);
htmltext = "34413-01.htm";
}
else
{
htmltext = getAlreadyCompletedMsg(player, QuestType.DAILY);
}
break;
}
}
return htmltext;
}
}

View File

@@ -0,0 +1,4 @@
<html><body>Penny:<br>
I don't understand why someone like you is interested in this mission?<br>
(Only characters above Lv.85.)
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Giant's Minion Hadel:<br>
So, you are the guy interested in the Hamak Underground Ruins? I should examine your will and knowledge about the challenge first.<br>
If you fail my test, I'll send you back.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00580_BeyondTheMemories 33344-02.htm">"I'm as ready as can be."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Giant's Minion Hadel:<br>
You are the one that the Adventure Guild sent, huh? Do you want to cooperate? No reason to say no.<br>
<font color="LEVEL">(To receive "Beyond the Memories" quest, you have to take Penny's quest "Hamak Underground Ruins" first.)</font><br>
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>Giant's Minion Hadel:<br>
First of all, you need to know what the Hamak Underground Ruins are.<br>
The owner of the ruins, Hamak was a giant of obsession. He killed his wife by locking her up in the labyrinth out of delusional jealousy. The Hamak Underground Ruins are a place where the obsession is enhanced and collected.<br>
You need to understand what you're getting yourself into.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00580_BeyondTheMemories 33344-03.htm">"I got it."</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Giant's Minion Hadel:<br>
When you enter the ruins, you will fight against the servants of Hamak. They are the ghosts of ancient times and are mere beings beyond memories. However, they are powerful enough to be a threat, as they are influenced by the space that Hamak dominates.<br>
You will find yourself in danger. Are you sure you can fight against the existences?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00580_BeyondTheMemories 33344-04.htm">"It shouldn't be a problem."</Button>
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>Giant's Minion Hadel:<br>
Great Now I understand how strong your will and knowledge are.<br>
Here's what you need to do. Eliminate <font color="LEVEL">200</font> Ancient Ghosts in the Hamak Underground Ruins.<br>
They are the <font color="LEVEL">Krakia Bathus, Krakia Carcass, Krakia Lotus, Rakzan, Weiss Khan, Weiss Ele, Bamonti, Seknus, and Noctum.</font>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00580_BeyondTheMemories gotoharnak">"Go to the Hamak Underground Ruins."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Giant's Minion Hadel:<br>
Are you done? It's not such an easy place but it looks like you've managed just fine. Am I right to think that? <br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00580_BeyondTheMemories 33344-06.html">"Yes."</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Giant's Minion Hadel:<br>
I'm shocked at just how capable you are. If you can, please help us again. Someone as dependable as you is always welcome.<br>
</body></html>

View File

@@ -0,0 +1,211 @@
/*
* 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.Q00580_BeyondTheMemories;
import java.util.HashSet;
import java.util.Set;
import com.l2jmobius.gameserver.enums.QuestSound;
import com.l2jmobius.gameserver.enums.QuestType;
import com.l2jmobius.gameserver.model.Location;
import com.l2jmobius.gameserver.model.actor.Npc;
import com.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import com.l2jmobius.gameserver.model.holders.NpcLogListHolder;
import com.l2jmobius.gameserver.model.quest.Quest;
import com.l2jmobius.gameserver.model.quest.QuestState;
import com.l2jmobius.gameserver.model.quest.State;
import com.l2jmobius.gameserver.network.NpcStringId;
import quests.Q00561_BasicMissionHarnakUndergroundRuins.Q00561_BasicMissionHarnakUndergroundRuins;
/**
* Regular Barrier Maintenance (529)
* @URL https://l2wiki.com/Regular_Barrier_Maintenance
* @author Mobius
*/
public class Q00580_BeyondTheMemories extends Quest
{
// NPCs
private static final int START_NPC = 33344; // Giant's Minion Hadel
private static final int[] MONSTERS =
{
22931, // Krakia Bathus
22932, // Krakia Carcass
22933, // Krakia Lotus
22934, // Rakzan
22935, // Weiss Khan
22936, // Weiss Ele
22937, // Bamonti
22938, // Seknus
23349, // Noctum
22939, // Demonic Bathus
22940, // Demonic Carcass
22941, // Demonic Lotus
22942, // Demonic Rakzan
22943, // Demonic Weiss Khan
22944, // Demonic Weiss Ele
22945, // Demonic Bamonti
22946, // Demonic Seknus
23350, // Demonic Noctum
};
// Misc
private static final int KILLING_NPCSTRING_ID = NpcStringId.DEFEAT_MONSTERS_IN_THE_UNDERGROUND_RUINS.getId();
private static final QuestType QUEST_TYPE = QuestType.DAILY; // REPEATABLE, ONE_TIME, DAILY
private static final boolean PARTY_QUEST = true;
private static final int KILLING_COND = 1;
private static final int FINISH_COND = 2;
private static final int MIN_LEVEL = 85;
// Location
private static final Location HARNAK_UNDERGROUND_RUINS = new Location(-114700, 147909, -7715);
// Rewards
private static final int EXP = 231860550;
private static final int SP = 231840;
private static final int ADENA_AMOUNT = 505080;
public Q00580_BeyondTheMemories()
{
super(580);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addKillId(MONSTERS);
addCondMinLevel(MIN_LEVEL, getNoQuestMsg(null));
addCondStartedQuest(Q00561_BasicMissionHarnakUndergroundRuins.class.getSimpleName(), "33344-01.html");
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return null;
}
switch (event)
{
case "33344-02.htm":
case "33344-03.htm":
{
return event;
}
case "33344-04.htm":
{
if (qs.isCreated())
{
qs.startQuest();
qs.setCond(KILLING_COND);
}
break;
}
case "gotoharnak":
{
// Teleport to Harnak Underground Ruins Inside
player.teleToLocation(HARNAK_UNDERGROUND_RUINS);
break;
}
case "33344-06.html":
{
if (qs.isCond(FINISH_COND))
{
// Reward.
addExpAndSp(player, EXP, SP);
giveAdena(player, ADENA_AMOUNT, false);
qs.exitQuest(QUEST_TYPE, true);
}
break;
}
}
return event;
}
@Override
public String onTalk(Npc npc, PlayerInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
if (npc.getId() == START_NPC)
{
switch (qs.getState())
{
case State.CREATED:
{
htmltext = "33344-01.htm";
break;
}
case State.STARTED:
{
if (qs.isCond(KILLING_COND))
{
htmltext = "33344-04.htm";
}
else if (qs.isCond(FINISH_COND))
{
htmltext = "33344-05.html";
}
break;
}
case State.COMPLETED:
{
if (qs.isNowAvailable())
{
qs.setState(State.CREATED);
htmltext = "33344-01.htm";
}
else
{
htmltext = getAlreadyCompletedMsg(player, QUEST_TYPE);
}
break;
}
}
}
return htmltext;
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final QuestState qs = PARTY_QUEST ? getRandomPartyMemberState(killer, -1, 3, npc) : getQuestState(killer, false);
if ((qs != null) && qs.isCond(KILLING_COND))
{
final int killedGhosts = qs.getInt("AncientGhosts") + 1;
qs.set("AncientGhosts", killedGhosts);
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
if (killedGhosts >= 200)
{
qs.setCond(FINISH_COND, true);
}
sendNpcLogList(killer);
}
return super.onKill(npc, killer, isSummon);
}
@Override
public Set<NpcLogListHolder> getNpcLogList(PlayerInstance player)
{
final QuestState qs = getQuestState(player, false);
if ((qs != null) && qs.isCond(KILLING_COND))
{
final Set<NpcLogListHolder> holder = new HashSet<>();
holder.add(new NpcLogListHolder(KILLING_NPCSTRING_ID, true, qs.getInt("AncientGhosts")));
return holder;
}
return super.getNpcLogList(player);
}
}

View File

@@ -137,9 +137,11 @@ import quests.Q00511_AwlUnderFoot.Q00511_AwlUnderFoot;
import quests.Q00512_BladeUnderFoot.Q00512_BladeUnderFoot; import quests.Q00512_BladeUnderFoot.Q00512_BladeUnderFoot;
import quests.Q00551_OlympiadStarter.Q00551_OlympiadStarter; import quests.Q00551_OlympiadStarter.Q00551_OlympiadStarter;
import quests.Q00553_OlympiadUndefeated.Q00553_OlympiadUndefeated; import quests.Q00553_OlympiadUndefeated.Q00553_OlympiadUndefeated;
import quests.Q00561_BasicMissionHarnakUndergroundRuins.Q00561_BasicMissionHarnakUndergroundRuins;
import quests.Q00562_BasicMissionAltarOfEvil.Q00562_BasicMissionAltarOfEvil; import quests.Q00562_BasicMissionAltarOfEvil.Q00562_BasicMissionAltarOfEvil;
import quests.Q00563_BasicMissionBloodySwampland.Q00563_BasicMissionBloodySwampland; import quests.Q00563_BasicMissionBloodySwampland.Q00563_BasicMissionBloodySwampland;
import quests.Q00564_BasicMissionKartiasLabyrinthSolo.Q00564_BasicMissionKartiasLabyrinthSolo; import quests.Q00564_BasicMissionKartiasLabyrinthSolo.Q00564_BasicMissionKartiasLabyrinthSolo;
import quests.Q00580_BeyondTheMemories.Q00580_BeyondTheMemories;
import quests.Q00581_ThePurificationRitual.Q00581_ThePurificationRitual; import quests.Q00581_ThePurificationRitual.Q00581_ThePurificationRitual;
import quests.Q00582_WashBloodWithBlood.Q00582_WashBloodWithBlood; import quests.Q00582_WashBloodWithBlood.Q00582_WashBloodWithBlood;
import quests.Q00583_MeaningOfSurvival.Q00583_MeaningOfSurvival; import quests.Q00583_MeaningOfSurvival.Q00583_MeaningOfSurvival;
@@ -582,7 +584,7 @@ public class QuestMasterHandler
Q00512_BladeUnderFoot.class, Q00512_BladeUnderFoot.class,
Q00551_OlympiadStarter.class, Q00551_OlympiadStarter.class,
Q00553_OlympiadUndefeated.class, Q00553_OlympiadUndefeated.class,
Q00561_BasicMissionHarnakUndergroundRuins.class, // TODO: Not done. Q00561_BasicMissionHarnakUndergroundRuins.class,
Q00562_BasicMissionAltarOfEvil.class, Q00562_BasicMissionAltarOfEvil.class,
Q00563_BasicMissionBloodySwampland.class, Q00563_BasicMissionBloodySwampland.class,
Q00564_BasicMissionKartiasLabyrinthSolo.class, Q00564_BasicMissionKartiasLabyrinthSolo.class,
@@ -598,7 +600,7 @@ public class QuestMasterHandler
Q00574_SpecialMissionNornilsGarden.class, // TODO: Not done. Q00574_SpecialMissionNornilsGarden.class, // TODO: Not done.
Q00575_SpecialMissionFortuna.class, // TODO: Not done. Q00575_SpecialMissionFortuna.class, // TODO: Not done.
Q00576_SpecialMissionDefeatSpezion.class, // TODO: Not done. Q00576_SpecialMissionDefeatSpezion.class, // TODO: Not done.
Q00580_BeyondTheMemories.class, // TODO: Not done. Q00580_BeyondTheMemories.class,
Q00581_ThePurificationRitual.class, // TODO: Not done. Q00581_ThePurificationRitual.class, // TODO: Not done.
Q00582_WashBloodWithBlood.class, // TODO: Not done. Q00582_WashBloodWithBlood.class, // TODO: Not done.
Q00583_MeaningOfSurvival.class, // TODO: Not done. Q00583_MeaningOfSurvival.class, // TODO: Not done.

View File

@@ -1,36 +0,0 @@
/*
* 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.not_done;
import com.l2jmobius.Config;
import com.l2jmobius.gameserver.model.quest.Quest;
/**
* @author Mobius
*/
public class Q00561_BasicMissionHarnakUndergroundRuins extends Quest
{
private static final int START_NPC = 34413;
public Q00561_BasicMissionHarnakUndergroundRuins()
{
super(561);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
}
}

View File

@@ -1,36 +0,0 @@
/*
* 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.not_done;
import com.l2jmobius.Config;
import com.l2jmobius.gameserver.model.quest.Quest;
/**
* @author Mobius
*/
public class Q00580_BeyondTheMemories extends Quest
{
private static final int START_NPC = 33344;
public Q00580_BeyondTheMemories()
{
super(580);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
}
}

View File

@@ -4,7 +4,6 @@
555 Red Libra Request - Atelia Refinery 555 Red Libra Request - Atelia Refinery
556 Red Libra Request - Fallen Emperor's Throne 556 Red Libra Request - Fallen Emperor's Throne
557 Red Libra Request - Fall of Etina 557 Red Libra Request - Fall of Etina
561 Basic Mission: Harnak Underground Ruins
565 Basic Mission: Fairy Settlement - West 565 Basic Mission: Fairy Settlement - West
566 Basic Mission: Fairy Settlement - East 566 Basic Mission: Fairy Settlement - East
567 Basic Mission: Isle of Souls 567 Basic Mission: Isle of Souls
@@ -18,7 +17,6 @@
575 Special Mission: Fortuna 575 Special Mission: Fortuna
576 Special Mission: Defeat Spezion 576 Special Mission: Defeat Spezion
577 Basic Mission: Silent Valley 577 Basic Mission: Silent Valley
580 Beyond the Memories
585 Can't Go Against the Time 585 Can't Go Against the Time
586 Mutated Creatures 586 Mutated Creatures
587 More Aggressive Operation 587 More Aggressive Operation

View File

@@ -0,0 +1,4 @@
<html><body>Gatekeeper Milia:<br>
Are you going to the Ruins of Ye Sagira? I know how to get there.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 30006-02.html">"Go on."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Gatekeeper Milia:<br>
It is difficult to teleport directly to the Hamak Underground Ruins. You should take a detour. First, you must teleport to the entrance zone of the Ruins of Ye Sagira. I can help you do this. From there, go to the <font color="LEVEL">Ruins of Ye Sagira</font> and then to Exploration Area 1, where you can find Giant's Minion Hadel.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 30006-03.html">"Alright."</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Gatekeeper Milia:<br>
In fact, there is a shortcut. The Sayunes next to me can take you directly to Hadel.<br>
It doesn't matter which way you choose as long as it takes you to where you want to go.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 30006-04.html">"Alright."</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Gatekeeper Milia:<br>
I've explained everything I could about teleportation. Make the best use of Gatekeepers to get to where you want. See you!<br>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Gatekeeper Elisa:<br>
You want to know how to go to the Hamak Underground Ruins? I see! You must be from the Adventure Guild! I'll fill you in briefly on what us Gatekeepers do and also tell you how to teleport through us.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 30848-02.html">"Go on."</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Gatekeeper Elisa:<br>
We Gatekeepers use magic to Teleport long distances in a short time via the Gates of Time and Space. We've been trained in the Ivory Tower for a long time to learn these abilities.<br>
We charge you according to the distance of the teleport, as there are consumables needed for it. However, for adventurers in lower levels, we sometimes waiver the cost.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 30848-03.html">"Go on."</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Gatekeeper Elisa:<br>
However, at least, you have to know in which territory the location is, when you want to go somewhere. Is your final destination the <font color="LEVEL">Hamak Underground Ruins</font>? If you want to get there, you have to go to the <font color="LEVEL">Talking Island Village</font> first.<br>
If you are teleporting to a certain quest destination, the location will be at the top of the Teleport List so, it's more convenient. Easy, right? <br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 30848-04.html">"I understand."</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Gatekeeper Elisa:<br>
When you're ready, talk to me to experience teleporting. When you get to the Talking Island Village, talk to Milia the Gatekeeper. I wish you success.<br>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Giant's Minion Hadel:<br>
You are the one that the Adventure Guild sent, huh? Do you want to cooperate? No reason to say no.<br>
<font color="LEVEL">(To receive "Hamak Underground Ruins", you have to complete Hadel's quest "Beyond the Memories" first.)</font><br>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Adventure Guildsman Penny:<br>
Your're the one that Hephah has sent, right? If not, you should go meet Herphah and receive a mission from her before you continue. If you think it doesn't matter, I can continue anyway. Do you want me to continue?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 34413-02.htm">"Sure, no problem!"</button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Adventure Guildsman Penny:<br>
Herphah thought the best way for you to grow was to carry out missions with us.<br>
I agree with her. If you accomplish the missions I give you, I'm sure you'll quickly become more powerful.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 34413-03.htm">"Go on."</button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Adventure Guildsman Penny:<br>
I know that you're confused. But, you'll understand soon. If you accept the mission, I'll explain right away.<br>
Are you interested in further righteous work?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 34413-04.htm">"Alright."</Button>
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>Adventure Guildsman Penny:<br>
So you've already learned about the mission. In that case, you can start it right away, without any more explanation.<br>
But if you want to listen to my explanation again, I would be more than happy to tell you. <br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 34413-05.html">"Receive the mission."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 34413-09.html">"Hear the explanation again."</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Adventure Guildsman Penny:<br>
You have to accomplish the task at <font color="LEVEL">Hamak Underground Ruins</font> on <font color="LEVEL">Talking Island</font>. To do so, you need to move to the Ruins of Ye Sagira and talk to Giant's Minion Hadel.<br>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Adventure Guildsman Penny:<br>
Welcome back! So, did you do a good job?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 34413-07.html">"Yes, I did."</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Adventure Guildsman Penny:<br>
Thanks, you've done a great job! I'm sure eveyone in the Adventure Guild will know your name now. If there is another opportunity, we'd love for you to help us again. Good luck and farewell!<br>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Adventure Guildsman Penny:<br>
To do the mission, you have to go to <font color="LEVEL">Black Wizard Lapathia</font> at the <font color="LEVEL">Altar of Evil</font>. Do the mission that Lapathia gives. Then, come back to me. <br>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Adventure Guildsman Penny:<br>
In this world, there are many factions. The factions usually are based on their own regions. Sometimes, they are specialized in specific activities, such as fishing, and wield their influence. If you build relations with a faction and establish an Amity Level, you can conduct activities within the faction and take more missions.<br>
Among these factions, I am a part of the <font color="LEVEL">Adventure Guild</font>. When you implement the mission that I gave you, you'll assist the activities of the Adventure Guild. If you do well in the mission from our faction, I'll give you an even better mission.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 34413-10.html">"Gon on."</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Adventure Guildsman Penny:<br>
The mission I'll give you is to help the task at <font color="LEVEL">Hamak Underground Ruins</font> on <font color="LEVEL">Talking Island</font>.<br>
But first, you need to learn how get there.<br>
Go to <font color="LEVEL">Gatekeeper Elisa</font>, the Gatekeeper of this town, and she will tell you how to go to the <font color="LEVEL">Hamak Underground Ruins</font>. If you successfully arrive at the ruins, meet Giant's Minion Hadel and listen to him.<br>
</body></html>

View File

@@ -0,0 +1,222 @@
/*
* 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.Q00561_BasicMissionHarnakUndergroundRuins;
import com.l2jmobius.gameserver.enums.Faction;
import com.l2jmobius.gameserver.enums.QuestType;
import com.l2jmobius.gameserver.model.actor.Npc;
import com.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import com.l2jmobius.gameserver.model.quest.Quest;
import com.l2jmobius.gameserver.model.quest.QuestState;
import com.l2jmobius.gameserver.model.quest.State;
import com.l2jmobius.gameserver.network.serverpackets.ExTutorialShowId;
import com.l2jmobius.gameserver.network.serverpackets.TutorialShowHtml;
/**
* Q00561_BasicMissionHarnakUndergroundRuins
* @URL http://l2on.net/en/?c=quests&id=561&game=1
* @author NightBR
*/
public class Q00561_BasicMissionHarnakUndergroundRuins extends Quest
{
// NPCs
private static final int PENNY = 34413;
private static final int ELISA = 30848;
private static final int MILIA = 30006;
private static final int HADEL = 33344;
// Rewards
private static final long EXP = 115930275;
private static final int SP = 115920;
private static final int FP = 100; // Faction points
private static final int SCROLL_OF_ESCAPE_HARNAK_UNDERGROUND_RUINS = 39496;
private static final int SCROLL_OF_ESCAPE_TOWN_OF_ADEN = 48413;
// Misc
private static final int MIN_LEVEL = 85;
private static final int MAX_LEVEL = 87;
public Q00561_BasicMissionHarnakUndergroundRuins()
{
super(561);
addStartNpc(PENNY);
addTalkId(PENNY, ELISA, MILIA, HADEL);
addCondLevel(MIN_LEVEL, MAX_LEVEL, "nolevel.html");
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return null;
}
String htmltext = null;
switch (event)
{
case "34413-02.htm":
case "34413-03.htm":
case "34413-06.html":
case "34413-10.html":
case "30848-02.html":
case "30848-03.html":
case "30006-02.html":
case "30006-03.html":
{
htmltext = event;
break;
}
case "34413-04.htm":
{
qs.startQuest();
htmltext = event;
break;
}
case "34413-05.html":
{
qs.setCond(4, true);
htmltext = event;
break;
}
case "34413-09.html":
{
// Show Service/Help/Faction System page
// TODO: Find the correct Id for player.sendPacket(new ExTutorialShowId(22));
player.sendPacket(new TutorialShowHtml(npc.getObjectId(), "..\\L2Text\\help_faction.htm", TutorialShowHtml.LARGE_WINDOW));
qs.setCond(2, true);
htmltext = event;
break;
}
case "34413-07.html":
{
// Rewards
giveItems(player, SCROLL_OF_ESCAPE_HARNAK_UNDERGROUND_RUINS, 1);
addExpAndSp(player, EXP, SP);
addFactionPoints(player, Faction.ADVENTURE_GUILD, FP); // add FP points to ADVENTURE_GUILD Faction
qs.exitQuest(QuestType.DAILY, true);
htmltext = event;
break;
}
case "30848-04.html": // ELISA
{
// Show Service/Help/Gatekeeper page
player.sendPacket(new ExTutorialShowId(55));
qs.setCond(3, true);
htmltext = event;
break;
}
case "30006-04.html": // MILIA
{
qs.setCond(4, true);
htmltext = event;
break;
}
}
return htmltext;
}
@Override
public String onTalk(Npc npc, PlayerInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
switch (qs.getState())
{
case State.CREATED:
{
if (npc.getId() == PENNY)
{
htmltext = "34413-01.htm";
}
break;
}
case State.STARTED:
{
switch (npc.getId())
{
case PENNY:
{
if (qs.getCond() == 1)
{
htmltext = "34413-04.htm";
}
else if (qs.getCond() == 2)
{
htmltext = "33509-10.htm";
}
else if (qs.getCond() == 4)
{
htmltext = "34413-05.html";
}
else
{
htmltext = "34413-06.html";
}
break;
}
case ELISA:
{
htmltext = "30848-01.html";
break;
}
case MILIA:
{
htmltext = "30006-01.html";
break;
}
case HADEL:
{
if (qs.getCond() == 4)
{
qs.setCond(5, true);
htmltext = "33344-01.html";
}
else if (qs.getCond() == 5)
{
final QuestState st = player.getQuestState("Q00580_BeyondTheMemories");
if ((st != null) && st.isCompleted())
{
qs.setCond(7, true);
giveItems(player, SCROLL_OF_ESCAPE_TOWN_OF_ADEN, 1);
htmltext = null;
}
}
break;
}
}
break;
}
case State.COMPLETED:
{
if (qs.isNowAvailable())
{
qs.setState(State.CREATED);
htmltext = "34413-01.htm";
}
else
{
htmltext = getAlreadyCompletedMsg(player, QuestType.DAILY);
}
break;
}
}
return htmltext;
}
}

View File

@@ -0,0 +1,4 @@
<html><body>Penny:<br>
I don't understand why someone like you is interested in this mission?<br>
(Only characters above Lv.85.)
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Giant's Minion Hadel:<br>
So, you are the guy interested in the Hamak Underground Ruins? I should examine your will and knowledge about the challenge first.<br>
If you fail my test, I'll send you back.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00580_BeyondTheMemories 33344-02.htm">"I'm as ready as can be."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Giant's Minion Hadel:<br>
You are the one that the Adventure Guild sent, huh? Do you want to cooperate? No reason to say no.<br>
<font color="LEVEL">(To receive "Beyond the Memories" quest, you have to take Penny's quest "Hamak Underground Ruins" first.)</font><br>
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>Giant's Minion Hadel:<br>
First of all, you need to know what the Hamak Underground Ruins are.<br>
The owner of the ruins, Hamak was a giant of obsession. He killed his wife by locking her up in the labyrinth out of delusional jealousy. The Hamak Underground Ruins are a place where the obsession is enhanced and collected.<br>
You need to understand what you're getting yourself into.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00580_BeyondTheMemories 33344-03.htm">"I got it."</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Giant's Minion Hadel:<br>
When you enter the ruins, you will fight against the servants of Hamak. They are the ghosts of ancient times and are mere beings beyond memories. However, they are powerful enough to be a threat, as they are influenced by the space that Hamak dominates.<br>
You will find yourself in danger. Are you sure you can fight against the existences?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00580_BeyondTheMemories 33344-04.htm">"It shouldn't be a problem."</Button>
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>Giant's Minion Hadel:<br>
Great Now I understand how strong your will and knowledge are.<br>
Here's what you need to do. Eliminate <font color="LEVEL">200</font> Ancient Ghosts in the Hamak Underground Ruins.<br>
They are the <font color="LEVEL">Krakia Bathus, Krakia Carcass, Krakia Lotus, Rakzan, Weiss Khan, Weiss Ele, Bamonti, Seknus, and Noctum.</font>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00580_BeyondTheMemories gotoharnak">"Go to the Hamak Underground Ruins."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Giant's Minion Hadel:<br>
Are you done? It's not such an easy place but it looks like you've managed just fine. Am I right to think that? <br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00580_BeyondTheMemories 33344-06.html">"Yes."</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Giant's Minion Hadel:<br>
I'm shocked at just how capable you are. If you can, please help us again. Someone as dependable as you is always welcome.<br>
</body></html>

View File

@@ -0,0 +1,211 @@
/*
* 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.Q00580_BeyondTheMemories;
import java.util.HashSet;
import java.util.Set;
import com.l2jmobius.gameserver.enums.QuestSound;
import com.l2jmobius.gameserver.enums.QuestType;
import com.l2jmobius.gameserver.model.Location;
import com.l2jmobius.gameserver.model.actor.Npc;
import com.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import com.l2jmobius.gameserver.model.holders.NpcLogListHolder;
import com.l2jmobius.gameserver.model.quest.Quest;
import com.l2jmobius.gameserver.model.quest.QuestState;
import com.l2jmobius.gameserver.model.quest.State;
import com.l2jmobius.gameserver.network.NpcStringId;
import quests.Q00561_BasicMissionHarnakUndergroundRuins.Q00561_BasicMissionHarnakUndergroundRuins;
/**
* Regular Barrier Maintenance (529)
* @URL https://l2wiki.com/Regular_Barrier_Maintenance
* @author Mobius
*/
public class Q00580_BeyondTheMemories extends Quest
{
// NPCs
private static final int START_NPC = 33344; // Giant's Minion Hadel
private static final int[] MONSTERS =
{
22931, // Krakia Bathus
22932, // Krakia Carcass
22933, // Krakia Lotus
22934, // Rakzan
22935, // Weiss Khan
22936, // Weiss Ele
22937, // Bamonti
22938, // Seknus
23349, // Noctum
22939, // Demonic Bathus
22940, // Demonic Carcass
22941, // Demonic Lotus
22942, // Demonic Rakzan
22943, // Demonic Weiss Khan
22944, // Demonic Weiss Ele
22945, // Demonic Bamonti
22946, // Demonic Seknus
23350, // Demonic Noctum
};
// Misc
private static final int KILLING_NPCSTRING_ID = NpcStringId.DEFEAT_MONSTERS_IN_THE_UNDERGROUND_RUINS.getId();
private static final QuestType QUEST_TYPE = QuestType.DAILY; // REPEATABLE, ONE_TIME, DAILY
private static final boolean PARTY_QUEST = true;
private static final int KILLING_COND = 1;
private static final int FINISH_COND = 2;
private static final int MIN_LEVEL = 85;
// Location
private static final Location HARNAK_UNDERGROUND_RUINS = new Location(-114700, 147909, -7715);
// Rewards
private static final int EXP = 231860550;
private static final int SP = 231840;
private static final int ADENA_AMOUNT = 505080;
public Q00580_BeyondTheMemories()
{
super(580);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addKillId(MONSTERS);
addCondMinLevel(MIN_LEVEL, getNoQuestMsg(null));
addCondStartedQuest(Q00561_BasicMissionHarnakUndergroundRuins.class.getSimpleName(), "33344-01.html");
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return null;
}
switch (event)
{
case "33344-02.htm":
case "33344-03.htm":
{
return event;
}
case "33344-04.htm":
{
if (qs.isCreated())
{
qs.startQuest();
qs.setCond(KILLING_COND);
}
break;
}
case "gotoharnak":
{
// Teleport to Harnak Underground Ruins Inside
player.teleToLocation(HARNAK_UNDERGROUND_RUINS);
break;
}
case "33344-06.html":
{
if (qs.isCond(FINISH_COND))
{
// Reward.
addExpAndSp(player, EXP, SP);
giveAdena(player, ADENA_AMOUNT, false);
qs.exitQuest(QUEST_TYPE, true);
}
break;
}
}
return event;
}
@Override
public String onTalk(Npc npc, PlayerInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
if (npc.getId() == START_NPC)
{
switch (qs.getState())
{
case State.CREATED:
{
htmltext = "33344-01.htm";
break;
}
case State.STARTED:
{
if (qs.isCond(KILLING_COND))
{
htmltext = "33344-04.htm";
}
else if (qs.isCond(FINISH_COND))
{
htmltext = "33344-05.html";
}
break;
}
case State.COMPLETED:
{
if (qs.isNowAvailable())
{
qs.setState(State.CREATED);
htmltext = "33344-01.htm";
}
else
{
htmltext = getAlreadyCompletedMsg(player, QUEST_TYPE);
}
break;
}
}
}
return htmltext;
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final QuestState qs = PARTY_QUEST ? getRandomPartyMemberState(killer, -1, 3, npc) : getQuestState(killer, false);
if ((qs != null) && qs.isCond(KILLING_COND))
{
final int killedGhosts = qs.getInt("AncientGhosts") + 1;
qs.set("AncientGhosts", killedGhosts);
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
if (killedGhosts >= 200)
{
qs.setCond(FINISH_COND, true);
}
sendNpcLogList(killer);
}
return super.onKill(npc, killer, isSummon);
}
@Override
public Set<NpcLogListHolder> getNpcLogList(PlayerInstance player)
{
final QuestState qs = getQuestState(player, false);
if ((qs != null) && qs.isCond(KILLING_COND))
{
final Set<NpcLogListHolder> holder = new HashSet<>();
holder.add(new NpcLogListHolder(KILLING_NPCSTRING_ID, true, qs.getInt("AncientGhosts")));
return holder;
}
return super.getNpcLogList(player);
}
}

View File

@@ -115,9 +115,11 @@ import quests.Q00511_AwlUnderFoot.Q00511_AwlUnderFoot;
import quests.Q00512_BladeUnderFoot.Q00512_BladeUnderFoot; import quests.Q00512_BladeUnderFoot.Q00512_BladeUnderFoot;
import quests.Q00551_OlympiadStarter.Q00551_OlympiadStarter; import quests.Q00551_OlympiadStarter.Q00551_OlympiadStarter;
import quests.Q00553_OlympiadUndefeated.Q00553_OlympiadUndefeated; import quests.Q00553_OlympiadUndefeated.Q00553_OlympiadUndefeated;
import quests.Q00561_BasicMissionHarnakUndergroundRuins.Q00561_BasicMissionHarnakUndergroundRuins;
import quests.Q00562_BasicMissionAltarOfEvil.Q00562_BasicMissionAltarOfEvil; import quests.Q00562_BasicMissionAltarOfEvil.Q00562_BasicMissionAltarOfEvil;
import quests.Q00563_BasicMissionBloodySwampland.Q00563_BasicMissionBloodySwampland; import quests.Q00563_BasicMissionBloodySwampland.Q00563_BasicMissionBloodySwampland;
import quests.Q00564_BasicMissionKartiasLabyrinthSolo.Q00564_BasicMissionKartiasLabyrinthSolo; import quests.Q00564_BasicMissionKartiasLabyrinthSolo.Q00564_BasicMissionKartiasLabyrinthSolo;
import quests.Q00580_BeyondTheMemories.Q00580_BeyondTheMemories;
import quests.Q00581_ThePurificationRitual.Q00581_ThePurificationRitual; import quests.Q00581_ThePurificationRitual.Q00581_ThePurificationRitual;
import quests.Q00582_WashBloodWithBlood.Q00582_WashBloodWithBlood; import quests.Q00582_WashBloodWithBlood.Q00582_WashBloodWithBlood;
import quests.Q00583_MeaningOfSurvival.Q00583_MeaningOfSurvival; import quests.Q00583_MeaningOfSurvival.Q00583_MeaningOfSurvival;
@@ -511,7 +513,7 @@ public class QuestMasterHandler
Q00529_RegularBarrierMaintenance.class, // TODO: Not done. Q00529_RegularBarrierMaintenance.class, // TODO: Not done.
Q00551_OlympiadStarter.class, Q00551_OlympiadStarter.class,
Q00553_OlympiadUndefeated.class, Q00553_OlympiadUndefeated.class,
Q00561_BasicMissionHarnakUndergroundRuins.class, // TODO: Not done. Q00561_BasicMissionHarnakUndergroundRuins.class,
Q00562_BasicMissionAltarOfEvil.class, Q00562_BasicMissionAltarOfEvil.class,
Q00563_BasicMissionBloodySwampland.class, Q00563_BasicMissionBloodySwampland.class,
Q00564_BasicMissionKartiasLabyrinthSolo.class, Q00564_BasicMissionKartiasLabyrinthSolo.class,
@@ -528,7 +530,7 @@ public class QuestMasterHandler
Q00575_SpecialMissionFortuna.class, // TODO: Not done. Q00575_SpecialMissionFortuna.class, // TODO: Not done.
Q00576_SpecialMissionDefeatSpezion.class, // TODO: Not done. Q00576_SpecialMissionDefeatSpezion.class, // TODO: Not done.
Q00577_BasicMissionSilentValley.class, // TODO: Not done. Q00577_BasicMissionSilentValley.class, // TODO: Not done.
Q00580_BeyondTheMemories.class, // TODO: Not done. Q00580_BeyondTheMemories.class,
Q00581_ThePurificationRitual.class, Q00581_ThePurificationRitual.class,
Q00582_WashBloodWithBlood.class, Q00582_WashBloodWithBlood.class,
Q00583_MeaningOfSurvival.class, Q00583_MeaningOfSurvival.class,

View File

@@ -1,36 +0,0 @@
/*
* 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.not_done;
import com.l2jmobius.Config;
import com.l2jmobius.gameserver.model.quest.Quest;
/**
* @author Mobius
*/
public class Q00561_BasicMissionHarnakUndergroundRuins extends Quest
{
private static final int START_NPC = 34413;
public Q00561_BasicMissionHarnakUndergroundRuins()
{
super(561);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
}
}

View File

@@ -1,36 +0,0 @@
/*
* 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.not_done;
import com.l2jmobius.Config;
import com.l2jmobius.gameserver.model.quest.Quest;
/**
* @author Mobius
*/
public class Q00580_BeyondTheMemories extends Quest
{
private static final int START_NPC = 33344;
public Q00580_BeyondTheMemories()
{
super(580);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
}
}

View File

@@ -7,7 +7,6 @@
557 Red Libra Request - Fall of Etina 557 Red Libra Request - Fall of Etina
558 Request from the Red Libra Guild - Sea of Spores 558 Request from the Red Libra Guild - Sea of Spores
559 Request from the Red Libra Guild - Krofins Nest 559 Request from the Red Libra Guild - Krofins Nest
561 Basic Mission: Harnak Underground Ruins
565 Basic Mission: Fairy Settlement - West 565 Basic Mission: Fairy Settlement - West
566 Basic Mission: Fairy Settlement - East 566 Basic Mission: Fairy Settlement - East
567 Basic Mission: Isle of Souls 567 Basic Mission: Isle of Souls
@@ -22,7 +21,6 @@
577 Basic Mission: Silent Valley 577 Basic Mission: Silent Valley
578 Basic Mission: Cemetery 578 Basic Mission: Cemetery
579 Basic Mission: Blazing Swamp 579 Basic Mission: Blazing Swamp
580 Beyond the Memories
585 Can't Go Against the Time 585 Can't Go Against the Time
586 Mutated Creatures 586 Mutated Creatures
587 More Aggressive Operation 587 More Aggressive Operation

View File

@@ -0,0 +1,4 @@
<html><body>Gatekeeper Milia:<br>
Are you going to the Ruins of Ye Sagira? I know how to get there.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 30006-02.html">"Go on."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Gatekeeper Milia:<br>
It is difficult to teleport directly to the Hamak Underground Ruins. You should take a detour. First, you must teleport to the entrance zone of the Ruins of Ye Sagira. I can help you do this. From there, go to the <font color="LEVEL">Ruins of Ye Sagira</font> and then to Exploration Area 1, where you can find Giant's Minion Hadel.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 30006-03.html">"Alright."</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Gatekeeper Milia:<br>
In fact, there is a shortcut. The Sayunes next to me can take you directly to Hadel.<br>
It doesn't matter which way you choose as long as it takes you to where you want to go.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 30006-04.html">"Alright."</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Gatekeeper Milia:<br>
I've explained everything I could about teleportation. Make the best use of Gatekeepers to get to where you want. See you!<br>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Gatekeeper Elisa:<br>
You want to know how to go to the Hamak Underground Ruins? I see! You must be from the Adventure Guild! I'll fill you in briefly on what us Gatekeepers do and also tell you how to teleport through us.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 30848-02.html">"Go on."</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Gatekeeper Elisa:<br>
We Gatekeepers use magic to Teleport long distances in a short time via the Gates of Time and Space. We've been trained in the Ivory Tower for a long time to learn these abilities.<br>
We charge you according to the distance of the teleport, as there are consumables needed for it. However, for adventurers in lower levels, we sometimes waiver the cost.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 30848-03.html">"Go on."</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Gatekeeper Elisa:<br>
However, at least, you have to know in which territory the location is, when you want to go somewhere. Is your final destination the <font color="LEVEL">Hamak Underground Ruins</font>? If you want to get there, you have to go to the <font color="LEVEL">Talking Island Village</font> first.<br>
If you are teleporting to a certain quest destination, the location will be at the top of the Teleport List so, it's more convenient. Easy, right? <br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 30848-04.html">"I understand."</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Gatekeeper Elisa:<br>
When you're ready, talk to me to experience teleporting. When you get to the Talking Island Village, talk to Milia the Gatekeeper. I wish you success.<br>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Giant's Minion Hadel:<br>
You are the one that the Adventure Guild sent, huh? Do you want to cooperate? No reason to say no.<br>
<font color="LEVEL">(To receive "Hamak Underground Ruins", you have to complete Hadel's quest "Beyond the Memories" first.)</font><br>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Adventure Guildsman Penny:<br>
Your're the one that Hephah has sent, right? If not, you should go meet Herphah and receive a mission from her before you continue. If you think it doesn't matter, I can continue anyway. Do you want me to continue?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 34413-02.htm">"Sure, no problem!"</button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Adventure Guildsman Penny:<br>
Herphah thought the best way for you to grow was to carry out missions with us.<br>
I agree with her. If you accomplish the missions I give you, I'm sure you'll quickly become more powerful.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 34413-03.htm">"Go on."</button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Adventure Guildsman Penny:<br>
I know that you're confused. But, you'll understand soon. If you accept the mission, I'll explain right away.<br>
Are you interested in further righteous work?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 34413-04.htm">"Alright."</Button>
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>Adventure Guildsman Penny:<br>
So you've already learned about the mission. In that case, you can start it right away, without any more explanation.<br>
But if you want to listen to my explanation again, I would be more than happy to tell you. <br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 34413-05.html">"Receive the mission."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 34413-09.html">"Hear the explanation again."</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Adventure Guildsman Penny:<br>
You have to accomplish the task at <font color="LEVEL">Hamak Underground Ruins</font> on <font color="LEVEL">Talking Island</font>. To do so, you need to move to the Ruins of Ye Sagira and talk to Giant's Minion Hadel.<br>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Adventure Guildsman Penny:<br>
Welcome back! So, did you do a good job?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 34413-07.html">"Yes, I did."</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Adventure Guildsman Penny:<br>
Thanks, you've done a great job! I'm sure eveyone in the Adventure Guild will know your name now. If there is another opportunity, we'd love for you to help us again. Good luck and farewell!<br>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Adventure Guildsman Penny:<br>
To do the mission, you have to go to <font color="LEVEL">Black Wizard Lapathia</font> at the <font color="LEVEL">Altar of Evil</font>. Do the mission that Lapathia gives. Then, come back to me. <br>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Adventure Guildsman Penny:<br>
In this world, there are many factions. The factions usually are based on their own regions. Sometimes, they are specialized in specific activities, such as fishing, and wield their influence. If you build relations with a faction and establish an Amity Level, you can conduct activities within the faction and take more missions.<br>
Among these factions, I am a part of the <font color="LEVEL">Adventure Guild</font>. When you implement the mission that I gave you, you'll assist the activities of the Adventure Guild. If you do well in the mission from our faction, I'll give you an even better mission.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00561_BasicMissionHarnakUndergroundRuins 34413-10.html">"Gon on."</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Adventure Guildsman Penny:<br>
The mission I'll give you is to help the task at <font color="LEVEL">Hamak Underground Ruins</font> on <font color="LEVEL">Talking Island</font>.<br>
But first, you need to learn how get there.<br>
Go to <font color="LEVEL">Gatekeeper Elisa</font>, the Gatekeeper of this town, and she will tell you how to go to the <font color="LEVEL">Hamak Underground Ruins</font>. If you successfully arrive at the ruins, meet Giant's Minion Hadel and listen to him.<br>
</body></html>

View File

@@ -0,0 +1,222 @@
/*
* 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.Q00561_BasicMissionHarnakUndergroundRuins;
import com.l2jmobius.gameserver.enums.Faction;
import com.l2jmobius.gameserver.enums.QuestType;
import com.l2jmobius.gameserver.model.actor.Npc;
import com.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import com.l2jmobius.gameserver.model.quest.Quest;
import com.l2jmobius.gameserver.model.quest.QuestState;
import com.l2jmobius.gameserver.model.quest.State;
import com.l2jmobius.gameserver.network.serverpackets.ExTutorialShowId;
import com.l2jmobius.gameserver.network.serverpackets.TutorialShowHtml;
/**
* Q00561_BasicMissionHarnakUndergroundRuins
* @URL http://l2on.net/en/?c=quests&id=561&game=1
* @author NightBR
*/
public class Q00561_BasicMissionHarnakUndergroundRuins extends Quest
{
// NPCs
private static final int PENNY = 34413;
private static final int ELISA = 30848;
private static final int MILIA = 30006;
private static final int HADEL = 33344;
// Rewards
private static final long EXP = 115930275;
private static final int SP = 115920;
private static final int FP = 100; // Faction points
private static final int SCROLL_OF_ESCAPE_HARNAK_UNDERGROUND_RUINS = 39496;
private static final int SCROLL_OF_ESCAPE_TOWN_OF_ADEN = 48413;
// Misc
private static final int MIN_LEVEL = 85;
private static final int MAX_LEVEL = 87;
public Q00561_BasicMissionHarnakUndergroundRuins()
{
super(561);
addStartNpc(PENNY);
addTalkId(PENNY, ELISA, MILIA, HADEL);
addCondLevel(MIN_LEVEL, MAX_LEVEL, "nolevel.html");
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return null;
}
String htmltext = null;
switch (event)
{
case "34413-02.htm":
case "34413-03.htm":
case "34413-06.html":
case "34413-10.html":
case "30848-02.html":
case "30848-03.html":
case "30006-02.html":
case "30006-03.html":
{
htmltext = event;
break;
}
case "34413-04.htm":
{
qs.startQuest();
htmltext = event;
break;
}
case "34413-05.html":
{
qs.setCond(4, true);
htmltext = event;
break;
}
case "34413-09.html":
{
// Show Service/Help/Faction System page
// TODO: Find the correct Id for player.sendPacket(new ExTutorialShowId(22));
player.sendPacket(new TutorialShowHtml(npc.getObjectId(), "..\\L2Text\\help_faction.htm", TutorialShowHtml.LARGE_WINDOW));
qs.setCond(2, true);
htmltext = event;
break;
}
case "34413-07.html":
{
// Rewards
giveItems(player, SCROLL_OF_ESCAPE_HARNAK_UNDERGROUND_RUINS, 1);
addExpAndSp(player, EXP, SP);
addFactionPoints(player, Faction.ADVENTURE_GUILD, FP); // add FP points to ADVENTURE_GUILD Faction
qs.exitQuest(QuestType.DAILY, true);
htmltext = event;
break;
}
case "30848-04.html": // ELISA
{
// Show Service/Help/Gatekeeper page
player.sendPacket(new ExTutorialShowId(55));
qs.setCond(3, true);
htmltext = event;
break;
}
case "30006-04.html": // MILIA
{
qs.setCond(4, true);
htmltext = event;
break;
}
}
return htmltext;
}
@Override
public String onTalk(Npc npc, PlayerInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
switch (qs.getState())
{
case State.CREATED:
{
if (npc.getId() == PENNY)
{
htmltext = "34413-01.htm";
}
break;
}
case State.STARTED:
{
switch (npc.getId())
{
case PENNY:
{
if (qs.getCond() == 1)
{
htmltext = "34413-04.htm";
}
else if (qs.getCond() == 2)
{
htmltext = "33509-10.htm";
}
else if (qs.getCond() == 4)
{
htmltext = "34413-05.html";
}
else
{
htmltext = "34413-06.html";
}
break;
}
case ELISA:
{
htmltext = "30848-01.html";
break;
}
case MILIA:
{
htmltext = "30006-01.html";
break;
}
case HADEL:
{
if (qs.getCond() == 4)
{
qs.setCond(5, true);
htmltext = "33344-01.html";
}
else if (qs.getCond() == 5)
{
final QuestState st = player.getQuestState("Q00580_BeyondTheMemories");
if ((st != null) && st.isCompleted())
{
qs.setCond(7, true);
giveItems(player, SCROLL_OF_ESCAPE_TOWN_OF_ADEN, 1);
htmltext = null;
}
}
break;
}
}
break;
}
case State.COMPLETED:
{
if (qs.isNowAvailable())
{
qs.setState(State.CREATED);
htmltext = "34413-01.htm";
}
else
{
htmltext = getAlreadyCompletedMsg(player, QuestType.DAILY);
}
break;
}
}
return htmltext;
}
}

View File

@@ -0,0 +1,4 @@
<html><body>Penny:<br>
I don't understand why someone like you is interested in this mission?<br>
(Only characters above Lv.85.)
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Giant's Minion Hadel:<br>
So, you are the guy interested in the Hamak Underground Ruins? I should examine your will and knowledge about the challenge first.<br>
If you fail my test, I'll send you back.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00580_BeyondTheMemories 33344-02.htm">"I'm as ready as can be."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Giant's Minion Hadel:<br>
You are the one that the Adventure Guild sent, huh? Do you want to cooperate? No reason to say no.<br>
<font color="LEVEL">(To receive "Beyond the Memories" quest, you have to take Penny's quest "Hamak Underground Ruins" first.)</font><br>
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>Giant's Minion Hadel:<br>
First of all, you need to know what the Hamak Underground Ruins are.<br>
The owner of the ruins, Hamak was a giant of obsession. He killed his wife by locking her up in the labyrinth out of delusional jealousy. The Hamak Underground Ruins are a place where the obsession is enhanced and collected.<br>
You need to understand what you're getting yourself into.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00580_BeyondTheMemories 33344-03.htm">"I got it."</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Giant's Minion Hadel:<br>
When you enter the ruins, you will fight against the servants of Hamak. They are the ghosts of ancient times and are mere beings beyond memories. However, they are powerful enough to be a threat, as they are influenced by the space that Hamak dominates.<br>
You will find yourself in danger. Are you sure you can fight against the existences?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00580_BeyondTheMemories 33344-04.htm">"It shouldn't be a problem."</Button>
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>Giant's Minion Hadel:<br>
Great Now I understand how strong your will and knowledge are.<br>
Here's what you need to do. Eliminate <font color="LEVEL">200</font> Ancient Ghosts in the Hamak Underground Ruins.<br>
They are the <font color="LEVEL">Krakia Bathus, Krakia Carcass, Krakia Lotus, Rakzan, Weiss Khan, Weiss Ele, Bamonti, Seknus, and Noctum.</font>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00580_BeyondTheMemories gotoharnak">"Go to the Hamak Underground Ruins."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Giant's Minion Hadel:<br>
Are you done? It's not such an easy place but it looks like you've managed just fine. Am I right to think that? <br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00580_BeyondTheMemories 33344-06.html">"Yes."</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Giant's Minion Hadel:<br>
I'm shocked at just how capable you are. If you can, please help us again. Someone as dependable as you is always welcome.<br>
</body></html>

View File

@@ -0,0 +1,211 @@
/*
* 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.Q00580_BeyondTheMemories;
import java.util.HashSet;
import java.util.Set;
import com.l2jmobius.gameserver.enums.QuestSound;
import com.l2jmobius.gameserver.enums.QuestType;
import com.l2jmobius.gameserver.model.Location;
import com.l2jmobius.gameserver.model.actor.Npc;
import com.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import com.l2jmobius.gameserver.model.holders.NpcLogListHolder;
import com.l2jmobius.gameserver.model.quest.Quest;
import com.l2jmobius.gameserver.model.quest.QuestState;
import com.l2jmobius.gameserver.model.quest.State;
import com.l2jmobius.gameserver.network.NpcStringId;
import quests.Q00561_BasicMissionHarnakUndergroundRuins.Q00561_BasicMissionHarnakUndergroundRuins;
/**
* Regular Barrier Maintenance (529)
* @URL https://l2wiki.com/Regular_Barrier_Maintenance
* @author Mobius
*/
public class Q00580_BeyondTheMemories extends Quest
{
// NPCs
private static final int START_NPC = 33344; // Giant's Minion Hadel
private static final int[] MONSTERS =
{
22931, // Krakia Bathus
22932, // Krakia Carcass
22933, // Krakia Lotus
22934, // Rakzan
22935, // Weiss Khan
22936, // Weiss Ele
22937, // Bamonti
22938, // Seknus
23349, // Noctum
22939, // Demonic Bathus
22940, // Demonic Carcass
22941, // Demonic Lotus
22942, // Demonic Rakzan
22943, // Demonic Weiss Khan
22944, // Demonic Weiss Ele
22945, // Demonic Bamonti
22946, // Demonic Seknus
23350, // Demonic Noctum
};
// Misc
private static final int KILLING_NPCSTRING_ID = NpcStringId.DEFEAT_MONSTERS_IN_THE_UNDERGROUND_RUINS.getId();
private static final QuestType QUEST_TYPE = QuestType.DAILY; // REPEATABLE, ONE_TIME, DAILY
private static final boolean PARTY_QUEST = true;
private static final int KILLING_COND = 1;
private static final int FINISH_COND = 2;
private static final int MIN_LEVEL = 85;
// Location
private static final Location HARNAK_UNDERGROUND_RUINS = new Location(-114700, 147909, -7715);
// Rewards
private static final int EXP = 231860550;
private static final int SP = 231840;
private static final int ADENA_AMOUNT = 505080;
public Q00580_BeyondTheMemories()
{
super(580);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addKillId(MONSTERS);
addCondMinLevel(MIN_LEVEL, getNoQuestMsg(null));
addCondStartedQuest(Q00561_BasicMissionHarnakUndergroundRuins.class.getSimpleName(), "33344-01.html");
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return null;
}
switch (event)
{
case "33344-02.htm":
case "33344-03.htm":
{
return event;
}
case "33344-04.htm":
{
if (qs.isCreated())
{
qs.startQuest();
qs.setCond(KILLING_COND);
}
break;
}
case "gotoharnak":
{
// Teleport to Harnak Underground Ruins Inside
player.teleToLocation(HARNAK_UNDERGROUND_RUINS);
break;
}
case "33344-06.html":
{
if (qs.isCond(FINISH_COND))
{
// Reward.
addExpAndSp(player, EXP, SP);
giveAdena(player, ADENA_AMOUNT, false);
qs.exitQuest(QUEST_TYPE, true);
}
break;
}
}
return event;
}
@Override
public String onTalk(Npc npc, PlayerInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
if (npc.getId() == START_NPC)
{
switch (qs.getState())
{
case State.CREATED:
{
htmltext = "33344-01.htm";
break;
}
case State.STARTED:
{
if (qs.isCond(KILLING_COND))
{
htmltext = "33344-04.htm";
}
else if (qs.isCond(FINISH_COND))
{
htmltext = "33344-05.html";
}
break;
}
case State.COMPLETED:
{
if (qs.isNowAvailable())
{
qs.setState(State.CREATED);
htmltext = "33344-01.htm";
}
else
{
htmltext = getAlreadyCompletedMsg(player, QUEST_TYPE);
}
break;
}
}
}
return htmltext;
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final QuestState qs = PARTY_QUEST ? getRandomPartyMemberState(killer, -1, 3, npc) : getQuestState(killer, false);
if ((qs != null) && qs.isCond(KILLING_COND))
{
final int killedGhosts = qs.getInt("AncientGhosts") + 1;
qs.set("AncientGhosts", killedGhosts);
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
if (killedGhosts >= 200)
{
qs.setCond(FINISH_COND, true);
}
sendNpcLogList(killer);
}
return super.onKill(npc, killer, isSummon);
}
@Override
public Set<NpcLogListHolder> getNpcLogList(PlayerInstance player)
{
final QuestState qs = getQuestState(player, false);
if ((qs != null) && qs.isCond(KILLING_COND))
{
final Set<NpcLogListHolder> holder = new HashSet<>();
holder.add(new NpcLogListHolder(KILLING_NPCSTRING_ID, true, qs.getInt("AncientGhosts")));
return holder;
}
return super.getNpcLogList(player);
}
}

View File

@@ -114,9 +114,11 @@ import quests.Q00511_AwlUnderFoot.Q00511_AwlUnderFoot;
import quests.Q00512_BladeUnderFoot.Q00512_BladeUnderFoot; import quests.Q00512_BladeUnderFoot.Q00512_BladeUnderFoot;
import quests.Q00551_OlympiadStarter.Q00551_OlympiadStarter; import quests.Q00551_OlympiadStarter.Q00551_OlympiadStarter;
import quests.Q00553_OlympiadUndefeated.Q00553_OlympiadUndefeated; import quests.Q00553_OlympiadUndefeated.Q00553_OlympiadUndefeated;
import quests.Q00561_BasicMissionHarnakUndergroundRuins.Q00561_BasicMissionHarnakUndergroundRuins;
import quests.Q00562_BasicMissionAltarOfEvil.Q00562_BasicMissionAltarOfEvil; import quests.Q00562_BasicMissionAltarOfEvil.Q00562_BasicMissionAltarOfEvil;
import quests.Q00563_BasicMissionBloodySwampland.Q00563_BasicMissionBloodySwampland; import quests.Q00563_BasicMissionBloodySwampland.Q00563_BasicMissionBloodySwampland;
import quests.Q00564_BasicMissionKartiasLabyrinthSolo.Q00564_BasicMissionKartiasLabyrinthSolo; import quests.Q00564_BasicMissionKartiasLabyrinthSolo.Q00564_BasicMissionKartiasLabyrinthSolo;
import quests.Q00580_BeyondTheMemories.Q00580_BeyondTheMemories;
import quests.Q00581_ThePurificationRitual.Q00581_ThePurificationRitual; import quests.Q00581_ThePurificationRitual.Q00581_ThePurificationRitual;
import quests.Q00582_WashBloodWithBlood.Q00582_WashBloodWithBlood; import quests.Q00582_WashBloodWithBlood.Q00582_WashBloodWithBlood;
import quests.Q00583_MeaningOfSurvival.Q00583_MeaningOfSurvival; import quests.Q00583_MeaningOfSurvival.Q00583_MeaningOfSurvival;
@@ -514,7 +516,7 @@ public class QuestMasterHandler
Q00551_OlympiadStarter.class, Q00551_OlympiadStarter.class,
Q00553_OlympiadUndefeated.class, Q00553_OlympiadUndefeated.class,
Q00560_HowToOvercomeFear.class, // FIXME: Custom. Q00560_HowToOvercomeFear.class, // FIXME: Custom.
Q00561_BasicMissionHarnakUndergroundRuins.class, // TODO: Not done. Q00561_BasicMissionHarnakUndergroundRuins.class,
Q00562_BasicMissionAltarOfEvil.class, Q00562_BasicMissionAltarOfEvil.class,
Q00563_BasicMissionBloodySwampland.class, Q00563_BasicMissionBloodySwampland.class,
Q00564_BasicMissionKartiasLabyrinthSolo.class, Q00564_BasicMissionKartiasLabyrinthSolo.class,
@@ -532,7 +534,7 @@ public class QuestMasterHandler
Q00577_BasicMissionSilentValley.class, // TODO: Not done. Q00577_BasicMissionSilentValley.class, // TODO: Not done.
Q00578_BasicMissionCemetery.class, // TODO: Not done. Q00578_BasicMissionCemetery.class, // TODO: Not done.
Q00579_BasicMissionBlazingSwamp.class, // TODO: Not done. Q00579_BasicMissionBlazingSwamp.class, // TODO: Not done.
Q00580_BeyondTheMemories.class, // TODO: Not done. Q00580_BeyondTheMemories.class,
Q00581_ThePurificationRitual.class, Q00581_ThePurificationRitual.class,
Q00582_WashBloodWithBlood.class, Q00582_WashBloodWithBlood.class,
Q00583_MeaningOfSurvival.class, Q00583_MeaningOfSurvival.class,

View File

@@ -1,36 +0,0 @@
/*
* 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.not_done;
import com.l2jmobius.Config;
import com.l2jmobius.gameserver.model.quest.Quest;
/**
* @author Mobius
*/
public class Q00561_BasicMissionHarnakUndergroundRuins extends Quest
{
private static final int START_NPC = 34413;
public Q00561_BasicMissionHarnakUndergroundRuins()
{
super(561);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
}
}

View File

@@ -1,36 +0,0 @@
/*
* 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.not_done;
import com.l2jmobius.Config;
import com.l2jmobius.gameserver.model.quest.Quest;
/**
* @author Mobius
*/
public class Q00580_BeyondTheMemories extends Quest
{
private static final int START_NPC = 33344;
public Q00580_BeyondTheMemories()
{
super(580);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
}
}