Merged with released L2J-Unity files.

This commit is contained in:
mobiusdev
2016-06-12 01:34:09 +00:00
parent e003e87887
commit 635557f5da
18352 changed files with 3245113 additions and 2892959 deletions

View File

@@ -1,5 +1,5 @@
<html><body>Nagel:<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>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10363_RequestOfTheSeeker 33450-02.htm">"What do you hear exactly?"</Button>
<html><body>Nagel:<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>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10363_RequestOfTheSeeker 33450-02.htm">"What do you hear exactly?"</Button>
</body></html>

View File

@@ -1,6 +1,6 @@
<html><body>Nagel:<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 their families and friends...<br>
Please - stop their suffering.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10363_RequestOfTheSeeker 33450-03.htm">"I'll try."</Button>
<html><body>Nagel:<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 their families and friends...<br>
Please - stop their suffering.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10363_RequestOfTheSeeker 33450-03.htm">"I'll try."</Button>
</body></html>

View File

@@ -1,6 +1,5 @@
<html><body>Nagel:<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>
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>
<html><body>Nagel:<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>
(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>.)
</body></html>

View File

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

View File

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

View File

@@ -1,7 +1,7 @@
<html><body>Nagel:<br>
Thank you!<br1>
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.<br1>
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>
<html><body>Nagel:<br>
Thank you!<br1>
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.<br1>
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.htm">"Of course."</Button>
</body></html>

View File

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

View File

@@ -1,4 +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>
<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 +0,0 @@
<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

@@ -1,4 +1,4 @@
<html><body>Celin:<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>
<html><body>Celin:<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.htm">"I've seen them, and paid my condolences."</Button>
</body></html>

View File

@@ -1,6 +1,6 @@
<html><body>Celin:<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>
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>
<html><body>Celin:<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>
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.htm">"Don't worry. He's fine now."</Button>
</body></html>

View File

@@ -1,4 +1,4 @@
<html><body>Celin:<br>
Good! I'm glad to hear that.<br>
He hadn't slept or eaten in days, you know. Carry on the way you've been going and you'll be a great ranger.
<html><body>Celin:<br>
Good! I'm glad to hear that.<br>
He hadn't slept or eaten in days, you know. Carry on the way you've been been going and you'll be a great ranger.
</body></html>

View File

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

View File

