Addition of quests 10968, 10969, 10970, 10974, 10975, 10976, 10977 and 10978.

Contributed by quangnguyen.
This commit is contained in:
MobiusDevelopment 2021-01-30 07:49:05 +00:00
parent 74aa98440f
commit 611eddf635
92 changed files with 1860 additions and 313 deletions

View File

@ -14,12 +14,4 @@
944 Deton's Eighth Request
945 Deton's Ninth Request
946 Deton's Tenth Request
10960 Tutorial: Blue Gemstones
10968 The Power of the Magic Lamp
10969 Spore-infested place
10970 Respect for Graves
10974 New Stylish Equipment
10975 Let's Pay Respects to our Fallen Brethren
10976 Memory of the Glorious Past
10977 Traces of Battle
10978 Missing Pets
10960 Tutorial: Blue Gemstones

View File

@ -0,0 +1,7 @@
<html><body>High Priest Maximillian:<br>
To tell the truth, I myself have never seen it. But I know it can be obtained by adventurers while they are killing monsters.<br>
By doing that, you charge the Magic Lamp bar, and when it is full, you can play a game. By the way, is that a Magic Lantern in your hands?<br>
You can get XP and SP depending on the game results. Though I can be mistaken, because I rarely leave the temple, and my knowledge of the outside world is rather limited.<br>
Is the old days you would get a Lantern after playing the game and then use it to gain XP and SP. But the Ivory Tower Wizards used Dwarven research to upgrade the technology and noow you get XP and SP directly.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10968_ThePowerOfTheMagicLamp 30120-02.htm">Learn more</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>High Priest Maximillian:<br>
I am very fascinated by the Magic Lamp and the way it grants XP and SP. It's a true miracle that resembles divine blessing. It makes me so sad to realise that I will never get to experience it myself... A capable warrior I am not.<br>
You, however, look more than worthy of this marvel. Why don't you charge the Magic Lamp bar and give the game a go once you have a chance?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10968_ThePowerOfTheMagicLamp 30120-03.htm">Ask what to do</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>High Priest Maximillian:<br>
One more thing! It's very easy to charge the Magic Lamp bar. It pretty much charges itself when you kill monsters and gain XP.<br>
The Magic Lamp games have four levels. Characters who have reaced Lv.76 can play the very best Magic Lamp games. If you are not that strong yet, I wish you luck with the first level game.<br>
In the meantime I will prepare a very useful gift for you. We'll talk again once we are done.<br>
One more thing! I see you're trying to think of a good place to go fight monsters? I know of a curious place, but I doubt it would be wise for you to go there just yet. If you have a <font color="LEVEL">Blue Lantern</font> in your inventory, <font color="LEVEL">use</font> it and come talk to me gain.<br>
</body></html>

View File

@ -0,0 +1,7 @@
<html><body>High Priest Maximillian:<br>
One more thing! I've been waiting for you. And so has my gift.<br>
Have you tired to play the Magic Lamp game? Don't worry if you haven't. The Magic Lamp bar is probably almost full.<br>
When the Magic Lamp is full, it can't store any more energy, no matter how many more monsters you kill. So don't hesitate to play the game once the lamp is full.<br>
Remember that you can play a maximum of 300 games before the Magic Lamp becomes empty.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10968_ThePowerOfTheMagicLamp 30120-05.html">Nod</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>High Priest Maximillian:<br>
Would you like to receive the gift I've prepared?<br>
Here, that's Magic Fire, it allows you to charge your Magic Lamp bar faster.<br>
I'll be happy if you make use of it.
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>High Priest Maximillian:<br>
Tell me, have you heard of the Magic Lamp?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10968_ThePowerOfTheMagicLamp 30120-01.htm">"What do you mean?"</Button>
</body></html>

View File

@ -0,0 +1,135 @@
/*
* 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.Q10968_ThePowerOfTheMagicLamp;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.ListenerRegisterType;
import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent;
import org.l2jmobius.gameserver.model.events.annotations.RegisterType;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnAttackableKill;
import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState;
import org.l2jmobius.gameserver.network.NpcStringId;
/**
* @author quangnguyen, Mobius
*/
public class Q10968_ThePowerOfTheMagicLamp extends Quest
{
// NPC
private static final int MAXIMILLIAN = 30120;
// Items
// private static final int BLUE_LANTERN = 93074;
private static final ItemHolder MAGIC_FIRE = new ItemHolder(92033, 1);
// Misc
private static final int MIN_LEVEL = 35;
public Q10968_ThePowerOfTheMagicLamp()
{
super(10968);
addStartNpc(MAXIMILLIAN);
addTalkId(MAXIMILLIAN);
addCondMinLevel(MIN_LEVEL, "no_lvl.html");
setQuestNameNpcStringId(NpcStringId.LV_39_THE_MAGIC_LANTERN_POWER);
}
@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 "30120.htm":
case "30120-01.htm":
case "30120-02.htm":
{
htmltext = event;
break;
}
case "30120-03.htm":
{
qs.startQuest();
htmltext = event;
break;
}
case "30120-05.html":
{
if (player.getLampCount() >= 0)
{
giveItems(player, MAGIC_FIRE);
qs.exitQuest(false, true);
break;
}
htmltext = "no-refill.html";
break;
}
}
return htmltext;
}
@Override
public String onTalk(Npc npc, PlayerInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
if (qs.isCreated())
{
htmltext = "30120.htm";
}
else if (qs.isStarted())
{
htmltext = "30120-04.html";
}
else if (qs.isCompleted())
{
htmltext = getAlreadyCompletedMsg(player);
}
return htmltext;
}
@RegisterEvent(EventType.ON_ATTACKABLE_KILL)
@RegisterType(ListenerRegisterType.GLOBAL_MONSTERS)
public void onAttackableKill(OnAttackableKill event)
{
final PlayerInstance player = event.getAttacker();
if (player == null)
{
return;
}
final QuestState qs = getQuestState(player, false);
if ((qs == null) || !qs.isCond(1))
{
return;
}
if (player.getLampExp() >= Config.MAGIC_LAMP_MAX_LEVEL_EXP)
{
qs.setCond(2, true);
}
}
}

View File

@ -0,0 +1,3 @@
<html><body>High Priest Maximillian:<br>
You have not filled the Magic Lamp yet, please fill it up and come back here to talk to me.
</body></html>

View File

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

View File

@ -0,0 +1,5 @@
<html><body>High Priest Maximillian:<br>
I have a good advice for you. Go to Aden and find there the High Priest Orven.<br>
As far as I know Orven fulfills the king's order, which is to give help to young adventurers. I think you might find it useful.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10969_SporeInfestedPlace 30120-02.htm">"Can you tell me more?"</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>High Priest Maximillian:<br>
As far as I know the King of Aden has ordered, that young adventurers should get help. I think that means also some equipment.<br>
I think, you might find it useful.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10969_SporeInfestedPlace 30120-03.htm">Learn more</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>High Priest Maximillian:<br>
Go to Aden and talk to the High Priest Orven in the Temple of Einhasad.<br>
You can reach Aden using teleportation. I would be glad to help you.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10969_SporeInfestedPlace TELEPORT_TO_ORVEN">Teleport to Orven</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>High Priest Maximillian:<br>
As I see, you've completed the 2nd class transfer already.<br>
Your deeds on the continent impress me. That's why I wnat to help you to get more powerful.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10969_SporeInfestedPlace 30120-01.htm">"What do you mean?"</Button>
</body></html>

View File

