Reworked quest Request of the Seeker (10363).

Contributed by gyo.
This commit is contained in:
MobiusDev
2016-02-14 14:55:13 +00:00
parent 3f76e7c7bd
commit 1ca1dc52a9
18 changed files with 169 additions and 94 deletions

View File

@@ -1,5 +1,5 @@
<html><body>Nagel:<br> <html><body>Nagel:<br>
Do you hear that?<br> Do you hear that?<br1>
I've heard noises every since I came to this damned place. It's not just me, either. Others have heard it, and it freaks us all out.<br> I've heard noises every since I came to this damned place. It's not just me, either. Others have heard it, and it freaks us all out.<br>
<button align=LEFT icon=NORMAL action="bypass -h Quest Q10363_RequestOfTheSeeker 33450-02.htm">"What do you hear exactly?"</button> <Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10363_RequestOfTheSeeker 33450-02.htm">"What do you hear exactly?"</Button>
</body></html> </body></html>

View File

@@ -1,6 +1,6 @@
<html><body>Nagel:<br> <html><body>Nagel:<br>
Crying, that's what.<br> Crying, that's what.<br>
I can hear the cries of the people who've died here... the cries of the soldiers who were sacrificed to defend heir families and friends...<br> I can hear the cries of the people who've died here... the cries of the soldiers who were sacrificed to defend their families and friends...<br>
Please - stop their suffering.<br> Please - stop their suffering.<br>
<button align=LEFT icon=NORMAL action="bypass -h Quest Q10363_RequestOfTheSeeker 33450-03.htm">"I'll try."</button> <Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10363_RequestOfTheSeeker 33450-03.htm">"I'll try."</Button>
</body></html> </body></html>

View File

@@ -1,5 +1,6 @@
<html><body>Nagel:<br> <html><body>Nagel:<br>
Thank you!<br> Thank you!<br1>
Listen, you'll find the corpses <font color="LEVEL">beyond the cracked gap</font>. You must show <font color="LEVEL">sorrow</font> before <font color="LEVEL"> five corpses</font>, and show them that we grieve for them.<br> Listen, you'll find the corpses <font color="LEVEL">beyond the cracked gap</font>. You must show <font color="LEVEL">sorrow</font> before <font color="LEVEL">five corpses</font>, and show them that we grieve for them.<br>
(To show your grief, select a <font color="LEVEL">corpse</font>, and open your Action Window(Alt+C), then click <font color="LEVEL">Sorrow</font>.) You must not <font color="LEVEL">smile or dance</font>. Remember that.<br>
(To show your grief, select a <font color="LEVEL">corpse</font>, and open your <font color="LEVEL">Action Window (Alt + C)</font>, then click <font color="LEVEL">Sorrow</font>.)
</body></html> </body></html>

View File

@@ -1,3 +1,3 @@
<html><body>Nagel:<br> <html><body>Nagel:<br>
You can find <font color="LEVEL">the corpses beyond the cracked gap</font>. You can find <font color="LEVEL">the corpses</font> <font color="LEVEL">beyond the cracked gap</font>.
</body></html> </body></html>

View File

@@ -1,7 +1,7 @@
<html><body>Nagel:<br> <html><body>Nagel:<br>
Thank you!<br> Thank you!<br1>
The pain will hopefully start to subside now... hopefully.<br> The pain will hopefully start to subside now... hopefully.<br>
Listen, I have one more favor to ask. The other rangers all knew I was suffering the most, and were all looking out for me, <font color="LEVEL">Celin</font> especially.<br> Listen, I have one more favor to ask. The other rangers all knew I was suffering the most, and were all looking out for me, <font color="LEVEL">Celin</font> especially.<br1>
Could you tell Celin what's happened? I'd appreciate it...<br> Could you tell Celin what's happened? I'd appreciate it...<br>
<button align=LEFT icon=NORMAL action="bypass -h Quest Q10363_RequestOfTheSeeker 33450-06.html">"Of course."</button> <Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10363_RequestOfTheSeeker 33450-06.html">"Of course."</Button>
</body></html> </body></html>

