Addition of quest 824, 930 and 985.

Contributed by Dmitri.
This commit is contained in:
MobiusDevelopment 2020-04-09 09:50:13 +00:00
parent 06bebdac3a
commit e04b0efc83
246 changed files with 5153 additions and 702 deletions

View File

@ -18,7 +18,6 @@
781 Utilize the Darkness - Seed of Annihilation
782 Utilize the Darkness - Seed of Hellfire
789 Waiting for Pa'agrio
824 Attack the Command Post
834 Against Dragonclaw
10352 Legacy of Cruma Tower
10357 Altar of Blood that Awakens Destruction

View File

@ -0,0 +1,5 @@
<html><body>Elikia:<br>
Did you kill Burnshine?<br>
You ruined Burnshine designs...<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00824_AttackTheCommandPost 34057-07.html">"I figured out Burnshine"</Button>
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Elikia:<br>
Good job. This will help the Adventure Guild take the lead.
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Penny<br>
I don't know where you heard it, but the guild has decided to assign it to a more reliable guild member. Let's talk later when we trust each other more.<br>
(Only characters with Lv. 100+.)
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Devianne:<br>
Have you seen? If not, it's okay.<br>
Bershtein went on the run, and the gate to the Legion Headquarters opened. Good or bad, I don't know, but the main task has been completed.<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00824_AttackTheCommandPost 34089-02.htm">Ask about the gate</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Devianne:<br>
It is these gates that do not allow us to find out what is happening inside the Headquarters of the Legion.<br>
Only Bershtein can open them, and while he is inside the headquarters, they cannot be opened from the outside. The only possibility is the moment when Bershtein enters the Legion Headquarters. But this happens almost instantly. It is necessary to somehow hold the gates so that they do not close immediately.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00824_AttackTheCommandPost 34089-03.htm">"keep going"</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Devianne:<br>
The gates can be kept open briefly with the help of magic. That's what I'm doing.<br>
It is impossible to fix the gates for a long time, and I can't take a single step, I keep them. Also, if Bernstein finds out, there will be big problems. As soon as I feel that he is going into the fortress, I am forced to drop everything and hide. But Bernstein, whom we want to destroy, is very dangerous.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00824_AttackTheCommandPost 34089-04.htm">How can I help you?</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Devianne:<br>
Yes. I need help. The last time the gates opened, Aden Vanguard detachment burst into the Legion Headquarters, but so far there has been no news from them.<br>
While I will keep the gate, enter the Legion Headquarters, find the Aden Vanguard Members and destroy Bernstein. Don't worry: even if the gate closes, you will be able to get out.<br>
After you deal with Burnshine, report this to Elric.
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Devianne:<br>
Yes. I need help. The last time the gates opened, Aden Vanguard detachment burst into the Legion Headquarters, but so far there has been no news from them.<br>
While I will keep the gate, enter the Legion Headquarters, find the Aden Vanguard Members and destroy Bernstein. Don't worry: even if the gate closes, you will be able to get out.<br>
After you deal with Burnshine, report this to Elric.
</body></html>

View File

@ -0,0 +1,161 @@
/*
* 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.Q00824_AttackTheCommandPost;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.QuestType;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState;
import org.l2jmobius.gameserver.model.quest.State;
/**
* Command Post Raid (824)
* @URL https://l2wiki.com/Command_Post_Raid
* @author Dmitri
*/
public class Q00824_AttackTheCommandPost extends Quest
{
// NPCs
private static final int DEVIANNE = 34089;
private static final int ELIKIA = 34057;
// RaidBosses
private static final int BURNSTEIN = 26136;
// Rewards
private static final int ADEN_VANGUARD_SUPPLY_BOX = 46283;
// Misc
private static final int MIN_LEVEL = 100;
public Q00824_AttackTheCommandPost()
{
super(824);
addStartNpc(DEVIANNE);
addTalkId(DEVIANNE, ELIKIA);
addKillId(BURNSTEIN);
addCondMinLevel(MIN_LEVEL, "34089-00.htm");
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
String htmltext = null;
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return htmltext;
}
switch (event)
{
case "34089-02.htm":
case "34089-03.htm":
{
htmltext = event;
break;
}
case "34089-04.htm":
{
qs.startQuest();
htmltext = event;
break;
}
case "34057-07.html":
{
// Rewards
giveItems(player, ADEN_VANGUARD_SUPPLY_BOX, 1);
addExpAndSp(player, 3954960000L, 9491880);
qs.exitQuest(QuestType.DAILY, 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() == DEVIANNE)
{
htmltext = "34089-01.htm";
}
break;
}
case State.STARTED:
{
switch (npc.getId())
{
case DEVIANNE:
{
if (qs.isCond(1))
{
htmltext = "34089-05.html";
}
break;
}
case ELIKIA:
{
if (qs.isCond(2))
{
htmltext = "34057-06.html";
}
break;
}
}
break;
}
case State.COMPLETED:
{
if (qs.isNowAvailable())
{
qs.setState(State.CREATED);
htmltext = "34089-01.htm";
}
else
{
htmltext = getAlreadyCompletedMsg(player, QuestType.DAILY);
}
break;
}
}
return htmltext;
}
@Override
public String onKill(Npc npc, PlayerInstance player, boolean isSummon)
{
executeForEachPlayer(player, npc, isSummon, true, false);
return super.onKill(npc, player, isSummon);
}
@Override
public void actionForEachPlayer(PlayerInstance player, Npc npc, boolean isSummon)
{
final QuestState qs = getQuestState(player, false);
if ((qs != null) && qs.isCond(1) && player.isInsideRadius3D(npc, Config.ALT_PARTY_RANGE))
{
qs.setCond(2, true);
}
}
}

View File

@ -217,6 +217,7 @@ import quests.Q00790_ObtainingFerinsTrust.Q00790_ObtainingFerinsTrust;
import quests.Q00816_PlansToRepairTheStronghold.Q00816_PlansToRepairTheStronghold;
import quests.Q00817_BlackAteliaResearch.Q00817_BlackAteliaResearch;
import quests.Q00823_DisappearedRaceNewFairy.Q00823_DisappearedRaceNewFairy;
import quests.Q00824_AttackTheCommandPost.Q00824_AttackTheCommandPost;
import quests.Q00826_InSearchOfTheSecretWeapon.Q00826_InSearchOfTheSecretWeapon;
import quests.Q00827_EinhasadsOrder.Q00827_EinhasadsOrder;
import quests.Q00828_EvasBlessing.Q00828_EvasBlessing;
@ -510,7 +511,6 @@ import quests.not_done.Q00780_UtilizeTheDarknessSeedOfInfinity;
import quests.not_done.Q00781_UtilizeTheDarknessSeedOfAnnihilation;
import quests.not_done.Q00782_UtilizeTheDarknessSeedOfHellfire;
import quests.not_done.Q00789_WaitingForPaagrio;
import quests.not_done.Q00824_AttackTheCommandPost;
import quests.not_done.Q10352_LegacyOfCrumaTower;
import quests.not_done.Q10357_AltarOfBloodThatAwakensDestruction;
import quests.not_done.Q10456_OperationRescue;
@ -756,7 +756,7 @@ public class QuestMasterHandler
Q00816_PlansToRepairTheStronghold.class,
Q00817_BlackAteliaResearch.class,
Q00823_DisappearedRaceNewFairy.class,
Q00824_AttackTheCommandPost.class, // TODO: Not done.
Q00824_AttackTheCommandPost.class,
Q00826_InSearchOfTheSecretWeapon.class,
Q00827_EinhasadsOrder.class,
Q00828_EvasBlessing.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 org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.quest.Quest;
/**
* @author Mobius
*/
public class Q00824_AttackTheCommandPost extends Quest
{
private static final int START_NPC = 34089;
public Q00824_AttackTheCommandPost()
{
super(824);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
}
}

View File

@ -25,7 +25,6 @@
809 Hunter Guild Request - The Immortal Plateau
810 Hunter Guild Request - Isle of Souls
811 Hunter Guild Request - Cemetery
824 Attack the Command Post
825 Hunter Guild Request - Valley of Saints
832 Hunter Guild Request - Southern Region, Isle of Prayer
834 Against Dragonclaw
@ -46,7 +45,6 @@
922 Hunter Guild Request - Northern Region, Isle of Prayer
925 Hunter Guild Request - Garden of Spirits
929 Seeker Rescue
930 Disparaging the Phantoms
938 The Fisherman's Other Hobby
940 Hunter Guild Request - Atelia Fortress
10298 Wasteland Queen

View File