@ -0,0 +1,7 @@
<html><body>High Priest Orven:<br>
Yes... I know you are brave and strong warrior, not a newbie. People from the places where you are famed for your heroic deeds have spread news about it.<br>
You've achieved many victories but to get stronger you have to defeat more dangerous enemies in more dangerous places. I've mind one such place.<br>
I'm talking about the <font color="LEVEL">Sea of Spores</font>. That's a very good place to improve your skills and grow stronger.<br>
You can get to the Sea of Spores using <font color="LEVEL">teleport</font> in <font color="LEVEL">Oren</font>. I suppose a mighty warrior such as you can survive in this horrible place.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10969_SporeInfestedPlace 30857-02.html">Confirm</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>High Priest Orven:<br>
The Sea of Spores is surrounded by a special barrier that prevents its spreading.<br>
I recommend you go there and pratice your skills fighting monsters. It will toughen you up before you go to other places. I'd recommend you start your journey after you've reached <font color="LEVEL">Lv.45</font>.<br>
When you've gained enough experience and strength, I'll tell you where you should go next.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10969_SporeInfestedPlace 30857-03.html">Nod</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>High Priest Orven:<br>
I'll be waiting for you here.<br>
By the way, I've information which can be useful if you are going to pratice in the Sea of Spores. Are you interested?<br>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>High Priest Orven:<br>
Is your training in the Sea of Spores over?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10969_SporeInfestedPlace reward">Nod</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>High Priest Orven:<br>
I should tell you one more thing.<br>
In future you might be in need of more powerful weapon or items that can boost your growth. You can buy all of it in the <font color="LEVEL">L-Coin Store</font>.<br>
Visit the L-Coin Store, you will find there many useful items. Good luck with you trainings.
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>High Priest Orven:<br>
I've been waiting for you. More recently, many trange and terrible things have been happening in the continent, that's why I'm looking for for warriors who can deal with such horrible troubles.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10969_SporeInfestedPlace 30857-01.html">"I'm here, the warrior you need."</Button>
</body></html>

View File

@ -0,0 +1,211 @@
/*
* 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.Q10969_SporeInfestedPlace;
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;
/**
* @author quangnguyen, Mobius
*/
public class Q10969_SporeInfestedPlace extends Quest
{
// NPC
private static final int MAXIMILLIAN = 30120;
private static final int ORVEN = 30857;
// Monsters
private static final int GIANT_FUNGUS = 20555;
private static final int GIANT_MONSTER_EYE = 20556;
private static final int DIRE_WYRM = 20557;
private static final int ROTTING_TREE = 20558;
private static final int ROTTING_GOLEM = 20559;
private static final int SPIDER_TRISALIM = 20560;
private static final int TRISALIM_TARANTULA = 20561;
private static final int SPORE_ZOMBIE = 20562;
private static final int EARTH_GUARDIAN_WYRM = 20176;
// Items
private static final ItemHolder SPIRIT_ORE = new ItemHolder(3031, 500);
private static final ItemHolder SOULSHOT_TICKET = new ItemHolder(90907, 50);
private static final ItemHolder HP_POTS = new ItemHolder(91912, 100);
// Misc
private static final String KILL_COUNT_VAR = "KillCount";
private static final int MIN_LEVEL = 40;
public Q10969_SporeInfestedPlace()
{
super(10969);
addStartNpc(MAXIMILLIAN);
addTalkId(MAXIMILLIAN, ORVEN);
addKillId(GIANT_FUNGUS, GIANT_MONSTER_EYE, DIRE_WYRM, ROTTING_TREE, ROTTING_GOLEM, SPIDER_TRISALIM, TRISALIM_TARANTULA, SPORE_ZOMBIE, EARTH_GUARDIAN_WYRM);
addCondMinLevel(MIN_LEVEL, "no_lvl.html");
setQuestNameNpcStringId(NpcStringId.LV_40_45_SPORE_INFECTED_PLACE);
}
@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 "30120.htm":
case "30120-01.htm":
case "30120-02.htm":
case "30857.html":
case "30857-01.html":
case "30857-03.html":
case "30857-05.html":
{
htmltext = event;
break;
}
case "30120-03.htm":
{
qs.startQuest();
htmltext = event;
break;
}
case "TELEPORT_TO_ORVEN":
{
player.teleToLocation(147447, 22633, -1984);
break;
}
case "30857-02.html":
{
qs.setCond(2);
htmltext = event;
break;
}
case "reward":
{
if (qs.isCond(3))
{
addExpAndSp(player, 1000000, 27000);
giveItems(player, SPIRIT_ORE);
giveItems(player, SOULSHOT_TICKET);
giveItems(player, HP_POTS);
qs.exitQuest(false, true);
}
break;
}
}
return htmltext;
}
@Override
public String onTalk(Npc npc, PlayerInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
if (qs.isCreated())
{
htmltext = "30120.htm";
}
else if (qs.isStarted())
{
switch (npc.getId())
{
case MAXIMILLIAN:
{
htmltext = "30120-01.html";
break;
}
case ORVEN:
{
if (qs.isCond(1))
{
htmltext = "30857.html";
}
else if (qs.isCond(3) && (player.getLevel() >= 45))
{
htmltext = "30857-04.html";
}
else
{
htmltext = "no_enough.html";
}
break;
}
}
}
else if (qs.isCompleted())
{
if (npc.getId() == ORVEN)
{
htmltext = getAlreadyCompletedMsg(player);
}
}
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);
}
}
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.KILL_MONSTERS_IN_THE_SEA_OF_SPORES.getId(), true, qs.getInt(KILL_COUNT_VAR)));
holder.add(new NpcLogListHolder(NpcStringId.REACH_LV_45, player.getLevel() > 44 ? 1 : 0));
return holder;
}
return super.getNpcLogList(player);
}
}

View File

@ -0,0 +1,3 @@
<html><body>High Priest Orven:<br>
You have not killed enough monsters or you have not reached level 45. Come back when you have met the requirements
</body></html>

View File

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

View File

@ -0,0 +1,6 @@
<html><body>High Priest Orven:<br>
There is the <font color="LEVEL">Cemtery</font> not far away from Aden.<br>
The nobles and the most important people of the kingdom were burried there a long ago.<br>
However, lately the Cemetery has been infested with dark magic. It is very dangerous, and nobody goes there anymore.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10970_RespectForGraves 30857-02.htm">Learn more</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>High Priest Orven:<br>
Many people want to visit graves of their ancestors but they can't do that because of monsters wandering in the Cemetery.<br>
So if you go there you kill two birds with one stone, training and helping citizens.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10970_RespectForGraves 30857-03.htm">"So, that's the place for training?"</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>High Priest Orven:<br>
Hm...<br>
To get to the Cemetery use <font color="LEVEL">teleprot</font> in <font color="LEVEL">any part of the continent</font>.<br>
Go there and kill monster.<br>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>High Priest Orven:<br>
Have you completed your training?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10970_RespectForGraves reward">Nod</Button>
</body></html>

View File

@ -0,0 +1,7 @@
<html><body>High Priest Orven:<br>
One day you'll become a glorious warrior, no doubt.<br>
But you shouldn't let the grass grow under your feet. You have to fight worthy enemies to become stronger.<br>
Now I recommend you go to the <font color="LEVEL">Fields of Massacre</font>. However, if you are not that sure in yourself, the <font color="LEVEL">Plains of Glory</font> or <font color="LEVEL">War-Torn Plains</font> would also be good choice for training.<br>
By the way, I have to tell you about <font color="LEVEL">craft points</font>. You can get them by killing monsters. When you collect the required amount, you can <font color="LEVEL">create a random item</font>. So make efforts.<br>
Also, there's one thing that can help you in crafting. It is called <font color="LEVEL">Asofe</font>. It increases the amount of craft points gained, so why don't you try it? May Einhasad bless you.
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>High Priest Orven:<br>
I think you are too stronger to trian here.<br>
If you want I can recommend another training place to you. Are you interested?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10970_RespectForGraves 30857-01.htm">Hear him out</Button>
</body></html>

