Addition of quests 10964 and 10965.

Contributed by robikbobik.
This commit is contained in:
MobiusDevelopment 2019-11-23 12:41:55 +00:00
parent 03f4f464b5
commit fe04e93d2e
24 changed files with 529 additions and 10 deletions

View File

@ -21,6 +21,4 @@
10868 The Dark Side of Power
10870 Unfinished Device
10871 Death to the Pirate King!
10960
10964
10965
10960

View File

@ -0,0 +1,5 @@
<html><body>High Priest Raymond:<br>
Please go to the Gorgon Flower Garden and eradicate the <font color=LEVEL>Harpies, Medusas, Wyrms, Turak Bugbears, and Turak Bugbear Warriors</font>, find out what ominous things are happening and look for anyone suspicious.<br>
You can use teleport to get to the Gorgon Flower Garden. Select it from the list at the Town of Giran teleport.<br>
May the blessing of Einhasas be upon you.
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>High Priest Raymond:<br>
Did you complete the investigation?<br>
I didnt hear from you for a while and was getting wormed. It relieves me to see you return safely.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10964_SecretGarden 30289-03.html">"Yes"</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>High Priest Raymond:<br>
So you did not find traces of anyone suspicious? Even so, I am very grateful.<br>
If it werent for you, adventurer, many townsfork would still be anxious, trembling in fear. It is as if though you have full the blessing of Einhasad.<br>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>High Priest Raymond:<br>
It is used to be a peaceful and tranquil garden until a temfying being appeared one day. It is said that the beign turned every living thing there into stone before disappearing.<br>
Now only the likes of Harpes, Medusa, and Bugbears infest the garden.<br>
But there are rumors of late that ominous things are afoot once more, making everyone worry that this temfying being may have reappeared. So I am looking for an adventurer who did be willing to go there and investigate.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10964_SecretGarden 30289-01.html">"What do you want me to investigate?"</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Captain Bathis:<br>
It is High Priest Raymond who serves Einhasad in the temple right next to us.<br>
It seems like there is something troubling him and he needs help with it, so <font color=LEVE>go see him now</font>.<br>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Captain Bathis:<br>
With all your recent exploits, you seems to have made a name for yourself among the townsfolk.<br>
There is someone who is looking for you, seeking your assistance<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10964_SecretGarden 30332-01.htm">"Who is that?"</Button>
</body></html>

View File