@ -0,0 +1,5 @@
<html><body>Elikia:<br>
Did you kill Burnshine?<br>
You ruined Burnshine designs...<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00824_AttackTheCommandPost 34057-07.html">"I figured out Burnshine"</Button>
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Elikia:<br>
Good job. This will help the Adventure Guild take the lead.
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Penny<br>
I don't know where you heard it, but the guild has decided to assign it to a more reliable guild member. Let's talk later when we trust each other more.<br>
(Only characters with Lv. 100+.)
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Devianne:<br>
Have you seen? If not, it's okay.<br>
Bershtein went on the run, and the gate to the Legion Headquarters opened. Good or bad, I don't know, but the main task has been completed.<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00824_AttackTheCommandPost 34089-02.htm">Ask about the gate</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Devianne:<br>
It is these gates that do not allow us to find out what is happening inside the Headquarters of the Legion.<br>
Only Bershtein can open them, and while he is inside the headquarters, they cannot be opened from the outside. The only possibility is the moment when Bershtein enters the Legion Headquarters. But this happens almost instantly. It is necessary to somehow hold the gates so that they do not close immediately.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00824_AttackTheCommandPost 34089-03.htm">"keep going"</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Devianne:<br>
The gates can be kept open briefly with the help of magic. That's what I'm doing.<br>
It is impossible to fix the gates for a long time, and I can't take a single step, I keep them. Also, if Bernstein finds out, there will be big problems. As soon as I feel that he is going into the fortress, I am forced to drop everything and hide. But Bernstein, whom we want to destroy, is very dangerous.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00824_AttackTheCommandPost 34089-04.htm">How can I help you?</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Devianne:<br>
Yes. I need help. The last time the gates opened, Aden Vanguard detachment burst into the Legion Headquarters, but so far there has been no news from them.<br>
While I will keep the gate, enter the Legion Headquarters, find the Aden Vanguard Members and destroy Bernstein. Don't worry: even if the gate closes, you will be able to get out.<br>
After you deal with Burnshine, report this to Elric.
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Devianne:<br>
Yes. I need help. The last time the gates opened, Aden Vanguard detachment burst into the Legion Headquarters, but so far there has been no news from them.<br>
While I will keep the gate, enter the Legion Headquarters, find the Aden Vanguard Members and destroy Bernstein. Don't worry: even if the gate closes, you will be able to get out.<br>
After you deal with Burnshine, report this to Elric.
</body></html>

View File

@ -0,0 +1,161 @@
/*
* 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.Q00824_AttackTheCommandPost;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.QuestType;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState;
import org.l2jmobius.gameserver.model.quest.State;
/**
* Command Post Raid (824)
* @URL https://l2wiki.com/Command_Post_Raid
* @author Dmitri
*/
public class Q00824_AttackTheCommandPost extends Quest
{
// NPCs
private static final int DEVIANNE = 34089;
private static final int ELIKIA = 34057;
// RaidBosses
private static final int BURNSTEIN = 26136;
// Rewards
private static final int ADEN_VANGUARD_SUPPLY_BOX = 46283;
// Misc
private static final int MIN_LEVEL = 100;
public Q00824_AttackTheCommandPost()
{
super(824);
addStartNpc(DEVIANNE);
addTalkId(DEVIANNE, ELIKIA);
addKillId(BURNSTEIN);
addCondMinLevel(MIN_LEVEL, "34089-00.htm");
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
String htmltext = null;
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return htmltext;
}
switch (event)
{
case "34089-02.htm":
case "34089-03.htm":
{
htmltext = event;
break;
}
case "34089-04.htm":
{
qs.startQuest();
htmltext = event;
break;
}
case "34057-07.html":
{
// Rewards
giveItems(player, ADEN_VANGUARD_SUPPLY_BOX, 1);
addExpAndSp(player, 3954960000L, 9491880);
qs.exitQuest(QuestType.DAILY, 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() == DEVIANNE)
{
htmltext = "34089-01.htm";
}
break;
}
case State.STARTED:
{
switch (npc.getId())
{
case DEVIANNE:
{
if (qs.isCond(1))
{
htmltext = "34089-05.html";
}
break;
}
case ELIKIA:
{
if (qs.isCond(2))
{
htmltext = "34057-06.html";
}
break;
}
}
break;
}
case State.COMPLETED:
{
if (qs.isNowAvailable())
{
qs.setState(State.CREATED);
htmltext = "34089-01.htm";
}
else
{
htmltext = getAlreadyCompletedMsg(player, QuestType.DAILY);
}
break;
}
}
return htmltext;
}
@Override
public String onKill(Npc npc, PlayerInstance player, boolean isSummon)
{
executeForEachPlayer(player, npc, isSummon, true, false);
return super.onKill(npc, player, isSummon);
}
@Override
public void actionForEachPlayer(PlayerInstance player, Npc npc, boolean isSummon)
{
final QuestState qs = getQuestState(player, false);
if ((qs != null) && qs.isCond(1) && player.isInsideRadius3D(npc, Config.ALT_PARTY_RANGE))
{
qs.setCond(2, true);
}
}
}

View File