View File

@ -0,0 +1,175 @@
/*
* 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.Q10970_RespectForGraves;
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;
/**
* @author quangnguyen
*/
public class Q10970_RespectForGraves extends Quest
{
// NPC
private static final int ORVEN = 30857;
// Monsters
private static final int TAIK_ORC_WATCHMAN = 20666;
private static final int GRAVE_GUARD = 20668;
private static final int TAIK_ORC_SUPPLY_OFFICER = 20669;
private static final int TAIRIM = 20675;
private static final int TORTURED_UNDEAD = 20678;
private static final int SPITEFUL_GHOST_OF_RUINS = 20996;
private static final int SOLDIER_OF_GRIEF = 20997;
private static final int CRUEL_PUNISHER = 20998;
private static final int ROVING_SOUL = 20999;
private static final int SOUL_OF_RUNIS = 21000;
// Reward
private static final ItemHolder ASOFE = new ItemHolder(92994, 1);
// Misc
private static final String KILL_COUNT_VAR = "KillCount";
private static final int MIN_LEVEL = 45;
public Q10970_RespectForGraves()
{
super(10970);
addStartNpc(ORVEN);
addTalkId(ORVEN);
addKillId(TAIK_ORC_WATCHMAN, GRAVE_GUARD, TAIK_ORC_SUPPLY_OFFICER, TAIRIM, TORTURED_UNDEAD, SPITEFUL_GHOST_OF_RUINS, SOLDIER_OF_GRIEF, CRUEL_PUNISHER, ROVING_SOUL, SOUL_OF_RUNIS);
addCondMinLevel(MIN_LEVEL, "no_lvl.html");
setQuestNameNpcStringId(NpcStringId.LV_45_RESPECT_FOR_GRAVES);
}
@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 "30857.htm":
case "30857-01.htm":
case "30857-02.htm":
{
htmltext = event;
break;
}
case "30857-03.htm":
{
qs.startQuest();
htmltext = event;
break;
}
case "reward":
{
if (qs.isCond(2))
{
addExpAndSp(player, 25000000, 67500);
giveItems(player, ASOFE);
showOnScreenMsg(player, NpcStringId.FROM_NOW_TRY_TO_GET_AS_MUCH_QUESTS_AS_YOU_CAN_I_LL_TELL_YOU_WHAT_TO_DO_NEXT, ExShowScreenMessage.TOP_CENTER, 10000);
htmltext = "30857-05.html";
qs.exitQuest(false, true);
}
break;
}
}
return htmltext;
}
@Override
public String onTalk(Npc npc, PlayerInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
if (qs.isCreated())
{
htmltext = "30857.htm";
}
else if (qs.isStarted())
{
if (qs.isCond(1))
{
htmltext = "30857-01.htm";
}
else if (qs.isCond(2))
{
htmltext = "30857-04.html";
}
}
else if (qs.isCompleted())
{
htmltext = getAlreadyCompletedMsg(player);
}
return htmltext;
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final QuestState qs = getQuestState(killer, false);
if ((qs != null) && qs.isCond(1))
{
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(2, true);
qs.unset(KILL_COUNT_VAR);
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public Set<NpcLogListHolder> getNpcLogList(PlayerInstance player)
{
final QuestState qs = getQuestState(player, false);
if ((qs != null) && qs.isCond(1))
{
final Set<NpcLogListHolder> holder = new HashSet<>();
holder.add(new NpcLogListHolder(NpcStringId.KILL_MONSTERS_IN_THE_CEMETERY.getId(), true, qs.getInt(KILL_COUNT_VAR)));
return holder;
}
return super.getNpcLogList(player);
}
}

View File

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

View File

@ -0,0 +1,5 @@
<html><body>High Priest Orven:<br>
You are not strong enough so far, and fighting monsters is not easy work.<br>
So you need good equipment.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10974_NewStylishEquipment 30857-01.htm">"What should I do?"</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>High Priest Orven:<br>
I see you have all the things you need.<br>
But no, something is missing. Well, I can help if you don't mind.<bR>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10974_NewStylishEquipment 30857-02.htm">Agree</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>High Priest Orven:<br>
Einhasad teaches us to help anyone who is in need. Our king shares her view, so he has ordered to care about young warriors.<br>
You have to know there's another important equipment, not just armor. At first sight it's just ordinary items but they can prove useful. I'm talking about <font color="LEVEL">hair accessories, belts, cloaks</font> and <font color="LEVEL">pendants</font>.
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10974_NewStylishEquipment 30857-03.htm">"Oh boy..."</Button>
</body></html>

View File

@ -0,0 +1,7 @@
<html><body>High Priest Orven:<br>
So, listen carefully.<br>
First I'll tell you about hair accessories.<br>
Hair accessories change your appearance. To enchant a hair accessory you need special enchanting scrolls.<br>
They say, seeing once is better than hearing twice. So I've prepared <font color="LEVEL">Adventurer's Sheep Hat</font> and <font color="LEVEL">Adventurer's Scroll: Enchant Hair Accessory</font> for you. Use them and enchant equipment. It's easy.<br>
Speak to me again when you've finished.<br>
</body></html>

View File

@ -0,0 +1,7 @@
<html><body>High Priest Orven:<br>
Have you enchanted Adventurer's Sheep Hat? Good.<br>
The most of hair accessories become more useful after enchanting.<br>
But keep in mind that you can enchant such equipment safely to +3. After that there's a chance to fail the process, and in that case the item will be destroy.<br>
Got it?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10974_NewStylishEquipment 30857-05.html">Nod</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>High Priest Orven:<br>
So, let's talk about belts.<br>
Belts don't change your appearance, but they are important part of your equipment.<br>
The most of belts enlarge your inventory or increase weight limit.<br>
To enchant a belt you need special enchating scrolls. I have one for you, so try to enchant your belt.
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>High Priest Orven:<br>
I see you've done it. By the way, keep in mind that you can enchant your belt safely to +3. After that there's a chance to fail the process, and in that case the item will be destroyed.<br>
Got it?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10974_NewStylishEquipment 30857-07.html">Nod</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>High Priest Orven:<br>
So, let's talk about cloaks.<br>
Cloaks just like hair accessories change the character's appearance.<br>
To enchant item you also need special enchanting scrolls.<br>
I'll give you <font color="LEVEL">Adventurer's Cloak</font> and <font color="LEVEL">Scroll: Enchant Adventurer's Cloak</font>. Enchant the cloak and then speak to me.
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>High Priest Orven:<br>
Now you have all the things you need. But before we say goodbye each other I have to ask you one question.<br>
Do you remember well all I've you about hair accessories, belts and cloaks?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10974_NewStylishEquipment 30857-09.html">"I do."</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>High Priest Orven:<br>
Good. I'm glad that I could help you at early stages. Of course, that's the will of Einhasad and our lord, but I'm happy too.<br>
There's one more item that the king of Aden has ordered to give young adventurers. A pendant.<br>
As you can guess, pendants also can be enchanted.<br>
And one more thing that you should know. A new special shop has opened in the continent lately. You can buy there amazing items using <font color="LEVEL">L-Coins</font>. I hope it's useful information.
</body></html>

View File

@ -0,0 +1,270 @@
/*
* 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.Q10974_NewStylishEquipment;
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.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState;
import org.l2jmobius.gameserver.network.NpcStringId;
/**
* @author quangnguyen, Mobius
*/
public class Q10974_NewStylishEquipment extends Quest
{
// NPC
private static final int ORVEN = 30857;
// Items
private static final ItemHolder ADVENTURER_SHEEP_HAT = new ItemHolder(93044, 1);
private static final ItemHolder ENCHANT_SCROLL_ADVENTURER_SHEEP_HAT = new ItemHolder(93043, 1);
private static final ItemHolder ADVENTURER_BELT = new ItemHolder(93042, 1);
private static final ItemHolder ENCHANT_SCROLL_ADVENTURER_BELT = new ItemHolder(93046, 1);
private static final ItemHolder ADVENTURER_CLOAK = new ItemHolder(93041, 1);
private static final ItemHolder ENCHANT_SCROLL_ADVENTURER_CLOAK = new ItemHolder(93045, 1);
// Reward
private static final ItemHolder FIRE_DRAGON_PENDANT = new ItemHolder(49467, 1);
// Misc
private static final int MIN_LEVEL = 40;
public Q10974_NewStylishEquipment()
{
super(10974);
addStartNpc(ORVEN);
addTalkId(ORVEN);
addCondMinLevel(MIN_LEVEL, "no_lvl.html");
setQuestNameNpcStringId(NpcStringId.LV_40_NEW_STYLISH_EQUIPMENT);
}
@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 "30857-00.htm":
case "30857-01.htm":
case "30857-02.htm":
{
htmltext = event;
break;
}
case "30857-03.htm":
{
qs.startQuest();
giveItems(player, ENCHANT_SCROLL_ADVENTURER_SHEEP_HAT);
giveItems(player, ADVENTURER_SHEEP_HAT);
htmltext = event;
break;
}
case "30857-04.html":
{
if (qs.isCond(1))
{
boolean foundEnchant = false;
SEARCH: for (ItemInstance item : player.getInventory().getItemsByItemId(ADVENTURER_SHEEP_HAT.getId()))
{
if (item.getEnchantLevel() > 0)
{
foundEnchant = true;
break SEARCH;
}
}
if (foundEnchant)
{
qs.setCond(2);
htmltext = event;
break;
}
htmltext = "no_sheep_hat.html";
break;
}
}
case "30857-05.html":
{
qs.startQuest();
giveItems(player, ENCHANT_SCROLL_ADVENTURER_BELT);
giveItems(player, ADVENTURER_BELT);
htmltext = event;
break;
}
case "30857-06.html":
{
if (qs.isCond(2))
{
boolean foundEnchant = false;
SEARCH: for (ItemInstance item : player.getInventory().getItemsByItemId(ADVENTURER_BELT.getId()))
{
if (item.getEnchantLevel() > 0)
{
foundEnchant = true;
break SEARCH;
}
}
if (foundEnchant)
{
qs.setCond(3);
htmltext = event;
break;
}
htmltext = "no_belt.html";
break;
}
}
case "30857-07.html":
{
qs.startQuest();
giveItems(player, ENCHANT_SCROLL_ADVENTURER_CLOAK);
giveItems(player, ADVENTURER_CLOAK);
htmltext = event;
break;
}
case "30857-08.html":
{
if (qs.isCond(3))
{
boolean foundEnchant = false;
SEARCH: for (ItemInstance item : player.getInventory().getItemsByItemId(ADVENTURER_CLOAK.getId()))
{
if (item.getEnchantLevel() > 0)
{
foundEnchant = true;
break SEARCH;
}
}
if (foundEnchant)
{
qs.setCond(4);
htmltext = event;
break;
}
htmltext = "no_cloak.html";
break;
}
}
case "reward":
{
if (qs.isCond(4))
{
giveItems(player, FIRE_DRAGON_PENDANT);
qs.exitQuest(false, true);
}
break;
}
}
return htmltext;
}
@Override
public String onTalk(Npc npc, PlayerInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
if (qs.isCreated())
{
htmltext = "30857-00.htm";
}
else if (qs.isStarted())
{
switch (qs.getCond())
{
case 1:
{
boolean foundEnchant = false;
SEARCH: for (ItemInstance item : player.getInventory().getItemsByItemId(ADVENTURER_SHEEP_HAT.getId()))
{
if (item.getEnchantLevel() > 0)
{
foundEnchant = true;
break SEARCH;
}
}
if (foundEnchant)
{
qs.setCond(2);
htmltext = "30857-04.html";
}
else
{
htmltext = "no_sheep_hat.html";
}
break;
}
case 2:
{
boolean foundEnchant = false;
SEARCH: for (ItemInstance item : player.getInventory().getItemsByItemId(ADVENTURER_BELT.getId()))
{
if (item.getEnchantLevel() > 0)
{
foundEnchant = true;
break SEARCH;
}
}
if (foundEnchant)
{
qs.setCond(3);
htmltext = "30857-06.html";
}
else
{
htmltext = "no_belt.html";
}
break;
}
case 3:
{
boolean foundEnchant = false;
SEARCH: for (ItemInstance item : player.getInventory().getItemsByItemId(ADVENTURER_CLOAK.getId()))
{
if (item.getEnchantLevel() > 0)
{
foundEnchant = true;
break SEARCH;
}
}
if (foundEnchant)
{
qs.setCond(4);
htmltext = "30857-08.html";
}
else
{
htmltext = "no_cloak.html";
}
break;
}
}
}
else if (qs.isCompleted())
{
htmltext = getAlreadyCompletedMsg(player);
}
return htmltext;
}
}

