Addition of Anakim and Lilith AI.
Contributed by robikbobik.
This commit is contained in:
parent
3ccf8a8c65
commit
4a2632a85e
12
L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/31087.htm
vendored
Normal file
12
L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/31087.htm
vendored
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<html><body>
|
||||||
|
Gatekeeper Spirit:<br>
|
||||||
|
A voice seems to emanate from a shining blue sphere:
|
||||||
|
<br>
|
||||||
|
It is a sacred place where <font color="LEVEL">Lilith</font> lays. I guard the path.
|
||||||
|
<br>
|
||||||
|
<font color="LEVEL">
|
||||||
|
Remember, you cannot go back until all of your enemies are destroyed. And if you are unable to defeat them, magic must be used.
|
||||||
|
</font>
|
||||||
|
<br>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Quest SevenSignsRBs LILITH_ENTER">Teleport to Lilith’s Sanctum</Button>
|
||||||
|
</body></html>
|
6
L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/31088.htm
vendored
Normal file
6
L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/31088.htm
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<html><body>
|
||||||
|
Gatekeeper Spirit:<br>
|
||||||
|
Teleport out from the Sanctum
|
||||||
|
<br>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Quest SevenSignsRBs TELEPORT_OUT">"Yes, teleport me."</Button>
|
||||||
|
</body></html>
|
12
L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/31089.htm
vendored
Normal file
12
L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/31089.htm
vendored
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<html><body>
|
||||||
|
Gatekeeper Spirit:<br>
|
||||||
|
A voice seems to emanate from a shining blue sphere:
|
||||||
|
<br>
|
||||||
|
It is a sacred place where <font color="LEVEL">Anakim</font> lays. I guard the path.
|
||||||
|
<br>
|
||||||
|
<font color="LEVEL">
|
||||||
|
Remember, you cannot go back until all of your enemies are destroyed. And if you are unable to defeat them, magic must be used.
|
||||||
|
</font>
|
||||||
|
<br>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Quest SevenSignsRBs ANAKIM_ENTER">Teleport to Anakim’s Sanctum</Button>
|
||||||
|
</body></html>
|
33
L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/instances/SanctumOfAnakim.xml
vendored
Normal file
33
L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/instances/SanctumOfAnakim.xml
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<instance id="200" maxWorlds="80" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
|
||||||
|
<time duration="120" empty="0" />
|
||||||
|
<removeBuffs type="ALL" />
|
||||||
|
<locations>
|
||||||
|
<enter type="FIXED">
|
||||||
|
<location x="-6704" y="19121" z="-5493" />
|
||||||
|
</enter>
|
||||||
|
<exit type="ORIGIN" />
|
||||||
|
</locations>
|
||||||
|
<conditions>
|
||||||
|
<condition type="Party" />
|
||||||
|
<condition type="CommandChannel" />
|
||||||
|
<condition type="CommandChannelLeader" />
|
||||||
|
<condition type="GroupMin">
|
||||||
|
<param name="limit" value="90" />
|
||||||
|
</condition>
|
||||||
|
<condition type="Level">
|
||||||
|
<param name="min" value="76" />
|
||||||
|
</condition>
|
||||||
|
<condition type="Distance" />
|
||||||
|
<condition type="Reenter" />
|
||||||
|
</conditions>
|
||||||
|
<!--<reenter apply="ON_ENTER">
|
||||||
|
<reset day="TUESDAY" hour="9" minute="00" />
|
||||||
|
<reset day="FRIDAY" hour="9" minute="00" />
|
||||||
|
</reenter>-->
|
||||||
|
<spawnlist>
|
||||||
|
<group>
|
||||||
|
<npc id="25286" x="-6664" y="18505" z="-5493" heading="48103" /> <!-- Anakim -->
|
||||||
|
</group>
|
||||||
|
</spawnlist>
|
||||||
|
</instance>
|
33
L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/instances/SanctumOfLilith.xml
vendored
Normal file
33
L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/instances/SanctumOfLilith.xml
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<instance id="199" maxWorlds="80" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
|
||||||
|
<time duration="120" empty="10" />
|
||||||
|
<removeBuffs type="ALL" />
|
||||||
|
<locations>
|
||||||
|
<enter type="FIXED">
|
||||||
|
<location x="185657" y="-10112" z="-5496" />
|
||||||
|
</enter>
|
||||||
|
<exit type="ORIGIN" />
|
||||||
|
</locations>
|
||||||
|
<conditions>
|
||||||
|
<condition type="Party" />
|
||||||
|
<condition type="CommandChannel" />
|
||||||
|
<condition type="CommandChannelLeader" />
|
||||||
|
<condition type="GroupMin">
|
||||||
|
<param name="limit" value="90" />
|
||||||
|
</condition>
|
||||||
|
<condition type="Level">
|
||||||
|
<param name="min" value="76" />
|
||||||
|
</condition>
|
||||||
|
<condition type="Distance" />
|
||||||
|
<condition type="Reenter" />
|
||||||
|
</conditions>
|
||||||
|
<!--<reenter apply="ON_ENTER">
|
||||||
|
<reset day="TUESDAY" hour="9" minute="00" />
|
||||||
|
<reset day="FRIDAY" hour="9" minute="00" />
|
||||||
|
</reenter>-->
|
||||||
|
<spawnlist>
|
||||||
|
<group>
|
||||||
|
<npc id="25283" x="185067" y="-9616" z="-5493" heading="48103" /> <!-- Lilith -->
|
||||||
|
</group>
|
||||||
|
</spawnlist>
|
||||||
|
</instance>
|
260
L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/instances/SevenSignsRBs/SevenSignsRBs.java
vendored
Normal file
260
L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/instances/SevenSignsRBs/SevenSignsRBs.java
vendored
Normal file
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
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<PlayerInstance> 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<PlayerInstance> 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();
|
||||||
|
}
|
||||||
|
}
|
@ -328,4 +328,22 @@
|
|||||||
<node X="-98296" Y="-262136" />
|
<node X="-98296" Y="-262136" />
|
||||||
<node X="-65544" Y="-229384" />
|
<node X="-65544" Y="-229384" />
|
||||||
</zone>
|
</zone>
|
||||||
|
|
||||||
|
<!-- Classic: The Kamael zone -->
|
||||||
|
<zone name="anakim" id="70052" type="NoRestartZone" shape="NPoly" minZ="-5000" maxZ="-5600">
|
||||||
|
<stat name="restartTime" val="1800" />
|
||||||
|
<stat name="restartAllowedTime" val="600" />
|
||||||
|
<node X="-5760" Y="19420" />
|
||||||
|
<node X="-7590" Y="19420" />
|
||||||
|
<node X="-7590" Y="17586" />
|
||||||
|
<node X="-5760" Y="17586" />
|
||||||
|
</zone>
|
||||||
|
<zone name="lilith" id="70053" type="NoRestartZone" shape="NPoly" minZ="-5400" maxZ="-5600">
|
||||||
|
<stat name="restartTime" val="1800" />
|
||||||
|
<stat name="restartAllowedTime" val="600" />
|
||||||
|
<node X="185996" Y="-10519" />
|
||||||
|
<node X="185969" Y="-8693" />
|
||||||
|
<node X="184148" Y="-8703" />
|
||||||
|
<node X="184149" Y="-10523" />
|
||||||
|
</zone>
|
||||||
</list>
|
</list>
|
12
L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/31087.htm
vendored
Normal file
12
L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/31087.htm
vendored
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<html><body>
|
||||||
|
Gatekeeper Spirit:<br>
|
||||||
|
A voice seems to emanate from a shining blue sphere:
|
||||||
|
<br>
|
||||||
|
It is a sacred place where <font color="LEVEL">Lilith</font> lays. I guard the path.
|
||||||
|
<br>
|
||||||
|
<font color="LEVEL">
|
||||||
|
Remember, you cannot go back until all of your enemies are destroyed. And if you are unable to defeat them, magic must be used.
|
||||||
|
</font>
|
||||||
|
<br>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Quest SevenSignsRBs LILITH_ENTER">Teleport to Lilith’s Sanctum</Button>
|
||||||
|
</body></html>
|
6
L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/31088.htm
vendored
Normal file
6
L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/31088.htm
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<html><body>
|
||||||
|
Gatekeeper Spirit:<br>
|
||||||
|
Teleport out from the Sanctum
|
||||||
|
<br>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Quest SevenSignsRBs TELEPORT_OUT">"Yes, teleport me."</Button>
|
||||||
|
</body></html>
|
12
L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/31089.htm
vendored
Normal file
12
L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/31089.htm
vendored
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<html><body>
|
||||||
|
Gatekeeper Spirit:<br>
|
||||||
|
A voice seems to emanate from a shining blue sphere:
|
||||||
|
<br>
|
||||||
|
It is a sacred place where <font color="LEVEL">Anakim</font> lays. I guard the path.
|
||||||
|
<br>
|
||||||
|
<font color="LEVEL">
|
||||||
|
Remember, you cannot go back until all of your enemies are destroyed. And if you are unable to defeat them, magic must be used.
|
||||||
|
</font>
|
||||||
|
<br>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Quest SevenSignsRBs ANAKIM_ENTER">Teleport to Anakim’s Sanctum</Button>
|
||||||
|
</body></html>
|
33
L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/instances/SanctumOfAnakim.xml
vendored
Normal file
33
L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/instances/SanctumOfAnakim.xml
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<instance id="200" maxWorlds="80" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
|
||||||
|
<time duration="120" empty="0" />
|
||||||
|
<removeBuffs type="ALL" />
|
||||||
|
<locations>
|
||||||
|
<enter type="FIXED">
|
||||||
|
<location x="-6704" y="19121" z="-5493" />
|
||||||
|
</enter>
|
||||||
|
<exit type="ORIGIN" />
|
||||||
|
</locations>
|
||||||
|
<conditions>
|
||||||
|
<condition type="Party" />
|
||||||
|
<condition type="CommandChannel" />
|
||||||
|
<condition type="CommandChannelLeader" />
|
||||||
|
<condition type="GroupMin">
|
||||||
|
<param name="limit" value="90" />
|
||||||
|
</condition>
|
||||||
|
<condition type="Level">
|
||||||
|
<param name="min" value="76" />
|
||||||
|
</condition>
|
||||||
|
<condition type="Distance" />
|
||||||
|
<condition type="Reenter" />
|
||||||
|
</conditions>
|
||||||
|
<!--<reenter apply="ON_ENTER">
|
||||||
|
<reset day="TUESDAY" hour="9" minute="00" />
|
||||||
|
<reset day="FRIDAY" hour="9" minute="00" />
|
||||||
|
</reenter>-->
|
||||||
|
<spawnlist>
|
||||||
|
<group>
|
||||||
|
<npc id="25286" x="-6664" y="18505" z="-5493" heading="48103" /> <!-- Anakim -->
|
||||||
|
</group>
|
||||||
|
</spawnlist>
|
||||||
|
</instance>
|
33
L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/instances/SanctumOfLilith.xml
vendored
Normal file
33
L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/instances/SanctumOfLilith.xml
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<instance id="199" maxWorlds="80" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
|
||||||
|
<time duration="120" empty="10" />
|
||||||
|
<removeBuffs type="ALL" />
|
||||||
|
<locations>
|
||||||
|
<enter type="FIXED">
|
||||||
|
<location x="185657" y="-10112" z="-5496" />
|
||||||
|
</enter>
|
||||||
|
<exit type="ORIGIN" />
|
||||||
|
</locations>
|
||||||
|
<conditions>
|
||||||
|
<condition type="Party" />
|
||||||
|
<condition type="CommandChannel" />
|
||||||
|
<condition type="CommandChannelLeader" />
|
||||||
|
<condition type="GroupMin">
|
||||||
|
<param name="limit" value="90" />
|
||||||
|
</condition>
|
||||||
|
<condition type="Level">
|
||||||
|
<param name="min" value="76" />
|
||||||
|
</condition>
|
||||||
|
<condition type="Distance" />
|
||||||
|
<condition type="Reenter" />
|
||||||
|
</conditions>
|
||||||
|
<!--<reenter apply="ON_ENTER">
|
||||||
|
<reset day="TUESDAY" hour="9" minute="00" />
|
||||||
|
<reset day="FRIDAY" hour="9" minute="00" />
|
||||||
|
</reenter>-->
|
||||||
|
<spawnlist>
|
||||||
|
<group>
|
||||||
|
<npc id="25283" x="185067" y="-9616" z="-5493" heading="48103" /> <!-- Lilith -->
|
||||||
|
</group>
|
||||||
|
</spawnlist>
|
||||||
|
</instance>
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
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<PlayerInstance> 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<PlayerInstance> 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();
|
||||||
|
}
|
||||||
|
}
|
@ -328,4 +328,22 @@
|
|||||||
<node X="-98296" Y="-262136" />
|
<node X="-98296" Y="-262136" />
|
||||||
<node X="-65544" Y="-229384" />
|
<node X="-65544" Y="-229384" />
|
||||||
</zone>
|
</zone>
|
||||||
|
|
||||||
|
<!-- Classic: The Kamael zone -->
|
||||||
|
<zone name="anakim" id="70052" type="NoRestartZone" shape="NPoly" minZ="-5000" maxZ="-5600">
|
||||||
|
<stat name="restartTime" val="1800" />
|
||||||
|
<stat name="restartAllowedTime" val="600" />
|
||||||
|
<node X="-5760" Y="19420" />
|
||||||
|
<node X="-7590" Y="19420" />
|
||||||
|
<node X="-7590" Y="17586" />
|
||||||
|
<node X="-5760" Y="17586" />
|
||||||
|
</zone>
|
||||||
|
<zone name="lilith" id="70053" type="NoRestartZone" shape="NPoly" minZ="-5400" maxZ="-5600">
|
||||||
|
<stat name="restartTime" val="1800" />
|
||||||
|
<stat name="restartAllowedTime" val="600" />
|
||||||
|
<node X="185996" Y="-10519" />
|
||||||
|
<node X="185969" Y="-8693" />
|
||||||
|
<node X="184148" Y="-8703" />
|
||||||
|
<node X="184149" Y="-10523" />
|
||||||
|
</zone>
|
||||||
</list>
|
</list>
|
12
L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/31087.htm
vendored
Normal file
12
L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/31087.htm
vendored
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<html><body>
|
||||||
|
Gatekeeper Spirit:<br>
|
||||||
|
A voice seems to emanate from a shining blue sphere:
|
||||||
|
<br>
|
||||||
|
It is a sacred place where <font color="LEVEL">Lilith</font> lays. I guard the path.
|
||||||
|
<br>
|
||||||
|
<font color="LEVEL">
|
||||||
|
Remember, you cannot go back until all of your enemies are destroyed. And if you are unable to defeat them, magic must be used.
|
||||||
|
</font>
|
||||||
|
<br>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Quest SevenSignsRBs LILITH_ENTER">Teleport to Lilith’s Sanctum</Button>
|
||||||
|
</body></html>
|
6
L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/31088.htm
vendored
Normal file
6
L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/31088.htm
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<html><body>
|
||||||
|
Gatekeeper Spirit:<br>
|
||||||
|
Teleport out from the Sanctum
|
||||||
|
<br>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Quest SevenSignsRBs TELEPORT_OUT">"Yes, teleport me."</Button>
|
||||||
|
</body></html>
|
12
L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/31089.htm
vendored
Normal file
12
L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/31089.htm
vendored
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<html><body>
|
||||||
|
Gatekeeper Spirit:<br>
|
||||||
|
A voice seems to emanate from a shining blue sphere:
|
||||||
|
<br>
|
||||||
|
It is a sacred place where <font color="LEVEL">Anakim</font> lays. I guard the path.
|
||||||
|
<br>
|
||||||
|
<font color="LEVEL">
|
||||||
|
Remember, you cannot go back until all of your enemies are destroyed. And if you are unable to defeat them, magic must be used.
|
||||||
|
</font>
|
||||||
|
<br>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Quest SevenSignsRBs ANAKIM_ENTER">Teleport to Anakim’s Sanctum</Button>
|
||||||
|
</body></html>
|
33
L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/instances/SanctumOfAnakim.xml
vendored
Normal file
33
L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/instances/SanctumOfAnakim.xml
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<instance id="200" maxWorlds="80" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
|
||||||
|
<time duration="120" empty="0" />
|
||||||
|
<removeBuffs type="ALL" />
|
||||||
|
<locations>
|
||||||
|
<enter type="FIXED">
|
||||||
|
<location x="-6704" y="19121" z="-5493" />
|
||||||
|
</enter>
|
||||||
|
<exit type="ORIGIN" />
|
||||||
|
</locations>
|
||||||
|
<conditions>
|
||||||
|
<condition type="Party" />
|
||||||
|
<condition type="CommandChannel" />
|
||||||
|
<condition type="CommandChannelLeader" />
|
||||||
|
<condition type="GroupMin">
|
||||||
|
<param name="limit" value="90" />
|
||||||
|
</condition>
|
||||||
|
<condition type="Level">
|
||||||
|
<param name="min" value="76" />
|
||||||
|
</condition>
|
||||||
|
<condition type="Distance" />
|
||||||
|
<condition type="Reenter" />
|
||||||
|
</conditions>
|
||||||
|
<!--<reenter apply="ON_ENTER">
|
||||||
|
<reset day="TUESDAY" hour="9" minute="00" />
|
||||||
|
<reset day="FRIDAY" hour="9" minute="00" />
|
||||||
|
</reenter>-->
|
||||||
|
<spawnlist>
|
||||||
|
<group>
|
||||||
|
<npc id="25286" x="-6664" y="18505" z="-5493" heading="48103" /> <!-- Anakim -->
|
||||||
|
</group>
|
||||||
|
</spawnlist>
|
||||||
|
</instance>
|
33
L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/instances/SanctumOfLilith.xml
vendored
Normal file
33
L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/instances/SanctumOfLilith.xml
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<instance id="199" maxWorlds="80" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
|
||||||
|
<time duration="120" empty="10" />
|
||||||
|
<removeBuffs type="ALL" />
|
||||||
|
<locations>
|
||||||
|
<enter type="FIXED">
|
||||||
|
<location x="185657" y="-10112" z="-5496" />
|
||||||
|
</enter>
|
||||||
|
<exit type="ORIGIN" />
|
||||||
|
</locations>
|
||||||
|
<conditions>
|
||||||
|
<condition type="Party" />
|
||||||
|
<condition type="CommandChannel" />
|
||||||
|
<condition type="CommandChannelLeader" />
|
||||||
|
<condition type="GroupMin">
|
||||||
|
<param name="limit" value="90" />
|
||||||
|
</condition>
|
||||||
|
<condition type="Level">
|
||||||
|
<param name="min" value="76" />
|
||||||
|
</condition>
|
||||||
|
<condition type="Distance" />
|
||||||
|
<condition type="Reenter" />
|
||||||
|
</conditions>
|
||||||
|
<!--<reenter apply="ON_ENTER">
|
||||||
|
<reset day="TUESDAY" hour="9" minute="00" />
|
||||||
|
<reset day="FRIDAY" hour="9" minute="00" />
|
||||||
|
</reenter>-->
|
||||||
|
<spawnlist>
|
||||||
|
<group>
|
||||||
|
<npc id="25283" x="185067" y="-9616" z="-5493" heading="48103" /> <!-- Lilith -->
|
||||||
|
</group>
|
||||||
|
</spawnlist>
|
||||||
|
</instance>
|
260
L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/instances/SevenSignsRBs/SevenSignsRBs.java
vendored
Normal file
260
L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/instances/SevenSignsRBs/SevenSignsRBs.java
vendored
Normal file
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
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<PlayerInstance> 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<PlayerInstance> 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();
|
||||||
|
}
|
||||||
|
}
|
@ -328,4 +328,22 @@
|
|||||||
<node X="-98296" Y="-262136" />
|
<node X="-98296" Y="-262136" />
|
||||||
<node X="-65544" Y="-229384" />
|
<node X="-65544" Y="-229384" />
|
||||||
</zone>
|
</zone>
|
||||||
|
|
||||||
|
<!-- Classic: The Kamael zone -->
|
||||||
|
<zone name="anakim" id="70052" type="NoRestartZone" shape="NPoly" minZ="-5000" maxZ="-5600">
|
||||||
|
<stat name="restartTime" val="1800" />
|
||||||
|
<stat name="restartAllowedTime" val="600" />
|
||||||
|
<node X="-5760" Y="19420" />
|
||||||
|
<node X="-7590" Y="19420" />
|
||||||
|
<node X="-7590" Y="17586" />
|
||||||
|
<node X="-5760" Y="17586" />
|
||||||
|
</zone>
|
||||||
|
<zone name="lilith" id="70053" type="NoRestartZone" shape="NPoly" minZ="-5400" maxZ="-5600">
|
||||||
|
<stat name="restartTime" val="1800" />
|
||||||
|
<stat name="restartAllowedTime" val="600" />
|
||||||
|
<node X="185996" Y="-10519" />
|
||||||
|
<node X="185969" Y="-8693" />
|
||||||
|
<node X="184148" Y="-8703" />
|
||||||
|
<node X="184149" Y="-10523" />
|
||||||
|
</zone>
|
||||||
</list>
|
</list>
|
Loading…
Reference in New Issue
Block a user