Addition of quests 11025 and 11033 to 11040.
Contributed by Dmitri.
This commit is contained in:
@@ -232,20 +232,11 @@
|
||||
10900 Path to Strength
|
||||
10901 A Model Adventurer
|
||||
11024 Path of Destiny - Beginning
|
||||
11025 Path of Destiny - Proving
|
||||
11026 Path of Destiny - Conviction
|
||||
11027 Path of Destiny - Overcome
|
||||
11028 Wind of Destiny - Encounter
|
||||
11029 Wind of Destiny - Promise
|
||||
11030 Wind of Destiny - Choice
|
||||
11033 Antidote Ingredients
|
||||
11034 Resurrected One
|
||||
11035 Deathly Mischief
|
||||
11036 Changed Spirits
|
||||
11037 Why are the Ratel here?
|
||||
11038 Growlers Turned Violent
|
||||
11039 Communication Breakdown
|
||||
11040 Attack of the Enraged Forest
|
||||
11041 Check Out the Situation
|
||||
11042 Suspicious Movements
|
||||
11043 Someone's Trace
|
||||
|
@@ -0,0 +1,7 @@
|
||||
<html><body>High Priest Raymond:<br>
|
||||
Friend... I've been waiting for you.<br>
|
||||
An object determined to be from the Wind Spirit Realm was found in the vicinity of the Town of Gludio.<br>
|
||||
We asked the Ertheia delegation to investigate since they were in area, but they didn't stay for long.<br>
|
||||
Another member of the delegation left to investigate alone.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11025_PathOfDestinyProving 30289-02.html">Where did they go?</Button><br>
|
||||
</body></html>
|
@@ -0,0 +1,5 @@
|
||||
<html><body>High Priest Raymond:<br>
|
||||
They went to the <font color="LEVEL">notheast side</font> of the town. Skeletons have never appeared so close to town before, but I heard that they've been showing up more frequently. Initially, the guards were able to quickly neutralize them, but they've no longer been entering town, and instead observe us.<br>
|
||||
This is the object we found with the monsters. We were curious about its identity since we'd never seen anything like it, but a <font color="LEVEL">passing wiizard</font> told us that it's an object from the Wind Spirit Realm.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11025_PathOfDestinyProving 30289-03.html">Tell me more about this wizard.</Button><br>
|
||||
</body></html>
|
@@ -0,0 +1,6 @@
|
||||
<html><body>High Priest Raymond:<br>
|
||||
He just referred to himself as a passing wizard. The delegation said someone that would recognize it as something of the wind Spirit Realm would be a powerful wizard, so maybe it's someone from Ivory Tower.<br>
|
||||
Go to the <font color="LEVEL">notheast side</font> of town. The other Ertheia has already gone towards where the <font color="LEVEL">Skeleton Warrior</font> and <font color="LEVEL">Skeleton Archers</font> are. Those Skeletons have the Wind Spirit Realm object that you were shown.<br>
|
||||
Please be careful. May the power of lights be with you!<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11025_PathOfDestinyProving teleport">Move to the location.</Button><br>
|
||||
</body></html>
|
@@ -0,0 +1,5 @@
|
||||
<html><body>High Priest Raymond:<br>
|
||||
You've come back safely. Thank goodness.<br>
|
||||
I got worried because I couldn't make contact with the other person. Did you find your friend?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11025_PathOfDestinyProving 30289-05.html">Well, a body was found.</Button><br>
|
||||
</body></html>
|
@@ -0,0 +1,6 @@
|
||||
<html><body>High Priest Raymond:<br>
|
||||
This is unfortunate. May your friend rest in peace in Einhasad's light.<br>
|
||||
But... our guards tell us that the Skeletons are very Weak. You can easily defeat one with your bare hands. I can't understand how a Skeleton could kill a member of your delegation!<br>
|
||||
Are you sure someone else wasn't involved?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11025_PathOfDestinyProving 30289-06.html">I did meet a Mysterious Wizard...</Button><br>
|
||||
</body></html>
|
@@ -0,0 +1,4 @@
|
||||
<html><body>High Priest Raymond:<br>
|
||||
A <font color="LEVEL">Mysterious Wizard</font>? The same person who introduced himself as a wizard just passing by? That can't be... he handed over the object from the Wind Spirit Realm willingly. And why would a wizard go around harming people?<br>
|
||||
Anyway, we are wasting time. Shouldn't you hurry and report to <font color="LEVEL">Tarti</font> that a member of the Ertheia Delegation was killed?<br>
|
||||
</body></html>
|
@@ -0,0 +1,5 @@
|
||||
<html><body>Mysterios Wizard:<br>
|
||||
The deaths of your companions must have been shocking for you. I thought it was strange that Skeletons were appearing near the town.<br>
|
||||
Please let your guard down. I'm just a <font color="LEVEL">wizard passing by</font>.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11025_PathOfDestinyProving 33980-02.html">Didn't you pass by last time too?</Button>
|
||||
</body></html>
|
@@ -0,0 +1,7 @@
|
||||
<html><body>Mysterious Wizard:<br>
|
||||
Me? Perhaps it was some other wizard passing by? There are many wizards in the world.<br>
|
||||
By the way, I took the liberty of burying the dead body of the Ertheia, so please do not be angry.<br>
|
||||
I will give you this to earn your trust. An item <font color="LEVEL">belonging to the dead</font>. It's as if is from another world.<br>
|
||||
I like you very much. I hope to see you again.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11025_PathOfDestinyProving falver">End conversation and go.</Button>
|
||||
</body></html>
|
@@ -0,0 +1,6 @@
|
||||
<html><body>Telesha:<br>
|
||||
This is the additional <font color="LEVEL">delegation member</font> sent to the Town of Gludio.<br>
|
||||
Unfortunately, death seemed to have reigned for a while on this body.<br>
|
||||
The face is strangely peaceful.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11025_PathOfDestinyProving mega_menu">That's suspicious. Let's see if the body holds any clue</Button>
|
||||
</body></html>
|
@@ -0,0 +1,8 @@
|
||||
<html><body>Tarti:<br>
|
||||
That's the Breath of Death indeed!<br>
|
||||
It's horrible... But thank you for your help!<br>
|
||||
You're ready for your second class change so soon? That's incredible! I know that Material Realm people have their powers sealed unlike us, Ertheia.<br>
|
||||
You need to change class in order to hone your skills, right?<br>
|
||||
I helped you grow stronger the last time you decided to change class... I can help you this time as well.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11025_PathOfDestinyProving 34505-02.html">Ask for help</Button>
|
||||
</body></html>
|
@@ -0,0 +1,3 @@
|
||||
<html><body>Tarti:<br>
|
||||
You need to get 40 lvl, if you have already received 40 lvl, refer to tarti, she is waiting for you to continue the quest.
|
||||
</body></html>
|
@@ -0,0 +1,6 @@
|
||||
<html><body>Tarti:<br>
|
||||
Take the stairs to the Einhasad Temple and find Raymond.<br>
|
||||
An object from the Wind Spirit realm has been found near the town. He could've given it to me but for some reason decided to hand it over to you personally.<br>
|
||||
When she learned about it Telesha visited the Delegation and then quickly left the town. Something must have happened.<br>
|
||||
Raymond will fill you in.<br>
|
||||
</body></html>
|
@@ -0,0 +1,4 @@
|
||||
<html><body>Tarti:<br>
|
||||
How did it go? Raymond told me you'd left to meet Telesha. What did you learn?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11025_PathOfDestinyProving 34505-05.html">Telesha is dead.</Button>
|
||||
</body></html>
|
@@ -0,0 +1,6 @@
|
||||
<html><body>Tarti:<br>
|
||||
D-dead? It can't be! How could that happen?<br>
|
||||
Telesha is very strong! She wanted to become the town's guard captain so bad...<br>
|
||||
Do you know who's resposible?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11025_PathOfDestinyProving 34505-06.html">The Skeletons.</Button>
|
||||
</body></html>
|
@@ -0,0 +1,5 @@
|
||||
<html><body>Tarti:<br>
|
||||
Skeletons?.. Ha!.. I don't believe it! Some measly Skeletons killing Telesha... There must've been someone else!<br>
|
||||
You don't know anything about it? Could it be that there was someone else nearby?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11025_PathOfDestinyProving 34505-07.html">Tell her about the Mysterious Wizard.</Button>
|
||||
</body></html>
|
@@ -0,0 +1,6 @@
|
||||
<html><body>Tarti:<br>
|
||||
Mysterious Wizard? Do you know who he is? Okay, that's not important right now. Thank you for taking care of Telesha's body.<br>
|
||||
It's so weird that it scattered... Telesha is dead... How should I break the news to Navari...<br>
|
||||
By the way, you said you'd found some object from the Wind Spirit realm?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11025_PathOfDestinyProving 34505-08.html">Yes. Telesha had it.</Button>
|
||||
</body></html>
|
@@ -0,0 +1,7 @@
|
||||
<html><body>Tarti:<br>
|
||||
Telesha had it?.. That's weird. Probably means something. It's no coincidence that this object was there!<br>
|
||||
We need to study it. Thanks for your help! If it wasn't for you, we would've never learned what happened to Telesha.<br>
|
||||
Her death is a great loss... The only silver lining is that I'm now sure that you are ready for a <font color="LEVEL">second class change</font>.<br>
|
||||
Do you want to do it right now?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11025_PathOfDestinyProving 34505-09.html">Change class</Button>
|
||||
</body></html>
|
@@ -0,0 +1,6 @@
|
||||
<html><body>Tarti:<br>
|
||||
You've changed a lot and are now ready for the <font color="LEVEL">second class change</font>. The power hidden deep within you will now come closer to the surface.<br>
|
||||
Now you have to choose what to develop next.<br>
|
||||
If you are ready let's start your training.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11025_PathOfDestinyProving 34505-10.html">Nod</Button>
|
||||
</body></html>
|
@@ -0,0 +1,4 @@
|
||||
<html><body>Tarti:<br>
|
||||
I hope you will carefully examine all the possibilities and make the right choice.<br>
|
||||
You know that <font color="LEVEL">class change is only possible in the town</font>, right? In the meantime I'll think your further training through.<br>
|
||||
</body></html>
|
@@ -0,0 +1,3 @@
|
||||
<html><body>Tarti:<br>
|
||||
<font color="LEVEL">Artey</font> cannot participate in this quest! The minimum level should be 40.<br>
|
||||
</body></html>
|
@@ -0,0 +1,301 @@
|
||||
/*
|
||||
* 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.Q11025_PathOfDestinyProving;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.CategoryData;
|
||||
import org.l2jmobius.gameserver.enums.CategoryType;
|
||||
import org.l2jmobius.gameserver.enums.Race;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
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.player.OnPlayerLogin;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import org.l2jmobius.gameserver.model.quest.State;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.classchange.ExRequestClassChangeUi;
|
||||
|
||||
/**
|
||||
* Path of Destiny - Proving (11025)
|
||||
* @URL https://l2wiki.com/Path_of_Destiny_-_Proving
|
||||
* @author Dmitri
|
||||
*/
|
||||
public class Q11025_PathOfDestinyProving extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int TARTI = 34505;
|
||||
private static final int RAYMOND = 30289;
|
||||
private static final int TERESIA = 33981;
|
||||
private static final int MYSTERIOUS_MAGE = 33980;
|
||||
private static final int SKELETON_ARCHER = 27529;
|
||||
private static final int SKELETON_WARRIOR = 27528;
|
||||
// Items
|
||||
private static final int WIND_SPIRIT = 80673;
|
||||
// Location
|
||||
private static final Location TRAINING_GROUNDS_TELEPORT = new Location(-4983, 116607, -3344);
|
||||
// Misc
|
||||
private static final int MIN_LEVEL = 39;
|
||||
|
||||
public Q11025_PathOfDestinyProving()
|
||||
{
|
||||
super(11025);
|
||||
addStartNpc(TARTI);
|
||||
addFirstTalkId(TERESIA, MYSTERIOUS_MAGE);
|
||||
addTalkId(TARTI, RAYMOND, TERESIA, MYSTERIOUS_MAGE);
|
||||
addKillId(SKELETON_ARCHER, SKELETON_WARRIOR);
|
||||
registerQuestItems(WIND_SPIRIT);
|
||||
// addCondNotRace(Race.ERTHEIA, "34505-11.html");
|
||||
addCondMinLevel(MIN_LEVEL, "34505-11.html");
|
||||
setQuestNameNpcStringId(NpcStringId.LV_20_PATH_OF_DESTINY_PROVING);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
|
||||
{
|
||||
String htmltext = null;
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
switch (event)
|
||||
{
|
||||
case "30289-02.html":
|
||||
case "30289-05.html":
|
||||
case "34505-05.html":
|
||||
case "34505-06.html":
|
||||
case "34505-07.html":
|
||||
case "34505-08.html":
|
||||
case "34505-09.html":
|
||||
case "34505-12.html":
|
||||
case "33980-02.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "34505-02.html":
|
||||
{
|
||||
qs.startQuest();
|
||||
htmltext = event;
|
||||
if (player.getLevel() >= 40)
|
||||
{
|
||||
qs.setCond(2, true);
|
||||
htmltext = "34505-03.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "30289-03.html":
|
||||
{
|
||||
qs.setCond(3, true);
|
||||
giveItems(player, WIND_SPIRIT, 1);
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "teleport":
|
||||
{
|
||||
if (qs.isCond(3))
|
||||
{
|
||||
player.teleToLocation(TRAINING_GROUNDS_TELEPORT);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "mega_menu":
|
||||
{
|
||||
if (qs.isCond(4))
|
||||
{
|
||||
addSpawn(MYSTERIOUS_MAGE, npc, false, 300000);
|
||||
showOnScreenMsg(player, NpcStringId.TALK_TO_THE_MYSTERIOUS_WIZARD_2, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
break;
|
||||
}
|
||||
}
|
||||
case "falver":
|
||||
{
|
||||
qs.setCond(5, true);
|
||||
showOnScreenMsg(player, NpcStringId.RETURN_TO_RAYMOND_OF_THE_TOWN_OF_GLUDIO, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
giveItems(player, WIND_SPIRIT, 1);
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30289-06.html":
|
||||
{
|
||||
qs.setCond(6, true);
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "34505-10.html":
|
||||
{
|
||||
if (qs.isCond(6))
|
||||
{
|
||||
giveAdena(player, 5000, true);
|
||||
showOnScreenMsg(player, NpcStringId.CLASS_TRANSFER_IS_AVAILABLE_NCLICK_THE_CLASS_TRANSFER_ICON_IN_THE_NOTIFICATION_WINDOW_TO_TRANSFER_YOUR_CLASS, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
qs.exitQuest(false, true);
|
||||
if (CategoryData.getInstance().isInCategory(CategoryType.SECOND_CLASS_GROUP, player.getClassId().getId()) || //
|
||||
(CategoryData.getInstance().isInCategory(CategoryType.FIRST_CLASS_GROUP, player.getClassId().getId()) && (player.getRace() == Race.ERTHEIA)))
|
||||
{
|
||||
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
|
||||
}
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, PlayerInstance player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
|
||||
switch (qs.getState())
|
||||
{
|
||||
case State.CREATED:
|
||||
{
|
||||
if (npc.getId() == TARTI)
|
||||
{
|
||||
htmltext = "34505-01.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case State.STARTED:
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case TARTI:
|
||||
{
|
||||
if (qs.isCond(1) && (player.getLevel() > MIN_LEVEL))
|
||||
{
|
||||
qs.setCond(2, true);
|
||||
htmltext = "34505-03.html";
|
||||
break;
|
||||
}
|
||||
else if (qs.isCond(2))
|
||||
{
|
||||
htmltext = "34505-03.html"; // TODO: Proper second talk dialog.
|
||||
break;
|
||||
}
|
||||
else if (qs.isCond(6))
|
||||
{
|
||||
htmltext = "34505-04.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RAYMOND:
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
htmltext = "30289-01.html";
|
||||
}
|
||||
else if (qs.isCond(5))
|
||||
{
|
||||
htmltext = "30289-04.html";
|
||||
}
|
||||
else if (qs.isCond(6))
|
||||
{
|
||||
htmltext = "30289-06.html"; // TODO: Proper second talk dialog.
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TERESIA:
|
||||
{
|
||||
if (qs.isCond(4))
|
||||
{
|
||||
htmltext = "33981-01.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MYSTERIOUS_MAGE:
|
||||
{
|
||||
if (qs.isCond(4))
|
||||
{
|
||||
htmltext = "33980-01.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case State.COMPLETED:
|
||||
{
|
||||
htmltext = getAlreadyCompletedMsg(player);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onFirstTalk(Npc npc, PlayerInstance player)
|
||||
{
|
||||
return npc.getId() + "-01.html";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
|
||||
{
|
||||
final QuestState qs = getQuestState(killer, true);
|
||||
if ((qs != null) && qs.isCond(3))
|
||||
{
|
||||
addSpawn(TERESIA, npc, false, 300000);
|
||||
showOnScreenMsg(killer, NpcStringId.CHECK_ON_TELESHA, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
qs.setCond(4, true);
|
||||
}
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
||||
@RegisterEvent(EventType.ON_PLAYER_LOGIN)
|
||||
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
|
||||
public void OnPlayerLogin(OnPlayerLogin event)
|
||||
{
|
||||
if (Config.DISABLE_TUTORIAL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final PlayerInstance player = event.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.getRace() == Race.ERTHEIA)
|
||||
{
|
||||
if (!CategoryData.getInstance().isInCategory(CategoryType.FIRST_CLASS_GROUP, player.getClassId().getId()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (!CategoryData.getInstance().isInCategory(CategoryType.SECOND_CLASS_GROUP, player.getClassId().getId()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if ((qs != null) && qs.isCompleted())
|
||||
{
|
||||
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
|
||||
}
|
||||
}
|
||||
}
|
@@ -23,6 +23,7 @@ import org.l2jmobius.Config;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.CategoryData;
|
||||
import org.l2jmobius.gameserver.enums.CategoryType;
|
||||
import org.l2jmobius.gameserver.enums.QuestSound;
|
||||
import org.l2jmobius.gameserver.enums.Race;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
@@ -123,13 +124,17 @@ public class Q11032_CurseOfUndying extends Quest
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
showOnScreenMsg(player, NpcStringId.FIRST_CLASS_TRANSFER_IS_AVAILABLE_NGO_SEE_TARTI_IN_THE_TOWN_OF_GLUDIO_TO_START_THE_CLASS_TRANSFER, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
// Ertheias do not change.
|
||||
if (player.getRace() != Race.ERTHEIA)
|
||||
{
|
||||
showOnScreenMsg(player, NpcStringId.FIRST_CLASS_TRANSFER_IS_AVAILABLE_NGO_SEE_TARTI_IN_THE_TOWN_OF_GLUDIO_TO_START_THE_CLASS_TRANSFER, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
if (CategoryData.getInstance().isInCategory(CategoryType.FIRST_CLASS_GROUP, player.getClassId().getId()))
|
||||
{
|
||||
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
|
||||
}
|
||||
}
|
||||
addExpAndSp(player, 787633, 708);
|
||||
qs.exitQuest(false, true);
|
||||
if (CategoryData.getInstance().isInCategory(CategoryType.FIRST_CLASS_GROUP, player.getClassId().getId()))
|
||||
{
|
||||
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
|
||||
}
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
@@ -238,6 +243,12 @@ public class Q11032_CurseOfUndying extends Quest
|
||||
return;
|
||||
}
|
||||
|
||||
// Ertheias do not change.
|
||||
if (player.getRace() == Race.ERTHEIA)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if ((qs != null) && qs.isCompleted())
|
||||
{
|
||||
|
@@ -0,0 +1,4 @@
|
||||
<html><body>Guard Kallesin:<br>
|
||||
So, what brings you to me? Ah, is it about the Secret Material?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11033_AntidoteIngredients 33177-02.html">Confirm</Button>
|
||||
</body></html>
|
@@ -0,0 +1,5 @@
|
||||
<html><body>Guard Kallesin:<br>
|
||||
So, that's you they've sent from Gludio? I use this material to deal with the curse. Thank you!<br>
|
||||
It will be hard to pull this one off, so if you excuse me...<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11034_ResurrectedOne 33177-02.html">Do you need help?</Button>
|
||||
</body></html>
|
@@ -0,0 +1,5 @@
|
||||
<html><body>Tarti:<br>
|
||||
Do you remember what you've heard about the immortality curse in the Ruins of Despair? I've learned about a... let's say, an antidote that might have something to do with this curse.<br>
|
||||
There is a place you can go to investigate it. It's not far from here.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11033_AntidoteIngredients 34505-02.html">"Learn more".</Button>
|
||||
</body></html>
|
@@ -0,0 +1,5 @@
|
||||
<html><body>Tarti:<br>
|
||||
The place is called <font color="LEVEL">Ruins of Agony</font>. It's somewhat similar to the Ruins of Despair though there are quite a few differences.<br>
|
||||
The immortality curse is pretty common in that region. That's why I think that you should start there if you want to learn about its origins.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11033_AntidoteIngredients 34505-03.html">So, what should I do?</Button><br>
|
||||
</body></html>
|
@@ -0,0 +1,5 @@
|
||||
<html><body>Tarti:<br>
|
||||
To be honest, I'm not quite sure mysself what you need to look for. What I am sure is that this adventure will benefit you greatly. Consider it training.<br>
|
||||
On you go! Oh!.. You know about <font color="LEVEL">skill</font> training, right?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11033_AntidoteIngredients 34505-04.html">"Tell me everything!".</Button>
|
||||
</body></html>
|
@@ -0,0 +1,8 @@
|
||||
<html><body>Tarti:<br>
|
||||
To learn a new skill press <font color="LEVEL">Alt+K</font>. You will see a menu with information about all available skill.<br>
|
||||
If you continue to gain experience, you will soon be able to learn <font color="LEVEL">new skill</font> and <font color="LEVEL">increase the level</font> of the skills you've already learned.<br>
|
||||
Don't neglect your skills as they let you grow stronger and defeat increasingly powerful enemies.<br>
|
||||
Oh!.. You can create a shortcut for the skill you've learned if you find it useful.<br>
|
||||
Well, are you ready?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11033_AntidoteIngredients 34505-05.html">Nod</Button><br>
|
||||
</body></html>
|
@@ -0,0 +1,7 @@
|
||||
<html><body>Tarti:<br>
|
||||
In the <font color="LEVEL">Ruins of Agony</font> you will find <font color="LEVEL">Carcass Bats</font> and <font color="LEVEL">Vampires</font>.<br>
|
||||
I think Vampires might have something to do with the curse. I've heard that you can gain a <font color="LEVEL">Secret Material</font> if you defeat Carcass Bats and Vampires.<br>
|
||||
Find the Secret Material and give it to <font color="LEVEL">Guard Kallesin</font>.<br>
|
||||
I don't want you to get lost on your way to the ruins so I'll send you right there.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11033_AntidoteIngredients teleport">Teleport</Button><br>
|
||||
</body></html>
|
@@ -0,0 +1,3 @@
|
||||
<html><body>Tarti:<br>
|
||||
<font color="LEVEL">Artey</font> cannot participate in this quest! The minimum level should be 20, and players who have not completed 2nd profession.<br>
|
||||
</body></html>
|
@@ -0,0 +1,214 @@
|
||||
/*
|
||||
* 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.Q11033_AntidoteIngredients;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.QuestSound;
|
||||
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
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.model.quest.State;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExTutorialShowId;
|
||||
|
||||
import quests.Q11034_ResurrectedOne.Q11034_ResurrectedOne;
|
||||
|
||||
/**
|
||||
* Antidote Ingredients (11033)
|
||||
* @URL https://l2wiki.com/Antidote_Ingredients
|
||||
* @author Dmitri
|
||||
*/
|
||||
public class Q11033_AntidoteIngredients extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int TARTI = 34505;
|
||||
private static final int KALESIN = 33177;
|
||||
private static final int KRAKOS_BAT = 24384;
|
||||
private static final int A_VAMMPIRE = 24385;
|
||||
// Items
|
||||
private static final ItemHolder SOE_SILVAN = new ItemHolder(80679, 1);
|
||||
// Location
|
||||
private static final Location TRAINING_GROUNDS_TELEPORT = new Location(-44121, 115926, -3624);
|
||||
// Misc
|
||||
private static final String KILL_COUNT_VAR = "KillCount";
|
||||
private static final int MIN_LEVEL = 20;
|
||||
|
||||
public Q11033_AntidoteIngredients()
|
||||
{
|
||||
super(11033);
|
||||
addStartNpc(TARTI);
|
||||
addTalkId(TARTI, KALESIN);
|
||||
addKillId(KRAKOS_BAT, A_VAMMPIRE);
|
||||
registerQuestItems(SOE_SILVAN.getId());
|
||||
// addCondNotRace(Race.ERTHEIA, "34505-06.html");
|
||||
addCondMinLevel(MIN_LEVEL, "34505-06.html");
|
||||
setQuestNameNpcStringId(NpcStringId.LV_20_40_ANTIDOTE_INGREDIENTS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
|
||||
{
|
||||
String htmltext = null;
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
switch (event)
|
||||
{
|
||||
case "34505-02.html":
|
||||
case "34505-05.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "34505-03.html":
|
||||
{
|
||||
player.sendPacket(new ExTutorialShowId(18)); // Quest Progress
|
||||
showOnScreenMsg(player, NpcStringId.PRESS_ALT_K_TO_ACQUIRE_THE_SKILL_IN_THE_SKILL_WINDOW, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "34505-04.html":
|
||||
{
|
||||
qs.startQuest();
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "teleport":
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
player.teleToLocation(TRAINING_GROUNDS_TELEPORT);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "33177-02.html":
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
addExpAndSp(player, 913551, 822);
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
|
||||
// Initialize next quest.
|
||||
final Quest nextQuest = QuestManager.getInstance().getQuest(Q11034_ResurrectedOne.class.getSimpleName());
|
||||
if (nextQuest != null)
|
||||
{
|
||||
nextQuest.newQuestState(player);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, PlayerInstance player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
|
||||
switch (qs.getState())
|
||||
{
|
||||
case State.CREATED:
|
||||
{
|
||||
if (npc.getId() == TARTI)
|
||||
{
|
||||
htmltext = "34505-01.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case State.STARTED:
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case TARTI:
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
htmltext = "34505-04.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case KALESIN:
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
htmltext = "33177-01.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case State.COMPLETED:
|
||||
{
|
||||
htmltext = getAlreadyCompletedMsg(player);
|
||||
break;
|
||||
}
|
||||
}
|
||||
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 < 15)
|
||||
{
|
||||
qs.set(KILL_COUNT_VAR, killCount);
|
||||
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
|
||||
sendNpcLogList(killer);
|
||||
}
|
||||
else
|
||||
{
|
||||
qs.setCond(2, true);
|
||||
qs.unset(KILL_COUNT_VAR);
|
||||
giveItems(killer, SOE_SILVAN);
|
||||
showOnScreenMsg(killer, NpcStringId.USE_SCROLL_OF_ESCAPE_KALLESIN_IN_YOUR_INVENTORY_NTALK_TO_KALLESIN_TO_COMPLETE_THE_QUEST, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
}
|
||||
}
|
||||
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.RUINS_OF_AGONY_BEND_LV_19.getId(), true, qs.getInt(KILL_COUNT_VAR)));
|
||||
return holder;
|
||||
}
|
||||
return super.getNpcLogList(player);
|
||||
}
|
||||
}
|
@@ -0,0 +1,5 @@
|
||||
<html><body>Guard Kallesin:<br>
|
||||
So, that's you they've sent from Gludio? I use this material to deal with the curse. Thank you!<br>
|
||||
It will be hard to pull this one off, so if you excuse me...<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11034_ResurrectedOne 33177-02.html">Do you need help?</Button><br>
|
||||
</body></html>
|
@@ -0,0 +1,5 @@
|
||||
<html><body>Guard Kallesin:<br>
|
||||
Do you want to help?<br>
|
||||
Great! I have a mission for you. First of all, get rid of those bloody Skeletons.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11034_ResurrectedOne 33177-03.html">Where do I find Skeletons?</Button><br>
|
||||
</body></html>
|
@@ -0,0 +1,4 @@
|
||||
<html><body>Guard Kallesin:<br>
|
||||
Go to the Ruins of Agony, there are plenty of them there. For some reason there've become so many of them all of the sudden. It has never happened before.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11034_ResurrectedOne 33177-04.html">OK, I'll deal with the Skeletons.</Button>
|
||||
</body></html>
|
@@ -0,0 +1,6 @@
|
||||
<html><body>Guard Kallesin:<br>
|
||||
Kill <font color="LEVEL">Skeleton Scouts, Skeleton Archers, and Skeleton Warriors</font>. When you're done, go to <font color="LEVEL">Guard Zenath</font> in the <font color="LEVEL">Ruins of Agony</font>.<br>
|
||||
It seems like it's even worse for her there. I will teleport you to the Skeletons, so you can proceed to the mission right away.<br>
|
||||
By the way, haven't you used <font color="LEVEL">automatic hunting</font> yet? I strongly recommend that you do. You can see the details in the Help menu.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11034_ResurrectedOne teleport">Teleport</Button><br>
|
||||
</body></html>
|
@@ -0,0 +1,3 @@
|
||||
<html><body>Tarti:<br>
|
||||
<font color="LEVEL">Artey</font> cannot participate in this quest! The minimum level should be 27.<br>
|
||||
</body></html>
|
@@ -0,0 +1,4 @@
|
||||
<html><body>Guard Zenath:<br>
|
||||
Have you dealt with the Skeletons?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11034_ResurrectedOne 33509-02.html">Confirm</Button>
|
||||
</body></html>
|
@@ -0,0 +1,5 @@
|
||||
<html><body>Guard Zenath:<br>
|
||||
Thank you! There've been a surge in numbers of Skeletons lately. It worries me.<br>
|
||||
Skeletons and Spartoi... I don't know what is going on.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11035_DeathlyMischief 33509-02.html">Ask what happened</Button>
|
||||
</body></html>
|
@@ -0,0 +1,209 @@
|
||||
/*
|
||||
* 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.Q11034_ResurrectedOne;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.QuestSound;
|
||||
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
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.model.quest.State;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExTutorialShowId;
|
||||
|
||||
import quests.Q11035_DeathlyMischief.Q11035_DeathlyMischief;
|
||||
|
||||
/**
|
||||
* Resurrected One (11034)
|
||||
* @URL https://l2wiki.com/Resurrected_One
|
||||
* @author Dmitri
|
||||
*/
|
||||
public class Q11034_ResurrectedOne extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int KALESIN = 33177;
|
||||
private static final int JENA = 33509;
|
||||
private static final int SKELETON_SCOUT = 24386;
|
||||
private static final int SKELETON_ARCHER = 24387;
|
||||
private static final int SKELETON_WARRIOR = 24388;
|
||||
// Items
|
||||
private static final ItemHolder SOE_SILVAN = new ItemHolder(80680, 1);
|
||||
// Location
|
||||
private static final Location TRAINING_GROUNDS_TELEPORT = new Location(-46169, 110937, -3808);
|
||||
// Misc
|
||||
private static final String KILL_COUNT_VAR = "KillCount";
|
||||
private static final int MIN_LEVEL = 27;
|
||||
|
||||
public Q11034_ResurrectedOne()
|
||||
{
|
||||
super(11034);
|
||||
addStartNpc(KALESIN);
|
||||
addTalkId(KALESIN, JENA);
|
||||
addKillId(SKELETON_SCOUT, SKELETON_ARCHER, SKELETON_WARRIOR);
|
||||
registerQuestItems(SOE_SILVAN.getId());
|
||||
// addCondNotRace(Race.ERTHEIA, "33177-05.html");
|
||||
addCondMinLevel(MIN_LEVEL, "33177-05.html");
|
||||
setQuestNameNpcStringId(NpcStringId.LV_20_40_THE_RESURRECTED_ONE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
|
||||
{
|
||||
String htmltext = null;
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
switch (event)
|
||||
{
|
||||
case "33177-02.html":
|
||||
case "33177-03.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "33177-04.html":
|
||||
{
|
||||
qs.startQuest();
|
||||
player.sendPacket(new ExTutorialShowId(19)); // Adventurers Guide
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "teleport":
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
player.teleToLocation(TRAINING_GROUNDS_TELEPORT);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "33509-02.html":
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
addExpAndSp(player, 1640083, 1476);
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
|
||||
// Initialize next quest.
|
||||
final Quest nextQuest = QuestManager.getInstance().getQuest(Q11035_DeathlyMischief.class.getSimpleName());
|
||||
if (nextQuest != null)
|
||||
{
|
||||
nextQuest.newQuestState(player);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, PlayerInstance player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
|
||||
switch (qs.getState())
|
||||
{
|
||||
case State.CREATED:
|
||||
{
|
||||
if (npc.getId() == KALESIN)
|
||||
{
|
||||
htmltext = "33177-01.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case State.STARTED:
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case KALESIN:
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
htmltext = "33177-04.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case JENA:
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
htmltext = "33509-01.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case State.COMPLETED:
|
||||
{
|
||||
htmltext = getAlreadyCompletedMsg(player);
|
||||
break;
|
||||
}
|
||||
}
|
||||
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 < 30)
|
||||
{
|
||||
qs.set(KILL_COUNT_VAR, killCount);
|
||||
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
|
||||
sendNpcLogList(killer);
|
||||
}
|
||||
else
|
||||
{
|
||||
qs.setCond(2, true);
|
||||
qs.unset(KILL_COUNT_VAR);
|
||||
giveItems(killer, SOE_SILVAN);
|
||||
showOnScreenMsg(killer, NpcStringId.USE_SCROLL_OF_ESCAPE_ZENATH_IN_YOUR_INVENTORY_NTALK_TO_ZENATH_TO_COMPLETE_THE_QUEST, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
}
|
||||
}
|
||||
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.DEFEAT_SKELETONS_3.getId(), true, qs.getInt(KILL_COUNT_VAR)));
|
||||
return holder;
|
||||
}
|
||||
return super.getNpcLogList(player);
|
||||
}
|
||||
}
|
@@ -0,0 +1,5 @@
|
||||
<html><body>Guard Zenath:<br>
|
||||
Thank you! There've been a surge in numbers of Skeletons lately. It worries me.<br>
|
||||
Skeletons and Spartoi... I don't know what is going on.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11035_DeathlyMischief 33509-02.html">Ask what happened</Button>
|
||||
</body></html>
|
@@ -0,0 +1,5 @@
|
||||
<html><body>Guard Zenath:<br>
|
||||
It happened before that the dead would walk. But there has never been so many of them. It's strange.<br>
|
||||
They say, Skeletons were seen in the vicinity of the town.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11035_DeathlyMischief 33509-03.html">There must be a reason.</Button>
|
||||
</body></html>
|
@@ -0,0 +1,5 @@
|
||||
<html><body>Guard Zenath:<br>
|
||||
It seems that it's no accident. They say that even vampires were seen here.<br>
|
||||
I'm afraid that somebody might let the Breath of Death out.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11035_DeathlyMischief 33509-04.html">What is Breath of Death?</Button><br>
|
||||
</body></html>
|
@@ -0,0 +1,7 @@
|
||||
<html><body>Guard Zenath:<br>
|
||||
Breath of Death is a type of black magic. It's energy that can rise the dead. It haven't been used for a while, but it seems that's the case now.<br>
|
||||
Kill <font color="LEVEL">Spartoi Soldiers and Raging Spartoi</font>, get <font color="LEVEL">Breath of Death</font> from their remnants. If they are indeed influenced by that magic, it will leave traces on their bones.<br>
|
||||
I will teleport you to the place you need, don't waste time.<br>
|
||||
By the way, if you aren't familiar with <font color="LEVEL">potion auto-use</font> function, please, look into Help menu. It is a very useful thing, I assure you.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11035_DeathlyMischief teleport">Teleport</Button>
|
||||
</body></html>
|
@@ -0,0 +1,3 @@
|
||||
<html><body>Tarti:<br>
|
||||
<font color="LEVEL">Artey</font> cannot participate in this quest! The minimum level should be 33.<br>
|
||||
</body></html>
|
@@ -0,0 +1,4 @@
|
||||
<html><body>Tarti:<br>
|
||||
So you've found the Breath of Death<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11035_DeathlyMischief 34505-02.html">Confirm</Button>
|
||||
</body></html>
|
@@ -0,0 +1,8 @@
|
||||
<html><body>Tarti:<br>
|
||||
That's the Breath of Death indeed!<br>
|
||||
It's horrible... But thank you for your help!<br>
|
||||
You're ready for your second class change so soon? That's incredible! I know that Material Realm people have their powers sealed unlike us, Ertheia.<br>
|
||||
You need to change class in order to hone your skills, right?<br>
|
||||
I helped you grow stronger the last time you decided to change class... I can help you this time as well.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11025_PathOfDestinyProving 34505-02.html">Ask for help</Button>
|
||||
</body></html>
|
@@ -0,0 +1,184 @@
|
||||
/*
|
||||
* 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.Q11035_DeathlyMischief;
|
||||
|
||||
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
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.model.quest.State;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExTutorialShowId;
|
||||
|
||||
import quests.Q11025_PathOfDestinyProving.Q11025_PathOfDestinyProving;
|
||||
|
||||
/**
|
||||
* Deathly Mischief (11035)
|
||||
* @URL https://l2wiki.com/Deathly_Mischief
|
||||
* @author Dmitri
|
||||
*/
|
||||
public class Q11035_DeathlyMischief extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int JENA = 33509;
|
||||
private static final int TARTI = 34505;
|
||||
private static final int PHANTOM_SKELETON_SOLDIER = 24389;
|
||||
private static final int SKELETON_BERSERKER = 24390;
|
||||
// Items
|
||||
private static final int BREATH_OF_DEATH = 80672;
|
||||
private static final ItemHolder SOE_SILVAN = new ItemHolder(80677, 1);
|
||||
// Location
|
||||
private static final Location TRAINING_GROUNDS_TELEPORT = new Location(-51130, 110053, -3664);
|
||||
// Misc
|
||||
private static final int MIN_LEVEL = 33;
|
||||
|
||||
public Q11035_DeathlyMischief()
|
||||
{
|
||||
super(11035);
|
||||
addStartNpc(JENA);
|
||||
addTalkId(JENA, TARTI);
|
||||
addKillId(PHANTOM_SKELETON_SOLDIER, SKELETON_BERSERKER);
|
||||
registerQuestItems(SOE_SILVAN.getId(), BREATH_OF_DEATH);
|
||||
// addCondNotRace(Race.ERTHEIA, "33509-05.html");
|
||||
addCondMinLevel(MIN_LEVEL, "33509-05.html");
|
||||
setQuestNameNpcStringId(NpcStringId.LV_20_40_DEATHLY_MISCHIEF);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
|
||||
{
|
||||
String htmltext = null;
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
switch (event)
|
||||
{
|
||||
case "33509-02.html":
|
||||
case "33509-03.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "33509-04.html":
|
||||
{
|
||||
qs.startQuest();
|
||||
player.sendPacket(new ExTutorialShowId(17)); // Adventurers Guide
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "teleport":
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
player.teleToLocation(TRAINING_GROUNDS_TELEPORT);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "34505-02.html":
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
addExpAndSp(player, 4952686, 4457);
|
||||
giveAdena(player, 165000, true);
|
||||
showOnScreenMsg(player, NpcStringId.SECOND_CLASS_TRANSFER_IS_AVAILABLE_NGO_SEE_TARTI_IN_THE_TOWN_OF_GLUDIO_TO_START_THE_CLASS_TRANSFER, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
|
||||
// Initialize next quest.
|
||||
final Quest nextQuest = QuestManager.getInstance().getQuest(Q11025_PathOfDestinyProving.class.getSimpleName());
|
||||
if (nextQuest != null)
|
||||
{
|
||||
nextQuest.newQuestState(player);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, PlayerInstance player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
|
||||
switch (qs.getState())
|
||||
{
|
||||
case State.CREATED:
|
||||
{
|
||||
if (npc.getId() == JENA)
|
||||
{
|
||||
htmltext = "33509-01.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case State.STARTED:
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case JENA:
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
htmltext = "33509-04.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TARTI:
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
htmltext = "34505-01.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case State.COMPLETED:
|
||||
{
|
||||
htmltext = getAlreadyCompletedMsg(player);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
|
||||
{
|
||||
final QuestState qs = getQuestState(killer, false);
|
||||
if ((qs != null) && qs.isCond(1))
|
||||
{
|
||||
if (giveItemRandomly(killer, BREATH_OF_DEATH, 1, 15, 0.5, true))
|
||||
{
|
||||
qs.setCond(2, true);
|
||||
giveItems(killer, SOE_SILVAN);
|
||||
showOnScreenMsg(killer, NpcStringId.USE_SCROLL_OF_ESCAPE_TARTI_IN_YOUR_INVENTORY_NTALK_TO_TARTI_TO_COMPLETE_THE_QUEST, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
}
|
||||
}
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
}
|
@@ -0,0 +1,4 @@
|
||||
<html><body>Guard Kallesin:<br>
|
||||
So, what brings you to me? Ah, is it about the Secret Material?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11036_ChangedSpirits 33963-02.html">Confirm</Button>
|
||||
</body></html>
|
@@ -0,0 +1,5 @@
|
||||
<html><body>Guard Kallesin:<br>
|
||||
So, that's you they've sent from Gludio? I use this material to deal with the curse. Thank you!<br>
|
||||
It will be hard to pull this one off, so if you excuse me...<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11037_WhyAreTheRatelHere 33963-02.html">Do you need help?</Button>
|
||||
</body></html>
|
@@ -0,0 +1,5 @@
|
||||
<html><body>Tarti:<br>
|
||||
Do you remember what you've heard about the immortality curse in the Ruins of Despair? I've learned about a... let's say, an antidote that might have something to do with this curse.<br>
|
||||
There is a place you can go to investigate it. It's not far from here.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11036_ChangedSpirits 34505-02.html">"Learn more".</Button>
|
||||
</body></html>
|
@@ -0,0 +1,5 @@
|
||||
<html><body>Tarti:<br>
|
||||
The place is called <font color="LEVEL">Ruins of Agony</font>. It's somewhat similar to the Ruins of Despair though there are quite a few differences.<br>
|
||||
The immortality curse is pretty common in that region. That's why I think that you should start there if you want to learn about its origins.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11036_ChangedSpirits 34505-03.html">So, what should I do?</Button><br>
|
||||
</body></html>
|
@@ -0,0 +1,5 @@
|
||||
<html><body>Tarti:<br>
|
||||
To be honest, I'm not quite sure mysself what you need to look for. What I am sure is that this adventure will benefit you greatly. Consider it training.<br>
|
||||
On you go! Oh!.. You know about <font color="LEVEL">skill</font> training, right?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11036_ChangedSpirits 34505-04.html">"Tell me everything!".</Button>
|
||||
</body></html>
|
@@ -0,0 +1,7 @@
|
||||
<html><body>Tarti:<br>
|
||||
In the <font color="LEVEL">Ruins of Agony</font> you will find <font color="LEVEL">Carcass Bats</font> and <font color="LEVEL">Vampires</font>.<br>
|
||||
I think Vampires might have something to do with the curse. I've heard that you can gain a <font color="LEVEL">Secret Material</font> if you defeat Carcass Bats and Vampires.<br>
|
||||
Find the Secret Material and give it to <font color="LEVEL">Guard Kallesin</font>.<br>
|
||||
I don't want you to get lost on your way to the ruins so I'll send you right there.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11036_ChangedSpirits teleport">Teleport</Button><br>
|
||||
</body></html>
|
@@ -0,0 +1,3 @@
|
||||
<html><body>Tarti:<br>
|
||||
<font color="LEVEL">Artey</font> cannot participate in this quest! The minimum level should be 20, and players who have not completed 2nd profession.<br>
|
||||
</body></html>
|
@@ -0,0 +1,208 @@
|
||||
/*
|
||||
* 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.Q11036_ChangedSpirits;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.QuestSound;
|
||||
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
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.model.quest.State;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
||||
|
||||
import quests.Q11025_PathOfDestinyProving.Q11025_PathOfDestinyProving;
|
||||
import quests.Q11037_WhyAreTheRatelHere.Q11037_WhyAreTheRatelHere;
|
||||
|
||||
/**
|
||||
* Changed Spirits (11036)
|
||||
* @URL https://l2wiki.com/Changed_Spirits
|
||||
* @author Dmitri
|
||||
*/
|
||||
public class Q11036_ChangedSpirits extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int TARTI = 34505;
|
||||
private static final int PIO = 33963;
|
||||
private static final int SOBBING_BREEZE = 24391;
|
||||
private static final int WHISPERING_BREEZE = 24392;
|
||||
private static final int LAUGHING_BREEZE = 24393;
|
||||
// Items
|
||||
private static final ItemHolder SOE_SILVAN = new ItemHolder(80681, 1);
|
||||
// Location
|
||||
private static final Location TRAINING_GROUNDS_TELEPORT = new Location(-74631, 94630, -3736);
|
||||
// Misc
|
||||
private static final String KILL_COUNT_VAR = "KillCount";
|
||||
private static final int MIN_LEVEL = 40;
|
||||
|
||||
public Q11036_ChangedSpirits()
|
||||
{
|
||||
super(11036);
|
||||
addStartNpc(TARTI);
|
||||
addTalkId(TARTI, PIO);
|
||||
addKillId(SOBBING_BREEZE, WHISPERING_BREEZE, LAUGHING_BREEZE);
|
||||
registerQuestItems(SOE_SILVAN.getId());
|
||||
addCondMinLevel(MIN_LEVEL, "34505-06.html");
|
||||
addCondCompletedQuest(Q11025_PathOfDestinyProving.class.getSimpleName(), "34505-06.html");
|
||||
setQuestNameNpcStringId(NpcStringId.LV_40_76_CHANGED_SPIRITS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
|
||||
{
|
||||
String htmltext = null;
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
switch (event)
|
||||
{
|
||||
case "34505-02.html":
|
||||
case "34505-04.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "34505-03.html":
|
||||
{
|
||||
qs.startQuest();
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "teleport":
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
player.teleToLocation(TRAINING_GROUNDS_TELEPORT);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "33963-02.html":
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
addExpAndSp(player, 14281098, 12852);
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
|
||||
// Initialize next quest.
|
||||
final Quest nextQuest = QuestManager.getInstance().getQuest(Q11037_WhyAreTheRatelHere.class.getSimpleName());
|
||||
if (nextQuest != null)
|
||||
{
|
||||
nextQuest.newQuestState(player);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, PlayerInstance player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
|
||||
switch (qs.getState())
|
||||
{
|
||||
case State.CREATED:
|
||||
{
|
||||
if (npc.getId() == TARTI)
|
||||
{
|
||||
htmltext = "34505-01.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case State.STARTED:
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case TARTI:
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
htmltext = "34505-03.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case PIO:
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
htmltext = "33963-01.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case State.COMPLETED:
|
||||
{
|
||||
htmltext = getAlreadyCompletedMsg(player);
|
||||
break;
|
||||
}
|
||||
}
|
||||
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 < 30)
|
||||
{
|
||||
qs.set(KILL_COUNT_VAR, killCount);
|
||||
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
|
||||
sendNpcLogList(killer);
|
||||
}
|
||||
else
|
||||
{
|
||||
qs.setCond(2, true);
|
||||
qs.unset(KILL_COUNT_VAR);
|
||||
giveItems(killer, SOE_SILVAN);
|
||||
showOnScreenMsg(killer, NpcStringId.USE_SCROLL_OF_ESCAPE_PIO_IN_YOUR_INVENTORY_NTALK_TO_PIO_TO_COMPLETE_THE_QUEST, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
}
|
||||
}
|
||||
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.DEFEAT_THE_PACK_OF_WINDRA_2.getId(), true, qs.getInt(KILL_COUNT_VAR)));
|
||||
return holder;
|
||||
}
|
||||
return super.getNpcLogList(player);
|
||||
}
|
||||
}
|
@@ -0,0 +1,4 @@
|
||||
<html><body>Guard Kallesin:<br>
|
||||
So, what brings you to me? Ah, is it about the Secret Material?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11037_WhyAreTheRatelHere 33963-02.html">Confirm</Button>
|
||||
</body></html>
|
@@ -0,0 +1,5 @@
|
||||
<html><body>Guard Kallesin:<br>
|
||||
So, that's you they've sent from Gludio? I use this material to deal with the curse. Thank you!<br>
|
||||
It will be hard to pull this one off, so if you excuse me...<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11037_WhyAreTheRatelHere 33963-03.html">Do you need help?</Button>
|
||||
</body></html>
|
@@ -0,0 +1,4 @@
|
||||
<html><body>Guard Kallesin:<br>
|
||||
So, what brings you to me? Ah, is it about the Secret Material?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11037_WhyAreTheRatelHere teleport">Confirm</Button>
|
||||
</body></html>
|
@@ -0,0 +1,4 @@
|
||||
<html><body>Guard Kallesin:<br>
|
||||
So, what brings you to me? Ah, is it about the Secret Material?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11037_WhyAreTheRatelHere 33963-05.html">Confirm</Button>
|
||||
</body></html>
|
@@ -0,0 +1,4 @@
|
||||
<html><body>Guard Kallesin:<br>
|
||||
So, what brings you to me? Ah, is it about the Secret Material?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11038_GrowlersTurnedViolent 33963-02.html">Confirm</Button>
|
||||
</body></html>
|
@@ -0,0 +1,3 @@
|
||||
<html><body>Tarti:<br>
|
||||
<font color="LEVEL">Artey</font> cannot participate in this quest! The minimum level should be 20, and players who have not completed 2nd profession.<br>
|
||||
</body></html>
|
@@ -0,0 +1,201 @@
|
||||
/*
|
||||
* 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.Q11037_WhyAreTheRatelHere;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.QuestSound;
|
||||
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
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.model.quest.State;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
||||
|
||||
import quests.Q11036_ChangedSpirits.Q11036_ChangedSpirits;
|
||||
import quests.Q11038_GrowlersTurnedViolent.Q11038_GrowlersTurnedViolent;
|
||||
|
||||
/**
|
||||
* Why are the Ratel here? (11037)
|
||||
* @URL https://l2wiki.com/Why_are_the_Ratel_here%3F
|
||||
* @author Dmitri
|
||||
*/
|
||||
public class Q11037_WhyAreTheRatelHere extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int PIO = 33963;
|
||||
private static final int AWESOME_HONEY_BADGER = 24394;
|
||||
private static final int AWESOME_STRONG_HONEY_BADGER = 24395;
|
||||
// Items
|
||||
private static final ItemHolder SOE_PIO = new ItemHolder(80681, 1);
|
||||
// Location
|
||||
private static final Location TRAINING_GROUNDS_TELEPORT = new Location(-80777, 91995, -3720);
|
||||
// Misc
|
||||
private static final String KILL_COUNT_VAR = "KillCount";
|
||||
private static final int MIN_LEVEL = 45;
|
||||
|
||||
public Q11037_WhyAreTheRatelHere()
|
||||
{
|
||||
super(11037);
|
||||
addStartNpc(PIO);
|
||||
addTalkId(PIO);
|
||||
addKillId(AWESOME_HONEY_BADGER, AWESOME_STRONG_HONEY_BADGER);
|
||||
registerQuestItems(SOE_PIO.getId());
|
||||
addCondMinLevel(MIN_LEVEL, "33963-06.html");
|
||||
addCondCompletedQuest(Q11036_ChangedSpirits.class.getSimpleName(), "33963-06.html");
|
||||
setQuestNameNpcStringId(NpcStringId.LV_40_76_WHY_ARE_THE_RATEL_HERE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
|
||||
{
|
||||
String htmltext = null;
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
switch (event)
|
||||
{
|
||||
case "33963-03.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "33963-02.html":
|
||||
{
|
||||
qs.startQuest();
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "teleport":
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
player.teleToLocation(TRAINING_GROUNDS_TELEPORT);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "33963-05.html":
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
addExpAndSp(player, 30949789, 27854);
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
|
||||
// Initialize next quest.
|
||||
final Quest nextQuest = QuestManager.getInstance().getQuest(Q11038_GrowlersTurnedViolent.class.getSimpleName());
|
||||
if (nextQuest != null)
|
||||
{
|
||||
nextQuest.newQuestState(player);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, PlayerInstance player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
|
||||
switch (qs.getState())
|
||||
{
|
||||
case State.CREATED:
|
||||
{
|
||||
if (npc.getId() == PIO)
|
||||
{
|
||||
htmltext = "33963-01.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case State.STARTED:
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case PIO:
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
htmltext = "33963-02.html";
|
||||
}
|
||||
else if (qs.isCond(2))
|
||||
{
|
||||
htmltext = "33963-04.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case State.COMPLETED:
|
||||
{
|
||||
htmltext = getAlreadyCompletedMsg(player);
|
||||
break;
|
||||
}
|
||||
}
|
||||
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 < 30)
|
||||
{
|
||||
qs.set(KILL_COUNT_VAR, killCount);
|
||||
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
|
||||
sendNpcLogList(killer);
|
||||
}
|
||||
else
|
||||
{
|
||||
qs.setCond(2, true);
|
||||
qs.unset(KILL_COUNT_VAR);
|
||||
giveItems(killer, SOE_PIO);
|
||||
showOnScreenMsg(killer, NpcStringId.USE_SCROLL_OF_ESCAPE_PIO_IN_YOUR_INVENTORY_NTALK_TO_PIO_TO_COMPLETE_THE_QUEST, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
}
|
||||
}
|
||||
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.ERADICATE_THE_FEAR_RATEL_2.getId(), true, qs.getInt(KILL_COUNT_VAR)));
|
||||
return holder;
|
||||
}
|
||||
return super.getNpcLogList(player);
|
||||
}
|
||||
}
|
@@ -0,0 +1,4 @@
|
||||
<html><body>Guard Kallesin:<br>
|
||||
So, what brings you to me? Ah, is it about the Secret Material?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11038_GrowlersTurnedViolent 33963-02.html">Confirm</Button>
|
||||
</body></html>
|
@@ -0,0 +1,5 @@
|
||||
<html><body>Guard Kallesin:<br>
|
||||
So, that's you they've sent from Gludio? I use this material to deal with the curse. Thank you!<br>
|
||||
It will be hard to pull this one off, so if you excuse me...<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11038_GrowlersTurnedViolent 33963-03.html">Do you need help?</Button>
|
||||
</body></html>
|
@@ -0,0 +1,4 @@
|
||||
<html><body>Guard Kallesin:<br>
|
||||
So, what brings you to me? Ah, is it about the Secret Material?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11038_GrowlersTurnedViolent teleport">Confirm</Button>
|
||||
</body></html>
|
@@ -0,0 +1,4 @@
|
||||
<html><body>Guard Kallesin:<br>
|
||||
So, what brings you to me? Ah, is it about the Secret Material?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11038_GrowlersTurnedViolent 33963-05.html">Confirm</Button>
|
||||
</body></html>
|
@@ -0,0 +1,4 @@
|
||||
<html><body>Guard Kallesin:<br>
|
||||
So, what brings you to me? Ah, is it about the Secret Material?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11039_CommunicationBreakdown 33963-02.html">Confirm</Button>
|
||||
</body></html>
|
@@ -0,0 +1,3 @@
|
||||
<html><body>Tarti:<br>
|
||||
<font color="LEVEL">Artey</font> cannot participate in this quest! The minimum level should be 20, and players who have not completed 2nd profession.<br>
|
||||
</body></html>
|
@@ -0,0 +1,173 @@
|
||||
/*
|
||||
* 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.Q11038_GrowlersTurnedViolent;
|
||||
|
||||
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
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.model.quest.State;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
||||
|
||||
import quests.Q11037_WhyAreTheRatelHere.Q11037_WhyAreTheRatelHere;
|
||||
import quests.Q11039_CommunicationBreakdown.Q11039_CommunicationBreakdown;
|
||||
|
||||
/**
|
||||
* Growlers Turned Violent (11038)
|
||||
* @URL https://l2wiki.com/Growlers_Turned_Violent
|
||||
* @author Dmitri
|
||||
*/
|
||||
public class Q11038_GrowlersTurnedViolent extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int PIO = 33963;
|
||||
private static final int AWESOME_SHRIKER = 24396;
|
||||
private static final int AWESOME_DEVELOPED_SHRIKER = 24397;
|
||||
private static final int AWESOME_STRONG_SHRIKER = 24398;
|
||||
// Items
|
||||
private static final int CORRUPTED_ENERGY = 80673;
|
||||
private static final ItemHolder SOE_PIO = new ItemHolder(80681, 1);
|
||||
// Location
|
||||
private static final Location TRAINING_GROUNDS_TELEPORT = new Location(-84963, 80967, -3144);
|
||||
|
||||
public Q11038_GrowlersTurnedViolent()
|
||||
{
|
||||
super(11038);
|
||||
addStartNpc(PIO);
|
||||
addTalkId(PIO);
|
||||
addKillId(AWESOME_SHRIKER, AWESOME_DEVELOPED_SHRIKER, AWESOME_STRONG_SHRIKER);
|
||||
registerQuestItems(SOE_PIO.getId(), CORRUPTED_ENERGY);
|
||||
addCondCompletedQuest(Q11037_WhyAreTheRatelHere.class.getSimpleName(), "33963-06.html");
|
||||
setQuestNameNpcStringId(NpcStringId.LV_40_76_GROWLERS_TURNED_VIOLENT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
|
||||
{
|
||||
String htmltext = null;
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
switch (event)
|
||||
{
|
||||
case "33963-03.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "33963-02.html":
|
||||
{
|
||||
qs.startQuest();
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "teleport":
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
player.teleToLocation(TRAINING_GROUNDS_TELEPORT);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "33963-05.html":
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
addExpAndSp(player, 76142825, 68528);
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
|
||||
// Initialize next quest.
|
||||
final Quest nextQuest = QuestManager.getInstance().getQuest(Q11039_CommunicationBreakdown.class.getSimpleName());
|
||||
if (nextQuest != null)
|
||||
{
|
||||
nextQuest.newQuestState(player);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, PlayerInstance player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
|
||||
switch (qs.getState())
|
||||
{
|
||||
case State.CREATED:
|
||||
{
|
||||
if (npc.getId() == PIO)
|
||||
{
|
||||
htmltext = "33963-01.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case State.STARTED:
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case PIO:
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
htmltext = "33963-02.html";
|
||||
}
|
||||
else if (qs.isCond(2))
|
||||
{
|
||||
htmltext = "33963-04.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case State.COMPLETED:
|
||||
{
|
||||
htmltext = getAlreadyCompletedMsg(player);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
|
||||
{
|
||||
final QuestState qs = getQuestState(killer, false);
|
||||
if ((qs != null) && qs.isCond(1))
|
||||
{
|
||||
if (giveItemRandomly(killer, CORRUPTED_ENERGY, 1, 15, 0.5, true))
|
||||
{
|
||||
qs.setCond(2, true);
|
||||
giveItems(killer, SOE_PIO);
|
||||
showOnScreenMsg(killer, NpcStringId.USE_SCROLL_OF_ESCAPE_PIO_IN_YOUR_INVENTORY_NTALK_TO_PIO_TO_COMPLETE_THE_QUEST, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
}
|
||||
}
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
}
|
@@ -0,0 +1,4 @@
|
||||
<html><body>Guard Kallesin:<br>
|
||||
So, what brings you to me? Ah, is it about the Secret Material?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11039_CommunicationBreakdown 33963-02.html">Confirm</Button>
|
||||
</body></html>
|
@@ -0,0 +1,5 @@
|
||||
<html><body>Guard Kallesin:<br>
|
||||
So, that's you they've sent from Gludio? I use this material to deal with the curse. Thank you!<br>
|
||||
It will be hard to pull this one off, so if you excuse me...<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11039_CommunicationBreakdown 33963-03.html">Do you need help?</Button>
|
||||
</body></html>
|
@@ -0,0 +1,4 @@
|
||||
<html><body>Guard Kallesin:<br>
|
||||
So, what brings you to me? Ah, is it about the Secret Material?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11039_CommunicationBreakdown teleport">Confirm</Button>
|
||||
</body></html>
|
@@ -0,0 +1,4 @@
|
||||
<html><body>Guard Kallesin:<br>
|
||||
So, what brings you to me? Ah, is it about the Secret Material?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11039_CommunicationBreakdown 33963-05.html">Confirm</Button>
|
||||
</body></html>
|
@@ -0,0 +1,4 @@
|
||||
<html><body>Guard Kallesin:<br>
|
||||
So, what brings you to me? Ah, is it about the Secret Material?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11040_AttackOfTheEnragedForest 33963-02.html">Confirm</Button>
|
||||
</body></html>
|
@@ -0,0 +1,3 @@
|
||||
<html><body>Tarti:<br>
|
||||
<font color="LEVEL">Artey</font> cannot participate in this quest! The minimum level should be 20, and players who have not completed 2nd profession.<br>
|
||||
</body></html>
|
@@ -0,0 +1,172 @@
|
||||
/*
|
||||
* 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.Q11039_CommunicationBreakdown;
|
||||
|
||||
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
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.model.quest.State;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
||||
|
||||
import quests.Q11038_GrowlersTurnedViolent.Q11038_GrowlersTurnedViolent;
|
||||
import quests.Q11040_AttackOfTheEnragedForest.Q11040_AttackOfTheEnragedForest;
|
||||
|
||||
/**
|
||||
* Communication Breakdown (11039)
|
||||
* @URL https://l2wiki.com/Communication_Breakdown
|
||||
* @author Dmitri
|
||||
*/
|
||||
public class Q11039_CommunicationBreakdown extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int PIO = 33963;
|
||||
private static final int FUSSY_VILA = 24399;
|
||||
private static final int FUSSY_ARBOR = 24400;
|
||||
// Items
|
||||
private static final int EMBEDDED_SHARD = 80674;
|
||||
private static final ItemHolder SOE_PIO = new ItemHolder(80681, 1);
|
||||
// Location
|
||||
private static final Location TRAINING_GROUNDS_TELEPORT = new Location(-87808, 87292, -3424);
|
||||
|
||||
public Q11039_CommunicationBreakdown()
|
||||
{
|
||||
super(11039);
|
||||
addStartNpc(PIO);
|
||||
addTalkId(PIO);
|
||||
addKillId(FUSSY_VILA, FUSSY_ARBOR);
|
||||
registerQuestItems(SOE_PIO.getId(), EMBEDDED_SHARD);
|
||||
addCondCompletedQuest(Q11038_GrowlersTurnedViolent.class.getSimpleName(), "33963-06.html");
|
||||
setQuestNameNpcStringId(NpcStringId.LV_40_76_COMMUNICATION_BREAKDOWN);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
|
||||
{
|
||||
String htmltext = null;
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
switch (event)
|
||||
{
|
||||
case "33963-03.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "33963-02.html":
|
||||
{
|
||||
qs.startQuest();
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "teleport":
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
player.teleToLocation(TRAINING_GROUNDS_TELEPORT);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "33963-05.html":
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
addExpAndSp(player, 174520303, 157068);
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
|
||||
// Initialize next quest.
|
||||
final Quest nextQuest = QuestManager.getInstance().getQuest(Q11040_AttackOfTheEnragedForest.class.getSimpleName());
|
||||
if (nextQuest != null)
|
||||
{
|
||||
nextQuest.newQuestState(player);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, PlayerInstance player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
|
||||
switch (qs.getState())
|
||||
{
|
||||
case State.CREATED:
|
||||
{
|
||||
if (npc.getId() == PIO)
|
||||
{
|
||||
htmltext = "33963-01.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case State.STARTED:
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case PIO:
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
htmltext = "33963-02.html";
|
||||
}
|
||||
else if (qs.isCond(2))
|
||||
{
|
||||
htmltext = "33963-04.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case State.COMPLETED:
|
||||
{
|
||||
htmltext = getAlreadyCompletedMsg(player);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
|
||||
{
|
||||
final QuestState qs = getQuestState(killer, false);
|
||||
if ((qs != null) && qs.isCond(1))
|
||||
{
|
||||
if (giveItemRandomly(killer, EMBEDDED_SHARD, 1, 15, 0.5, true))
|
||||
{
|
||||
qs.setCond(2, true);
|
||||
giveItems(killer, SOE_PIO);
|
||||
showOnScreenMsg(killer, NpcStringId.USE_SCROLL_OF_ESCAPE_PIO_IN_YOUR_INVENTORY_NTALK_TO_PIO_TO_COMPLETE_THE_QUEST, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
}
|
||||
}
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
}
|
@@ -0,0 +1,4 @@
|
||||
<html><body>Guard Kallesin:<br>
|
||||
So, what brings you to me? Ah, is it about the Secret Material?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11040_AttackOfTheEnragedForest 33963-02.html">Confirm</Button>
|
||||
</body></html>
|
@@ -0,0 +1,5 @@
|
||||
<html><body>Guard Kallesin:<br>
|
||||
So, that's you they've sent from Gludio? I use this material to deal with the curse. Thank you!<br>
|
||||
It will be hard to pull this one off, so if you excuse me...<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11040_AttackOfTheEnragedForest 33963-03.html">Do you need help?</Button>
|
||||
</body></html>
|
@@ -0,0 +1,4 @@
|
||||
<html><body>Guard Kallesin:<br>
|
||||
So, what brings you to me? Ah, is it about the Secret Material?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11040_AttackOfTheEnragedForest teleport">Confirm</Button>
|
||||
</body></html>
|
@@ -0,0 +1,4 @@
|
||||
<html><body>Guard Kallesin:<br>
|
||||
So, what brings you to me? Ah, is it about the Secret Material?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11040_AttackOfTheEnragedForest 33963-05.html">Confirm</Button>
|
||||
</body></html>
|
@@ -0,0 +1,3 @@
|
||||
<html><body>Tarti:<br>
|
||||
<font color="LEVEL">Artey</font> cannot participate in this quest! The minimum level should be 20, and players who have not completed 2nd profession.<br>
|
||||
</body></html>
|
@@ -0,0 +1,4 @@
|
||||
<html><body>Guard Kallesin:<br>
|
||||
So, what brings you to me? Ah, is it about the Secret Material?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11040_AttackOfTheEnragedForest 34505-02.html">Confirm</Button>
|
||||
</body></html>
|
@@ -0,0 +1,4 @@
|
||||
<html><body>Guard Kallesin:<br>
|
||||
So, what brings you to me? Ah, is it about the Secret Material?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q11040_AttackOfTheEnragedForest 34505-02.html">Confirm</Button>
|
||||
</body></html>
|
@@ -0,0 +1,197 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package quests.Q11040_AttackOfTheEnragedForest;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.QuestSound;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
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.model.quest.State;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
||||
|
||||
import quests.Q11039_CommunicationBreakdown.Q11039_CommunicationBreakdown;
|
||||
|
||||
/**
|
||||
* Attack of the Enraged Forest (11040)
|
||||
* @URL https://l2wiki.com/Attack_of_the_Enraged_Forest
|
||||
* @author Dmitri
|
||||
*/
|
||||
public class Q11040_AttackOfTheEnragedForest extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int PIO = 33963;
|
||||
private static final int TARTI = 34505;
|
||||
private static final int TINY_WHIRLWIND = 24401;
|
||||
private static final int GIANT_WHIRLWIND = 24402;
|
||||
// Items
|
||||
private static final ItemHolder SOE_TARTI = new ItemHolder(80677, 1);
|
||||
// Location
|
||||
private static final Location TRAINING_GROUNDS_TELEPORT = new Location(-91374, 92270, -3360);
|
||||
// Misc
|
||||
private static final String KILL_COUNT_VAR = "KillCount";
|
||||
|
||||
public Q11040_AttackOfTheEnragedForest()
|
||||
{
|
||||
super(11040);
|
||||
addStartNpc(PIO);
|
||||
addTalkId(PIO, TARTI);
|
||||
addKillId(TINY_WHIRLWIND, GIANT_WHIRLWIND);
|
||||
registerQuestItems(SOE_TARTI.getId());
|
||||
addCondCompletedQuest(Q11039_CommunicationBreakdown.class.getSimpleName(), "33963-06");
|
||||
setQuestNameNpcStringId(NpcStringId.LV_40_76_ATTACK_OF_THE_ENRAGED_FOREST);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
|
||||
{
|
||||
String htmltext = null;
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
switch (event)
|
||||
{
|
||||
case "33963-03.html":
|
||||
case "33963-05.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "33963-02.html":
|
||||
{
|
||||
qs.startQuest();
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "teleport":
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
player.teleToLocation(TRAINING_GROUNDS_TELEPORT);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "34505-02.html":
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
addExpAndSp(player, 834929477, 595042);
|
||||
giveAdena(player, 240000, true);
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, PlayerInstance player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
|
||||
switch (qs.getState())
|
||||
{
|
||||
case State.CREATED:
|
||||
{
|
||||
if (npc.getId() == PIO)
|
||||
{
|
||||
htmltext = "33963-01.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case State.STARTED:
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case PIO:
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
htmltext = "33963-02.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TARTI:
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
htmltext = "34505-01.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case State.COMPLETED:
|
||||
{
|
||||
htmltext = getAlreadyCompletedMsg(player);
|
||||
break;
|
||||
}
|
||||
}
|
||||
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 < 30)
|
||||
{
|
||||
qs.set(KILL_COUNT_VAR, killCount);
|
||||
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
|
||||
sendNpcLogList(killer);
|
||||
}
|
||||
else
|
||||
{
|
||||
qs.setCond(2, true);
|
||||
qs.unset(KILL_COUNT_VAR);
|
||||
giveItems(killer, SOE_TARTI);
|
||||
showOnScreenMsg(killer, NpcStringId.USE_SCROLL_OF_ESCAPE_TARTI_IN_YOUR_INVENTORY_NTALK_TO_TARTI_TO_COMPLETE_THE_QUEST, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
}
|
||||
}
|
||||
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.DEFEAT_THE_PACK_OF_WINDIMA_2.getId(), true, qs.getInt(KILL_COUNT_VAR)));
|
||||
return holder;
|
||||
}
|
||||
return super.getNpcLogList(player);
|
||||
}
|
||||
}
|
@@ -165,8 +165,17 @@ import quests.Q10840_TimeToRecover.Q10840_TimeToRecover;
|
||||
import quests.Q10843_AnomalyInTheEnchantedValley.Q10843_AnomalyInTheEnchantedValley;
|
||||
import quests.Q10851_ElvenBotany.Q10851_ElvenBotany;
|
||||
import quests.Q10856_SuperionAppears.Q10856_SuperionAppears;
|
||||
import quests.Q11025_PathOfDestinyProving.Q11025_PathOfDestinyProving;
|
||||
import quests.Q11031_TrainingBeginsNow.Q11031_TrainingBeginsNow;
|
||||
import quests.Q11032_CurseOfUndying.Q11032_CurseOfUndying;
|
||||
import quests.Q11033_AntidoteIngredients.Q11033_AntidoteIngredients;
|
||||
import quests.Q11034_ResurrectedOne.Q11034_ResurrectedOne;
|
||||
import quests.Q11035_DeathlyMischief.Q11035_DeathlyMischief;
|
||||
import quests.Q11036_ChangedSpirits.Q11036_ChangedSpirits;
|
||||
import quests.Q11037_WhyAreTheRatelHere.Q11037_WhyAreTheRatelHere;
|
||||
import quests.Q11038_GrowlersTurnedViolent.Q11038_GrowlersTurnedViolent;
|
||||
import quests.Q11039_CommunicationBreakdown.Q11039_CommunicationBreakdown;
|
||||
import quests.Q11040_AttackOfTheEnragedForest.Q11040_AttackOfTheEnragedForest;
|
||||
import quests.custom.Q00529_RegularBarrierMaintenance.Q00529_RegularBarrierMaintenance;
|
||||
import quests.custom.Q00560_HowToOvercomeFear.Q00560_HowToOvercomeFear;
|
||||
import quests.custom.Q00589_ASecretChange.Q00589_ASecretChange;
|
||||
@@ -480,14 +489,17 @@ public class QuestMasterHandler
|
||||
Q10899_VeteranAdventurer.class, // TODO: Not done.
|
||||
Q10900_PathToStrength.class, // TODO: Not done.
|
||||
Q10901_AModelAdventurer.class, // TODO: Not done.
|
||||
Q11025_PathOfDestinyProving.class,
|
||||
Q11031_TrainingBeginsNow.class,
|
||||
Q11032_CurseOfUndying.class,
|
||||
Q11034_ResurrectedOne.class, // TODO: Not done.
|
||||
Q11035_DeathlyMischief.class, // TODO: Not done.
|
||||
Q11037_WhyAreTheRatelHere.class, // TODO: Not done.
|
||||
Q11038_GrowlersTurnedViolent.class, // TODO: Not done.
|
||||
Q11039_CommunicationBreakdown.class, // TODO: Not done.
|
||||
Q11040_AttackOfTheEnragedForest.class, // TODO: Not done.
|
||||
Q11033_AntidoteIngredients.class,
|
||||
Q11034_ResurrectedOne.class,
|
||||
Q11035_DeathlyMischief.class,
|
||||
Q11036_ChangedSpirits.class,
|
||||
Q11037_WhyAreTheRatelHere.class,
|
||||
Q11038_GrowlersTurnedViolent.class,
|
||||
Q11039_CommunicationBreakdown.class,
|
||||
Q11040_AttackOfTheEnragedForest.class,
|
||||
Q11042_SuspiciousMovements.class, // TODO: Not done.
|
||||
Q11043_SomeonesTrace.class, // TODO: Not done.
|
||||
Q11044_KetraOrcs.class, // TODO: Not done.
|
||||
|
@@ -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 Q11034_ResurrectedOne extends Quest
|
||||
{
|
||||
private static final int START_NPC = 33177;
|
||||
|
||||
public Q11034_ResurrectedOne()
|
||||
{
|
||||
super(11034);
|
||||
addStartNpc(START_NPC);
|
||||
addTalkId(START_NPC);
|
||||
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
|
||||
}
|
||||
}
|
@@ -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 Q11035_DeathlyMischief extends Quest
|
||||
{
|
||||
private static final int START_NPC = 33509;
|
||||
|
||||
public Q11035_DeathlyMischief()
|
||||
{
|
||||
super(11035);
|
||||
addStartNpc(START_NPC);
|
||||
addTalkId(START_NPC);
|
||||
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
|
||||
}
|
||||
}
|
@@ -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 Q11037_WhyAreTheRatelHere extends Quest
|
||||
{
|
||||
private static final int START_NPC = 33963;
|
||||
|
||||
public Q11037_WhyAreTheRatelHere()
|
||||
{
|
||||
super(11037);
|
||||
addStartNpc(START_NPC);
|
||||
addTalkId(START_NPC);
|
||||
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
|
||||
}
|
||||
}
|
@@ -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 Q11038_GrowlersTurnedViolent extends Quest
|
||||
{
|
||||
private static final int START_NPC = 33963;
|
||||
|
||||
public Q11038_GrowlersTurnedViolent()
|
||||
{
|
||||
super(11038);
|
||||
addStartNpc(START_NPC);
|
||||
addTalkId(START_NPC);
|
||||
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
|
||||
}
|
||||
}
|
@@ -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 Q11039_CommunicationBreakdown extends Quest
|
||||
{
|
||||
private static final int START_NPC = 33963;
|
||||
|
||||
public Q11039_CommunicationBreakdown()
|
||||
{
|
||||
super(11039);
|
||||
addStartNpc(START_NPC);
|
||||
addTalkId(START_NPC);
|
||||
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
|
||||
}
|
||||
}
|
@@ -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 Q11040_AttackOfTheEnragedForest extends Quest
|
||||
{
|
||||
private static final int START_NPC = 33963;
|
||||
|
||||
public Q11040_AttackOfTheEnragedForest()
|
||||
{
|
||||
super(11040);
|
||||
addStartNpc(START_NPC);
|
||||
addTalkId(START_NPC);
|
||||
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
|
||||
}
|
||||
}
|
@@ -722,6 +722,7 @@
|
||||
<set name="is_depositable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_questitem" val="true" />
|
||||
</item>
|
||||
<item id="80673" name="Corrupted Energy" type="EtcItem">
|
||||
<!-- It is what turned the relatively gentle Growlers into violent beasts. You can feel the miasma of the corrupted Wind Spirit Realm. Gather and take them to Researcher Pio. -->
|
||||
@@ -733,6 +734,7 @@
|
||||
<set name="is_depositable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_questitem" val="true" />
|
||||
</item>
|
||||
<item id="80674" name="Embedded Shard" type="EtcItem">
|
||||
<!-- Shards embedded in Leaf and Arbor's bodies. There are lingering traces of Dark Arts. It might be the reason why Leaf and Arbor have been unintelligible. Gather and take them to Researcher Pio. -->
|
||||
@@ -744,6 +746,7 @@
|
||||
<set name="is_depositable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_questitem" val="true" />
|
||||
</item>
|
||||
<item id="80675" name="Orc Empowering Potion" type="EtcItem">
|
||||
<!-- A potion that made the Turek Orcs become powerful. This could be the cause behind the Turek Orcs. hitherto one of the lesser orc tribes. suddenly becoming so strong. Gather and take them to Reclous the Hermit. -->
|
||||
@@ -810,6 +813,10 @@
|
||||
<set name="is_depositable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<skills>
|
||||
<skill id="39482" level="1" /> <!-- Scroll of Escape: Kallesin -->
|
||||
</skills>
|
||||
</item>
|
||||
<item id="80680" name="Scroll of Escape: Zenath" type="EtcItem">
|
||||
<!-- Teleports you to Zenath. -->
|
||||
@@ -822,6 +829,10 @@
|
||||
<set name="is_depositable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<skills>
|
||||
<skill id="39483" level="1" /> <!-- Scroll of Escape: Zenath -->
|
||||
</skills>
|
||||
</item>
|
||||
<item id="80681" name="Scroll of Escape: Pio" type="EtcItem">
|
||||
<!-- Teleports you to Pio. -->
|
||||
@@ -834,6 +845,10 @@
|
||||
<set name="is_depositable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<skills>
|
||||
<skill id="39484" level="1" /> <!-- Scroll of Escape: Pio -->
|
||||
</skills>
|
||||
</item>
|
||||
<item id="80682" name="Scroll of Escape: Reclous" type="EtcItem">
|
||||
<!-- Teleports you to Reclous. -->
|
||||
|
@@ -956,16 +956,70 @@
|
||||
<operateType>A1</operateType>
|
||||
<isMagic>4</isMagic>
|
||||
<hitTime>200</hitTime>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<itemConsumeId>80679</itemConsumeId> <!-- Scroll of Escape: Kallesin -->
|
||||
<itemConsumeCount>1</itemConsumeCount>
|
||||
<conditions>
|
||||
<condition name="OpAlignment">
|
||||
<affectType>CASTER</affectType>
|
||||
<alignment>LAWFUL</alignment>
|
||||
</condition>
|
||||
<condition name="OpCanEscape" />
|
||||
</conditions>
|
||||
<effects>
|
||||
<effect name="Teleport">
|
||||
<x>-41314</x>
|
||||
<y>122982</y>
|
||||
<z>-2904</z>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="39483" toLevel="1" name="Scroll of Escape: Zenath">
|
||||
<operateType>A1</operateType>
|
||||
<isMagic>4</isMagic>
|
||||
<hitTime>200</hitTime>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<itemConsumeId>80680</itemConsumeId> <!-- Scroll of Escape: Zenath -->
|
||||
<itemConsumeCount>1</itemConsumeCount>
|
||||
<conditions>
|
||||
<condition name="OpAlignment">
|
||||
<affectType>CASTER</affectType>
|
||||
<alignment>LAWFUL</alignment>
|
||||
</condition>
|
||||
<condition name="OpCanEscape" />
|
||||
</conditions>
|
||||
<effects>
|
||||
<effect name="Teleport">
|
||||
<x>-46159</x>
|
||||
<y>109438</y>
|
||||
<z>-3808</z>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="39484" toLevel="1" name="Scroll of Escape: Pio">
|
||||
<operateType>A1</operateType>
|
||||
<isMagic>4</isMagic>
|
||||
<hitTime>200</hitTime>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<itemConsumeId>80681</itemConsumeId> <!-- Scroll of Escape: Pio -->
|
||||
<itemConsumeCount>1</itemConsumeCount>
|
||||
<conditions>
|
||||
<condition name="OpAlignment">
|
||||
<affectType>CASTER</affectType>
|
||||
<alignment>LAWFUL</alignment>
|
||||
</condition>
|
||||
<condition name="OpCanEscape" />
|
||||
</conditions>
|
||||
<effects>
|
||||
<effect name="Teleport">
|
||||
<x>-93474</x>
|
||||
<y>89730</y>
|
||||
<z>-3208</z>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="39485" toLevel="1" name="Scroll of Escape: Reclous">
|
||||
<operateType>A1</operateType>
|
||||
|
Reference in New Issue
Block a user