Removal of Dungeon of Abyss.

This commit is contained in:
MobiusDevelopment 2021-04-23 20:11:33 +00:00
parent aad1fc334d
commit 188fe9cee1
40 changed files with 4 additions and 1536 deletions

View File

@ -1,119 +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 ai.areas.DungeonOfAbyss;
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import ai.AbstractNpcAI;
/**
* @author Mobius
*/
public class DungeonOfAbyssZone extends AbstractNpcAI
{
private static final ZoneType ABYSS_WEST_ZONE_1 = ZoneManager.getInstance().getZoneByName("The West Dungeon of Abyss");
private static final ZoneType ABYSS_WEST_ZONE_2 = ZoneManager.getInstance().getZoneByName("The West Dungeon of Abyss 2nd");
private static final ZoneType ABYSS_EAST_ZONE_3 = ZoneManager.getInstance().getZoneByName("The East Dungeon of Abyss");
private static final ZoneType ABYSS_EAST_ZONE_4 = ZoneManager.getInstance().getZoneByName("The East Dungeon of Abyss 2nd");
private static final ZoneType ABYSS_WEST_ZONE_BOSS_1 = ZoneManager.getInstance().getZoneByName("The West Dungeon of Abyss Boss Room");
private static final ZoneType ABYSS_WEST_ZONE_BOSS_2 = ZoneManager.getInstance().getZoneByName("The West Dungeon of Abyss 2nd Boss Room");
private static final ZoneType ABYSS_EAST_ZONE_BOSS_3 = ZoneManager.getInstance().getZoneByName("The East Dungeon of Abyss Boss Room");
private static final ZoneType ABYSS_EAST_ZONE_BOSS_4 = ZoneManager.getInstance().getZoneByName("The East Dungeon of Abyss 2nd Boss Room");
private static final int EXIT_TIME = 60 * 60 * 1000; // 60 minute
private static final int EXIT_TIME_BOSS_ROOM = 30 * 60 * 1000; // 60 minute
private static final Location EXIT_LOCATION_1 = new Location(-120019, -182575, -6751); // Move to Magrit
private static final Location EXIT_LOCATION_2 = new Location(-119977, -179753, -6751); // Move to Ingrit
private static final Location EXIT_LOCATION_3 = new Location(-109554, -180408, -6753); // Move to Iris
private static final Location EXIT_LOCATION_4 = new Location(-109595, -177560, -6753); // Move to Rosammy
private DungeonOfAbyssZone()
{
addEnterZoneId(ABYSS_WEST_ZONE_1.getId(), ABYSS_WEST_ZONE_2.getId(), ABYSS_EAST_ZONE_3.getId(), ABYSS_EAST_ZONE_4.getId(), ABYSS_WEST_ZONE_BOSS_1.getId(), ABYSS_WEST_ZONE_BOSS_2.getId(), ABYSS_EAST_ZONE_BOSS_3.getId(), ABYSS_EAST_ZONE_BOSS_4.getId());
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.startsWith("EXIT_PLAYER") && (player != null))
{
if (event.contains(ABYSS_WEST_ZONE_1.getName()) && ABYSS_WEST_ZONE_1.getPlayersInside().contains(player))
{
player.teleToLocation(EXIT_LOCATION_1);
}
else if (event.contains(ABYSS_WEST_ZONE_2.getName()) && ABYSS_WEST_ZONE_2.getPlayersInside().contains(player))
{
player.teleToLocation(EXIT_LOCATION_2);
}
else if (event.contains(ABYSS_EAST_ZONE_3.getName()) && ABYSS_EAST_ZONE_3.getPlayersInside().contains(player))
{
player.teleToLocation(EXIT_LOCATION_3);
}
else if (event.contains(ABYSS_EAST_ZONE_4.getName()) && ABYSS_EAST_ZONE_4.getPlayersInside().contains(player))
{
player.teleToLocation(EXIT_LOCATION_4);
}
else if (event.contains(ABYSS_WEST_ZONE_BOSS_1.getName()) && ABYSS_WEST_ZONE_BOSS_1.getPlayersInside().contains(player))
{
player.teleToLocation(EXIT_LOCATION_1);
}
else if (event.contains(ABYSS_WEST_ZONE_BOSS_2.getName()) && ABYSS_WEST_ZONE_BOSS_2.getPlayersInside().contains(player))
{
player.teleToLocation(EXIT_LOCATION_2);
}
else if (event.contains(ABYSS_EAST_ZONE_BOSS_3.getName()) && ABYSS_EAST_ZONE_BOSS_3.getPlayersInside().contains(player))
{
player.teleToLocation(EXIT_LOCATION_3);
}
else if (event.contains(ABYSS_EAST_ZONE_BOSS_4.getName()) && ABYSS_EAST_ZONE_BOSS_4.getPlayersInside().contains(player))
{
player.teleToLocation(EXIT_LOCATION_4);
}
}
return super.onAdvEvent(event, npc, player);
}
@Override
public String onEnterZone(Creature creature, ZoneType zone)
{
if (creature.isPlayer())
{
final PlayerInstance player = creature.getActingPlayer();
cancelQuestTimer("EXIT_PLAYER" + ABYSS_WEST_ZONE_1.getName() + player.getObjectId(), null, player);
cancelQuestTimer("EXIT_PLAYER" + ABYSS_WEST_ZONE_2.getName() + player.getObjectId(), null, player);
cancelQuestTimer("EXIT_PLAYER" + ABYSS_EAST_ZONE_3.getName() + player.getObjectId(), null, player);
cancelQuestTimer("EXIT_PLAYER" + ABYSS_EAST_ZONE_4.getName() + player.getObjectId(), null, player);
cancelQuestTimer("EXIT_PLAYER" + ABYSS_WEST_ZONE_BOSS_1.getName() + player.getObjectId(), null, player);
cancelQuestTimer("EXIT_PLAYER" + ABYSS_WEST_ZONE_BOSS_2.getName() + player.getObjectId(), null, player);
cancelQuestTimer("EXIT_PLAYER" + ABYSS_EAST_ZONE_BOSS_3.getName() + player.getObjectId(), null, player);
cancelQuestTimer("EXIT_PLAYER" + ABYSS_EAST_ZONE_BOSS_4.getName() + player.getObjectId(), null, player);
startQuestTimer("EXIT_PLAYER" + zone.getName() + player.getObjectId(), zone.getName().contains("boss") ? EXIT_TIME_BOSS_ROOM : EXIT_TIME, null, player);
}
return super.onEnterZone(creature, zone);
}
public static void main(String[] args)
{
new DungeonOfAbyssZone();
}
}

