Quest Seven Signs, Solina's Tomb (10295).

This commit is contained in:
MobiusDev 2016-12-25 19:07:49 +00:00
parent bc07aef87f
commit 58597a3f83
48 changed files with 755 additions and 35 deletions

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Monastery Of Silence -->
<instance id="151" maxWorlds="50" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
<time duration="60" empty="0" />
<time duration="120" empty="5" />
<removeBuffs type="ALL" />
<locations>
<enter type="FIXED">
@ -12,9 +12,7 @@
</exit>
</locations>
<doorlist>
<door id="21100001">
<openStatus default="open" />
</door>
<door id="21100001" /> <!-- wall -->
<door id="21100002">
<openStatus default="open" />
</door>
@ -27,9 +25,7 @@
<door id="21100005">
<openStatus default="open" />
</door>
<door id="21100006">
<openStatus default="open" />
</door>
<door id="21100006" /> <!-- wall -->
<door id="21100007">
<openStatus default="open" />
</door>
@ -39,9 +35,7 @@
<door id="21100009">
<openStatus default="open" />
</door>
<door id="21100010">
<openStatus default="open" />
</door>
<door id="21100010" /> <!-- wall -->
<door id="21100011">
<openStatus default="open" />
</door>
@ -51,20 +45,18 @@
<door id="21100013">
<openStatus default="open" />
</door>
<door id="21100014">
<openStatus default="open" />
</door>
<door id="21100014" /> <!-- wall -->
<door id="21100015">
<openStatus default="open" />
</door>
<door id="21100016">
<openStatus default="open" />
</door>
<door id="21100018" />
<door id="21100101" />
<door id="21100102" />
<door id="21100103" />
<door id="21100104" />
<door id="21100018" /> <!-- teleporter wall -->
<door id="21100101" /> <!-- trap -->
<door id="21100102" /> <!-- trap -->
<door id="21100103" /> <!-- trap -->
<door id="21100104" /> <!-- trap -->
</doorlist>
<spawnlist>
<group>
@ -101,10 +93,6 @@
<npc id="32836" x="84705" y="-246730" z="-8320" heading="0" />
<!-- Spawn: Seven Signs, Solina's Tomb -->
<npc id="18949" x="76625" y="-240824" z="-10832" heading="0" />
<npc id="18956" x="55498" y="-252781" z="-6760" heading="0" />
<npc id="18957" x="55520" y="-252160" z="-6760" heading="0" />
<npc id="18958" x="56635" y="-252776" z="-6760" heading="0" />
<npc id="18959" x="56672" y="-252156" z="-6760" heading="0" />
<npc id="27407" x="44269" y="-251082" z="-6760" heading="0" />
<npc id="27407" x="43811" y="-248086" z="-6760" heading="0" />
<npc id="27407" x="44314" y="-250726" z="-6760" heading="0" />
@ -184,6 +172,20 @@
<npc id="32858" x="46672" y="-248368" z="-6720" heading="0" />
<npc id="32859" x="44114" y="-250912" z="-6720" heading="0" />
<npc id="32860" x="46672" y="-250915" z="-6720" heading="0" />
<npc id="18952" x="41930" y="-249640" z="-6762" heading="0" />
<npc id="18953" x="45391" y="-246185" z="-6765" heading="0" />
<npc id="18954" x="48853" y="-249633" z="-6762" heading="0" />
<npc id="18955" x="45399" y="-253095" z="-6762" heading="0" />
</group>
<group name="solina_trap" spawnByDefault="false">
<npc id="27403" x="56668" y="-252781" z="-6765" heading="0" count="4" />
<npc id="27403" x="55504" y="-252782" z="-6765" heading="0" count="4" />
<npc id="27403" x="55503" y="-252166" z="-6765" heading="0" count="4" />
<npc id="27403" x="56661" y="-252163" z="-6765" heading="0" count="4" />
<npc id="27404" x="56668" y="-252781" z="-6765" heading="0" count="3" />
<npc id="27404" x="55504" y="-252782" z="-6765" heading="0" count="3" />
<npc id="27404" x="55503" y="-252166" z="-6765" heading="0" count="3" />
<npc id="27404" x="56661" y="-252163" z="-6765" heading="0" count="3" />
</group>
</spawnlist>
</instance>

View File

