Dungeon of Abyss AIs.

Contributed by quangnguyen.
This commit is contained in:
MobiusDev 2018-02-25 11:48:10 +00:00
parent 7dc26ac585
commit 5d64cdc505
51 changed files with 1416 additions and 3 deletions

View File

@ -0,0 +1,9 @@
<html><head><body>
Magrit:<br>
The Death Eater is the most powerful and dangerous creature in this prison.<br1>
If you have the <font color="LEVEL">Key from the Central Part of the Western Wing of the Dungeon of Abyss</font>, You can get to the Death Eater.<br1>
However, remember: you will be alone with him. No one will come to your rescue. In addition, you will only have <font color="LEVEL">30 minutes</font> to destroy it.<br>
If you decide to retreat or fail and want to try your luck some other time, you will need a new key.<br>
And more: if <font color="LEVEL">the quantity and weight of items in your inventory will exceed 80%</font>, You can not get a reward, so take care of an empty seat before the battle begins.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Magrit 3">Go to the Condemned of Abyss Prison</Button>
</body></html>

View File

@ -0,0 +1,9 @@
<html><head><body>
Magrit:<br>
An incident occurred in this terrifying prison and put the whole Kingdom of Aden at risk..<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Magrit 1">Go to the West Wing of the Dungeon of Abyss</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Magrit 2">Go to the 2nd entrance to the West Wing of the Dungeon of Abyss</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 1">Go to the Condemned of Abyss Prison</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Magrit 4">Return to Aden</Button>
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
</body></html>

View File

@ -0,0 +1,9 @@
<html><head><body>
Ingrit:<br>
The Death Eater is the most powerful and dangerous creature in this prison.<br1>
If you have the <font color="LEVEL">Key from the Central Part of the Western Wing of the Dungeon of Abyss</font>, You can get to the Death Eater.<br1>
However, remember: you will be alone with him. No one will come to your rescue. In addition, you will only have <font color="LEVEL">30 minutes</font> to destroy it.<br>
If you decide to retreat or fail and want to try your luck some other time, you will need a new key.<br>
And more: if <font color="LEVEL">the quantity and weight of items in your inventory will exceed 80%</font>, You can not get a reward, so take care of an empty seat before the battle begins.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Ingrit 3">Go to the Condemned of Abyss Prison</Button>
</body></html>

View File

@ -0,0 +1,9 @@
<html><head><body>
Ingrit:<br>
An incident occurred in this terrifying prison and put the whole Kingdom of Aden at risk..<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Ingrit 1">Go to the West Wing of the Dungeon of Abyss</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Ingrit 2">Go to the 1nd entrance to the West Wing of the Dungeon of Abyss</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 1">Go to the Condemned of Abyss Prison</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Ingrit 4">Return to Aden</Button>
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
</body></html>

View File

@ -0,0 +1,9 @@
<html><head><body>
Iris:<br>
The Death Eater is the most powerful and dangerous creature in this prison.<br1>
If you have the <font color="LEVEL">Key from the Central Part of the Western Wing of the Dungeon of Abyss</font>, You can get to the Death Eater.<br1>
However, remember: you will be alone with him. No one will come to your rescue. In addition, you will only have <font color="LEVEL">30 minutes</font> to destroy it.<br>
If you decide to retreat or fail and want to try your luck some other time, you will need a new key.<br>
And more: if <font color="LEVEL">the quantity and weight of items in your inventory will exceed 80%</font>, You can not get a reward, so take care of an empty seat before the battle begins.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Iris 3">Go to the Condemned of Abyss Prison</Button>
</body></html>

View File

@ -0,0 +1,9 @@
<html><head><body>
Iris:<br>
An incident occurred in this terrifying prison and put the whole Kingdom of Aden at risk..<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Iris 1">Go to the East Wing of the Dungeon of Abyss</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Iris 2">Go to the 2nd entrance to the East Wing of the Dungeon of Abyss</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 1">Go to the Condemned of Abyss Prison</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Iris 4">Return to Aden</Button>
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
</body></html>

View File

@ -0,0 +1,9 @@
<html><head><body>
Rosammy:<br>
The Death Eater is the most powerful and dangerous creature in this prison.<br1>
If you have the <font color="LEVEL">Key from the Central Part of the Western Wing of the Dungeon of Abyss</font>, You can get to the Death Eater.<br1>
However, remember: you will be alone with him. No one will come to your rescue. In addition, you will only have <font color="LEVEL">30 minutes</font> to destroy it.<br>
If you decide to retreat or fail and want to try your luck some other time, you will need a new key.<br>
And more: if <font color="LEVEL">the quantity and weight of items in your inventory will exceed 80%</font>, You can not get a reward, so take care of an empty seat before the battle begins.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Rosammy 3">Go to the Condemned of Abyss Prison</Button>
</body></html>

View File

@ -0,0 +1,9 @@
<html><head><body>
Rosammy:<br>
An incident occurred in this terrifying prison and put the whole Kingdom of Aden at risk..<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Rosammy 1">Go to the East Wing of the Dungeon of Abyss</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Rosammy 2">Go to the 1nd entrance to the East Wing of the Dungeon of Abyss</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 1">Go to the Condemned of Abyss Prison</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Rosammy 4">Return to Aden</Button>
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
</body></html>

View File

@ -0,0 +1,109 @@
/*
* 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 ai.areas.DungeonOfAbyss.SoulTracker;
import java.util.HashMap;
import java.util.Map;
import com.l2jmobius.gameserver.model.Location;
import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.quest.QuestState;
import ai.AbstractNpcAI;
/**
* @author QuangNguyen
*/
public class Ingrit extends AbstractNpcAI
{
// NPC
private static final int SOUL_TRACKER_INRGIT = 31775;
// Item
private static final int KEY_OF_WEST_WING = 90010;
// Locations
private static final Map<String, Location> LOCATIONS = new HashMap<>();
static
{
LOCATIONS.put("1", new Location(-119533, -179641, -6751)); // Join Room from Ingrit
LOCATIONS.put("2", new Location(-120325, -182444, -6752)); // Move to West Wing 1nd
LOCATIONS.put("3", new Location(-116975, -178699, -6751)); // Go to the Condemned of Abyss Prison
LOCATIONS.put("4", new Location(146945, 26764, -2200)); // Return to Aden
}
private Ingrit()
{
addStartNpc(SOUL_TRACKER_INRGIT);
addTalkId(SOUL_TRACKER_INRGIT);
addFirstTalkId(SOUL_TRACKER_INRGIT);
}
@Override
public String onFirstTalk(L2Npc npc, L2PcInstance player)
{
return npc.getId() + ".htm";
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
if (npc.getId() == SOUL_TRACKER_INRGIT)
{
QuestState qs = player.getQuestState("Q00933_ExploringTheWestWingOfTheDungeonOfAbyss");
switch (event)
{
case "1":
{
if ((qs != null) && qs.isStarted())
{
player.teleToLocation(LOCATIONS.get(event), false); // Join Room from Ingrit
}
else
{
return "no_enter.htm";
}
break;
}
case "2":
{
player.teleToLocation(LOCATIONS.get(event), false); // Move to West Wing 1nd
break;
}
case "3":
{
if (!hasQuestItems(player, KEY_OF_WEST_WING))
{
return "no_key.htm";
}
player.teleToLocation(LOCATIONS.get(event), false); // Go to the Condemned of Abyss Prison
break;
}
case "4":
{
player.teleToLocation(LOCATIONS.get(event), false); // Return to Aden
break;
}
}
}
return super.onAdvEvent(event, npc, player);
}
public static void main(String[] args)
{
new Ingrit();
}
}