@@ -1,277 +1,276 @@
/*
* 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.Q10363_RequestOfTheSeeker;
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.holders.ItemHolder;
import com.l2jmobius.gameserver.model.quest.Quest;
import com.l2jmobius.gameserver.model.quest.QuestState;
import com.l2jmobius.gameserver.model.quest.State;
import com.l2jmobius.gameserver.network.NpcStringId;
import com.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import quests.Q10362_CertificationOfTheSeeker.Q10362_CertificationOfTheSeeker;
/**
* Request of the Seeker (10363)
* @author spider, gyo
*/
public class Q10363_RequestOfTheSeeker extends Quest
{
// NPCs
private static final int NAGEL = 33450;
private static final int CELIN = 33451;
private static final int[] CORPSES =
{
32961,
32962,
32963,
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
private static final int ADENA_REWARD = 48000;
private static final int EXP_REWARD = 72000;
private static final int SP_REWARD = 16;
private static final ItemHolder HEALING_POTIONS = new ItemHolder(1060, 100);
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
private static final int MIN_LEVEL = 12;
private static final int MAX_LEVEL = 20;
private static final int distanceLimit = 70;
public Q10363_RequestOfTheSeeker()
{
super(10363, Q10363_RequestOfTheSeeker.class.getSimpleName(), "Request of the Seeker");
addStartNpc(NAGEL);
addTalkId(NAGEL, CELIN);
addSocialActionSeeId(CORPSES);
addCondLevel(MIN_LEVEL, MAX_LEVEL, "33450-08.htm");
addCondCompletedQuest(Q10362_CertificationOfTheSeeker.class.getSimpleName(), "33450-08.htm");
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return null;
}
String htmltext = null;
switch (event)
{
case "33450-02.htm":
{
htmltext = event;
break;
}
case "33450-03.htm": // start quest
{
qs.startQuest();
htmltext = event;
break;
}
case "33450-06.html":
{
if (qs.getCond() == 6)
{
qs.setCond(7);
showOnScreenMsg(player, NpcStringId.USE_THE_YE_SAGIRA_TELEPORT_DEVICE_TO_GO_TO_EXPLORATION_AREA_3, ExShowScreenMessage.TOP_CENTER, 10000);
htmltext = event;
}
break;
}
case "33451-02.html":
{
htmltext = event;
break;
}
case "33451-03.html":
{
if (qs.isCond(7))
{
giveAdena(player, ADENA_REWARD, true);
addExpAndSp(player, EXP_REWARD, SP_REWARD);
giveItems(player, WOODEN_HELMET);
giveItems(player, HEALING_POTIONS);
qs.exitQuest(false, true);
htmltext = event;
}
break;
}
case "life_over":
{
npc.deleteMe();
return null;
}
}
return htmltext;
}
@Override
public String onTalk(L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = null;
switch (qs.getState())
{
case State.CREATED:
{
htmltext = npc.getId() == NAGEL ? "33450-01.htm" : getNoQuestMsg(player);
break;
}
case State.STARTED:
{
switch (qs.getCond())
{
case 1:
case 2:
case 3:
case 4:
case 5:
{
htmltext = npc.getId() == NAGEL ? "33450-04.html" : getNoQuestMsg(player);
break;
}
case 6:
{
htmltext = npc.getId() == NAGEL ? "33450-05.html" : getNoQuestMsg(player);
break;
}
case 7:
{
htmltext = npc.getId() == NAGEL ? "33450-06.html" : "33451-01.html";
break;
}
}
break;
}
case State.COMPLETED:
{
htmltext = npc.getId() == NAGEL ? "33450-07.html" : "33451-04.html";
break;
}
}
return htmltext;
}
@Override
public String onSocialActionSee(L2Npc npc, L2PcInstance caster, int actionId)
{
if ((caster == null) || (npc == null) || (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)
{
showOnScreenMsg(caster, NpcStringId.YOU_ARE_TOO_FAR_FROM_THE_CORPSE_TO_SHOW_YOUR_CONDOLENCES, ExShowScreenMessage.TOP_CENTER, 10000);
}
else if (qs != null)
{
switch (qs.getCond())
{
case 1:
{
showOnScreenMsg(caster, NpcStringId.YOU_VE_SHOWN_YOUR_CONDOLENCES_TO_ONE_CORPSE, ExShowScreenMessage.TOP_CENTER, 10000);
qs.setCond(2, true);
break;
}
case 2:
{
showOnScreenMsg(caster, NpcStringId.YOU_VE_SHOWN_YOUR_CONDOLENCES_TO_A_SECOND_CORPSE, ExShowScreenMessage.TOP_CENTER, 10000);
qs.setCond(3, true);
break;
}
case 3:
{
showOnScreenMsg(caster, NpcStringId.YOU_VE_SHOWN_YOUR_CONDOLENCES_TO_A_THIRD_CORPSE, ExShowScreenMessage.TOP_CENTER, 10000);
qs.setCond(4, true);
break;
}
case 4:
{
showOnScreenMsg(caster, NpcStringId.YOU_VE_SHOWN_YOUR_CONDOLENCES_TO_A_FOURTH_CORPSE, ExShowScreenMessage.TOP_CENTER, 10000);
qs.setCond(5, true);
break;
}
case 5:
{
showOnScreenMsg(caster, NpcStringId.YOU_VE_SHOWN_YOUR_CONDOLENCES_TO_A_FIFTH_CORPSE, ExShowScreenMessage.TOP_CENTER, 10000);
qs.setCond(6, true);
break;
}
default:
{
showOnScreenMsg(caster, NpcStringId.GRUDGE_OF_YE_SAGIRA_VICTIMS_HAVE_BEEN_RELIEVED_WITH_YOUR_TEARS, ExShowScreenMessage.TOP_CENTER, 10000);
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);
}
else if ((qs == null) || (qs.getState() != State.STARTED))
{
addSpawn(getRandom(1) == 0 ? CRAWLER : STALKER, npc.getLocation());
}
else
{
showOnScreenMsg(caster, NpcStringId.DON_T_TOY_WITH_THE_DEAD, ExShowScreenMessage.TOP_CENTER, 10000);
final 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);
final 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);
}
}
else
{
addSpawn(getRandom(1) == 0 ? CRAWLER : STALKER, ((L2Npc) caster.getTarget()).getLocation());
}
npc.deleteMe();
return super.onSocialActionSee(npc, caster, actionId);
}
}
/*
* 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.Q10363_RequestOfTheSeeker;
import com.l2jmobius.commons.util.CommonUtil;
import com.l2jmobius.gameserver.model.L2Object;
import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.events.EventType;
import com.l2jmobius.gameserver.model.events.ListenerRegisterType;
import com.l2jmobius.gameserver.model.events.annotations.RegisterEvent;
import com.l2jmobius.gameserver.model.events.annotations.RegisterType;
import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerSocialAction;
import com.l2jmobius.gameserver.model.quest.Quest;
import com.l2jmobius.gameserver.model.quest.QuestState;
import com.l2jmobius.gameserver.model.quest.State;
import com.l2jmobius.gameserver.network.NpcStringId;
import com.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import quests.Q10362_CertificationOfTheSeeker.Q10362_CertificationOfTheSeeker;
/**
* Request of the Seeker (10363)
* @author Gladicek
*/
public final class Q10363_RequestOfTheSeeker extends Quest
{
// NPCs
private static final int NAGEL = 33450;
private static final int CELIN = 33451;
private static final int STALKER = 22992;
private static final int CRAWLER = 22991;
private static final int[] CORPSES =
{
32961,
32962,
32963,
32964,
};
// Items
private static final int WOODEN_HELMET = 43;
private static final int HEALING_POTION = 1060;
// Misc
private static final int MIN_LEVEL = 12;
private static final int MAX_LEVEL = 20;
private static final int SOCIAL_SORROW = 13;
public Q10363_RequestOfTheSeeker()
{
super(10363);
addStartNpc(NAGEL);
addTalkId(NAGEL, CELIN);
addSpawnId(CORPSES);
addCondLevel(MIN_LEVEL, MAX_LEVEL, "33450-07.htm");
addCondCompletedQuest(Q10362_CertificationOfTheSeeker.class.getSimpleName(), "33450-07.htm");
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return null;
}
String htmltext = null;
switch (event)
{
case "33450-02.htm":
case "33451-02.htm":
{
htmltext = event;
break;
}
case "33450-03.htm":
{
qs.startQuest();
htmltext = event;
break;
}
case "33450-06.htm":
{
if (qs.isCond(6))
{
showOnScreenMsg(player, NpcStringId.USE_THE_YE_SAGIRA_TELEPORT_DEVICE_TO_GO_TO_EXPLORATION_AREA_3, ExShowScreenMessage.TOP_CENTER, 4500);
qs.setCond(7, true);
htmltext = event;
break;
}
break;
}
case "33451-03.htm":
{
if (qs.isCond(7))
{
giveItems(player, WOODEN_HELMET, 1);
giveAdena(player, 480, true);
giveItems(player, HEALING_POTION, 100);
addExpAndSp(player, 70200, 16);
qs.exitQuest(false, true);
htmltext = event;
break;
}
break;
}
}
return htmltext;
}
@Override
public String onTalk(L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = null;
switch (qs.getState())
{
case State.CREATED:
{
if (npc.getId() == NAGEL)
{
htmltext = "33450-01.htm";
break;
}
break;
}
case State.STARTED:
{
if (npc.getId() == NAGEL)
{
switch (qs.getCond())
{
case 1:
case 2:
case 3:
case 4:
case 5:
{
htmltext = "33450-04.htm";
break;
}
case 6:
{
htmltext = "33450-05.htm";
break;
}
case 7:
{
htmltext = "33450-06.htm";
break;
}
}
}
else if (npc.getId() == CELIN)
{
if (qs.isCond(7))
{
htmltext = "33451-01.htm";
break;
}
}
break;
}
case State.COMPLETED:
{
htmltext = npc.getId() == NAGEL ? "33450-07.htm" : "33451-04.htm";
break;
}
}
return htmltext;
}
@RegisterEvent(EventType.ON_PLAYER_SOCIAL_ACTION)
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
public void onPlayerSocialAction(OnPlayerSocialAction event)
{
final L2PcInstance player = event.getActiveChar();
final QuestState qs = getQuestState(player, false);
final L2Object target = player.getTarget();
if ((target != null) && target.isNpc() && CommonUtil.contains(CORPSES, target.getId()))
{
final L2Npc npc = (L2Npc) player.getTarget();
if (!player.isInsideRadius(npc, 120, true, true))
{
showOnScreenMsg(player, NpcStringId.YOU_ARE_TOO_FAR_FROM_THE_CORPSE, ExShowScreenMessage.TOP_CENTER, 4500);
npc.deleteMe();
}
else if (event.getSocialActionId() != SOCIAL_SORROW)
{
addSpawn((getRandomBoolean() ? CRAWLER : STALKER), npc, false, 0, true);
npc.deleteMe();
}
else if ((qs == null) || qs.isCompleted())
{
showOnScreenMsg(player, NpcStringId.GRUDGE_OF_YE_SAGIRA_VICTIMS_HAVE_BEEN_RELIEVED_WITH_YOUR_TEARS, ExShowScreenMessage.TOP_CENTER, 4500);
npc.deleteMe();
}
else
{
NpcStringId npcStringId = null;
switch (qs.getCond())
{
case 1:
{
npcStringId = NpcStringId.YOU_VE_SHOWN_YOUR_CONDOLENCES_TO_ONE_CORPSE;
qs.setCond(2, true);
break;
}
case 2:
{
npcStringId = NpcStringId.YOU_VE_SHOWN_YOUR_CONDOLENCES_TO_A_SECOND_CORPSE;
qs.setCond(3, true);
break;
}
case 3:
{
npcStringId = NpcStringId.YOU_VE_SHOWN_YOUR_CONDOLENCES_TO_A_THIRD_CORPSE;
qs.setCond(4, true);
break;
}
case 4:
{
npcStringId = NpcStringId.YOU_VE_SHOWN_YOUR_CONDOLENCES_TO_A_FOURTH_CORPSE;
qs.setCond(5, true);
break;
}
case 5:
{
npcStringId = NpcStringId.YOU_VE_SHOWN_YOUR_CONDOLENCES_TO_A_FIFTH_CORPSE;
qs.setCond(6, true);
break;
}
case 6:
case 7:
{
npcStringId = NpcStringId.GRUDGE_OF_YE_SAGIRA_VICTIMS_HAVE_BEEN_RELIEVED_WITH_YOUR_TEARS;
break;
}
}
npc.deleteMe();
if (npcStringId != null)
{
showOnScreenMsg(player, npcStringId, ExShowScreenMessage.TOP_CENTER, 4500);
}
}
}
}
@Override
public String onSpawn(L2Npc npc)
{
npc.setRandomAnimation(false);
return super.onSpawn(npc);
}
}