diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/31087.htm b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/31087.htm
new file mode 100644
index 0000000000..9ec75240c9
--- /dev/null
+++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/31087.htm
@@ -0,0 +1,12 @@
+
+Gatekeeper Spirit:
+A voice seems to emanate from a shining blue sphere:
+
+It is a sacred place where Lilith lays. I guard the path.
+
+
+Remember, you cannot go back until all of your enemies are destroyed. And if you are unable to defeat them, magic must be used.
+
+
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/31088.htm b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/31088.htm
new file mode 100644
index 0000000000..2fd631a2d6
--- /dev/null
+++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/31088.htm
@@ -0,0 +1,6 @@
+
+Gatekeeper Spirit:
+Teleport out from the Sanctum
+
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/31089.htm b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/31089.htm
new file mode 100644
index 0000000000..7a51055f6f
--- /dev/null
+++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/31089.htm
@@ -0,0 +1,12 @@
+
+Gatekeeper Spirit:
+A voice seems to emanate from a shining blue sphere:
+
+It is a sacred place where Anakim lays. I guard the path.
+
+
+Remember, you cannot go back until all of your enemies are destroyed. And if you are unable to defeat them, magic must be used.
+
+
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/instances/SanctumOfAnakim.xml b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/instances/SanctumOfAnakim.xml
new file mode 100644
index 0000000000..7040769bb4
--- /dev/null
+++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/instances/SanctumOfAnakim.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/instances/SanctumOfLilith.xml b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/instances/SanctumOfLilith.xml
new file mode 100644
index 0000000000..741f9954ce
--- /dev/null
+++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/instances/SanctumOfLilith.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/instances/SevenSignsRBs/SevenSignsRBs.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/instances/SevenSignsRBs/SevenSignsRBs.java
new file mode 100644
index 0000000000..a5119bfb1f
--- /dev/null
+++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/instances/SevenSignsRBs/SevenSignsRBs.java
@@ -0,0 +1,260 @@
+/*
+ * 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 .
+ */
+package instances.SevenSignsRBs;
+
+import java.util.List;
+
+import org.l2jmobius.gameserver.instancemanager.ZoneManager;
+import org.l2jmobius.gameserver.model.Location;
+import org.l2jmobius.gameserver.model.Party;
+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.instancezone.Instance;
+import org.l2jmobius.gameserver.model.zone.type.NoRestartZone;
+
+import instances.AbstractInstance;
+
+/**
+ * @author RobikBobik
+ * @NOTE: Retail like work
+ * @TODO: When one RB die, the second will be invul for 5 minutes.
+ */
+public class SevenSignsRBs extends AbstractInstance
+{
+ // NPCs
+ private static final int ANAKIM_GATEKEEPER_SPIRIT = 31089;
+ private static final int LILITH_GATEKEEPER_SPIRIT = 31087;
+ private static final int GATEKEEPER_SPIRIT_OUT_TELEPORT = 31088;
+ private static final int ANAKIM = 25286;
+ private static final int LILITH = 25283;
+
+ // Misc
+ private static final int ANAKIM_TEMPLATE_ID = 200;
+ private static final int LILITH_TEMPLATE_ID = 199;
+
+ private static int MAX_PLAYERS_IN_ZONE = 300;
+
+ private static final NoRestartZone _anakim_zone = ZoneManager.getInstance().getZoneById(70052, NoRestartZone.class);
+ private static final NoRestartZone _lilith_zone = ZoneManager.getInstance().getZoneById(70053, NoRestartZone.class);
+
+ // TELEPORTS
+ private static final Location[] TELEPORT_TO_DARK_ELVEN =
+ {
+ new Location(12168, 17149, -4575),
+ new Location(11688, 18219, -4585),
+ new Location(10502, 17112, -4588),
+ new Location(11169, 15922, -4585),
+ };
+
+ // TODO: When teleport from instance done. Enable it
+ /*
+ * private static final Location[] TELEPORT_TO_ADEN = { new Location(148053, 26935, -2206), new Location(148053, 28017, -2269), new Location(146558, 28017, -2269), new Location(146558, 26935, -2206), };
+ */
+
+ public SevenSignsRBs()
+ {
+ super(ANAKIM_TEMPLATE_ID, LILITH_TEMPLATE_ID);
+ addStartNpc(ANAKIM_GATEKEEPER_SPIRIT, LILITH_GATEKEEPER_SPIRIT);
+ addTalkId(ANAKIM_GATEKEEPER_SPIRIT, LILITH_GATEKEEPER_SPIRIT, GATEKEEPER_SPIRIT_OUT_TELEPORT);
+ addKillId(ANAKIM, LILITH);
+ addAttackId(ANAKIM, LILITH);
+ addInstanceLeaveId(ANAKIM_TEMPLATE_ID, LILITH_TEMPLATE_ID);
+ }
+
+ @Override
+ public String onAdvEvent(String event, Npc npc, PlayerInstance player)
+ {
+ switch (event)
+ {
+ case "ANAKIM_ENTER":
+ {
+ if (player.isInParty())
+ {
+ final Party party = player.getParty();
+ final boolean isInCC = party.isInCommandChannel();
+ final List members = (isInCC) ? party.getCommandChannel().getMembers() : party.getMembers();
+
+ if (members.size() > (MAX_PLAYERS_IN_ZONE - _anakim_zone.getPlayersInside().size()))
+ {
+ player.sendMessage("Lilith Sanctum reached 300 players. You cannot enter now.");
+ }
+ else
+ {
+ for (PlayerInstance member : members)
+ {
+ if (!member.isInsideRadius3D(npc, 1000))
+ {
+ player.sendMessage("Player " + member.getName() + " must go closer to Gatekeeper Spirit.");
+ }
+ enterInstance(member, npc, ANAKIM_TEMPLATE_ID);
+ }
+ }
+ }
+ else if (player.isGM())
+ {
+ enterInstance(player, npc, ANAKIM_TEMPLATE_ID);
+ player.sendMessage("SYS: You have entered as GM/Admin to Anakim Instance");
+ }
+ else
+ {
+ if (!player.isInsideRadius3D(npc, 1000))
+ {
+ player.sendMessage("You must go closer to Gatekeeper Spirit.");
+ }
+ enterInstance(player, npc, ANAKIM_TEMPLATE_ID);
+ }
+ break;
+ }
+ case "LILITH_ENTER":
+ {
+ if (player.isInParty())
+ {
+ final Party party = player.getParty();
+ final boolean isInCC = party.isInCommandChannel();
+ final List members = (isInCC) ? party.getCommandChannel().getMembers() : party.getMembers();
+
+ if (members.size() > (MAX_PLAYERS_IN_ZONE - _lilith_zone.getPlayersInside().size()))
+ {
+ player.sendMessage("Lilith Sanctum reached 300 players. You cannot enter now.");
+ }
+ else
+ {
+ for (PlayerInstance member : members)
+ {
+ if (!member.isInsideRadius3D(npc, 1000))
+ {
+ player.sendMessage("Player " + member.getName() + " must go closer to Gatekeeper Spirit.");
+ }
+ enterInstance(member, npc, LILITH_TEMPLATE_ID);
+ }
+ }
+ }
+ else if (player.isGM())
+ {
+ enterInstance(player, npc, LILITH_TEMPLATE_ID);
+ player.sendMessage("SYS: You have entered as GM/Admin to Anakim Instance");
+ }
+ else
+ {
+ if (!player.isInsideRadius3D(npc, 1000))
+ {
+ player.sendMessage("You must go closer to Gatekeeper Spirit.");
+ }
+ enterInstance(player, npc, LILITH_TEMPLATE_ID);
+ }
+ break;
+ }
+ case "REMOVE_PLAYERS_FROM_ZONE_ANAKIM":
+ {
+ for (Creature charInside : _anakim_zone.getCharactersInside())
+ {
+ if (charInside != null)
+ {
+ if (charInside.isPlayer())
+ {
+ charInside.teleToLocation(-20185 + getRandom(50), 13476 + getRandom(50), -4901);
+ }
+ }
+ }
+ break;
+ }
+ case "REMOVE_PLAYERS_FROM_ZONE_LILITH":
+ {
+ for (Creature charInside : _lilith_zone.getCharactersInside())
+ {
+ if (charInside != null)
+ {
+ if (charInside.isPlayer())
+ {
+ charInside.teleToLocation(171346 + getRandom(50), -17599 + getRandom(50), -4901);
+ }
+ }
+ }
+ break;
+ }
+ case "TELEPORT_OUT":
+ {
+ // TODO: Different teleport location from instance.
+ // switch (player.getInstanceId())
+ // {
+ // case ANAKIM_TEMPLATE_ID:
+ // {
+ // final Location destination = TELEPORT_TO_DARK_ELVEN[getRandom(TELEPORT_TO_DARK_ELVEN.length)];
+ // player.teleToLocation(destination.getX() + getRandom(100), destination.getY() + getRandom(100), destination.getZ());
+ // break;
+ // }
+ // case LILITH_TEMPLATE_ID:
+ // {
+ // final Location destination = TELEPORT_TO_ADEN[getRandom(TELEPORT_TO_ADEN.length)];
+ // player.teleToLocation(destination.getX() + getRandom(100), destination.getY() + getRandom(100), destination.getZ());
+ // break;
+ // }
+ // }
+ final Location destination = TELEPORT_TO_DARK_ELVEN[getRandom(TELEPORT_TO_DARK_ELVEN.length)];
+ player.teleToLocation(destination.getX() + getRandom(100), destination.getY() + getRandom(100), destination.getZ());
+ break;
+ }
+ case "ANAKIM_DEATH_CAST_LILITH_INVUL":
+ {
+ // TODO: When one RB die, the second will be invul for 5 minutes.
+ break;
+ }
+ case "LILITH_DEATH_CAST_ANAKIM_INVUL":
+ {
+ // TODO: When one RB die, the second will be invul for 5 minutes.
+ break;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public String onKill(Npc npc, PlayerInstance player, boolean isSummon)
+ {
+ switch (npc.getId())
+ {
+ case ANAKIM:
+ {
+ // TODO:
+ // startQuestTimer("ANAKIM_DEATH_CAST_LILITH_INVUL", 1000, null, null);
+ startQuestTimer("REMOVE_PLAYERS_FROM_ZONE_ANAKIM", 600000, null, player);
+ addSpawn(GATEKEEPER_SPIRIT_OUT_TELEPORT, -6664, 18501, -5495, 0, false, 600000, false, npc.getInstanceId());
+ break;
+ }
+ case LILITH:
+ {
+ // TODO:
+ // startQuestTimer("LILITH_DEATH_CAST_ANAKIM_INVUL", 1000, null, null);
+ startQuestTimer("REMOVE_PLAYERS_FROM_ZONE_LILITH", 600000, null, player);
+ addSpawn(GATEKEEPER_SPIRIT_OUT_TELEPORT, 185062, -9612, -5493, 0, false, 600000, false, npc.getInstanceId());
+ break;
+ }
+ }
+ final Instance world = npc.getInstanceWorld();
+ if (world != null)
+ {
+ world.finishInstance();
+ }
+ return super.onKill(npc, player, isSummon);
+ }
+
+ public static void main(String[] args)
+ {
+ new SevenSignsRBs();
+ }
+}
diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/zones/no_restart.xml b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/zones/no_restart.xml
index 5efbfe3bd9..a7be76e3c1 100644
--- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/zones/no_restart.xml
+++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/zones/no_restart.xml
@@ -328,4 +328,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/31087.htm b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/31087.htm
new file mode 100644
index 0000000000..9ec75240c9
--- /dev/null
+++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/31087.htm
@@ -0,0 +1,12 @@
+
+Gatekeeper Spirit:
+A voice seems to emanate from a shining blue sphere:
+
+It is a sacred place where Lilith lays. I guard the path.
+
+
+Remember, you cannot go back until all of your enemies are destroyed. And if you are unable to defeat them, magic must be used.
+
+
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/31088.htm b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/31088.htm
new file mode 100644
index 0000000000..2fd631a2d6
--- /dev/null
+++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/31088.htm
@@ -0,0 +1,6 @@
+
+Gatekeeper Spirit:
+Teleport out from the Sanctum
+
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/31089.htm b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/31089.htm
new file mode 100644
index 0000000000..7a51055f6f
--- /dev/null
+++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/31089.htm
@@ -0,0 +1,12 @@
+
+Gatekeeper Spirit:
+A voice seems to emanate from a shining blue sphere:
+
+It is a sacred place where Anakim lays. I guard the path.
+
+
+Remember, you cannot go back until all of your enemies are destroyed. And if you are unable to defeat them, magic must be used.
+
+
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/instances/SanctumOfAnakim.xml b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/instances/SanctumOfAnakim.xml
new file mode 100644
index 0000000000..7040769bb4
--- /dev/null
+++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/instances/SanctumOfAnakim.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/instances/SanctumOfLilith.xml b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/instances/SanctumOfLilith.xml
new file mode 100644
index 0000000000..741f9954ce
--- /dev/null
+++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/instances/SanctumOfLilith.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/instances/SevenSignsRBs/SevenSignsRBs.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/instances/SevenSignsRBs/SevenSignsRBs.java
new file mode 100644
index 0000000000..a5119bfb1f
--- /dev/null
+++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/instances/SevenSignsRBs/SevenSignsRBs.java
@@ -0,0 +1,260 @@
+/*
+ * 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 .
+ */
+package instances.SevenSignsRBs;
+
+import java.util.List;
+
+import org.l2jmobius.gameserver.instancemanager.ZoneManager;
+import org.l2jmobius.gameserver.model.Location;
+import org.l2jmobius.gameserver.model.Party;
+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.instancezone.Instance;
+import org.l2jmobius.gameserver.model.zone.type.NoRestartZone;
+
+import instances.AbstractInstance;
+
+/**
+ * @author RobikBobik
+ * @NOTE: Retail like work
+ * @TODO: When one RB die, the second will be invul for 5 minutes.
+ */
+public class SevenSignsRBs extends AbstractInstance
+{
+ // NPCs
+ private static final int ANAKIM_GATEKEEPER_SPIRIT = 31089;
+ private static final int LILITH_GATEKEEPER_SPIRIT = 31087;
+ private static final int GATEKEEPER_SPIRIT_OUT_TELEPORT = 31088;
+ private static final int ANAKIM = 25286;
+ private static final int LILITH = 25283;
+
+ // Misc
+ private static final int ANAKIM_TEMPLATE_ID = 200;
+ private static final int LILITH_TEMPLATE_ID = 199;
+
+ private static int MAX_PLAYERS_IN_ZONE = 300;
+
+ private static final NoRestartZone _anakim_zone = ZoneManager.getInstance().getZoneById(70052, NoRestartZone.class);
+ private static final NoRestartZone _lilith_zone = ZoneManager.getInstance().getZoneById(70053, NoRestartZone.class);
+
+ // TELEPORTS
+ private static final Location[] TELEPORT_TO_DARK_ELVEN =
+ {
+ new Location(12168, 17149, -4575),
+ new Location(11688, 18219, -4585),
+ new Location(10502, 17112, -4588),
+ new Location(11169, 15922, -4585),
+ };
+
+ // TODO: When teleport from instance done. Enable it
+ /*
+ * private static final Location[] TELEPORT_TO_ADEN = { new Location(148053, 26935, -2206), new Location(148053, 28017, -2269), new Location(146558, 28017, -2269), new Location(146558, 26935, -2206), };
+ */
+
+ public SevenSignsRBs()
+ {
+ super(ANAKIM_TEMPLATE_ID, LILITH_TEMPLATE_ID);
+ addStartNpc(ANAKIM_GATEKEEPER_SPIRIT, LILITH_GATEKEEPER_SPIRIT);
+ addTalkId(ANAKIM_GATEKEEPER_SPIRIT, LILITH_GATEKEEPER_SPIRIT, GATEKEEPER_SPIRIT_OUT_TELEPORT);
+ addKillId(ANAKIM, LILITH);
+ addAttackId(ANAKIM, LILITH);
+ addInstanceLeaveId(ANAKIM_TEMPLATE_ID, LILITH_TEMPLATE_ID);
+ }
+
+ @Override
+ public String onAdvEvent(String event, Npc npc, PlayerInstance player)
+ {
+ switch (event)
+ {
+ case "ANAKIM_ENTER":
+ {
+ if (player.isInParty())
+ {
+ final Party party = player.getParty();
+ final boolean isInCC = party.isInCommandChannel();
+ final List members = (isInCC) ? party.getCommandChannel().getMembers() : party.getMembers();
+
+ if (members.size() > (MAX_PLAYERS_IN_ZONE - _anakim_zone.getPlayersInside().size()))
+ {
+ player.sendMessage("Lilith Sanctum reached 300 players. You cannot enter now.");
+ }
+ else
+ {
+ for (PlayerInstance member : members)
+ {
+ if (!member.isInsideRadius3D(npc, 1000))
+ {
+ player.sendMessage("Player " + member.getName() + " must go closer to Gatekeeper Spirit.");
+ }
+ enterInstance(member, npc, ANAKIM_TEMPLATE_ID);
+ }
+ }
+ }
+ else if (player.isGM())
+ {
+ enterInstance(player, npc, ANAKIM_TEMPLATE_ID);
+ player.sendMessage("SYS: You have entered as GM/Admin to Anakim Instance");
+ }
+ else
+ {
+ if (!player.isInsideRadius3D(npc, 1000))
+ {
+ player.sendMessage("You must go closer to Gatekeeper Spirit.");
+ }
+ enterInstance(player, npc, ANAKIM_TEMPLATE_ID);
+ }
+ break;
+ }
+ case "LILITH_ENTER":
+ {
+ if (player.isInParty())
+ {
+ final Party party = player.getParty();
+ final boolean isInCC = party.isInCommandChannel();
+ final List members = (isInCC) ? party.getCommandChannel().getMembers() : party.getMembers();
+
+ if (members.size() > (MAX_PLAYERS_IN_ZONE - _lilith_zone.getPlayersInside().size()))
+ {
+ player.sendMessage("Lilith Sanctum reached 300 players. You cannot enter now.");
+ }
+ else
+ {
+ for (PlayerInstance member : members)
+ {
+ if (!member.isInsideRadius3D(npc, 1000))
+ {
+ player.sendMessage("Player " + member.getName() + " must go closer to Gatekeeper Spirit.");
+ }
+ enterInstance(member, npc, LILITH_TEMPLATE_ID);
+ }
+ }
+ }
+ else if (player.isGM())
+ {
+ enterInstance(player, npc, LILITH_TEMPLATE_ID);
+ player.sendMessage("SYS: You have entered as GM/Admin to Anakim Instance");
+ }
+ else
+ {
+ if (!player.isInsideRadius3D(npc, 1000))
+ {
+ player.sendMessage("You must go closer to Gatekeeper Spirit.");
+ }
+ enterInstance(player, npc, LILITH_TEMPLATE_ID);
+ }
+ break;
+ }
+ case "REMOVE_PLAYERS_FROM_ZONE_ANAKIM":
+ {
+ for (Creature charInside : _anakim_zone.getCharactersInside())
+ {
+ if (charInside != null)
+ {
+ if (charInside.isPlayer())
+ {
+ charInside.teleToLocation(-20185 + getRandom(50), 13476 + getRandom(50), -4901);
+ }
+ }
+ }
+ break;
+ }
+ case "REMOVE_PLAYERS_FROM_ZONE_LILITH":
+ {
+ for (Creature charInside : _lilith_zone.getCharactersInside())
+ {
+ if (charInside != null)
+ {
+ if (charInside.isPlayer())
+ {
+ charInside.teleToLocation(171346 + getRandom(50), -17599 + getRandom(50), -4901);
+ }
+ }
+ }
+ break;
+ }
+ case "TELEPORT_OUT":
+ {
+ // TODO: Different teleport location from instance.
+ // switch (player.getInstanceId())
+ // {
+ // case ANAKIM_TEMPLATE_ID:
+ // {
+ // final Location destination = TELEPORT_TO_DARK_ELVEN[getRandom(TELEPORT_TO_DARK_ELVEN.length)];
+ // player.teleToLocation(destination.getX() + getRandom(100), destination.getY() + getRandom(100), destination.getZ());
+ // break;
+ // }
+ // case LILITH_TEMPLATE_ID:
+ // {
+ // final Location destination = TELEPORT_TO_ADEN[getRandom(TELEPORT_TO_ADEN.length)];
+ // player.teleToLocation(destination.getX() + getRandom(100), destination.getY() + getRandom(100), destination.getZ());
+ // break;
+ // }
+ // }
+ final Location destination = TELEPORT_TO_DARK_ELVEN[getRandom(TELEPORT_TO_DARK_ELVEN.length)];
+ player.teleToLocation(destination.getX() + getRandom(100), destination.getY() + getRandom(100), destination.getZ());
+ break;
+ }
+ case "ANAKIM_DEATH_CAST_LILITH_INVUL":
+ {
+ // TODO: When one RB die, the second will be invul for 5 minutes.
+ break;
+ }
+ case "LILITH_DEATH_CAST_ANAKIM_INVUL":
+ {
+ // TODO: When one RB die, the second will be invul for 5 minutes.
+ break;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public String onKill(Npc npc, PlayerInstance player, boolean isSummon)
+ {
+ switch (npc.getId())
+ {
+ case ANAKIM:
+ {
+ // TODO:
+ // startQuestTimer("ANAKIM_DEATH_CAST_LILITH_INVUL", 1000, null, null);
+ startQuestTimer("REMOVE_PLAYERS_FROM_ZONE_ANAKIM", 600000, null, player);
+ addSpawn(GATEKEEPER_SPIRIT_OUT_TELEPORT, -6664, 18501, -5495, 0, false, 600000, false, npc.getInstanceId());
+ break;
+ }
+ case LILITH:
+ {
+ // TODO:
+ // startQuestTimer("LILITH_DEATH_CAST_ANAKIM_INVUL", 1000, null, null);
+ startQuestTimer("REMOVE_PLAYERS_FROM_ZONE_LILITH", 600000, null, player);
+ addSpawn(GATEKEEPER_SPIRIT_OUT_TELEPORT, 185062, -9612, -5493, 0, false, 600000, false, npc.getInstanceId());
+ break;
+ }
+ }
+ final Instance world = npc.getInstanceWorld();
+ if (world != null)
+ {
+ world.finishInstance();
+ }
+ return super.onKill(npc, player, isSummon);
+ }
+
+ public static void main(String[] args)
+ {
+ new SevenSignsRBs();
+ }
+}
diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/zones/no_restart.xml b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/zones/no_restart.xml
index 5efbfe3bd9..a7be76e3c1 100644
--- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/zones/no_restart.xml
+++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/zones/no_restart.xml
@@ -328,4 +328,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/31087.htm b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/31087.htm
new file mode 100644
index 0000000000..3500f9a91f
--- /dev/null
+++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/31087.htm
@@ -0,0 +1,12 @@
+
+Gatekeeper Spirit:
+A voice seems to emanate from a shining blue sphere:
+
+It is a sacred place where Lilith lays. I guard the path.
+
+
+Remember, you cannot go back until all of your enemies are destroyed. And if you are unable to defeat them, magic must be used.
+
+
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/31088.htm b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/31088.htm
new file mode 100644
index 0000000000..2fd631a2d6
--- /dev/null
+++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/31088.htm
@@ -0,0 +1,6 @@
+
+Gatekeeper Spirit:
+Teleport out from the Sanctum
+
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/31089.htm b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/31089.htm
new file mode 100644
index 0000000000..96814ac2d8
--- /dev/null
+++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/31089.htm
@@ -0,0 +1,12 @@
+
+Gatekeeper Spirit:
+A voice seems to emanate from a shining blue sphere:
+
+It is a sacred place where Anakim lays. I guard the path.
+
+
+Remember, you cannot go back until all of your enemies are destroyed. And if you are unable to defeat them, magic must be used.
+
+
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/instances/SanctumOfAnakim.xml b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/instances/SanctumOfAnakim.xml
new file mode 100644
index 0000000000..7040769bb4
--- /dev/null
+++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/instances/SanctumOfAnakim.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/instances/SanctumOfLilith.xml b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/instances/SanctumOfLilith.xml
new file mode 100644
index 0000000000..741f9954ce
--- /dev/null
+++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/instances/SanctumOfLilith.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/instances/SevenSignsRBs/SevenSignsRBs.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/instances/SevenSignsRBs/SevenSignsRBs.java
new file mode 100644
index 0000000000..a5119bfb1f
--- /dev/null
+++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/instances/SevenSignsRBs/SevenSignsRBs.java
@@ -0,0 +1,260 @@
+/*
+ * 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 .
+ */
+package instances.SevenSignsRBs;
+
+import java.util.List;
+
+import org.l2jmobius.gameserver.instancemanager.ZoneManager;
+import org.l2jmobius.gameserver.model.Location;
+import org.l2jmobius.gameserver.model.Party;
+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.instancezone.Instance;
+import org.l2jmobius.gameserver.model.zone.type.NoRestartZone;
+
+import instances.AbstractInstance;
+
+/**
+ * @author RobikBobik
+ * @NOTE: Retail like work
+ * @TODO: When one RB die, the second will be invul for 5 minutes.
+ */
+public class SevenSignsRBs extends AbstractInstance
+{
+ // NPCs
+ private static final int ANAKIM_GATEKEEPER_SPIRIT = 31089;
+ private static final int LILITH_GATEKEEPER_SPIRIT = 31087;
+ private static final int GATEKEEPER_SPIRIT_OUT_TELEPORT = 31088;
+ private static final int ANAKIM = 25286;
+ private static final int LILITH = 25283;
+
+ // Misc
+ private static final int ANAKIM_TEMPLATE_ID = 200;
+ private static final int LILITH_TEMPLATE_ID = 199;
+
+ private static int MAX_PLAYERS_IN_ZONE = 300;
+
+ private static final NoRestartZone _anakim_zone = ZoneManager.getInstance().getZoneById(70052, NoRestartZone.class);
+ private static final NoRestartZone _lilith_zone = ZoneManager.getInstance().getZoneById(70053, NoRestartZone.class);
+
+ // TELEPORTS
+ private static final Location[] TELEPORT_TO_DARK_ELVEN =
+ {
+ new Location(12168, 17149, -4575),
+ new Location(11688, 18219, -4585),
+ new Location(10502, 17112, -4588),
+ new Location(11169, 15922, -4585),
+ };
+
+ // TODO: When teleport from instance done. Enable it
+ /*
+ * private static final Location[] TELEPORT_TO_ADEN = { new Location(148053, 26935, -2206), new Location(148053, 28017, -2269), new Location(146558, 28017, -2269), new Location(146558, 26935, -2206), };
+ */
+
+ public SevenSignsRBs()
+ {
+ super(ANAKIM_TEMPLATE_ID, LILITH_TEMPLATE_ID);
+ addStartNpc(ANAKIM_GATEKEEPER_SPIRIT, LILITH_GATEKEEPER_SPIRIT);
+ addTalkId(ANAKIM_GATEKEEPER_SPIRIT, LILITH_GATEKEEPER_SPIRIT, GATEKEEPER_SPIRIT_OUT_TELEPORT);
+ addKillId(ANAKIM, LILITH);
+ addAttackId(ANAKIM, LILITH);
+ addInstanceLeaveId(ANAKIM_TEMPLATE_ID, LILITH_TEMPLATE_ID);
+ }
+
+ @Override
+ public String onAdvEvent(String event, Npc npc, PlayerInstance player)
+ {
+ switch (event)
+ {
+ case "ANAKIM_ENTER":
+ {
+ if (player.isInParty())
+ {
+ final Party party = player.getParty();
+ final boolean isInCC = party.isInCommandChannel();
+ final List members = (isInCC) ? party.getCommandChannel().getMembers() : party.getMembers();
+
+ if (members.size() > (MAX_PLAYERS_IN_ZONE - _anakim_zone.getPlayersInside().size()))
+ {
+ player.sendMessage("Lilith Sanctum reached 300 players. You cannot enter now.");
+ }
+ else
+ {
+ for (PlayerInstance member : members)
+ {
+ if (!member.isInsideRadius3D(npc, 1000))
+ {
+ player.sendMessage("Player " + member.getName() + " must go closer to Gatekeeper Spirit.");
+ }
+ enterInstance(member, npc, ANAKIM_TEMPLATE_ID);
+ }
+ }
+ }
+ else if (player.isGM())
+ {
+ enterInstance(player, npc, ANAKIM_TEMPLATE_ID);
+ player.sendMessage("SYS: You have entered as GM/Admin to Anakim Instance");
+ }
+ else
+ {
+ if (!player.isInsideRadius3D(npc, 1000))
+ {
+ player.sendMessage("You must go closer to Gatekeeper Spirit.");
+ }
+ enterInstance(player, npc, ANAKIM_TEMPLATE_ID);
+ }
+ break;
+ }
+ case "LILITH_ENTER":
+ {
+ if (player.isInParty())
+ {
+ final Party party = player.getParty();
+ final boolean isInCC = party.isInCommandChannel();
+ final List members = (isInCC) ? party.getCommandChannel().getMembers() : party.getMembers();
+
+ if (members.size() > (MAX_PLAYERS_IN_ZONE - _lilith_zone.getPlayersInside().size()))
+ {
+ player.sendMessage("Lilith Sanctum reached 300 players. You cannot enter now.");
+ }
+ else
+ {
+ for (PlayerInstance member : members)
+ {
+ if (!member.isInsideRadius3D(npc, 1000))
+ {
+ player.sendMessage("Player " + member.getName() + " must go closer to Gatekeeper Spirit.");
+ }
+ enterInstance(member, npc, LILITH_TEMPLATE_ID);
+ }
+ }
+ }
+ else if (player.isGM())
+ {
+ enterInstance(player, npc, LILITH_TEMPLATE_ID);
+ player.sendMessage("SYS: You have entered as GM/Admin to Anakim Instance");
+ }
+ else
+ {
+ if (!player.isInsideRadius3D(npc, 1000))
+ {
+ player.sendMessage("You must go closer to Gatekeeper Spirit.");
+ }
+ enterInstance(player, npc, LILITH_TEMPLATE_ID);
+ }
+ break;
+ }
+ case "REMOVE_PLAYERS_FROM_ZONE_ANAKIM":
+ {
+ for (Creature charInside : _anakim_zone.getCharactersInside())
+ {
+ if (charInside != null)
+ {
+ if (charInside.isPlayer())
+ {
+ charInside.teleToLocation(-20185 + getRandom(50), 13476 + getRandom(50), -4901);
+ }
+ }
+ }
+ break;
+ }
+ case "REMOVE_PLAYERS_FROM_ZONE_LILITH":
+ {
+ for (Creature charInside : _lilith_zone.getCharactersInside())
+ {
+ if (charInside != null)
+ {
+ if (charInside.isPlayer())
+ {
+ charInside.teleToLocation(171346 + getRandom(50), -17599 + getRandom(50), -4901);
+ }
+ }
+ }
+ break;
+ }
+ case "TELEPORT_OUT":
+ {
+ // TODO: Different teleport location from instance.
+ // switch (player.getInstanceId())
+ // {
+ // case ANAKIM_TEMPLATE_ID:
+ // {
+ // final Location destination = TELEPORT_TO_DARK_ELVEN[getRandom(TELEPORT_TO_DARK_ELVEN.length)];
+ // player.teleToLocation(destination.getX() + getRandom(100), destination.getY() + getRandom(100), destination.getZ());
+ // break;
+ // }
+ // case LILITH_TEMPLATE_ID:
+ // {
+ // final Location destination = TELEPORT_TO_ADEN[getRandom(TELEPORT_TO_ADEN.length)];
+ // player.teleToLocation(destination.getX() + getRandom(100), destination.getY() + getRandom(100), destination.getZ());
+ // break;
+ // }
+ // }
+ final Location destination = TELEPORT_TO_DARK_ELVEN[getRandom(TELEPORT_TO_DARK_ELVEN.length)];
+ player.teleToLocation(destination.getX() + getRandom(100), destination.getY() + getRandom(100), destination.getZ());
+ break;
+ }
+ case "ANAKIM_DEATH_CAST_LILITH_INVUL":
+ {
+ // TODO: When one RB die, the second will be invul for 5 minutes.
+ break;
+ }
+ case "LILITH_DEATH_CAST_ANAKIM_INVUL":
+ {
+ // TODO: When one RB die, the second will be invul for 5 minutes.
+ break;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public String onKill(Npc npc, PlayerInstance player, boolean isSummon)
+ {
+ switch (npc.getId())
+ {
+ case ANAKIM:
+ {
+ // TODO:
+ // startQuestTimer("ANAKIM_DEATH_CAST_LILITH_INVUL", 1000, null, null);
+ startQuestTimer("REMOVE_PLAYERS_FROM_ZONE_ANAKIM", 600000, null, player);
+ addSpawn(GATEKEEPER_SPIRIT_OUT_TELEPORT, -6664, 18501, -5495, 0, false, 600000, false, npc.getInstanceId());
+ break;
+ }
+ case LILITH:
+ {
+ // TODO:
+ // startQuestTimer("LILITH_DEATH_CAST_ANAKIM_INVUL", 1000, null, null);
+ startQuestTimer("REMOVE_PLAYERS_FROM_ZONE_LILITH", 600000, null, player);
+ addSpawn(GATEKEEPER_SPIRIT_OUT_TELEPORT, 185062, -9612, -5493, 0, false, 600000, false, npc.getInstanceId());
+ break;
+ }
+ }
+ final Instance world = npc.getInstanceWorld();
+ if (world != null)
+ {
+ world.finishInstance();
+ }
+ return super.onKill(npc, player, isSummon);
+ }
+
+ public static void main(String[] args)
+ {
+ new SevenSignsRBs();
+ }
+}
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/zones/no_restart.xml b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/zones/no_restart.xml
index 5efbfe3bd9..a7be76e3c1 100644
--- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/zones/no_restart.xml
+++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/zones/no_restart.xml
@@ -328,4 +328,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file