View File

@@ -1,4 +1,4 @@
<html><body>Nagel:<br> <html><body>Nagel:<br>
Thank you!<br> Thank you!<br1>
<font color="LEVEL">Celin</font> is in <font color="LEVEL">Exploration Zone 3</font>. Thank you again! <font color="LEVEL">Celin</font> is in <font color="LEVEL">Exploration Zone 3</font>. Thank you again!
</body></html> </body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Nagel:<br>
The sounds haven't gone away, but at least they are much quieter now than they were before.<br>
(You have already completed the quest)
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Nagel:<br>
Please... help us.<br>
(Only characters between level 10-20, and who have completed the "Verification of Ranger" quest, may start this quest)
</body></html>

View File

@@ -1,4 +1,4 @@
<html><body>Celin:<br> <html><body>Celin:<br>
Did you hear crying on your way here? I think the noises have died down, but mayby I'm finally getting used to them...<br> Did you hear crying on your way here? I think the noises have died down, but maybe I'm finally getting used to them...<br>
<button align=LEFT icon=NORMAL action="bypass -h Quest Q10363_RequestOfTheSeeker 33451-02.html">"I've seen them, and paid my condolences.</button> <Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10363_RequestOfTheSeeker 33451-02.html">"I've seen them, and paid my condolences."</Button>
</body></html> </body></html>

View File

@@ -1,6 +1,6 @@
<html><body>Celin:<br> <html><body>Celin:<br>
You have? Oh... oh thank you!<br> You have? Oh... oh thank you!<br1>
Maybe now we can finally get some rest, and actually get some work done around here! The noises were so upsetting...<br> Maybe now we can finally get some rest, and actually get some work done around here! The noises were so upsetting...<br>
Please, tell me how Nagel is? We all found it tough, but he dealt with everything much worse than the rest of us.<br> Please, tell me how Nagel is? We all found it tough, but he dealt with everything much worse than the rest of us.<br>
<button align=LEFT icon=NORMAL action="bypass -h Quest Q10363_RequestOfTheSeeker 33451-03.html">"Don't worry. He's fine now."</button> <Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10363_RequestOfTheSeeker 33451-03.html">"Don't worry. He's fine now."</Button>
</body></html> </body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Celin:<br>
Things are much better now, all thanks to you!<br>
(The quest has already been completed)
</body></html>

View File