View File

@ -0,0 +1,3 @@
<html><body>High Priest Orven:<br>
Have you been enchant Adventurer's Belt? Come back after you have enchant them.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>High Priest Orven:<br>
Have you been enchant Adventurer's Cloak? Come back after you have enchant them.
</body></html>

View File

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

View File

@ -0,0 +1,3 @@
<html><body>High Priest Orven:<br>
Have you been enchant Adventurer's Sheep Hat? Come back after you have enchant them.
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>High Priest Orven:<br>
Long before our country was formed there was a great empire that was split into two kingdoms-Elmore and Aden fighting each other fro owning more land. There were a lot of battles around the Aden Castle.<br>
Nevertheless Aden won, and the world changed. But even now you can see traces of that horrible war everywhere.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10975_LetsPayRespectsToOurFallenBrethren 30857-02.htm">Learn more</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>High Priest Orven:<br>
Long ago there was a significant battle in the Fields of Massacre.<br>
To take the Devastated Castle, soldiers of Elmore sprayed a poison all over the field. So many brave warriors died in that day...<br>
The Fields of Massacre have been haunted by evil spirits since then. Souls of the dead warriors have become possessed. They have no rest... We have to help them.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10975_LetsPayRespectsToOurFallenBrethren 30857-03.htm">Learn more</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>High Priest Orven:<br>
Local people want to perform the rite of remembrance of dead warriors who faced their death in the Fields of Massacre.<br>
But they can't do it now, too many monsters are wandering in that place.<br>
Go to the <font color="LEVEL">Fields of Massacre</font> and kill monsters roaming there. Monsters to hunt: <font color="LEVEL">Archer of Destruction, Graveyard Lich, Dismal Pole, Graveyard Predator, Doom Knight, Doom Scout, Doom Servant, Doom Guard, Doom Archer, Doom Trooper, Doom Warrior, Guard Butcher</font>.<br>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>High Priest Orven:<br>
Have you dealt with the monsters?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10975_LetsPayRespectsToOurFallenBrethren reward">Nod</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>High Priest Orven:<br>
Thank you!<br>
Now souls of dead warriors can rest in peace.<br>
Your noble deed is worth or reward.
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>High Priest Orven:<br>
Oh, you've already done with the Respect for Graves quest.<br>
At this part of Aden you can find many traces of severe fights and bloody battles.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10975_LetsPayRespectsToOurFallenBrethren 30857-01.htm">Hear him out</Button>
</body></html>