@ -0,0 +1,197 @@
/*
* 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.Q10964_SecretGarden;
import java.util.HashSet;
import java.util.Set;
import org.l2jmobius.gameserver.enums.QuestSound;
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.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
/**
* Secret Garden (10964)
* @author RobikBobik
* @Note: Based on NA server September 2019
*/
public class Q10964_SecretGarden extends Quest
{
// NPC
private static final int CAPTAIN_BATHIS = 30332;
private static final int RAYMOND = 30289;
// Monsters
private static final int HARPY = 20145;
private static final int MEDUSA = 20158;
private static final int WYRM = 20176;
private static final int TURAK_BUGBEAR = 20248;
private static final int TURAK_BUGBEAR_WARRIOR = 20249;
// Misc
private static final String KILL_COUNT_VAR = "KillCount";
private static final int MAX_LEVEL = 34;
private static final int MIN_LEVEL = 30;
public Q10964_SecretGarden()
{
super(10964);
addStartNpc(CAPTAIN_BATHIS);
addTalkId(CAPTAIN_BATHIS, RAYMOND);
addKillId(HARPY, MEDUSA, WYRM, TURAK_BUGBEAR, TURAK_BUGBEAR_WARRIOR);
setQuestNameNpcStringId(NpcStringId.LV_30_34_SECRET_GARDEN);
addCondMinLevel(MIN_LEVEL, "no_lvl.html");
addCondMaxLevel(MAX_LEVEL, "no_lvl.html");
}
@Override
public boolean checkPartyMember(PlayerInstance member, Npc npc)
{
final QuestState qs = getQuestState(member, false);
return ((qs != null) && qs.isStarted());
}
@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 "30332-01.htm":
{
qs.startQuest();
htmltext = event;
break;
}
case "30289-01.html":
{
qs.setCond(2, true);
htmltext = event;
break;
}
case "30289-02.html":
{
htmltext = event;
break;
}
case "30289-03.html":
{
if (qs.isStarted())
{
player.sendPacket(new ExShowScreenMessage(NpcStringId.THE_MISSION_ADVENTURER_S_JOURNEY_II_IS_NOW_AVAILABLE_NCLICK_THE_YELLOW_QUESTION_MARK_IN_THE_RIGHT_BOTTOM_CORNER_OF_YOUR_SCREEN_TO_SEE_THE_QUEST_S_INFO, 2, 5000));
addExpAndSp(player, 2500000, 75000);
qs.exitQuest(false, true);
htmltext = event;
break;
}
}
}
return htmltext;
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final QuestState qs = getQuestState(killer, false);
if ((qs != null) && qs.isCond(2))
{
final int killCount = qs.getInt(KILL_COUNT_VAR) + 1;
if (killCount < 500)
{
qs.set(KILL_COUNT_VAR, killCount);
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
sendNpcLogList(killer);
}
else
{
qs.setCond(3, true);
qs.unset(KILL_COUNT_VAR);
killer.sendPacket(new ExShowScreenMessage(NpcStringId.MONSTERS_OF_THE_GORGON_FLOWER_GARDEN_ARE_KILLED_NUSE_THE_TELEPORT_TO_GET_TO_HIGH_PRIEST_RAYMOND_IN_GLUDIO, 2, 5000));
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public Set<NpcLogListHolder> getNpcLogList(PlayerInstance player)
{
final QuestState qs = getQuestState(player, false);
if ((qs != null) && qs.isCond(2))
{
final Set<NpcLogListHolder> holder = new HashSet<>();
holder.add(new NpcLogListHolder(NpcStringId.DEFEAT_THE_MONSTERS_IN_THE_GORGON_FLOWER_GARDEN.getId(), true, qs.getInt(KILL_COUNT_VAR)));
return holder;
}
return super.getNpcLogList(player);
}
@Override
public String onTalk(Npc npc, PlayerInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
if (qs.isCreated())
{
htmltext = "30332.htm";
}
else if (qs.isStarted())
{
switch (npc.getId())
{
case CAPTAIN_BATHIS:
{
if (qs.isCond(1))
{
htmltext = "30332-01.htm";
}
break;
}
case RAYMOND:
{
if (qs.isCond(1))
{
htmltext = "30289.html";
}
else if (qs.isCond(3))
{
htmltext = "30289-02.html";
}
break;
}
}
}
else if (qs.isCompleted())
{
if (npc.getId() == CAPTAIN_BATHIS)
{
htmltext = getAlreadyCompletedMsg(player);
}
}
return htmltext;
}
}

View File

@ -0,0 +1,3 @@
<html><body>Captain Bathis:<br>
You do not meet the requirements of the quest (Quest is only available to 30-34 levels).
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>High Priest Maximillian:<br>
Yes, I do. Recently, many talked about you.<br1>
When I met Raymond due the issue in the Gorgon Garden, I asked him about you.<br>
I thought he could delivery my word since you mainly work near Town of Gludio.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10965_DeathMysteries 30120-02.html">"Go on."</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>High Priest Maximillian:<br>
You were a great help at that time.<br>
I thought all problems were settled, but I was wrong. Since we need to investigate the Death Pass, I contacted Raymond. I told him that it would be better for me to meet you personally and ask for help.<br>
Would you help us again?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10965_DeathMysteries 30120-03.html">"What should I do?"</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>High Priest Maximillian:<br>
The Death Pass is filled with death, as it is name implies. Death is always hunting because it is close to the Dragon Valley, where Antharas is located.<br>
There has been a slight change in Antharas lately, and some suspicious movements have been observer even in this area.<br>
I would be thankful if you could go to the Death Pass and find out what is going on.
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>High Priest Maximillian:<br>
So you finished defeating the monsters in the Death Pass?
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10965_DeathMysteries 30120-05.html">"Yes, I did"</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>High Priest Maximillian:<br>
Thank you so much.<br>
So many changes have occurred, so I am careful with even the smallest thing. May Einhasad blessing be with you, traveler.<br>
Do you know about the <font color=LEVEL>Agathion Bracelet</font>? It is not much, but I think it will help you. Please take the <font color=LEVEL>Adventurer Agathion Bracelet</font> and the <font color=LEVEL>Adventurer Griffin Agathion</font>.
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>High Priest Maximillian:<br>
You must be the one Raymond menboned.<br>
Nice to meet you. I am High Priest Maximillian. I serve for the Temple of Einhasad here in Town of Giran.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10965_DeathMysteries 30120-01.html">"I had heard, you need help."</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>High Priest Raymond:<br>
Do you remember the investigation you carried out at the Gorgon Flower Garden last time? It is a place near the Town of Giran.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10965_DeathMysteries 30289-02.htm">"Yes, I do."</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>High Priest Raymond:<br>
The request back then was actually at the behest of High Priest Maximilian from the Temple of Einhasad in the Town of Giran.<br>
The town is pretty far from here and he wished to ask for your assistance directly, but he was concentrated that you might feel burdened by taking on a request from someone that you hardly know. So he asked me to help mhim instead.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10965_DeathMysteries 30289-03.htm">"Ah, so that is what happened."</Button>
</body></html>

View File

@ -0,0 +1,7 @@
<html><body>High Priest Raymond:<br>
But now that he has another request to make, he felt it improper to keep going through someone else and wished to ask for your assistance in person.<br>
I am sure the High Priest Maximillian will tell you more about it.<br>
I know you must be tired and it is a long was to travel, so if you wish, I can send you to High Priest Maximillian.<br>
But of course, if you have other matters to attend to, you are welcome to do so and make your won way there afterward. After all, you just need to get to the Town of Giran and visit the Temple of Einhasad.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10965_DeathMysteries TELEPORT_TO_MAXIMILLIAN">"Please send me now."</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>High Priest Raymond:<br>
Adventurer, I know that you are only just returned, but may ask for another favor?<br>
I just received word from the Town of Giran that they are in need of your assistance.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10965_DeathMysteries 30289-01.htm">"Go on"</Button>
</body></html>

View File

@ -0,0 +1,224 @@
/*
* 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.Q10965_DeathMysteries;
import java.util.HashSet;
import java.util.Set;
import org.l2jmobius.gameserver.enums.QuestSound;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.ItemHolder;
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.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
/**
* Death Mysteries (10965)
* @author RobikBobik
* @Note: Based on NA server September 2019
*/
public class Q10965_DeathMysteries extends Quest
{
// NPC
private static final int RAYMOND = 30289;
private static final int MAXIMILLIAN = 30120;
// Monsters
private static final int WYRM = 20176;
private static final int GUARDIAN_BASILISK = 20550;
private static final int ROAD_SCAVENGER = 20551;
private static final int FETTERED_SOUL = 20552;
private static final int WINDUS = 20553;
private static final int GRANDIS = 50554;
// Items
private static final ItemHolder ADVENTURERS_AGATHION_BRACELET = new ItemHolder(91933, 1);
private static final ItemHolder ADVENTURERS_AGATHION_GRIFIN = new ItemHolder(91935, 1);
// Misc
private static final String KILL_COUNT_VAR = "KillCount";
private static final int MAX_LEVEL = 40;
private static final int MIN_LEVEL = 37;
public Q10965_DeathMysteries()
{
super(10965);
addStartNpc(RAYMOND);
addTalkId(RAYMOND, MAXIMILLIAN);
addKillId(WYRM, GUARDIAN_BASILISK, ROAD_SCAVENGER, FETTERED_SOUL, WINDUS, GRANDIS);
setQuestNameNpcStringId(NpcStringId.LV_37_40_DEATH_MYSTERIES);
addCondMinLevel(MIN_LEVEL, "no_lvl.html");
addCondMaxLevel(MAX_LEVEL, "no_lvl.html");
}
@Override
public boolean checkPartyMember(PlayerInstance member, Npc npc)
{
final QuestState qs = getQuestState(member, false);
return ((qs != null) && qs.isStarted());
}
@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 "TELEPORT_TO_MAXIMILLIAN":
{
player.teleToLocation(86845, 148626, -3402);
break;
}
case "30289-01.htm":
{
htmltext = event;
break;
}
case "30289-02.htm":
{
htmltext = event;
break;
}
case "30289-03.htm":
{
qs.startQuest();
htmltext = event;
break;
}
case "30120-01.html":
{
htmltext = event;
break;
}
case "30120-02.html":
{
htmltext = event;
break;
}
case "30120-03.html":
{
qs.setCond(2, true);
htmltext = event;
break;
}
case "30120-05.html":
{
if (qs.isStarted())
{
player.sendPacket(new ExShowScreenMessage(NpcStringId.YOU_VE_GOT_ADVENTURER_S_AGATHION_BRACELET_AND_ADVENTURER_S_AGATHION_GRIFFIN_NCOMPLETE_THE_TUTORIAL_AND_TRY_TO_USE_THE_AGATHION, 2, 5000));
addExpAndSp(player, 3000000, 75000);
giveItems(player, ADVENTURERS_AGATHION_BRACELET);
giveItems(player, ADVENTURERS_AGATHION_GRIFIN);
qs.exitQuest(false, true);
htmltext = event;
break;
}
}
}
return htmltext;
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final QuestState qs = getQuestState(killer, false);
if ((qs != null) && qs.isCond(2))
{
final int killCount = qs.getInt(KILL_COUNT_VAR) + 1;
if (killCount < 500)
{
qs.set(KILL_COUNT_VAR, killCount);
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
sendNpcLogList(killer);
}
else
{
qs.setCond(3, true);
qs.unset(KILL_COUNT_VAR);
killer.sendPacket(new ExShowScreenMessage(NpcStringId.MONSTERS_OF_THE_DEATH_PASS_ARE_KILLED_NUSE_THE_TELEPORT_OR_THE_SCROLL_OF_ESCAPE_TO_GET_TO_HIGH_PRIEST_MAXIMILIAN_IN_GIRAN, 2, 5000));
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public Set<NpcLogListHolder> getNpcLogList(PlayerInstance player)
{
final QuestState qs = getQuestState(player, false);
if ((qs != null) && qs.isCond(2))
{
final Set<NpcLogListHolder> holder = new HashSet<>();
holder.add(new NpcLogListHolder(NpcStringId.DEFEAT_THE_MONSTERS_IN_THE_DEATH_PASS.getId(), true, qs.getInt(KILL_COUNT_VAR)));
return holder;
}
return super.getNpcLogList(player);
}
@Override
public String onTalk(Npc npc, PlayerInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
if (qs.isCreated())
{
htmltext = "30289.htm";
}
else if (qs.isStarted())
{
switch (npc.getId())
{
case RAYMOND:
{
if (qs.isCond(1))
{
htmltext = "30289-01.htm";
}
break;
}
case MAXIMILLIAN:
{
if (qs.isCond(1))
{
htmltext = "30120.html";
}
else if (qs.isCond(3))
{
htmltext = "30120-04.html";
}
break;
}
}
}
else if (qs.isCompleted())
{
if (npc.getId() == RAYMOND)
{
htmltext = getAlreadyCompletedMsg(player);
}
}
return htmltext;
}
}

View File

@ -0,0 +1,3 @@
<html><body>High Priest Raymond:<br>
You do not meet the requirements of the quest (Quest is only available to 37-40 levels).
</body></html>

View File

@ -44,6 +44,8 @@ import quests.Q10866_PunitiveOperationOnTheDevilIsle.Q10866_PunitiveOperationOnT
import quests.Q10961_EffectiveTraining.Q10961_EffectiveTraining;
import quests.Q10962_NewHorizons.Q10962_NewHorizons;
import quests.Q10963_ExploringTheAntNest.Q10963_ExploringTheAntNest;
import quests.Q10964_SecretGarden.Q10964_SecretGarden;
import quests.Q10965_DeathMysteries.Q10965_DeathMysteries;
import quests.Q10966_ATripBegins.Q10966_ATripBegins;
import quests.Q10967_CulturedAdventurer.Q10967_CulturedAdventurer;
import quests.Q10981_UnbearableWolvesHowling.Q10981_UnbearableWolvesHowling;
@ -123,6 +125,8 @@ public class QuestMasterHandler
Q10961_EffectiveTraining.class,
Q10962_NewHorizons.class,
Q10963_ExploringTheAntNest.class,
Q10964_SecretGarden.class,
Q10965_DeathMysteries.class,
Q10966_ATripBegins.class,
Q10967_CulturedAdventurer.class,
Q10981_UnbearableWolvesHowling.class,

View File

@ -487,12 +487,13 @@
<set name="default_action" val="EQUIP" />
<set name="bodypart" val="lbracelet" />
<set name="immediate_effect" val="true" />
<set name="material" val="SILVER" />
<set name="weight" val="100" />
<set name="is_tradable" val="false" />
<set name="material" val="WOOD" />
<set name="weight" val="10" />
<set name="is_dropable" val="false" />
<set name="is_depositable" val="false" />
<set name="is_sellable" val="false" />
<skills>
<skill id="50184" level="1" /> <!-- Expand Agathion Slots -->
</skills>
</item>
<item id="91934" name="Adventurer's Bracelet" type="Armor">
<!-- When equipped, opens up 1 Talisman slot. -->
@ -512,14 +513,17 @@
<!-- Can be used to obtain the power of Agathion Griffin. Summons Agathion from the main slot. Activates Special Abilities. <Special Abilities>. P. Def. increased. <Unique Abilities>. P. Def. +5. -->
<set name="icon" val="icon.griffin_vehicle" />
<set name="default_action" val="EQUIP" />
<set name="bodypart" val="gloves" />
<set name="bodypart" val="agathion" />
<set name="immediate_effect" val="true" />
<set name="material" val="SILVER" />
<set name="weight" val="5" />
<set name="material" val="GOLD" />
<set name="weight" val="150" />
<set name="is_tradable" val="false" />
<set name="is_dropable" val="false" />
<set name="is_depositable" val="false" />
<set name="is_sellable" val="false" />
<skills>
<skill id="50186" level="1" /> <!-- Adventurer's Agathion Griffin -->
</skills>
</item>
<item id="91936" name="Jewel of Adventurer Fragment" type="Armor">
<!-- Fragment of an unknown jewel. Max HP +5. The effect doesn't stack if two identical jewels are equipped, the higher-level jewel takes precedence. -->

View File

@ -672,6 +672,11 @@
<!-- Activates the main agathion slot. -->
<icon>icon.agathion_magmeld_teleport</icon>
<operateType>P</operateType>
<effects>
<effect name="AgathionSlot">
<amount>1</amount>
</effect>
</effects>
</skill>
<skill id="50185" toLevel="1" name="Summon Agathion - Griffin">
<!-- Summons Agathion. -->