View File

@ -0,0 +1,109 @@
/*
* 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 ai.areas.DungeonOfAbyss.SoulTracker;
import java.util.HashMap;
import java.util.Map;
import com.l2jmobius.gameserver.model.Location;
import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.quest.QuestState;
import ai.AbstractNpcAI;
/**
* @author QuangNguyen
*/
public class Iris extends AbstractNpcAI
{
// NPC
private static final int SOUL_TRACKER_IRIS = 31776;
// Item
private static final int KEY_OF_EAST_WING = 90011;
// Locations
private static final Map<String, Location> LOCATIONS = new HashMap<>();
static
{
LOCATIONS.put("1", new Location(-110038, -180560, -6754)); // Join Room from Iris
LOCATIONS.put("2", new Location(-109234, -177737, -6751)); // Move to East Wing 2nd
LOCATIONS.put("3", new Location(-112648, -181517, -6751)); // Go to the Condemned of Abyss Prison
LOCATIONS.put("4", new Location(146945, 26764, -2200)); // Return to Aden
}
private Iris()
{
addStartNpc(SOUL_TRACKER_IRIS);
addTalkId(SOUL_TRACKER_IRIS);
addFirstTalkId(SOUL_TRACKER_IRIS);
}
@Override
public String onFirstTalk(L2Npc npc, L2PcInstance player)
{
return npc.getId() + ".htm";
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
if (npc.getId() == SOUL_TRACKER_IRIS)
{
QuestState qs = player.getQuestState("Q00935_ExploringTheEastWingOfTheDungeonOfAbyss");
switch (event)
{
case "1":
{
if ((qs != null) && qs.isStarted())
{
player.teleToLocation(LOCATIONS.get(event), false); // Join Room form Iris
}
else
{
return "no_enter.htm";
}
break;
}
case "2":
{
player.teleToLocation(LOCATIONS.get(event), false); // Move to East Wing 2nd
break;
}
case "3":
{
if (!hasQuestItems(player, KEY_OF_EAST_WING))
{
return "no_key.htm";
}
player.teleToLocation(LOCATIONS.get(event), false); // Go to the Condemned of Abyss Prison
break;
}
case "4":
{
player.teleToLocation(LOCATIONS.get(event), false); // Return to Aden
break;
}
}
}
return super.onAdvEvent(event, npc, player);
}
public static void main(String[] args)
{
new Iris();
}
}

View File

@ -0,0 +1,109 @@
/*
* 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 ai.areas.DungeonOfAbyss.SoulTracker;
import java.util.HashMap;
import java.util.Map;
import com.l2jmobius.gameserver.model.Location;
import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.quest.QuestState;
import ai.AbstractNpcAI;
/**
* @author QuangNguyen
*/
public class Magrit extends AbstractNpcAI
{
// NPC
private static final int SOUL_TRACKER_MARGIT = 31774;
// Item
private static final int KEY_OF_WEST_WING = 90010;
// Locations
private static final Map<String, Location> LOCATIONS = new HashMap<>();
static
{
LOCATIONS.put("1", new Location(-119440, -182464, -6752)); // Join Room from Magrit
LOCATIONS.put("2", new Location(-120394, -179651, -6751)); // Move to West Wing 2nd
LOCATIONS.put("3", new Location(-116963, -181492, -6575)); // Go to the Condemned of Abyss Prison
LOCATIONS.put("4", new Location(146945, 26764, -2200)); // Return to Aden
}
private Magrit()
{
addStartNpc(SOUL_TRACKER_MARGIT);
addTalkId(SOUL_TRACKER_MARGIT);
addFirstTalkId(SOUL_TRACKER_MARGIT);
}
@Override
public String onFirstTalk(L2Npc npc, L2PcInstance player)
{
return npc.getId() + ".htm";
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
if (npc.getId() == SOUL_TRACKER_MARGIT)
{
QuestState qs = player.getQuestState("Q00933_ExploringTheWestWingOfTheDungeonOfAbyss");
switch (event)
{
case "1":
{
if ((qs != null) && qs.isStarted())
{
player.teleToLocation(LOCATIONS.get(event), false); // Join Room from Magrit
}
else
{
return "no_enter.htm";
}
break;
}
case "2":
{
player.teleToLocation(LOCATIONS.get(event), false); // Move to West Wing 2nd
break;
}
case "3":
{
if (!hasQuestItems(player, KEY_OF_WEST_WING))
{
return "no_key.htm";
}
player.teleToLocation(LOCATIONS.get(event), false); // Go to the Condemned of Abyss Prison
break;
}
case "4":
{
player.teleToLocation(LOCATIONS.get(event), false); // Return to Aden
break;
}
}
}
return super.onAdvEvent(event, npc, player);
}
public static void main(String[] args)
{
new Magrit();
}
}

View File

@ -0,0 +1,109 @@
/*
* 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 ai.areas.DungeonOfAbyss.SoulTracker;
import java.util.HashMap;
import java.util.Map;
import com.l2jmobius.gameserver.model.Location;
import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.quest.QuestState;
import ai.AbstractNpcAI;
/**
* @author QuangNguyen
*/
public class Rosammy extends AbstractNpcAI
{
// NPC
private static final int SOUL_TRACKER_ROSAMMY = 31777;
// Item
private static final int KEY_OF_EAST_WING = 90011;
// Locations
private static final Map<String, Location> LOCATIONS = new HashMap<>();
static
{
LOCATIONS.put("1", new Location(-110067, -177733, -6751)); // Join Room from Rosammy
LOCATIONS.put("2", new Location(-120318, -179626, -6752)); // Move to East Wing 1nd
LOCATIONS.put("3", new Location(-112632, -178671, -6751)); // Go to the Condemned of Abyss Prison
LOCATIONS.put("4", new Location(146945, 26764, -2200)); // Return to Aden
}
private Rosammy()
{
addStartNpc(SOUL_TRACKER_ROSAMMY);
addTalkId(SOUL_TRACKER_ROSAMMY);
addFirstTalkId(SOUL_TRACKER_ROSAMMY);
}
@Override
public String onFirstTalk(L2Npc npc, L2PcInstance player)
{
return npc.getId() + ".htm";
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
if (npc.getId() == SOUL_TRACKER_ROSAMMY)
{
QuestState qs = player.getQuestState("Q00935_ExploringTheEastWingOfTheDungeonOfAbyss");
switch (event)
{
case "1":
{
if ((qs != null) && qs.isStarted())
{
player.teleToLocation(LOCATIONS.get(event), false); // Join Room Rosammy
}
else
{
return "no_enter.htm";
}
break;
}
case "2":
{
player.teleToLocation(LOCATIONS.get(event), false); // Move to East Wing 1nd
break;
}
case "3":
{
if (!hasQuestItems(player, KEY_OF_EAST_WING))
{
return "no_key.htm";
}
player.teleToLocation(LOCATIONS.get(event), false); // Go to the Condemned of Abyss Prison
break;
}
case "4":
{
player.teleToLocation(LOCATIONS.get(event), false); // Return to Aden
break;
}
}
}
return super.onAdvEvent(event, npc, player);
}
public static void main(String[] args)
{
new Rosammy();
}
}