View File

@ -0,0 +1,188 @@
/*
* 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.Q10975_LetsPayRespectsToOurFallenBrethren;
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;
/**
* @author quangnguyen
*/
public class Q10975_LetsPayRespectsToOurFallenBrethren extends Quest
{
// NPCs
private static final int ORVEN = 30857;
// Monsters
private static final int ACHER_OF_DESTRUCTION = 21001;
private static final int GRAVEYARD_LICH = 21003;
private static final int DISMAL_POLE = 21004;
private static final int GRAVEYARD_PREDATOR = 21005;
private static final int DOOM_KNIGHT = 20674;
private static final int DOOM_SCOUT = 21002;
private static final int DOOM_SERVANT = 21006;
private static final int DOOM_GUARD = 21007;
private static final int DOOM_ARCHER = 21008;
private static final int DOOM_TROOPER = 21009;
private static final int DOOM_WARRIOR = 21010;
private static final int GUARD_BUTCHER = 22101;
// Items
private static final ItemHolder MAGIC_LAMP_CHARGING_POTION = new ItemHolder(91757, 3);
private static final ItemHolder SOULSHOT_TICKET = new ItemHolder(90907, 10);
private static final ItemHolder SAYHA_GUST = new ItemHolder(91776, 9);
private static final ItemHolder SPIRIT_ORE = new ItemHolder(3031, 450);
// Misc
private static final int MIN_LEVEL = 45;
private static final String KILL_COUNT_VAR = "KillCount";
public Q10975_LetsPayRespectsToOurFallenBrethren()
{
super(10975);
addStartNpc(ORVEN);
addTalkId(ORVEN);
addKillId(ACHER_OF_DESTRUCTION, GRAVEYARD_LICH, DISMAL_POLE, GRAVEYARD_PREDATOR, DOOM_KNIGHT, DOOM_SCOUT, DOOM_SERVANT, DOOM_GUARD, DOOM_ARCHER, DOOM_TROOPER, DOOM_WARRIOR, GUARD_BUTCHER);
addCondMinLevel(MIN_LEVEL, "no_lvl.html");
setQuestNameNpcStringId(NpcStringId.LV_45_LET_S_PAY_RESPECTS_TO_FALLEN_BRETHREN);
}
@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 "30857.htm":
case "30857-01.htm":
case "30857-02.htm":
{
htmltext = event;
break;
}
case "30857-03.htm":
{
qs.startQuest();
htmltext = event;
break;
}
case "reward":
{
if (qs.isCond(2))
{
giveItems(player, MAGIC_LAMP_CHARGING_POTION);
giveItems(player, SOULSHOT_TICKET);
giveItems(player, SAYHA_GUST);
giveItems(player, SPIRIT_ORE);
htmltext = "30857-05.html";
qs.exitQuest(false, true);
}
break;
}
}
return htmltext;
}
@Override
public String onTalk(Npc npc, PlayerInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
if (qs.isCreated())
{
htmltext = "30857.htm";
}
else if (qs.isStarted())
{
if (qs.isCond(1))
{
final int killCount = qs.getInt(KILL_COUNT_VAR) + 1;
if (killCount < 500)
{
htmltext = "no_kill.html";
}
else
{
htmltext = "30857-01.htm";
}
}
else if (qs.isCond(2))
{
htmltext = "30857-04.html";
}
}
else if (qs.isCompleted())
{
htmltext = getAlreadyCompletedMsg(player);
}
return htmltext;
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final QuestState qs = getQuestState(killer, false);
if ((qs != null) && qs.isCond(1))
{
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(2, true);
qs.unset(KILL_COUNT_VAR);
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public Set<NpcLogListHolder> getNpcLogList(PlayerInstance player)
{
final QuestState qs = getQuestState(player, false);
if ((qs != null) && qs.isCond(1))
{
final Set<NpcLogListHolder> holder = new HashSet<>();
holder.add(new NpcLogListHolder(NpcStringId.KILL_MONSTERS_IN_THE_FIELDS_OF_MASSACRE.getId(), true, qs.getInt(KILL_COUNT_VAR)));
return holder;
}
return super.getNpcLogList(player);
}
}

View File

@ -0,0 +1,4 @@
<html><body>High Priest Orven:<br>
I think there are still too many monsters.<br>
Go to the <font color="LEVEL">Fields of Massacre</font> and defeat the monsters that roam the Fields of Massacre. Monsters to hunt: <font color="LEVEL">Archer of Destruction, Graveyard Lich, Dismal Pole, Graveyard Predator, Doom Knight, Doom Scout, Doom Servant, Doom Guard, Doom Archer, Doom Trooper, Doom Warrior, Guard Butcher</font>.<br>
</body></html>

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 45+ levels).
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>High Priest Orven:<br>
There were many bloody battles around the Aden Castle.<br>
But there was the one in which Elmore was defeated.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10976_MemoryOfTheGloriousPast 30857-02.htm">Ask about the place</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>High Priest Orven:<br>
It's called <font color="LEVEL">Plain of Glory</font>.<br>
Warriors of our kingdom fought soldiers of Elmore there and won.<br>
The thing is that strange things have started happening there recently. Not glorious at all.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10976_MemoryOfTheGloriousPast 30857-03.htm">Learn more</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>High Priest Orven:<br>
There are too many monsters wandering on the Plains of Glory.<br>
But why am I I surprised? Places of ancient battles are attracting monsters. Shattered lands are some kind of reminder of war horrors and a high price of victory.<br>
But the Plains of Glory is a special place for local people. We cannot allow monsters roaming there.<br>
Please, kill the monster that roaming the Plains of Glory. I'm talking about <font color="LEVEL">Vanor Silenos, Vanor Silenos Soldier, Vanor Silenos Scout, Vanor Silenos Warrior, Vanor Silenos Shaman, Vanor Silenos Chieftain, Vanor Mercenary of Glory, Guard of Honor</font>. All of them must die.<br>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>High Priest Orven:<br>
Have you dealt with the monsters?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10976_MemoryOfTheGloriousPast reward">Confirm</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>High Priest Orven:<br>
Thank you! I know there are still many monsters walking on the Plains of Glory, but now it's a bit safer there.<br>
Please take this small gift from local people.
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>High Priest Orven:<br>
Well, Aden has been really changed for some time past. But not all changes are for the better.<br>
Nevertheless we remember glorious times and believe that we can overcome all hardships that lie ahead.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10976_MemoryOfTheGloriousPast 30857-01.htm">Ask about the glorious times</Button>
</body></html>

View File

