Initial changes.
This commit is contained in:
@@ -50,7 +50,7 @@ public class AteliaManager extends AbstractNpcAI
|
||||
{
|
||||
NpcStringId.HAVE_YOU_SEEN_KELBIM_S_POWER_WE_LL_SHOW_YOU_THE_WRATH_OF_THE_EMBRYO,
|
||||
NpcStringId.I_CAN_FEEL_THE_ENERGY_FROM_THE_ATELIA_FEEL_THE_POWER_OF_KELBIM,
|
||||
NpcStringId.LIONA_AND_THE_LOWLY_SOLDIERS_WILL_BE_BURIED_HERE,
|
||||
NpcStringId.LEONA_AND_THE_LOWLY_SOLDIERS_WILL_BE_BURIED_HERE,
|
||||
NpcStringId.SHOW_THEM_THE_POWER_OF_KELBIM
|
||||
};
|
||||
private static final SkillHolder[] ATELIA_POISON =
|
||||
|
@@ -1,53 +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.BloodySwampland;
|
||||
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
/**
|
||||
* Bloody Swampland AI.
|
||||
* @author St3eT
|
||||
*/
|
||||
public class BloodySwampland extends AbstractNpcAI
|
||||
{
|
||||
// NPCs
|
||||
private static final int COLLECTOR = 23171; // Corpse Collector
|
||||
|
||||
public BloodySwampland()
|
||||
{
|
||||
addAttackId(COLLECTOR);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
|
||||
{
|
||||
if (npc.isScriptValue(0) && (npc.getCurrentHp() < (npc.getMaxHp() * 0.3)))
|
||||
{
|
||||
addSkillCastDesire(npc, attacker, npc.getParameters().getSkillHolder("Skill01_ID"), 23);
|
||||
npc.setScriptValue(1);
|
||||
}
|
||||
return super.onAttack(npc, attacker, damage, isSummon);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new BloodySwampland();
|
||||
}
|
||||
}
|
@@ -79,7 +79,7 @@ public class LairOfAntharas extends AbstractNpcAI
|
||||
{
|
||||
npc.setScriptValue(1);
|
||||
}
|
||||
npc.broadcastSay(ChatType.NPC_SHOUT, NpcStringId.WHO_S_THERE_IF_YOU_DISTURB_THE_TEMPER_OF_THE_GREAT_LAND_DRAGON_ANTHARAS_I_WILL_NEVER_FORGIVE_YOU);
|
||||
npc.broadcastSay(ChatType.NPC_SHOUT, NpcStringId.WHO_S_THERE_IF_YOU_DISTURB_THE_GREAT_EARTH_DRAGON_ANTHARAS_I_WILL_NEVER_FORGIVE_YOU);
|
||||
}
|
||||
return super.onAggroRangeEnter(npc, player, isSummon);
|
||||
}
|
||||
|
@@ -34,8 +34,8 @@ public class Belas extends AbstractNpcAI
|
||||
private static final Location EAST = new Location(-41168, 79507, -4000);
|
||||
private static final Location WEST = new Location(-59485, 79782, -4104);
|
||||
// Item
|
||||
private static final int MARK_OF_TRUST_MID_GRADE = 45843;
|
||||
private static final int MARK_OF_TRUST_HIGH_GRADE = 45848;
|
||||
// private static final int MARK_OF_TRUST_MID_GRADE = 45843;
|
||||
// private static final int MARK_OF_TRUST_HIGH_GRADE = 45848;
|
||||
|
||||
private Belas()
|
||||
{
|
||||
@@ -56,22 +56,22 @@ public class Belas extends AbstractNpcAI
|
||||
}
|
||||
case "West":
|
||||
{
|
||||
if (hasQuestItems(player, MARK_OF_TRUST_MID_GRADE) || hasQuestItems(player, MARK_OF_TRUST_HIGH_GRADE))
|
||||
{
|
||||
// if (hasQuestItems(player, MARK_OF_TRUST_MID_GRADE) || hasQuestItems(player, MARK_OF_TRUST_HIGH_GRADE))
|
||||
// {
|
||||
player.teleToLocation(WEST);
|
||||
break;
|
||||
}
|
||||
htmltext = "34056-02.html";
|
||||
// break;
|
||||
// }
|
||||
// htmltext = "34056-02.html";
|
||||
break;
|
||||
}
|
||||
case "East":
|
||||
{
|
||||
if (hasQuestItems(player, MARK_OF_TRUST_MID_GRADE) || hasQuestItems(player, MARK_OF_TRUST_HIGH_GRADE))
|
||||
{
|
||||
// if (hasQuestItems(player, MARK_OF_TRUST_MID_GRADE) || hasQuestItems(player, MARK_OF_TRUST_HIGH_GRADE))
|
||||
// {
|
||||
player.teleToLocation(EAST);
|
||||
break;
|
||||
}
|
||||
htmltext = "34056-02.html";
|
||||
// break;
|
||||
// }
|
||||
// htmltext = "34056-02.html";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@@ -16,7 +16,6 @@
|
||||
*/
|
||||
package ai.areas.GardenOfSpirits.Eubina;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.Faction;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
@@ -47,14 +46,14 @@ public class Eubina extends AbstractNpcAI
|
||||
{
|
||||
case "teleport":
|
||||
{
|
||||
if (player.getFactionLevel(Faction.UNWORLDLY_VISITORS) < 4)
|
||||
{
|
||||
htmltext = "34238-01.html";
|
||||
}
|
||||
else
|
||||
{
|
||||
// if (player.getFactionLevel(Faction.UNWORLDLY_VISITORS) < 4)
|
||||
// {
|
||||
// htmltext = "34238-01.html";
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
player.teleToLocation(BLACKBIRD_CAMPSITE);
|
||||
}
|
||||
// }
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@@ -16,7 +16,6 @@
|
||||
*/
|
||||
package ai.areas.GardenOfSpirits.Rotoeh;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.Faction;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
@@ -47,14 +46,14 @@ public class Rotoeh extends AbstractNpcAI
|
||||
{
|
||||
case "teleport":
|
||||
{
|
||||
if (player.getFactionLevel(Faction.UNWORLDLY_VISITORS) < 4)
|
||||
{
|
||||
htmltext = "34239-01.html";
|
||||
}
|
||||
else
|
||||
{
|
||||
// if (player.getFactionLevel(Faction.UNWORLDLY_VISITORS) < 4)
|
||||
// {
|
||||
// htmltext = "34239-01.html";
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
player.teleToLocation(BLACKBIRD_CAMPSITE);
|
||||
}
|
||||
// }
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@@ -6,6 +6,7 @@ Location - Upper level of the Giant's Cave, Kamael's Stronghold,<br1>entrance to
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest GiantsCave first_area">Teleport to the first area</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest GiantsCave second_area">Teleport to the second area</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest GiantsCave third_area">Teleport to the third area</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest GiantsCave fourth_area">Teleport to the fourth area</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest GiantsCave stronghold">Teleport to Kamael's Stronghold</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest GiantsCave relics_rooom">Teleport to the entrance to the Giants' Room of Relics</Button>
|
||||
</body></html>
|
@@ -60,27 +60,32 @@ public class GiantsCave extends AbstractNpcAI
|
||||
}
|
||||
case "first_area":
|
||||
{
|
||||
htmltext = "34223-1.html";
|
||||
player.teleToLocation(174501, 52876, -4370);
|
||||
break;
|
||||
}
|
||||
case "second_area":
|
||||
{
|
||||
htmltext = "34223-1.html";
|
||||
player.teleToLocation(178037, 52250, -3993);
|
||||
break;
|
||||
}
|
||||
case "third_area":
|
||||
{
|
||||
htmltext = "34223-1.html";
|
||||
player.teleToLocation(181226, 50418, -4370);
|
||||
break;
|
||||
}
|
||||
case "fourth_area":
|
||||
{
|
||||
player.teleToLocation(183638, 47541, -4370);
|
||||
break;
|
||||
}
|
||||
case "stronghold":
|
||||
{
|
||||
htmltext = "34223-2.html";
|
||||
player.teleToLocation(187467, 60921, -4983);
|
||||
break;
|
||||
}
|
||||
case "relics_rooom":
|
||||
{
|
||||
htmltext = "34223-3.html";
|
||||
player.teleToLocation(186611, 59968, -7236);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@@ -5,6 +5,5 @@ Until now, I was watching the situation on the continent. What would one as old
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest Kekropus teleport"><font color="LEVEL">Go up to the Superion</font></Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest Kekropus helios"><font color="LEVEL">Open the path to Helios' Throne</font></Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_multisell 3422201">Exchange supplies to take on Helios</Button>
|
||||
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h Quest FactionCertificates getCertificate">Get guild certificate.</Button>
|
||||
<Button ALIGN=LEFT ICON="Quest" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
||||
</body></html>
|
@@ -1,4 +1,3 @@
|
||||
<html><body>Warp Gate:<br>
|
||||
(Use this gate to go to the Refugee Camp in Hellbound.)<br>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest WrapGate enter_hellbound">"Here goes."</Button>
|
||||
(It's a Warp Gate that used to send people to Hellbound Refugee Camp. It looks like it doesn't work anymore. To go to the Refugee Camp in Hellbound, talk to a Gatekeeper, or click on the teleport icon in a village.)<br>
|
||||
</body></html>
|
@@ -16,14 +16,11 @@
|
||||
*/
|
||||
package ai.areas.Heine;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.Movie;
|
||||
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;
|
||||
import quests.Q10455_ElikiasLetter.Q10455_ElikiasLetter;
|
||||
|
||||
/**
|
||||
* Warp Gate AI.
|
||||
@@ -47,11 +44,11 @@ public class WrapGate extends AbstractNpcAI
|
||||
{
|
||||
if ("enter_hellbound".equals(event))
|
||||
{
|
||||
final QuestState qs = player.getQuestState(Q10455_ElikiasLetter.class.getSimpleName());
|
||||
if ((qs != null) && qs.isCond(1))
|
||||
{
|
||||
playMovie(player, Movie.SC_HELLBOUND);
|
||||
}
|
||||
// final QuestState qs = player.getQuestState(Q10455_ElikiasLetter.class.getSimpleName());
|
||||
// if ((qs != null) && qs.isCond(1))
|
||||
// {
|
||||
// playMovie(player, Movie.SC_HELLBOUND);
|
||||
// }
|
||||
player.teleToLocation(TELEPORT_LOC);
|
||||
}
|
||||
return null;
|
||||
|
@@ -1,328 +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.HellboundIsland.BelethsMagicCircle;
|
||||
|
||||
import org.l2jmobius.gameserver.datatables.SpawnTable;
|
||||
import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
|
||||
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.spawns.SpawnTemplate;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneType;
|
||||
import org.l2jmobius.gameserver.model.zone.type.ScriptZone;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.Earthquake;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
/**
|
||||
* Beleths Magic Circle
|
||||
* @URL https://l2wiki.com/Beleths_Magic_Circle
|
||||
* @author Screw, Gigi, Mobius
|
||||
* @date 2017-10-26 - [16:06:10]
|
||||
*/
|
||||
public class EnchantedMegaliths extends AbstractNpcAI
|
||||
{
|
||||
// NPCs
|
||||
private static final int[] MONSTERS =
|
||||
{
|
||||
23354,
|
||||
23355,
|
||||
23356,
|
||||
23357,
|
||||
23360,
|
||||
23361,
|
||||
23367,
|
||||
23368,
|
||||
23369,
|
||||
23372,
|
||||
23373
|
||||
};
|
||||
// Others
|
||||
private static final ScriptZone HELLBOUND_ZONE = ZoneManager.getInstance().getZoneById(40101, ScriptZone.class);
|
||||
private static final String HB_MEGALITH_STAGE = "HB_MegalithStage";
|
||||
private static final int KILL_COUNT = 300;
|
||||
private static SpawnTemplate spawnTemplateNormal;
|
||||
private static SpawnTemplate spawnTemplateFinal;
|
||||
private static int stage = 1;
|
||||
private static int kills = 0;
|
||||
|
||||
private EnchantedMegaliths()
|
||||
{
|
||||
addKillId(MONSTERS);
|
||||
addSpawnId(MONSTERS);
|
||||
addEnterZoneId(HELLBOUND_ZONE.getId());
|
||||
startQuestTimer("CHECK_STATUS", 60000, null, null, true);
|
||||
stage = GlobalVariablesManager.getInstance().getInt(HB_MEGALITH_STAGE, 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "CHECK_STATUS":
|
||||
{
|
||||
if (kills > KILL_COUNT)
|
||||
{
|
||||
if (stage < 3)
|
||||
{
|
||||
stage++;
|
||||
}
|
||||
else
|
||||
{
|
||||
stage = 1;
|
||||
}
|
||||
updateMegalithStage();
|
||||
kills = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onEnterZone(Creature creature, ZoneType zone)
|
||||
{
|
||||
if (creature.isPlayer())
|
||||
{
|
||||
final PlayerInstance player = creature.getActingPlayer();
|
||||
switch (stage)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
// Activate green glow
|
||||
player.sendPacket(new OnEventTrigger(19250032, true));
|
||||
player.sendPacket(new OnEventTrigger(19250014, true));
|
||||
player.sendPacket(new OnEventTrigger(19250020, true));
|
||||
player.sendPacket(new OnEventTrigger(19250026, true));
|
||||
player.sendPacket(new OnEventTrigger(19250002, true));
|
||||
player.sendPacket(new OnEventTrigger(19250008, true));
|
||||
// Deactivate red or yellow glow
|
||||
player.sendPacket(new OnEventTrigger(19250034, false));
|
||||
player.sendPacket(new OnEventTrigger(19250016, false));
|
||||
player.sendPacket(new OnEventTrigger(19250022, false));
|
||||
player.sendPacket(new OnEventTrigger(19250028, false));
|
||||
player.sendPacket(new OnEventTrigger(19250004, false));
|
||||
player.sendPacket(new OnEventTrigger(19250010, false));
|
||||
player.sendPacket(new OnEventTrigger(19250036, false));
|
||||
player.sendPacket(new OnEventTrigger(19250018, false));
|
||||
player.sendPacket(new OnEventTrigger(19250024, false));
|
||||
player.sendPacket(new OnEventTrigger(19250030, false));
|
||||
player.sendPacket(new OnEventTrigger(19250006, false));
|
||||
player.sendPacket(new OnEventTrigger(19250012, false));
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
// Activate yellow glow
|
||||
player.sendPacket(new OnEventTrigger(19250034, true));
|
||||
player.sendPacket(new OnEventTrigger(19250016, true));
|
||||
player.sendPacket(new OnEventTrigger(19250022, true));
|
||||
player.sendPacket(new OnEventTrigger(19250028, true));
|
||||
player.sendPacket(new OnEventTrigger(19250004, true));
|
||||
player.sendPacket(new OnEventTrigger(19250010, true));
|
||||
// Deactivate red or green glow
|
||||
player.sendPacket(new OnEventTrigger(19250032, false));
|
||||
player.sendPacket(new OnEventTrigger(19250014, false));
|
||||
player.sendPacket(new OnEventTrigger(19250020, false));
|
||||
player.sendPacket(new OnEventTrigger(19250026, false));
|
||||
player.sendPacket(new OnEventTrigger(19250002, false));
|
||||
player.sendPacket(new OnEventTrigger(19250008, false));
|
||||
player.sendPacket(new OnEventTrigger(19250036, false));
|
||||
player.sendPacket(new OnEventTrigger(19250018, false));
|
||||
player.sendPacket(new OnEventTrigger(19250024, false));
|
||||
player.sendPacket(new OnEventTrigger(19250030, false));
|
||||
player.sendPacket(new OnEventTrigger(19250006, false));
|
||||
player.sendPacket(new OnEventTrigger(19250012, false));
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
// Activate red glow
|
||||
player.sendPacket(new OnEventTrigger(19250036, true));
|
||||
player.sendPacket(new OnEventTrigger(19250018, true));
|
||||
player.sendPacket(new OnEventTrigger(19250024, true));
|
||||
player.sendPacket(new OnEventTrigger(19250030, true));
|
||||
player.sendPacket(new OnEventTrigger(19250006, true));
|
||||
player.sendPacket(new OnEventTrigger(19250012, true));
|
||||
// Deactivate green or yellow glow
|
||||
player.sendPacket(new OnEventTrigger(19250034, false));
|
||||
player.sendPacket(new OnEventTrigger(19250016, false));
|
||||
player.sendPacket(new OnEventTrigger(19250022, false));
|
||||
player.sendPacket(new OnEventTrigger(19250028, false));
|
||||
player.sendPacket(new OnEventTrigger(19250004, false));
|
||||
player.sendPacket(new OnEventTrigger(19250010, false));
|
||||
player.sendPacket(new OnEventTrigger(19250032, false));
|
||||
player.sendPacket(new OnEventTrigger(19250014, false));
|
||||
player.sendPacket(new OnEventTrigger(19250020, false));
|
||||
player.sendPacket(new OnEventTrigger(19250026, false));
|
||||
player.sendPacket(new OnEventTrigger(19250002, false));
|
||||
player.sendPacket(new OnEventTrigger(19250008, false));
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (spawnTemplateNormal == null)
|
||||
{
|
||||
updateMegalithStage();
|
||||
}
|
||||
}
|
||||
return super.onEnterZone(creature, zone);
|
||||
}
|
||||
|
||||
private void updateMegalithStage()
|
||||
{
|
||||
GlobalVariablesManager.getInstance().set(HB_MEGALITH_STAGE, stage);
|
||||
LOGGER.info("[Hellbound] - Enchanted Megaliths stage: " + stage);
|
||||
|
||||
switch (stage)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
for (PlayerInstance pl : HELLBOUND_ZONE.getPlayersInside())
|
||||
{
|
||||
pl.sendPacket(new OnEventTrigger(19250032, true));
|
||||
pl.sendPacket(new OnEventTrigger(19250014, true));
|
||||
pl.sendPacket(new OnEventTrigger(19250020, true));
|
||||
pl.sendPacket(new OnEventTrigger(19250026, true));
|
||||
pl.sendPacket(new OnEventTrigger(19250002, true));
|
||||
pl.sendPacket(new OnEventTrigger(19250008, true));
|
||||
pl.sendPacket(new OnEventTrigger(19250036, false));
|
||||
pl.sendPacket(new OnEventTrigger(19250018, false));
|
||||
pl.sendPacket(new OnEventTrigger(19250024, false));
|
||||
pl.sendPacket(new OnEventTrigger(19250030, false));
|
||||
pl.sendPacket(new OnEventTrigger(19250006, false));
|
||||
pl.sendPacket(new OnEventTrigger(19250012, false));
|
||||
if (spawnTemplateNormal != null)
|
||||
{
|
||||
pl.sendPacket(new Earthquake(pl.getLocation(), 40, 7));
|
||||
}
|
||||
}
|
||||
|
||||
if (spawnTemplateNormal == null)
|
||||
{
|
||||
spawnTemplateNormal = SpawnTable.getInstance().getAnySpawn(MONSTERS[9]).getNpcSpawnTemplate().getSpawnTemplate();
|
||||
spawnTemplateFinal = SpawnTable.getInstance().getAnySpawn(MONSTERS[10]).getNpcSpawnTemplate().getSpawnTemplate();
|
||||
spawnTemplateFinal.despawnAll();
|
||||
}
|
||||
else
|
||||
{
|
||||
spawnTemplateNormal.spawnAll();
|
||||
spawnTemplateFinal.despawnAll();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
for (PlayerInstance pl : HELLBOUND_ZONE.getPlayersInside())
|
||||
{
|
||||
pl.sendPacket(new OnEventTrigger(19250034, true));
|
||||
pl.sendPacket(new OnEventTrigger(19250016, true));
|
||||
pl.sendPacket(new OnEventTrigger(19250022, true));
|
||||
pl.sendPacket(new OnEventTrigger(19250028, true));
|
||||
pl.sendPacket(new OnEventTrigger(19250004, true));
|
||||
pl.sendPacket(new OnEventTrigger(19250010, true));
|
||||
pl.sendPacket(new OnEventTrigger(19250032, false));
|
||||
pl.sendPacket(new OnEventTrigger(19250014, false));
|
||||
pl.sendPacket(new OnEventTrigger(19250020, false));
|
||||
pl.sendPacket(new OnEventTrigger(19250026, false));
|
||||
pl.sendPacket(new OnEventTrigger(19250002, false));
|
||||
pl.sendPacket(new OnEventTrigger(19250008, false));
|
||||
if (spawnTemplateNormal != null)
|
||||
{
|
||||
pl.sendPacket(new Earthquake(pl.getLocation(), 40, 7));
|
||||
}
|
||||
}
|
||||
|
||||
if (spawnTemplateNormal == null)
|
||||
{
|
||||
spawnTemplateNormal = SpawnTable.getInstance().getAnySpawn(MONSTERS[9]).getNpcSpawnTemplate().getSpawnTemplate();
|
||||
spawnTemplateFinal = SpawnTable.getInstance().getAnySpawn(MONSTERS[10]).getNpcSpawnTemplate().getSpawnTemplate();
|
||||
spawnTemplateNormal.despawnAll();
|
||||
spawnTemplateNormal.spawnAll();
|
||||
spawnTemplateFinal.despawnAll();
|
||||
}
|
||||
else
|
||||
{
|
||||
spawnTemplateNormal.despawnAll();
|
||||
spawnTemplateNormal.spawnAll();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
for (PlayerInstance pl : HELLBOUND_ZONE.getPlayersInside())
|
||||
{
|
||||
pl.sendPacket(new OnEventTrigger(19250036, true));
|
||||
pl.sendPacket(new OnEventTrigger(19250018, true));
|
||||
pl.sendPacket(new OnEventTrigger(19250024, true));
|
||||
pl.sendPacket(new OnEventTrigger(19250030, true));
|
||||
pl.sendPacket(new OnEventTrigger(19250006, true));
|
||||
pl.sendPacket(new OnEventTrigger(19250012, true));
|
||||
pl.sendPacket(new OnEventTrigger(19250034, false));
|
||||
pl.sendPacket(new OnEventTrigger(19250016, false));
|
||||
pl.sendPacket(new OnEventTrigger(19250022, false));
|
||||
pl.sendPacket(new OnEventTrigger(19250028, false));
|
||||
pl.sendPacket(new OnEventTrigger(19250004, false));
|
||||
pl.sendPacket(new OnEventTrigger(19250010, false));
|
||||
if (spawnTemplateNormal != null)
|
||||
{
|
||||
pl.sendPacket(new Earthquake(pl.getLocation(), 40, 7));
|
||||
}
|
||||
}
|
||||
|
||||
if (spawnTemplateNormal == null)
|
||||
{
|
||||
spawnTemplateNormal = SpawnTable.getInstance().getAnySpawn(MONSTERS[9]).getNpcSpawnTemplate().getSpawnTemplate();
|
||||
spawnTemplateFinal = SpawnTable.getInstance().getAnySpawn(MONSTERS[10]).getNpcSpawnTemplate().getSpawnTemplate();
|
||||
spawnTemplateNormal.despawnAll();
|
||||
}
|
||||
else
|
||||
{
|
||||
spawnTemplateNormal.despawnAll();
|
||||
spawnTemplateFinal.spawnAll();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
|
||||
{
|
||||
kills++;
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpawn(Npc npc)
|
||||
{
|
||||
if ((stage == 2) && (npc.getSpawn().getNpcSpawnTemplate().getSpawnTemplate().getName().equals("enchanted_megaliths_stage_1")))
|
||||
{
|
||||
npc.setTitleString(NpcStringId.ABNORMAL_MAGIC_CIRCLE);
|
||||
}
|
||||
return super.onSpawn(npc);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new EnchantedMegaliths();
|
||||
}
|
||||
}
|
@@ -4,6 +4,5 @@ Have we met...? I am a Dreadnought from Innadril. I feel as if I have known you
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest LeonaBlackbird 31595-01.html">"I heard something about slave trading. What's going on?"</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest LeonaBlackbird 31595-02.html">"Tell me about the Fragments of Chaos?"</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest LeonaBlackbird 31595-03.html">"What is a Giant's Grinder?"</Button>
|
||||
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h Quest FactionCertificates getCertificate">Get guild certificate.</Button>
|
||||
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
||||
</body></html>
|
@@ -1,276 +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.ImperialTomb;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.ChatType;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
/**
|
||||
* Simple AI for Bloody Succubus.
|
||||
* @author Gigi
|
||||
*/
|
||||
public class BloodySuccubus extends AbstractNpcAI
|
||||
{
|
||||
// NPCs
|
||||
private static final int BLOODY_SUCCUBUS = 23185;
|
||||
private static final int SUCCUBUS_OF_DEATH = 23191;
|
||||
private static final int SUCCUBUS_OF_DARKNESS = 23192;
|
||||
private static final int SUCCUBUS_OF_LUNACY = 23197;
|
||||
private static final int SUCCUBUS_OF_SILENCE = 23198;
|
||||
// Attack messages
|
||||
private static final NpcStringId[] ON_ATTACK_MSG_BLOODY_SUCCUBUS =
|
||||
{
|
||||
NpcStringId.HEY_THAT_HURT_YOU_JUST_WAIT_HERE_AND_I_LL_BE_BACK_AS_A_STRONGER_DRAGON,
|
||||
NpcStringId.HAHAHA_YOU_DARE_TO_DISRUPT_ME_I_WILL_BE_YOUR_NIGHTMARE_FROM_WHICH_YOU_CAN_NEVER_AWAKEN,
|
||||
NpcStringId.I_CANNOT_LET_YOU_STOP_THE_WRAITH_OF_SHILEN,
|
||||
NpcStringId.YOU_DARE_ATTACK_ME_I_WILL_FILL_YOUR_NIGHTMARES_WITH_BLOOD,
|
||||
NpcStringId.HALT_YOUR_NIGHTMARES_WILL_FILL_YOU_WITH_DREAD
|
||||
};
|
||||
private static final NpcStringId[] ON_ATTACK_MSG_SUCCUBUS_OF_DEATH =
|
||||
{
|
||||
NpcStringId.HOW_FOOLISH_THE_PRICE_OF_ATTACKING_ME_IS_DEATH,
|
||||
NpcStringId.PREPARE_I_SHALL_GRANT_YOU_DEATH,
|
||||
NpcStringId.MY_SWORD_WILL_TAKE_YOUR_LIFE,
|
||||
NpcStringId.OH_SHILEN_GIVE_ME_STRENGTH,
|
||||
NpcStringId.YAAAH
|
||||
};
|
||||
private static final NpcStringId[] ON_ATTACK_MSG_SUCCUBUS_OF_DARKNESS =
|
||||
{
|
||||
NpcStringId.HYAAAAAAH,
|
||||
NpcStringId.ARE_YOU_THE_ONE_TO_SHATTER_THE_PEACE,
|
||||
NpcStringId.OUR_MISSION_IS_TO_RESURRECT_THE_GODDESS_DO_NOT_INTERFERE,
|
||||
NpcStringId.FEEL_THE_TRUE_TERROR_OF_DARKNESS
|
||||
};
|
||||
private static final NpcStringId[] ON_ATTACK_MSG_SUCCUBUS_OF_LUNACY =
|
||||
{
|
||||
NpcStringId.HEHEHE_I_M_GLAD_YOU_CAME_I_WAS_HUNGRY,
|
||||
NpcStringId.SMALL_FRY_I_WILL_SHOW_YOU_TRUE_MADNESS_HAHAHA,
|
||||
NpcStringId.HEHEHE_PREPARE_MY_MADNESS_WILL_SWALLOW_YOU_UP,
|
||||
NpcStringId.HEHEHE_SHALL_WE_PLAY,
|
||||
NpcStringId.HEHEHE_PREPARE_MY_MADNESS_WILL_SWALLOW_YOU_UP
|
||||
};
|
||||
private static final NpcStringId[] ON_ATTACK_MSG_SUCCUBUS_OF_SILENCE =
|
||||
{
|
||||
NpcStringId.FOR_THE_GODDESS,
|
||||
NpcStringId.YOU_WILL_DIE,
|
||||
NpcStringId.DIE,
|
||||
NpcStringId.YOU_WILL_BE_DESTROYED,
|
||||
NpcStringId.OOOOH,
|
||||
NpcStringId.DO_NOT_INTERFERE
|
||||
};
|
||||
// Death messages
|
||||
private static final NpcStringId[] ON_FAILED_MSG_BLOODY_SUCCUBUS =
|
||||
{
|
||||
NpcStringId.AH,
|
||||
NpcStringId.SHILEN_I_HAVE_FAILED,
|
||||
NpcStringId.HOW_ALL_THAT_POWER_REMOVED,
|
||||
NpcStringId.TO_THINK_THAT_I_COULD_FAIL_IMPOSSIBLE
|
||||
};
|
||||
private static final NpcStringId[] ON_FAILED_MSG_SUCCUBUS_OF_DEATH =
|
||||
{
|
||||
NpcStringId.NO_I_LOST_ALL_THE_GATHERED_POWER_OF_LIGHT_TO_THIS_THIS,
|
||||
NpcStringId.I_WOULD_DEFEATED,
|
||||
NpcStringId.DON_T_THINK_THIS_IS_THE_END
|
||||
};
|
||||
private static final NpcStringId[] ON_FAILED_MSG_SUCCUBUS_OF_DARKNESS =
|
||||
{
|
||||
NpcStringId.I_WILL_ALWAYS_WATCH_YOU_FROM_THE_DARKNESS,
|
||||
NpcStringId.NO_N_NO_NO,
|
||||
NpcStringId.I_MUSTN_T_LOSE_THE_STRENGTH,
|
||||
NpcStringId.OH_CREATURES_OF_THE_GODDESS_LEND_ME_YOUR_STRENGTH
|
||||
};
|
||||
private static final NpcStringId[] ON_FAILED_MSG_SUCCUBUS_OF_LUNACY =
|
||||
{
|
||||
NpcStringId.ACK_NO_MY_BODY_IT_S_DISAPPEARING,
|
||||
NpcStringId.KYAAAH,
|
||||
NpcStringId.HUHUHU_HUHUHU_HUHAHAHA,
|
||||
NpcStringId.HUH_WHAT_HAPPENED_I_I_LOST
|
||||
};
|
||||
private static final NpcStringId[] ON_FAILED_MSG_SUCCUBUS_OF_SILENCE =
|
||||
{
|
||||
NpcStringId.IS_THIS_THE_END_2,
|
||||
NpcStringId.OH_GODDESS,
|
||||
NpcStringId.NO_I_DIDN_T_STAY_SILENT_ALL_THIS_TIME_JUST_TO_DISAPPEAR_NOW_LIKE_THIS
|
||||
};
|
||||
|
||||
private BloodySuccubus()
|
||||
{
|
||||
addAttackId(BLOODY_SUCCUBUS, SUCCUBUS_OF_DEATH, SUCCUBUS_OF_DARKNESS, SUCCUBUS_OF_LUNACY, SUCCUBUS_OF_SILENCE);
|
||||
addKillId(BLOODY_SUCCUBUS, SUCCUBUS_OF_DEATH, SUCCUBUS_OF_DARKNESS, SUCCUBUS_OF_LUNACY, SUCCUBUS_OF_SILENCE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "say":
|
||||
{
|
||||
if (npc.isDead() || !npc.isScriptValue(1))
|
||||
{
|
||||
cancelQuestTimer("say", npc, null);
|
||||
return null;
|
||||
}
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, getRandomEntry(ON_ATTACK_MSG_BLOODY_SUCCUBUS));
|
||||
break;
|
||||
}
|
||||
case "say1":
|
||||
{
|
||||
if (npc.isDead() || !npc.isScriptValue(1))
|
||||
{
|
||||
cancelQuestTimer("say1", npc, null);
|
||||
return null;
|
||||
}
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, getRandomEntry(ON_ATTACK_MSG_SUCCUBUS_OF_DEATH));
|
||||
break;
|
||||
}
|
||||
case "say2":
|
||||
{
|
||||
if (npc.isDead() || !npc.isScriptValue(1))
|
||||
{
|
||||
cancelQuestTimer("say2", npc, null);
|
||||
return null;
|
||||
}
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, getRandomEntry(ON_ATTACK_MSG_SUCCUBUS_OF_DARKNESS));
|
||||
break;
|
||||
}
|
||||
case "say3":
|
||||
{
|
||||
if (npc.isDead() || !npc.isScriptValue(1))
|
||||
{
|
||||
cancelQuestTimer("say3", npc, null);
|
||||
return null;
|
||||
}
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, getRandomEntry(ON_ATTACK_MSG_SUCCUBUS_OF_LUNACY));
|
||||
break;
|
||||
}
|
||||
case "say4":
|
||||
{
|
||||
if (npc.isDead() || !npc.isScriptValue(1))
|
||||
{
|
||||
cancelQuestTimer("say4", npc, null);
|
||||
return null;
|
||||
}
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, getRandomEntry(ON_ATTACK_MSG_SUCCUBUS_OF_SILENCE));
|
||||
break;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case BLOODY_SUCCUBUS:
|
||||
{
|
||||
if (npc.isScriptValue(0))
|
||||
{
|
||||
npc.setScriptValue(1);
|
||||
startQuestTimer("say", (getRandom(5) + 3) * 1000, npc, null, true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SUCCUBUS_OF_DEATH:
|
||||
{
|
||||
if (npc.isScriptValue(0))
|
||||
{
|
||||
npc.setScriptValue(1);
|
||||
startQuestTimer("say1", (getRandom(5) + 3) * 1000, npc, null, true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SUCCUBUS_OF_DARKNESS:
|
||||
{
|
||||
if (npc.isScriptValue(0))
|
||||
{
|
||||
npc.setScriptValue(1);
|
||||
startQuestTimer("say2", (getRandom(5) + 3) * 1000, npc, null, true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SUCCUBUS_OF_LUNACY:
|
||||
{
|
||||
if (npc.isScriptValue(0))
|
||||
{
|
||||
npc.setScriptValue(1);
|
||||
startQuestTimer("say3", (getRandom(5) + 3) * 1000, npc, null, true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SUCCUBUS_OF_SILENCE:
|
||||
{
|
||||
if (npc.isScriptValue(0))
|
||||
{
|
||||
npc.setScriptValue(1);
|
||||
startQuestTimer("say4", (getRandom(5) + 3) * 1000, npc, null, true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return super.onAttack(npc, attacker, damage, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, PlayerInstance player, boolean isSummon)
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case BLOODY_SUCCUBUS:
|
||||
{
|
||||
cancelQuestTimer("say", npc, player);
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, getRandomEntry(ON_FAILED_MSG_BLOODY_SUCCUBUS));
|
||||
break;
|
||||
}
|
||||
case SUCCUBUS_OF_DEATH:
|
||||
{
|
||||
cancelQuestTimer("say1", npc, player);
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, getRandomEntry(ON_FAILED_MSG_SUCCUBUS_OF_DEATH));
|
||||
break;
|
||||
}
|
||||
case SUCCUBUS_OF_DARKNESS:
|
||||
{
|
||||
cancelQuestTimer("say2", npc, player);
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, getRandomEntry(ON_FAILED_MSG_SUCCUBUS_OF_DARKNESS));
|
||||
break;
|
||||
}
|
||||
case SUCCUBUS_OF_LUNACY:
|
||||
{
|
||||
cancelQuestTimer("say3", npc, player);
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, getRandomEntry(ON_FAILED_MSG_SUCCUBUS_OF_LUNACY));
|
||||
break;
|
||||
}
|
||||
case SUCCUBUS_OF_SILENCE:
|
||||
{
|
||||
cancelQuestTimer("say4", npc, player);
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, getRandomEntry(ON_FAILED_MSG_SUCCUBUS_OF_SILENCE));
|
||||
break;
|
||||
}
|
||||
}
|
||||
return super.onKill(npc, player, isSummon);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new BloodySuccubus();
|
||||
}
|
||||
}
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Ghost of Wigoth:<br>
|
||||
You've destroyed Halisha's Shadow! Good job!<br>
|
||||
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Nameless Spirit:<br>
|
||||
This is the final resting place of the ancient emperors of the Elmoreden Empire! There are four major sepulchers. They are the Sepulcher of Conquerors, the Sepulcher of Rulers, the Sepulcher of Great Sages and the Sepulcher of Judges, respectively. Together they are known as the Four Sepulchers.<br>
|
||||
But this sacred place is ultimately...<br>
|
||||
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Ghost of Wigoth:<br>
|
||||
Phew! You escaped safely!<br>
|
||||
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
||||
</body></html>
|
@@ -1,8 +0,0 @@
|
||||
<html><body>Ghost Chamberlain of Elmoreden:<br>
|
||||
Greetings! I am a chamberlain of the ancient Elmoreden empire! When I was a mortal being I worked at the cemetery of the Elmoreden empire. Now I'm here, serving those who are traveling to the cemetery.<br>
|
||||
My assistant also assists such travelers. He can be found near the entrance of Argos' Wall.<br>
|
||||
Do you plan to visit the Elmoreden Cemetery?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest 620_FourGoblets 15">"I want to visit the 4th sepulcher."</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest 620_FourGoblets 16">"I want to visit the entrance to the Elmoreden Cemetery."</Button>
|
||||
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
||||
</body></html>
|
@@ -1,8 +0,0 @@
|
||||
<html><body>Ghost Chamberlain of Elmoreden:<br>
|
||||
Woooo! I'm a ghost page of the ancient Elmoreden Empire! I worked in the cemetery when I was a mortal being. Now I'm here to help travelers going to the Elmoreden Cemetery.<br>
|
||||
My boss is in the Pilgrim's Necropolis. He also helps people visit the cemetery.<br>
|
||||
Would you like to visit the cemetery of the Elmoreden empire?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest 620_FourGoblets 15">"I want to visit the 4th sepulcher."</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest 620_FourGoblets 16">"I want to visit the entrance to the Elmoreden Cemetery."</Button>
|
||||
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Conquerors' Sepulcher Manager:<br>
|
||||
There is another party already in the sepulcher. Try again later.
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Conquerors' Sepulcher Manager:<br>
|
||||
Visiting hours are over!
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Conquerors' Sepulcher Manager:<br>
|
||||
The statue will only respond to the leader of the party.
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Conquerors' Sepulcher Manager:<br>
|
||||
One among your party hasn't fulfilled the request of the nameless soul. Ask %member% to go and meet with the nameless soul and do as he asks.
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Conquerors' Sepulcher Manager:<br>
|
||||
Enter.
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Conquerors' Sepulcher Manager:<br>
|
||||
One of your party members doesn't have a pass. Either give %member% a pass to enter the sepulcher, or ask him to go get one and come back.
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Conquerors' Sepulcher Manager:<br>
|
||||
Your party must consist of at least four members. Come back when you have more friends.
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Conquerors' Sepulcher Manager:<br>
|
||||
A strange-looking stone statue.<br>
|
||||
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Emperors' Sepulcher Manager:<br>
|
||||
Another party has already entered the sepulcher. Try again later.
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Emperors' Sepulcher Manager:<br>
|
||||
Entry forbidden at this time. Try again later.
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Emperors' Sepulcher Manager:<br>
|
||||
The stone statue will only respond to the hand of the party leader.
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Emperors' Sepulcher Manager:<br>
|
||||
%member% needs to speak with the nameless soul to gain entry.
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Emperors' Sepulcher Manager:<br>
|
||||
Enter.
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Emperors' Sepulcher Manager:<br>
|
||||
%member% doesn't have a pass.
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Emperors' Sepulcher Manager:<br>
|
||||
To gain entry, a party must consist of at least four members.
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Emperors' Sepulcher Manager:<br>
|
||||
A weird-looking statue.<br>
|
||||
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Great Sages' Sepulcher Manager:<br>
|
||||
Sepulcher is full. Try again later.
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Great Sages' Sepulcher Manager:<br>
|
||||
No entry. Try again later.
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Great Sages' Sepulcher Manager:<br>
|
||||
The party leader must place hands on the statue.
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Great Sages' Sepulcher Manager:<br>
|
||||
%member% must talk with the Nameless Soul to get permission.
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Great Sages' Sepulcher Manager:<br>
|
||||
Enter!
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Great Sages' Sepulcher Manager:<br>
|
||||
%member% does not have a pass to enter.
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Great Sages' Sepulcher Manager:<br>
|
||||
A party must consist of at least four members. Come back later.
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Great Sages' Sepulcher Manager:<br>
|
||||
A weird-looking stone statue.<br>
|
||||
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Judges' Sepulcher Manager:<br>
|
||||
Another party has already entered the sepulcher. Come back later!
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Judge's Sepulcher Manager:<br>
|
||||
Come back later!
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Judges' Sepulcher Manager:<br>
|
||||
Only a party leader may lay hands on the stone statue and enter!
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Judges' Sepulcher Manager:<br>
|
||||
%member% must get permission from the nameless soul.
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Judges' Sepulcher Manager:<br>
|
||||
You may enter!
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Judges' Sepulcher Manager:<br>
|
||||
%member% doesn't have a pass!
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Judges' Sepulcher Manager:<br>
|
||||
The combined strength of at least four is needed to gain entry!
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Judge's Sepulcher Manager:<br>
|
||||
A weird-looking statue.<br>
|
||||
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Baron's Hall Gatekeeper:<br>
|
||||
I guard the gate connected to the hall of a Baron.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FourSepulchers OpenGate">Open the gate.</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Viscount's Hall Gatekeeper:<br>
|
||||
I guard the gate connected to the hall of a Viscount.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FourSepulchers OpenGate">Open the gate.</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Count's Hall Gatekeeper:<br>
|
||||
I guard the gate connected to the hall of a Count.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FourSepulchers OpenGate">Open the gate.</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Marquis' Hall Gatekeeper:<br>
|
||||
I guard the gate connected to the Marquis' Hall.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FourSepulchers OpenGate">Open the gate.</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Duke's Hall Gatekeeper:<br>
|
||||
I guard the gate connected to the tomb of the Emperor.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FourSepulchers OpenGate">Open the gate.</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Baron's Hall Gatekeeper:<br>
|
||||
I guard the gate connected to the hall of a Baron.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FourSepulchers OpenGate">Open the gate.</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Viscount's Hall Gatekeeper:<br>
|
||||
I guard the gate connected to the hall of a Viscount.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FourSepulchers OpenGate">Open the gate.</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Count's Hall Gatekeeper:<br>
|
||||
I guard the gate connected to the hall of a Count.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FourSepulchers OpenGate">Open the gate.</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Marquis' Hall Gatekeeper:<br>
|
||||
I guard the gate connected to the Marquis' Hall.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FourSepulchers OpenGate">Open the gate.</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Duke's Hall Gatekeeper:<br>
|
||||
I guard the gate connected to the tomb of the Emperor.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FourSepulchers OpenGate">Open the gate.</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Baron's Hall Gatekeeper:<br>
|
||||
I guard the gate connected to the hall of a Baron.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FourSepulchers OpenGate">Open the gate.</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Viscount's Hall Gatekeeper:<br>
|
||||
I guard the gate connected to the hall of a Viscount.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FourSepulchers OpenGate">Open the gate.</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Count's Hall Gatekeeper:<br>
|
||||
I guard the gate connected to the hall of a Count.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FourSepulchers OpenGate">Open the gate.</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Marquis' Hall Gatekeeper:<br>
|
||||
I guard the gate connected to the Marquis' Hall.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FourSepulchers OpenGate">Open the gate.</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Duke's Hall Gatekeeper:<br>
|
||||
I guard the gate connected to the tomb of the Emperor.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FourSepulchers OpenGate">Open the gate.</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Baron's Hall Gatekeeper:<br>
|
||||
I guard the gate connected to the hall of a Baron.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FourSepulchers OpenGate">Open the gate.</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Viscount's Hall Gatekeeper:<br>
|
||||
I guard the gate connected to the hall of a Viscount.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FourSepulchers OpenGate">Open the gate.</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Count's Hall Gatekeeper:<br>
|
||||
I guard the gate connected to the hall of a Count.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FourSepulchers OpenGate">Open the gate.</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Marquis' Hall Gatekeeper:<br>
|
||||
I guard the gate connected to the Marquis' Hall.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FourSepulchers OpenGate">Open the gate.</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Duke's Hall Gatekeeper:<br>
|
||||
I guard the gate connected to the tomb of the Emperor.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FourSepulchers OpenGate">Open the gate.</Button>
|
||||
</body></html>
|
@@ -1,714 +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.ImperialTomb.FourSepulchers;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
import org.w3c.dom.Node;
|
||||
|
||||
import org.l2jmobius.commons.concurrent.ThreadPool;
|
||||
import org.l2jmobius.commons.util.IXmlReader;
|
||||
import org.l2jmobius.gameserver.ai.CtrlIntention;
|
||||
import org.l2jmobius.gameserver.enums.ChatType;
|
||||
import org.l2jmobius.gameserver.geoengine.GeoEngine;
|
||||
import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
import org.l2jmobius.gameserver.model.actor.Attackable;
|
||||
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.holders.SkillHolder;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneType;
|
||||
import org.l2jmobius.gameserver.model.zone.type.EffectZone;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||
import org.l2jmobius.gameserver.util.Util;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
import quests.Q00620_FourGoblets.Q00620_FourGoblets;
|
||||
|
||||
/**
|
||||
* Four Selpuchers AI
|
||||
* @author Mobius
|
||||
*/
|
||||
public class FourSepulchers extends AbstractNpcAI implements IXmlReader
|
||||
{
|
||||
private static final Logger LOGGER = Logger.getLogger(FourSepulchers.class.getName());
|
||||
|
||||
// NPCs
|
||||
private static final int CONQUEROR_MANAGER = 31921;
|
||||
private static final int EMPEROR_MANAGER = 31922;
|
||||
private static final int GREAT_SAGES_MANAGER = 31923;
|
||||
private static final int JUDGE_MANAGER = 31924;
|
||||
private static final int MYSTERIOUS_CHEST = 31468;
|
||||
private static final int KEY_CHEST = 31467;
|
||||
private static final int ROOM_3_VICTIM = 18150;
|
||||
private static final int ROOM_3_CHEST_REWARDER = 18158;
|
||||
private static final int ROOM_4_CHARM_1 = 18196;
|
||||
private static final int ROOM_4_CHARM_2 = 18197;
|
||||
private static final int ROOM_4_CHARM_3 = 18198;
|
||||
private static final int ROOM_4_CHARM_4 = 18199;
|
||||
private static final int ROOM_5_STATUE_GUARD = 18232;
|
||||
private static final int ROOM_6_REWARD_CHEST = 18256;
|
||||
private static final int CONQUEROR_BOSS = 25346;
|
||||
private static final int EMPEROR_BOSS = 25342;
|
||||
private static final int GREAT_SAGES_BOSS = 25339;
|
||||
private static final int JUDGE_BOSS = 25349;
|
||||
private static final int TELEPORTER = 31452;
|
||||
// @formatter:off
|
||||
private static final int[] FIRST_TALK_NPCS =
|
||||
{
|
||||
TELEPORTER,
|
||||
31453, 31454, 31919, 31920, 31925, 31926, 31927, 31928,
|
||||
31929, 31930, 31931, 31932, 31933, 31934, 31935, 31936,
|
||||
31937, 31938, 31939, 31940, 31941, 31942, 31943, 31944
|
||||
};
|
||||
// @formatter:on
|
||||
private static final int[] CHEST_REWARD_MONSTERS =
|
||||
{
|
||||
18120, // room 1
|
||||
ROOM_3_CHEST_REWARDER,
|
||||
18177, // room 4
|
||||
18212, // room 5 - wave 2
|
||||
};
|
||||
// Items
|
||||
private static final int ENTRANCE_PASS = 7075;
|
||||
private static final int USED_PASS = 7261;
|
||||
private static final int CHAPEL_KEY = 7260;
|
||||
private static final int ANTIQUE_BROOCH = 7262;
|
||||
// Locations
|
||||
private static final Map<Integer, Location> START_HALL_SPAWNS = new HashMap<>();
|
||||
static
|
||||
{
|
||||
START_HALL_SPAWNS.put(CONQUEROR_MANAGER, new Location(181632, -85587, -7218));
|
||||
START_HALL_SPAWNS.put(EMPEROR_MANAGER, new Location(179963, -88978, -7218));
|
||||
START_HALL_SPAWNS.put(GREAT_SAGES_MANAGER, new Location(173217, -86132, -7218));
|
||||
START_HALL_SPAWNS.put(JUDGE_MANAGER, new Location(175608, -82296, -7218));
|
||||
}
|
||||
// Zones
|
||||
private static final int CONQUEROR_ZONE = 200221;
|
||||
private static final int EMPEROR_ZONE = 200222;
|
||||
private static final int GREAT_SAGES_ZONE = 200224;
|
||||
private static final int JUDGE_ZONE = 200223;
|
||||
private static final Map<Integer, Integer> MANAGER_ZONES = new HashMap<>();
|
||||
static
|
||||
{
|
||||
MANAGER_ZONES.put(CONQUEROR_MANAGER, CONQUEROR_ZONE);
|
||||
MANAGER_ZONES.put(EMPEROR_MANAGER, EMPEROR_ZONE);
|
||||
MANAGER_ZONES.put(GREAT_SAGES_MANAGER, GREAT_SAGES_ZONE);
|
||||
MANAGER_ZONES.put(JUDGE_MANAGER, JUDGE_ZONE);
|
||||
}
|
||||
// Spawns
|
||||
private static List<int[]> ROOM_SPAWN_DATA = new ArrayList<>();
|
||||
private static final Map<Integer, List<Npc>> STORED_MONSTER_SPAWNS = new HashMap<>();
|
||||
static
|
||||
{
|
||||
STORED_MONSTER_SPAWNS.put(1, new CopyOnWriteArrayList<>());
|
||||
STORED_MONSTER_SPAWNS.put(2, new CopyOnWriteArrayList<>());
|
||||
STORED_MONSTER_SPAWNS.put(3, new CopyOnWriteArrayList<>());
|
||||
STORED_MONSTER_SPAWNS.put(4, new CopyOnWriteArrayList<>());
|
||||
}
|
||||
// @formatter:off
|
||||
private static final int[][] CHEST_SPAWN_LOCATIONS =
|
||||
{
|
||||
// sepulcherId, roomNumber, npcLocX, npcLocY, npcLocZ, npcLocHeading
|
||||
{1, 1, 182074, -85579, -7216, 32768},
|
||||
{1, 2, 183868, -85577, -7216, 32768},
|
||||
{1, 3, 185681, -85573, -7216, 32768},
|
||||
{1, 4, 187498, -85566, -7216, 32768},
|
||||
{1, 5, 189306, -85571, -7216, 32768},
|
||||
{2, 1, 180375, -88968, -7216, 32768},
|
||||
{2, 2, 182151, -88962, -7216, 32768},
|
||||
{2, 3, 183960, -88964, -7216, 32768},
|
||||
{2, 4, 185792, -88966, -7216, 32768},
|
||||
{2, 5, 187625, -88953, -7216, 32768},
|
||||
{3, 1, 173218, -85703, -7216, 49152},
|
||||
{3, 2, 173206, -83929, -7216, 49152},
|
||||
{3, 3, 173208, -82085, -7216, 49152},
|
||||
{3, 4, 173191, -80290, -7216, 49152},
|
||||
{3, 5, 173198, -78465, -7216, 49152},
|
||||
{4, 1, 175601, -81905, -7216, 49152},
|
||||
{4, 2, 175619, -80094, -7216, 49152},
|
||||
{4, 3, 175608, -78268, -7216, 49152},
|
||||
{4, 4, 175588, -76472, -7216, 49152},
|
||||
{4, 5, 175594, -74655, -7216, 49152},
|
||||
};
|
||||
// Doors
|
||||
private static final int[][] DOORS =
|
||||
{
|
||||
// sepulcherId, waveNumber, doorId
|
||||
{1, 2, 25150012}, {1, 3, 25150013}, {1, 4, 25150014}, {1, 5, 25150015}, {1, 7, 25150016},
|
||||
{2, 2, 25150002}, {2, 3, 25150003}, {2, 4, 25150004}, {2, 5, 25150005}, {2, 7, 25150006},
|
||||
{3, 2, 25150032}, {3, 3, 25150033}, {3, 4, 25150034}, {3, 5, 25150035}, {3, 7, 25150036},
|
||||
{4, 2, 25150022}, {4, 3, 25150023}, {4, 4, 25150024}, {4, 5, 25150025}, {4, 7, 25150026},
|
||||
};
|
||||
// @formatter:on
|
||||
// Skill
|
||||
private static final SkillHolder PETRIFY = new SkillHolder(4616, 1);
|
||||
private static final Map<Integer, Integer> CHARM_SKILLS = new HashMap<>();
|
||||
static
|
||||
{
|
||||
CHARM_SKILLS.put(ROOM_4_CHARM_1, 4146);
|
||||
CHARM_SKILLS.put(ROOM_4_CHARM_2, 4145);
|
||||
CHARM_SKILLS.put(ROOM_4_CHARM_3, 4148);
|
||||
CHARM_SKILLS.put(ROOM_4_CHARM_4, 4624);
|
||||
}
|
||||
// Misc
|
||||
private static final Map<Integer, NpcStringId> CHARM_MSG = new HashMap<>();
|
||||
static
|
||||
{
|
||||
CHARM_MSG.put(ROOM_4_CHARM_1, NpcStringId.THE_P_ATK_REDUCTION_DEVICE_HAS_NOW_BEEN_DESTROYED);
|
||||
CHARM_MSG.put(ROOM_4_CHARM_2, NpcStringId.THE_DEFENSE_REDUCTION_DEVICE_HAS_BEEN_DESTROYED);
|
||||
CHARM_MSG.put(ROOM_4_CHARM_3, NpcStringId.THE_POISON_DEVICE_HAS_NOW_BEEN_DESTROYED);
|
||||
CHARM_MSG.put(ROOM_4_CHARM_4, NpcStringId.THE_POISON_DEVICE_HAS_NOW_BEEN_DESTROYED); // TODO: THE_HP_REGENERATION_REDUCTION_DEVICE_WILL_BE_ACTIVATED_IN_3_MINUTES2
|
||||
}
|
||||
private static final NpcStringId[] VICTIM_MSG =
|
||||
{
|
||||
NpcStringId.HELP_ME,
|
||||
NpcStringId.DON_T_MISS,
|
||||
NpcStringId.KEEP_PUSHING,
|
||||
};
|
||||
private static final Map<Integer, Integer> STORED_PROGRESS = new HashMap<>();
|
||||
static
|
||||
{
|
||||
STORED_PROGRESS.put(1, 1);
|
||||
STORED_PROGRESS.put(2, 1);
|
||||
STORED_PROGRESS.put(3, 1);
|
||||
STORED_PROGRESS.put(4, 1);
|
||||
}
|
||||
private static final int PARTY_MEMBER_COUNT = 4;
|
||||
private static final int ENTRY_DELAY = 3; // minutes
|
||||
private static final int TIME_ATTACK = 60; // minutes
|
||||
|
||||
private FourSepulchers()
|
||||
{
|
||||
load();
|
||||
addFirstTalkId(CONQUEROR_MANAGER, EMPEROR_MANAGER, GREAT_SAGES_MANAGER, JUDGE_MANAGER, MYSTERIOUS_CHEST, KEY_CHEST);
|
||||
addTalkId(CONQUEROR_MANAGER, EMPEROR_MANAGER, GREAT_SAGES_MANAGER, JUDGE_MANAGER, MYSTERIOUS_CHEST, KEY_CHEST);
|
||||
addFirstTalkId(FIRST_TALK_NPCS);
|
||||
addTalkId(FIRST_TALK_NPCS);
|
||||
addKillId(CHEST_REWARD_MONSTERS);
|
||||
addKillId(ROOM_3_VICTIM, ROOM_4_CHARM_1, ROOM_4_CHARM_2, ROOM_4_CHARM_3, ROOM_4_CHARM_4, ROOM_6_REWARD_CHEST, CONQUEROR_BOSS, EMPEROR_BOSS, GREAT_SAGES_BOSS, JUDGE_BOSS);
|
||||
addSpawnId(ROOM_3_VICTIM, ROOM_4_CHARM_1, ROOM_4_CHARM_2, ROOM_4_CHARM_3, ROOM_4_CHARM_4, ROOM_5_STATUE_GUARD, ROOM_6_REWARD_CHEST, CONQUEROR_BOSS, EMPEROR_BOSS, GREAT_SAGES_BOSS, JUDGE_BOSS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
|
||||
{
|
||||
String htmltext = event;
|
||||
|
||||
switch (event)
|
||||
{
|
||||
case "Enter":
|
||||
{
|
||||
final QuestState qs = player.getQuestState(Q00620_FourGoblets.class.getSimpleName());
|
||||
if (qs == null)
|
||||
{
|
||||
return getNoQuestMsg(player);
|
||||
}
|
||||
if (qs.isStarted())
|
||||
{
|
||||
tryEnter(npc, player);
|
||||
return null;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "OpenGate":
|
||||
{
|
||||
final QuestState qs = player.getQuestState(Q00620_FourGoblets.class.getSimpleName());
|
||||
if (qs == null)
|
||||
{
|
||||
return getNoQuestMsg(player);
|
||||
}
|
||||
if (qs.isStarted() && npc.isScriptValue(0))
|
||||
{
|
||||
if (hasQuestItems(player, CHAPEL_KEY))
|
||||
{
|
||||
npc.setScriptValue(1);
|
||||
takeItems(player, CHAPEL_KEY, -1);
|
||||
final int sepulcherId = getSepulcherId(player);
|
||||
final int currentWave = STORED_PROGRESS.get(sepulcherId) + 1;
|
||||
STORED_PROGRESS.put(sepulcherId, currentWave); // update progress
|
||||
for (int[] doorInfo : DOORS)
|
||||
{
|
||||
if ((doorInfo[0] == sepulcherId) && (doorInfo[1] == currentWave))
|
||||
{
|
||||
openDoor(doorInfo[2], 0);
|
||||
ThreadPool.schedule(() -> closeDoor(doorInfo[2], 0), 15000);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (currentWave < 7)
|
||||
{
|
||||
spawnMysteriousChest(player);
|
||||
}
|
||||
else
|
||||
{
|
||||
spawnNextWave(player);
|
||||
}
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.THE_MONSTERS_HAVE_SPAWNED);
|
||||
}
|
||||
else
|
||||
{
|
||||
final NpcHtmlMessage html = new NpcHtmlMessage(npc.getObjectId());
|
||||
html.setFile(player, "data/scripts/ai/areas/ImperialTomb/FourSepulchers/Gatekeeper-no.html");
|
||||
html.replace("%npcname%", npc.getName());
|
||||
player.sendPacket(html);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
htmltext = getNoQuestMsg(player); // TODO: Replace with proper html?
|
||||
break;
|
||||
}
|
||||
case "SPAWN_MYSTERIOUS_CHEST":
|
||||
{
|
||||
spawnMysteriousChest(player);
|
||||
return null;
|
||||
}
|
||||
case "VICTIM_FLEE":
|
||||
{
|
||||
if ((npc != null) && !npc.isDead())
|
||||
{
|
||||
final Location destination = GeoEngine.getInstance().canMoveToTargetLoc(npc.getX(), npc.getY(), npc.getZ(), npc.getSpawn().getLocation().getX() + getRandom(-400, 400), npc.getSpawn().getLocation().getY() + getRandom(-400, 400), npc.getZ(), npc.getInstanceWorld());
|
||||
if (Util.calculateDistance(npc, npc.getSpawn().getLocation(), false, false) < 600)
|
||||
{
|
||||
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, destination);
|
||||
}
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, getRandomEntry(VICTIM_MSG));
|
||||
startQuestTimer("VICTIM_FLEE", 3000, npc, null, false);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
case "REMOVE_PETRIFY":
|
||||
{
|
||||
npc.stopSkillEffects(PETRIFY.getSkill());
|
||||
npc.setTargetable(true);
|
||||
npc.setInvul(false);
|
||||
return null;
|
||||
}
|
||||
case "WAVE_DEFEATED_CHECK":
|
||||
{
|
||||
final int sepulcherId = getSepulcherId(player);
|
||||
final int currentWave = STORED_PROGRESS.get(sepulcherId);
|
||||
Location lastLocation = null;
|
||||
for (Npc spawn : STORED_MONSTER_SPAWNS.get(sepulcherId))
|
||||
{
|
||||
lastLocation = spawn.getLocation();
|
||||
if (spawn.isDead())
|
||||
{
|
||||
STORED_MONSTER_SPAWNS.get(sepulcherId).remove(spawn);
|
||||
}
|
||||
}
|
||||
if (STORED_MONSTER_SPAWNS.get(sepulcherId).isEmpty())
|
||||
{
|
||||
if (currentWave == 2)
|
||||
{
|
||||
if (getRandomBoolean())
|
||||
{
|
||||
spawnNextWave(player);
|
||||
}
|
||||
else
|
||||
{
|
||||
spawnKeyChest(player, lastLocation);
|
||||
}
|
||||
}
|
||||
else if (currentWave == 5)
|
||||
{
|
||||
STORED_PROGRESS.put(sepulcherId, currentWave + 1);
|
||||
spawnNextWave(player);
|
||||
}
|
||||
}
|
||||
else if (sepulcherId > 0)
|
||||
{
|
||||
startQuestTimer("WAVE_DEFEATED_CHECK", 5000, null, player, false);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onFirstTalk(Npc npc, PlayerInstance player)
|
||||
{
|
||||
if (npc == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
if (npc.getId() == MYSTERIOUS_CHEST)
|
||||
{
|
||||
if (npc.isScriptValue(0))
|
||||
{
|
||||
npc.setScriptValue(1);
|
||||
npc.deleteMe();
|
||||
spawnNextWave(player);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
if (npc.getId() == KEY_CHEST)
|
||||
{
|
||||
if (npc.isScriptValue(0))
|
||||
{
|
||||
npc.setScriptValue(1);
|
||||
npc.deleteMe();
|
||||
giveItems(player, CHAPEL_KEY, 1);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
return npc.getId() + ".html";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpawn(Npc npc)
|
||||
{
|
||||
npc.setRandomWalking(false);
|
||||
if (npc.getId() == ROOM_3_VICTIM)
|
||||
{
|
||||
npc.disableCoreAI(true);
|
||||
npc.setRunning();
|
||||
startQuestTimer("VICTIM_FLEE", 1000, npc, null, false);
|
||||
}
|
||||
if (npc.getId() == ROOM_5_STATUE_GUARD)
|
||||
{
|
||||
npc.setTarget(npc);
|
||||
npc.doCast(PETRIFY.getSkill());
|
||||
((Attackable) npc).setCanReturnToSpawnPoint(false);
|
||||
npc.setTargetable(false);
|
||||
npc.setInvul(true);
|
||||
cancelQuestTimer("REMOVE_PETRIFY", npc, null);
|
||||
startQuestTimer("REMOVE_PETRIFY", 5 * 60 * 1000, npc, null, false); // 5 minutes
|
||||
}
|
||||
return super.onSpawn(npc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case ROOM_3_VICTIM:
|
||||
{
|
||||
addSpawn(ROOM_3_CHEST_REWARDER, npc);
|
||||
break;
|
||||
}
|
||||
case ROOM_4_CHARM_1:
|
||||
case ROOM_4_CHARM_2:
|
||||
case ROOM_4_CHARM_3:
|
||||
case ROOM_4_CHARM_4:
|
||||
{
|
||||
for (ZoneType zone : ZoneManager.getInstance().getZones(killer))
|
||||
{
|
||||
if ((zone instanceof EffectZone) && (((EffectZone) zone).getSkillLevel(CHARM_SKILLS.get(npc.getId())) > 0))
|
||||
{
|
||||
zone.setEnabled(false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, CHARM_MSG.get(npc.getId()));
|
||||
break;
|
||||
}
|
||||
case CONQUEROR_BOSS:
|
||||
case EMPEROR_BOSS:
|
||||
case GREAT_SAGES_BOSS:
|
||||
case JUDGE_BOSS:
|
||||
{
|
||||
final int sepulcherId = getSepulcherId(killer);
|
||||
final int currentWave = STORED_PROGRESS.get(sepulcherId);
|
||||
STORED_PROGRESS.put(sepulcherId, currentWave + 1);
|
||||
|
||||
if ((killer.getParty() != null) && (sepulcherId > 0))
|
||||
{
|
||||
for (PlayerInstance mem : killer.getParty().getMembers())
|
||||
{
|
||||
if (Util.checkIfInRange(1500, killer, mem, true))
|
||||
{
|
||||
final QuestState qs = killer.getQuestState(Q00620_FourGoblets.class.getSimpleName());
|
||||
if ((qs != null) && qs.isStarted())
|
||||
{
|
||||
giveItems(mem, 7255 + sepulcherId, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
spawnNextWave(killer);
|
||||
|
||||
addSpawn(TELEPORTER, npc, true, 0, false);
|
||||
break;
|
||||
}
|
||||
case ROOM_6_REWARD_CHEST:
|
||||
{
|
||||
npc.dropItem(killer, 57, getRandom(300, 1300));
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
spawnKeyChest(killer, npc.getLocation());
|
||||
break;
|
||||
}
|
||||
}
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
||||
private void tryEnter(Npc npc, PlayerInstance player)
|
||||
{
|
||||
final int npcId = npc.getId();
|
||||
if (!ZoneManager.getInstance().getZoneById(MANAGER_ZONES.get(npcId)).getPlayersInside().isEmpty())
|
||||
{
|
||||
showHtmlFile(player, npcId + "-FULL.htm", npc, null);
|
||||
return;
|
||||
}
|
||||
if (!player.isInParty() || (player.getParty().getMemberCount() < PARTY_MEMBER_COUNT))
|
||||
{
|
||||
showHtmlFile(player, npcId + "-SP.html", npc, null);
|
||||
return;
|
||||
}
|
||||
if (!player.getParty().isLeader(player))
|
||||
{
|
||||
showHtmlFile(player, npcId + "-NL.html", npc, null);
|
||||
return;
|
||||
}
|
||||
|
||||
for (PlayerInstance mem : player.getParty().getMembers())
|
||||
{
|
||||
final QuestState qs = mem.getQuestState(Q00620_FourGoblets.class.getSimpleName());
|
||||
if ((qs == null) || (!qs.isStarted() && !qs.isCompleted()))
|
||||
{
|
||||
showHtmlFile(player, npcId + "-NS.html", npc, mem);
|
||||
return;
|
||||
}
|
||||
if (!hasQuestItems(mem, ENTRANCE_PASS))
|
||||
{
|
||||
showHtmlFile(player, npcId + "-SE.html", npc, mem);
|
||||
return;
|
||||
}
|
||||
if (player.getWeightPenalty() >= 3)
|
||||
{
|
||||
mem.sendPacket(SystemMessageId.NOT_ENOUGH_SPACE_IN_THE_INVENTORY_UNABLE_TO_PROCESS_THIS_REQUEST_UNTIL_YOUR_INVENTORY_S_WEIGHT_AND_SLOT_COUNT_ARE_LESS_THAN_80_PERCENT_OF_CAPACITY);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
final GlobalVariablesManager vars = GlobalVariablesManager.getInstance();
|
||||
final long var = vars.getLong("FourSepulchers" + npcId, 0) + (TIME_ATTACK * 60 * 1000);
|
||||
if (var > System.currentTimeMillis())
|
||||
{
|
||||
showHtmlFile(player, npcId + "-NE.html", npc, null);
|
||||
return;
|
||||
}
|
||||
|
||||
final int sepulcherId = getSepulcherId(player);
|
||||
|
||||
// Delete any existing spawns
|
||||
for (Creature creature : ZoneManager.getInstance().getZoneById(MANAGER_ZONES.get(npcId)).getCharactersInside())
|
||||
{
|
||||
if (creature.isMonster() || creature.isRaid() || (creature.isNpc() && ((((Npc) creature).getId() == MYSTERIOUS_CHEST) || (((Npc) creature).getId() == KEY_CHEST) || (((Npc) creature).getId() == TELEPORTER))))
|
||||
{
|
||||
creature.deleteMe();
|
||||
}
|
||||
}
|
||||
// Disable EffectZones
|
||||
for (int[] spawnInfo : CHEST_SPAWN_LOCATIONS)
|
||||
{
|
||||
if ((spawnInfo[0] == sepulcherId) && (spawnInfo[1] == 4))
|
||||
{
|
||||
for (ZoneType zone : ZoneManager.getInstance().getZones(spawnInfo[2], spawnInfo[3], spawnInfo[4]))
|
||||
{
|
||||
if (zone instanceof EffectZone)
|
||||
{
|
||||
zone.setEnabled(false);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Close all doors
|
||||
for (int[] doorInfo : DOORS)
|
||||
{
|
||||
if (doorInfo[0] == sepulcherId)
|
||||
{
|
||||
closeDoor(doorInfo[2], 0);
|
||||
}
|
||||
}
|
||||
|
||||
// Teleport players inside
|
||||
final List<PlayerInstance> members = new ArrayList<>();
|
||||
for (PlayerInstance mem : player.getParty().getMembers())
|
||||
{
|
||||
if (Util.checkIfInRange(700, player, mem, true))
|
||||
{
|
||||
members.add(mem);
|
||||
}
|
||||
}
|
||||
for (PlayerInstance mem : members)
|
||||
{
|
||||
mem.teleToLocation(START_HALL_SPAWNS.get(npcId), 80);
|
||||
takeItems(mem, ENTRANCE_PASS, 1);
|
||||
takeItems(mem, CHAPEL_KEY, -1);
|
||||
if (!hasQuestItems(mem, ANTIQUE_BROOCH))
|
||||
{
|
||||
giveItems(mem, USED_PASS, 1);
|
||||
}
|
||||
}
|
||||
showHtmlFile(player, npcId + "-OK.html", npc, null);
|
||||
|
||||
// Kick all players when/if time is over
|
||||
ThreadPool.schedule(() -> ZoneManager.getInstance().getZoneById(MANAGER_ZONES.get(npcId)).oustAllPlayers(), TIME_ATTACK * 60 * 1000);
|
||||
|
||||
// Save attack time
|
||||
vars.set("FourSepulchers" + npcId, System.currentTimeMillis());
|
||||
// Init progress
|
||||
STORED_PROGRESS.put(sepulcherId, 1); // start from 1
|
||||
// Start
|
||||
startQuestTimer("SPAWN_MYSTERIOUS_CHEST", ENTRY_DELAY * 60 * 1000, npc, player, false);
|
||||
}
|
||||
|
||||
private void spawnNextWave(PlayerInstance player)
|
||||
{
|
||||
final int sepulcherId = getSepulcherId(player);
|
||||
final int currentWave = STORED_PROGRESS.get(sepulcherId);
|
||||
for (int[] spawnInfo : ROOM_SPAWN_DATA)
|
||||
{
|
||||
if ((spawnInfo[0] == sepulcherId) && (spawnInfo[1] == currentWave))
|
||||
{
|
||||
STORED_MONSTER_SPAWNS.get(sepulcherId).add(addSpawn(spawnInfo[2], spawnInfo[3], spawnInfo[4], spawnInfo[5], spawnInfo[6], false, 0));
|
||||
}
|
||||
}
|
||||
if (currentWave == 4)
|
||||
{
|
||||
for (ZoneType zone : ZoneManager.getInstance().getZones(player))
|
||||
{
|
||||
if (zone instanceof EffectZone)
|
||||
{
|
||||
zone.setEnabled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((currentWave == 2) || (currentWave == 5))
|
||||
{
|
||||
startQuestTimer("WAVE_DEFEATED_CHECK", 5000, null, player, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
STORED_MONSTER_SPAWNS.get(sepulcherId).clear(); // no need check for these waves
|
||||
}
|
||||
}
|
||||
|
||||
private void spawnMysteriousChest(PlayerInstance player)
|
||||
{
|
||||
final int sepulcherId = getSepulcherId(player);
|
||||
final int currentWave = STORED_PROGRESS.get(sepulcherId);
|
||||
for (int[] spawnInfo : CHEST_SPAWN_LOCATIONS)
|
||||
{
|
||||
if ((spawnInfo[0] == sepulcherId) && (spawnInfo[1] == currentWave))
|
||||
{
|
||||
addSpawn(MYSTERIOUS_CHEST, spawnInfo[2], spawnInfo[3], spawnInfo[4], spawnInfo[5], false, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void spawnKeyChest(PlayerInstance player, Location loc)
|
||||
{
|
||||
addSpawn(KEY_CHEST, loc != null ? loc : player);
|
||||
}
|
||||
|
||||
private int getSepulcherId(PlayerInstance player)
|
||||
{
|
||||
if (ZoneManager.getInstance().getZoneById(CONQUEROR_ZONE).getPlayersInside().contains(player))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if (ZoneManager.getInstance().getZoneById(EMPEROR_ZONE).getPlayersInside().contains(player))
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
if (ZoneManager.getInstance().getZoneById(GREAT_SAGES_ZONE).getPlayersInside().contains(player))
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
if (ZoneManager.getInstance().getZoneById(JUDGE_ZONE).getPlayersInside().contains(player))
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
private void showHtmlFile(PlayerInstance player, String file, Npc npc, PlayerInstance member)
|
||||
{
|
||||
final NpcHtmlMessage html = new NpcHtmlMessage(npc.getObjectId());
|
||||
html.setFile(player, "data/scripts/ai/areas/ImperialTomb/FourSepulchers/" + file);
|
||||
if (member != null)
|
||||
{
|
||||
html.replace("%member%", member.getName());
|
||||
}
|
||||
player.sendPacket(html);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void load()
|
||||
{
|
||||
ROOM_SPAWN_DATA.clear();
|
||||
parseDatapackFile("data/scripts/ai/areas/ImperialTomb/FourSepulchers/FourSepulchers.xml");
|
||||
LOGGER.info("[Four Sepulchers] Loaded " + ROOM_SPAWN_DATA.size() + " spawn zones data.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void parseDocument(Document doc, File f)
|
||||
{
|
||||
for (Node n = doc.getFirstChild(); n != null; n = n.getNextSibling())
|
||||
{
|
||||
if ("list".equalsIgnoreCase(n.getNodeName()))
|
||||
{
|
||||
for (Node b = n.getFirstChild(); b != null; b = b.getNextSibling())
|
||||
{
|
||||
if ("spawn".equalsIgnoreCase(b.getNodeName()))
|
||||
{
|
||||
final NamedNodeMap attrs = b.getAttributes();
|
||||
final int[] info =
|
||||
{
|
||||
parseInteger(attrs, "sepulcherId"),
|
||||
parseInteger(attrs, "wave"),
|
||||
parseInteger(attrs, "npcId"),
|
||||
parseInteger(attrs, "x"),
|
||||
parseInteger(attrs, "y"),
|
||||
parseInteger(attrs, "z"),
|
||||
parseInteger(attrs, "heading")
|
||||
};
|
||||
ROOM_SPAWN_DATA.add(info);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new FourSepulchers();
|
||||
}
|
||||
}
|
@@ -1,797 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FourSepulchers.xsd">
|
||||
<!-- SEPULCHER 1 - ROOM 1 -->
|
||||
<spawn sepulcherId="1" wave="1" npcId="18120" x="182214" y="-85572" z="-7219" heading="53601" /> <!-- key rewarder -->
|
||||
<spawn sepulcherId="1" wave="1" npcId="18132" x="181626" y="-85799" z="-7218" heading="48022" />
|
||||
<spawn sepulcherId="1" wave="1" npcId="18132" x="182223" y="-85833" z="-7220" heading="50241" />
|
||||
<spawn sepulcherId="1" wave="1" npcId="18132" x="181850" y="-85294" z="-7220" heading="20973" />
|
||||
<spawn sepulcherId="1" wave="1" npcId="18132" x="182260" y="-85353" z="-7218" heading="15208" />
|
||||
<spawn sepulcherId="1" wave="1" npcId="18133" x="181953" y="-85506" z="-7219" heading="38327" />
|
||||
<spawn sepulcherId="1" wave="1" npcId="18133" x="181639" y="-85397" z="-7218" heading="20774" />
|
||||
<spawn sepulcherId="1" wave="1" npcId="18133" x="182364" y="-86036" z="-7220" heading="664" />
|
||||
<spawn sepulcherId="1" wave="1" npcId="18133" x="182292" y="-85306" z="-7220" heading="11807" />
|
||||
<spawn sepulcherId="1" wave="1" npcId="18137" x="182499" y="-85379" z="-7218" heading="11039" />
|
||||
<spawn sepulcherId="1" wave="1" npcId="18137" x="181872" y="-85232" z="-7220" heading="12920" />
|
||||
<spawn sepulcherId="1" wave="1" npcId="18137" x="181933" y="-85500" z="-7216" heading="41059" />
|
||||
<spawn sepulcherId="1" wave="1" npcId="18137" x="181668" y="-85847" z="-7220" heading="41059" />
|
||||
<spawn sepulcherId="1" wave="1" npcId="18137" x="181921" y="-85909" z="-7216" heading="34037" />
|
||||
<spawn sepulcherId="1" wave="1" npcId="18137" x="182257" y="-85886" z="-7220" heading="39472" />
|
||||
<!-- SEPULCHER 1 - ROOM 2 -->
|
||||
<spawn sepulcherId="1" wave="2" npcId="18141" x="183799" y="-85246" z="-7217" heading="3307" />
|
||||
<spawn sepulcherId="1" wave="2" npcId="18141" x="184179" y="-85391" z="-7218" heading="51226" />
|
||||
<spawn sepulcherId="1" wave="2" npcId="18141" x="184153" y="-85262" z="-7220" heading="65064" />
|
||||
<spawn sepulcherId="1" wave="2" npcId="18141" x="184192" y="-85541" z="-7219" heading="50053" />
|
||||
<spawn sepulcherId="1" wave="2" npcId="18141" x="183812" y="-85901" z="-7220" heading="55728" />
|
||||
<spawn sepulcherId="1" wave="2" npcId="18141" x="184236" y="-85883" z="-7216" heading="442" />
|
||||
<spawn sepulcherId="1" wave="2" npcId="18141" x="183629" y="-85903" z="-7220" heading="26470" />
|
||||
<spawn sepulcherId="1" wave="2" npcId="18141" x="183631" y="-85653" z="-7219" heading="31350" />
|
||||
<spawn sepulcherId="1" wave="2" npcId="18141" x="183543" y="-85330" z="-7220" heading="9672" />
|
||||
<spawn sepulcherId="1" wave="2" npcId="18141" x="184213" y="-85694" z="-7219" heading="60977" />
|
||||
<!-- SEPULCHER 1 - ROOM 3 -->
|
||||
<spawn sepulcherId="1" wave="3" npcId="18150" x="185710" y="-85584" z="-7218" heading="833" /> <!-- victim -->
|
||||
<spawn sepulcherId="1" wave="3" npcId="18166" x="185513" y="-85415" z="-7218" heading="29444" />
|
||||
<spawn sepulcherId="1" wave="3" npcId="18166" x="185336" y="-85408" z="-7218" heading="22923" />
|
||||
<spawn sepulcherId="1" wave="3" npcId="18166" x="185548" y="-85174" z="-7220" heading="4022" />
|
||||
<spawn sepulcherId="1" wave="3" npcId="18166" x="185376" y="-85823" z="-7220" heading="18091" />
|
||||
<spawn sepulcherId="1" wave="3" npcId="18166" x="185413" y="-86047" z="-7220" heading="33824" />
|
||||
<spawn sepulcherId="1" wave="3" npcId="18166" x="185442" y="-85589" z="-7219" heading="13516" />
|
||||
<spawn sepulcherId="1" wave="3" npcId="18166" x="185807" y="-85664" z="-7219" heading="64429" />
|
||||
<spawn sepulcherId="1" wave="3" npcId="18166" x="185777" y="-86010" z="-7220" heading="42735" />
|
||||
<spawn sepulcherId="1" wave="3" npcId="18166" x="185895" y="-85843" z="-7220" heading="53917" />
|
||||
<spawn sepulcherId="1" wave="3" npcId="18166" x="185282" y="-85282" z="-7220" heading="27319" />
|
||||
<spawn sepulcherId="1" wave="3" npcId="18166" x="186031" y="-85572" z="-7219" heading="47324" />
|
||||
<spawn sepulcherId="1" wave="3" npcId="18166" x="186170" y="-85879" z="-7220" heading="53586" />
|
||||
<spawn sepulcherId="1" wave="3" npcId="18166" x="186220" y="-85157" z="-7220" heading="40777" />
|
||||
<spawn sepulcherId="1" wave="3" npcId="18166" x="185858" y="-85220" z="-7220" heading="63999" />
|
||||
<spawn sepulcherId="1" wave="3" npcId="18166" x="186071" y="-85346" z="-7220" heading="59964" />
|
||||
<spawn sepulcherId="1" wave="3" npcId="18166" x="186050" y="-85970" z="-7220" heading="59476" />
|
||||
<spawn sepulcherId="1" wave="3" npcId="18166" x="185489" y="-85616" z="-7219" heading="44597" />
|
||||
<spawn sepulcherId="1" wave="3" npcId="18171" x="186220" y="-86036" z="-7220" heading="61673" />
|
||||
<spawn sepulcherId="1" wave="3" npcId="18171" x="185884" y="-85339" z="-7220" heading="3121" />
|
||||
<spawn sepulcherId="1" wave="3" npcId="18171" x="185696" y="-85397" z="-7218" heading="58467" />
|
||||
<spawn sepulcherId="1" wave="3" npcId="18171" x="185774" y="-85843" z="-7220" heading="26341" />
|
||||
<spawn sepulcherId="1" wave="3" npcId="18171" x="185524" y="-85895" z="-7219" heading="34907" />
|
||||
<spawn sepulcherId="1" wave="3" npcId="18171" x="185524" y="-85895" z="-7216" heading="22369" />
|
||||
<spawn sepulcherId="1" wave="3" npcId="18171" x="185450" y="-85199" z="-7219" heading="3565" />
|
||||
<spawn sepulcherId="1" wave="3" npcId="18171" x="185233" y="-85336" z="-7220" heading="20883" />
|
||||
<!-- SEPULCHER 1 - ROOM 4 -->
|
||||
<spawn sepulcherId="1" wave="4" npcId="18177" x="187536" y="-85561" z="-7219" heading="30267" /> <!-- key rewarder -->
|
||||
<spawn sepulcherId="1" wave="4" npcId="18196" x="186903" y="-85044" z="-7216" heading="55684" /> <!-- charm -->
|
||||
<spawn sepulcherId="1" wave="4" npcId="18197" x="188101" y="-85059" z="-7220" heading="38092" /> <!-- charm -->
|
||||
<spawn sepulcherId="1" wave="4" npcId="18198" x="188115" y="-86084" z="-7220" heading="24830" /> <!-- charm -->
|
||||
<spawn sepulcherId="1" wave="4" npcId="18199" x="186895" y="-86092" z="-7220" heading="9770" /> <!-- charm -->
|
||||
<spawn sepulcherId="1" wave="4" npcId="18185" x="187904" y="-85328" z="-7220" heading="8357" />
|
||||
<spawn sepulcherId="1" wave="4" npcId="18185" x="187696" y="-85307" z="-7220" heading="31718" />
|
||||
<spawn sepulcherId="1" wave="4" npcId="18185" x="187690" y="-85705" z="-7219" heading="14402" />
|
||||
<spawn sepulcherId="1" wave="4" npcId="18185" x="187428" y="-85743" z="-7219" heading="48912" />
|
||||
<spawn sepulcherId="1" wave="4" npcId="18185" x="187135" y="-85904" z="-7220" heading="38008" />
|
||||
<spawn sepulcherId="1" wave="4" npcId="18185" x="187235" y="-85292" z="-7220" heading="32428" />
|
||||
<spawn sepulcherId="1" wave="4" npcId="18187" x="187955" y="-85906" z="-7220" heading="57628" />
|
||||
<spawn sepulcherId="1" wave="4" npcId="18187" x="187907" y="-85704" z="-7219" heading="19115" />
|
||||
<spawn sepulcherId="1" wave="4" npcId="18187" x="187645" y="-85421" z="-7219" heading="41743" />
|
||||
<spawn sepulcherId="1" wave="4" npcId="18187" x="187774" y="-85271" z="-7216" heading="19492" />
|
||||
<spawn sepulcherId="1" wave="4" npcId="18187" x="187419" y="-85213" z="-7220" heading="25008" />
|
||||
<spawn sepulcherId="1" wave="4" npcId="18187" x="187144" y="-85228" z="-7220" heading="33336" />
|
||||
<spawn sepulcherId="1" wave="4" npcId="18187" x="187066" y="-85410" z="-7218" heading="44928" />
|
||||
<spawn sepulcherId="1" wave="4" npcId="18187" x="187575" y="-85835" z="-7220" heading="469" />
|
||||
<spawn sepulcherId="1" wave="4" npcId="18187" x="187052" y="-85592" z="-7219" heading="48351" />
|
||||
<spawn sepulcherId="1" wave="4" npcId="18187" x="187102" y="-85839" z="-7220" heading="51235" />
|
||||
<spawn sepulcherId="1" wave="4" npcId="18187" x="187245" y="-85956" z="-7220" heading="58383" />
|
||||
<!-- SEPULCHER 1 - ROOM 5 (First Wave) -->
|
||||
<spawn sepulcherId="1" wave="5" npcId="18232" x="189912" y="-86051" z="-7220" heading="32768" /> <!-- statue -->
|
||||
<spawn sepulcherId="1" wave="5" npcId="18232" x="189910" y="-85977" z="-7220" heading="32768" /> <!-- statue -->
|
||||
<spawn sepulcherId="1" wave="5" npcId="18232" x="189917" y="-85844" z="-7220" heading="32768" /> <!-- statue -->
|
||||
<spawn sepulcherId="1" wave="5" npcId="18232" x="189924" y="-85911" z="-7220" heading="32768" /> <!-- statue -->
|
||||
<spawn sepulcherId="1" wave="5" npcId="18232" x="189932" y="-85337" z="-7216" heading="32768" /> <!-- statue -->
|
||||
<spawn sepulcherId="1" wave="5" npcId="18232" x="189912" y="-85183" z="-7220" heading="32768" /> <!-- statue -->
|
||||
<spawn sepulcherId="1" wave="5" npcId="18232" x="189927" y="-85265" z="-7216" heading="32768" /> <!-- statue -->
|
||||
<spawn sepulcherId="1" wave="5" npcId="18232" x="189910" y="-85102" z="-7216" heading="32768" /> <!-- statue -->
|
||||
<spawn sepulcherId="1" wave="5" npcId="18220" x="189602" y="-85381" z="-7218" heading="16239" />
|
||||
<spawn sepulcherId="1" wave="5" npcId="18220" x="189433" y="-85782" z="-7218" heading="44991" />
|
||||
<spawn sepulcherId="1" wave="5" npcId="18220" x="189065" y="-85279" z="-7220" heading="14628" />
|
||||
<spawn sepulcherId="1" wave="5" npcId="18220" x="188986" y="-85744" z="-7218" heading="31883" />
|
||||
<spawn sepulcherId="1" wave="5" npcId="18222" x="189573" y="-85560" z="-7219" heading="53861" />
|
||||
<spawn sepulcherId="1" wave="5" npcId="18222" x="189444" y="-85294" z="-7220" heading="9381" />
|
||||
<spawn sepulcherId="1" wave="5" npcId="18222" x="189328" y="-85440" z="-7219" heading="59806" />
|
||||
<spawn sepulcherId="1" wave="5" npcId="18222" x="189065" y="-85279" z="-7220" heading="14628" />
|
||||
<spawn sepulcherId="1" wave="5" npcId="18222" x="189214" y="-85161" z="-7220" heading="3036" />
|
||||
<spawn sepulcherId="1" wave="5" npcId="18222" x="189002" y="-85428" z="-7219" heading="10979" />
|
||||
<spawn sepulcherId="1" wave="5" npcId="18222" x="188937" y="-85244" z="-7220" heading="19925" />
|
||||
<spawn sepulcherId="1" wave="5" npcId="18222" x="188880" y="-85642" z="-7219" heading="13008" />
|
||||
<spawn sepulcherId="1" wave="5" npcId="18222" x="188827" y="-85800" z="-7220" heading="18494" />
|
||||
<spawn sepulcherId="1" wave="5" npcId="18222" x="188859" y="-85956" z="-7220" heading="37418" />
|
||||
<spawn sepulcherId="1" wave="5" npcId="18222" x="189018" y="-85880" z="-7220" heading="43207" />
|
||||
<spawn sepulcherId="1" wave="5" npcId="18222" x="189134" y="-85699" z="-7219" heading="25695" />
|
||||
<spawn sepulcherId="1" wave="5" npcId="18222" x="189319" y="-85848" z="-7220" heading="25290" />
|
||||
<spawn sepulcherId="1" wave="5" npcId="18222" x="189467" y="-85977" z="-7219" heading="40733" />
|
||||
<spawn sepulcherId="1" wave="5" npcId="18222" x="189632" y="-85819" z="-7220" heading="45368" />
|
||||
<spawn sepulcherId="1" wave="5" npcId="18222" x="189736" y="-85545" z="-7219" heading="957" />
|
||||
<spawn sepulcherId="1" wave="5" npcId="18226" x="189498" y="-85844" z="-7220" heading="58569" />
|
||||
<spawn sepulcherId="1" wave="5" npcId="18226" x="189760" y="-85847" z="-7220" heading="65416" />
|
||||
<spawn sepulcherId="1" wave="5" npcId="18226" x="189247" y="-85646" z="-7219" heading="39071" />
|
||||
<spawn sepulcherId="1" wave="5" npcId="18226" x="189185" y="-85236" z="-7220" heading="31522" />
|
||||
<spawn sepulcherId="1" wave="5" npcId="18226" x="188835" y="-85216" z="-7220" heading="32172" />
|
||||
<spawn sepulcherId="1" wave="5" npcId="18226" x="189585" y="-85284" z="-7220" heading="17265" />
|
||||
<spawn sepulcherId="1" wave="5" npcId="18226" x="189615" y="-85638" z="-7219" heading="11763" />
|
||||
<!-- SEPULCHER 1 - ROOM 5 (Second Wave) -->
|
||||
<spawn sepulcherId="1" wave="6" npcId="18212" x="189403" y="-85583" z="-7219" heading="29699" /> <!-- key rewarder -->
|
||||
<spawn sepulcherId="1" wave="6" npcId="18232" x="190030" y="-85669" z="-7219" heading="32768" /> <!-- statue -->
|
||||
<spawn sepulcherId="1" wave="6" npcId="18232" x="190038" y="-85583" z="-7219" heading="32768" /> <!-- statue -->
|
||||
<spawn sepulcherId="1" wave="6" npcId="18232" x="190037" y="-85497" z="-7219" heading="32768" /> <!-- statue -->
|
||||
<spawn sepulcherId="1" wave="6" npcId="18195" x="189357" y="-85356" z="-7218" heading="7328" />
|
||||
<spawn sepulcherId="1" wave="6" npcId="18195" x="189136" y="-85943" z="-7220" heading="31470" />
|
||||
<spawn sepulcherId="1" wave="6" npcId="18195" x="189504" y="-85989" z="-7218" heading="51090" />
|
||||
<spawn sepulcherId="1" wave="6" npcId="18195" x="189070" y="-85599" z="-7219" heading="18361" />
|
||||
<spawn sepulcherId="1" wave="6" npcId="18221" x="189594" y="-85322" z="-7220" heading="20071" />
|
||||
<spawn sepulcherId="1" wave="6" npcId="18221" x="188987" y="-85288" z="-7220" heading="19394" />
|
||||
<spawn sepulcherId="1" wave="6" npcId="18221" x="189232" y="-85782" z="-7218" heading="53954" />
|
||||
<spawn sepulcherId="1" wave="6" npcId="18221" x="189706" y="-85857" z="-7216" heading="63899" />
|
||||
<spawn sepulcherId="1" wave="6" npcId="18223" x="189533" y="-85989" z="-7217" heading="60516" />
|
||||
<spawn sepulcherId="1" wave="6" npcId="18223" x="189813" y="-85246" z="-7220" heading="3484" />
|
||||
<spawn sepulcherId="1" wave="6" npcId="18223" x="189630" y="-85603" z="-7219" heading="6643" />
|
||||
<spawn sepulcherId="1" wave="6" npcId="18223" x="189335" y="-85187" z="-7220" heading="32827" />
|
||||
<spawn sepulcherId="1" wave="6" npcId="18223" x="189223" y="-85456" z="-7219" heading="19322" />
|
||||
<spawn sepulcherId="1" wave="6" npcId="18223" x="188986" y="-85810" z="-7218" heading="42998" />
|
||||
<spawn sepulcherId="1" wave="6" npcId="18227" x="189029" y="-85851" z="-7220" heading="50392" />
|
||||
<spawn sepulcherId="1" wave="6" npcId="18227" x="189165" y="-85302" z="-7220" heading="8388" />
|
||||
<spawn sepulcherId="1" wave="6" npcId="18227" x="188905" y="-85572" z="-7219" heading="32328" />
|
||||
<spawn sepulcherId="1" wave="6" npcId="18227" x="189535" y="-85820" z="-7220" heading="4267" />
|
||||
<spawn sepulcherId="1" wave="6" npcId="18227" x="189688" y="-85478" z="-7219" heading="11996" />
|
||||
<!-- SEPULCHER 1 - ROOM 6 (Boss) -->
|
||||
<spawn sepulcherId="1" wave="7" npcId="25346" x="191225" y="-85574" z="-7219" heading="32768" />
|
||||
<!-- SEPULCHER 1 - ROOM 6 (After Fight) -->
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191196" y="-85211" z="-7217" heading="54880" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="190811" y="-85324" z="-7220" heading="47417" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="190958" y="-85368" z="-7217" heading="62502" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="190813" y="-85413" z="-7220" heading="9736" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="190948" y="-85157" z="-7220" heading="35471" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191124" y="-85089" z="-7220" heading="18426" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="190963" y="-85239" z="-7217" heading="8963" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191048" y="-85380" z="-7217" heading="64153" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191179" y="-85564" z="-7217" heading="55373" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="190956" y="-85553" z="-7217" heading="33403" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191169" y="-85540" z="-7217" heading="30012" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="190716" y="-85544" z="-7217" heading="32377" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="190880" y="-85819" z="-7217" heading="32609" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191064" y="-85913" z="-7217" heading="64993" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="190869" y="-85906" z="-7217" heading="47840" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="190968" y="-85908" z="-7217" heading="65325" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191012" y="-85821" z="-7217" heading="32639" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191514" y="-86163" z="-7220" heading="3829" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191262" y="-86099" z="-7220" heading="53048" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191449" y="-86188" z="-7220" heading="62329" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191804" y="-85880" z="-7220" heading="17061" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191712" y="-86036" z="-7220" heading="11944" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191588" y="-85839" z="-7217" heading="31438" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191762" y="-86140" z="-7220" heading="59561" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191812" y="-86003" z="-7220" heading="12733" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191678" y="-86111" z="-7220" heading="3202" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191660" y="-85672" z="-7220" heading="32660" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191757" y="-85673" z="-7220" heading="18712" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191406" y="-85942" z="-7217" heading="63246" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191593" y="-86031" z="-7220" heading="60902" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191291" y="-85573" z="-7217" heading="29939" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191666" y="-85849" z="-7220" heading="50363" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191419" y="-85892" z="-7217" heading="37740" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191285" y="-85915" z="-7217" heading="65441" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191116" y="-85398" z="-7217" heading="62836" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191474" y="-85831" z="-7217" heading="32037" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191298" y="-85355" z="-7217" heading="55580" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191160" y="-85543" z="-7217" heading="21543" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191081" y="-85567" z="-7217" heading="33087" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191478" y="-85625" z="-7217" heading="30132" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191317" y="-85830" z="-7217" heading="32701" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191204" y="-85856" z="-7217" heading="58175" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191174" y="-85823" z="-7217" heading="32257" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191213" y="-85974" z="-7216" heading="49946" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191062" y="-85735" z="-7217" heading="53557" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191124" y="-85483" z="-7217" heading="50130" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="190991" y="-85577" z="-7217" heading="33922" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191125" y="-85095" z="-7220" heading="7579" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191474" y="-85153" z="-7220" heading="18365" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191423" y="-85094" z="-7220" heading="33696" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191586" y="-85103" z="-7220" heading="64960" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191404" y="-85197" z="-7216" heading="16187" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191482" y="-85263" z="-7217" heading="55555" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191403" y="-85250" z="-7217" heading="8191" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191479" y="-85089" z="-7220" heading="15570" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191615" y="-85204" z="-7217" heading="52068" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191484" y="-85205" z="-7217" heading="13400" />
|
||||
<spawn sepulcherId="1" wave="8" npcId="18256" x="191323" y="-86148" z="-7220" heading="58477" />
|
||||
<!-- SEPULCHER 2 - ROOM 1 -->
|
||||
<spawn sepulcherId="2" wave="1" npcId="18120" x="180696" y="-88974" z="-7218" heading="213" /> <!-- key rewarder -->
|
||||
<spawn sepulcherId="2" wave="1" npcId="18132" x="180855" y="-88602" z="-7219" heading="43355" />
|
||||
<spawn sepulcherId="2" wave="1" npcId="18132" x="179966" y="-88624" z="-7215" heading="59734" />
|
||||
<spawn sepulcherId="2" wave="1" npcId="18132" x="180376" y="-88623" z="-7219" heading="49152" />
|
||||
<spawn sepulcherId="2" wave="1" npcId="18132" x="179955" y="-89309" z="-7219" heading="5304" />
|
||||
<spawn sepulcherId="2" wave="1" npcId="18133" x="180685" y="-89250" z="-7219" heading="24773" />
|
||||
<spawn sepulcherId="2" wave="1" npcId="18133" x="180167" y="-88737" z="-7220" heading="55285" />
|
||||
<spawn sepulcherId="2" wave="1" npcId="18133" x="180153" y="-89322" z="-7219" heading="10102" />
|
||||
<spawn sepulcherId="2" wave="1" npcId="18133" x="180744" y="-88787" z="-7217" heading="33539" />
|
||||
<spawn sepulcherId="2" wave="1" npcId="18137" x="179979" y="-88951" z="-7218" heading="56294" />
|
||||
<spawn sepulcherId="2" wave="1" npcId="18137" x="180187" y="-88971" z="-7218" heading="32131" />
|
||||
<spawn sepulcherId="2" wave="1" npcId="18137" x="179962" y="-88790" z="-7217" heading="17482" />
|
||||
<spawn sepulcherId="2" wave="1" npcId="18137" x="180367" y="-89168" z="-7217" heading="29297" />
|
||||
<spawn sepulcherId="2" wave="1" npcId="18137" x="180559" y="-88787" z="-7217" heading="374" />
|
||||
<spawn sepulcherId="2" wave="1" npcId="18137" x="180589" y="-88974" z="-7218" heading="33297" />
|
||||
<!-- SEPULCHER 2 - ROOM 2 -->
|
||||
<spawn sepulcherId="2" wave="2" npcId="18141" x="182096" y="-88646" z="-7217" heading="3307" />
|
||||
<spawn sepulcherId="2" wave="2" npcId="18141" x="182476" y="-88791" z="-7218" heading="51226" />
|
||||
<spawn sepulcherId="2" wave="2" npcId="18141" x="182450" y="-88662" z="-7220" heading="65064" />
|
||||
<spawn sepulcherId="2" wave="2" npcId="18141" x="182489" y="-88941" z="-7219" heading="50053" />
|
||||
<spawn sepulcherId="2" wave="2" npcId="18141" x="182109" y="-89301" z="-7220" heading="55728" />
|
||||
<spawn sepulcherId="2" wave="2" npcId="18141" x="182533" y="-89283" z="-7216" heading="442" />
|
||||
<spawn sepulcherId="2" wave="2" npcId="18141" x="181926" y="-89303" z="-7220" heading="26470" />
|
||||
<spawn sepulcherId="2" wave="2" npcId="18141" x="181928" y="-89053" z="-7219" heading="31350" />
|
||||
<spawn sepulcherId="2" wave="2" npcId="18141" x="181840" y="-88730" z="-7220" heading="9672" />
|
||||
<spawn sepulcherId="2" wave="2" npcId="18141" x="182510" y="-89094" z="-7219" heading="60977" />
|
||||
<!-- SEPULCHER 2 - ROOM 3 -->
|
||||
<spawn sepulcherId="2" wave="3" npcId="18150" x="184007" y="-88984" z="-7218" heading="833" /> <!-- victim -->
|
||||
<spawn sepulcherId="2" wave="3" npcId="18166" x="183810" y="-88815" z="-7218" heading="29444" />
|
||||
<spawn sepulcherId="2" wave="3" npcId="18166" x="183633" y="-88808" z="-7218" heading="22923" />
|
||||
<spawn sepulcherId="2" wave="3" npcId="18166" x="183845" y="-88574" z="-7220" heading="4022" />
|
||||
<spawn sepulcherId="2" wave="3" npcId="18166" x="183673" y="-89223" z="-7220" heading="18091" />
|
||||
<spawn sepulcherId="2" wave="3" npcId="18166" x="183710" y="-89447" z="-7220" heading="33824" />
|
||||
<spawn sepulcherId="2" wave="3" npcId="18166" x="183739" y="-88989" z="-7219" heading="13516" />
|
||||
<spawn sepulcherId="2" wave="3" npcId="18166" x="184104" y="-89064" z="-7219" heading="64429" />
|
||||
<spawn sepulcherId="2" wave="3" npcId="18166" x="184074" y="-89410" z="-7220" heading="42735" />
|
||||
<spawn sepulcherId="2" wave="3" npcId="18166" x="184192" y="-89243" z="-7220" heading="53917" />
|
||||
<spawn sepulcherId="2" wave="3" npcId="18166" x="183579" y="-88682" z="-7220" heading="27319" />
|
||||
<spawn sepulcherId="2" wave="3" npcId="18166" x="184328" y="-88972" z="-7219" heading="47324" />
|
||||
<spawn sepulcherId="2" wave="3" npcId="18166" x="184467" y="-89279" z="-7220" heading="53586" />
|
||||
<spawn sepulcherId="2" wave="3" npcId="18166" x="184517" y="-88557" z="-7220" heading="40777" />
|
||||
<spawn sepulcherId="2" wave="3" npcId="18166" x="184155" y="-88620" z="-7220" heading="63999" />
|
||||
<spawn sepulcherId="2" wave="3" npcId="18166" x="184368" y="-88746" z="-7220" heading="59964" />
|
||||
<spawn sepulcherId="2" wave="3" npcId="18166" x="184347" y="-89370" z="-7220" heading="59476" />
|
||||
<spawn sepulcherId="2" wave="3" npcId="18166" x="183786" y="-89016" z="-7219" heading="44597" />
|
||||
<spawn sepulcherId="2" wave="3" npcId="18171" x="184517" y="-89436" z="-7220" heading="61673" />
|
||||
<spawn sepulcherId="2" wave="3" npcId="18171" x="184181" y="-88739" z="-7220" heading="3121" />
|
||||
<spawn sepulcherId="2" wave="3" npcId="18171" x="183993" y="-88797" z="-7218" heading="58467" />
|
||||
<spawn sepulcherId="2" wave="3" npcId="18171" x="184071" y="-89243" z="-7220" heading="26341" />
|
||||
<spawn sepulcherId="2" wave="3" npcId="18171" x="183821" y="-89295" z="-7219" heading="34907" />
|
||||
<spawn sepulcherId="2" wave="3" npcId="18171" x="183821" y="-89295" z="-7216" heading="22369" />
|
||||
<spawn sepulcherId="2" wave="3" npcId="18171" x="183747" y="-88599" z="-7219" heading="3565" />
|
||||
<spawn sepulcherId="2" wave="3" npcId="18171" x="183530" y="-88736" z="-7220" heading="20883" />
|
||||
<!-- SEPULCHER 2 - ROOM 4 -->
|
||||
<spawn sepulcherId="2" wave="4" npcId="18177" x="185833" y="-88961" z="-7219" heading="30267" /> <!-- key rewarder -->
|
||||
<spawn sepulcherId="2" wave="4" npcId="18196" x="185200" y="-88444" z="-7216" heading="55684" /> <!-- charm -->
|
||||
<spawn sepulcherId="2" wave="4" npcId="18197" x="186398" y="-88459" z="-7220" heading="38092" /> <!-- charm -->
|
||||
<spawn sepulcherId="2" wave="4" npcId="18198" x="186412" y="-89484" z="-7220" heading="24830" /> <!-- charm -->
|
||||
<spawn sepulcherId="2" wave="4" npcId="18199" x="185192" y="-89492" z="-7220" heading="9770" /> <!-- charm -->
|
||||
<spawn sepulcherId="2" wave="4" npcId="18185" x="186201" y="-88728" z="-7220" heading="8357" />
|
||||
<spawn sepulcherId="2" wave="4" npcId="18185" x="185993" y="-88707" z="-7220" heading="31718" />
|
||||
<spawn sepulcherId="2" wave="4" npcId="18185" x="185987" y="-89105" z="-7219" heading="14402" />
|
||||
<spawn sepulcherId="2" wave="4" npcId="18185" x="185725" y="-89143" z="-7219" heading="48912" />
|
||||
<spawn sepulcherId="2" wave="4" npcId="18185" x="185432" y="-89304" z="-7220" heading="38008" />
|
||||
<spawn sepulcherId="2" wave="4" npcId="18185" x="185532" y="-88692" z="-7220" heading="32428" />
|
||||
<spawn sepulcherId="2" wave="4" npcId="18187" x="186252" y="-89306" z="-7220" heading="57628" />
|
||||
<spawn sepulcherId="2" wave="4" npcId="18187" x="186204" y="-89104" z="-7219" heading="19115" />
|
||||
<spawn sepulcherId="2" wave="4" npcId="18187" x="185942" y="-88821" z="-7219" heading="41743" />
|
||||
<spawn sepulcherId="2" wave="4" npcId="18187" x="186071" y="-88671" z="-7216" heading="19492" />
|
||||
<spawn sepulcherId="2" wave="4" npcId="18187" x="185716" y="-88613" z="-7220" heading="25008" />
|
||||
<spawn sepulcherId="2" wave="4" npcId="18187" x="185441" y="-88628" z="-7220" heading="33336" />
|
||||
<spawn sepulcherId="2" wave="4" npcId="18187" x="185363" y="-88810" z="-7218" heading="44928" />
|
||||
<spawn sepulcherId="2" wave="4" npcId="18187" x="185872" y="-89235" z="-7220" heading="469" />
|
||||
<spawn sepulcherId="2" wave="4" npcId="18187" x="185349" y="-88992" z="-7219" heading="48351" />
|
||||
<spawn sepulcherId="2" wave="4" npcId="18187" x="185399" y="-89239" z="-7220" heading="51235" />
|
||||
<spawn sepulcherId="2" wave="4" npcId="18187" x="185542" y="-89356" z="-7220" heading="58383" />
|
||||
<!-- SEPULCHER 2 - ROOM 5 (First Wave) -->
|
||||
<spawn sepulcherId="2" wave="5" npcId="18232" x="188209" y="-89451" z="-7220" heading="32768" /> <!-- statue -->
|
||||
<spawn sepulcherId="2" wave="5" npcId="18232" x="188207" y="-89377" z="-7220" heading="32768" /> <!-- statue -->
|
||||
<spawn sepulcherId="2" wave="5" npcId="18232" x="188214" y="-89244" z="-7220" heading="32768" /> <!-- statue -->
|
||||
<spawn sepulcherId="2" wave="5" npcId="18232" x="188221" y="-89311" z="-7220" heading="32768" /> <!-- statue -->
|
||||
<spawn sepulcherId="2" wave="5" npcId="18232" x="188229" y="-88737" z="-7216" heading="32768" /> <!-- statue -->
|
||||
<spawn sepulcherId="2" wave="5" npcId="18232" x="188209" y="-88583" z="-7220" heading="32768" /> <!-- statue -->
|
||||
<spawn sepulcherId="2" wave="5" npcId="18232" x="188224" y="-88665" z="-7216" heading="32768" /> <!-- statue -->
|
||||
<spawn sepulcherId="2" wave="5" npcId="18232" x="188207" y="-88502" z="-7216" heading="32768" /> <!-- statue -->
|
||||
<spawn sepulcherId="2" wave="5" npcId="18220" x="187899" y="-88781" z="-7218" heading="16239" />
|
||||
<spawn sepulcherId="2" wave="5" npcId="18220" x="187730" y="-89182" z="-7218" heading="44991" />
|
||||
<spawn sepulcherId="2" wave="5" npcId="18220" x="187362" y="-88679" z="-7220" heading="14628" />
|
||||
<spawn sepulcherId="2" wave="5" npcId="18220" x="187283" y="-89144" z="-7218" heading="31883" />
|
||||
<spawn sepulcherId="2" wave="5" npcId="18222" x="187870" y="-88960" z="-7219" heading="53861" />
|
||||
<spawn sepulcherId="2" wave="5" npcId="18222" x="187741" y="-88694" z="-7220" heading="9381" />
|
||||
<spawn sepulcherId="2" wave="5" npcId="18222" x="187625" y="-88840" z="-7219" heading="59806" />
|
||||
<spawn sepulcherId="2" wave="5" npcId="18222" x="187362" y="-88679" z="-7220" heading="14628" />
|
||||
<spawn sepulcherId="2" wave="5" npcId="18222" x="187511" y="-88561" z="-7220" heading="3036" />
|
||||
<spawn sepulcherId="2" wave="5" npcId="18222" x="187299" y="-88828" z="-7219" heading="10979" />
|
||||
<spawn sepulcherId="2" wave="5" npcId="18222" x="187234" y="-88644" z="-7220" heading="19925" />
|
||||
<spawn sepulcherId="2" wave="5" npcId="18222" x="187177" y="-89042" z="-7219" heading="13008" />
|
||||
<spawn sepulcherId="2" wave="5" npcId="18222" x="187124" y="-89200" z="-7220" heading="18494" />
|
||||
<spawn sepulcherId="2" wave="5" npcId="18222" x="187156" y="-89356" z="-7220" heading="37418" />
|
||||
<spawn sepulcherId="2" wave="5" npcId="18222" x="187315" y="-89280" z="-7220" heading="43207" />
|
||||
<spawn sepulcherId="2" wave="5" npcId="18222" x="187431" y="-89099" z="-7219" heading="25695" />
|
||||
<spawn sepulcherId="2" wave="5" npcId="18222" x="187616" y="-89248" z="-7220" heading="25290" />
|
||||
<spawn sepulcherId="2" wave="5" npcId="18222" x="187764" y="-89377" z="-7219" heading="40733" />
|
||||
<spawn sepulcherId="2" wave="5" npcId="18222" x="187929" y="-89219" z="-7220" heading="45368" />
|
||||
<spawn sepulcherId="2" wave="5" npcId="18222" x="188033" y="-88945" z="-7219" heading="957" />
|
||||
<spawn sepulcherId="2" wave="5" npcId="18226" x="187795" y="-89244" z="-7220" heading="58569" />
|
||||
<spawn sepulcherId="2" wave="5" npcId="18226" x="188057" y="-89247" z="-7220" heading="65416" />
|
||||
<spawn sepulcherId="2" wave="5" npcId="18226" x="187544" y="-89046" z="-7219" heading="39071" />
|
||||
<spawn sepulcherId="2" wave="5" npcId="18226" x="187482" y="-88636" z="-7220" heading="31522" />
|
||||
<spawn sepulcherId="2" wave="5" npcId="18226" x="187132" y="-88616" z="-7220" heading="32172" />
|
||||
<spawn sepulcherId="2" wave="5" npcId="18226" x="187882" y="-88684" z="-7220" heading="17265" />
|
||||
<spawn sepulcherId="2" wave="5" npcId="18226" x="187912" y="-89038" z="-7219" heading="11763" />
|
||||
<!-- SEPULCHER 2 - ROOM 5 (Second Wave) -->
|
||||
<spawn sepulcherId="2" wave="6" npcId="18212" x="187700" y="-88983" z="-7219" heading="29699" /> <!-- key rewarder -->
|
||||
<spawn sepulcherId="2" wave="6" npcId="18232" x="188327" y="-89069" z="-7219" heading="32768" /> <!-- statue -->
|
||||
<spawn sepulcherId="2" wave="6" npcId="18232" x="188335" y="-88983" z="-7219" heading="32768" /> <!-- statue -->
|
||||
<spawn sepulcherId="2" wave="6" npcId="18232" x="188334" y="-88897" z="-7219" heading="32768" /> <!-- statue -->
|
||||
<spawn sepulcherId="2" wave="6" npcId="18195" x="187654" y="-88756" z="-7218" heading="7328" />
|
||||
<spawn sepulcherId="2" wave="6" npcId="18195" x="187433" y="-89343" z="-7220" heading="31470" />
|
||||
<spawn sepulcherId="2" wave="6" npcId="18195" x="187801" y="-89389" z="-7218" heading="51090" />
|
||||
<spawn sepulcherId="2" wave="6" npcId="18195" x="187367" y="-88999" z="-7219" heading="18361" />
|
||||
<spawn sepulcherId="2" wave="6" npcId="18221" x="187891" y="-88722" z="-7220" heading="20071" />
|
||||
<spawn sepulcherId="2" wave="6" npcId="18221" x="187284" y="-88688" z="-7220" heading="19394" />
|
||||
<spawn sepulcherId="2" wave="6" npcId="18221" x="187529" y="-89182" z="-7218" heading="53954" />
|
||||
<spawn sepulcherId="2" wave="6" npcId="18221" x="188003" y="-89257" z="-7216" heading="63899" />
|
||||
<spawn sepulcherId="2" wave="6" npcId="18223" x="187830" y="-89389" z="-7217" heading="60516" />
|
||||
<spawn sepulcherId="2" wave="6" npcId="18223" x="188110" y="-88646" z="-7220" heading="3484" />
|
||||
<spawn sepulcherId="2" wave="6" npcId="18223" x="187927" y="-89003" z="-7219" heading="6643" />
|
||||
<spawn sepulcherId="2" wave="6" npcId="18223" x="187632" y="-88587" z="-7220" heading="32827" />
|
||||
<spawn sepulcherId="2" wave="6" npcId="18223" x="187520" y="-88856" z="-7219" heading="19322" />
|
||||
<spawn sepulcherId="2" wave="6" npcId="18223" x="187283" y="-89210" z="-7218" heading="42998" />
|
||||
<spawn sepulcherId="2" wave="6" npcId="18227" x="187326" y="-89251" z="-7220" heading="50392" />
|
||||
<spawn sepulcherId="2" wave="6" npcId="18227" x="187462" y="-88702" z="-7220" heading="8388" />
|
||||
<spawn sepulcherId="2" wave="6" npcId="18227" x="187202" y="-88972" z="-7219" heading="32328" />
|
||||
<spawn sepulcherId="2" wave="6" npcId="18227" x="187832" y="-89220" z="-7220" heading="4267" />
|
||||
<spawn sepulcherId="2" wave="6" npcId="18227" x="187985" y="-88878" z="-7219" heading="11996" />
|
||||
<!-- SEPULCHER 2 - ROOM 6 (Boss) -->
|
||||
<spawn sepulcherId="2" wave="7" npcId="25342" x="189528" y="-88968" z="-7217" heading="32768" />
|
||||
<!-- SEPULCHER 2 - ROOM 6 (After Fight) -->
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189493" y="-88611" z="-7217" heading="54880" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189108" y="-88724" z="-7220" heading="47417" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189255" y="-88768" z="-7217" heading="62502" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189110" y="-88813" z="-7220" heading="9736" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189245" y="-88557" z="-7220" heading="35471" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189421" y="-88489" z="-7220" heading="18426" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189260" y="-88639" z="-7217" heading="8963" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189345" y="-88780" z="-7217" heading="64153" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189476" y="-88964" z="-7217" heading="55373" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189253" y="-88953" z="-7217" heading="33403" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189466" y="-88940" z="-7217" heading="30012" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189013" y="-88944" z="-7217" heading="32377" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189177" y="-89219" z="-7217" heading="32609" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189361" y="-89313" z="-7217" heading="64993" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189166" y="-89306" z="-7217" heading="47840" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189265" y="-89308" z="-7217" heading="65325" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189309" y="-89221" z="-7217" heading="32639" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189811" y="-89563" z="-7220" heading="3829" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189559" y="-89499" z="-7220" heading="53048" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189746" y="-89588" z="-7220" heading="62329" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="190101" y="-89280" z="-7220" heading="17061" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="190009" y="-89436" z="-7220" heading="11944" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189885" y="-89239" z="-7217" heading="31438" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="190059" y="-89540" z="-7220" heading="59561" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="190109" y="-89403" z="-7220" heading="12733" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189975" y="-89511" z="-7220" heading="3202" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189957" y="-89072" z="-7220" heading="32660" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="190054" y="-89073" z="-7220" heading="18712" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189703" y="-89342" z="-7217" heading="63246" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189890" y="-89431" z="-7220" heading="60902" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189588" y="-88973" z="-7217" heading="29939" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189963" y="-89249" z="-7220" heading="50363" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189716" y="-89292" z="-7217" heading="37740" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189582" y="-89315" z="-7217" heading="65441" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189413" y="-88798" z="-7217" heading="62836" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189771" y="-89231" z="-7217" heading="32037" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189595" y="-88755" z="-7217" heading="55580" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189457" y="-88943" z="-7217" heading="21543" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189378" y="-88967" z="-7217" heading="33087" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189775" y="-89025" z="-7217" heading="30132" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189614" y="-89230" z="-7217" heading="32701" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189501" y="-89256" z="-7217" heading="58175" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189471" y="-89223" z="-7217" heading="32257" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189510" y="-89374" z="-7216" heading="49946" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189359" y="-89135" z="-7217" heading="53557" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189421" y="-88883" z="-7217" heading="50130" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189288" y="-88977" z="-7217" heading="33922" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189422" y="-88495" z="-7220" heading="7579" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189771" y="-88553" z="-7220" heading="18365" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189720" y="-88494" z="-7220" heading="33696" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189883" y="-88503" z="-7220" heading="64960" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189701" y="-88597" z="-7216" heading="16187" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189779" y="-88663" z="-7217" heading="55555" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189700" y="-88650" z="-7217" heading="8191" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189776" y="-88489" z="-7220" heading="15570" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189912" y="-88604" z="-7217" heading="52068" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189781" y="-88605" z="-7217" heading="13400" />
|
||||
<spawn sepulcherId="2" wave="8" npcId="18256" x="189620" y="-89548" z="-7220" heading="58477" />
|
||||
<!-- SEPULCHER 3 - ROOM 1 -->
|
||||
<spawn sepulcherId="3" wave="1" npcId="18120" x="173134" y="-85740" z="-7219" heading="13290" /> <!-- key rewarder -->
|
||||
<spawn sepulcherId="3" wave="1" npcId="18132" x="173398" y="-85872" z="-7216" heading="1856" />
|
||||
<spawn sepulcherId="3" wave="1" npcId="18132" x="172956" y="-85939" z="-7220" heading="43362" />
|
||||
<spawn sepulcherId="3" wave="1" npcId="18132" x="172956" y="-85441" z="-7220" heading="33547" />
|
||||
<spawn sepulcherId="3" wave="1" npcId="18132" x="172998" y="-85779" z="-7216" heading="15905" />
|
||||
<spawn sepulcherId="3" wave="1" npcId="18133" x="173242" y="-86112" z="-7219" heading="54294" />
|
||||
<spawn sepulcherId="3" wave="1" npcId="18133" x="172915" y="-85667" z="-7220" heading="47280" />
|
||||
<spawn sepulcherId="3" wave="1" npcId="18133" x="173479" y="-85626" z="-7220" heading="8615" />
|
||||
<spawn sepulcherId="3" wave="1" npcId="18133" x="173199" y="-85349" z="-7219" heading="24632" />
|
||||
<spawn sepulcherId="3" wave="1" npcId="18137" x="172964" y="-86198" z="-7220" heading="54316" />
|
||||
<spawn sepulcherId="3" wave="1" npcId="18137" x="173302" y="-86088" z="-7219" heading="3281" />
|
||||
<spawn sepulcherId="3" wave="1" npcId="18137" x="173386" y="-85817" z="-7216" heading="36523" />
|
||||
<spawn sepulcherId="3" wave="1" npcId="18137" x="172993" y="-85470" z="-7216" heading="38307" />
|
||||
<spawn sepulcherId="3" wave="1" npcId="18137" x="172747" y="-85636" z="-7220" heading="38959" />
|
||||
<spawn sepulcherId="3" wave="1" npcId="18137" x="173199" y="-85349" z="-7219" heading="24632" />
|
||||
<!-- SEPULCHER 3 - ROOM 2 -->
|
||||
<spawn sepulcherId="3" wave="2" npcId="18141" x="172915" y="-83831" z="-7220" heading="44291" />
|
||||
<spawn sepulcherId="3" wave="2" npcId="18141" x="173063" y="-83938" z="-7219" heading="59006" />
|
||||
<spawn sepulcherId="3" wave="2" npcId="18141" x="173000" y="-83662" z="-7216" heading="36263" />
|
||||
<spawn sepulcherId="3" wave="2" npcId="18141" x="172929" y="-84235" z="-7220" heading="42048" />
|
||||
<spawn sepulcherId="3" wave="2" npcId="18141" x="173512" y="-83749" z="-7220" heading="10405" />
|
||||
<spawn sepulcherId="3" wave="2" npcId="18141" x="173423" y="-84206" z="-7216" heading="14435" />
|
||||
<spawn sepulcherId="3" wave="2" npcId="18141" x="173313" y="-83553" z="-7219" heading="24655" />
|
||||
<spawn sepulcherId="3" wave="2" npcId="18141" x="173390" y="-83938" z="-7216" heading="25116" />
|
||||
<spawn sepulcherId="3" wave="2" npcId="18141" x="173542" y="-84075" z="-7220" heading="4488" />
|
||||
<spawn sepulcherId="3" wave="2" npcId="18141" x="173176" y="-84243" z="-7219" heading="65198" />
|
||||
<!-- SEPULCHER 3 - ROOM 3 -->
|
||||
<spawn sepulcherId="3" wave="3" npcId="18150" x="173307" y="-82096" z="-7219" heading="65275" /> <!-- victim -->
|
||||
<spawn sepulcherId="3" wave="3" npcId="18166" x="173148" y="-82349" z="-7219" heading="49789" />
|
||||
<spawn sepulcherId="3" wave="3" npcId="18166" x="173488" y="-82501" z="-7220" heading="62942" />
|
||||
<spawn sepulcherId="3" wave="3" npcId="18166" x="173295" y="-82452" z="-7219" heading="59161" />
|
||||
<spawn sepulcherId="3" wave="3" npcId="18166" x="173608" y="-82297" z="-7220" heading="10837" />
|
||||
<spawn sepulcherId="3" wave="3" npcId="18166" x="172777" y="-82538" z="-7220" heading="42868" />
|
||||
<spawn sepulcherId="3" wave="3" npcId="18166" x="172940" y="-82301" z="-7220" heading="40896" />
|
||||
<spawn sepulcherId="3" wave="3" npcId="18166" x="172720" y="-81912" z="-7220" heading="42440" />
|
||||
<spawn sepulcherId="3" wave="3" npcId="18166" x="173048" y="-82059" z="-7218" heading="61025" />
|
||||
<spawn sepulcherId="3" wave="3" npcId="18166" x="172879" y="-81981" z="-7220" heading="61265" />
|
||||
<spawn sepulcherId="3" wave="3" npcId="18166" x="172882" y="-81696" z="-7220" heading="34676" />
|
||||
<spawn sepulcherId="3" wave="3" npcId="18166" x="173109" y="-81654" z="-7219" heading="35186" />
|
||||
<spawn sepulcherId="3" wave="3" npcId="18166" x="173380" y="-81590" z="-7218" heading="32420" />
|
||||
<spawn sepulcherId="3" wave="3" npcId="18166" x="173650" y="-81599" z="-7220" heading="9301" />
|
||||
<spawn sepulcherId="3" wave="3" npcId="18166" x="173512" y="-81770" z="-7220" heading="25690" />
|
||||
<spawn sepulcherId="3" wave="3" npcId="18166" x="173641" y="-81874" z="-7220" heading="10595" />
|
||||
<spawn sepulcherId="3" wave="3" npcId="18166" x="173494" y="-82257" z="-7220" heading="29248" />
|
||||
<spawn sepulcherId="3" wave="3" npcId="18166" x="173517" y="-82074" z="-7219" heading="15079" />
|
||||
<spawn sepulcherId="3" wave="3" npcId="18171" x="173110" y="-81891" z="-7219" heading="61362" />
|
||||
<spawn sepulcherId="3" wave="3" npcId="18171" x="173199" y="-82535" z="-7219" heading="64023" />
|
||||
<spawn sepulcherId="3" wave="3" npcId="18171" x="173632" y="-82529" z="-7220" heading="49712" />
|
||||
<spawn sepulcherId="3" wave="3" npcId="18171" x="173612" y="-82157" z="-7216" heading="6965" />
|
||||
<spawn sepulcherId="3" wave="3" npcId="18171" x="172849" y="-82289" z="-7220" heading="32529" />
|
||||
<spawn sepulcherId="3" wave="3" npcId="18171" x="172831" y="-81773" z="-7216" heading="16747" />
|
||||
<spawn sepulcherId="3" wave="3" npcId="18171" x="173485" y="-81590" z="-7220" heading="11489" />
|
||||
<!-- SEPULCHER 3 - ROOM 4 -->
|
||||
<spawn sepulcherId="3" wave="4" npcId="18177" x="173244" y="-80369" z="-7219" heading="16383" /> <!-- key rewarder -->
|
||||
<spawn sepulcherId="3" wave="4" npcId="18196" x="172672" y="-80891" z="-7220" heading="2929" /> <!-- charm -->
|
||||
<spawn sepulcherId="3" wave="4" npcId="18197" x="172612" y="-79655" z="-7219" heading="58713" /> <!-- charm -->
|
||||
<spawn sepulcherId="3" wave="4" npcId="18198" x="173708" y="-80883" z="-7220" heading="25521" /> <!-- charm -->
|
||||
<spawn sepulcherId="3" wave="4" npcId="18199" x="173698" y="-79676" z="-7220" heading="36736" /> <!-- charm -->
|
||||
<spawn sepulcherId="3" wave="4" npcId="18185" x="173153" y="-80062" z="-7219" heading="49218" />
|
||||
<spawn sepulcherId="3" wave="4" npcId="18185" x="173459" y="-80379" z="-7220" heading="7536" />
|
||||
<spawn sepulcherId="3" wave="4" npcId="18185" x="173006" y="-80382" z="-7218" heading="43465" />
|
||||
<spawn sepulcherId="3" wave="4" npcId="18185" x="173155" y="-80647" z="-7219" heading="55372" />
|
||||
<spawn sepulcherId="3" wave="4" npcId="18185" x="172895" y="-80264" z="-7220" heading="39696" />
|
||||
<spawn sepulcherId="3" wave="4" npcId="18185" x="173367" y="-79838" z="-7218" heading="16324" />
|
||||
<spawn sepulcherId="3" wave="4" npcId="18187" x="173479" y="-80694" z="-7220" heading="58422" />
|
||||
<spawn sepulcherId="3" wave="4" npcId="18187" x="172913" y="-80417" z="-7220" heading="48290" />
|
||||
<spawn sepulcherId="3" wave="4" npcId="18187" x="172793" y="-79913" z="-7220" heading="21248" />
|
||||
<spawn sepulcherId="3" wave="4" npcId="18187" x="173436" y="-79863" z="-7220" heading="18223" />
|
||||
<spawn sepulcherId="3" wave="4" npcId="18187" x="173229" y="-79905" z="-7219" heading="34855" />
|
||||
<spawn sepulcherId="3" wave="4" npcId="18187" x="173382" y="-80245" z="-7218" heading="19800" />
|
||||
<spawn sepulcherId="3" wave="4" npcId="18187" x="173485" y="-80138" z="-7220" heading="8390" />
|
||||
<spawn sepulcherId="3" wave="4" npcId="18187" x="172940" y="-80091" z="-7220" heading="38732" />
|
||||
<spawn sepulcherId="3" wave="4" npcId="18187" x="172961" y="-80575" z="-7220" heading="46953" />
|
||||
<spawn sepulcherId="3" wave="4" npcId="18187" x="173470" y="-80504" z="-7220" heading="7605" />
|
||||
<spawn sepulcherId="3" wave="4" npcId="18187" x="173213" y="-80478" z="-7216" heading="40826" />
|
||||
<!-- SEPULCHER 3 - ROOM 5 (First Wave) -->
|
||||
<spawn sepulcherId="3" wave="5" npcId="18232" x="172905" y="-77864" z="-7219" heading="49152" /> <!-- statue -->
|
||||
<spawn sepulcherId="3" wave="5" npcId="18232" x="172840" y="-77881" z="-7219" heading="49152" /> <!-- statue -->
|
||||
<spawn sepulcherId="3" wave="5" npcId="18232" x="172763" y="-77884" z="-7219" heading="49152" /> <!-- statue -->
|
||||
<spawn sepulcherId="3" wave="5" npcId="18232" x="173618" y="-77895" z="-7219" heading="49152" /> <!-- statue -->
|
||||
<spawn sepulcherId="3" wave="5" npcId="18232" x="173534" y="-77893" z="-7219" heading="49152" /> <!-- statue -->
|
||||
<spawn sepulcherId="3" wave="5" npcId="18232" x="173452" y="-77901" z="-7219" heading="49152" /> <!-- statue -->
|
||||
<spawn sepulcherId="3" wave="5" npcId="18232" x="173374" y="-77903" z="-7217" heading="49152" /> <!-- statue -->
|
||||
<spawn sepulcherId="3" wave="5" npcId="18232" x="172965" y="-77878" z="-7217" heading="49152" /> <!-- statue -->
|
||||
<spawn sepulcherId="3" wave="5" npcId="18220" x="172824" y="-78791" z="-7219" heading="25363" />
|
||||
<spawn sepulcherId="3" wave="5" npcId="18220" x="172829" y="-78233" z="-7219" heading="16290" />
|
||||
<spawn sepulcherId="3" wave="5" npcId="18220" x="173495" y="-78146" z="-7217" heading="1129" />
|
||||
<spawn sepulcherId="3" wave="5" npcId="18220" x="173523" y="-78661" z="-7219" heading="53052" />
|
||||
<spawn sepulcherId="3" wave="5" npcId="18222" x="172764" y="-78854" z="-7219" heading="39831" />
|
||||
<spawn sepulcherId="3" wave="5" npcId="18222" x="173124" y="-78487" z="-7218" heading="24278" />
|
||||
<spawn sepulcherId="3" wave="5" npcId="18222" x="172948" y="-78723" z="-7219" heading="49508" />
|
||||
<spawn sepulcherId="3" wave="5" npcId="18222" x="173121" y="-78899" z="-7218" heading="49076" />
|
||||
<spawn sepulcherId="3" wave="5" npcId="18222" x="173290" y="-78816" z="-7218" heading="62766" />
|
||||
<spawn sepulcherId="3" wave="5" npcId="18222" x="173482" y="-78593" z="-7219" heading="8969" />
|
||||
<spawn sepulcherId="3" wave="5" npcId="18222" x="173519" y="-78873" z="-7219" heading="680" />
|
||||
<spawn sepulcherId="3" wave="5" npcId="18222" x="173422" y="-78216" z="-7219" heading="18030" />
|
||||
<spawn sepulcherId="3" wave="5" npcId="18222" x="173450" y="-78409" z="-7219" heading="12764" />
|
||||
<spawn sepulcherId="3" wave="5" npcId="18222" x="173205" y="-78072" z="-7218" heading="34656" />
|
||||
<spawn sepulcherId="3" wave="5" npcId="18222" x="173560" y="-78007" z="-7219" heading="10297" />
|
||||
<spawn sepulcherId="3" wave="5" npcId="18222" x="173303" y="-78078" z="-7218" heading="11004" />
|
||||
<spawn sepulcherId="3" wave="5" npcId="18222" x="172852" y="-78058" z="-7219" heading="32354" />
|
||||
<spawn sepulcherId="3" wave="5" npcId="18222" x="172895" y="-78297" z="-7219" heading="51008" />
|
||||
<spawn sepulcherId="3" wave="5" npcId="18222" x="173106" y="-78267" z="-7218" heading="23392" />
|
||||
<spawn sepulcherId="3" wave="5" npcId="18222" x="172939" y="-78460" z="-7219" heading="41711" />
|
||||
<spawn sepulcherId="3" wave="5" npcId="18226" x="173545" y="-78958" z="-7219" heading="61434" />
|
||||
<spawn sepulcherId="3" wave="5" npcId="18226" x="173332" y="-78651" z="-7218" heading="63860" />
|
||||
<spawn sepulcherId="3" wave="5" npcId="18226" x="172854" y="-78747" z="-7219" heading="45974" />
|
||||
<spawn sepulcherId="3" wave="5" npcId="18226" x="172974" y="-78593" z="-7217" heading="41114" />
|
||||
<spawn sepulcherId="3" wave="5" npcId="18226" x="172987" y="-78324" z="-7217" heading="43194" />
|
||||
<spawn sepulcherId="3" wave="5" npcId="18226" x="173183" y="-78019" z="-7218" heading="22569" />
|
||||
<spawn sepulcherId="3" wave="5" npcId="18226" x="173367" y="-78292" z="-7217" heading="15370" />
|
||||
<!-- SEPULCHER 3 - ROOM 5 (Second Wave) -->
|
||||
<spawn sepulcherId="3" wave="6" npcId="18212" x="173195" y="-78387" z="-7218" heading="45514" /> <!-- key rewarder -->
|
||||
<spawn sepulcherId="3" wave="6" npcId="18232" x="173186" y="-77756" z="-7218" heading="49152" /> <!-- statue -->
|
||||
<spawn sepulcherId="3" wave="6" npcId="18232" x="173256" y="-77755" z="-7218" heading="49152" /> <!-- statue -->
|
||||
<spawn sepulcherId="3" wave="6" npcId="18232" x="173120" y="-77753" z="-7218" heading="49152" /> <!-- statue -->
|
||||
<spawn sepulcherId="3" wave="6" npcId="18227" x="172727" y="-78149" z="-7219" heading="23490" />
|
||||
<spawn sepulcherId="3" wave="6" npcId="18195" x="172964" y="-78369" z="-7217" heading="33814" />
|
||||
<spawn sepulcherId="3" wave="6" npcId="18195" x="173207" y="-78656" z="-7218" heading="56199" />
|
||||
<spawn sepulcherId="3" wave="6" npcId="18195" x="173262" y="-78339" z="-7218" heading="25711" />
|
||||
<spawn sepulcherId="3" wave="6" npcId="18195" x="173531" y="-78555" z="-7219" heading="7818" />
|
||||
<spawn sepulcherId="3" wave="6" npcId="18221" x="173557" y="-78336" z="-7219" heading="11317" />
|
||||
<spawn sepulcherId="3" wave="6" npcId="18221" x="173473" y="-78710" z="-7219" heading="63315" />
|
||||
<spawn sepulcherId="3" wave="6" npcId="18221" x="173015" y="-78611" z="-7217" heading="43365" />
|
||||
<spawn sepulcherId="3" wave="6" npcId="18221" x="173248" y="-78235" z="-7218" heading="29472" />
|
||||
<spawn sepulcherId="3" wave="6" npcId="18223" x="173404" y="-78358" z="-7217" heading="6698" />
|
||||
<spawn sepulcherId="3" wave="6" npcId="18223" x="172910" y="-78466" z="-7219" heading="23672" />
|
||||
<spawn sepulcherId="3" wave="6" npcId="18223" x="173183" y="-78059" z="-7218" heading="7013" />
|
||||
<spawn sepulcherId="3" wave="6" npcId="18223" x="173152" y="-78754" z="-7218" heading="43240" />
|
||||
<spawn sepulcherId="3" wave="6" npcId="18223" x="172923" y="-78266" z="-7219" heading="15706" />
|
||||
<spawn sepulcherId="3" wave="6" npcId="18223" x="173406" y="-78622" z="-7217" heading="54169" />
|
||||
<spawn sepulcherId="3" wave="6" npcId="18227" x="173456" y="-78263" z="-7219" heading="59104" />
|
||||
<spawn sepulcherId="3" wave="6" npcId="18227" x="173423" y="-78875" z="-7219" heading="44845" />
|
||||
<spawn sepulcherId="3" wave="6" npcId="18227" x="172939" y="-78779" z="-7219" heading="25011" />
|
||||
<spawn sepulcherId="3" wave="6" npcId="18227" x="172997" y="-78482" z="-7217" heading="14372" />
|
||||
<!-- SEPULCHER 3 - ROOM 6 (Boss) -->
|
||||
<spawn sepulcherId="3" wave="7" npcId="25339" x="173195" y="-76565" z="-7216" heading="49152" />
|
||||
<!-- SEPULCHER 3 - ROOM 6 (After Fight) -->
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173018" y="-76165" z="-7215" heading="24982" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="172973" y="-76550" z="-7216" heading="5423" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="172878" y="-76378" z="-7216" heading="18354" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="172925" y="-76440" z="-7216" heading="20675" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="172864" y="-76718" z="-7216" heading="59534" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="172739" y="-76887" z="-7219" heading="35906" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="172849" y="-76621" z="-7216" heading="64290" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173402" y="-76970" z="-7219" heading="59429" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173272" y="-77050" z="-7219" heading="40755" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173350" y="-76975" z="-7219" heading="39294" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173434" y="-76844" z="-7216" heading="53275" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173724" y="-76897" z="-7219" heading="2325" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173487" y="-76876" z="-7216" heading="47024" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173687" y="-76665" z="-7219" heading="18033" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173520" y="-76690" z="-7216" heading="50915" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173677" y="-76681" z="-7219" heading="6162" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173356" y="-76574" z="-7216" heading="59624" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173506" y="-76608" z="-7216" heading="51276" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173337" y="-76477" z="-7216" heading="19869" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173376" y="-76705" z="-7216" heading="50732" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173387" y="-76621" z="-7216" heading="31249" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173511" y="-76760" z="-7216" heading="47818" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173113" y="-76577" z="-7216" heading="37147" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173158" y="-76448" z="-7216" heading="51736" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173271" y="-76399" z="-7216" heading="33089" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173396" y="-76249" z="-7216" heading="49151" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173399" y="-76388" z="-7216" heading="47818" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173487" y="-76516" z="-7216" heading="61221" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173405" y="-76480" z="-7216" heading="49831" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173408" y="-76318" z="-7216" heading="50948" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173689" y="-76178" z="-7219" heading="48206" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173694" y="-76123" z="-7219" heading="50292" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173688" y="-76235" z="-7219" heading="48969" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173685" y="-76041" z="-7219" heading="7246" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173498" y="-76392" z="-7216" heading="29118" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173543" y="-76111" z="-7219" heading="25388" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173575" y="-76041" z="-7219" heading="11911" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173646" y="-76446" z="-7219" heading="17752" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173396" y="-76112" z="-7219" heading="36706" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173080" y="-76068" z="-7219" heading="47701" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="172984" y="-76095" z="-7219" heading="10228" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173074" y="-76116" z="-7219" heading="47854" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173087" y="-76018" z="-7219" heading="6695" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="172911" y="-76204" z="-7216" heading="12608" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="172637" y="-76477" z="-7219" heading="39951" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="172625" y="-76563" z="-7219" heading="47705" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="172801" y="-76342" z="-7215" heading="39904" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="172891" y="-76446" z="-7216" heading="34589" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="172872" y="-76307" z="-7216" heading="17263" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="172667" y="-76633" z="-7219" heading="14412" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="172712" y="-76624" z="-7219" heading="49328" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="172774" y="-76612" z="-7219" heading="1994" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="172619" y="-76889" z="-7219" heading="32941" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="172884" y="-76842" z="-7216" heading="26023" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="172645" y="-76748" z="-7219" heading="14482" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173049" y="-76936" z="-7216" heading="30541" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173192" y="-76967" z="-7219" heading="24384" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="172986" y="-76919" z="-7216" heading="30018" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173142" y="-76732" z="-7216" heading="65011" />
|
||||
<spawn sepulcherId="3" wave="8" npcId="18256" x="173221" y="-76850" z="-7216" heading="55305" />
|
||||
<!-- SEPULCHER 4 - ROOM 1 -->
|
||||
<spawn sepulcherId="4" wave="1" npcId="18120" x="175524" y="-81903" z="-7219" heading="13290" /> <!-- key rewarder -->
|
||||
<spawn sepulcherId="4" wave="1" npcId="18132" x="175788" y="-82035" z="-7216" heading="1856" />
|
||||
<spawn sepulcherId="4" wave="1" npcId="18132" x="175346" y="-82102" z="-7220" heading="43362" />
|
||||
<spawn sepulcherId="4" wave="1" npcId="18132" x="175346" y="-81604" z="-7220" heading="33547" />
|
||||
<spawn sepulcherId="4" wave="1" npcId="18132" x="175388" y="-81942" z="-7216" heading="15905" />
|
||||
<spawn sepulcherId="4" wave="1" npcId="18133" x="175632" y="-82275" z="-7219" heading="54294" />
|
||||
<spawn sepulcherId="4" wave="1" npcId="18133" x="175305" y="-81830" z="-7220" heading="47280" />
|
||||
<spawn sepulcherId="4" wave="1" npcId="18133" x="175869" y="-81789" z="-7220" heading="8615" />
|
||||
<spawn sepulcherId="4" wave="1" npcId="18133" x="175589" y="-81512" z="-7219" heading="24632" />
|
||||
<spawn sepulcherId="4" wave="1" npcId="18137" x="175354" y="-82361" z="-7220" heading="54316" />
|
||||
<spawn sepulcherId="4" wave="1" npcId="18137" x="175692" y="-82251" z="-7219" heading="3281" />
|
||||
<spawn sepulcherId="4" wave="1" npcId="18137" x="175776" y="-81980" z="-7216" heading="36523" />
|
||||
<spawn sepulcherId="4" wave="1" npcId="18137" x="175383" y="-81633" z="-7216" heading="38307" />
|
||||
<spawn sepulcherId="4" wave="1" npcId="18137" x="175137" y="-81799" z="-7220" heading="38959" />
|
||||
<spawn sepulcherId="4" wave="1" npcId="18137" x="175589" y="-81512" z="-7219" heading="24632" />
|
||||
<!-- SEPULCHER 4 - ROOM 2 -->
|
||||
<spawn sepulcherId="4" wave="2" npcId="18141" x="175305" y="-79994" z="-7220" heading="44291" />
|
||||
<spawn sepulcherId="4" wave="2" npcId="18141" x="175453" y="-80101" z="-7219" heading="59006" />
|
||||
<spawn sepulcherId="4" wave="2" npcId="18141" x="175390" y="-79825" z="-7216" heading="36263" />
|
||||
<spawn sepulcherId="4" wave="2" npcId="18141" x="175319" y="-80398" z="-7220" heading="42048" />
|
||||
<spawn sepulcherId="4" wave="2" npcId="18141" x="175902" y="-79912" z="-7220" heading="10405" />
|
||||
<spawn sepulcherId="4" wave="2" npcId="18141" x="175813" y="-80369" z="-7216" heading="14435" />
|
||||
<spawn sepulcherId="4" wave="2" npcId="18141" x="175703" y="-79716" z="-7219" heading="24655" />
|
||||
<spawn sepulcherId="4" wave="2" npcId="18141" x="175780" y="-80101" z="-7216" heading="25116" />
|
||||
<spawn sepulcherId="4" wave="2" npcId="18141" x="175932" y="-80238" z="-7220" heading="4488" />
|
||||
<spawn sepulcherId="4" wave="2" npcId="18141" x="175566" y="-80406" z="-7219" heading="65198" />
|
||||
<!-- SEPULCHER 4 - ROOM 3 -->
|
||||
<spawn sepulcherId="4" wave="3" npcId="18150" x="175697" y="-78259" z="-7219" heading="65275" /> <!-- victim -->
|
||||
<spawn sepulcherId="4" wave="3" npcId="18166" x="175538" y="-78512" z="-7219" heading="49789" />
|
||||
<spawn sepulcherId="4" wave="3" npcId="18166" x="175878" y="-78664" z="-7220" heading="62942" />
|
||||
<spawn sepulcherId="4" wave="3" npcId="18166" x="175685" y="-78615" z="-7219" heading="59161" />
|
||||
<spawn sepulcherId="4" wave="3" npcId="18166" x="175998" y="-78460" z="-7220" heading="10837" />
|
||||
<spawn sepulcherId="4" wave="3" npcId="18166" x="175167" y="-78701" z="-7220" heading="42868" />
|
||||
<spawn sepulcherId="4" wave="3" npcId="18166" x="175330" y="-78464" z="-7220" heading="40896" />
|
||||
<spawn sepulcherId="4" wave="3" npcId="18166" x="175110" y="-78075" z="-7220" heading="42440" />
|
||||
<spawn sepulcherId="4" wave="3" npcId="18166" x="175438" y="-78222" z="-7218" heading="61025" />
|
||||
<spawn sepulcherId="4" wave="3" npcId="18166" x="175269" y="-78144" z="-7220" heading="61265" />
|
||||
<spawn sepulcherId="4" wave="3" npcId="18166" x="175272" y="-77859" z="-7220" heading="34676" />
|
||||
<spawn sepulcherId="4" wave="3" npcId="18166" x="175499" y="-77817" z="-7219" heading="35186" />
|
||||
<spawn sepulcherId="4" wave="3" npcId="18166" x="175770" y="-77753" z="-7218" heading="32420" />
|
||||
<spawn sepulcherId="4" wave="3" npcId="18166" x="176040" y="-77762" z="-7220" heading="9301" />
|
||||
<spawn sepulcherId="4" wave="3" npcId="18166" x="175902" y="-77933" z="-7220" heading="25690" />
|
||||
<spawn sepulcherId="4" wave="3" npcId="18166" x="176031" y="-78037" z="-7220" heading="10595" />
|
||||
<spawn sepulcherId="4" wave="3" npcId="18166" x="175884" y="-78420" z="-7220" heading="29248" />
|
||||
<spawn sepulcherId="4" wave="3" npcId="18166" x="175907" y="-78237" z="-7219" heading="15079" />
|
||||
<spawn sepulcherId="4" wave="3" npcId="18171" x="175500" y="-78054" z="-7219" heading="61362" />
|
||||
<spawn sepulcherId="4" wave="3" npcId="18171" x="175589" y="-78698" z="-7219" heading="64023" />
|
||||
<spawn sepulcherId="4" wave="3" npcId="18171" x="176022" y="-78692" z="-7220" heading="49712" />
|
||||
<spawn sepulcherId="4" wave="3" npcId="18171" x="176002" y="-78320" z="-7216" heading="6965" />
|
||||
<spawn sepulcherId="4" wave="3" npcId="18171" x="175239" y="-78452" z="-7220" heading="32529" />
|
||||
<spawn sepulcherId="4" wave="3" npcId="18171" x="175221" y="-77936" z="-7216" heading="16747" />
|
||||
<spawn sepulcherId="4" wave="3" npcId="18171" x="175875" y="-77753" z="-7220" heading="11489" />
|
||||
<!-- SEPULCHER 4 - ROOM 4 -->
|
||||
<spawn sepulcherId="4" wave="4" npcId="18177" x="175634" y="-76532" z="-7219" heading="16383" /> <!-- key rewarder -->
|
||||
<spawn sepulcherId="4" wave="4" npcId="18196" x="175029" y="-77073" z="-7219" heading="4074" /> <!-- charm -->
|
||||
<spawn sepulcherId="4" wave="4" npcId="18197" x="175015" y="-75843" z="-7221" heading="60216" /> <!-- charm -->
|
||||
<spawn sepulcherId="4" wave="4" npcId="18198" x="176154" y="-77075" z="-7219" heading="27131" /> <!-- charm -->
|
||||
<spawn sepulcherId="4" wave="4" npcId="18199" x="176181" y="-75837" z="-7221" heading="37604" /> <!-- charm -->
|
||||
<spawn sepulcherId="4" wave="4" npcId="18185" x="175543" y="-76225" z="-7219" heading="49218" />
|
||||
<spawn sepulcherId="4" wave="4" npcId="18185" x="175849" y="-76542" z="-7220" heading="7536" />
|
||||
<spawn sepulcherId="4" wave="4" npcId="18185" x="175396" y="-76545" z="-7218" heading="43465" />
|
||||
<spawn sepulcherId="4" wave="4" npcId="18185" x="175545" y="-76810" z="-7219" heading="55372" />
|
||||
<spawn sepulcherId="4" wave="4" npcId="18185" x="175285" y="-76427" z="-7220" heading="39696" />
|
||||
<spawn sepulcherId="4" wave="4" npcId="18185" x="175757" y="-76001" z="-7218" heading="16324" />
|
||||
<spawn sepulcherId="4" wave="4" npcId="18187" x="175869" y="-76857" z="-7220" heading="58422" />
|
||||
<spawn sepulcherId="4" wave="4" npcId="18187" x="175303" y="-76580" z="-7220" heading="48290" />
|
||||
<spawn sepulcherId="4" wave="4" npcId="18187" x="175183" y="-76076" z="-7220" heading="21248" />
|
||||
<spawn sepulcherId="4" wave="4" npcId="18187" x="175826" y="-76026" z="-7220" heading="18223" />
|
||||
<spawn sepulcherId="4" wave="4" npcId="18187" x="175619" y="-76068" z="-7219" heading="34855" />
|
||||
<spawn sepulcherId="4" wave="4" npcId="18187" x="175772" y="-76408" z="-7218" heading="19800" />
|
||||
<spawn sepulcherId="4" wave="4" npcId="18187" x="175875" y="-76301" z="-7220" heading="8390" />
|
||||
<spawn sepulcherId="4" wave="4" npcId="18187" x="175330" y="-76254" z="-7220" heading="38732" />
|
||||
<spawn sepulcherId="4" wave="4" npcId="18187" x="175351" y="-76738" z="-7220" heading="46953" />
|
||||
<spawn sepulcherId="4" wave="4" npcId="18187" x="175860" y="-76667" z="-7220" heading="7605" />
|
||||
<spawn sepulcherId="4" wave="4" npcId="18187" x="175603" y="-76641" z="-7216" heading="40826" />
|
||||
<!-- SEPULCHER 4 - ROOM 5 (First Wave) -->
|
||||
<spawn sepulcherId="4" wave="5" npcId="18232" x="175295" y="-74027" z="-7219" heading="49152" /> <!-- statue -->
|
||||
<spawn sepulcherId="4" wave="5" npcId="18232" x="175230" y="-74044" z="-7219" heading="49152" /> <!-- statue -->
|
||||
<spawn sepulcherId="4" wave="5" npcId="18232" x="175153" y="-74047" z="-7219" heading="49152" /> <!-- statue -->
|
||||
<spawn sepulcherId="4" wave="5" npcId="18232" x="176008" y="-74058" z="-7219" heading="49152" /> <!-- statue -->
|
||||
<spawn sepulcherId="4" wave="5" npcId="18232" x="175924" y="-74056" z="-7219" heading="49152" /> <!-- statue -->
|
||||
<spawn sepulcherId="4" wave="5" npcId="18232" x="175842" y="-74064" z="-7219" heading="49152" /> <!-- statue -->
|
||||
<spawn sepulcherId="4" wave="5" npcId="18232" x="175764" y="-74066" z="-7217" heading="49152" /> <!-- statue -->
|
||||
<spawn sepulcherId="4" wave="5" npcId="18232" x="175355" y="-74041" z="-7217" heading="49152" /> <!-- statue -->
|
||||
<spawn sepulcherId="4" wave="5" npcId="18220" x="175214" y="-74954" z="-7219" heading="25363" />
|
||||
<spawn sepulcherId="4" wave="5" npcId="18220" x="175219" y="-74396" z="-7219" heading="16290" />
|
||||
<spawn sepulcherId="4" wave="5" npcId="18220" x="175885" y="-74309" z="-7217" heading="1129" />
|
||||
<spawn sepulcherId="4" wave="5" npcId="18220" x="175913" y="-74824" z="-7219" heading="53052" />
|
||||
<spawn sepulcherId="4" wave="5" npcId="18222" x="175154" y="-75017" z="-7219" heading="39831" />
|
||||
<spawn sepulcherId="4" wave="5" npcId="18222" x="175514" y="-74650" z="-7218" heading="24278" />
|
||||
<spawn sepulcherId="4" wave="5" npcId="18222" x="175338" y="-74886" z="-7219" heading="49508" />
|
||||
<spawn sepulcherId="4" wave="5" npcId="18222" x="175511" y="-75062" z="-7218" heading="49076" />
|
||||
<spawn sepulcherId="4" wave="5" npcId="18222" x="175680" y="-74979" z="-7218" heading="62766" />
|
||||
<spawn sepulcherId="4" wave="5" npcId="18222" x="175872" y="-74756" z="-7219" heading="8969" />
|
||||
<spawn sepulcherId="4" wave="5" npcId="18222" x="175909" y="-75036" z="-7219" heading="680" />
|
||||
<spawn sepulcherId="4" wave="5" npcId="18222" x="175812" y="-74379" z="-7219" heading="18030" />
|
||||
<spawn sepulcherId="4" wave="5" npcId="18222" x="175840" y="-74572" z="-7219" heading="12764" />
|
||||
<spawn sepulcherId="4" wave="5" npcId="18222" x="175595" y="-74235" z="-7218" heading="34656" />
|
||||
<spawn sepulcherId="4" wave="5" npcId="18222" x="175950" y="-74170" z="-7219" heading="10297" />
|
||||
<spawn sepulcherId="4" wave="5" npcId="18222" x="175693" y="-74241" z="-7218" heading="11004" />
|
||||
<spawn sepulcherId="4" wave="5" npcId="18222" x="175242" y="-74221" z="-7219" heading="32354" />
|
||||
<spawn sepulcherId="4" wave="5" npcId="18222" x="175285" y="-74460" z="-7219" heading="51008" />
|
||||
<spawn sepulcherId="4" wave="5" npcId="18222" x="175496" y="-74430" z="-7218" heading="23392" />
|
||||
<spawn sepulcherId="4" wave="5" npcId="18222" x="175329" y="-74623" z="-7219" heading="41711" />
|
||||
<spawn sepulcherId="4" wave="5" npcId="18226" x="175935" y="-75121" z="-7219" heading="61434" />
|
||||
<spawn sepulcherId="4" wave="5" npcId="18226" x="175722" y="-74814" z="-7218" heading="63860" />
|
||||
<spawn sepulcherId="4" wave="5" npcId="18226" x="175244" y="-74910" z="-7219" heading="45974" />
|
||||
<spawn sepulcherId="4" wave="5" npcId="18226" x="175364" y="-74756" z="-7217" heading="41114" />
|
||||
<spawn sepulcherId="4" wave="5" npcId="18226" x="175377" y="-74487" z="-7217" heading="43194" />
|
||||
<spawn sepulcherId="4" wave="5" npcId="18226" x="175573" y="-74182" z="-7218" heading="22569" />
|
||||
<spawn sepulcherId="4" wave="5" npcId="18226" x="175757" y="-74455" z="-7217" heading="15370" />
|
||||
<!-- SEPULCHER 4 - ROOM 5 (Second Wave) -->
|
||||
<spawn sepulcherId="4" wave="6" npcId="18212" x="175585" y="-74550" z="-7218" heading="45514" /> <!-- key rewarder -->
|
||||
<spawn sepulcherId="4" wave="6" npcId="18232" x="175576" y="-73919" z="-7218" heading="49152" /> <!-- statue -->
|
||||
<spawn sepulcherId="4" wave="6" npcId="18232" x="175646" y="-73918" z="-7218" heading="49152" /> <!-- statue -->
|
||||
<spawn sepulcherId="4" wave="6" npcId="18232" x="175510" y="-73916" z="-7218" heading="49152" /> <!-- statue -->
|
||||
<spawn sepulcherId="4" wave="6" npcId="18227" x="175117" y="-74312" z="-7219" heading="23490" />
|
||||
<spawn sepulcherId="4" wave="6" npcId="18195" x="175354" y="-74532" z="-7217" heading="33814" />
|
||||
<spawn sepulcherId="4" wave="6" npcId="18195" x="175597" y="-74819" z="-7218" heading="56199" />
|
||||
<spawn sepulcherId="4" wave="6" npcId="18195" x="175652" y="-74502" z="-7218" heading="25711" />
|
||||
<spawn sepulcherId="4" wave="6" npcId="18195" x="175921" y="-74718" z="-7219" heading="7818" />
|
||||
<spawn sepulcherId="4" wave="6" npcId="18221" x="175947" y="-74499" z="-7219" heading="11317" />
|
||||
<spawn sepulcherId="4" wave="6" npcId="18221" x="175863" y="-74873" z="-7219" heading="63315" />
|
||||
<spawn sepulcherId="4" wave="6" npcId="18221" x="175405" y="-74774" z="-7217" heading="43365" />
|
||||
<spawn sepulcherId="4" wave="6" npcId="18221" x="175638" y="-74398" z="-7218" heading="29472" />
|
||||
<spawn sepulcherId="4" wave="6" npcId="18223" x="175794" y="-74521" z="-7217" heading="6698" />
|
||||
<spawn sepulcherId="4" wave="6" npcId="18223" x="175300" y="-74629" z="-7219" heading="23672" />
|
||||
<spawn sepulcherId="4" wave="6" npcId="18223" x="175573" y="-74222" z="-7218" heading="7013" />
|
||||
<spawn sepulcherId="4" wave="6" npcId="18223" x="175542" y="-74917" z="-7218" heading="43240" />
|
||||
<spawn sepulcherId="4" wave="6" npcId="18223" x="175313" y="-74429" z="-7219" heading="15706" />
|
||||
<spawn sepulcherId="4" wave="6" npcId="18223" x="175796" y="-74785" z="-7217" heading="54169" />
|
||||
<spawn sepulcherId="4" wave="6" npcId="18227" x="175846" y="-74426" z="-7219" heading="59104" />
|
||||
<spawn sepulcherId="4" wave="6" npcId="18227" x="175813" y="-75038" z="-7219" heading="44845" />
|
||||
<spawn sepulcherId="4" wave="6" npcId="18227" x="175329" y="-74942" z="-7219" heading="25011" />
|
||||
<spawn sepulcherId="4" wave="6" npcId="18227" x="175387" y="-74645" z="-7217" heading="14372" />
|
||||
<!-- SEPULCHER 4 - ROOM 6 (Boss) -->
|
||||
<spawn sepulcherId="4" wave="7" npcId="25349" x="175590" y="-72749" z="-7218" heading="31944" />
|
||||
<!-- SEPULCHER 4 - ROOM 6 (After Fight) -->
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175408" y="-72328" z="-7215" heading="24982" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175363" y="-72713" z="-7216" heading="5423" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175268" y="-72541" z="-7216" heading="18354" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175315" y="-72603" z="-7216" heading="20675" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175254" y="-72881" z="-7216" heading="59534" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175129" y="-73050" z="-7219" heading="35906" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175239" y="-72784" z="-7216" heading="64290" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175792" y="-73133" z="-7219" heading="59429" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175662" y="-73213" z="-7219" heading="40755" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175740" y="-73138" z="-7219" heading="39294" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175824" y="-73007" z="-7216" heading="53275" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="176114" y="-73060" z="-7219" heading="2325" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175877" y="-73039" z="-7216" heading="47024" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="176077" y="-72828" z="-7219" heading="18033" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175910" y="-72853" z="-7216" heading="50915" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="176067" y="-72844" z="-7219" heading="6162" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175746" y="-72737" z="-7216" heading="59624" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175896" y="-72771" z="-7216" heading="51276" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175727" y="-72640" z="-7216" heading="19869" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175766" y="-72868" z="-7216" heading="50732" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175777" y="-72784" z="-7216" heading="31249" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175901" y="-72923" z="-7216" heading="47818" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175503" y="-72740" z="-7216" heading="37147" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175548" y="-72611" z="-7216" heading="51736" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175661" y="-72562" z="-7216" heading="33089" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175786" y="-72412" z="-7216" heading="49151" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175789" y="-72551" z="-7216" heading="47818" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175877" y="-72679" z="-7216" heading="61221" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175795" y="-72643" z="-7216" heading="49831" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175798" y="-72481" z="-7216" heading="50948" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="176079" y="-72341" z="-7219" heading="48206" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="176084" y="-72286" z="-7219" heading="50292" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="176078" y="-72398" z="-7219" heading="48969" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="176075" y="-72204" z="-7219" heading="7246" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175888" y="-72555" z="-7216" heading="29118" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175933" y="-72274" z="-7219" heading="25388" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175965" y="-72204" z="-7219" heading="11911" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="176036" y="-72609" z="-7219" heading="17752" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175786" y="-72275" z="-7219" heading="36706" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175470" y="-72231" z="-7219" heading="47701" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175374" y="-72258" z="-7219" heading="10228" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175464" y="-72279" z="-7219" heading="47854" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175477" y="-72181" z="-7219" heading="6695" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175301" y="-72367" z="-7216" heading="12608" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175027" y="-72640" z="-7219" heading="39951" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175015" y="-72726" z="-7219" heading="47705" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175191" y="-72505" z="-7215" heading="39904" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175281" y="-72609" z="-7216" heading="34589" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175262" y="-72470" z="-7216" heading="17263" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175057" y="-72796" z="-7219" heading="14412" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175102" y="-72787" z="-7219" heading="49328" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175164" y="-72775" z="-7219" heading="1994" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175009" y="-73052" z="-7219" heading="32941" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175274" y="-73005" z="-7216" heading="26023" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175035" y="-72911" z="-7219" heading="14482" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175439" y="-73099" z="-7216" heading="30541" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175582" y="-73130" z="-7219" heading="24384" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175376" y="-73082" z="-7216" heading="30018" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175532" y="-72895" z="-7216" heading="65011" />
|
||||
<spawn sepulcherId="4" wave="8" npcId="18256" x="175611" y="-73013" z="-7216" heading="55305" />
|
||||
</list>
|
@@ -1,23 +0,0 @@
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
||||
<xs:element name="list">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="spawn" maxOccurs="unbounded" minOccurs="0">
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:string">
|
||||
<xs:attribute type="xs:int" name="sepulcherId" use="optional"/>
|
||||
<xs:attribute type="xs:int" name="wave" use="optional"/>
|
||||
<xs:attribute type="xs:int" name="npcId" use="optional"/>
|
||||
<xs:attribute type="xs:int" name="x" use="optional"/>
|
||||
<xs:attribute type="xs:int" name="y" use="optional"/>
|
||||
<xs:attribute type="xs:int" name="z" use="optional"/>
|
||||
<xs:attribute type="xs:int" name="heading" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:schema>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>%npcname%:<br>
|
||||
There is no key.
|
||||
</body></html>
|
@@ -38,18 +38,12 @@ public class SelMahumDrill extends AbstractNpcAI
|
||||
{
|
||||
private static final int[] MAHUM_CHIEFS =
|
||||
{
|
||||
24343, // Sel Mahum Drill Sergeant
|
||||
24344 // Sel Mahum Training Officer
|
||||
24493, // Sel Mahum Squad Leader
|
||||
};
|
||||
private static final int[] MAHUM_SOLDIERS =
|
||||
{
|
||||
24348, // Sel Mahum Recruit
|
||||
24350, // Sel Mahum Recruit
|
||||
24351, // Sel Mahum Soldier
|
||||
24352, // Sel Mahum Recruit
|
||||
24353, // Sel Mahum Soldier
|
||||
24354, // Sel Mahum Soldier
|
||||
24355, // Sel Mahum Soldier
|
||||
24492, // Sel Mahum Soldier
|
||||
// 24494, // Sel Mahum Warrior
|
||||
};
|
||||
private static final int[] CHIEF_SOCIAL_ACTIONS =
|
||||
{
|
||||
|
@@ -48,9 +48,7 @@ public class SelMahumSquad extends AbstractNpcAI
|
||||
// Sel Mahum Squad Leaders
|
||||
private static final int[] SQUAD_LEADERS =
|
||||
{
|
||||
24354,
|
||||
24355,
|
||||
24356
|
||||
24493, // Sel Mahum Squad Leader
|
||||
};
|
||||
|
||||
private static final NpcStringId[] CHEF_FSTRINGS =
|
||||
|
135
L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/ai/areas/TowerOfInsolence/WatchmenBosses.java
vendored
Normal file
135
L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/ai/areas/TowerOfInsolence/WatchmenBosses.java
vendored
Normal file
@@ -0,0 +1,135 @@
|
||||
/*
|
||||
* 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.TowerOfInsolence;
|
||||
|
||||
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 Mobius
|
||||
*/
|
||||
public class WatchmenBosses extends AbstractNpcAI
|
||||
{
|
||||
// NPCs
|
||||
private static final int WATCHMAN_OF_THE_FORGOTTEN = 24555;
|
||||
private static final int WATCHMAN_OF_THE_RESURRECTED = 24561;
|
||||
private static final int WATCHMAN_OF_THE_CURSED = 24567;
|
||||
// Locations
|
||||
private static final Location[] WATCHMAN_OF_THE_FORGOTTEN_LOCATIONS =
|
||||
{
|
||||
new Location(-86568, 19304, -15429),
|
||||
new Location(-82024, 20440, -15426),
|
||||
new Location(-79624, 18488, -15429),
|
||||
new Location(-77560, 16184, -15426),
|
||||
new Location(-77656, 12776, -15429),
|
||||
new Location(-82024, 11848, -15426),
|
||||
new Location(-80152, 14328, -15429),
|
||||
new Location(-83864, 18136, -15429),
|
||||
new Location(-83976, 14296, -15429),
|
||||
};
|
||||
private static final Location[] WATCHMAN_OF_THE_RESURRECTED_LOCATIONS =
|
||||
{
|
||||
new Location(-83944, 17960, -12933),
|
||||
new Location(-80120, 14184, -12933),
|
||||
new Location(-80168, 17992, -12933),
|
||||
new Location(-83816, 14296, -12933),
|
||||
new Location(-86504, 16168, -12929),
|
||||
new Location(-85912, 12088, -12933),
|
||||
new Location(-82024, 11720, -12929),
|
||||
new Location(-80088, 10936, -12933),
|
||||
new Location(-77560, 16152, -12929),
|
||||
};
|
||||
private static final Location[] WATCHMAN_OF_THE_CURSED_LOCATIONS =
|
||||
{
|
||||
new Location(-77673, 16163, -10306),
|
||||
new Location(-79384, 18344, -10309),
|
||||
new Location(-82024, 20584, -10306),
|
||||
new Location(-84344, 18552, -10309),
|
||||
new Location(-86360, 16168, -10306),
|
||||
new Location(-86104, 12888, -10309),
|
||||
new Location(-83736, 10792, -10309),
|
||||
new Location(-83448, 14792, -10306),
|
||||
new Location(-80088, 17336, -10309),
|
||||
new Location(-84216, 17208, -10309),
|
||||
new Location(-80904, 13976, -10309),
|
||||
};
|
||||
|
||||
private WatchmenBosses()
|
||||
{
|
||||
addKillId(WATCHMAN_OF_THE_FORGOTTEN, WATCHMAN_OF_THE_RESURRECTED, WATCHMAN_OF_THE_CURSED);
|
||||
|
||||
startQuestTimer("SPAWN_WATCHMAN_OF_THE_FORGOTTEN", 1000, null, null);
|
||||
startQuestTimer("SPAWN_WATCHMAN_OF_THE_RESURRECTED", 1000, null, null);
|
||||
startQuestTimer("SPAWN_WATCHMAN_OF_THE_CURSED", 1000, null, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "SPAWN_WATCHMAN_OF_THE_FORGOTTEN":
|
||||
{
|
||||
addSpawn(WATCHMAN_OF_THE_FORGOTTEN, getRandomEntry(WATCHMAN_OF_THE_FORGOTTEN_LOCATIONS));
|
||||
break;
|
||||
}
|
||||
case "SPAWN_WATCHMAN_OF_THE_RESURRECTED":
|
||||
{
|
||||
addSpawn(WATCHMAN_OF_THE_RESURRECTED, getRandomEntry(WATCHMAN_OF_THE_RESURRECTED_LOCATIONS));
|
||||
break;
|
||||
}
|
||||
case "SPAWN_WATCHMAN_OF_THE_CURSED":
|
||||
{
|
||||
addSpawn(WATCHMAN_OF_THE_CURSED, getRandomEntry(WATCHMAN_OF_THE_CURSED_LOCATIONS));
|
||||
break;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case WATCHMAN_OF_THE_FORGOTTEN:
|
||||
{
|
||||
startQuestTimer("SPAWN_WATCHMAN_OF_THE_FORGOTTEN", 28800000, null, null);
|
||||
break;
|
||||
}
|
||||
case WATCHMAN_OF_THE_RESURRECTED:
|
||||
{
|
||||
startQuestTimer("SPAWN_WATCHMAN_OF_THE_RESURRECTED", 28800000, null, null);
|
||||
break;
|
||||
}
|
||||
case WATCHMAN_OF_THE_CURSED:
|
||||
{
|
||||
startQuestTimer("SPAWN_WATCHMAN_OF_THE_CURSED", 28800000, null, null);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new WatchmenBosses();
|
||||
}
|
||||
}
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Gatekeeper Ziggurat:<br>
|
||||
A human-like voice comes from a glowing blue orb:<br>
|
||||
Someone went in already, and Anakim has disappeared soon after. There is no point in entering right now.
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Gatekeeper Ziggurat:<br>
|
||||
(A command channel needs at least %min% members to challenge Anakim.)
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Gatekeeper Ziggurat:<br>
|
||||
You are overcome by a voice, a voice so powerful you are helpless as it speaks:<br>
|
||||
(The players who belong to an association can only enter through the Association Leader.)
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Gatekeeper Ziggurat:<br>
|
||||
(A command channel members level must be %minLevel% to challenge Anakim.)
|
||||
</body></html>
|
@@ -1,7 +0,0 @@
|
||||
<html><body>Gatekeeper Ziggurat:<br>
|
||||
A Human voice seems to emanate from a shining, blue globe:<br>
|
||||
Behold the gateway to the Forbidden Sacred Area! My job is to guard it, and you cannot pass without my permission.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Anakim">"I want to teleport."</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Quest OracleTeleport">Enter the Dimensional Rift</Button>
|
||||
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Gatekeeper Spirit:<br>
|
||||
Behold, the sphere speaks...<br>
|
||||
You must leave this place!<br>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest Anakim exist">"Okay. I will teleport."</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Gatekeeper Ziggurat:<br
|
||||
>A human-like voice comes from a glowing blue orb:<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Quest Anakim">"I kinda want to teleport inside."</Button>
|
||||
</body></html>
|
@@ -1,370 +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.bosses.Anakim;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.List;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.commons.util.CommonUtil;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.gameserver.ai.CtrlIntention;
|
||||
import org.l2jmobius.gameserver.enums.TeleportWhereType;
|
||||
import org.l2jmobius.gameserver.instancemanager.GrandBossManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.MapRegionManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
import org.l2jmobius.gameserver.model.Party;
|
||||
import org.l2jmobius.gameserver.model.Spawn;
|
||||
import org.l2jmobius.gameserver.model.StatSet;
|
||||
import org.l2jmobius.gameserver.model.WorldObject;
|
||||
import org.l2jmobius.gameserver.model.actor.Attackable;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.GrandBossInstance;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestTimer;
|
||||
import org.l2jmobius.gameserver.model.skills.AbnormalType;
|
||||
import org.l2jmobius.gameserver.model.skills.Skill;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneType;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
/**
|
||||
* Anakim AI<br>
|
||||
* @author LasTravel<br>
|
||||
* @URL http://boards.lineage2.com/showpost.php?p=3386784&postcount=6<br>
|
||||
* @video http://www.youtube.com/watch?v=LecymFTJQzQ
|
||||
*/
|
||||
public class Anakim extends AbstractNpcAI
|
||||
{
|
||||
// Status
|
||||
private static final int ALIVE = 0;
|
||||
private static final int FIGHTING = 1;
|
||||
private static final int DEAD = 2;
|
||||
// NPCs
|
||||
private static final int ANAKIM = 29348;
|
||||
private static final int EXIST_CUBIC = 31109;
|
||||
private static final int ANAKIM_CUBIC = 31111;
|
||||
//@formatter:off
|
||||
private static final int[] ANAKIM_MINIONS = {29349, 29350, 29351};
|
||||
//@formatter:on
|
||||
private static final int[] ALL_MOBS =
|
||||
{
|
||||
ANAKIM,
|
||||
ANAKIM_MINIONS[0],
|
||||
ANAKIM_MINIONS[1],
|
||||
ANAKIM_MINIONS[2],
|
||||
};
|
||||
// Misc
|
||||
private static final Location ENTER_ANAKIM_LOC = new Location(184569, -12134, -5499);
|
||||
private static final ZoneType BOSS_ZONE = ZoneManager.getInstance().getZoneById(12003);
|
||||
// Vars
|
||||
private static long _lastAction;
|
||||
private static Npc _anakimBoss;
|
||||
private static GrandBossInstance _anakimTemp;
|
||||
|
||||
public Anakim()
|
||||
{
|
||||
addTalkId(EXIST_CUBIC, ANAKIM_CUBIC);
|
||||
addStartNpc(EXIST_CUBIC, ANAKIM_CUBIC);
|
||||
addFirstTalkId(EXIST_CUBIC, ANAKIM_CUBIC);
|
||||
addAttackId(ALL_MOBS);
|
||||
addKillId(ALL_MOBS);
|
||||
addSkillSeeId(ALL_MOBS);
|
||||
|
||||
// Unlock
|
||||
final StatSet info = GrandBossManager.getInstance().getStatSet(ANAKIM);
|
||||
final int status = GrandBossManager.getInstance().getBossStatus(ANAKIM);
|
||||
if (status == DEAD)
|
||||
{
|
||||
final long time = info.getLong("respawn_time") - System.currentTimeMillis();
|
||||
if (time > 0)
|
||||
{
|
||||
startQuestTimer("unlock_anakim", time, null, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
_anakimTemp = (GrandBossInstance) addSpawn(ANAKIM, -113360, -244676, -15536, 0, false, 0);
|
||||
GrandBossManager.getInstance().addBoss(_anakimTemp);
|
||||
GrandBossManager.getInstance().setBossStatus(ANAKIM, ALIVE);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_anakimTemp = (GrandBossInstance) addSpawn(ANAKIM, -113360, -244676, -15536, 0, false, 0);
|
||||
GrandBossManager.getInstance().addBoss(_anakimTemp);
|
||||
GrandBossManager.getInstance().setBossStatus(ANAKIM, ALIVE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "unlock_anakim":
|
||||
{
|
||||
_anakimTemp = (GrandBossInstance) addSpawn(ANAKIM, -113360, -244676, -15536, 0, false, 0);
|
||||
GrandBossManager.getInstance().addBoss(_anakimTemp);
|
||||
GrandBossManager.getInstance().setBossStatus(ANAKIM, ALIVE);
|
||||
break;
|
||||
}
|
||||
case "check_activity_task":
|
||||
{
|
||||
if ((_lastAction + 900000) < System.currentTimeMillis())
|
||||
{
|
||||
GrandBossManager.getInstance().setBossStatus(ANAKIM, ALIVE);
|
||||
for (Creature creature : BOSS_ZONE.getCharactersInside())
|
||||
{
|
||||
if (creature != null)
|
||||
{
|
||||
if (creature.isNpc())
|
||||
{
|
||||
creature.deleteMe();
|
||||
}
|
||||
else if (creature.isPlayer())
|
||||
{
|
||||
creature.teleToLocation(MapRegionManager.getInstance().getTeleToLocation(creature, TeleportWhereType.TOWN));
|
||||
}
|
||||
}
|
||||
}
|
||||
startQuestTimer("end_anakim", 2000, null, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
startQuestTimer("check_activity_task", 60000, null, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "cancel_timers":
|
||||
{
|
||||
QuestTimer activityTimer = getQuestTimer("check_activity_task", null, null);
|
||||
if (activityTimer != null)
|
||||
{
|
||||
activityTimer.cancel();
|
||||
}
|
||||
|
||||
QuestTimer forceEnd = getQuestTimer("end_anakim", null, null);
|
||||
if (forceEnd != null)
|
||||
{
|
||||
forceEnd.cancel();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "end_anakim":
|
||||
{
|
||||
notifyEvent("cancel_timers", null, null);
|
||||
if (_anakimBoss != null)
|
||||
{
|
||||
_anakimBoss.deleteMe();
|
||||
}
|
||||
BOSS_ZONE.oustAllPlayers();
|
||||
if (GrandBossManager.getInstance().getBossStatus(ANAKIM) != DEAD)
|
||||
{
|
||||
GrandBossManager.getInstance().setBossStatus(ANAKIM, ALIVE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "exist":
|
||||
{
|
||||
player.teleToLocation(TeleportWhereType.TOWN);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, PlayerInstance player)
|
||||
{
|
||||
if (npc.getId() == ANAKIM_CUBIC)
|
||||
{
|
||||
final int _anakimStatus = GrandBossManager.getInstance().getBossStatus(ANAKIM);
|
||||
if (_anakimStatus > ALIVE)
|
||||
{
|
||||
return "31101-01.html";
|
||||
}
|
||||
if (!player.isInParty())
|
||||
{
|
||||
final NpcHtmlMessage packet = new NpcHtmlMessage(npc.getObjectId());
|
||||
packet.setHtml(getHtm(player, "31101-02.html"));
|
||||
packet.replace("%min%", Integer.toString(Config.ANAKIM_MIN_PLAYERS));
|
||||
player.sendPacket(packet);
|
||||
return null;
|
||||
}
|
||||
final Party party = player.getParty();
|
||||
final boolean isInCC = party.isInCommandChannel();
|
||||
final List<PlayerInstance> members = (isInCC) ? party.getCommandChannel().getMembers() : party.getMembers();
|
||||
final boolean isPartyLeader = (isInCC) ? party.getCommandChannel().isLeader(player) : party.isLeader(player);
|
||||
if (!isPartyLeader)
|
||||
{
|
||||
return "31101-03.html";
|
||||
}
|
||||
|
||||
if ((members.size() < Config.ANAKIM_MIN_PLAYERS) || (members.size() > Config.ANAKIM_MAX_PLAYERS))
|
||||
{
|
||||
final NpcHtmlMessage packet = new NpcHtmlMessage(npc.getObjectId());
|
||||
packet.setHtml(getHtm(player, "31101-02.html"));
|
||||
packet.replace("%min%", Integer.toString(Config.ANAKIM_MIN_PLAYERS));
|
||||
player.sendPacket(packet);
|
||||
return null;
|
||||
}
|
||||
|
||||
for (PlayerInstance member : members)
|
||||
{
|
||||
if (member.getLevel() < Config.ANAKIM_MIN_PLAYER_LEVEL)
|
||||
{
|
||||
final NpcHtmlMessage packet = new NpcHtmlMessage(npc.getObjectId());
|
||||
packet.setHtml(getHtm(player, "31101-04.html"));
|
||||
packet.replace("%minLevel%", Integer.toString(Config.ANAKIM_MIN_PLAYER_LEVEL));
|
||||
player.sendPacket(packet);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
for (PlayerInstance member : members)
|
||||
{
|
||||
if (member.isInsideRadius3D(npc, 1000) && (npc.getId() == ANAKIM_CUBIC))
|
||||
{
|
||||
member.teleToLocation(ENTER_ANAKIM_LOC, true);
|
||||
}
|
||||
}
|
||||
|
||||
if ((_anakimStatus == ALIVE) && (npc.getId() == ANAKIM_CUBIC))
|
||||
{
|
||||
GrandBossManager.getInstance().setBossStatus(ANAKIM, FIGHTING);
|
||||
// Spawn the rb
|
||||
_anakimBoss = addSpawn(ANAKIM, 185080, -12613, -5499, 16550, false, 0);
|
||||
GrandBossManager.getInstance().addBoss((GrandBossInstance) _anakimBoss);
|
||||
startQuestTimer("end_anakim", 60 * 60000, null, null); // 1h
|
||||
}
|
||||
}
|
||||
return super.onTalk(npc, player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onFirstTalk(Npc npc, PlayerInstance player)
|
||||
{
|
||||
return npc.getId() + ".html";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isPet)
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
if (npc.isMinion() || npc.isRaid())// Anakim and minions
|
||||
{
|
||||
// Anti BUGGERS
|
||||
if (!BOSS_ZONE.isInsideZone(attacker)) // Character attacking out of zone
|
||||
{
|
||||
attacker.doDie(null);
|
||||
}
|
||||
if (!BOSS_ZONE.isInsideZone(npc)) // Npc moved out of the zone
|
||||
{
|
||||
Spawn spawn = npc.getSpawn();
|
||||
if (spawn != null)
|
||||
{
|
||||
npc.teleToLocation(spawn.getX(), spawn.getY(), spawn.getZ());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return super.onAttack(npc, attacker, damage, isPet);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, PlayerInstance killer, boolean isPet)
|
||||
{
|
||||
if (npc.getId() == ANAKIM)
|
||||
{
|
||||
notifyEvent("cancel_timers", null, null);
|
||||
addSpawn(EXIST_CUBIC, 185082, -12606, -5499, 6133, false, 900000); // 15min
|
||||
|
||||
GrandBossManager.getInstance().setBossStatus(ANAKIM, DEAD);
|
||||
final long respawnTime = getRespawnTime();
|
||||
final StatSet info = GrandBossManager.getInstance().getStatSet(ANAKIM);
|
||||
info.set("respawn_time", System.currentTimeMillis() + respawnTime);
|
||||
GrandBossManager.getInstance().setStatSet(ANAKIM, info);
|
||||
|
||||
startQuestTimer("unlock_anakim", respawnTime, null, null);
|
||||
startQuestTimer("end_anakim", 900000, null, null);
|
||||
}
|
||||
return super.onKill(npc, killer, isPet);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSkillSee(Npc npc, PlayerInstance caster, Skill skill, WorldObject[] targets, boolean isPet)
|
||||
{
|
||||
if (CommonUtil.contains(ANAKIM_MINIONS, npc.getId()) && Rnd.nextBoolean())
|
||||
{
|
||||
if (skill.getAbnormalType() == AbnormalType.HP_RECOVER)
|
||||
{
|
||||
if (!npc.isCastingNow() && (npc.getTarget() != npc) && (npc.getTarget() != caster) && (npc.getTarget() != _anakimBoss)) // Don't call minions if are healing Anakim
|
||||
{
|
||||
((Attackable) npc).clearAggroList();
|
||||
npc.setTarget(caster);
|
||||
((Attackable) npc).addDamageHate(caster, 500, 99999);
|
||||
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, caster);
|
||||
}
|
||||
}
|
||||
}
|
||||
return super.onSkillSee(npc, caster, skill, targets, isPet);
|
||||
}
|
||||
|
||||
private int getRespawnTime()
|
||||
{
|
||||
return (int) calcReuseFromDays(0, 21, Calendar.TUESDAY, 0, 16, Calendar.SATURDAY);
|
||||
}
|
||||
|
||||
private long calcReuseFromDays(int day1Minute, int day1Hour, int day1Day, int day2Minute, int day2Hour, int day2Day)
|
||||
{
|
||||
Calendar now = Calendar.getInstance();
|
||||
Calendar day1 = (Calendar) now.clone();
|
||||
day1.set(Calendar.MINUTE, day1Minute);
|
||||
day1.set(Calendar.HOUR_OF_DAY, day1Hour);
|
||||
day1.set(Calendar.DAY_OF_WEEK, day1Day);
|
||||
|
||||
Calendar day2 = (Calendar) day1.clone();
|
||||
day2.set(Calendar.MINUTE, day2Minute);
|
||||
day2.set(Calendar.HOUR_OF_DAY, day2Hour);
|
||||
day2.set(Calendar.DAY_OF_WEEK, day2Day);
|
||||
|
||||
if (now.after(day1))
|
||||
{
|
||||
day1.add(Calendar.WEEK_OF_MONTH, 1);
|
||||
}
|
||||
if (now.after(day2))
|
||||
{
|
||||
day2.add(Calendar.WEEK_OF_MONTH, 1);
|
||||
}
|
||||
|
||||
Calendar reenter = day1;
|
||||
if (day2.before(day1))
|
||||
{
|
||||
reenter = day2;
|
||||
}
|
||||
return reenter.getTimeInMillis() - System.currentTimeMillis();
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new Anakim();
|
||||
}
|
||||
}
|
@@ -1,220 +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.bosses.Anakim;
|
||||
|
||||
import org.l2jmobius.commons.util.CommonUtil;
|
||||
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.holders.SkillHolder;
|
||||
import org.l2jmobius.gameserver.model.skills.Skill;
|
||||
import org.l2jmobius.gameserver.model.skills.SkillCaster;
|
||||
import org.l2jmobius.gameserver.model.variables.NpcVariables;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
/**
|
||||
* @author NviX
|
||||
*/
|
||||
public class AnakimBoss extends AbstractNpcAI
|
||||
{
|
||||
// Npc
|
||||
private static final int ANAKIM = 29348;
|
||||
// Skills
|
||||
private static final SkillHolder POWER_STRIKE = new SkillHolder(32566, 1);
|
||||
private static final SkillHolder POWER_MULTI_SHOT = new SkillHolder(32567, 1);
|
||||
private static final SkillHolder HOLY_VENGEANCE = new SkillHolder(32568, 1);
|
||||
private static final SkillHolder HOLY_DIMENSION = new SkillHolder(32569, 1);
|
||||
private static final SkillHolder HOLY_SHIELD = new SkillHolder(32570, 1);
|
||||
// Others
|
||||
private boolean _hp75 = false;
|
||||
private boolean _hp50 = false;
|
||||
private boolean _hp25 = false;
|
||||
|
||||
private AnakimBoss()
|
||||
{
|
||||
registerMobs(ANAKIM);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "MANAGE_SKILLS":
|
||||
{
|
||||
if (npc != null)
|
||||
{
|
||||
manageSkills(npc);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon, Skill skill)
|
||||
{
|
||||
if (npc.getId() == ANAKIM)
|
||||
{
|
||||
if (skill == null)
|
||||
{
|
||||
refreshAiParams(attacker, npc, (damage * 1000));
|
||||
}
|
||||
else if (npc.getCurrentHp() < (npc.getMaxHp() * 0.25))
|
||||
{
|
||||
refreshAiParams(attacker, npc, ((damage / 3) * 100));
|
||||
}
|
||||
else if (npc.getCurrentHp() < (npc.getMaxHp() * 0.5))
|
||||
{
|
||||
refreshAiParams(attacker, npc, (damage * 20));
|
||||
}
|
||||
else if (npc.getCurrentHp() < (npc.getMaxHp() * 0.75))
|
||||
{
|
||||
refreshAiParams(attacker, npc, (damage * 10));
|
||||
}
|
||||
else
|
||||
{
|
||||
refreshAiParams(attacker, npc, ((damage / 3) * 20));
|
||||
}
|
||||
manageSkills(npc);
|
||||
}
|
||||
|
||||
return super.onAttack(npc, attacker, damage, isSummon);
|
||||
}
|
||||
|
||||
private final void refreshAiParams(Creature attacker, Npc npc, int damage)
|
||||
{
|
||||
refreshAiParams(attacker, npc, damage, damage);
|
||||
}
|
||||
|
||||
private final void refreshAiParams(Creature attacker, Npc npc, int damage, int aggro)
|
||||
{
|
||||
final int newAggroVal = damage + getRandom(3000);
|
||||
final int aggroVal = aggro + 1000;
|
||||
final NpcVariables vars = npc.getVariables();
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
if (attacker == vars.getObject("c_quest" + i, Creature.class))
|
||||
{
|
||||
if (vars.getInt("i_quest" + i) < aggroVal)
|
||||
{
|
||||
vars.set("i_quest" + i, newAggroVal);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
final int index = CommonUtil.getIndexOfMinValue(vars.getInt("i_quest0"), vars.getInt("i_quest1"), vars.getInt("i_quest2"));
|
||||
vars.set("i_quest" + index, newAggroVal);
|
||||
vars.set("c_quest" + index, attacker);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpellFinished(Npc npc, PlayerInstance player, Skill skill)
|
||||
{
|
||||
startQuestTimer("MANAGE_SKILLS", 1000, npc, null);
|
||||
|
||||
return super.onSpellFinished(npc, player, skill);
|
||||
}
|
||||
|
||||
private void manageSkills(Npc npc)
|
||||
{
|
||||
if (npc.isCastingNow(SkillCaster::isAnyNormalType) || npc.isCoreAIDisabled() || !npc.isInCombat())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final NpcVariables vars = npc.getVariables();
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
final Creature attacker = vars.getObject("c_quest" + i, Creature.class);
|
||||
if ((attacker == null) || ((npc.calculateDistance3D(attacker) > 9000) || attacker.isDead()))
|
||||
{
|
||||
vars.set("i_quest" + i, 0);
|
||||
}
|
||||
}
|
||||
final int index = CommonUtil.getIndexOfMaxValue(vars.getInt("i_quest0"), vars.getInt("i_quest1"), vars.getInt("i_quest2"));
|
||||
final Creature player = vars.getObject("c_quest" + index, Creature.class);
|
||||
final int i2 = vars.getInt("i_quest" + index);
|
||||
if ((i2 > 0) && (getRandom(100) < 70))
|
||||
{
|
||||
vars.set("i_quest" + index, 500);
|
||||
}
|
||||
|
||||
SkillHolder skillToCast = null;
|
||||
int chance = getRandom(100);
|
||||
if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.75)) && !_hp75)
|
||||
{
|
||||
_hp75 = true;
|
||||
npc.abortCast();
|
||||
npc.abortAttack();
|
||||
npc.setTarget(npc);
|
||||
npc.doCast(HOLY_SHIELD.getSkill());
|
||||
return;
|
||||
}
|
||||
else if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.50)) && !_hp50)
|
||||
{
|
||||
_hp50 = true;
|
||||
npc.abortCast();
|
||||
npc.abortAttack();
|
||||
npc.setTarget(npc);
|
||||
npc.doCast(HOLY_SHIELD.getSkill());
|
||||
return;
|
||||
}
|
||||
else if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.25)) && !_hp25)
|
||||
{
|
||||
_hp25 = true;
|
||||
npc.abortCast();
|
||||
npc.abortAttack();
|
||||
npc.setTarget(npc);
|
||||
npc.doCast(HOLY_SHIELD.getSkill());
|
||||
return;
|
||||
}
|
||||
if ((player != null) && !player.isDead())
|
||||
{
|
||||
if (chance < 15)
|
||||
{
|
||||
skillToCast = HOLY_DIMENSION;
|
||||
}
|
||||
else if (chance < 30)
|
||||
{
|
||||
skillToCast = HOLY_VENGEANCE;
|
||||
}
|
||||
else if (chance < 50)
|
||||
{
|
||||
skillToCast = POWER_MULTI_SHOT;
|
||||
}
|
||||
else
|
||||
{
|
||||
skillToCast = POWER_STRIKE;
|
||||
}
|
||||
}
|
||||
|
||||
if ((skillToCast != null) && SkillCaster.checkUseConditions(npc, skillToCast.getSkill()))
|
||||
|
||||
{
|
||||
npc.setTarget(player);
|
||||
npc.doCast(skillToCast.getSkill());
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new AnakimBoss();
|
||||
}
|
||||
}
|
@@ -1,188 +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.bosses.Anakim;
|
||||
|
||||
import org.l2jmobius.commons.util.CommonUtil;
|
||||
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.holders.SkillHolder;
|
||||
import org.l2jmobius.gameserver.model.skills.Skill;
|
||||
import org.l2jmobius.gameserver.model.skills.SkillCaster;
|
||||
import org.l2jmobius.gameserver.model.variables.NpcVariables;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
/**
|
||||
* @author NviX
|
||||
*/
|
||||
public class AnakimElitePriest extends AbstractNpcAI
|
||||
{
|
||||
// Npc
|
||||
private static final int ANAKIM_ELITE_PRIEST = 29351;
|
||||
// Skills
|
||||
private static final SkillHolder ENERGY_SHOT = new SkillHolder(32576, 1);
|
||||
private static final SkillHolder MAGIC_BLAST = new SkillHolder(32577, 1);
|
||||
private static final SkillHolder LIGHTNING = new SkillHolder(32575, 1);
|
||||
private static final SkillHolder BLESS = new SkillHolder(32574, 1);
|
||||
|
||||
private AnakimElitePriest()
|
||||
{
|
||||
registerMobs(ANAKIM_ELITE_PRIEST);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "MANAGE_SKILLS":
|
||||
{
|
||||
if (npc != null)
|
||||
{
|
||||
manageSkills(npc);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon, Skill skill)
|
||||
{
|
||||
if (npc.getId() == ANAKIM_ELITE_PRIEST)
|
||||
{
|
||||
if (skill == null)
|
||||
{
|
||||
refreshAiParams(attacker, npc, (damage * 1000));
|
||||
}
|
||||
else if (npc.getCurrentHp() < (npc.getMaxHp() * 0.25))
|
||||
{
|
||||
refreshAiParams(attacker, npc, ((damage / 3) * 100));
|
||||
}
|
||||
else if (npc.getCurrentHp() < (npc.getMaxHp() * 0.5))
|
||||
{
|
||||
refreshAiParams(attacker, npc, (damage * 20));
|
||||
}
|
||||
else if (npc.getCurrentHp() < (npc.getMaxHp() * 0.75))
|
||||
{
|
||||
refreshAiParams(attacker, npc, (damage * 10));
|
||||
}
|
||||
else
|
||||
{
|
||||
refreshAiParams(attacker, npc, ((damage / 3) * 20));
|
||||
}
|
||||
manageSkills(npc);
|
||||
}
|
||||
|
||||
return super.onAttack(npc, attacker, damage, isSummon);
|
||||
}
|
||||
|
||||
private final void refreshAiParams(Creature attacker, Npc npc, int damage)
|
||||
{
|
||||
refreshAiParams(attacker, npc, damage, damage);
|
||||
}
|
||||
|
||||
private final void refreshAiParams(Creature attacker, Npc npc, int damage, int aggro)
|
||||
{
|
||||
final int newAggroVal = damage + getRandom(3000);
|
||||
final int aggroVal = aggro + 1000;
|
||||
final NpcVariables vars = npc.getVariables();
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
if (attacker == vars.getObject("c_quest" + i, Creature.class))
|
||||
{
|
||||
if (vars.getInt("i_quest" + i) < aggroVal)
|
||||
{
|
||||
vars.set("i_quest" + i, newAggroVal);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
final int index = CommonUtil.getIndexOfMinValue(vars.getInt("i_quest0"), vars.getInt("i_quest1"), vars.getInt("i_quest2"));
|
||||
vars.set("i_quest" + index, newAggroVal);
|
||||
vars.set("c_quest" + index, attacker);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpellFinished(Npc npc, PlayerInstance player, Skill skill)
|
||||
{
|
||||
startQuestTimer("MANAGE_SKILLS", 1000, npc, null);
|
||||
|
||||
return super.onSpellFinished(npc, player, skill);
|
||||
}
|
||||
|
||||
private void manageSkills(Npc npc)
|
||||
{
|
||||
if (npc.isCastingNow(SkillCaster::isAnyNormalType) || npc.isCoreAIDisabled() || !npc.isInCombat())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final NpcVariables vars = npc.getVariables();
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
final Creature attacker = vars.getObject("c_quest" + i, Creature.class);
|
||||
if ((attacker == null) || ((npc.calculateDistance3D(attacker) > 9000) || attacker.isDead()))
|
||||
{
|
||||
vars.set("i_quest" + i, 0);
|
||||
}
|
||||
}
|
||||
final int index = CommonUtil.getIndexOfMaxValue(vars.getInt("i_quest0"), vars.getInt("i_quest1"), vars.getInt("i_quest2"));
|
||||
final Creature player = vars.getObject("c_quest" + index, Creature.class);
|
||||
final int i2 = vars.getInt("i_quest" + index);
|
||||
if ((i2 > 0) && (getRandom(100) < 70))
|
||||
{
|
||||
vars.set("i_quest" + index, 500);
|
||||
}
|
||||
|
||||
SkillHolder skillToCast = null;
|
||||
int chance = getRandom(100);
|
||||
if ((player != null) && !player.isDead())
|
||||
{
|
||||
if (chance < 15)
|
||||
{
|
||||
skillToCast = BLESS;
|
||||
}
|
||||
else if (chance < 30)
|
||||
{
|
||||
skillToCast = LIGHTNING;
|
||||
}
|
||||
else if (chance < 50)
|
||||
{
|
||||
skillToCast = MAGIC_BLAST;
|
||||
}
|
||||
else
|
||||
{
|
||||
skillToCast = ENERGY_SHOT;
|
||||
}
|
||||
}
|
||||
|
||||
if ((skillToCast != null) && SkillCaster.checkUseConditions(npc, skillToCast.getSkill()))
|
||||
|
||||
{
|
||||
npc.setTarget(player);
|
||||
npc.doCast(skillToCast.getSkill());
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new AnakimElitePriest();
|
||||
}
|
||||
}
|
@@ -1,8 +0,0 @@
|
||||
<html><body>Heart of Warding:<br>
|
||||
You are overcome by a voice, a voice so powerful you are helpless as it speaks.<br>
|
||||
<font color="LEVEL">Do not expect Shilen's authority will diminish<br>
|
||||
while false gods freely roam.<br>
|
||||
Leave, and<br>
|
||||
prepare to face the return of Antharas.</font><br>
|
||||
(Challenging Antharas is not currently available.)
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Heart of Warding:<br>
|
||||
You are overcome by a voice, a voice so powerful you are helpless as it speaks:<br>
|
||||
<font color="LEVEL">Do not expect that you might challenge Antharas at your own convenience.<br>
|
||||
When the time is right, Shilen's authority will judge you.</font><br>
|
||||
(Currently, other members are challenging Antharas.)
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Heart of Warding:<br>
|
||||
A voice that can shatter your entire body is resonating in your head:<br>
|
||||
<font color="LEVEL">Do not dare to face Shilen's authority<br>
|
||||
without the most determined preparation.</font><br>
|
||||
(Only those who have the Portal Stone can challenge Antharas.)
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Heart of Warding:<br>
|
||||
You are overcome by a voice, a voice so powerful you are helpless as it speaks:<br>
|
||||
<font color="LEVEL">No matter how many gather to follow false gods,<br>
|
||||
Shilen's authority is too great.</font><br>
|
||||
(The number of participants are above the allowed number in challenging Antharas.)
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Heart of Warding:<br>
|
||||
You are overcome by a voice, a voice so powerful you are helpless as it speaks:<br>
|
||||
<font color="LEVEL">You seek death and defeat by coming here without your leader! You appear before Shilen's authority<br>
|
||||
and you tempt Shilen's wrath!</font><br>
|
||||
(The players who belong to an association can only enter through the Association Leader.)
|
||||
</body></html>
|
@@ -1,12 +0,0 @@
|
||||
<html><body>Heart of Warding:<br>
|
||||
You are overcome by a voice, a voice so powerful you are helpless as it speaks:<br>
|
||||
<font color="LEVEL">A terrible creature <br>
|
||||
fell to the earth from above <br>
|
||||
in order to vent a mother's spite,<br>
|
||||
cursed and forsaken by her own children.<br>
|
||||
Dark Pilgrim of the Holy Land,<br>
|
||||
Do you dare face the Land Dragon Antharas?</font><br>
|
||||
(A maximum of 200 people can challenge Antharas.)<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Quest Antharas enter">Move to Antharas' Nest</button>
|
||||
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
||||
</body></html>
|
File diff suppressed because it is too large
Load Diff
@@ -26,6 +26,7 @@ import org.l2jmobius.gameserver.model.actor.instance.DoorInstance;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDeath;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee;
|
||||
import org.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import org.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
import org.l2jmobius.gameserver.model.instancezone.Instance;
|
||||
import org.l2jmobius.gameserver.model.skills.Skill;
|
||||
@@ -42,13 +43,15 @@ public class BaylorWarzone extends AbstractInstance
|
||||
// NPCs
|
||||
private static final int BAYLOR = 29213;
|
||||
private static final int PRISON_GUARD = 29104;
|
||||
private static final int ENTRANCE_PORTAL = 33523;
|
||||
private static final int BENUSTA = 34542;
|
||||
private static final int INVISIBLE_NPC_1 = 29106;
|
||||
private static final int INVISIBLE_NPC_2 = 29108;
|
||||
private static final int INVISIBLE_NPC_3 = 29109;
|
||||
// Skills
|
||||
private static final SkillHolder INVIS_NPC_SOCIAL_SKILL = new SkillHolder(5401, 1);
|
||||
private static final SkillHolder BAYLOR_SOCIAL_SKILL = new SkillHolder(5402, 1);
|
||||
// Item
|
||||
private static final ItemHolder BENUSTAS_REWARD_BOX = new ItemHolder(81151, 1);
|
||||
// Locations
|
||||
private static final Location BATTLE_PORT = new Location(153567, 143319, -12736);
|
||||
// Misc
|
||||
@@ -57,8 +60,8 @@ public class BaylorWarzone extends AbstractInstance
|
||||
public BaylorWarzone()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(ENTRANCE_PORTAL);
|
||||
addTalkId(ENTRANCE_PORTAL);
|
||||
addStartNpc(BENUSTA);
|
||||
addTalkId(BENUSTA);
|
||||
addInstanceCreatedId(TEMPLATE_ID);
|
||||
addSpawnId(INVISIBLE_NPC_1);
|
||||
addSpellFinishedId(INVISIBLE_NPC_1);
|
||||
@@ -295,6 +298,10 @@ public class BaylorWarzone extends AbstractInstance
|
||||
{
|
||||
if (world.getAliveNpcs(BAYLOR).isEmpty())
|
||||
{
|
||||
for (PlayerInstance member : world.getPlayers())
|
||||
{
|
||||
giveItems(member, BENUSTAS_REWARD_BOX);
|
||||
}
|
||||
world.finishInstance();
|
||||
}
|
||||
else
|
||||
|
@@ -650,7 +650,7 @@ public class EtisVanEtina extends AbstractNpcAI
|
||||
_sealOfDestruction.setDisplayEffect(3);
|
||||
// TODO: Seal of Destruction skill cast.
|
||||
_sealOfDestruction.broadcastPacket(new MagicSkillUse(_sealOfDestruction, _sealOfDestruction, CALL_OF_SEVEN_SIGNS_SEAL_N.getSkillId(), 7, 10000, 0));
|
||||
BOSS_ZONE.getPlayersInside().forEach(player -> player.sendPacket(new ExShowScreenMessage(NpcStringId.THE_SEAL_OF_DESTRUCTION_ACTIVATES_AND_THE_ENTIRE_ETINA_GREAT_TEMPLE_IS_NOW_UNDER_THE_INFLUENCE_OF_THE_SEAL, ExShowScreenMessage.TOP_CENTER, 7000, true)));
|
||||
BOSS_ZONE.getPlayersInside().forEach(player -> player.sendPacket(new ExShowScreenMessage(NpcStringId.THE_SEAL_OF_DESTRUCTION_IS_ACTIVATED_AND_ETINA_S_GRAND_TEMPLE_IS_NOW_UNDER_ITS_INFLUENCE, ExShowScreenMessage.TOP_CENTER, 7000, true)));
|
||||
}, 70000, 120000);
|
||||
}
|
||||
else if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.15)) && !_etina15)
|
||||
@@ -661,7 +661,7 @@ public class EtisVanEtina extends AbstractNpcAI
|
||||
_minionSpawns.add(addSpawn(spawn.getNpcId(), spawn.getLocation()));
|
||||
}
|
||||
// TODO: decrease etina and seals power
|
||||
BOSS_ZONE.getPlayersInside().forEach(player -> player.sendPacket(new ExShowScreenMessage(NpcStringId.ETIS_VAN_ETINA_AND_THE_POWER_OF_SEVEN_SEALS_ARE_WEAKENING, ExShowScreenMessage.TOP_CENTER, 7000, true)));
|
||||
BOSS_ZONE.getPlayersInside().forEach(player -> player.sendPacket(new ExShowScreenMessage(NpcStringId.ETIS_VAN_ETINA_AND_THE_POWER_OF_SIX_SEALS_ARE_WEAKENING, ExShowScreenMessage.TOP_CENTER, 7000, true)));
|
||||
}
|
||||
}
|
||||
return super.onAttack(npc, attacker, damage, isSummon);
|
||||
|
@@ -189,7 +189,7 @@ public class Fafurion extends AbstractNpcAI
|
||||
{
|
||||
for (PlayerInstance plr : World.getInstance().getVisibleObjectsInRange(npc, PlayerInstance.class, 5000))
|
||||
{
|
||||
plr.sendPacket(new ExShowScreenMessage(NpcStringId.EXCEEDED_THE_FAFURION_S_NEST_RAID_TIME_LIMIT, ExShowScreenMessage.TOP_CENTER, 10000, true));
|
||||
plr.sendPacket(new ExShowScreenMessage(NpcStringId.FAFURION_S_NEST_RAID_IS_OVER, ExShowScreenMessage.TOP_CENTER, 10000, true));
|
||||
}
|
||||
GrandBossManager.getInstance().setBossStatus(FAFURION_GRANDBOSS_ID, ALIVE);
|
||||
FAFURION_ZONE.oustAllPlayers();
|
||||
|
@@ -27,12 +27,10 @@ import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
import org.l2jmobius.gameserver.model.instancezone.Instance;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import org.l2jmobius.gameserver.model.skills.Skill;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
|
||||
import instances.AbstractInstance;
|
||||
import quests.Q10285_MeetingSirra.Q10285_MeetingSirra;
|
||||
|
||||
/**
|
||||
* Ice Queen's Castle instance zone.
|
||||
@@ -111,13 +109,7 @@ public class IceQueensCastle extends AbstractInstance
|
||||
}
|
||||
case "TIMER_PC_LEAVE":
|
||||
{
|
||||
final QuestState qs = player.getQuestState(Q10285_MeetingSirra.class.getSimpleName());
|
||||
if (qs != null)
|
||||
{
|
||||
qs.setMemoState(3);
|
||||
qs.setCond(10, true);
|
||||
finishInstance(player, 0);
|
||||
}
|
||||
finishInstance(player, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@@ -37,8 +37,6 @@ import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.RaidBossInstance;
|
||||
import org.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
import org.l2jmobius.gameserver.model.instancezone.Instance;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import org.l2jmobius.gameserver.model.quest.State;
|
||||
import org.l2jmobius.gameserver.model.skills.Skill;
|
||||
import org.l2jmobius.gameserver.model.skills.SkillCaster;
|
||||
import org.l2jmobius.gameserver.model.variables.NpcVariables;
|
||||
@@ -51,7 +49,6 @@ import org.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
|
||||
import org.l2jmobius.gameserver.taskmanager.DecayTaskManager;
|
||||
|
||||
import instances.AbstractInstance;
|
||||
import quests.Q10286_ReunionWithSirra.Q10286_ReunionWithSirra;
|
||||
|
||||
/**
|
||||
* Ice Queen's Castle (Normal Battle) instance zone.
|
||||
@@ -195,20 +192,6 @@ public class IceQueensCastleBattle extends AbstractInstance
|
||||
}
|
||||
}
|
||||
|
||||
if (!isHard(world))
|
||||
{
|
||||
for (PlayerInstance players : world.getPlayers())
|
||||
{
|
||||
if (!players.isDead())
|
||||
{
|
||||
final QuestState qs = player.getQuestState(Q10286_ReunionWithSirra.class.getSimpleName());
|
||||
if ((qs != null) && (qs.getState() == State.STARTED) && qs.isCond(5))
|
||||
{
|
||||
qs.setCond(6, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
startQuestTimer("STAGE_1_MOVIE", 60000, control, null);
|
||||
world.setParameter("controller", control);
|
||||
}
|
||||
@@ -221,12 +204,6 @@ public class IceQueensCastleBattle extends AbstractInstance
|
||||
}
|
||||
case "killFreya":
|
||||
{
|
||||
final QuestState qs = player.getQuestState(Q10286_ReunionWithSirra.class.getSimpleName());
|
||||
if ((qs != null) && (qs.getState() == State.STARTED) && qs.isCond(6))
|
||||
{
|
||||
qs.setMemoState(10);
|
||||
qs.setCond(7, true);
|
||||
}
|
||||
world.getNpc(SUPP_KEGOR).deleteMe();
|
||||
freya.decayMe();
|
||||
manageMovie(world, Movie.SC_BOSS_FREYA_ENDING_B);
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user