Addition of quests 11025 and 11033 to 11040.

Contributed by Dmitri.
This commit is contained in:
MobiusDevelopment
2019-11-11 19:29:26 +00:00
parent c1762baef0
commit b5fde8b085
95 changed files with 2318 additions and 237 deletions

View File

@@ -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

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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);
}
}
}

View File

@@ -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())
{

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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);
}
}

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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);
}
}

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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);
}
}

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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);
}
}

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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);
}
}

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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);
}
}

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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);
}
}

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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);
}
}

View File

@@ -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.

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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. -->

View File

@@ -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>