@@ -16,6 +16,7 @@
*/ */
package quests.Q10363_RequestOfTheSeeker; package quests.Q10363_RequestOfTheSeeker;
import com.l2jmobius.gameserver.model.Location;
import com.l2jmobius.gameserver.model.actor.L2Npc; import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.holders.ItemHolder; import com.l2jmobius.gameserver.model.holders.ItemHolder;
@@ -29,7 +30,7 @@ import quests.Q10362_CertificationOfTheSeeker.Q10362_CertificationOfTheSeeker;
/** /**
* Request of the Seeker (10363) * Request of the Seeker (10363)
* @author spider * @author spider, gyo
*/ */
public class Q10363_RequestOfTheSeeker extends Quest public class Q10363_RequestOfTheSeeker extends Quest
{ {
@@ -43,16 +44,25 @@ public class Q10363_RequestOfTheSeeker extends Quest
32963, 32963,
32964 32964
}; };
// Monsters
private static final int CRAWLER = 22991;
private static final int STALKER = 22992;
private static final int RESURRECTED_VENGEFUL_SPIRIT1 = 19157;
private static final int RESURRECTED_VENGEFUL_SPIRIT2 = 19158;
// Rewards // Rewards
private static final int ADENA_REWARD = 48000; private static final int ADENA_REWARD = 48000;
private static final int EXP_REWARD = 72000; private static final int EXP_REWARD = 72000;
private static final int SP_REWARD = 16; private static final int SP_REWARD = 16;
private static final ItemHolder HEALING_POTIONS = new ItemHolder(1060, 100); private static final ItemHolder HEALING_POTIONS = new ItemHolder(1060, 100);
private static final ItemHolder WOODEN_HELMET = new ItemHolder(43, 1); private static final ItemHolder WOODEN_HELMET = new ItemHolder(43, 1);
// Social Action IDs
private static final int LAUGH = 10;
private static final int DANCE = 12;
private static final int SORROW = 13;
// Others // Others
private static final int SORROW_ID = 13;
private static final int MIN_LEVEL = 12; private static final int MIN_LEVEL = 12;
private static final int MAX_LEVEL = 20; private static final int MAX_LEVEL = 20;
private static final int distanceLimit = 70;
public Q10363_RequestOfTheSeeker() public Q10363_RequestOfTheSeeker()
{ {
@@ -60,8 +70,8 @@ public class Q10363_RequestOfTheSeeker extends Quest
addStartNpc(NAGEL); addStartNpc(NAGEL);
addTalkId(NAGEL, CELIN); addTalkId(NAGEL, CELIN);
addSocialActionSeeId(CORPSES); addSocialActionSeeId(CORPSES);
addCondLevel(MIN_LEVEL, MAX_LEVEL, "no_level.htm"); addCondLevel(MIN_LEVEL, MAX_LEVEL, "33450-08.htm");
addCondCompletedQuest(Q10362_CertificationOfTheSeeker.class.getSimpleName(), "no_prequest.html"); addCondCompletedQuest(Q10362_CertificationOfTheSeeker.class.getSimpleName(), "33450-08.htm");
} }
@Override @Override
@@ -114,6 +124,11 @@ public class Q10363_RequestOfTheSeeker extends Quest
} }
break; break;
} }
case "life_over":
{
npc.deleteMe();
return null;
}
} }
return htmltext; return htmltext;
} }
@@ -135,6 +150,10 @@ public class Q10363_RequestOfTheSeeker extends Quest
switch (qs.getCond()) switch (qs.getCond())
{ {
case 1: case 1:
case 2:
case 3:
case 4:
case 5:
{ {
htmltext = npc.getId() == NAGEL ? "33450-04.html" : getNoQuestMsg(player); htmltext = npc.getId() == NAGEL ? "33450-04.html" : getNoQuestMsg(player);
break; break;
@@ -154,7 +173,7 @@ public class Q10363_RequestOfTheSeeker extends Quest
} }
case State.COMPLETED: case State.COMPLETED:
{ {
htmltext = getAlreadyCompletedMsg(player); htmltext = npc.getId() == NAGEL ? "33450-07.html" : "33451-04.html";
break; break;
} }
} }
@@ -164,47 +183,107 @@ public class Q10363_RequestOfTheSeeker extends Quest
@Override @Override
public String onSocialActionSee(L2Npc npc, L2PcInstance caster, int actionId) public String onSocialActionSee(L2Npc npc, L2PcInstance caster, int actionId)
{ {
final QuestState qs = getQuestState(caster, false); if ((caster == null) || (npc == null))
if ((qs != null) && (qs.getCond() >= 1) && (qs.getCond() < 6) && (actionId == SORROW_ID) && (caster.getTarget().getObjectId() == npc.getObjectId()))
{ {
switch (qs.getCond()) return super.onSocialActionSee(npc, caster, actionId);
}
if ((caster.getTarget() == null) || !caster.getTarget().isNpc())
{
return super.onSocialActionSee(npc, caster, actionId);
}
final double distance = caster.calculateDistance(caster.getTarget().getLocation(), true, false);
final QuestState qs = getQuestState(caster, false);
if (actionId == SORROW)
{
if (distance > distanceLimit)
{ {
case 1: showOnScreenMsg(caster, NpcStringId.YOU_ARE_TOO_FAR_FROM_THE_CORPSE_TO_SHOW_YOUR_CONDOLENCES, ExShowScreenMessage.TOP_CENTER, 10000);
npc.deleteMe();
}
else if (qs != null)
{
switch (qs.getCond())
{ {
showOnScreenMsg(caster, NpcStringId.YOU_VE_SHOWN_YOUR_CONDOLENCES_TO_ONE_CORPSE, ExShowScreenMessage.TOP_CENTER, 5000); case 1:
qs.setCond(2); {
npc.deleteMe(); showOnScreenMsg(caster, NpcStringId.YOU_VE_SHOWN_YOUR_CONDOLENCES_TO_ONE_CORPSE, ExShowScreenMessage.TOP_CENTER, 10000);
break; qs.setCond(2, true);
} npc.deleteMe();
case 2: break;
{ }
showOnScreenMsg(caster, NpcStringId.YOU_VE_SHOWN_YOUR_CONDOLENCES_TO_A_SECOND_CORPSE, ExShowScreenMessage.TOP_CENTER, 5000); case 2:
qs.setCond(3); {
npc.deleteMe(); showOnScreenMsg(caster, NpcStringId.YOU_VE_SHOWN_YOUR_CONDOLENCES_TO_A_SECOND_CORPSE, ExShowScreenMessage.TOP_CENTER, 10000);
break; qs.setCond(3, true);
} npc.deleteMe();
case 3: break;
{ }
showOnScreenMsg(caster, NpcStringId.YOU_VE_SHOWN_YOUR_CONDOLENCES_TO_A_THIRD_CORPSE, ExShowScreenMessage.TOP_CENTER, 5000); case 3:
qs.setCond(4); {
npc.deleteMe(); showOnScreenMsg(caster, NpcStringId.YOU_VE_SHOWN_YOUR_CONDOLENCES_TO_A_THIRD_CORPSE, ExShowScreenMessage.TOP_CENTER, 10000);
break; qs.setCond(4, true);
} npc.deleteMe();
case 4: break;
{ }
showOnScreenMsg(caster, NpcStringId.YOU_VE_SHOWN_YOUR_CONDOLENCES_TO_A_FOURTH_CORPSE, ExShowScreenMessage.TOP_CENTER, 5000); case 4:
qs.setCond(5); {
npc.deleteMe(); showOnScreenMsg(caster, NpcStringId.YOU_VE_SHOWN_YOUR_CONDOLENCES_TO_A_FOURTH_CORPSE, ExShowScreenMessage.TOP_CENTER, 10000);
break; qs.setCond(5, true);
} npc.deleteMe();
case 5: break;
{ }
showOnScreenMsg(caster, NpcStringId.YOU_VE_SHOWN_YOUR_CONDOLENCES_TO_A_FIFTH_CORPSE, ExShowScreenMessage.TOP_CENTER, 5000); case 5:
qs.setCond(6); {
npc.deleteMe(); showOnScreenMsg(caster, NpcStringId.YOU_VE_SHOWN_YOUR_CONDOLENCES_TO_A_FIFTH_CORPSE, ExShowScreenMessage.TOP_CENTER, 10000);
break; qs.setCond(6, true);
npc.deleteMe();
break;
}
default:
{
showOnScreenMsg(caster, NpcStringId.GRUDGE_OF_YE_SAGIRA_VICTIMS_HAVE_BEEN_RELIEVED_WITH_YOUR_TEARS, ExShowScreenMessage.TOP_CENTER, 10000);
npc.deleteMe();
break;
}
} }
} }
else
{
showOnScreenMsg(caster, NpcStringId.GRUDGE_OF_YE_SAGIRA_VICTIMS_HAVE_BEEN_RELIEVED_WITH_YOUR_TEARS, ExShowScreenMessage.TOP_CENTER, 10000);
npc.deleteMe();
}
}
else if ((actionId == LAUGH) || (actionId == DANCE))
{
if (distance > distanceLimit)
{
showOnScreenMsg(caster, NpcStringId.YOU_ARE_TOO_FAR_FROM_THE_CORPSE, ExShowScreenMessage.TOP_CENTER, 10000);
npc.deleteMe();
}
else if ((qs == null) || (qs.getState() != State.STARTED))
{
addSpawn(getRandom(1) == 0 ? CRAWLER : STALKER, npc.getLocation());
npc.deleteMe();
}
else
{
showOnScreenMsg(caster, NpcStringId.DON_T_TOY_WITH_THE_DEAD, ExShowScreenMessage.TOP_CENTER, 10000);
L2Npc Spirit1 = addSpawn(RESURRECTED_VENGEFUL_SPIRIT1, new Location(caster.getX() - getRandom(100), caster.getY() - getRandom(100), caster.getZ(), 0));
Spirit1.setCurrentHp(Spirit1.getMaxHp() / 2);
addAttackDesire(Spirit1, caster);
startQuestTimer("life_over", 20000, Spirit1, caster);
L2Npc Spirit2 = addSpawn(RESURRECTED_VENGEFUL_SPIRIT2, new Location(caster.getX() - getRandom(100), caster.getY() - getRandom(100), caster.getZ(), 0));
Spirit2.setCurrentHp(Spirit2.getMaxHp() / 2);
addAttackDesire(Spirit2, caster);
startQuestTimer("life_over", 20000, Spirit2, caster);
npc.deleteMe();
}
}
else
{
addSpawn(getRandom(1) == 0 ? CRAWLER : STALKER, ((L2Npc) caster.getTarget()).getLocation());
npc.deleteMe();
} }
return super.onSocialActionSee(npc, caster, actionId); return super.onSocialActionSee(npc, caster, actionId);
} }