View File

@ -0,0 +1,4 @@
<html><head><body>
Magrit:<br>
You apparently forgot to take the quest, please take the quest.<br>
</body></html>

View File

@ -0,0 +1,4 @@
<html><head><body>
Magrit:<br>
If you do not have the Key, you can not move to the Condemned of Abyss Prison.
</body></html>

View File

@ -0,0 +1,5 @@
<html><head><body>
Tores:<br>
It seems to me that you are not strong enough to go on a mission to the Dungeon of Abyss.<br>
(Western Wing of the Dungeon of Abyss for characters 40-44 level.)
</body></html>

View File

@ -0,0 +1,5 @@
<html><head><body>
Tores:<br>
It seems to me that you are not strong enough to go on a mission to the Dungeon of Abyss.<br>
(Eastern Wing side of the Dungeon of Abyss for characters 45-49 level.)
</body></html>

View File

@ -0,0 +1,7 @@
<html><head><body>
Tores:<br>
Have you heard of the Dungeon of Abyss? Especially evil and dangerous monsters are imprisoned there.<br>
But someone has recently removed the seal from its gates. If we do nothing… No, only a thought of it scares me. I need your help.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Tores 1">Go to the West Wing of the Dungeon of Abyss (Level 40-44)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Tores 2">Go to the East Wing of the Dungeon of Abyss (Level 45-49)</Button>
</body></html>

View File

@ -0,0 +1,98 @@
/*
* 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 ai.areas.DungeonOfAbyss.Tores;
import java.util.HashMap;
import java.util.Map;
import com.l2jmobius.gameserver.model.Location;
import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import ai.AbstractNpcAI;
/**
* @author QuangNguyen
*/
public class Tores extends AbstractNpcAI
{
// NPC
private static final int TORES = 31778;
// Locations
private static final Map<String, Location> LOCATIONS = new HashMap<>();
static
{
// move from Tores
LOCATIONS.put("1", new Location(-120325, -182444, -6752)); // Move to Magrit
LOCATIONS.put("2", new Location(-109202, -180546, -6751)); // Move to Iris
}
private Tores()
{
addStartNpc(TORES);
addTalkId(TORES);
addFirstTalkId(TORES);
}
@Override
public String onFirstTalk(L2Npc npc, L2PcInstance player)
{
return "31778.htm";
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
switch (event)
{
case "1":
{
final Location loc = LOCATIONS.get(event);
if ((player.getLevel() > 39) && (player.getLevel() < 45))
{
player.teleToLocation(loc, true);
}
else
{
return "31778-no_level.htm";
}
break;
}
case "2":
{
final Location loc = LOCATIONS.get(event);
if ((player.getLevel() > 44) && (player.getLevel() < 50))
{
player.teleToLocation(loc, true);
}
else
{
return "31778-no_level01.htm";
}
break;
}
}
return super.onAdvEvent(event, npc, player);
}
public static void main(String[] args)
{
new Tores();
}
}

View File

@ -2,8 +2,6 @@
911 Request from the Red Libra Guild - Intermediate
912 Request from the Red Libra Guild - Advanced
913 Request from the Red Libra Guild - Super Advanced
933 Exploring the West Wing of the Dungeon of Abyss
935 Exploring the East Wing of the Dungeon of Abyss
NEED TO BE REMADE
Q00071_SagaOfEvasTemplar

View File

@ -0,0 +1,5 @@
<html><body>
Magrit:<br>
I'll tell you the story of this place<br>
<button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00933_ExploringTheWestWingOfTheDungeonOfAbyss 31774-02.htm">Listen</button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>
Magrit:<br>
You do not meet the requirements of the quest
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>
Magrit:<br>
In this area dreadful monsters live ...<br>
<button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00933_ExploringTheWestWingOfTheDungeonOfAbyss 31774-03.htm">Listen further</button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>
Magrit:<br>
If you help us remove the threat, we will reward you ...<br>
<button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00933_ExploringTheWestWingOfTheDungeonOfAbyss 31774-04.htm">Agree</button>
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>
You are commissioned to study the Abyssal Prison. The aim of the hunt is the Wandering Prisoner, the Wandering Spirit of Prison, the Wandering Ghost of Prison, the Wandering Prickery of Prison. Need to receive a Shard of Evil Shard of Evil - 50 pcs.
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>
Magrit:<br>
Did you manage to destroy the inhabitants?<br>
<button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00933_ExploringTheWestWingOfTheDungeonOfAbyss end.htm">Yes, I brought evidence</button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>
Ingrit:<br>
I'll tell you the story of this place<br>
<button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00933_ExploringTheWestWingOfTheDungeonOfAbyss 31775-02.htm">Listen!</button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>
Ingrit:<br>
You do not meet the requirements of the quest
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>
Ingrit:<br>
In this area dreadful monsters live ...<br>
<button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00933_ExploringTheWestWingOfTheDungeonOfAbyss 31775-03.htm">Listen further</button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>
Ingrit:<br>
If you help us remove the threat, we will reward you ...<br>
<button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00933_ExploringTheWestWingOfTheDungeonOfAbyss 31775-04.htm">Agree</button>
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>
You are commissioned to study the Abyssal Prison. The aim of the hunt is the Wandering Prisoner, the Wandering Spirit of Prison, the Wandering Ghost of Prison, the Wandering Prickery of Prison. Need to receive a Shard of Evil Shard of Evil - 50 pcs.
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>
Ingrit:<br>
Did you manage to destroy the inhabitants?<br>
<button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00933_ExploringTheWestWingOfTheDungeonOfAbyss end.htm">Yes, I brought evidence</button>
</body></html>

View File