@ -0,0 +1,187 @@
/*
* 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.Q10976_MemoryOfTheGloriousPast;
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;
/**
* @author quangnguyen
*/
public class Q10976_MemoryOfTheGloriousPast extends Quest
{
// NPCs
private static final int ORVEN = 30857;
// Monsters
private static final int VANOR_SILENOS = 20681;
private static final int VANOR_SILENOS_SOLDIER = 20682;
private static final int VANOR_SILENOS_SCOUT = 20683;
private static final int VANOR_SILENOS_WARRIOR = 20684;
private static final int VANOR_SILENOS_SHAMAN = 20685;
private static final int VANOR_SILENOS_CHIEFTAIN = 20686;
private static final int VANOR_MERCENARY_OF_GLORY = 24014;
private static final int GUARD_OF_HONOR = 22102;
// Items
private static final ItemHolder MAGIC_LAMP_CHARGING_POTION = new ItemHolder(91757, 3);
private static final ItemHolder SOULSHOT_TICKET = new ItemHolder(90907, 10);
private static final ItemHolder SAYHA_GUST = new ItemHolder(91776, 9);
private static final ItemHolder SPIRIT_ORE = new ItemHolder(3031, 450);
// Misc
private static final int MIN_LEVEL = 45;
private static final String KILL_COUNT_VAR = "KillCount";
public Q10976_MemoryOfTheGloriousPast()
{
super(10976);
addStartNpc(ORVEN);
addTalkId(ORVEN);
addKillId(VANOR_SILENOS, VANOR_SILENOS_SOLDIER, VANOR_SILENOS_SCOUT, VANOR_SILENOS_WARRIOR, VANOR_SILENOS_SHAMAN, VANOR_SILENOS_CHIEFTAIN, VANOR_MERCENARY_OF_GLORY, GUARD_OF_HONOR);
addCondMinLevel(MIN_LEVEL, "no_lvl.html");
setQuestNameNpcStringId(NpcStringId.LV_45_MEMORY_OF_THE_GLORIOUS_PAST);
}
@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 "30857.htm":
case "30857-01.htm":
case "30857-02.htm":
{
htmltext = event;
break;
}
case "30857-03.htm":
{
qs.startQuest();
htmltext = event;
break;
}
case "reward":
{
if (qs.isCond(2))
{
giveItems(player, MAGIC_LAMP_CHARGING_POTION);
giveItems(player, SOULSHOT_TICKET);
giveItems(player, SAYHA_GUST);
giveItems(player, SPIRIT_ORE);
htmltext = "30857-05.html";
qs.exitQuest(false, true);
}
break;
}
}
return htmltext;
}
@Override
public String onTalk(Npc npc, PlayerInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
if (qs.isCreated())
{
htmltext = "30857.htm";
}
else if (qs.isStarted())
{
if (qs.isCond(1))
{
final int killCount = qs.getInt(KILL_COUNT_VAR) + 1;
if (killCount < 700)
{
htmltext = "no_kill.html";
}
else
{
htmltext = "30857-01.htm";
}
}
else if (qs.isCond(2))
{
htmltext = "30857-04.html";
}
}
else if (qs.isCompleted())
{
if (npc.getId() == ORVEN)
{
htmltext = getAlreadyCompletedMsg(player);
}
}
return htmltext;
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final QuestState qs = getQuestState(killer, false);
if ((qs != null) && qs.isCond(1))
{
final int killCount = qs.getInt(KILL_COUNT_VAR) + 1;
if (killCount < 700)
{
qs.set(KILL_COUNT_VAR, killCount);
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
sendNpcLogList(killer);
}
else
{
qs.setCond(2, true);
qs.unset(KILL_COUNT_VAR);
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public Set<NpcLogListHolder> getNpcLogList(PlayerInstance player)
{
final QuestState qs = getQuestState(player, false);
if ((qs != null) && qs.isCond(1))
{
final Set<NpcLogListHolder> holder = new HashSet<>();
holder.add(new NpcLogListHolder(NpcStringId.KILL_MONSTERS_ON_THE_PLAINS_OF_GLORY.getId(), true, qs.getInt(KILL_COUNT_VAR)));
return holder;
}
return super.getNpcLogList(player);
}
}

View File

@ -0,0 +1,4 @@
<html><body>High Priest Orven:<br>
I think there are still too many monsters.<br>
Go to the <font color="LEVEL">Plains of Gloryre</font> and defeat the monsters that roam the Plains of Glory. Monsters to hunt: <font color="LEVEL">Vanor Silenos, Vanor Silenos Soldier, Vanor Silenos Scout, Vanor Silenos Warrior, Vanor Silenos Shaman, Vanor Silenos Chieftain, Vanor Mercenary of Glory, Guard of Honor</font>.<br>
</body></html>

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 45+ levels).
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>High Priest Orven:<br>
On the War-Torn Plains. Yes, there were many battles but none of them can't be compared to the one of the War-Torn Plains.<br>
Quickly after that Kingdom of Aden had won the battle of the Plains of Glory.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10977_TracesOfBattle 30857-02.htm">Learn more</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>High Priest Orven:<br>
Many warriors had diied on the War-Torn Plains.<br>
Echoes of their suffering and deaths had been imprinted in the plains for ever. That's why monsters like wandering there.<br>
So the War-Torn Plains is very dangerous place. But wa can't leave it as is. I want to ask you for help.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10977_TracesOfBattle 30857-03.htm">"What should I do?"</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>High Priest Orven:<br>
Thank you for answering my plea.<br>
Go to the War-Torn Plains and defeat the monsters that roam the War-Torn Plains. Monster to hunt: <font color="LEVEL">Graveyard Wanderer, Archer of Greed, Hatar Ratman Thief, Hatar Ratman Boss, Hatar Hanishee, Deprive, Taik Orc Supply, Violent Farcran, Fierce Guard</font>.<br>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>High Priest Orven:<br>
Have you dealt with the monsters?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10977_TracesOfBattle reward">Confirm</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>High Priest Orven:<br>
Thank you! I know there are still many monsters walking on the Plains of Glory, but now it's a bit safer there.<br>
Please take this small gift from local people.
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>High Priest Orven:<br>
Where do you think the most bloody battle between Aden and Elmore took place?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10977_TracesOfBattle 30857-01.htm">Shrug</Button>
</body></html>

View File

@ -0,0 +1,185 @@
/*
* 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.Q10977_TracesOfBattle;
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;
/**
* @author quangnguyen
*/
public class Q10977_TracesOfBattle extends Quest
{
// NPCs
private static final int ORVEN = 30857;
// Monsters
private static final int GRAVEYARD_WANDERER = 20659;
private static final int ARCHER_OF_GREED = 20660;
private static final int HATAR_RATMAN_THIEF = 20661;
private static final int HATAR_RATMAN_BOSS = 20662;
private static final int HATAR_HANISHEE = 20663;
private static final int DEPRIVE = 20664;
private static final int TAIK_ORC_SUPPLY = 20665;
private static final int VIOLLENT_FARCRAN = 20667;
private static final int FIERCE_GUARD = 22103;
// Items
private static final ItemHolder MAGIC_LAMP_CHARGING_POTION = new ItemHolder(91757, 3);
private static final ItemHolder SOULSHOT_TICKET = new ItemHolder(90907, 10);
private static final ItemHolder SAYHA_GUST = new ItemHolder(91776, 9);
private static final ItemHolder SPIRIT_ORE = new ItemHolder(3031, 450);
// Misc
private static final int MIN_LEVEL = 45;
private static final String KILL_COUNT_VAR = "KillCount";
public Q10977_TracesOfBattle()
{
super(10977);
addStartNpc(ORVEN);
addTalkId(ORVEN);
addKillId(GRAVEYARD_WANDERER, ARCHER_OF_GREED, HATAR_RATMAN_THIEF, HATAR_RATMAN_BOSS, HATAR_HANISHEE, DEPRIVE, TAIK_ORC_SUPPLY, VIOLLENT_FARCRAN, FIERCE_GUARD);
addCondMinLevel(MIN_LEVEL, "no_lvl.html");
setQuestNameNpcStringId(NpcStringId.LV_45_TRACES_OF_BATTLE);
}
@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 "30857.htm":
case "30857-01.htm":
case "30857-02.htm":
{
htmltext = event;
break;
}
case "30857-03.htm":
{
qs.startQuest();
htmltext = event;
break;
}
case "reward":
{
if (qs.isCond(2))
{
giveItems(player, MAGIC_LAMP_CHARGING_POTION);
giveItems(player, SOULSHOT_TICKET);
giveItems(player, SAYHA_GUST);
giveItems(player, SPIRIT_ORE);
htmltext = "30857-05.html";
qs.exitQuest(false, true);
}
break;
}
}
return htmltext;
}
@Override
public String onTalk(Npc npc, PlayerInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
if (qs.isCreated())
{
htmltext = "30857.htm";
}
else if (qs.isStarted())
{
if (qs.isCond(1))
{
final int killCount = qs.getInt(KILL_COUNT_VAR) + 1;
if (killCount < 1000)
{
htmltext = "no_kill.html";
}
else
{
htmltext = "30857-01.htm";
}
}
else if (qs.isCond(2))
{
htmltext = "30857-04.html";
}
}
else if (qs.isCompleted())
{
htmltext = getAlreadyCompletedMsg(player);
}
return htmltext;
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final QuestState qs = getQuestState(killer, false);
if ((qs != null) && qs.isCond(1))
{
final int killCount = qs.getInt(KILL_COUNT_VAR) + 1;
if (killCount < 1000)
{
qs.set(KILL_COUNT_VAR, killCount);
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
sendNpcLogList(killer);
}
else
{
qs.setCond(2, true);
qs.unset(KILL_COUNT_VAR);
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public Set<NpcLogListHolder> getNpcLogList(PlayerInstance player)
{
final QuestState qs = getQuestState(player, false);
if ((qs != null) && qs.isCond(1))
{
final Set<NpcLogListHolder> holder = new HashSet<>();
holder.add(new NpcLogListHolder(NpcStringId.KILL_MONSTERS_ON_THE_PLAINS_OF_GLORY.getId(), true, qs.getInt(KILL_COUNT_VAR)));
return holder;
}
return super.getNpcLogList(player);
}
}

View File

@ -0,0 +1,4 @@
<html><body>High Priest Orven:<br>
I think there are still too many monsters.<br>
Go to the <font color="LEVEL">War-Torn</font> and defeat the monsters that roam the War-Torn. Monsters to hunt: <font color="LEVEL">Graveyard Wanderer, Archer of Greed, Hatar Ratman Thief, Hatar Ratman Boss, Hatar Hanishee, Deprive, Taik Orc Supply, Violent Farcran, Fierce Guard</font>.<br>
</body></html>

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 45+ levels).
</body></html>

View File

@ -0,0 +1,7 @@
<html><body>Pet Manager Cooper:<br>
Sure there is a way, but it won't be easy.<br>
The Pet Manager Association has recently learned that the villain we tracked down was actually a member of a petnapping ring. We've been able to track one of the other members. His name is <font color="LEVEL">Atingo</font>.<br>
The creatures that <font color="LEVEL">Atingo</font> had stolen have practically turned into monsters. But if you <font color="LEVEL">kill</font> him, all the <font color="LEVEL">pets</font> he's tamed will have <font color="LEVEL">no owner</font>. I don't know how he managed to lure them away from their previous owners and made them his slaves. To free the creatures from this unnatural bond you will have to kill them as well, even though I'm not a fan of this solution.<br>
If you kill the pet that has been stolen after the death of its current ownver, you will put an end to their terrible bond and the soul of the creature will surely rest in peace.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10978_MissingPets 30829-02.html">"Where can I find Atingo?"</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Pet Manager Cooper:<br>
He's been seen all over the place, <font color="LEVEL">in the Plains of the Lizardmen, the Dragon Valley, the Tower of Insolence and the Orc Barracks</font>.<br>
I don't think he'll stay in one place for too long, but I'm sure you'll be able to track him down and bring peace to the souls of the pets he's stolen.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10978_MissingPets reward">Nod</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Pet Manager Cooper:<br>
When you find Atingo. you will need to save the soul of the pet he's kidnapped. There is a chance that the freed soul will find its way back to the previous ownver and the creature will be reborn.<br>
And, well, you will surely be rewarded for such a good deed.<br>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Pet Manager Cooper:<br>
Oh! Have you met Lemper?<br>
How's he doing? Getting used to living in Aden? We got really close when we both went after the petnapper and II was able to save my pet.<br>
I used to think pets were just a way to make money, you know? But after that night everything changed. It's such a pity we couldn't save the others.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10978_MissingPets 30829-01.html">"Is there a way to save the pets?"</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Pet Manager Lemper:<br>
Greetings, adventurer! I've been waiting for you.<br>
Have you heard about pets? Pets are creatures that follow an adventurer wherever they go.<br>
Pet Manager Association is always happy to tell adventurers about pets and help them pick one. But recently a tragedy struck - all our pets were kidnapped.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10978_MissingPets 30869-02.htm">"All of them?"</Button>
</body></html>

View File

@ -0,0 +1,7 @@
<html><body>Pet Manager Lemper:<br>
There are six types of pets. They gain XP together with their owner and can evole when they reach a certain point. Both of these things are very important as they let the pet be of more help to the owner.<br>
Unfortunately, the Pet Manager Association couldn't save all the missing creatures. Me and Pet Manager Cooper managed to rescue only two pets. Soon after that I joined the Association.<br>
You see, the creatures were not running away, they were being stolen. Cooper and I, we tracked the petnapper down and fought him for the pets. I covered Cooper while he was on the frontline. I think he got a good look at the petnapper and generally know more about this than me.<br>
Talk to Cooper to learn more. Say hi from me and tell that I live in Aden now.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10978_MissingPets 30869-03.htm">"Where can I find Cooper?"</Button>
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Pet Manager Lemper:<br>
You can find <font color="LEVEL">Pet Manager Cooper near the Giran Town Square</font>. There is also a Blacksmith and a Grocer there, so you might visit them as well.<br>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Pet Manager Lemper:<br>
The Pet Manager Association has organized an extensive search and rescue mission to find the missing pets and we were able to find some of them.<br>
The time spent without their owners has had an effect on the pets. That's what got me interested in the first place, but I also wanted to help return the pets to their owners. So I decided to join the Pet Manager Association and since then I've learned a lot about pets.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10978_MissingPets 30869-01.htm">"Tell me about pets."</Button>
</body></html>

View File

@ -0,0 +1,136 @@
/*
* 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.Q10978_MissingPets;
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.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState;
import org.l2jmobius.gameserver.network.NpcStringId;
/**
* @author quangnguyen
*/
public class Q10978_MissingPets extends Quest
{
// NPCs
private static final int LEMPER = 30869;
private static final int COOPER = 30829;
// Items
private static final ItemHolder SOULSHOT_TICKET = new ItemHolder(90907, 100);
private static final ItemHolder PET_GUIDE = new ItemHolder(94118, 1);
// Misc
private static final int MIN_LEVEL = 76;
public Q10978_MissingPets()
{
super(10978);
addStartNpc(LEMPER);
addTalkId(LEMPER, COOPER);
addCondMinLevel(MIN_LEVEL, "no_lvl.html");
setQuestNameNpcStringId(NpcStringId.LV_76_MISSING_PETS);
}
@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 "30869.htm":
case "30869-01.htm":
case "30869-02.htm":
case "30829.html":
case "30829-01.html":
{
htmltext = event;
break;
}
case "30869-03.htm":
{
qs.startQuest();
htmltext = event;
break;
}
case "30829-02.html":
{
htmltext = event;
break;
}
case "reward":
{
if (qs.isCond(1))
{
giveItems(player, SOULSHOT_TICKET);
giveItems(player, PET_GUIDE);
htmltext = "30829-03.htm";
qs.exitQuest(false, true);
}
break;
}
}
return htmltext;
}
@Override
public String onTalk(Npc npc, PlayerInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
if (qs.isCreated())
{
htmltext = "30869.htm";
}
else if (qs.isStarted())
{
switch (npc.getId())
{
case LEMPER:
{
if (qs.isCond(1))
{
htmltext = "30869-01.htm";
}
break;
}
case COOPER:
{
if (qs.isCond(1))
{
htmltext = "30829.html";
}
break;
}
}
}
else if (qs.isCompleted())
{
if (npc.getId() == LEMPER)
{
htmltext = getAlreadyCompletedMsg(player);
}
}
return htmltext;
}
}