View File

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

View File

@@ -1,2 +0,0 @@
<html><body>To begin this quest, you need to complete Roles of the Seeker quest first.
</body></html>

View File

@@ -1409,9 +1409,10 @@
<height normal="25" /> <height normal="25" />
</collision> </collision>
</npc> </npc>
<npc id="19157" level="10" type="L2Npc" name="Resurrected Vengeful Spirit"> <npc id="19157" level="10" type="L2Monster" name="Resurrected Vengeful Spirit">
<!-- Source http://l2i-god.gaikotsu.ru/ (Lindvior) --> <!-- Source http://l2i-god.gaikotsu.ru/ (Lindvior) -->
<race>HUMANOID</race> <race>HUMANOID</race>
<acquire exp="0" sp="0" />
<stats> <stats>
<vitals hp="258" hpRegen="7.5" mp="258" mpRegen="2.7" /> <vitals hp="258" hpRegen="7.5" mp="258" mpRegen="2.7" />
<attack physical="971" magical="663" random="30" critical="4" accuracy="4.75" attackSpeed="253" type="SWORD" range="40" distance="80" width="120" /> <attack physical="971" magical="663" random="30" critical="4" accuracy="4.75" attackSpeed="253" type="SWORD" range="40" distance="80" width="120" />
@@ -1420,12 +1421,12 @@
<defence fire="160" water="160" wind="160" earth="160" holy="160" dark="160" /> <defence fire="160" water="160" wind="160" earth="160" holy="160" dark="160" />
</attribute> </attribute>
<speed> <speed>
<walk ground="1" /> <walk ground="8" />
<run ground="1" /> <run ground="120" />
</speed> </speed>
<hitTime>333</hitTime> <hitTime>333</hitTime>
</stats> </stats>
<status attackable="false" /> <status attackable="true" />
<skillList> <skillList>
<skill id="4416" level="6" /> <skill id="4416" level="6" />
</skillList> </skillList>
@@ -1435,9 +1436,10 @@
<height normal="18.5" /> <height normal="18.5" />
</collision> </collision>
</npc> </npc>
<npc id="19158" level="8" type="L2Npc" name="Resurrected Vengeful Spirit"> <npc id="19158" level="8" type="L2Monster" name="Resurrected Vengeful Spirit">
<!-- Source http://l2i-god.gaikotsu.ru/ (Lindvior) --> <!-- Source http://l2i-god.gaikotsu.ru/ (Lindvior) -->
<race>HUMAN</race> <race>HUMAN</race>
<acquire exp="0" sp="0" />
<stats> <stats>
<vitals hp="198" hpRegen="7.5" mp="198" mpRegen="2.7" /> <vitals hp="198" hpRegen="7.5" mp="198" mpRegen="2.7" />
<attack physical="971" magical="663" random="30" critical="4" accuracy="4.75" attackSpeed="253" type="SWORD" range="40" distance="80" width="120" /> <attack physical="971" magical="663" random="30" critical="4" accuracy="4.75" attackSpeed="253" type="SWORD" range="40" distance="80" width="120" />
@@ -1446,12 +1448,12 @@
<defence fire="160" water="160" wind="160" earth="160" holy="160" dark="160" /> <defence fire="160" water="160" wind="160" earth="160" holy="160" dark="160" />
</attribute> </attribute>
<speed> <speed>
<walk ground="1" /> <walk ground="8" />
<run ground="1" /> <run ground="120" />
</speed> </speed>
<hitTime>333</hitTime> <hitTime>333</hitTime>
</stats> </stats>
<status attackable="false" /> <status attackable="true" />
<skillList> <skillList>
<skill id="4416" level="14" /> <skill id="4416" level="14" />
</skillList> </skillList>