View File

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

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

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

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

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

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

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

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

@ -1,109 +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 ai.areas.DungeonOfAbyss.SoulTracker;
import java.util.HashMap;
import java.util.Map;
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.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(Npc npc, PlayerInstance player)
{
return npc.getId() + ".htm";
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (npc.getId() == SOUL_TRACKER_INRGIT)
{
final 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

@ -1,109 +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 ai.areas.DungeonOfAbyss.SoulTracker;
import java.util.HashMap;
import java.util.Map;
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.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(Npc npc, PlayerInstance player)
{
return npc.getId() + ".htm";
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (npc.getId() == SOUL_TRACKER_IRIS)
{
final 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

@ -1,109 +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 ai.areas.DungeonOfAbyss.SoulTracker;
import java.util.HashMap;
import java.util.Map;
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.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(Npc npc, PlayerInstance player)
{
return npc.getId() + ".htm";
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (npc.getId() == SOUL_TRACKER_MARGIT)
{
final 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

@ -1,109 +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 ai.areas.DungeonOfAbyss.SoulTracker;
import java.util.HashMap;
import java.util.Map;
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.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(Npc npc, PlayerInstance player)
{
return npc.getId() + ".htm";
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (npc.getId() == SOUL_TRACKER_ROSAMMY)
{
final 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

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

View File

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

View File

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

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

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

@ -1,96 +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 ai.areas.DungeonOfAbyss.Tores;
import java.util.HashMap;
import java.util.Map;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
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(Npc npc, PlayerInstance player)
{
return "31778.htm";
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance 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

@ -882,38 +882,6 @@
<node X="-113768" Y="-150965" />
<node X="-115424" Y="-150965" />
</zone>
<zone name="The West Dungeon of Abyss" id="600000" type="PeaceZone" shape="Cuboid" minZ="-7000" maxZ="-6500"> <!-- [16_12] -->
<node X="-120448" Y="-182800" />
<node X="-117264" Y="-180288" />
</zone>
<zone name="The West Dungeon of Abyss Boss Room" id="600004" type="PeaceZone" shape="Cuboid" minZ="-7000" maxZ="-6500"> <!-- [16_12] -->
<node X="-117096" Y="-181856" />
<node X="-115562" Y="-181080" />
</zone>
<zone name="The West Dungeon of Abyss 2nd" id="600001" type="PeaceZone" shape="Cuboid" minZ="-7000" maxZ="-6500"> <!-- [16_12] -->
<node X="-120448" Y="-180093" />
<node X="-117264" Y="-177472" />
</zone>
<zone name="The West Dungeon of Abyss 2nd Boss Room" id="600005" type="PeaceZone" shape="Cuboid" minZ="-7000" maxZ="-6500"> <!-- [16_12] -->
<node X="-117097" Y="-179108" />
<node X="-115565" Y="-178261" />
</zone>
<zone name="The East Dungeon of Abyss" id="600002" type="PeaceZone" shape="Cuboid" minZ="-7000" maxZ="-6500"> <!-- [16_12] -->
<node X="-109037" Y="-180186" />
<node X="-112257" Y="-182758" />
</zone>
<zone name="The East Dungeon of Abyss Boss Room" id="600006" type="PeaceZone" shape="Cuboid" minZ="-7000" maxZ="-6500"> <!-- [16_12] -->
<node X="-112508" Y="-181094" />
<node X="-114023" Y="-181929" />
</zone>
<zone name="The East Dungeon of Abyss 2nd" id="600003" type="PeaceZone" shape="Cuboid" minZ="-7000" maxZ="-6500"> <!-- [16_12] -->
<node X="-109152" Y="-177408" />
<node X="-112336" Y="-179920" />
</zone>
<zone name="The East Dungeon of Abyss 2nd Boss Room" id="600007" type="PeaceZone" shape="Cuboid" minZ="-7000" maxZ="-6500"> <!-- [16_12] -->
<node X="-112495" Y="-178268" />
<node X="-114025" Y="-179108" />
</zone>
<!-- Classic Monster Race Track -->
<zone name="Monster_Race_Arena_Peace" type="PeaceZone" shape="NPoly" minZ="-3565" maxZ="-3200"> <!-- [20_23] -->
@ -938,7 +906,7 @@
</zone>
<!-- Death Knight Base -->
<zone name="Death_Knight_Base_Peace" type="PeaceZone" shape="NPoly" minZ="-3054" maxZ="-1849"> <!-- [21_22] -->
<zone name="Death_Knight_Base_Peace" type="PeaceZone" shape="NPoly" minZ="-3054" maxZ="-1849"> <!-- [21_22] -->
<node X="46007" Y="150756" />
<node X="45355" Y="151090" />
<node X="44488" Y="151093" />

View File

@ -1,119 +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 ai.areas.DungeonOfAbyss;
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import ai.AbstractNpcAI;
/**
* @author Mobius
*/
public class DungeonOfAbyssZone extends AbstractNpcAI
{
private static final ZoneType ABYSS_WEST_ZONE_1 = ZoneManager.getInstance().getZoneByName("The West Dungeon of Abyss");
private static final ZoneType ABYSS_WEST_ZONE_2 = ZoneManager.getInstance().getZoneByName("The West Dungeon of Abyss 2nd");
private static final ZoneType ABYSS_EAST_ZONE_3 = ZoneManager.getInstance().getZoneByName("The East Dungeon of Abyss");
private static final ZoneType ABYSS_EAST_ZONE_4 = ZoneManager.getInstance().getZoneByName("The East Dungeon of Abyss 2nd");
private static final ZoneType ABYSS_WEST_ZONE_BOSS_1 = ZoneManager.getInstance().getZoneByName("The West Dungeon of Abyss Boss Room");
private static final ZoneType ABYSS_WEST_ZONE_BOSS_2 = ZoneManager.getInstance().getZoneByName("The West Dungeon of Abyss 2nd Boss Room");
private static final ZoneType ABYSS_EAST_ZONE_BOSS_3 = ZoneManager.getInstance().getZoneByName("The East Dungeon of Abyss Boss Room");
private static final ZoneType ABYSS_EAST_ZONE_BOSS_4 = ZoneManager.getInstance().getZoneByName("The East Dungeon of Abyss 2nd Boss Room");
private static final int EXIT_TIME = 60 * 60 * 1000; // 60 minute
private static final int EXIT_TIME_BOSS_ROOM = 30 * 60 * 1000; // 60 minute
private static final Location EXIT_LOCATION_1 = new Location(-120019, -182575, -6751); // Move to Magrit
private static final Location EXIT_LOCATION_2 = new Location(-119977, -179753, -6751); // Move to Ingrit
private static final Location EXIT_LOCATION_3 = new Location(-109554, -180408, -6753); // Move to Iris
private static final Location EXIT_LOCATION_4 = new Location(-109595, -177560, -6753); // Move to Rosammy
private DungeonOfAbyssZone()
{
addEnterZoneId(ABYSS_WEST_ZONE_1.getId(), ABYSS_WEST_ZONE_2.getId(), ABYSS_EAST_ZONE_3.getId(), ABYSS_EAST_ZONE_4.getId(), ABYSS_WEST_ZONE_BOSS_1.getId(), ABYSS_WEST_ZONE_BOSS_2.getId(), ABYSS_EAST_ZONE_BOSS_3.getId(), ABYSS_EAST_ZONE_BOSS_4.getId());
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.startsWith("EXIT_PLAYER") && (player != null))
{
if (event.contains(ABYSS_WEST_ZONE_1.getName()) && ABYSS_WEST_ZONE_1.getPlayersInside().contains(player))
{
player.teleToLocation(EXIT_LOCATION_1);
}
else if (event.contains(ABYSS_WEST_ZONE_2.getName()) && ABYSS_WEST_ZONE_2.getPlayersInside().contains(player))
{
player.teleToLocation(EXIT_LOCATION_2);
}
else if (event.contains(ABYSS_EAST_ZONE_3.getName()) && ABYSS_EAST_ZONE_3.getPlayersInside().contains(player))
{
player.teleToLocation(EXIT_LOCATION_3);
}
else if (event.contains(ABYSS_EAST_ZONE_4.getName()) && ABYSS_EAST_ZONE_4.getPlayersInside().contains(player))
{
player.teleToLocation(EXIT_LOCATION_4);
}
else if (event.contains(ABYSS_WEST_ZONE_BOSS_1.getName()) && ABYSS_WEST_ZONE_BOSS_1.getPlayersInside().contains(player))
{
player.teleToLocation(EXIT_LOCATION_1);
}
else if (event.contains(ABYSS_WEST_ZONE_BOSS_2.getName()) && ABYSS_WEST_ZONE_BOSS_2.getPlayersInside().contains(player))
{
player.teleToLocation(EXIT_LOCATION_2);
}
else if (event.contains(ABYSS_EAST_ZONE_BOSS_3.getName()) && ABYSS_EAST_ZONE_BOSS_3.getPlayersInside().contains(player))
{
player.teleToLocation(EXIT_LOCATION_3);
}
else if (event.contains(ABYSS_EAST_ZONE_BOSS_4.getName()) && ABYSS_EAST_ZONE_BOSS_4.getPlayersInside().contains(player))
{
player.teleToLocation(EXIT_LOCATION_4);
}
}
return super.onAdvEvent(event, npc, player);
}
@Override
public String onEnterZone(Creature creature, ZoneType zone)
{
if (creature.isPlayer())
{
final PlayerInstance player = creature.getActingPlayer();
cancelQuestTimer("EXIT_PLAYER" + ABYSS_WEST_ZONE_1.getName() + player.getObjectId(), null, player);
cancelQuestTimer("EXIT_PLAYER" + ABYSS_WEST_ZONE_2.getName() + player.getObjectId(), null, player);
cancelQuestTimer("EXIT_PLAYER" + ABYSS_EAST_ZONE_3.getName() + player.getObjectId(), null, player);
cancelQuestTimer("EXIT_PLAYER" + ABYSS_EAST_ZONE_4.getName() + player.getObjectId(), null, player);
cancelQuestTimer("EXIT_PLAYER" + ABYSS_WEST_ZONE_BOSS_1.getName() + player.getObjectId(), null, player);
cancelQuestTimer("EXIT_PLAYER" + ABYSS_WEST_ZONE_BOSS_2.getName() + player.getObjectId(), null, player);
cancelQuestTimer("EXIT_PLAYER" + ABYSS_EAST_ZONE_BOSS_3.getName() + player.getObjectId(), null, player);
cancelQuestTimer("EXIT_PLAYER" + ABYSS_EAST_ZONE_BOSS_4.getName() + player.getObjectId(), null, player);
startQuestTimer("EXIT_PLAYER" + zone.getName() + player.getObjectId(), zone.getName().contains("boss") ? EXIT_TIME_BOSS_ROOM : EXIT_TIME, null, player);
}
return super.onEnterZone(creature, zone);
}
public static void main(String[] args)
{
new DungeonOfAbyssZone();
}
}

View File

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

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

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

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

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

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

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

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

@ -1,109 +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 ai.areas.DungeonOfAbyss.SoulTracker;
import java.util.HashMap;
import java.util.Map;
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.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(Npc npc, PlayerInstance player)
{
return npc.getId() + ".htm";
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (npc.getId() == SOUL_TRACKER_INRGIT)
{
final 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

@ -1,109 +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 ai.areas.DungeonOfAbyss.SoulTracker;
import java.util.HashMap;
import java.util.Map;
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.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(Npc npc, PlayerInstance player)
{
return npc.getId() + ".htm";
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (npc.getId() == SOUL_TRACKER_IRIS)
{
final 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

@ -1,109 +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 ai.areas.DungeonOfAbyss.SoulTracker;
import java.util.HashMap;
import java.util.Map;
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.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(Npc npc, PlayerInstance player)
{
return npc.getId() + ".htm";
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (npc.getId() == SOUL_TRACKER_MARGIT)
{
final 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

@ -1,109 +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 ai.areas.DungeonOfAbyss.SoulTracker;
import java.util.HashMap;
import java.util.Map;
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.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(Npc npc, PlayerInstance player)
{
return npc.getId() + ".htm";
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (npc.getId() == SOUL_TRACKER_ROSAMMY)
{
final 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

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

View File

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

View File

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

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

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

@ -1,96 +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 ai.areas.DungeonOfAbyss.Tores;
import java.util.HashMap;
import java.util.Map;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
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(Npc npc, PlayerInstance player)
{
return "31778.htm";
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance 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

@ -882,38 +882,6 @@
<node X="-113768" Y="-150965" />
<node X="-115424" Y="-150965" />
</zone>
<zone name="The West Dungeon of Abyss" id="600000" type="PeaceZone" shape="Cuboid" minZ="-7000" maxZ="-6500"> <!-- [16_12] -->
<node X="-120448" Y="-182800" />
<node X="-117264" Y="-180288" />
</zone>
<zone name="The West Dungeon of Abyss Boss Room" id="600004" type="PeaceZone" shape="Cuboid" minZ="-7000" maxZ="-6500"> <!-- [16_12] -->
<node X="-117096" Y="-181856" />
<node X="-115562" Y="-181080" />
</zone>
<zone name="The West Dungeon of Abyss 2nd" id="600001" type="PeaceZone" shape="Cuboid" minZ="-7000" maxZ="-6500"> <!-- [16_12] -->
<node X="-120448" Y="-180093" />
<node X="-117264" Y="-177472" />
</zone>
<zone name="The West Dungeon of Abyss 2nd Boss Room" id="600005" type="PeaceZone" shape="Cuboid" minZ="-7000" maxZ="-6500"> <!-- [16_12] -->
<node X="-117097" Y="-179108" />
<node X="-115565" Y="-178261" />
</zone>
<zone name="The East Dungeon of Abyss" id="600002" type="PeaceZone" shape="Cuboid" minZ="-7000" maxZ="-6500"> <!-- [16_12] -->
<node X="-109037" Y="-180186" />
<node X="-112257" Y="-182758" />
</zone>
<zone name="The East Dungeon of Abyss Boss Room" id="600006" type="PeaceZone" shape="Cuboid" minZ="-7000" maxZ="-6500"> <!-- [16_12] -->
<node X="-112508" Y="-181094" />
<node X="-114023" Y="-181929" />
</zone>
<zone name="The East Dungeon of Abyss 2nd" id="600003" type="PeaceZone" shape="Cuboid" minZ="-7000" maxZ="-6500"> <!-- [16_12] -->
<node X="-109152" Y="-177408" />
<node X="-112336" Y="-179920" />
</zone>
<zone name="The East Dungeon of Abyss 2nd Boss Room" id="600007" type="PeaceZone" shape="Cuboid" minZ="-7000" maxZ="-6500"> <!-- [16_12] -->
<node X="-112495" Y="-178268" />
<node X="-114025" Y="-179108" />
</zone>
<!-- Classic Monster Race Track -->
<zone name="Monster_Race_Arena_Peace" type="PeaceZone" shape="NPoly" minZ="-3565" maxZ="-3200"> <!-- [20_23] -->
@ -938,7 +906,7 @@
</zone>
<!-- Death Knight Base -->
<zone name="Death_Knight_Base_Peace" type="PeaceZone" shape="NPoly" minZ="-3054" maxZ="-1849"> <!-- [21_22] -->
<zone name="Death_Knight_Base_Peace" type="PeaceZone" shape="NPoly" minZ="-3054" maxZ="-1849"> <!-- [21_22] -->
<node X="46007" Y="150756" />
<node X="45355" Y="151090" />
<node X="44488" Y="151093" />
@ -958,6 +926,8 @@
<node X="48511" Y="150149" />
<node X="47505" Y="149939" />
</zone>
<!-- Sylph Village -->
<zone name="Wind_Village" type="PeaceZone" shape="Cylinder" minZ="-5000" maxZ="-2800" rad="3000">
<node X="103781" Y="58005" />
</zone>