View File

@ -0,0 +1,5 @@
<html><body>Pet Manager Lemper:<br>
I would do anything to find the missing pets! Every adventurer deserves to have a loyal friend.<br>
Finding them won't be easy, thogh, and I don't think you can manager. Come back once you've trained some more.<br>
(Available to characters who have reached Lv.76.)<br>
</body></html>

View File

@ -33,9 +33,17 @@ 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.Q10968_ThePowerOfTheMagicLamp.Q10968_ThePowerOfTheMagicLamp;
import quests.Q10969_SporeInfestedPlace.Q10969_SporeInfestedPlace;
import quests.Q10970_RespectForGraves.Q10970_RespectForGraves;
import quests.Q10971_TalismanEnchant.Q10971_TalismanEnchant;
import quests.Q10972_CombiningGems.Q10972_CombiningGems;
import quests.Q10973_EnchantingAgathions.Q10973_EnchantingAgathions;
import quests.Q10974_NewStylishEquipment.Q10974_NewStylishEquipment;
import quests.Q10975_LetsPayRespectsToOurFallenBrethren.Q10975_LetsPayRespectsToOurFallenBrethren;
import quests.Q10976_MemoryOfTheGloriousPast.Q10976_MemoryOfTheGloriousPast;
import quests.Q10977_TracesOfBattle.Q10977_TracesOfBattle;
import quests.Q10978_MissingPets.Q10978_MissingPets;
import quests.Q10981_UnbearableWolvesHowling.Q10981_UnbearableWolvesHowling;
import quests.Q10982_SpiderHunt.Q10982_SpiderHunt;
import quests.Q10983_TroubledForest.Q10983_TroubledForest;
@ -46,14 +54,6 @@ import quests.Q10987_PlunderedGraves.Q10987_PlunderedGraves;
import quests.Q10988_Conspiracy.Q10988_Conspiracy;
import quests.Q10989_DangerousPredators.Q10989_DangerousPredators;
import quests.Q10990_PoisonExtraction.Q10990_PoisonExtraction;
import quests.not_done.Q10968_ThePowerOfTheMagicLamp;
import quests.not_done.Q10969_SporeInfestedPlace;
import quests.not_done.Q10970_RespectForGraves;
import quests.not_done.Q10974_NewStylishEquipment;
import quests.not_done.Q10975_LetsPayRespectsToOurFallenBrethren;
import quests.not_done.Q10976_MemoryOfTheGloriousPast;
import quests.not_done.Q10977_TracesOfBattle;
import quests.not_done.Q10978_MissingPets;
/**
* @author NosBit
@ -88,17 +88,17 @@ public class QuestMasterHandler
Q10988_Conspiracy.class,
Q10989_DangerousPredators.class,
Q10990_PoisonExtraction.class,
Q10968_ThePowerOfTheMagicLamp.class, // TODO: Not done.
Q10969_SporeInfestedPlace.class, // TODO: Not done.
Q10970_RespectForGraves.class, // TODO: Not done.
Q10968_ThePowerOfTheMagicLamp.class,
Q10969_SporeInfestedPlace.class,
Q10970_RespectForGraves.class,
Q10971_TalismanEnchant.class,
Q10972_CombiningGems.class,
Q10973_EnchantingAgathions.class,
Q10974_NewStylishEquipment.class, // TODO: Not done.
Q10975_LetsPayRespectsToOurFallenBrethren.class, // TODO: Not done.
Q10976_MemoryOfTheGloriousPast.class, // TODO: Not done.
Q10977_TracesOfBattle.class, // TODO: Not done.
Q10978_MissingPets.class, // TODO: Not done.
Q10974_NewStylishEquipment.class,
Q10975_LetsPayRespectsToOurFallenBrethren.class,
Q10976_MemoryOfTheGloriousPast.class,
Q10977_TracesOfBattle.class,
Q10978_MissingPets.class,
};
public static void main(String[] args)

View File

@ -1,36 +0,0 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package quests.not_done;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.quest.Quest;
/**
* @author Mobius
*/
public class Q10968_ThePowerOfTheMagicLamp extends Quest
{
private static final int START_NPC = 30120;
public Q10968_ThePowerOfTheMagicLamp()
{
super(10968);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
}
}