@ -0,0 +1,226 @@
/*
* 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.Q00933_ExploringTheWestWingOfTheDungeonOfAbyss;
import com.l2jmobius.gameserver.enums.QuestType;
import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.holders.ItemHolder;
import com.l2jmobius.gameserver.model.quest.Quest;
import com.l2jmobius.gameserver.model.quest.QuestState;
import com.l2jmobius.gameserver.model.quest.State;
/**
* @author QuangNguyen
*/
public class Q00933_ExploringTheWestWingOfTheDungeonOfAbyss extends Quest
{
// NPCs
private static final int MAGRIT = 31774;
private static final int INGRIT = 31775;
// Monsters
public final int MERTT = 21638;
public final int DUHT = 21639;
public final int PRIZT = 21640;
public final int KOVART = 21641;
// Items
public final ItemHolder OSKZLA = new ItemHolder(90008, 1);
public final ItemHolder POD = new ItemHolder(90136, 1);
public Q00933_ExploringTheWestWingOfTheDungeonOfAbyss()
{
super(933);
addStartNpc(MAGRIT, INGRIT);
addTalkId(MAGRIT, INGRIT);
addKillId(MERTT, DUHT, PRIZT, KOVART);
registerQuestItems(OSKZLA.getId());
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return null;
}
String htmltext = null;
switch (event)
{
case "31774-01.htm":
case "31774-02.htm":
case "31774-03.htm":
case "31775-01.htm":
case "31775-02.htm":
case "31775-03.htm":
{
htmltext = event;
break;
}
case "31774-04.htm":
{
if (player.getLevel() >= 40)
{
qs.startQuest();
htmltext = event;
}
break;
}
case "31775-04.htm":
{
if (player.getLevel() >= 40)
{
qs.startQuest();
htmltext = event;
}
break;
}
case "end.htm":
{
player.addExpAndSp(250000, 7700);
rewardItems(player, POD);
qs.exitQuest(QuestType.DAILY, true);
break;
}
}
return htmltext;
}
@Override
public String onTalk(L2Npc npc, L2PcInstance talker)
{
final QuestState qs = getQuestState(talker, true);
String htmltext = getNoQuestMsg(talker);
switch (qs.getState())
{
case State.CREATED:
{
htmltext = (talker.getLevel() < 40) ? "nolvl.htm" : "31774-01.htm";
break;
}
case State.STARTED:
{
if (npc.getId() == MAGRIT)
{
switch (qs.getCond())
{
case 0:
{
if ((qs.getPlayer().getLevel() >= 40) && (qs.getPlayer().getLevel() <= 46))
{
htmltext = "31774-01.htm";
}
else
{
htmltext = "31774-01a.htm";
}
break;
}
case 1:
{
htmltext = "31774-04.htm";
break;
}
case 2:
{
htmltext = "31774-05.htm";
break;
}
}
break;
}
else if (npc.getId() == INGRIT)
{
switch (qs.getCond())
{
case 0:
{
if ((qs.getPlayer().getLevel() >= 40) && (qs.getPlayer().getLevel() <= 46))
{
htmltext = "31775-01.htm";
qs.startQuest();
}
else
{
htmltext = "31775-01a.htm";
}
break;
}
case 1:
{
htmltext = "31775-04.htm";
break;
}
case 2:
{
htmltext = "31775-05.htm";
break;
}
}
}
break;
}
case State.COMPLETED:
{
if (qs.isNowAvailable())
{
qs.setState(State.CREATED);
if ((npc.getId() == MAGRIT) && (qs.getPlayer().getLevel() < 40))
{
htmltext = "31774-01.htm";
}
else if ((npc.getId() == INGRIT) && (qs.getPlayer().getLevel() < 40))
{
htmltext = "31775-01.htm";
}
else
{
htmltext = "nolvl.htm";
}
}
else
{
htmltext = getAlreadyCompletedMsg(talker);
}
break;
}
}
return htmltext;
}
@Override
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
{
final QuestState qs = getQuestState(killer, false);
if (qs.getCond() == 1)
{
if (getQuestItemsCount(killer, OSKZLA.getId()) < 50)
{
giveItems(killer, OSKZLA);
}
if (getQuestItemsCount(killer, OSKZLA.getId()) >= 50)
{
qs.setCond(2);
}
}
return null;
}
}

View File

@ -0,0 +1,3 @@
<html><body>
Thanks for the help, here's the reward !!!
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>
Magrit:<br>
(This quest is only available to level 40-46 characters.)
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>
Iris:<br>
I'll tell you the story of this place<br>
<button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00935_ExploringTheEastWingOfTheDungeonOfAbyss 31776-02.htm">Listen</button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>
Iris:<br>
You do not meet the requirements of the quest
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>
Iris:<br>
In this area dreadful monsters live ...<br>
<button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00935_ExploringTheEastWingOfTheDungeonOfAbyss 31776-03.htm">Listen further</button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>
Iris:<br>
If you help us remove the threat, we will reward you ...<br>
<button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00935_ExploringTheEastWingOfTheDungeonOfAbyss 31776-04.htm">Agree</button>
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>
You are commissioned to study the Abyssal Prison. The aim of the hunt is the Wandering Prisoner, the Wandering Spirit of Prison, the Wandering Ghost of Prison, the Wandering Prickery of Prison. Need to receive a Shard of Evil Shard of Evil - 50 pcs.
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>
Iris:<br>
Did you manage to destroy the inhabitants?<br>
<button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00935_ExploringTheEastWingOfTheDungeonOfAbyss end.htm">Yes, I brought evidence</button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>
Rosammy:<br>
I'll tell you the story of this place<br>
<button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00935_ExploringTheEastWingOfTheDungeonOfAbyss 31777-02.htm">Listen!</button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>
Rosammy:<br>
You do not meet the requirements of the quest
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>
Rosammy:<br>
In this area dreadful monsters live ...<br>
<button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00935_ExploringTheEastWingOfTheDungeonOfAbyss 31777-03.htm">Listen further</button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>
Rosammy:<br>
If you help us remove the threat, we will reward you ...<br>
<button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00935_ExploringTheEastWingOfTheDungeonOfAbyss 31777-04.htm">Agree</button>
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>
You are commissioned to study the Abyssal Prison. The aim of the hunt is the Wandering Prisoner, the Wandering Spirit of Prison, the Wandering Ghost of Prison, the Wandering Prickery of Prison. Need to receive a Shard of Evil Shard of Evil - 50 pcs.
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>
Rosammy:<br>
Did you manage to destroy the inhabitants?<br>
<button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00935_ExploringTheEastWingOfTheDungeonOfAbyss end.htm">Yes, I brought evidence</button>
</body></html>

View File