View File

@@ -1541,7 +1541,7 @@
</speed> </speed>
<hitTime>398</hitTime> <hitTime>398</hitTime>
</stats> </stats>
<status attackable="false" /> <status attackable="false" talkable="false" />
<skillList> <skillList>
<skill id="4416" level="14" /> <skill id="4416" level="14" />
</skillList> </skillList>
@@ -1566,7 +1566,7 @@
</speed> </speed>
<hitTime>398</hitTime> <hitTime>398</hitTime>
</stats> </stats>
<status attackable="false" /> <status attackable="false" talkable="false" />
<skillList> <skillList>
<skill id="4416" level="14" /> <skill id="4416" level="14" />
</skillList> </skillList>
@@ -1591,7 +1591,7 @@
</speed> </speed>
<hitTime>398</hitTime> <hitTime>398</hitTime>
</stats> </stats>
<status attackable="false" /> <status attackable="false" talkable="false" />
<skillList> <skillList>
<skill id="4416" level="14" /> <skill id="4416" level="14" />
</skillList> </skillList>
@@ -1616,7 +1616,7 @@
</speed> </speed>
<hitTime>398</hitTime> <hitTime>398</hitTime>
</stats> </stats>
<status attackable="false" /> <status attackable="false" talkable="false" />
<skillList> <skillList>
<skill id="4416" level="14" /> <skill id="4416" level="14" />
</skillList> </skillList>