View File

@ -1,36 +0,0 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package quests.not_done;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.quest.Quest;
/**
* @author Mobius
*/
public class Q10969_SporeInfestedPlace extends Quest
{
private static final int START_NPC = 30120;
public Q10969_SporeInfestedPlace()
{
super(10969);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
}
}

View File

@ -1,36 +0,0 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package quests.not_done;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.quest.Quest;
/**
* @author Mobius
*/
public class Q10970_RespectForGraves extends Quest
{
private static final int START_NPC = 30857;
public Q10970_RespectForGraves()
{
super(10970);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
}
}

View File

@ -1,36 +0,0 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package quests.not_done;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.quest.Quest;
/**
* @author Mobius
*/
public class Q10974_NewStylishEquipment extends Quest
{
private static final int START_NPC = 30857;
public Q10974_NewStylishEquipment()
{
super(10974);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
}
}

View File

@ -1,36 +0,0 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package quests.not_done;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.quest.Quest;
/**
* @author Mobius
*/
public class Q10975_LetsPayRespectsToOurFallenBrethren extends Quest
{
private static final int START_NPC = 30857;
public Q10975_LetsPayRespectsToOurFallenBrethren()
{
super(10975);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
}
}

View File

@ -1,36 +0,0 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package quests.not_done;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.quest.Quest;
/**
* @author Mobius
*/
public class Q10976_MemoryOfTheGloriousPast extends Quest
{
private static final int START_NPC = 30857;
public Q10976_MemoryOfTheGloriousPast()
{
super(10976);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
}
}

View File

@ -1,36 +0,0 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package quests.not_done;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.quest.Quest;
/**
* @author Mobius
*/
public class Q10977_TracesOfBattle extends Quest
{
private static final int START_NPC = 30857;
public Q10977_TracesOfBattle()
{
super(10977);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
}
}

View File

@ -1,36 +0,0 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package quests.not_done;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.quest.Quest;
/**
* @author Mobius
*/
public class Q10978_MissingPets extends Quest
{
private static final int START_NPC = 30869;
public Q10978_MissingPets()
{
super(10978);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
}
}