@ -0,0 +1,226 @@
/*
* 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.Q00935_ExploringTheEastWingOfTheDungeonOfAbyss;
import com.l2jmobius.gameserver.enums.QuestType;
import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.holders.ItemHolder;
import com.l2jmobius.gameserver.model.quest.Quest;
import com.l2jmobius.gameserver.model.quest.QuestState;
import com.l2jmobius.gameserver.model.quest.State;
/**
* @author QuangNguyen
*/
public class Q00935_ExploringTheEastWingOfTheDungeonOfAbyss extends Quest
{
// NPCs
private static final int IRIS = 31776;
private static final int ROSAMMY = 31777;
// Monsters
public final int MERTT = 21644;
public final int DUHT = 21645;
public final int PRIZT = 21646;
public final int KOVART = 21647;
// Items
public final ItemHolder OSKZLA = new ItemHolder(90009, 1);
public final ItemHolder POD = new ItemHolder(90136, 1);
public Q00935_ExploringTheEastWingOfTheDungeonOfAbyss()
{
super(935);
addStartNpc(IRIS, ROSAMMY);
addTalkId(IRIS, ROSAMMY);
addKillId(MERTT, DUHT, PRIZT, KOVART);
registerQuestItems(OSKZLA.getId());
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return null;
}
String htmltext = null;
switch (event)
{
case "31776-01.htm":
case "31776-02.htm":
case "31776-03.htm":
case "31777-01.htm":
case "31777-02.htm":
case "31777-03.htm":
{
htmltext = event;
break;
}
case "31776-04.htm":
{
if (player.getLevel() >= 45)
{
qs.startQuest();
htmltext = event;
}
break;
}
case "31777-04.htm":
{
if (player.getLevel() >= 45)
{
qs.startQuest();
htmltext = event;
}
break;
}
case "end.htm":
{
player.addExpAndSp(250000, 7700);
rewardItems(player, POD);
qs.exitQuest(QuestType.DAILY, true);
break;
}
}
return htmltext;
}
@Override
public String onTalk(L2Npc npc, L2PcInstance talker)
{
final QuestState qs = getQuestState(talker, true);
String htmltext = getNoQuestMsg(talker);
switch (qs.getState())
{
case State.CREATED:
{
htmltext = (talker.getLevel() < 45) ? "nolvl.htm" : "31776-01.htm";
break;
}
case State.STARTED:
{
if (npc.getId() == IRIS)
{
switch (qs.getCond())
{
case 0:
{
if ((qs.getPlayer().getLevel() >= 45) && (qs.getPlayer().getLevel() <= 49))
{
htmltext = "31776-01.htm";
}
else
{
htmltext = "31776-01a.htm";
}
break;
}
case 1:
{
htmltext = "31776-04.htm";
break;
}
case 2:
{
htmltext = "31776-05.htm";
break;
}
}
break;
}
else if (npc.getId() == ROSAMMY)
{
switch (qs.getCond())
{
case 0:
{
if ((qs.getPlayer().getLevel() >= 45) && (qs.getPlayer().getLevel() <= 49))
{
htmltext = "31777-01.htm";
qs.startQuest();
}
else
{
htmltext = "31777-01a.htm";
}
break;
}
case 1:
{
htmltext = "31777-04.htm";
break;
}
case 2:
{
htmltext = "31777-05.htm";
break;
}
}
}
break;
}
case State.COMPLETED:
{
if (qs.isNowAvailable())
{
qs.setState(State.CREATED);
if ((npc.getId() == IRIS) && (qs.getPlayer().getLevel() < 45))
{
htmltext = "31776-01.htm";
}
else if ((npc.getId() == ROSAMMY) && (qs.getPlayer().getLevel() < 45))
{
htmltext = "31777-01.htm";
}
else
{
htmltext = "nolvl.htm";
}
}
else
{
htmltext = getAlreadyCompletedMsg(talker);
}
break;
}
}
return htmltext;
}
@Override
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
{
final QuestState qs = getQuestState(killer, false);
if (qs.getCond() == 1)
{
if (getQuestItemsCount(killer, OSKZLA.getId()) < 50)
{
giveItems(killer, OSKZLA);
}
if (getQuestItemsCount(killer, OSKZLA.getId()) >= 50)
{
qs.setCond(2);
}
}
return null;
}
}

View File

@ -0,0 +1,3 @@
<html><body>
Thanks for the help, here's the reward !!!
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>
Magrit:<br>
(This quest is only available to level 45-49 characters.)
</body></html>

View File