View File

@@ -6655,17 +6655,10 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
return; return;
} }
final Collection<L2Object> objs = getKnownList().getKnownObjects().values(); L2Object target = getTarget();
for (L2Object npc : objs) if ((target != null) && target.isNpc())
{ {
if ((npc != null) && npc.isNpc()) EventDispatcher.getInstance().notifyEventAsync(new OnNpcSocialActionSee((L2Npc) target, getActingPlayer(), id), (L2Npc) target);
{
final L2Npc npcMob = (L2Npc) npc;
if (npcMob.isInsideRadius(this, 150, true, true)) // 150 radius?
{
EventDispatcher.getInstance().notifyEventAsync(new OnNpcSocialActionSee(npcMob, getActingPlayer(), id), npcMob);
}
}
} }
} }

View File

@@ -4372,17 +4372,10 @@ public final class L2PcInstance extends L2Playable
public final void broadcastPacket(SocialAction sa) public final void broadcastPacket(SocialAction sa)
{ {
final Collection<L2Object> objs = getKnownList().getKnownObjects().values(); L2Object target = getTarget();
for (L2Object npc : objs) if ((target != null) && target.isNpc())
{ {
if ((npc != null) && npc.isNpc()) EventDispatcher.getInstance().notifyEventAsync(new OnNpcSocialActionSee((L2Npc) target, getActingPlayer(), sa.getId()), (L2Npc) target);
{
final L2Npc npcMob = (L2Npc) npc;
if (npcMob.isInsideRadius(this, 100, true, true)) // 150 radius?
{
EventDispatcher.getInstance().notifyEventAsync(new OnNpcSocialActionSee(npcMob, getActingPlayer(), sa.getId()), npcMob);
}
}
} }
broadcastPacket((L2GameServerPacket) sa); broadcastPacket((L2GameServerPacket) sa);
} }