@ -0,0 +1,5 @@
<html><body>Sporcha:<br>
The Enchanted Valley has changed, so it's very dangerous.<br>
I don't think you are supposed to be here yet. Come back when you get stronger.<br>
(Only characters above Lv. 99+ and Complete: Kefensis' Illusion and Blackbird Clan amity level 4 and above.)
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Sporcha:<br>
Ah, adventurer! There you are again. How about helping us some more? if you do, you can deepen the mutual trust with us and Ferin.<br>
What do you say? if you don't remember what to do, I can tell you again.
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00930_DisparagingThePhantoms 34230-02.htm">"Please tell me again."</Button>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00930_DisparagingThePhantoms select_mission">"I know what I should do."</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Sporcha:<br>
We've begun an investigation in the Garden of Spirits starting from here. However, we are being threatened by the spirits there, so something must be done.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00930_DisparagingThePhantoms 34230-03.htm">"What is it you need to do?"</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Sporcha:<br>
We know of a way to defeat those spirits, at least temporarily. This way, we'll be able to put the spirits at rest, even if it's just for a little while.<br>
Of course, we will give you a reward for your help. And there is one more thing. While you are helping us, you'll build trust with us. The more we trust you, the more rewards we will give you, and there are some secret missions that we only give to those we trust.<br>
That's about it.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00930_DisparagingThePhantoms select_mission">"Yes, sure."</Button>
</body></html>

View File

@ -0,0 +1,7 @@
<html><body>Sporcha:<br>
Good. Let me tell you what to do. Just choose the mission that you are capable of doing.<br>
Basic Mission - Collect <font color="LEVEL">3</font> Mutated Spirit's Souls.<br1>
Intermediate Mission - Collect <font color="LEVEL">6</font> Mutated Spirit's Souls.<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00930_DisparagingThePhantoms 34230-06.html">"I'll take the basic mission."</Button>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00930_DisparagingThePhantoms 34230-05.html"><font color="A62F31">"I'll take the intermediate mission."</font></Button>
</body></html>

View File

@ -0,0 +1,7 @@
<html><body>Sporcha:<br>
Good. Let me tell you what to do. Just choose the mission that you are capable of doing.<br>
Basic Mission - Collect <font color="LEVEL">3</font> Mutated Spirit's Souls.<br1>
Intermediate Mission - Collect <font color="LEVEL">6</font> Mutated Spirit's Souls.<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00930_DisparagingThePhantoms 34230-06.html">"I'll take the basic mission."</Button>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00930_DisparagingThePhantoms 34230-06a.html">"I'll take the intermediate mission."</Button>
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Sporcha:<br>
Your Unworldly Visitors Faction Level Must be 5 or above may undertake this mission.
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Sporcha:<br>
You have chosen the basic mission to collect 3 Mutated Spirit's Souls. Once you have selected the difficulty of the mission, you must meet the requirements in order to complete it. Choose wisely.<br>
Are you sure you want to proceed with this mission?<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00930_DisparagingThePhantoms 34230-07.html">"Yes, I've made my decision."</Button>
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest Q00930_DisparagingThePhantoms return">"Let me reconsider."</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Sporcha:<br>
You have chosen the intermediate mission to collect 6 Mutated Spirit's Souls. Once you have selected the difficulty of the mission, you must meet the requirements in order to complete it. Choose wisely.<br>
Are you sure you want to proceed with this mission?<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Q00930_DisparagingThePhantoms 34230-07a.html">"Yes, I've made my decision."</Button>
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Q00930_DisparagingThePhantoms return">"Let me reconsider."</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Sporcha:<br>
Good. Left me explain the details. Go to the <font color="LEVEL">Garden of Spirits</font>, defeat the <font color="LEVEL">Kerberos Lager, Kerberos Fort, Kerberos Nero, Fury Sylph Barrena, Fury Sylph Labido, Fury Sylph Purka, Fury Kerberos Leger, and Fury Kerberos Nero</font>, and put them to rest.<br>
As evidence, please bring back <font color="LEVEL">3 Mutated Spirit's Souls</font>. It should be manageable.
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Sporcha:<br>
Good. Left me explain the details. Go to the <font color="LEVEL">Garden of Spirits</font>, defeat the <font color="LEVEL">Kerberos Lager, Kerberos Fort, Kerberos Nero, Fury Sylph Barrena, Fury Sylph Labido, Fury Sylph Purka, Fury Kerberos Leger, and Fury Kerberos Nero</font>, and put them to rest.<br>
As evidence, please bring back <font color="LEVEL">6 Mutated Spirit's Souls</font>. It should be manageable.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Sporcha:<br>
Go to the <font color="LEVEL">Garden of Spirits</font> and defeat all type monsters until you collect <font color="LEVEL">3 Mutated Spirit's Souls</font>.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Sporcha:<br>
Go to the <font color="LEVEL">Garden of Spirits</font> and defeat all type monsters until you collect <font color="LEVEL">6 Mutated Spirit's Souls</font>.
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Sporcha:<br>
Toy have collected all of the Mutated Spirit's Souls. You have completed the mission successfully.<br>
I would like to congratulate you on completing the mission. Here's your reward. If you have a Faction Amity Token, I can give You more rewards.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00930_DisparagingThePhantoms 34230-10.html">"I did my best to earn your trust."</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Sporcha:<br>
Here is your reward. This will also help to improve the trust between you and us at the Unworldly Visitors.<br>
As long as you don't forget us, that is. We thank you for your hard work.
</body></html>

View File

@ -0,0 +1,358 @@
/*
* 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.Q00930_DisparagingThePhantoms;
import java.util.HashSet;
import java.util.Set;
import org.l2jmobius.Config;
import org.l2jmobius.commons.util.CommonUtil;
import org.l2jmobius.gameserver.enums.Faction;
import org.l2jmobius.gameserver.enums.QuestSound;
import org.l2jmobius.gameserver.enums.QuestType;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.NpcLogListHolder;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState;
import org.l2jmobius.gameserver.model.quest.State;
import quests.Q10457_KefensisIllusion.Q10457_KefensisIllusion;
/**
* Disparaging the Phantoms (930)
* @URL https://l2wiki.com/Disparaging_the_Phantoms
* @author Dmitri
*/
public class Q00930_DisparagingThePhantoms extends Quest
{
// NPCs
private static final int SPORCHA = 34230;
// Monsters
private static final int VIPER = 23389;
private static final int VIPER_CHERKIA = 23796;
private static final int SMAUG = 23384;
private static final int LUNATIKAN = 23385;
private static final int JABBERWOK = 23386;
private static final int KANZAROTH = 23387;
private static final int KANDILOTH = 23388;
private static final int GARION = 23395;
private static final int GARION_NETI = 23396;
private static final int DESERT_WENDIGO = 23397;
private static final int KORAZA = 23398;
private static final int BEND_BEETLE = 23399;
private static final int[] VIPE =
{
23389, // Viper
23796, // Viper Cherkia
};
// Items Rewards
private static final int BASIC_SUPPLY_BOX = 47356; // Basic Supply Box Blackbird Clan
private static final int INTERMEDIATE_SUPPLY_BOX = 47357; // Intermediate Supply Box Blackbird Clan
private static final int ADVANCED_SUPPLY_BOX = 47358; // Advanced Supply Box Blackbird Clan
// Misc
private static final int MIN_LEVEL = 99;
public Q00930_DisparagingThePhantoms()
{
super(930);
addStartNpc(SPORCHA);
addTalkId(SPORCHA);
addKillId(VIPE);
addKillId(VIPER, VIPER_CHERKIA, SMAUG, LUNATIKAN, JABBERWOK, KANZAROTH, KANDILOTH, GARION, GARION_NETI, DESERT_WENDIGO, KORAZA, BEND_BEETLE);
addCondMinLevel(MIN_LEVEL, "34230-00.htm");
addCondCompletedQuest(Q10457_KefensisIllusion.class.getSimpleName(), "34230-00.htm");
addFactionLevel(Faction.BLACKBIRD_CLAN, 4, "34230-00.htm");
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
String htmltext = null;
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return htmltext;
}
switch (event)
{
case "34230-02.htm":
case "34230-03.htm":
case "34230-04.htm":
case "34230-04a.htm":
case "34230-06.html":
case "34230-06a.html":
{
htmltext = event;
break;
}
case "select_mission":
{
qs.startQuest();
if (player.getFactionLevel(Faction.BLACKBIRD_CLAN) < 5)
{
htmltext = "34230-04a.htm";
break;
}
htmltext = "34230-04.htm";
break;
}
case "return":
{
if (player.getFactionLevel(Faction.BLACKBIRD_CLAN) < 5)
{
htmltext = "34230-04a.htm";
break;
}
htmltext = "34230-04.htm";
break;
}
case "34230-07.html":
{
qs.setCond(2, true);
htmltext = event;
break;
}
case "34230-07a.html":
{
qs.setCond(3, true);
htmltext = event;
break;
}
case "34230-10.html":
{
final int chance = getRandom(100);
switch (qs.getCond())
{
case 4:
{
if (player.getLevel() >= MIN_LEVEL)
{
if (chance < 2)
{
giveItems(player, ADVANCED_SUPPLY_BOX, 1);
}
else if (chance < 20)
{
giveItems(player, INTERMEDIATE_SUPPLY_BOX, 1);
}
else if (chance < 100)
{
giveItems(player, BASIC_SUPPLY_BOX, 1);
}
addExpAndSp(player, 12113489880L, 12113460);
addFactionPoints(player, Faction.BLACKBIRD_CLAN, 100);
qs.exitQuest(QuestType.DAILY, true);
htmltext = event;
}
else
{
htmltext = getNoQuestLevelRewardMsg(player);
}
break;
}
case 5:
{
if (player.getLevel() >= MIN_LEVEL)
{
if (chance < 2)
{
giveItems(player, ADVANCED_SUPPLY_BOX, 1);
}
else if (chance < 20)
{
giveItems(player, BASIC_SUPPLY_BOX, 1);
}
else if (chance < 100)
{
giveItems(player, INTERMEDIATE_SUPPLY_BOX, 1);
}
addExpAndSp(player, 24226979760L, 24226920);
addFactionPoints(player, Faction.BLACKBIRD_CLAN, 200);
qs.exitQuest(QuestType.DAILY, true);
htmltext = event;
}
else
{
htmltext = getNoQuestLevelRewardMsg(player);
}
break;
}
}
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:
{
htmltext = "34230-01.htm";
}
case State.STARTED:
{
switch (qs.getCond())
{
case 1:
{
if (player.getFactionLevel(Faction.BLACKBIRD_CLAN) < 5)
{
htmltext = "34230-04a.htm";
break;
}
htmltext = "34230-04.htm";
break;
}
case 2:
{
htmltext = "34230-08.html";
break;
}
case 3:
{
htmltext = "34230-08a.html";
break;
}
case 4:
case 5:
{
htmltext = "34230-09.html";
break;
}
}
break;
}
case State.COMPLETED:
{
if (!qs.isNowAvailable())
{
htmltext = getAlreadyCompletedMsg(player, QuestType.DAILY);
}
else
{
qs.setState(State.CREATED);
htmltext = "34230-01.htm";
}
break;
}
}
return htmltext;
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final QuestState qs = getQuestState(killer, false);
if ((qs != null) && (qs.getCond() > 1) && killer.isInsideRadius3D(npc, Config.ALT_PARTY_RANGE))
{
switch (npc.getId())
{
case SMAUG:
case LUNATIKAN:
case JABBERWOK:
case KANZAROTH:
case KANDILOTH:
case GARION:
case GARION_NETI:
case DESERT_WENDIGO:
case KORAZA:
case BEND_BEETLE:
{
if (getRandom(100) < 25)
{
final Npc mob = addSpawn(VIPER, npc.getX(), npc.getY(), npc.getZ(), 0, true, 120000);
addAttackPlayerDesire(mob, killer, 5);
}
else if (getRandom(100) < 25)
{
final Npc mob = addSpawn(VIPER_CHERKIA, npc.getX(), npc.getY(), npc.getZ(), 0, true, 120000);
addAttackPlayerDesire(mob, killer, 5);
}
break;
}
case VIPER:
case VIPER_CHERKIA:
{
int killedViper = qs.getInt("killed_" + VIPE[0]);
switch (qs.getCond())
{
case 2:
{
if (CommonUtil.contains(VIPE, npc.getId()))
{
if ((killedViper < 3) && (getRandom(100) < 25))
{
killedViper++;
qs.set("killed_" + VIPE[0], killedViper);
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
}
if (killedViper == 3)
{
qs.setCond(4, true);
}
break;
}
}
case 3:
{
if (CommonUtil.contains(VIPE, npc.getId()))
{
if ((killedViper < 6) && (getRandom(100) < 25))
{
killedViper++;
qs.set("killed_" + VIPE[0], killedViper);
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
}
if (killedViper == 6)
{
qs.setCond(5, true);
}
break;
}
}
}
break;
}
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public Set<NpcLogListHolder> getNpcLogList(PlayerInstance player)
{
final QuestState qs = getQuestState(player, false);
if ((qs != null) && (qs.getCond() > 1))
{
final Set<NpcLogListHolder> npcLogList = new HashSet<>();
npcLogList.add(new NpcLogListHolder(VIPE[0], false, qs.getInt("killed_" + VIPE[0])));
return npcLogList;
}
return super.getNpcLogList(player);
}
}

View File

@ -190,6 +190,7 @@ import quests.Q00792_TheSuperionGiants.Q00792_TheSuperionGiants;
import quests.Q00816_PlansToRepairTheStronghold.Q00816_PlansToRepairTheStronghold;
import quests.Q00817_BlackAteliaResearch.Q00817_BlackAteliaResearch;
import quests.Q00823_DisappearedRaceNewFairy.Q00823_DisappearedRaceNewFairy;
import quests.Q00824_AttackTheCommandPost.Q00824_AttackTheCommandPost;
import quests.Q00826_InSearchOfTheSecretWeapon.Q00826_InSearchOfTheSecretWeapon;
import quests.Q00827_EinhasadsOrder.Q00827_EinhasadsOrder;
import quests.Q00828_EvasBlessing.Q00828_EvasBlessing;
@ -212,6 +213,7 @@ import quests.Q00923_ShinedustExtraction.Q00923_ShinedustExtraction;
import quests.Q00924_GiantOfTheRestorationRoom.Q00924_GiantOfTheRestorationRoom;
import quests.Q00926_30DaySearchOperation.Q00926_30DaySearchOperation;
import quests.Q00928_100DaySubjugationOperation.Q00928_100DaySubjugationOperation;
import quests.Q00930_DisparagingThePhantoms.Q00930_DisparagingThePhantoms;
import quests.Q00931_MemoriesOfTheWind.Q00931_MemoriesOfTheWind;
import quests.Q00932_SayhasEnergy.Q00932_SayhasEnergy;
import quests.Q00937_ToReviveTheFishingGuild.Q00937_ToReviveTheFishingGuild;
@ -499,7 +501,6 @@ import quests.not_done.Q00780_UtilizeTheDarknessSeedOfInfinity;
import quests.not_done.Q00781_UtilizeTheDarknessSeedOfAnnihilation;
import quests.not_done.Q00782_UtilizeTheDarknessSeedOfHellfire;
import quests.not_done.Q00789_WaitingForPaagrio;
import quests.not_done.Q00824_AttackTheCommandPost;
import quests.not_done.Q00836_RequestFromTheBlackbirdClan;
import quests.not_done.Q00837_RequestFromTheGiantTrackers;
import quests.not_done.Q00838_RequestFromTheMotherTreeGuardians;
@ -514,7 +515,6 @@ import quests.not_done.Q00912_RedLibraRequestLv3;
import quests.not_done.Q00913_RedLibraRequestLv4;
import quests.not_done.Q00914_RedLibraRequestLv5;
import quests.not_done.Q00929_SeekerRescue;
import quests.not_done.Q00930_DisparagingThePhantoms;
import quests.not_done.Q00938_TheFishermansOtherHobby;
import quests.not_done.Q10298_WastelandQueen;
import quests.not_done.Q10357_AltarOfBloodThatAwakensDestruction;
@ -725,7 +725,7 @@ public class QuestMasterHandler
Q00816_PlansToRepairTheStronghold.class,
Q00817_BlackAteliaResearch.class,
Q00823_DisappearedRaceNewFairy.class,
Q00824_AttackTheCommandPost.class, // TODO: Not done.
Q00824_AttackTheCommandPost.class,
Q00826_InSearchOfTheSecretWeapon.class,
Q00827_EinhasadsOrder.class,
Q00828_EvasBlessing.class,
@ -762,7 +762,7 @@ public class QuestMasterHandler
Q00926_30DaySearchOperation.class,
Q00928_100DaySubjugationOperation.class,
Q00929_SeekerRescue.class, // TODO: Not done.
Q00930_DisparagingThePhantoms.class, // TODO: Not done.
Q00930_DisparagingThePhantoms.class,
Q00931_MemoriesOfTheWind.class,
Q00932_SayhasEnergy.class,
Q00937_ToReviveTheFishingGuild.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 org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.quest.Quest;
/**
* @author Mobius
*/
public class Q00824_AttackTheCommandPost extends Quest
{
private static final int START_NPC = 34089;
public Q00824_AttackTheCommandPost()
{
super(824);
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 org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.quest.Quest;
/**
* @author Mobius
*/
public class Q00930_DisparagingThePhantoms extends Quest
{
private static final int START_NPC = 34230;
public Q00930_DisparagingThePhantoms()
{
super(930);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
}
}

View File

@ -72,7 +72,6 @@
809 Hunter Guild Request - The Immortal Plateau
810 Hunter Guild Request - Isle of Souls
811 Hunter Guild Request - Cemetery
824 Attack the Command Post
825 Hunter Guild Request - Valley of Saints
832 Hunter Guild Request - Southern Region, Isle of Prayer
834 Against Dragonclaw
@ -98,10 +97,8 @@
922 Hunter Guild Request - Northern Region, Isle of Prayer
925 Hunter Guild Request - Garden of Spirits
929 Seeker Rescue
930 Disparaging the Phantoms
938 The Fisherman's Other Hobby
940 Hunter Guild Request - Atelia Fortress
985 Adventure Guild's Special Request - Lv1
986 Adventure Guild's Special Request - Lv. 2
987 Adventure Guild's Special Request - Lv. 3
988 Adventure Guild's Special Request - Lv. 4

View File

@ -0,0 +1,5 @@
<html><body>Elikia:<br>
Did you kill Burnshine?<br>
You ruined Burnshine designs...<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00824_AttackTheCommandPost 34057-07.html">"I figured out Burnshine"</Button>
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Elikia:<br>
Good job. This will help the Adventure Guild take the lead.
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Penny<br>
I don't know where you heard it, but the guild has decided to assign it to a more reliable guild member. Let's talk later when we trust each other more.<br>
(Only characters with Lv. 100+.)
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Devianne:<br>
Have you seen? If not, it's okay.<br>
Bershtein went on the run, and the gate to the Legion Headquarters opened. Good or bad, I don't know, but the main task has been completed.<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00824_AttackTheCommandPost 34089-02.htm">Ask about the gate</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Devianne:<br>
It is these gates that do not allow us to find out what is happening inside the Headquarters of the Legion.<br>
Only Bershtein can open them, and while he is inside the headquarters, they cannot be opened from the outside. The only possibility is the moment when Bershtein enters the Legion Headquarters. But this happens almost instantly. It is necessary to somehow hold the gates so that they do not close immediately.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00824_AttackTheCommandPost 34089-03.htm">"keep going"</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Devianne:<br>
The gates can be kept open briefly with the help of magic. That's what I'm doing.<br>
It is impossible to fix the gates for a long time, and I can't take a single step, I keep them. Also, if Bernstein finds out, there will be big problems. As soon as I feel that he is going into the fortress, I am forced to drop everything and hide. But Bernstein, whom we want to destroy, is very dangerous.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00824_AttackTheCommandPost 34089-04.htm">How can I help you?</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Devianne:<br>
Yes. I need help. The last time the gates opened, Aden Vanguard detachment burst into the Legion Headquarters, but so far there has been no news from them.<br>
While I will keep the gate, enter the Legion Headquarters, find the Aden Vanguard Members and destroy Bernstein. Don't worry: even if the gate closes, you will be able to get out.<br>
After you deal with Burnshine, report this to Elric.
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Devianne:<br>
Yes. I need help. The last time the gates opened, Aden Vanguard detachment burst into the Legion Headquarters, but so far there has been no news from them.<br>
While I will keep the gate, enter the Legion Headquarters, find the Aden Vanguard Members and destroy Bernstein. Don't worry: even if the gate closes, you will be able to get out.<br>
After you deal with Burnshine, report this to Elric.
</body></html>

View File

@ -0,0 +1,161 @@
/*
* 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.Q00824_AttackTheCommandPost;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.QuestType;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState;
import org.l2jmobius.gameserver.model.quest.State;
/**
* Command Post Raid (824)
* @URL https://l2wiki.com/Command_Post_Raid
* @author Dmitri
*/
public class Q00824_AttackTheCommandPost extends Quest
{
// NPCs
private static final int DEVIANNE = 34089;
private static final int ELIKIA = 34057;
// RaidBosses
private static final int BURNSTEIN = 26136;
// Rewards
private static final int ADEN_VANGUARD_SUPPLY_BOX = 46283;
// Misc
private static final int MIN_LEVEL = 100;
public Q00824_AttackTheCommandPost()
{
super(824);
addStartNpc(DEVIANNE);
addTalkId(DEVIANNE, ELIKIA);
addKillId(BURNSTEIN);
addCondMinLevel(MIN_LEVEL, "34089-00.htm");
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
String htmltext = null;
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return htmltext;
}
switch (event)
{
case "34089-02.htm":
case "34089-03.htm":
{
htmltext = event;
break;
}
case "34089-04.htm":
{
qs.startQuest();
htmltext = event;
break;
}
case "34057-07.html":
{
// Rewards
giveItems(player, ADEN_VANGUARD_SUPPLY_BOX, 1);
addExpAndSp(player, 3954960000L, 9491880);
qs.exitQuest(QuestType.DAILY, 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() == DEVIANNE)
{
htmltext = "34089-01.htm";
}
break;
}
case State.STARTED:
{
switch (npc.getId())
{
case DEVIANNE:
{
if (qs.isCond(1))
{
htmltext = "34089-05.html";
}
break;
}
case ELIKIA:
{
if (qs.isCond(2))
{
htmltext = "34057-06.html";
}
break;
}
}
break;
}
case State.COMPLETED:
{
if (qs.isNowAvailable())
{
qs.setState(State.CREATED);
htmltext = "34089-01.htm";
}
else
{
htmltext = getAlreadyCompletedMsg(player, QuestType.DAILY);
}
break;
}
}
return htmltext;
}
@Override
public String onKill(Npc npc, PlayerInstance player, boolean isSummon)
{
executeForEachPlayer(player, npc, isSummon, true, false);
return super.onKill(npc, player, isSummon);
}
@Override
public void actionForEachPlayer(PlayerInstance player, Npc npc, boolean isSummon)
{
final QuestState qs = getQuestState(player, false);
if ((qs != null) && qs.isCond(1) && player.isInsideRadius3D(npc, Config.ALT_PARTY_RANGE))
{
qs.setCond(2, true);
}
}
}

View File

@ -0,0 +1,5 @@
<html><body>Sporcha:<br>
The Enchanted Valley has changed, so it's very dangerous.<br>
I don't think you are supposed to be here yet. Come back when you get stronger.<br>
(Only characters above Lv. 99+ and Complete: Kefensis' Illusion and Blackbird Clan amity level 4 and above.)
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Sporcha:<br>
Ah, adventurer! There you are again. How about helping us some more? if you do, you can deepen the mutual trust with us and Ferin.<br>
What do you say? if you don't remember what to do, I can tell you again.
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00930_DisparagingThePhantoms 34230-02.htm">"Please tell me again."</Button>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00930_DisparagingThePhantoms select_mission">"I know what I should do."</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Sporcha:<br>
We've begun an investigation in the Garden of Spirits starting from here. However, we are being threatened by the spirits there, so something must be done.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00930_DisparagingThePhantoms 34230-03.htm">"What is it you need to do?"</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Sporcha:<br>
We know of a way to defeat those spirits, at least temporarily. This way, we'll be able to put the spirits at rest, even if it's just for a little while.<br>
Of course, we will give you a reward for your help. And there is one more thing. While you are helping us, you'll build trust with us. The more we trust you, the more rewards we will give you, and there are some secret missions that we only give to those we trust.<br>
That's about it.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00930_DisparagingThePhantoms select_mission">"Yes, sure."</Button>
</body></html>

View File

@ -0,0 +1,7 @@
<html><body>Sporcha:<br>
Good. Let me tell you what to do. Just choose the mission that you are capable of doing.<br>
Basic Mission - Collect <font color="LEVEL">3</font> Mutated Spirit's Souls.<br1>
Intermediate Mission - Collect <font color="LEVEL">6</font> Mutated Spirit's Souls.<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00930_DisparagingThePhantoms 34230-06.html">"I'll take the basic mission."</Button>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00930_DisparagingThePhantoms 34230-05.html"><font color="A62F31">"I'll take the intermediate mission."</font></Button>
</body></html>

View File

@ -0,0 +1,7 @@
<html><body>Sporcha:<br>
Good. Let me tell you what to do. Just choose the mission that you are capable of doing.<br>
Basic Mission - Collect <font color="LEVEL">3</font> Mutated Spirit's Souls.<br1>
Intermediate Mission - Collect <font color="LEVEL">6</font> Mutated Spirit's Souls.<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00930_DisparagingThePhantoms 34230-06.html">"I'll take the basic mission."</Button>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00930_DisparagingThePhantoms 34230-06a.html">"I'll take the intermediate mission."</Button>
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Sporcha:<br>
Your Unworldly Visitors Faction Level Must be 5 or above may undertake this mission.
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Sporcha:<br>
You have chosen the basic mission to collect 3 Mutated Spirit's Souls. Once you have selected the difficulty of the mission, you must meet the requirements in order to complete it. Choose wisely.<br>
Are you sure you want to proceed with this mission?<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00930_DisparagingThePhantoms 34230-07.html">"Yes, I've made my decision."</Button>
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest Q00930_DisparagingThePhantoms return">"Let me reconsider."</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Sporcha:<br>
You have chosen the intermediate mission to collect 6 Mutated Spirit's Souls. Once you have selected the difficulty of the mission, you must meet the requirements in order to complete it. Choose wisely.<br>
Are you sure you want to proceed with this mission?<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Q00930_DisparagingThePhantoms 34230-07a.html">"Yes, I've made my decision."</Button>
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Q00930_DisparagingThePhantoms return">"Let me reconsider."</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Sporcha:<br>
Good. Left me explain the details. Go to the <font color="LEVEL">Garden of Spirits</font>, defeat the <font color="LEVEL">Kerberos Lager, Kerberos Fort, Kerberos Nero, Fury Sylph Barrena, Fury Sylph Labido, Fury Sylph Purka, Fury Kerberos Leger, and Fury Kerberos Nero</font>, and put them to rest.<br>
As evidence, please bring back <font color="LEVEL">3 Mutated Spirit's Souls</font>. It should be manageable.
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Sporcha:<br>
Good. Left me explain the details. Go to the <font color="LEVEL">Garden of Spirits</font>, defeat the <font color="LEVEL">Kerberos Lager, Kerberos Fort, Kerberos Nero, Fury Sylph Barrena, Fury Sylph Labido, Fury Sylph Purka, Fury Kerberos Leger, and Fury Kerberos Nero</font>, and put them to rest.<br>
As evidence, please bring back <font color="LEVEL">6 Mutated Spirit's Souls</font>. It should be manageable.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Sporcha:<br>
Go to the <font color="LEVEL">Garden of Spirits</font> and defeat all type monsters until you collect <font color="LEVEL">3 Mutated Spirit's Souls</font>.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Sporcha:<br>
Go to the <font color="LEVEL">Garden of Spirits</font> and defeat all type monsters until you collect <font color="LEVEL">6 Mutated Spirit's Souls</font>.
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Sporcha:<br>
Toy have collected all of the Mutated Spirit's Souls. You have completed the mission successfully.<br>
I would like to congratulate you on completing the mission. Here's your reward. If you have a Faction Amity Token, I can give You more rewards.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00930_DisparagingThePhantoms 34230-10.html">"I did my best to earn your trust."</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Sporcha:<br>
Here is your reward. This will also help to improve the trust between you and us at the Unworldly Visitors.<br>
As long as you don't forget us, that is. We thank you for your hard work.
</body></html>

View File

@ -0,0 +1,358 @@
/*
* 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.Q00930_DisparagingThePhantoms;
import java.util.HashSet;
import java.util.Set;
import org.l2jmobius.Config;
import org.l2jmobius.commons.util.CommonUtil;
import org.l2jmobius.gameserver.enums.Faction;
import org.l2jmobius.gameserver.enums.QuestSound;
import org.l2jmobius.gameserver.enums.QuestType;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.NpcLogListHolder;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState;
import org.l2jmobius.gameserver.model.quest.State;
import quests.Q10457_KefensisIllusion.Q10457_KefensisIllusion;
/**
* Disparaging the Phantoms (930)
* @URL https://l2wiki.com/Disparaging_the_Phantoms
* @author Dmitri
*/
public class Q00930_DisparagingThePhantoms extends Quest
{
// NPCs
private static final int SPORCHA = 34230;
// Monsters
private static final int VIPER = 23389;
private static final int VIPER_CHERKIA = 23796;
private static final int SMAUG = 23384;
private static final int LUNATIKAN = 23385;
private static final int JABBERWOK = 23386;
private static final int KANZAROTH = 23387;
private static final int KANDILOTH = 23388;
private static final int GARION = 23395;
private static final int GARION_NETI = 23396;
private static final int DESERT_WENDIGO = 23397;
private static final int KORAZA = 23398;
private static final int BEND_BEETLE = 23399;
private static final int[] VIPE =
{
23389, // Viper
23796, // Viper Cherkia
};
// Items Rewards
private static final int BASIC_SUPPLY_BOX = 47356; // Basic Supply Box Blackbird Clan
private static final int INTERMEDIATE_SUPPLY_BOX = 47357; // Intermediate Supply Box Blackbird Clan
private static final int ADVANCED_SUPPLY_BOX = 47358; // Advanced Supply Box Blackbird Clan
// Misc
private static final int MIN_LEVEL = 99;
public Q00930_DisparagingThePhantoms()
{
super(930);
addStartNpc(SPORCHA);
addTalkId(SPORCHA);
addKillId(VIPE);
addKillId(VIPER, VIPER_CHERKIA, SMAUG, LUNATIKAN, JABBERWOK, KANZAROTH, KANDILOTH, GARION, GARION_NETI, DESERT_WENDIGO, KORAZA, BEND_BEETLE);
addCondMinLevel(MIN_LEVEL, "34230-00.htm");
addCondCompletedQuest(Q10457_KefensisIllusion.class.getSimpleName(), "34230-00.htm");
addFactionLevel(Faction.BLACKBIRD_CLAN, 4, "34230-00.htm");
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
String htmltext = null;
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return htmltext;
}
switch (event)
{
case "34230-02.htm":
case "34230-03.htm":
case "34230-04.htm":
case "34230-04a.htm":
case "34230-06.html":
case "34230-06a.html":
{
htmltext = event;
break;
}
case "select_mission":
{
qs.startQuest();
if (player.getFactionLevel(Faction.BLACKBIRD_CLAN) < 5)
{
htmltext = "34230-04a.htm";
break;
}
htmltext = "34230-04.htm";
break;
}
case "return":
{
if (player.getFactionLevel(Faction.BLACKBIRD_CLAN) < 5)
{
htmltext = "34230-04a.htm";
break;
}
htmltext = "34230-04.htm";
break;
}
case "34230-07.html":
{
qs.setCond(2, true);
htmltext = event;
break;
}
case "34230-07a.html":
{
qs.setCond(3, true);
htmltext = event;
break;
}
case "34230-10.html":
{
final int chance = getRandom(100);
switch (qs.getCond())
{
case 4:
{
if (player.getLevel() >= MIN_LEVEL)
{
if (chance < 2)
{
giveItems(player, ADVANCED_SUPPLY_BOX, 1);
}
else if (chance < 20)
{
giveItems(player, INTERMEDIATE_SUPPLY_BOX, 1);
}
else if (chance < 100)
{
giveItems(player, BASIC_SUPPLY_BOX, 1);
}
addExpAndSp(player, 12113489880L, 12113460);
addFactionPoints(player, Faction.BLACKBIRD_CLAN, 100);
qs.exitQuest(QuestType.DAILY, true);
htmltext = event;
}
else
{
htmltext = getNoQuestLevelRewardMsg(player);
}
break;
}
case 5:
{
if (player.getLevel() >= MIN_LEVEL)
{
if (chance < 2)
{
giveItems(player, ADVANCED_SUPPLY_BOX, 1);
}
else if (chance < 20)
{
giveItems(player, BASIC_SUPPLY_BOX, 1);
}
else if (chance < 100)
{
giveItems(player, INTERMEDIATE_SUPPLY_BOX, 1);
}
addExpAndSp(player, 24226979760L, 24226920);
addFactionPoints(player, Faction.BLACKBIRD_CLAN, 200);
qs.exitQuest(QuestType.DAILY, true);
htmltext = event;
}
else
{
htmltext = getNoQuestLevelRewardMsg(player);
}
break;
}
}
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:
{
htmltext = "34230-01.htm";
}
case State.STARTED:
{
switch (qs.getCond())
{
case 1:
{
if (player.getFactionLevel(Faction.BLACKBIRD_CLAN) < 5)
{
htmltext = "34230-04a.htm";
break;
}
htmltext = "34230-04.htm";
break;
}
case 2:
{
htmltext = "34230-08.html";
break;
}
case 3:
{
htmltext = "34230-08a.html";
break;
}
case 4:
case 5:
{
htmltext = "34230-09.html";
break;
}
}
break;
}
case State.COMPLETED:
{
if (!qs.isNowAvailable())
{
htmltext = getAlreadyCompletedMsg(player, QuestType.DAILY);
}
else
{
qs.setState(State.CREATED);
htmltext = "34230-01.htm";
}
break;
}
}
return htmltext;
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final QuestState qs = getQuestState(killer, false);
if ((qs != null) && (qs.getCond() > 1) && killer.isInsideRadius3D(npc, Config.ALT_PARTY_RANGE))
{
switch (npc.getId())
{
case SMAUG:
case LUNATIKAN:
case JABBERWOK:
case KANZAROTH:
case KANDILOTH:
case GARION:
case GARION_NETI:
case DESERT_WENDIGO:
case KORAZA:
case BEND_BEETLE:
{
if (getRandom(100) < 25)
{
final Npc mob = addSpawn(VIPER, npc.getX(), npc.getY(), npc.getZ(), 0, true, 120000);
addAttackPlayerDesire(mob, killer, 5);
}
else if (getRandom(100) < 25)
{
final Npc mob = addSpawn(VIPER_CHERKIA, npc.getX(), npc.getY(), npc.getZ(), 0, true, 120000);
addAttackPlayerDesire(mob, killer, 5);
}
break;
}
case VIPER:
case VIPER_CHERKIA:
{
int killedViper = qs.getInt("killed_" + VIPE[0]);
switch (qs.getCond())
{
case 2:
{
if (CommonUtil.contains(VIPE, npc.getId()))
{
if ((killedViper < 3) && (getRandom(100) < 25))
{
killedViper++;
qs.set("killed_" + VIPE[0], killedViper);
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
}
if (killedViper == 3)
{
qs.setCond(4, true);
}
break;
}
}
case 3:
{
if (CommonUtil.contains(VIPE, npc.getId()))
{
if ((killedViper < 6) && (getRandom(100) < 25))
{
killedViper++;
qs.set("killed_" + VIPE[0], killedViper);
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
}
if (killedViper == 6)
{
qs.setCond(5, true);
}
break;
}
}
}
break;
}
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public Set<NpcLogListHolder> getNpcLogList(PlayerInstance player)
{
final QuestState qs = getQuestState(player, false);
if ((qs != null) && (qs.getCond() > 1))
{
final Set<NpcLogListHolder> npcLogList = new HashSet<>();
npcLogList.add(new NpcLogListHolder(VIPE[0], false, qs.getInt("killed_" + VIPE[0])));
return npcLogList;
}
return super.getNpcLogList(player);
}
}

View File

@ -0,0 +1,5 @@
<html><body>Histie:<br>
What brings you to such a dangerous place?<br>
You shouldn't be here. Go back.<br>
(Only characters above Lv. 85-89.)
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Histie:<br>
Huh? Are you an ally?<br>
That seal... Isn't it Elikia's? Well I guess you are an ally.<br>
Did Elikia send you?<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00985_AdventureGuildsSpecialRequestLv1 33946-02.htm">"Yes."</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Histie:<br>
Elikia must have been in a hurry. <br>
Well, I'm doing fine. Of course I didn't completly recover from my time with the Embryo, but I should be able to carry out my revenge soon.<br>
Elise is pretty talented. I was able to recover thanks to her.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00985_AdventureGuildsSpecialRequestLv1 33946-03.htm">"Revenge?"</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Histie:<br>
Why are you talking to me?<br>
I don't know you... Don't you even try to trick me.<br>
(Quest may only be undertaken by characters with the Blackbird Seal.)
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00985_AdventureGuildsSpecialRequestLv1 33946-04.htm">"Revenge?"</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Histie:<br>
We have to get our revenge!<br>
They dared set up a trap for me, and made me rely on Elise! Unforgivable!<br>
Won't you help me get my revenge?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00985_AdventureGuildsSpecialRequestLv1 33946-05.htm">"How can I help?"</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Histie:<br>
Travelers Guild asks to destroy monsters in the Blood Marsh and on the Altar of Evil.<br>
Hunting objectives: all monsters in these locations.<br>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Histie:<br>
Travelers Guild asks to destroy <font color="LEVEL">200</font> monsters in the Blood Marsh and on the Altar of Evil.<br>
Hunting objectives: all monsters in these locations.
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Histie:<br>
Not enough. You think this is enough to honor our name?<br>
Kill <font color="LEVEL">200 Atelia Passionate Soldiers, Atelia Elite Captains, Atelia High Pirests, and Fortress Dark Wizards</font>.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00985_AdventureGuildsSpecialRequestLv1 33946-08.html">"I know."</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Histie:<br>
Already done? Great!<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00985_AdventureGuildsSpecialRequestLv1 33946-09.html">"I know."</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Histie:<br>
Great! No wonder Elikia sent you here.<br>
But this isn't enough. I'll stay here until I'm satisfied. Elikia and Leona might be worried about me, so can you tell them I'm alright? Here's a letter. They'll know I'm safe with this.
</body></html>

View File

@ -0,0 +1,179 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package quests.Q00985_AdventureGuildsSpecialRequestLv1;
import java.util.HashSet;
import java.util.Set;
import org.l2jmobius.gameserver.enums.QuestSound;
import org.l2jmobius.gameserver.enums.QuestType;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.NpcLogListHolder;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState;
import org.l2jmobius.gameserver.model.quest.State;
import org.l2jmobius.gameserver.network.NpcStringId;
/**
* Adventure Guilds Special Request Lv1 (985)
* @author Dmitri
*/
public class Q00985_AdventureGuildsSpecialRequestLv1 extends Quest
{
// NPCs
private static final int ADVENTURE_GUILDSMAN = 33946;
// Monsters
private static final int[] MONSTERS =
{
24458, // Vampire Swamp Warrior
24457, // Swamp Vampire Rogue
24460, // Swamp Vampire Shooter
24459, // Swamp Vampire Wizard
24454, // Berserker of Fate
24455, // Prophet of Doom
24453, // Servant of Fate
24452, // Soldier of Fate
};
// Misc
private static final int MIN_LEVEL = 85;
private static final int MAX_LEVEL = 89;
private static final boolean PARTY_QUEST = true;
// Reward
private static final int RUNE_WIND_RESISTANCE_RING = 14599;
public Q00985_AdventureGuildsSpecialRequestLv1()
{
super(985);
addStartNpc(ADVENTURE_GUILDSMAN);
addTalkId(ADVENTURE_GUILDSMAN);
addKillId(MONSTERS);
addCondLevel(MIN_LEVEL, MAX_LEVEL, "33946-00.htm");
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
String htmltext = null;
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return htmltext;
}
switch (event)
{
case "33946-02.htm":
case "33946-03.htm":
case "33946-04.htm":
case "33946-08.html":
{
htmltext = event;
break;
}
case "33946-05.htm":
{
qs.startQuest();
htmltext = event;
break;
}
case "33946-09.html":
{
giveItems(player, RUNE_WIND_RESISTANCE_RING, 1);
addExpAndSp(player, 2108117571L, 2529741);
qs.exitQuest(QuestType.DAILY, 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:
{
htmltext = "33946-01.htm";
break;
}
case State.STARTED:
{
if (qs.isCond(1))
{
htmltext = "33946-06.html";
}
else
{
htmltext = "33946-07.html";
}
break;
}
case State.COMPLETED:
{
if (qs.isNowAvailable())
{
qs.setState(State.CREATED);
htmltext = "33946-01.htm";
}
else
{
htmltext = getAlreadyCompletedMsg(player, QuestType.DAILY);
}
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(1))
{
final int killedGhosts = qs.getInt("AncientGhosts") + 1;
qs.set("AncientGhosts", killedGhosts);
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
if (killedGhosts >= 200)
{
qs.setCond(2, 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(1))
{
final Set<NpcLogListHolder> holder = new HashSet<>();
holder.add(new NpcLogListHolder(NpcStringId.DEFEAT_MONSTER.getId(), true, qs.getInt("AncientGhosts")));
return holder;
}
return super.getNpcLogList(player);
}
}

View File

@ -198,6 +198,7 @@ import quests.Q00792_TheSuperionGiants.Q00792_TheSuperionGiants;
import quests.Q00816_PlansToRepairTheStronghold.Q00816_PlansToRepairTheStronghold;
import quests.Q00817_BlackAteliaResearch.Q00817_BlackAteliaResearch;
import quests.Q00823_DisappearedRaceNewFairy.Q00823_DisappearedRaceNewFairy;
import quests.Q00824_AttackTheCommandPost.Q00824_AttackTheCommandPost;
import quests.Q00826_InSearchOfTheSecretWeapon.Q00826_InSearchOfTheSecretWeapon;
import quests.Q00827_EinhasadsOrder.Q00827_EinhasadsOrder;
import quests.Q00828_EvasBlessing.Q00828_EvasBlessing;
@ -218,9 +219,11 @@ import quests.Q00923_ShinedustExtraction.Q00923_ShinedustExtraction;
import quests.Q00924_GiantOfTheRestorationRoom.Q00924_GiantOfTheRestorationRoom;
import quests.Q00926_30DaySearchOperation.Q00926_30DaySearchOperation;
import quests.Q00928_100DaySubjugationOperation.Q00928_100DaySubjugationOperation;
import quests.Q00930_DisparagingThePhantoms.Q00930_DisparagingThePhantoms;
import quests.Q00931_MemoriesOfTheWind.Q00931_MemoriesOfTheWind;
import quests.Q00932_SayhasEnergy.Q00932_SayhasEnergy;
import quests.Q00937_ToReviveTheFishingGuild.Q00937_ToReviveTheFishingGuild;
import quests.Q00985_AdventureGuildsSpecialRequestLv1.Q00985_AdventureGuildsSpecialRequestLv1;
import quests.Q10273_GoodDayToFly.Q10273_GoodDayToFly;
import quests.Q10274_CollectingInTheAir.Q10274_CollectingInTheAir;
import quests.Q10275_ContainingTheAttributePower.Q10275_ContainingTheAttributePower;
@ -510,7 +513,6 @@ import quests.not_done.Q00780_UtilizeTheDarknessSeedOfInfinity;
import quests.not_done.Q00781_UtilizeTheDarknessSeedOfAnnihilation;
import quests.not_done.Q00782_UtilizeTheDarknessSeedOfHellfire;
import quests.not_done.Q00789_WaitingForPaagrio;
import quests.not_done.Q00824_AttackTheCommandPost;
import quests.not_done.Q00836_RequestFromTheBlackbirdClan;
import quests.not_done.Q00837_RequestFromTheGiantTrackers;
import quests.not_done.Q00838_RequestFromTheMotherTreeGuardians;
@ -520,8 +522,6 @@ import quests.not_done.Q00841_ContaminationContainment;
import quests.not_done.Q00843_GiantEvolutionControl;
import quests.not_done.Q00846_BuildingUpStrength;
import quests.not_done.Q00929_SeekerRescue;
import quests.not_done.Q00930_DisparagingThePhantoms;
import quests.not_done.Q00985_AdventureGuildsSpecialRequestLv1;
import quests.not_done.Q00986_AdventureGuildsSpecialRequestLv2;
import quests.not_done.Q00987_AdventureGuildsSpecialRequestLv3;
import quests.not_done.Q00988_AdventureGuildsSpecialRequestLv4;
@ -753,7 +753,7 @@ public class QuestMasterHandler
Q00816_PlansToRepairTheStronghold.class,
Q00817_BlackAteliaResearch.class,
Q00823_DisappearedRaceNewFairy.class,
Q00824_AttackTheCommandPost.class, // TODO: Not done.
Q00824_AttackTheCommandPost.class,
Q00826_InSearchOfTheSecretWeapon.class,
Q00827_EinhasadsOrder.class,
Q00828_EvasBlessing.class,
@ -783,11 +783,11 @@ public class QuestMasterHandler
Q00926_30DaySearchOperation.class,
Q00928_100DaySubjugationOperation.class,
Q00929_SeekerRescue.class, // TODO: Not done.
Q00930_DisparagingThePhantoms.class, // TODO: Not done.
Q00930_DisparagingThePhantoms.class,
Q00931_MemoriesOfTheWind.class,
Q00932_SayhasEnergy.class,
Q00937_ToReviveTheFishingGuild.class,
Q00985_AdventureGuildsSpecialRequestLv1.class, // TODO: Not done.
Q00985_AdventureGuildsSpecialRequestLv1.class,
Q00986_AdventureGuildsSpecialRequestLv2.class, // TODO: Not done.
Q00987_AdventureGuildsSpecialRequestLv3.class, // TODO: Not done.
Q00988_AdventureGuildsSpecialRequestLv4.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 org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.quest.Quest;
/**
* @author Mobius
*/
public class Q00824_AttackTheCommandPost extends Quest
{
private static final int START_NPC = 34089;
public Q00824_AttackTheCommandPost()
{
super(824);
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 org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.quest.Quest;
/**
* @author Mobius
*/
public class Q00930_DisparagingThePhantoms extends Quest
{
private static final int START_NPC = 34230;
public Q00930_DisparagingThePhantoms()
{
super(930);
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 org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.quest.Quest;
/**
* @author Mobius
*/
public class Q00985_AdventureGuildsSpecialRequestLv1 extends Quest
{
private static final int START_NPC = 33946;
public Q00985_AdventureGuildsSpecialRequestLv1()
{
super(985);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
}
}

View File

@ -77,7 +77,6 @@
809 Hunter Guild Request - The Immortal Plateau
810 Hunter Guild Request - Isle of Souls
811 Hunter Guild Request - Cemetery
824 Attack the Command Post
825 Hunter Guild Request - Valley of Saints
832 Hunter Guild Request - Southern Region, Isle of Prayer
834 Against Dragonclaw
@ -103,10 +102,8 @@
922 Hunter Guild Request - Northern Region, Isle of Prayer
925 Hunter Guild Request - Garden of Spirits
929 Seeker Rescue
930 Disparaging the Phantoms
938 The Fisherman's Other Hobby
940 Hunter Guild Request - Atelia Fortress
985 Adventure Guild's Special Request - Lv1
986 Adventure Guild's Special Request - Lv. 2
987 Adventure Guild's Special Request - Lv. 3
988 Adventure Guild's Special Request - Lv. 4

View File

@ -0,0 +1,5 @@
<html><body>Elikia:<br>
Did you kill Burnshine?<br>
You ruined Burnshine designs...<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00824_AttackTheCommandPost 34057-07.html">"I figured out Burnshine"</Button>
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Elikia:<br>
Good job. This will help the Adventure Guild take the lead.
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Penny<br>
I don't know where you heard it, but the guild has decided to assign it to a more reliable guild member. Let's talk later when we trust each other more.<br>
(Only characters with Lv. 100+.)
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Devianne:<br>
Have you seen? If not, it's okay.<br>
Bershtein went on the run, and the gate to the Legion Headquarters opened. Good or bad, I don't know, but the main task has been completed.<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00824_AttackTheCommandPost 34089-02.htm">Ask about the gate</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Devianne:<br>
It is these gates that do not allow us to find out what is happening inside the Headquarters of the Legion.<br>
Only Bershtein can open them, and while he is inside the headquarters, they cannot be opened from the outside. The only possibility is the moment when Bershtein enters the Legion Headquarters. But this happens almost instantly. It is necessary to somehow hold the gates so that they do not close immediately.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00824_AttackTheCommandPost 34089-03.htm">"keep going"</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Devianne:<br>
The gates can be kept open briefly with the help of magic. That's what I'm doing.<br>
It is impossible to fix the gates for a long time, and I can't take a single step, I keep them. Also, if Bernstein finds out, there will be big problems. As soon as I feel that he is going into the fortress, I am forced to drop everything and hide. But Bernstein, whom we want to destroy, is very dangerous.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00824_AttackTheCommandPost 34089-04.htm">How can I help you?</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Devianne:<br>
Yes. I need help. The last time the gates opened, Aden Vanguard detachment burst into the Legion Headquarters, but so far there has been no news from them.<br>
While I will keep the gate, enter the Legion Headquarters, find the Aden Vanguard Members and destroy Bernstein. Don't worry: even if the gate closes, you will be able to get out.<br>
After you deal with Burnshine, report this to Elric.
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Devianne:<br>
Yes. I need help. The last time the gates opened, Aden Vanguard detachment burst into the Legion Headquarters, but so far there has been no news from them.<br>
While I will keep the gate, enter the Legion Headquarters, find the Aden Vanguard Members and destroy Bernstein. Don't worry: even if the gate closes, you will be able to get out.<br>
After you deal with Burnshine, report this to Elric.
</body></html>

View File

@ -0,0 +1,161 @@
/*
* 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.Q00824_AttackTheCommandPost;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.QuestType;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState;
import org.l2jmobius.gameserver.model.quest.State;
/**
* Command Post Raid (824)
* @URL https://l2wiki.com/Command_Post_Raid
* @author Dmitri
*/
public class Q00824_AttackTheCommandPost extends Quest
{
// NPCs
private static final int DEVIANNE = 34089;
private static final int ELIKIA = 34057;
// RaidBosses
private static final int BURNSTEIN = 26136;
// Rewards
private static final int ADEN_VANGUARD_SUPPLY_BOX = 46283;
// Misc
private static final int MIN_LEVEL = 100;
public Q00824_AttackTheCommandPost()
{
super(824);
addStartNpc(DEVIANNE);
addTalkId(DEVIANNE, ELIKIA);
addKillId(BURNSTEIN);
addCondMinLevel(MIN_LEVEL, "34089-00.htm");
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
String htmltext = null;
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return htmltext;
}
switch (event)
{
case "34089-02.htm":
case "34089-03.htm":
{
htmltext = event;
break;
}
case "34089-04.htm":
{
qs.startQuest();
htmltext = event;
break;
}
case "34057-07.html":
{
// Rewards
giveItems(player, ADEN_VANGUARD_SUPPLY_BOX, 1);
addExpAndSp(player, 3954960000L, 9491880);
qs.exitQuest(QuestType.DAILY, 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() == DEVIANNE)
{
htmltext = "34089-01.htm";
}
break;
}
case State.STARTED:
{
switch (npc.getId())
{
case DEVIANNE:
{
if (qs.isCond(1))
{
htmltext = "34089-05.html";
}
break;
}
case ELIKIA:
{
if (qs.isCond(2))
{
htmltext = "34057-06.html";
}
break;
}
}
break;
}
case State.COMPLETED:
{
if (qs.isNowAvailable())
{
qs.setState(State.CREATED);
htmltext = "34089-01.htm";
}
else
{
htmltext = getAlreadyCompletedMsg(player, QuestType.DAILY);
}
break;
}
}
return htmltext;
}
@Override
public String onKill(Npc npc, PlayerInstance player, boolean isSummon)
{
executeForEachPlayer(player, npc, isSummon, true, false);
return super.onKill(npc, player, isSummon);
}
@Override
public void actionForEachPlayer(PlayerInstance player, Npc npc, boolean isSummon)
{
final QuestState qs = getQuestState(player, false);
if ((qs != null) && qs.isCond(1) && player.isInsideRadius3D(npc, Config.ALT_PARTY_RANGE))
{
qs.setCond(2, true);
}
}
}

View File

@ -0,0 +1,5 @@
<html><body>Sporcha:<br>
The Enchanted Valley has changed, so it's very dangerous.<br>
I don't think you are supposed to be here yet. Come back when you get stronger.<br>
(Only characters above Lv. 99+ and Complete: Kefensis' Illusion and Blackbird Clan amity level 4 and above.)
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Sporcha:<br>
Ah, adventurer! There you are again. How about helping us some more? if you do, you can deepen the mutual trust with us and Ferin.<br>
What do you say? if you don't remember what to do, I can tell you again.
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00930_DisparagingThePhantoms 34230-02.htm">"Please tell me again."</Button>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00930_DisparagingThePhantoms select_mission">"I know what I should do."</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Sporcha:<br>
We've begun an investigation in the Garden of Spirits starting from here. However, we are being threatened by the spirits there, so something must be done.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00930_DisparagingThePhantoms 34230-03.htm">"What is it you need to do?"</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Sporcha:<br>
We know of a way to defeat those spirits, at least temporarily. This way, we'll be able to put the spirits at rest, even if it's just for a little while.<br>
Of course, we will give you a reward for your help. And there is one more thing. While you are helping us, you'll build trust with us. The more we trust you, the more rewards we will give you, and there are some secret missions that we only give to those we trust.<br>
That's about it.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00930_DisparagingThePhantoms select_mission">"Yes, sure."</Button>
</body></html>

View File

@ -0,0 +1,7 @@
<html><body>Sporcha:<br>
Good. Let me tell you what to do. Just choose the mission that you are capable of doing.<br>
Basic Mission - Collect <font color="LEVEL">3</font> Mutated Spirit's Souls.<br1>
Intermediate Mission - Collect <font color="LEVEL">6</font> Mutated Spirit's Souls.<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00930_DisparagingThePhantoms 34230-06.html">"I'll take the basic mission."</Button>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00930_DisparagingThePhantoms 34230-05.html"><font color="A62F31">"I'll take the intermediate mission."</font></Button>
</body></html>

View File

@ -0,0 +1,7 @@
<html><body>Sporcha:<br>
Good. Let me tell you what to do. Just choose the mission that you are capable of doing.<br>
Basic Mission - Collect <font color="LEVEL">3</font> Mutated Spirit's Souls.<br1>
Intermediate Mission - Collect <font color="LEVEL">6</font> Mutated Spirit's Souls.<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00930_DisparagingThePhantoms 34230-06.html">"I'll take the basic mission."</Button>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00930_DisparagingThePhantoms 34230-06a.html">"I'll take the intermediate mission."</Button>
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Sporcha:<br>
Your Unworldly Visitors Faction Level Must be 5 or above may undertake this mission.
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Sporcha:<br>
You have chosen the basic mission to collect 3 Mutated Spirit's Souls. Once you have selected the difficulty of the mission, you must meet the requirements in order to complete it. Choose wisely.<br>
Are you sure you want to proceed with this mission?<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00930_DisparagingThePhantoms 34230-07.html">"Yes, I've made my decision."</Button>
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest Q00930_DisparagingThePhantoms return">"Let me reconsider."</Button>
</body></html>

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