@ -51,6 +51,7 @@ import quests.Q00165_ShilensHunt.Q00165_ShilensHunt;
import quests.Q00166_MassOfDarkness.Q00166_MassOfDarkness;
import quests.Q00167_DwarvenKinship.Q00167_DwarvenKinship;
import quests.Q00168_DeliverSupplies.Q00168_DeliverSupplies;
import quests.Q00169_OffspringOfNightmares.Q00169_OffspringOfNightmares;
import quests.Q00170_DangerousSeduction.Q00170_DangerousSeduction;
import quests.Q00211_TrialOfTheChallenger.Q00211_TrialOfTheChallenger;
import quests.Q00212_TrialOfDuty.Q00212_TrialOfDuty;
@ -146,6 +147,8 @@ import quests.Q00416_PathOfTheOrcShaman.Q00416_PathOfTheOrcShaman;
import quests.Q00417_PathOfTheScavenger.Q00417_PathOfTheScavenger;
import quests.Q00418_PathOfTheArtisan.Q00418_PathOfTheArtisan;
import quests.Q00662_AGameOfCards.Q00662_AGameOfCards;
import quests.Q00933_ExploringTheWestWingOfTheDungeonOfAbyss.Q00933_ExploringTheWestWingOfTheDungeonOfAbyss;
import quests.Q00935_ExploringTheEastWingOfTheDungeonOfAbyss.Q00935_ExploringTheEastWingOfTheDungeonOfAbyss;
import quests.Q11000_MoonKnight.Q11000_MoonKnight;
/**
@ -220,6 +223,7 @@ public class QuestMasterHandler
Q00166_MassOfDarkness.class,
Q00167_DwarvenKinship.class,
Q00168_DeliverSupplies.class,
Q00169_OffspringOfNightmares.class,
Q00170_DangerousSeduction.class,
Q00211_TrialOfTheChallenger.class,
Q00212_TrialOfDuty.class,
@ -289,7 +293,7 @@ public class QuestMasterHandler
Q00374_WhisperOfDreamsPart1.class,
Q00375_WhisperOfDreamsPart2.class,
Q00344_1000YearsTheEndOfLamentation.class,
// TODO: Q00348_AnArrogantSearch.class,
// Q00348_AnArrogantSearch.class,
Q00354_ConquestOfAlligatorIsland.class,
Q00355_FamilyHonor.class,
Q00356_DigUpTheSeaOfSpores.class,
@ -317,6 +321,8 @@ public class QuestMasterHandler
Q00418_PathOfTheArtisan.class,
Q00662_AGameOfCards.class,
Q11000_MoonKnight.class,
Q00933_ExploringTheWestWingOfTheDungeonOfAbyss.class,
Q00935_ExploringTheEastWingOfTheDungeonOfAbyss.class,
};
public static void main(String[] args)

View File

@ -0,0 +1,204 @@
<?xml version="1.0" encoding="UTF-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../xsd/spawns.xsd">
<spawn name="16_12">
<group>
<npc id="31774" x="-119936" y="-182574" z="-6752" heading="36621" respawnTime="60sec" /> <!-- Magrit Soul Tracker -->
<npc id="31775" x="-119931" y="-179752" z="-6752" heading="36600" respawnTime="60sec" /> <!-- Ingrit Soul Tracker -->
<npc id="31776" x="-109661" y="-180438" z="-6752" heading="63256" respawnTime="60sec" /> <!-- Iris Soul Tracker -->
<npc id="31777" x="-109658" y="-177613" z="-6752" heading="453" respawnTime="60sec" /> <!-- Rosammy Soul Tracker -->
<!-- Wandering Dead of the Dungeon -->
<npc id="21638" x="-119902" y="-180338" z="-6752" heading="17326" respawnTime="60sec" />
<npc id="21638" x="-120304" y="-180462" z="-6752" heading="35860" respawnTime="60sec" />
<npc id="21638" x="-119902" y="-180338" z="-6752" heading="17326" respawnTime="60sec" />
<npc id="21638" x="-120304" y="-180462" z="-6752" heading="35860" respawnTime="60sec" />
<npc id="21638" x="-119236" y="-181636" z="-6752" heading="59614" respawnTime="60sec" />
<npc id="21638" x="-119492" y="-181474" z="-6752" heading="32797" respawnTime="60sec" />
<npc id="21638" x="-119144" y="-179794" z="-6752" heading="65266" respawnTime="60sec" />
<npc id="21638" x="-119173" y="-179884" z="-6752" heading="8735" respawnTime="60sec" />
<npc id="21638" x="-119876" y="-178727" z="-6752" heading="26387" respawnTime="60sec" />
<npc id="21638" x="-119876" y="-178847" z="-6752" heading="56132" respawnTime="60sec" />
<npc id="21638" x="-119446" y="-177989" z="-6752" heading="8871" respawnTime="60sec" />
<npc id="21638" x="-120412" y="-177429" z="-6752" heading="43404" respawnTime="60sec" />
<npc id="21638" x="-118300" y="-181398" z="-6752" heading="29436" respawnTime="60sec" />
<npc id="21638" x="-117985" y="-181518" z="-6752" heading="29718" respawnTime="60sec" />
<npc id="21638" x="-118552" y="-181308" z="-6752" heading="45272" respawnTime="60sec" />
<npc id="21638" x="-117607" y="-181668" z="-6752" heading="36728" respawnTime="60sec" />
<npc id="21638" x="-118123" y="-182230" z="-6752" heading="58611" respawnTime="60sec" />
<npc id="21638" x="-117419" y="-178585" z="-6752" heading="56282" respawnTime="60sec" />
<npc id="21638" x="-118071" y="-178969" z="-6752" heading="41370" respawnTime="60sec" />
<npc id="21638" x="-118071" y="-178380" z="-6752" heading="19350" respawnTime="60sec" />
<npc id="21638" x="-118201" y="-178473" z="-6752" heading="16035" respawnTime="60sec" />
<npc id="21638" x="-118396" y="-178535" z="-6752" heading="61076" respawnTime="60sec" />
<npc id="21638" x="-118208" y="-179450" z="-6752" heading="63417" respawnTime="60sec" />
<npc id="21638" x="-117952" y="-179419" z="-6752" heading="60554" respawnTime="60sec" />
<npc id="21638" x="-118400" y="-179822" z="-6752" heading="42329" respawnTime="60sec" />
<npc id="21638" x="-118528" y="-179822" z="-6752" heading="12644" respawnTime="60sec" />
<npc id="21638" x="-119173" y="-182557" z="-6752" heading="9741" respawnTime="60sec" />
<npc id="21638" x="-119353" y="-182368" z="-6752" heading="52952" respawnTime="60sec" />
<npc id="21638" x="-117995" y="-182590" z="-6752" heading="61884" respawnTime="60sec" />
<npc id="21638" x="-118379" y="-182470" z="-6752" heading="19323" respawnTime="60sec" />
<!-- Wandering Spirit of the Dungeon -->
<npc id="21639" x="-119232" y="-180462" z="-6752" heading="28681" respawnTime="60sec" />
<npc id="21639" x="-119969" y="-180400" z="-6752" heading="17653" respawnTime="60sec" />
<npc id="21639" x="-119496" y="-181467" z="-6752" heading="31252" respawnTime="60sec" />
<npc id="21639" x="-119485" y="-181460" z="-6752" heading="29843" respawnTime="60sec" />
<npc id="21639" x="-120140" y="-178697" z="-6752" heading="33524" respawnTime="60sec" />
<npc id="21639" x="-119414" y="-178847" z="-6752" heading="38743" respawnTime="60sec" />
<npc id="21639" x="-119998" y="-177429" z="-6752" heading="31320" respawnTime="60sec" />
<npc id="21639" x="-119998" y="-177429" z="-6752" heading="13937" respawnTime="60sec" />
<npc id="21639" x="-118284" y="-180675" z="-6752" heading="13009" respawnTime="60sec" />
<npc id="21639" x="-118545" y="-180443" z="-6752" heading="1737" respawnTime="60sec" />
<npc id="21639" x="-117805" y="-180782" z="-6752" heading="32211" respawnTime="60sec" />
<npc id="21639" x="-117371" y="-180782" z="-6752" heading="58027" respawnTime="60sec" />
<npc id="21639" x="-117713" y="-177788" z="-6752" heading="9875" respawnTime="60sec" />
<npc id="21639" x="-117617" y="-177498" z="-6752" heading="21948" respawnTime="60sec" />
<npc id="21639" x="-118507" y="-177762" z="-6752" heading="60692" respawnTime="60sec" />
<npc id="21639" x="-118569" y="-177474" z="-6752" heading="39930" respawnTime="60sec" />
<!-- Wandering Ghost of the Dungeon -->
<npc id="21640" x="-120162" y="-180410" z="-6752" heading="61810" respawnTime="60sec" />
<npc id="21640" x="-119815" y="-180333" z="-6752" heading="7225" respawnTime="60sec" />
<npc id="21640" x="-119736" y="-181540" z="-6752" heading="60146" respawnTime="60sec" />
<npc id="21640" x="-120201" y="-181429" z="-6752" heading="52839" respawnTime="60sec" />
<npc id="21640" x="-119541" y="-179870" z="-6752" heading="45445" respawnTime="60sec" />
<npc id="21640" x="-119533" y="-179512" z="-6752" heading="7975" respawnTime="60sec" />
<npc id="21640" x="-119186" y="-178421" z="-6752" heading="19835" respawnTime="60sec" />
<npc id="21640" x="-120193" y="-178712" z="-6752" heading="9626" respawnTime="60sec" />
<npc id="21640" x="-119809" y="-177919" z="-6752" heading="44346" respawnTime="60sec" />
<npc id="21640" x="-119792" y="-177766" z="-6752" heading="26574" respawnTime="60sec" />
<npc id="21640" x="-117412" y="-181266" z="-6752" heading="16991" respawnTime="60sec" />
<npc id="21640" x="-118564" y="-181430" z="-6752" heading="38131" respawnTime="60sec" />
<npc id="21640" x="-118067" y="-181506" z="-6752" heading="38866" respawnTime="60sec" />
<npc id="21640" x="-117751" y="-181478" z="-6752" heading="40057" respawnTime="60sec" />
<npc id="21640" x="-118412" y="-178585" z="-6752" heading="56282" respawnTime="60sec" />
<npc id="21640" x="-117440" y="-178556" z="-6752" heading="33448" respawnTime="60sec" />
<npc id="21640" x="-118049" y="-178441" z="-6752" heading="35695" respawnTime="60sec" />
<npc id="21640" x="-117883" y="-178570" z="-6752" heading="20346" respawnTime="60sec" />
<npc id="21640" x="-117446" y="-179769" z="-6752" heading="36045" respawnTime="60sec" />
<npc id="21640" x="-117951" y="-179310" z="-6752" heading="10635" respawnTime="60sec" />
<npc id="21640" x="-117602" y="-179830" z="-6752" heading="36519" respawnTime="60sec" />
<npc id="21640" x="-118197" y="-179419" z="-6752" heading="65146" respawnTime="60sec" />
<npc id="21640" x="-119144" y="-182509" z="-6752" heading="25037" respawnTime="60sec" />
<npc id="21640" x="-119291" y="-182279" z="-6752" heading="21142" respawnTime="60sec" />
<npc id="21640" x="-117843" y="-182519" z="-6752" heading="46757" respawnTime="60sec" />
<npc id="21640" x="-117704" y="-182244" z="-6752" heading="46435" respawnTime="60sec" />
<npc id="21640" x="-117505" y="-182417" z="-6752" heading="9891" respawnTime="60sec" />
<npc id="21640" x="-117543" y="-182373" z="-6752" heading="26821" respawnTime="60sec" />
<!-- Wandering Evil Thoughts of the Dungeon -->
<npc id="21641" x="-119572" y="-180489" z="-6752" heading="34674" respawnTime="60sec" />
<npc id="21641" x="-120105" y="-180747" z="-6752" heading="45610" respawnTime="60sec" />
<npc id="21641" x="-119884" y="-181336" z="-6752" heading="58682" respawnTime="60sec" />
<npc id="21641" x="-119449" y="-181303" z="-6752" heading="24575" respawnTime="60sec" />
<npc id="21641" x="-119695" y="-178418" z="-6752" heading="1963" respawnTime="60sec" />
<npc id="21641" x="-120153" y="-178452" z="-6752" heading="21491" respawnTime="60sec" />
<npc id="21641" x="-119486" y="-177698" z="-6752" heading="15862" respawnTime="60sec" />
<npc id="21641" x="-119775" y="-177545" z="-6752" heading="64890" respawnTime="60sec" />
<npc id="21641" x="-118533" y="-180648" z="-6752" heading="42427" respawnTime="60sec" />
<npc id="21641" x="-118715" y="-180667" z="-6752" heading="31656" respawnTime="60sec" />
<npc id="21641" x="-117626" y="-180623" z="-6752" heading="21306" respawnTime="60sec" />
<npc id="21641" x="-117836" y="-180332" z="-6752" heading="883" respawnTime="60sec" />
<npc id="21641" x="-117696" y="-177943" z="-6752" heading="39848" respawnTime="60sec" />
<npc id="21641" x="-117639" y="-177577" z="-6752" heading="22320" respawnTime="60sec" />
<npc id="21641" x="-118394" y="-177530" z="-6752" heading="390" respawnTime="60sec" />
<npc id="21641" x="-118258" y="-177750" z="-6752" heading="39528" respawnTime="60sec" />
<!-- Wandering Dead of the Abyss -->
<npc id="21644" x="-111944" y="-178577" z="-6752" heading="36275" respawnTime="60sec" />
<npc id="21644" x="-111629" y="-178937" z="-6752" heading="50854" respawnTime="60sec" />
<npc id="21644" x="-112007" y="-178937" z="-6752" heading="1914" respawnTime="60sec" />
<npc id="21644" x="-111503" y="-178877" z="-6752" heading="41397" respawnTime="60sec" />
<npc id="21644" x="-111703" y="-177927" z="-6752" heading="7263" respawnTime="60sec" />
<npc id="21644" x="-112023" y="-177477" z="-6752" heading="36802" respawnTime="60sec" />
<npc id="21644" x="-110999" y="-177867" z="-6752" heading="1080" respawnTime="60sec" />
<npc id="21644" x="-111255" y="-177657" z="-6752" heading="39873" respawnTime="60sec" />
<npc id="21644" x="-110293" y="-179331" z="-6752" heading="59155" respawnTime="60sec" />
<npc id="21644" x="-109556" y="-179548" z="-6752" heading="42789" respawnTime="60sec" />
<npc id="21644" x="-109873" y="-178807" z="-6752" heading="53551" respawnTime="60sec" />
<npc id="21644" x="-110321" y="-178387" z="-6752" heading="36781" respawnTime="60sec" />
<npc id="21644" x="-110155" y="-177732" z="-6752" heading="30799" respawnTime="60sec" />
<npc id="21644" x="-110065" y="-177462" z="-6752" heading="10314" respawnTime="60sec" />
<npc id="21644" x="-111180" y="-180641" z="-6752" heading="63729" respawnTime="60sec" />
<npc id="21644" x="-111820" y="-180521" z="-6752" heading="49503" respawnTime="60sec" />
<npc id="21644" x="-112012" y="-180461" z="-6752" heading="54589" respawnTime="60sec" />
<npc id="21644" x="-111948" y="-180761" z="-6752" heading="59652" respawnTime="60sec" />
<npc id="21644" x="-111806" y="-181621" z="-6752" heading="13304" respawnTime="60sec" />
<npc id="21644" x="-111113" y="-181291" z="-6752" heading="64710" respawnTime="60sec" />
<npc id="21644" x="-111680" y="-181291" z="-6752" heading="46163" respawnTime="60sec" />
<npc id="21644" x="-111176" y="-181201" z="-6752" heading="34599" respawnTime="60sec" />
<npc id="21644" x="-109209" y="-182537" z="-6752" heading="7574" respawnTime="60sec" />
<npc id="21644" x="-109611" y="-182475" z="-6752" heading="56013" respawnTime="60sec" />
<npc id="21644" x="-110353" y="-180512" z="-6752" heading="62573" respawnTime="60sec" />
<npc id="21644" x="-110443" y="-180593" z="-6752" heading="34070" respawnTime="60sec" />
<npc id="21644" x="-110437" y="-181311" z="-6752" heading="55101" respawnTime="60sec" />
<npc id="21644" x="-109477" y="-181311" z="-6752" heading="62238" respawnTime="60sec" />
<!-- Wandering Spirit of the Abyss -->
<npc id="21645" x="-111941" y="-179400" z="-6752" heading="1651" respawnTime="60sec" />
<npc id="21645" x="-110938" y="-179656" z="-6752" heading="23862" respawnTime="60sec" />
<npc id="21645" x="-111112" y="-179366" z="-6752" heading="59307" respawnTime="60sec" />
<npc id="21645" x="-111910" y="-179310" z="-6752" heading="53040" respawnTime="60sec" />
<npc id="21645" x="-110025" y="-179424" z="-6752" heading="57931" respawnTime="60sec" />
<npc id="21645" x="-110092" y="-179827" z="-6752" heading="49315" respawnTime="60sec" />
<npc id="21645" x="-110449" y="-178477" z="-6752" heading="11663" respawnTime="60sec" />
<npc id="21645" x="-110513" y="-178567" z="-6752" heading="39248" respawnTime="60sec" />
<npc id="21645" x="-111960" y="-182714" z="-6752" heading="42758" respawnTime="60sec" />
<npc id="21645" x="-111805" y="-182234" z="-6752" heading="19685" respawnTime="60sec" />
<npc id="21645" x="-111100" y="-182171" z="-6752" heading="45800" respawnTime="60sec" />
<npc id="21645" x="-110984" y="-182200" z="-6752" heading="5794" respawnTime="60sec" />
<npc id="21645" x="-110214" y="-182444" z="-6752" heading="9838" respawnTime="60sec" />
<npc id="21645" x="-110214" y="-182630" z="-6752" heading="53223" respawnTime="60sec" />
<npc id="21645" x="-110245" y="-181641" z="-6752" heading="31328" respawnTime="60sec" />
<npc id="21645" x="-110117" y="-181251" z="-6752" heading="31628" respawnTime="60sec" />
<!-- Wandering Ghost of the Abyss -->
<npc id="21646" x="-111738" y="-178665" z="-6752" heading="8589" respawnTime="60sec" />
<npc id="21646" x="-111194" y="-178386" z="-6752" heading="16296" respawnTime="60sec" />
<npc id="21646" x="-111467" y="-178533" z="-6752" heading="7118" respawnTime="60sec" />
<npc id="21646" x="-111359" y="-178400" z="-6752" heading="14018" respawnTime="60sec" />
<npc id="21646" x="-111804" y="-177736" z="-6752" heading="56281" respawnTime="60sec" />
<npc id="21646" x="-111036" y="-177757" z="-6752" heading="40800" respawnTime="60sec" />
<npc id="21646" x="-112081" y="-177846" z="-6752" heading="48107" respawnTime="60sec" />
<npc id="21646" x="-111781" y="-177572" z="-6752" heading="40425" respawnTime="60sec" />
<npc id="21646" x="-110097" y="-179510" z="-6752" heading="65102" respawnTime="60sec" />
<npc id="21646" x="-109976" y="-179829" z="-6752" heading="23156" respawnTime="60sec" />
<npc id="21646" x="-109485" y="-178742" z="-6752" heading="45262" respawnTime="60sec" />
<npc id="21646" x="-110492" y="-178658" z="-6752" heading="41269" respawnTime="60sec" />
<npc id="21646" x="-110114" y="-177635" z="-6752" heading="64669" respawnTime="60sec" />
<npc id="21646" x="-110398" y="-177753" z="-6752" heading="61402" respawnTime="60sec" />
<npc id="21646" x="-111472" y="-180699" z="-6752" heading="20951" respawnTime="60sec" />
<npc id="21646" x="-111512" y="-180462" z="-6752" heading="18952" respawnTime="60sec" />
<npc id="21646" x="-111745" y="-180549" z="-6752" heading="53250" respawnTime="60sec" />
<npc id="21646" x="-111162" y="-180575" z="-6752" heading="33467" respawnTime="60sec" />
<npc id="21646" x="-112098" y="-181383" z="-6752" heading="30127" respawnTime="60sec" />
<npc id="21646" x="-111865" y="-181726" z="-6752" heading="867" respawnTime="60sec" />
<npc id="21646" x="-111000" y="-181329" z="-6752" heading="15920" respawnTime="60sec" />
<npc id="21646" x="-111637" y="-181230" z="-6752" heading="15258" respawnTime="60sec" />
<npc id="21646" x="-109367" y="-182487" z="-6752" heading="42415" respawnTime="60sec" />
<npc id="21646" x="-109389" y="-182188" z="-6752" heading="8959" respawnTime="60sec" />
<npc id="21646" x="-110275" y="-180378" z="-6752" heading="61051" respawnTime="60sec" />
<npc id="21646" x="-110425" y="-180542" z="-6752" heading="47845" respawnTime="60sec" />
<npc id="21646" x="-109930" y="-181199" z="-6752" heading="26936" respawnTime="60sec" />
<npc id="21646" x="-109560" y="-181250" z="-6752" heading="12554" respawnTime="60sec" />
<!-- Wandering Evil Thoughts of the Abyss -->
<npc id="21647" x="-112081" y="-179715" z="-6752" heading="40160" respawnTime="60sec" />
<npc id="21647" x="-110864" y="-179572" z="-6752" heading="34757" respawnTime="60sec" />
<npc id="21647" x="-111883" y="-179462" z="-6752" heading="58407" respawnTime="60sec" />
<npc id="21647" x="-110870" y="-179723" z="-6752" heading="25694" respawnTime="60sec" />
<npc id="21647" x="-110132" y="-179540" z="-6752" heading="18558" respawnTime="60sec" />
<npc id="21647" x="-109194" y="-179316" z="-6752" heading="63835" respawnTime="60sec" />
<npc id="21647" x="-109726" y="-178613" z="-6752" heading="54907" respawnTime="60sec" />
<npc id="21647" x="-109701" y="-178937" z="-6752" heading="42218" respawnTime="60sec" />
<npc id="21647" x="-111763" y="-182375" z="-6752" heading="57191" respawnTime="60sec" />
<npc id="21647" x="-112121" y="-182427" z="-6752" heading="46107" respawnTime="60sec" />
<npc id="21647" x="-111189" y="-182634" z="-6752" heading="47580" respawnTime="60sec" />
<npc id="21647" x="-111199" y="-182241" z="-6752" heading="36455" respawnTime="60sec" />
<npc id="21647" x="-109933" y="-182365" z="-6752" heading="17808" respawnTime="60sec" />
<npc id="21647" x="-110082" y="-182641" z="-6752" heading="52199" respawnTime="60sec" />
<npc id="21647" x="-110243" y="-181286" z="-6752" heading="59362" respawnTime="60sec" />
<npc id="21647" x="-109892" y="-181495" z="-6752" heading="33880" respawnTime="60sec" />
</group>
</spawn>
</list>