@ -23,10 +23,13 @@ import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.holders.SkillHolder;
import com.l2jmobius.gameserver.model.instancezone.Instance;
import com.l2jmobius.gameserver.model.quest.QuestState;
import com.l2jmobius.gameserver.model.skills.AbnormalVisualEffect;
import com.l2jmobius.gameserver.model.skills.SkillCaster;
import com.l2jmobius.gameserver.network.NpcStringId;
import instances.AbstractInstance;
import quests.Q10295_SevenSignsSolinasTomb.Q10295_SevenSignsSolinasTomb;
/**
* Monastery of Silence instance zone.
@ -47,6 +50,10 @@ public final class SSQMonasteryOfSilence extends AbstractInstance
private static final int TELEPORT_CONTROL_DEVICE2 = 32818;
private static final int TELEPORT_CONTROL_DEVICE3 = 32819;
private static final int TELEPORT_CONTROL_DEVICE4 = 32820;
private static final int GUARDIAN_STAFF = 18952;
private static final int GUARDIAN_SWORD = 18953;
private static final int GUARDIAN_SHIELD = 18954;
private static final int GUARDIAN_SCROLL = 18955;
// Skills
private static final SkillHolder[] BUFFS =
{
@ -68,6 +75,10 @@ public final class SSQMonasteryOfSilence extends AbstractInstance
NpcStringId.WE_MUST_SEARCH_HIGH_AND_LOW_IN_EVERY_ROOM_FOR_THE_READING_DESK_THAT_CONTAINS_THE_BOOK_WE_SEEK,
NpcStringId.REMEMBER_THE_CONTENT_OF_THE_BOOKS_THAT_YOU_FOUND_YOU_CAN_T_TAKE_THEM_OUT_WITH_YOU
};
private static final NpcStringId[] ELCADIA_DIALOGS2 =
{
NpcStringId.TO_REMOVE_THE_BARRIER_YOU_MUST_FIND_THE_RELICS_THAT_FIT_THE_BARRIER_AND_ACTIVATE_THE_DEVICE,
};
// Misc
private static final int TEMPLATE_ID = 151;
@ -84,8 +95,34 @@ public final class SSQMonasteryOfSilence extends AbstractInstance
{
super.onEnter(player, instance, firstEnter);
final L2Npc elcadia = addSpawn(ELCADIA_INSTANCE, player, false, 0, false, player.getId());
startQuestTimer("FOLLOW", 3000, elcadia, player);
if (firstEnter)
{
final L2Npc elcadia = addSpawn(ELCADIA_INSTANCE, player, false, 0, false, player.getInstanceId());
startQuestTimer("FOLLOW", 3000, elcadia, player);
final L2Npc guardianStaff = player.getInstanceWorld().getNpc(GUARDIAN_STAFF);
guardianStaff.startAbnormalVisualEffect(AbnormalVisualEffect.INVINCIBILITY);
guardianStaff.setIsInvul(true);
final L2Npc guardianSword = player.getInstanceWorld().getNpc(GUARDIAN_SWORD);
guardianSword.startAbnormalVisualEffect(AbnormalVisualEffect.INVINCIBILITY);
guardianSword.setIsInvul(true);
final L2Npc guardianShield = player.getInstanceWorld().getNpc(GUARDIAN_SHIELD);
guardianShield.startAbnormalVisualEffect(AbnormalVisualEffect.INVINCIBILITY);
guardianShield.setIsInvul(true);
final L2Npc guardianScroll = player.getInstanceWorld().getNpc(GUARDIAN_SCROLL);
guardianScroll.startAbnormalVisualEffect(AbnormalVisualEffect.INVINCIBILITY);
guardianScroll.setIsInvul(true);
}
else
{
final L2Npc elcadia = player.getInstanceWorld().getNpc(ELCADIA_INSTANCE);
if (elcadia != null)
{
elcadia.teleToLocation(player);
cancelQuestTimers("FOLLOW");
startQuestTimer("FOLLOW", 3000, elcadia, player);
}
}
}
@Override
@ -157,12 +194,20 @@ public final class SSQMonasteryOfSilence extends AbstractInstance
npc.getAI().startFollow(player);
if (player.isInCombat())
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.YOUR_WORK_HERE_IS_DONE_SO_RETURN_TO_THE_CENTRAL_GUARDIAN);
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.THE_GUARDIAN_OF_THE_SEAL_DOESN_T_SEEM_TO_GET_INJURED_AT_ALL_UNTIL_THE_BARRIER_IS_DESTROYED);
SkillCaster.triggerCast(npc, player, BUFFS[getRandom(BUFFS.length)].getSkill());
}
else
{
npc.broadcastSay(ChatType.NPC_GENERAL, ELCADIA_DIALOGS[getRandom(ELCADIA_DIALOGS.length)]);
final QuestState qs = player.getQuestState(Q10295_SevenSignsSolinasTomb.class.getSimpleName());
if ((qs != null) && (qs.getCond() < 2))
{
npc.broadcastSay(ChatType.NPC_GENERAL, ELCADIA_DIALOGS2[getRandom(ELCADIA_DIALOGS2.length)]);
}
else if (qs == null)
{
npc.broadcastSay(ChatType.NPC_GENERAL, ELCADIA_DIALOGS[getRandom(ELCADIA_DIALOGS.length)]);
}
}
startQuestTimer("FOLLOW", 10000, npc, player);
break;

View File

@ -0,0 +1,4 @@
<html><body>Sister of Silence Eris:<br>
Now, you will meet Solina alone. The truth you seek is best learned in person. Have your audience with Solina, and you will learn what you need to know.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb 32792-02.htm">Ready to meet Solina.</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Sister of Silence Eris:<br>
The Seal of Saintess, protecting solina's casket room, consists of 4 Guardians and 4 Powerful Devices. The Guardians, endowed with power from the Powerful Devices, can cancel any outside damage as long as the Powerful Device is running. In order to defeat them, you have to weaken the power of the Guardians by removing 4 Powerful Devices. It sounds impossible, but there is no other to meet Soilna.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb 32792-03.htm">Enter.</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb 32792-04.html">Hear instructions about the Seal of Saintess.</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb 32792-05.html">Uh... Maybe I'm not quite ready yet.</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Sister of Silence Eris:<br>
I see. The Seal of Saintess is a protection device. It keeps Solina's resting place free from intruders.<br>
The device was invented by Sodina's 3 closest disciples, Kaerun, Anays, and myself. The Guardians protecting this place cannot be defeated without first removing the seals.<br>
I wish I could go and help you, but I cannot leave. However, when you're ready, I will send you to the Seal of Saintess.
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Sister of Silence Eris:<br>
Anybody who goes in the Casket Room is considered an intruder. Only 3 of her disciples, Eris, Kaerun, and Anays, the inventers of the seal devices, are permitted.<br>
I cannot directly help you because I can't leave here. Thus, there is no way in except to destroy the seals. But the seals are protected by the 4 Guardians of Relics, they will stand in your way.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb 32792-06.html">Ask about how to defeat Guardians.</Button>
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Sister of Silence Eris:<br>
When you're done getting ready, let me know.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Sister of Silence Eris:<br>
The Guardians of Relics protect 4 special seals. The power from Solina's treasures in these 4 seals give the Guardians eternal life. Their immortality is linked to the seals. We must remove the 4 seals, and then destroy the Guardians!
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Sister of Silence Eris:<br>
I can transport you whenever you are ready. Let me say this one last time, you have to remove the seals from the Powerful Devices protected by Guardians in order to defeat the Guardians. Now, are you ready to enter?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb intro_movie">Enter Seal of Saintess</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Sister of Silence Eris:<br>
You are truly skilled to defeat the Guardians of Relics... I am impressed. Now go inside the Seal of Saintess and find your way to Solina's casket room. Use the central teleport device.<br>
To see the Holy Treasure of Solina, you will have to battle the Last Guardians, the protectors of Solina's tomb.<br>
This is the final moment before the Answer of Truth. Everything you've done comes down to this one moment. Good luck...<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb teleport_to_room">Enter again to the Casket Room of Saintess.</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Sister of Silence Eris:<br>
Weren't you meeting with Solina? Don't turn back now, meet Solina and listen to her story again.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb teleport_to_room_2">Enter again to Solina's resting place.</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Sister of Silence Eris:<br>
You met Solina? At long last her soul can rest, and so can mine.<br>
But for you, this is just the beginning. You know truth about Embryo and of the seven seals, and you must stop them.<br>
There is one last way I can help you, but first please accept this reward for putting Solina's great spirit to rest.
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Elmore-Aden's Saintess Solina:<br>
Ah, at last... we finally meet I have waited for you for a very long time. You are foretold in Einhasad's prophecy, did you know that?<br>
I'm grateful for you, I imagine your journey here must have been difficult.<br>
I too am tired. My soul longs for peace, but I cannot be at peace until I speak to you that which will save the world.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb 32793-02.html">Are you Elmore-Aden's Saintess Solina?</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Elmore-Aden's Saintess Solina:<br>
Solina... Yes, I am Solina.<br>
You realize, no doubt, that Eris and I are simply images of thoughts, waiting for people of Trust...<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb 32793-03.html">ask what the people of Trust is.</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Elmore-Aden's Saintess Solina:<br>
I see... You didn't know your fate? Well, there are few who do.<br>
Hm... A girl with eyes closed... This must be the will of the goddess and of heaven.<br>
Eris and I will tell you what you want to know. Your path will be known to you then.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb 32793-04.html">We came here to learn the true identity of Embryo.</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Elmore-Aden's Saintess Solina:<br>
Embryo... To know about Embryo, we need to start with my story. The birth of Embryo started because of me.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb 32793-05.html">Please tell us about your story, Solina.</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Elmore-Aden's Saintess Solina:<br>
The story is... It is what it is. Embryo... Embryo is a dark, evil group whose sole purpose is to acquire enough power to control the world. Their history is traced back for centuries... Embryo's beginning was born with my death.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb 32793-06.html">Please tell us about your story, Solina.</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Elmore-Aden's Saintess Solina:<br>
Jude van Etina betrayed me and my disciples, he stole some of my powers. Many holy objects were taken. Fortunately, the most important holy object, the grail, was protected by Anais's last minute thinking...<br>
Etina established an organization to continue his mission in case he died prematurely, that organization is Embryo.<br>
They hid in the shadows to acquire the power of the Seven Seals of Emperor that was promised by Einhasad.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb 32793-07.html">Ask about the relationship between the Seven Seals and Embryo.</Button>
</body></html>

View File

@ -0,0 +1,7 @@
<html><body>Elmore-Aden's Saintess Solina:<br>
I am trapped here, a phantom of thoughts from lifetimes ago. But I have learned that the Seven Seals, filled with the blood of our imperial family, are being unearthed.<br>
What's more, Shilen's dark face shows itself. This, friend, is no coincidence.<br>
I am certain that Judith and his group are involved. If you fail to stop them, if you fail to protect the Seven Seals, Shilen will plague our world.<br>
Shilen is a hurricane, an unstoppable merchant or evil, and will bring devastation unlike any the world has ever seen.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb 32793-08.html">What do we have to do?</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Elmore-Aden's Saintess Solina:<br>
Now you know the truth. Now you know how important it is that you enlist everyone you can and warn people about the dangers of the Seven Seals.<br>
You know how important it is that Embryo is eliminated. You're arrival was fortold by the goddess long ago.<br>
Listen to what I tell you. You don't have time! Return to Eris and tell her everything. Save the world from Embryo.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb teleport_back">Return to Eris's Office.</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Movement Control Device:<br>
Solina's hall can only be entered by the seven disciples who have permission to enter. Without the Guardians of Seal's permission, you may not enter.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb teleport_back">Move to the director's room.</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Movement Control Device:<br>
Loyal disciple of Solina, the seal has been completely eliminated. Are you ready to enter Solina's Room?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb teleport_back">Move to the director's room.</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb 32837-03.html">Move to the Saintess's Room.</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Movement Control Device:<br>
Loyal disciple of Solina, if you do not have permission to enter, you will be attacked by the Guardians of the Tomb. I'll ask you one last time. Do you have permission to face Solina?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb teleport_to_room">Move to the room of the Saintess.</Button>
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>There's big hole in a shape of a book in the bottom of this Barrier Device. I have something that looks like a book. Maybe think this can affect the activation of the Barrier Device!<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb enable_scroll_guardian">"Here goes nothing."</Button>
</body></html>

View File

@ -0,0 +1,2 @@
<html><body>There's nothing I have that can be put in there.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>The giant Barrier Device begins to slowly turn. There's a hole that looks like a shield at the bottom of the device... maybe you can place a shield-shaped relic in there...<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb enable_shield_guardian">"Maybe I can..."</Button>
</body></html>

View File

@ -0,0 +1,2 @@
<html><body>There's nothing I have that can be put in there.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>There's a sword shaped hole in the bottom of the Barrier Device. I have a relic that looks like it might fit...<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb enable_sword_guardian">"Here goes nothing."</Button>
</body></html>

View File

@ -0,0 +1,2 @@
<html><body>There's nothing I have that can be put in there.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>There's a hole in me bottom of the Barrier Device. You have something that looks like a cain. Maybe you should by using it.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb enable_staff_guardian">Use it.</Button>
</body></html>

View File

@ -0,0 +1,2 @@
<html><body>There's nothing I have that can be put in there.
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Movement Control Device:<br>
This is Solina's room. You can move to Director's room from here.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb teleport_to_room_2">"Let's do it."</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Tomb of Saintess:<br>
You look at the tomb, and see these words<br>
"For the Saintess Solina, who devoted all her life to serve Einhasad and the Elmore-Aden Kingdom...to be remembered forever by those she saved and those who loved her...may punishing find the feet of those who ignored Solina's teachings."<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb activate_trap">Open the tomb and investigate.</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Tomb of Saintess:<br>
You look at the tomb, and see these words<br>
"For the Saintess Solina, who devoted all her life to serve Einhasad and the Elmore-Aden Kingdom...to be remembered forever by those she saved and those who loved her...may punishing find the feet of those who ignored Solina's teachings."<br>
This is not Solina's real Tomb.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Tomb of Saintess:<br>
The guardians defending the tomb disappear, and the stone wall on the other side begins to move.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>A sacred object, shaped like a huge staff, hovers gently above the altar. Its power can be felt simple by looking at it.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb 32857-02.html">Take the staff.</Button>
</body></html>

View File

@ -0,0 +1,2 @@
<html><body>The sacred object shaped as a huge staff floats away from the altar towards you. Its blinding light forces you to look away. When you finally look at it, you see it matches the groove seen on the Powerful Device.
</body></html>

View File

@ -0,0 +1,2 @@
<html><body>You already possess the sacred object taken from this altar. Let's have a look at the inventory.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>A sacred object shaped like a huge sword floats above the altar, rotating from an unseen force. It shimmers with elegance.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb 32858-02.html">Take the sword.</Button>
</body></html>

View File

@ -0,0 +1,2 @@
<html><body>The sacred object shaped like a giant's sword, is taken from the altar. It's difficult to open your eyes, but when you do you realize it matches the groove on the Powerful Device.
</body></html>

View File

@ -0,0 +1,2 @@
<html><body>You already possess the sacred object from this altar. Let's look at the inventory.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>There's a book relic floating in the air. It looks valuable.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb 32859-02.html">"I'll have that."</Button>
</body></html>

View File

@ -0,0 +1,2 @@
<html><body>There's a large relic that looks like a book off the altar. A blinding light comes from the relic, and only after your eyes adjust are you able to look at the thing... Looking at it closely, it seems to match the shape of the hole you saw in the Barrier Device!
</body></html>

View File

@ -0,0 +1,2 @@
<html><body>You already have the relic - check your inventory.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>A sacred object shaped like a huge shield is floating above the altar. It tingles with an aura of power just by looking at it.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10295_SevenSignsSolinasTomb 32860-02.html">Take the shield.</Button>
</body></html>

View File

@ -0,0 +1,2 @@
<html><body>The object shaped like a huge shield is lifted and taken from the altar. Intense light beams from the sacred object, squinting you see that it matches the grooves on the Powerful Device.
</body></html>

View File

@ -0,0 +1,2 @@
<html><body>You already possess the sacred object. Let's take a look at the inventory.
</body></html>

View File

@ -16,10 +16,17 @@
*/
package quests.Q10295_SevenSignsSolinasTomb;
import java.util.List;
import com.l2jmobius.gameserver.enums.Movie;
import com.l2jmobius.gameserver.model.Location;
import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.quest.Quest;
import com.l2jmobius.gameserver.model.quest.QuestState;
import com.l2jmobius.gameserver.model.quest.State;
import com.l2jmobius.gameserver.model.skills.AbnormalVisualEffect;
import com.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
import quests.Q10294_SevenSignsToTheMonasteryOfSilence.Q10294_SevenSignsToTheMonasteryOfSilence;
@ -32,16 +39,69 @@ public final class Q10295_SevenSignsSolinasTomb extends Quest
{
// NPCs
private static final int ERIS_EVIL_THOUGHTS = 32792;
private static final int ELCADIA_INSTANCE = 32787;
private static final int TELEPORT_DEVICE = 32837;
private static final int TELEPORT_DEVICE_2 = 32842;
private static final int STAFF_ALTAR = 32857;
private static final int SWORD_ALTAR = 32858;
private static final int SHIELD_ALTAR = 32860;
private static final int SCROLL_ALTAR = 32859;
private static final int STAFF_DEVICE = 32841;
private static final int SWORD_DEVICE = 32840;
private static final int SHIELD_DEVICE = 32839;
private static final int SCROLL_DEVICE = 32838;
private static final int GUARDIAN_STAFF = 18952;
private static final int GUARDIAN_SWORD = 18953;
private static final int GUARDIAN_SHIELD = 18954;
private static final int GUARDIAN_SCROLL = 18955;
private static final int TOMB = 32843;
private static final int SUPPLICANT_OF_REST = 27403;
private static final int TRAINEE_OF_REST = 27404;
private static final int SOLINAS_EVIL_THOUGHTS = 32793;
// Items
private static final int SCROLL_RELIC = 17228;
private static final int SHIELD_RELIC = 17229;
private static final int SWORD_RELIC = 17230;
private static final int STAFF_RELIC = 17231;
// Teleports
private static final Location START_LOC = new Location(45545, -249423, -6760);
private static final Location BACK_LOC = new Location(120727, -86868, -3392);
private static final Location ROOM_LOC = new Location(56078, -252944, -6768);
private static final Location ROOM_2_LOC = new Location(55955, -250394, -6760);
// Client Effects
private static final int TELEPORT_DEVICE_EVENT = 21100100;
private static final int SCROLL_ALTAR_EVENT = 21100200;
private static final int SHIELD_ALTAR_EVENT = 21100202;
private static final int SWORD_ALTAR_EVENT = 21100204;
private static final int STAFF_ALTAR_EVENT = 21100206;
// Misc
private static final int TELEPORTER_WALL = 21100018;
private static final int[] WALLS =
{
21100001,
21100006,
21100010,
21100014
};
private static final int[] TRAP_DOORS =
{
21100101,
21100102,
21100103,
21100104
};
private static final int MIN_LEVEL = 81;
public Q10295_SevenSignsSolinasTomb()
{
super(10295);
addStartNpc(ERIS_EVIL_THOUGHTS);
addTalkId(ERIS_EVIL_THOUGHTS);
addCondMinLevel(MIN_LEVEL, ""); // TODO: HTML
addCondCompletedQuest(Q10294_SevenSignsToTheMonasteryOfSilence.class.getSimpleName(), ""); // TODO: HTML
addTalkId(ERIS_EVIL_THOUGHTS, TOMB, TELEPORT_DEVICE, TELEPORT_DEVICE_2, SCROLL_ALTAR, STAFF_ALTAR, SWORD_ALTAR, SHIELD_ALTAR, SCROLL_DEVICE, STAFF_DEVICE, SWORD_DEVICE, SHIELD_DEVICE, SOLINAS_EVIL_THOUGHTS);
addFirstTalkId(TOMB, TELEPORT_DEVICE, TELEPORT_DEVICE_2, SCROLL_ALTAR, STAFF_ALTAR, SWORD_ALTAR, SHIELD_ALTAR, SCROLL_DEVICE, STAFF_DEVICE, SWORD_DEVICE, SHIELD_DEVICE);
addKillId(GUARDIAN_STAFF, GUARDIAN_SWORD, GUARDIAN_SHIELD, GUARDIAN_SCROLL, SUPPLICANT_OF_REST, TRAINEE_OF_REST);
registerQuestItems(SCROLL_RELIC, SHIELD_RELIC, SWORD_RELIC, STAFF_RELIC);
addCondMinLevel(MIN_LEVEL, "");
addCondCompletedQuest(Q10294_SevenSignsToTheMonasteryOfSilence.class.getSimpleName(), "");
}
@Override
@ -53,10 +113,351 @@ public final class Q10295_SevenSignsSolinasTomb extends Quest
return null;
}
final String htmltext = null;
String htmltext = null;
switch (event)
{
case "32792-02.htm":
case "32792-04.html":
case "32792-05.html":
case "32792-06.html":
case "32837-03.html":
case "32793-02.html":
case "32793-03.html":
case "32793-05.html":
case "32793-06.html":
case "32793-07.html":
{
htmltext = event;
break;
}
case "32792-03.htm":
{
qs.startQuest();
htmltext = event;
break;
}
case "intro_movie":
{
player.teleToLocation(START_LOC);
final L2Npc elcadia = player.getInstanceWorld().getNpc(ELCADIA_INSTANCE);
elcadia.teleToLocation(player, true);
if (qs.isCond(1))
{
player.sendPacket(new OnEventTrigger(TELEPORT_DEVICE_EVENT, true));
player.sendPacket(new OnEventTrigger(SCROLL_ALTAR_EVENT, true));
player.sendPacket(new OnEventTrigger(SHIELD_ALTAR_EVENT, true));
player.sendPacket(new OnEventTrigger(SWORD_ALTAR_EVENT, true));
player.sendPacket(new OnEventTrigger(STAFF_ALTAR_EVENT, true));
playMovie(player, Movie.SSQ2_SOLINA_TOMB_OPENING);
}
return null;
}
case "32857-02.html":
{
if (!hasQuestItems(player, STAFF_RELIC))
{
giveItems(player, STAFF_RELIC, 1, true);
tryToOpenDoors(player);
htmltext = event;
}
break;
}
case "32858-02.html":
{
if (!hasQuestItems(player, SWORD_RELIC))
{
giveItems(player, SWORD_RELIC, 1, true);
tryToOpenDoors(player);
htmltext = event;
}
break;
}
case "32859-02.html":
{
if (!hasQuestItems(player, SCROLL_RELIC))
{
giveItems(player, SCROLL_RELIC, 1, true);
tryToOpenDoors(player);
htmltext = event;
}
break;
}
case "32860-02.html":
{
if (!hasQuestItems(player, SHIELD_RELIC))
{
giveItems(player, SHIELD_RELIC, 1, true);
tryToOpenDoors(player);
htmltext = event;
}
break;
}
case "teleport_back":
{
player.teleToLocation(BACK_LOC);
final L2Npc elcadia = player.getInstanceWorld().getNpc(ELCADIA_INSTANCE);
elcadia.teleToLocation(player, true);
break;
}
case "enable_staff_guardian":
{
if (hasQuestItems(player, STAFF_RELIC))
{
takeItems(player, STAFF_RELIC, -1);
final L2Npc guardian = player.getInstanceWorld().getNpc(GUARDIAN_STAFF);
guardian.setIsInvul(false);
guardian.stopAbnormalVisualEffect(AbnormalVisualEffect.INVINCIBILITY);
}
return null;
}
case "enable_sword_guardian":
{
if (hasQuestItems(player, SWORD_RELIC))
{
takeItems(player, SWORD_RELIC, -1);
final L2Npc guardian = player.getInstanceWorld().getNpc(GUARDIAN_SWORD);
guardian.setIsInvul(false);
guardian.stopAbnormalVisualEffect(AbnormalVisualEffect.INVINCIBILITY);
}
return null;
}
case "enable_shield_guardian":
{
if (hasQuestItems(player, SHIELD_RELIC))
{
takeItems(player, SHIELD_RELIC, -1);
final L2Npc guardian = player.getInstanceWorld().getNpc(GUARDIAN_SHIELD);
guardian.setIsInvul(false);
guardian.stopAbnormalVisualEffect(AbnormalVisualEffect.INVINCIBILITY);
}
return null;
}
case "enable_scroll_guardian":
{
if (hasQuestItems(player, SCROLL_RELIC))
{
takeItems(player, SCROLL_RELIC, -1);
final L2Npc guardian = player.getInstanceWorld().getNpc(GUARDIAN_SCROLL);
guardian.setIsInvul(false);
guardian.stopAbnormalVisualEffect(AbnormalVisualEffect.INVINCIBILITY);
}
return null;
}
case "teleport_to_room":
{
if (qs.getInt("progress") == 2)
{
player.getInstanceWorld().despawnGroup("solina_trap");
player.getInstanceWorld().setParameter("monstersCount", 0);
for (int door : TRAP_DOORS)
{
closeDoor(door, player.getInstanceId());
}
player.teleToLocation(ROOM_LOC);
final L2Npc elcadia = player.getInstanceWorld().getNpc(ELCADIA_INSTANCE);
elcadia.teleToLocation(player, true);
}
return null;
}
case "activate_trap":
{
final List<L2Npc> monsters = player.getInstanceWorld().spawnGroup("solina_trap");
player.getInstanceWorld().setParameter("monstersCount", monsters.size());
for (int door : TRAP_DOORS)
{
openDoor(door, player.getInstanceId());
}
htmltext = "32843-02.html";
break;
}
case "teleport_to_room_2":
{
if (qs.getInt("progress") == 3)
{
player.teleToLocation(ROOM_2_LOC);
final L2Npc elcadia = player.getInstanceWorld().getNpc(ELCADIA_INSTANCE);
elcadia.teleToLocation(player, true);
}
return null;
}
case "32793-04.html":
{
if (qs.getInt("progress") == 3)
{
qs.setCond(2, true);
htmltext = event;
}
break;
}
case "32793-08.html":
{
if (qs.isCond(2))
{
qs.setCond(3);
}
htmltext = event;
break;
}
}
return htmltext;
}
private void tryToOpenDoors(L2PcInstance player)
{
if (hasQuestItems(player, STAFF_RELIC, SWORD_RELIC, SCROLL_RELIC, SHIELD_RELIC))
{
for (int wall : WALLS)
{
openDoor(wall, player.getInstanceId());
}
}
}
@Override
public String onFirstTalk(L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, false);
String htmltext = getNoQuestMsg(player);
if (qs == null)
{
return htmltext;
}
switch (npc.getId())
{
case TELEPORT_DEVICE:
{
if (qs.getInt("progress") == 2)
{
htmltext = "32837-02.html";
}
else
{
htmltext = "32837-01.html";
}
break;
}
case STAFF_ALTAR:
{
if (!hasQuestItems(player, STAFF_RELIC))
{
htmltext = "32857-01.html";
}
else
{
htmltext = "32857-03.html";
}
break;
}
case SWORD_ALTAR:
{
if (!hasQuestItems(player, SWORD_RELIC))
{
htmltext = "32858-01.html";
}
else
{
htmltext = "32858-03.html";
}
break;
}
case SHIELD_ALTAR:
{
if (!hasQuestItems(player, SHIELD_RELIC))
{
htmltext = "32860-01.html";
}
else
{
htmltext = "32860-03.html";
}
break;
}
case SCROLL_ALTAR:
{
if (!hasQuestItems(player, SCROLL_RELIC))
{
htmltext = "32859-01.html";
}
else
{
htmltext = "32859-03.html";
}
break;
}
case STAFF_DEVICE:
{
if (hasQuestItems(player, STAFF_RELIC))
{
htmltext = "32841-01.html";
}
else
{
htmltext = "32841-02.html";
}
break;
}
case SWORD_DEVICE:
{
if (hasQuestItems(player, SWORD_RELIC))
{
htmltext = "32840-01.html";
}
else
{
htmltext = "32840-02.html";
}
break;
}
case SHIELD_DEVICE:
{
if (hasQuestItems(player, SHIELD_RELIC))
{
htmltext = "32839-01.html";
}
else
{
htmltext = "32839-02.html";
}
break;
}
case SCROLL_DEVICE:
{
if (hasQuestItems(player, SCROLL_RELIC))
{
htmltext = "32838-01.html";
}
else
{
htmltext = "32838-02.html";
}
break;
}
case TOMB:
{
if (player.getInstanceWorld().getParameters().getInt("monstersCount") > 0)
{
htmltext = "32843-02.html";
}
else if (qs.getInt("progress") != 3)
{
htmltext = "32843-01.html";
}
else
{
htmltext = "32843-03.html";
}
break;
}
case TELEPORT_DEVICE_2:
{
if (qs.getInt("progress") == 3)
{
htmltext = "32842-01.html";
}
break;
}
}
return htmltext;
}
@ -64,12 +465,117 @@ public final class Q10295_SevenSignsSolinasTomb extends Quest
@Override
public String onTalk(L2Npc npc, L2PcInstance player)
{
// QuestState qs = getQuestState(player, true);
final String htmltext = getNoQuestMsg(player);
switch (npc.getId())
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
switch (qs.getState())
{
case State.CREATED:
{
if (npc.getId() == ERIS_EVIL_THOUGHTS)
{
htmltext = "32792-01.htm";
}
break;
}
case State.STARTED:
{
switch (npc.getId())
{
case ERIS_EVIL_THOUGHTS:
{
if (qs.isCond(3))
{
qs.unset("guardianKills");
qs.unset("progress");
addExpAndSp(player, 44000000, 10560);
qs.exitQuest(false, true);
htmltext = "32792-10.html";
}
else if (qs.getInt("progress") == 3)
{
htmltext = "32792-09.html";
}
else if (qs.isCond(1))
{
htmltext = "32792-07.html";
}
else if (qs.getInt("progress") == 2)
{
htmltext = "32792-08.html";
}
break;
}
case SOLINAS_EVIL_THOUGHTS:
{
if (qs.isCond(3))
{
htmltext = "32793-08.html";
}
else if (qs.isCond(2))
{
htmltext = "32793-04.html";
}
else if (qs.getInt("progress") == 3)
{
htmltext = "32793-01.html";
}
break;
}
}
break;
}
case State.COMPLETED:
{
htmltext = getAlreadyCompletedMsg(player);
break;
}
}
return htmltext;
}
@Override
public String onKill(L2Npc npc, L2PcInstance player, boolean isSummon)
{
final QuestState qs = getQuestState(player, false);
switch (npc.getId())
{
case GUARDIAN_STAFF:
case GUARDIAN_SWORD:
case GUARDIAN_SHIELD:
case GUARDIAN_SCROLL:
{
int kills = qs.getInt("guardianKills");
kills++;
if (kills >= 4)
{
qs.set("progress", 2);
playMovie(player, Movie.SSQ2_SOLINA_TOMB_CLOSING);
}
else
{
qs.set("guardianKills", kills);
}
break;
}
case SUPPLICANT_OF_REST:
case TRAINEE_OF_REST:
{
int alive = player.getInstanceWorld().getParameters().getInt("monstersCount");
alive--;
if (alive <= 1)
{
qs.set("progress", 3);
openDoor(TELEPORTER_WALL, player.getInstanceId());
}
else
{
player.getInstanceWorld().getParameters().set("monstersCount", alive);
}
break;
}
}
return super.onKill(npc, player, isSummon);
}
}