Addition of Fallen Emperor Throne instance.

Contributed by CostyKiller.
This commit is contained in:
MobiusDevelopment
2021-04-17 07:39:08 +00:00
parent d07d194009
commit 4369f32951
12 changed files with 948 additions and 0 deletions

View File

@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Fallen Emperor's Throne -->
<instance id="283" maxWorlds="100" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
<time duration="60" empty="1" />
<locations>
<enter type="FIXED">
<location x="90137" y="160220" z="3488" heading="64545" /> <!-- enter location -->
</enter>
<exit type="ORIGIN" />
</locations>
<conditions>
<condition type="Party" showMessageAndHtml="true">
<param name="html" value="condNoGroup.html" />
</condition>
<condition type="GroupMin">
<param name="limit" value="5" />
</condition>
<condition type="GroupMax">
<param name="html" value="condBigGroup.html" />
<param name="limit" value="7" />
</condition>
<condition type="Level" showMessageAndHtml="true">
<param name="html" value="condNoLevel.html" />
<param name="min" value="103" />
<param name="max" value="130" />
</condition>
<condition type="Distance" />
<condition type="Reenter" />
</conditions>
<reenter apply="ON_FINISH">
<reset hour="6" minute="30" />
</reenter>
<spawnlist>
<group name="FE_HELIOS1" spawnByDefault="false">
<npc id="26333" x="92771" y="161909" z="3494" heading="38329" /> <!-- FE Helios 1 -->
</group>
<group name="FE_HELIOS2" spawnByDefault="false">
<npc id="26334" x="92771" y="161909" z="3494" heading="38329" /> <!-- FE Helios 2 -->
</group>
<group name="FE_HELIOS3" spawnByDefault="false">
<npc id="26335" x="92771" y="161909" z="3494" heading="38329" /> <!-- FE Helios 3 -->
</group>
<group name="MINIONS" spawnByDefault="false">
<!-- left -->
<npc id="26341" x="93008" y="160744" z="3487" heading="0" /> <!-- Royal Templar Colonel -->
<npc id="26342" x="93008" y="160744" z="3487" heading="0" /> <!-- Royal Sharpshooter -->
<npc id="26343" x="93008" y="160744" z="3487" heading="0" /> <!-- Royal Archmage -->
<npc id="26344" x="93008" y="160744" z="3487" heading="0" /> <!-- Royal Gatekeeper -->
<!-- right -->
<npc id="26341" x="91748" y="162548" z="3487" heading="0" /> <!-- Royal Templar Colonel -->
<npc id="26342" x="91748" y="162548" z="3487" heading="0" /> <!-- Royal Sharpshooter -->
<npc id="26343" x="91748" y="162548" z="3487" heading="0" /> <!-- Royal Archmage -->
<npc id="26344" x="91748" y="162548" z="3487" heading="0" /> <!-- Royal Gatekeeper -->
</group>
<group name="BLUE_LIGHTNING" spawnByDefault="false">
<npc id="26338" x="93208" y="161269" z="3489" heading="0" /> <!-- Helios Blue Lightning -->
</group>
<group name="RED_LIGHTNING" spawnByDefault="false">
<npc id="26337" x="92348" y="162558" z="3489" heading="0" /> <!-- Helios Red Lightning -->
</group>
<group name="LEOPOLD" spawnByDefault="false">
<npc id="26336" x="93531" y="162415" z="3487" heading="0" /> <!-- Leopold -->
</group>
<group name="LEOPOLD_ORIGIN" spawnByDefault="false">
<npc id="26339" x="92601" y="162196" z="3464" heading="0" /> <!-- Leopold Origin -->
</group>
<group name="ENUMA_ELISH_ORIGIN" spawnByDefault="false">
<npc id="26340" x="92957" y="161640" z="3485" heading="0" /> <!-- Enuma ELish Origin -->
</group>
</spawnlist>
</instance>

View File

@@ -4,6 +4,7 @@ I am the only one who lived the same age as the Giants, was made by the Giants,
Until now, I was watching the situation on the continent. What would one as old as I do on the front lines? However, I could not stand by and watch while the resurrected Giants destroy us and create a continent for themselves. Hence I have taken action.<br>
<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="TELEPORT" action="bypass -h Quest FallenEmperorsThrone enterInstance"><font color="LEVEL">Challenge Fallen Emperor's 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 npc_%objectId%_Quest">Quest</Button>
</body></html>

View File

@@ -0,0 +1,391 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package instances.FallenEmperorsThrone;
import org.l2jmobius.gameserver.enums.Movie;
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.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import org.l2jmobius.gameserver.util.Broadcast;
import instances.AbstractInstance;
/**
* @author CostyKiller
* @URL: https://l2wiki.com/Fallen_Emperors_Throne
*/
public class FallenEmperorsThrone extends AbstractInstance
{
// NPC
private static final int KEKROPUS = 34222;
// Raid
private static final int FE_HELIOS1 = 26333;
private static final int FE_HELIOS2 = 26334;
private static final int FE_HELIOS3 = 26335;
// Minions
private static final int LEOPOLD = 26336;
private static final int HELIOS_RED_LIGHTNING = 26337;
private static final int HELIOS_BLUE_LIGHTNING = 26338;
// Skills
private static final SkillHolder AUDIENCE_DEBUFF = new SkillHolder(16613, 1);
private static final SkillHolder RED_LIGHTNING_SPEAR = new SkillHolder(16617, 1);
private static final SkillHolder BLUE_LIGHTNING_SPEAR = new SkillHolder(16618, 1);
private static final SkillHolder PRANARACH = new SkillHolder(16624, 1);
private static final SkillHolder HELIOS_RAGE1 = new SkillHolder(16625, 1);
private static final SkillHolder HELIOS_RAGE2 = new SkillHolder(16625, 2);
private static final SkillHolder HELIOS_RAGE3 = new SkillHolder(16625, 3);
private static final SkillHolder HELIOS_RAGE4 = new SkillHolder(16625, 4);
private static final SkillHolder LEOPOLD_BOMB = new SkillHolder(16629, 1);
private static final SkillHolder LEOPOLD_PLASMA_BOMB = new SkillHolder(16630, 1);
private static final SkillHolder LEOPOLD_ENERGY_BOMB = new SkillHolder(16631, 1);
private static final SkillHolder LEOPOLD_MINI_GUN = new SkillHolder(16632, 1);
private static final SkillHolder LEOPOLD_SPRAY_SHOT = new SkillHolder(16633, 1);
private static final SkillHolder LEOPOLD_HARPOON = new SkillHolder(16634, 1);
// Misc
private static final int TEMPLATE_ID = 283;
public FallenEmperorsThrone()
{
super(TEMPLATE_ID);
addInstanceCreatedId(TEMPLATE_ID);
addStartNpc(KEKROPUS);
addTalkId(KEKROPUS);
addAttackId(FE_HELIOS1, FE_HELIOS2, FE_HELIOS3);
addKillId(FE_HELIOS1, FE_HELIOS2, FE_HELIOS3);
}
@Override
public void onInstanceCreated(Instance world, PlayerInstance player)
{
world.setStatus(0);
world.getParameters().set("ACTIVATED", false);
world.getParameters().set("STAGE1_50", false);
world.getParameters().set("STAGE2_50", false);
world.getParameters().set("HELIOS_80", false);
world.getParameters().set("HELIOS_50", false);
world.getParameters().set("ANNOUNCE", false);
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
switch (event)
{
case "enterInstance":
{
enterInstance(player, npc, TEMPLATE_ID);
startQuestTimer("beggining", 10000, npc, player);
break;
}
case "beggining":
{
final Instance world = player.getInstanceWorld();
if (isInInstance(world))
{
world.spawnGroup("FE_HELIOS1");
world.spawnGroup("MINIONS");
}
break;
}
case "stage2":
{
final Instance world = player.getInstanceWorld();
if (isInInstance(world))
{
world.spawnGroup("FE_HELIOS2");
world.spawnGroup("MINIONS");
showOnScreenMsg(world, NpcStringId.HELIOS_APPEARANCE_CHANGES_AND_HE_BEGINS_TO_GROW_STRONGER, ExShowScreenMessage.TOP_CENTER, 10000, true);
startQuestTimer("spheresSpawn", 10000, null, player);
}
break;
}
case "stage3":
{
final Instance world = player.getInstanceWorld();
if (isInInstance(world))
{
world.getParameters().set("ACTIVATED", false);
world.spawnGroup("FE_HELIOS3");
showOnScreenMsg(world, NpcStringId.HELIOS_APPEARANCE_CHANGES_AND_HE_BEGINS_TO_GROW_STRONGER, ExShowScreenMessage.TOP_CENTER, 10000, true);
startQuestTimer("leopoldSpawn", 10000, null, player);
}
break;
}
case "spheresSpawn":
{
final Instance world = player.getInstanceWorld();
if (isInInstance(world))
{
world.spawnGroup("BLUE_LIGHTNING");
world.spawnGroup("RED_LIGHTNING");
world.getNpc(HELIOS_BLUE_LIGHTNING).setInvul(true);
world.getNpc(HELIOS_RED_LIGHTNING).setInvul(true);
showOnScreenMsg(world, NpcStringId.THE_ENUMA_ELISH_SPEAR_ON_THE_THRONE_OF_HELIOS_IS_PREPARED_AND_PLACED_IN_POSITION, ExShowScreenMessage.TOP_CENTER, 10000, true);
startQuestTimer("leopoldSpawn", 10000, null, player);
}
break;
}
case "leopoldSpawn":
{
final Instance world = player.getInstanceWorld();
if (isInInstance(world))
{
world.spawnGroup("LEOPOLD");
showOnScreenMsg(world, NpcStringId.THE_SIEGE_CANNON_LEOPOLD_ON_THE_THRONE_OF_HELIOS_BEGINS_TO_PREPARE_TO_FIRE, ExShowScreenMessage.TOP_CENTER, 10000, true);
}
break;
}
case "LEOPOLD_TASK":
{
final Instance world = player.getInstanceWorld();
if (isInInstance(world))
{
int count = world.getPlayersCount();
if (count > 0)
{
// PlayerInstance randomPlayer = bossZone.getPlayersInside().get(getRandom(count));
PlayerInstance randomPlayer = world.getPlayers().iterator().next();
final Npc leopold = world.getNpc(LEOPOLD);
if (leopold != null)
{
leopold.setTarget(randomPlayer);
int rnd = getRandom(100);
if (rnd < 16)
{
leopold.doCast(LEOPOLD_BOMB.getSkill());
}
else if (rnd < 32)
{
leopold.doCast(LEOPOLD_PLASMA_BOMB.getSkill());
}
else if (rnd < 48)
{
leopold.doCast(LEOPOLD_ENERGY_BOMB.getSkill());
}
else if (rnd < 64)
{
leopold.doCast(LEOPOLD_MINI_GUN.getSkill());
}
else if (rnd < 80)
{
leopold.doCast(LEOPOLD_SPRAY_SHOT.getSkill());
}
else
{
leopold.doCast(LEOPOLD_HARPOON.getSkill());
}
}
}
}
break;
}
case "BLUE_SPEAR_TASK":
{
final Instance world = player.getInstanceWorld();
if (isInInstance(world))
{
int count = world.getPlayersCount();
if (count > 0)
{
// PlayerInstance randomPlayer = bossZone.getPlayersInside().get(getRandom(count));
PlayerInstance randomPlayer = world.getPlayers().iterator().next();
final Npc blueLightning = world.getNpc(HELIOS_BLUE_LIGHTNING);
if (blueLightning != null)
{
blueLightning.setTarget(randomPlayer);
blueLightning.doCast(BLUE_LIGHTNING_SPEAR.getSkill());
}
}
showOnScreenMsg(world, NpcStringId.HELIOS_PICKS_UP_THE_BLUE_LIGHTNING_SPEAR_AND_BEGINS_GATHERING_HIS_POWER, ExShowScreenMessage.TOP_CENTER, 10000, true);
}
break;
}
case "RED_SPEAR_TASK":
{
final Instance world = player.getInstanceWorld();
if (isInInstance(world))
{
int count = world.getPlayersCount();
if (count > 0)
{
// PlayerInstance randomPlayer = bossZone.getPlayersInside().get(getRandom(count));
PlayerInstance randomPlayer = world.getPlayers().iterator().next();
final Npc redLightning = world.getNpc(HELIOS_RED_LIGHTNING);
if (redLightning != null)
{
redLightning.setTarget(randomPlayer);
redLightning.doCast(RED_LIGHTNING_SPEAR.getSkill());
}
}
showOnScreenMsg(world, NpcStringId.HELIOS_PICKS_UP_THE_RED_LIGHTNING_SPEAR_AND_BEGINS_GATHERING_HIS_POWER, ExShowScreenMessage.TOP_CENTER, 10000, true);
}
break;
}
case "DEBUFF_TASK":
{
final Instance world = player.getInstanceWorld();
if (isInInstance(world))
{
world.getPlayers().forEach(plr ->
{
AUDIENCE_DEBUFF.getSkill().applyEffects(player, player);
});
}
break;
}
}
return super.onAdvEvent(event, npc, player);
}
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
{
final Instance world = attacker.getInstanceWorld();
if (isInInstance(world))
{
final boolean ACTIVATED = world.getParameters().getBoolean("ACTIVATED", false);
final boolean STAGE1_50 = world.getParameters().getBoolean("STAGE1_50", false);
final boolean STAGE2_50 = world.getParameters().getBoolean("STAGE2_50", false);
final boolean HELIOS_80 = world.getParameters().getBoolean("HELIOS_80", false);
final boolean HELIOS_50 = world.getParameters().getBoolean("HELIOS_50", false);
final boolean ANNOUNCE = world.getParameters().getBoolean("ANNOUNCE", false);
if ((npc.getId() == FE_HELIOS1) && !ANNOUNCE)
{
world.getParameters().set("ANNOUNCE", true);
startQuestTimer("DEBUFF_TASK", 20000, npc, attacker);
Broadcast.toAllOnlinePlayers(new ExShowScreenMessage(NpcStringId.THE_ADEN_WARRIORS_BEGIN_BATTLE_WITH_THE_GIANT_EMPEROR_HELIOS, ExShowScreenMessage.TOP_CENTER, 10000, true));
}
if ((npc.getId() == FE_HELIOS1) && !STAGE1_50 && (npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)))
{
world.getParameters().set("ANNOUNCE", true);
world.getParameters().set("STAGE1_50", true);
HELIOS_RAGE1.getSkill().applyEffects(world.getNpc(FE_HELIOS1), world.getNpc(FE_HELIOS1));
}
if ((npc.getId() == FE_HELIOS2) && !ACTIVATED)
{
world.getParameters().set("ACTIVATED", true);
HELIOS_RAGE1.getSkill().applyEffects(world.getNpc(FE_HELIOS2), world.getNpc(FE_HELIOS2));
startQuestTimer("BLUE_SPEAR_TASK", 120000, npc, attacker);
startQuestTimer("RED_SPEAR_TASK", 120000, npc, attacker);
startQuestTimer("LEOPOLD_TASK", 120000, npc, attacker);
}
if ((npc.getId() == FE_HELIOS2) && !STAGE2_50 && (npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)))
{
world.getParameters().set("STAGE2_50", true);
HELIOS_RAGE2.getSkill().applyEffects(world.getNpc(FE_HELIOS2), world.getNpc(FE_HELIOS2));
}
if ((npc.getId() == FE_HELIOS3) && !ACTIVATED)
{
world.getParameters().set("ACTIVATED", true);
HELIOS_RAGE3.getSkill().applyEffects(world.getNpc(FE_HELIOS3), world.getNpc(FE_HELIOS3));
startQuestTimer("LEOPOLD_TASK", 120000, npc, attacker);
}
if ((npc.getId() == FE_HELIOS3) && !HELIOS_80 && (npc.getCurrentHp() <= (npc.getMaxHp() * 0.8)))
{
world.getParameters().set("HELIOS_80", true);
world.spawnGroup("LEOPOLD_ORIGIN");
world.spawnGroup("ENUMA_ELISH_ORIGIN");
showOnScreenMsg(world, NpcStringId.THE_KAMAEL_ORIGINS_ABOVE_THE_THRONE_OF_HELIOS_BEGIN_TO_SOAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
}
else if ((npc.getId() == FE_HELIOS3) && !HELIOS_50 && (npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)))
{
final Npc helios3 = world.getNpc(FE_HELIOS3);
world.getParameters().set("HELIOS_50", true);
HELIOS_RAGE4.getSkill().applyEffects(helios3, helios3);
showOnScreenMsg(world, NpcStringId.HELIOS_USES_THE_PRANARACH_SHIELD_OF_LIGHT_TO_MINIMIZE_DAMAGE, ExShowScreenMessage.TOP_CENTER, 10000, true);
helios3.abortCast();
helios3.doCast(PRANARACH.getSkill());
}
}
return super.onAttack(npc, attacker, damage, isSummon);
}
@Override
public String onKill(Npc npc, PlayerInstance player, boolean isSummon)
{
final Instance world = player.getInstanceWorld();
if (isInInstance(world))
{
switch (npc.getId())
{
case FE_HELIOS1:
{
world.getNpc(FE_HELIOS1).deleteMe();
playMovie(world.getPlayers(), Movie.SC_HELIOS_TRANS_A);
startQuestTimer("stage2", 15000, null, player);
break;
}
case FE_HELIOS2:
{
world.getNpc(FE_HELIOS2).deleteMe();
if (world.getNpc(LEOPOLD) != null)
{
world.getNpc(LEOPOLD).deleteMe();
}
if (world.getNpc(HELIOS_RED_LIGHTNING) != null)
{
world.getNpc(HELIOS_RED_LIGHTNING).deleteMe();
}
if (world.getNpc(HELIOS_BLUE_LIGHTNING) != null)
{
world.getNpc(HELIOS_BLUE_LIGHTNING).deleteMe();
}
playMovie(world.getPlayers(), Movie.SC_HELIOS_TRANS_B);
startQuestTimer("stage3", 15000, null, player);
break;
}
case FE_HELIOS3:
{
showOnScreenMsg(world, NpcStringId.HELIOS_DEFEATED_TAKES_FLIGHT_DEEP_IN_TO_THE_SUPERION_FORT_HIS_THRONE_IS_RENDERED_INACTIVE, ExShowScreenMessage.TOP_CENTER, 10000, true);
world.getAliveNpcs().forEach(mob ->
{
mob.deleteMe();
});
if (getQuestTimer("BLUE_SPEAR_TASK", npc, player) != null)
{
cancelQuestTimer("BLUE_SPEAR_TASK", npc, player);
}
if (getQuestTimer("RED_SPEAR_TASK", npc, player) != null)
{
cancelQuestTimer("RED_SPEAR_TASK", npc, player);
}
if (getQuestTimer("LEOPOLD_TASK", npc, player) != null)
{
cancelQuestTimer("LEOPOLD_TASK", npc, player);
}
if (getQuestTimer("DEBUFF_TASK", npc, player) != null)
{
cancelQuestTimer("DEBUFF_TASK", npc, player);
}
world.finishInstance(2);
break;
}
}
}
return super.onKill(npc, player, isSummon);
}
public static void main(String[] args)
{
new FallenEmperorsThrone();
}
}

View File

@@ -0,0 +1,4 @@
<html><body>Kekropus:<br>
That many people can't be moved.<br>
(A maximum of 7 people can participate.)
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Kekropus:<br>
You can enter only by forming an association.
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Kekropus:<br>
You are too weak. I won't let you enter.<br>
(Only players between levels 103-130 may participate.)
</body></html>

View File

@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Fallen Emperor's Throne -->
<instance id="283" maxWorlds="100" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
<time duration="60" empty="1" />
<locations>
<enter type="FIXED">
<location x="90137" y="160220" z="3488" heading="64545" /> <!-- enter location -->
</enter>
<exit type="ORIGIN" />
</locations>
<conditions>
<condition type="Party" showMessageAndHtml="true">
<param name="html" value="condNoGroup.html" />
</condition>
<condition type="GroupMin">
<param name="limit" value="5" />
</condition>
<condition type="GroupMax">
<param name="html" value="condBigGroup.html" />
<param name="limit" value="7" />
</condition>
<condition type="Level" showMessageAndHtml="true">
<param name="html" value="condNoLevel.html" />
<param name="min" value="103" />
<param name="max" value="130" />
</condition>
<condition type="Distance" />
<condition type="Reenter" />
</conditions>
<reenter apply="ON_FINISH">
<reset hour="6" minute="30" />
</reenter>
<spawnlist>
<group name="FE_HELIOS1" spawnByDefault="false">
<npc id="26333" x="92771" y="161909" z="3494" heading="38329" /> <!-- FE Helios 1 -->
</group>
<group name="FE_HELIOS2" spawnByDefault="false">
<npc id="26334" x="92771" y="161909" z="3494" heading="38329" /> <!-- FE Helios 2 -->
</group>
<group name="FE_HELIOS3" spawnByDefault="false">
<npc id="26335" x="92771" y="161909" z="3494" heading="38329" /> <!-- FE Helios 3 -->
</group>
<group name="MINIONS" spawnByDefault="false">
<!-- left -->
<npc id="26341" x="93008" y="160744" z="3487" heading="0" /> <!-- Royal Templar Colonel -->
<npc id="26342" x="93008" y="160744" z="3487" heading="0" /> <!-- Royal Sharpshooter -->
<npc id="26343" x="93008" y="160744" z="3487" heading="0" /> <!-- Royal Archmage -->
<npc id="26344" x="93008" y="160744" z="3487" heading="0" /> <!-- Royal Gatekeeper -->
<!-- right -->
<npc id="26341" x="91748" y="162548" z="3487" heading="0" /> <!-- Royal Templar Colonel -->
<npc id="26342" x="91748" y="162548" z="3487" heading="0" /> <!-- Royal Sharpshooter -->
<npc id="26343" x="91748" y="162548" z="3487" heading="0" /> <!-- Royal Archmage -->
<npc id="26344" x="91748" y="162548" z="3487" heading="0" /> <!-- Royal Gatekeeper -->
</group>
<group name="BLUE_LIGHTNING" spawnByDefault="false">
<npc id="26338" x="93208" y="161269" z="3489" heading="0" /> <!-- Helios Blue Lightning -->
</group>
<group name="RED_LIGHTNING" spawnByDefault="false">
<npc id="26337" x="92348" y="162558" z="3489" heading="0" /> <!-- Helios Red Lightning -->
</group>
<group name="LEOPOLD" spawnByDefault="false">
<npc id="26336" x="93531" y="162415" z="3487" heading="0" /> <!-- Leopold -->
</group>
<group name="LEOPOLD_ORIGIN" spawnByDefault="false">
<npc id="26339" x="92601" y="162196" z="3464" heading="0" /> <!-- Leopold Origin -->
</group>
<group name="ENUMA_ELISH_ORIGIN" spawnByDefault="false">
<npc id="26340" x="92957" y="161640" z="3485" heading="0" /> <!-- Enuma ELish Origin -->
</group>
</spawnlist>
</instance>

View File

@@ -4,6 +4,7 @@ I am the only one who lived the same age as the Giants, was made by the Giants,
Until now, I was watching the situation on the continent. What would one as old as I do on the front lines? However, I could not stand by and watch while the resurrected Giants destroy us and create a continent for themselves. Hence I have taken action.<br>
<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="TELEPORT" action="bypass -h Quest FallenEmperorsThrone enterInstance"><font color="LEVEL">Challenge Fallen Emperor's 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 npc_%objectId%_Quest">Quest</Button>
</body></html>

View File

@@ -0,0 +1,391 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package instances.FallenEmperorsThrone;
import org.l2jmobius.gameserver.enums.Movie;
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.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import org.l2jmobius.gameserver.util.Broadcast;
import instances.AbstractInstance;
/**
* @author CostyKiller
* @URL: https://l2wiki.com/Fallen_Emperors_Throne
*/
public class FallenEmperorsThrone extends AbstractInstance
{
// NPC
private static final int KEKROPUS = 34222;
// Raid
private static final int FE_HELIOS1 = 26333;
private static final int FE_HELIOS2 = 26334;
private static final int FE_HELIOS3 = 26335;
// Minions
private static final int LEOPOLD = 26336;
private static final int HELIOS_RED_LIGHTNING = 26337;
private static final int HELIOS_BLUE_LIGHTNING = 26338;
// Skills
private static final SkillHolder AUDIENCE_DEBUFF = new SkillHolder(16613, 1);
private static final SkillHolder RED_LIGHTNING_SPEAR = new SkillHolder(16617, 1);
private static final SkillHolder BLUE_LIGHTNING_SPEAR = new SkillHolder(16618, 1);
private static final SkillHolder PRANARACH = new SkillHolder(16624, 1);
private static final SkillHolder HELIOS_RAGE1 = new SkillHolder(16625, 1);
private static final SkillHolder HELIOS_RAGE2 = new SkillHolder(16625, 2);
private static final SkillHolder HELIOS_RAGE3 = new SkillHolder(16625, 3);
private static final SkillHolder HELIOS_RAGE4 = new SkillHolder(16625, 4);
private static final SkillHolder LEOPOLD_BOMB = new SkillHolder(16629, 1);
private static final SkillHolder LEOPOLD_PLASMA_BOMB = new SkillHolder(16630, 1);
private static final SkillHolder LEOPOLD_ENERGY_BOMB = new SkillHolder(16631, 1);
private static final SkillHolder LEOPOLD_MINI_GUN = new SkillHolder(16632, 1);
private static final SkillHolder LEOPOLD_SPRAY_SHOT = new SkillHolder(16633, 1);
private static final SkillHolder LEOPOLD_HARPOON = new SkillHolder(16634, 1);
// Misc
private static final int TEMPLATE_ID = 283;
public FallenEmperorsThrone()
{
super(TEMPLATE_ID);
addInstanceCreatedId(TEMPLATE_ID);
addStartNpc(KEKROPUS);
addTalkId(KEKROPUS);
addAttackId(FE_HELIOS1, FE_HELIOS2, FE_HELIOS3);
addKillId(FE_HELIOS1, FE_HELIOS2, FE_HELIOS3);
}
@Override
public void onInstanceCreated(Instance world, PlayerInstance player)
{
world.setStatus(0);
world.getParameters().set("ACTIVATED", false);
world.getParameters().set("STAGE1_50", false);
world.getParameters().set("STAGE2_50", false);
world.getParameters().set("HELIOS_80", false);
world.getParameters().set("HELIOS_50", false);
world.getParameters().set("ANNOUNCE", false);
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
switch (event)
{
case "enterInstance":
{
enterInstance(player, npc, TEMPLATE_ID);
startQuestTimer("beggining", 10000, npc, player);
break;
}
case "beggining":
{
final Instance world = player.getInstanceWorld();
if (isInInstance(world))
{
world.spawnGroup("FE_HELIOS1");
world.spawnGroup("MINIONS");
}
break;
}
case "stage2":
{
final Instance world = player.getInstanceWorld();
if (isInInstance(world))
{
world.spawnGroup("FE_HELIOS2");
world.spawnGroup("MINIONS");
showOnScreenMsg(world, NpcStringId.HELIOS_APPEARANCE_CHANGES_AND_HE_BEGINS_TO_GROW_STRONGER, ExShowScreenMessage.TOP_CENTER, 10000, true);
startQuestTimer("spheresSpawn", 10000, null, player);
}
break;
}
case "stage3":
{
final Instance world = player.getInstanceWorld();
if (isInInstance(world))
{
world.getParameters().set("ACTIVATED", false);
world.spawnGroup("FE_HELIOS3");
showOnScreenMsg(world, NpcStringId.HELIOS_APPEARANCE_CHANGES_AND_HE_BEGINS_TO_GROW_STRONGER, ExShowScreenMessage.TOP_CENTER, 10000, true);
startQuestTimer("leopoldSpawn", 10000, null, player);
}
break;
}
case "spheresSpawn":
{
final Instance world = player.getInstanceWorld();
if (isInInstance(world))
{
world.spawnGroup("BLUE_LIGHTNING");
world.spawnGroup("RED_LIGHTNING");
world.getNpc(HELIOS_BLUE_LIGHTNING).setInvul(true);
world.getNpc(HELIOS_RED_LIGHTNING).setInvul(true);
showOnScreenMsg(world, NpcStringId.THE_ENUMA_ELISH_SPEAR_ON_THE_THRONE_OF_HELIOS_IS_PREPARED_AND_PLACED_IN_POSITION, ExShowScreenMessage.TOP_CENTER, 10000, true);
startQuestTimer("leopoldSpawn", 10000, null, player);
}
break;
}
case "leopoldSpawn":
{
final Instance world = player.getInstanceWorld();
if (isInInstance(world))
{
world.spawnGroup("LEOPOLD");
showOnScreenMsg(world, NpcStringId.THE_SIEGE_CANNON_LEOPOLD_ON_THE_THRONE_OF_HELIOS_BEGINS_TO_PREPARE_TO_FIRE, ExShowScreenMessage.TOP_CENTER, 10000, true);
}
break;
}
case "LEOPOLD_TASK":
{
final Instance world = player.getInstanceWorld();
if (isInInstance(world))
{
int count = world.getPlayersCount();
if (count > 0)
{
// PlayerInstance randomPlayer = bossZone.getPlayersInside().get(getRandom(count));
PlayerInstance randomPlayer = world.getPlayers().iterator().next();
final Npc leopold = world.getNpc(LEOPOLD);
if (leopold != null)
{
leopold.setTarget(randomPlayer);
int rnd = getRandom(100);
if (rnd < 16)
{
leopold.doCast(LEOPOLD_BOMB.getSkill());
}
else if (rnd < 32)
{
leopold.doCast(LEOPOLD_PLASMA_BOMB.getSkill());
}
else if (rnd < 48)
{
leopold.doCast(LEOPOLD_ENERGY_BOMB.getSkill());
}
else if (rnd < 64)
{
leopold.doCast(LEOPOLD_MINI_GUN.getSkill());
}
else if (rnd < 80)
{
leopold.doCast(LEOPOLD_SPRAY_SHOT.getSkill());
}
else
{
leopold.doCast(LEOPOLD_HARPOON.getSkill());
}
}
}
}
break;
}
case "BLUE_SPEAR_TASK":
{
final Instance world = player.getInstanceWorld();
if (isInInstance(world))
{
int count = world.getPlayersCount();
if (count > 0)
{
// PlayerInstance randomPlayer = bossZone.getPlayersInside().get(getRandom(count));
PlayerInstance randomPlayer = world.getPlayers().iterator().next();
final Npc blueLightning = world.getNpc(HELIOS_BLUE_LIGHTNING);
if (blueLightning != null)
{
blueLightning.setTarget(randomPlayer);
blueLightning.doCast(BLUE_LIGHTNING_SPEAR.getSkill());
}
}
showOnScreenMsg(world, NpcStringId.HELIOS_PICKS_UP_THE_BLUE_LIGHTNING_SPEAR_AND_BEGINS_GATHERING_HIS_POWER, ExShowScreenMessage.TOP_CENTER, 10000, true);
}
break;
}
case "RED_SPEAR_TASK":
{
final Instance world = player.getInstanceWorld();
if (isInInstance(world))
{
int count = world.getPlayersCount();
if (count > 0)
{
// PlayerInstance randomPlayer = bossZone.getPlayersInside().get(getRandom(count));
PlayerInstance randomPlayer = world.getPlayers().iterator().next();
final Npc redLightning = world.getNpc(HELIOS_RED_LIGHTNING);
if (redLightning != null)
{
redLightning.setTarget(randomPlayer);
redLightning.doCast(RED_LIGHTNING_SPEAR.getSkill());
}
}
showOnScreenMsg(world, NpcStringId.HELIOS_PICKS_UP_THE_RED_LIGHTNING_SPEAR_AND_BEGINS_GATHERING_HIS_POWER, ExShowScreenMessage.TOP_CENTER, 10000, true);
}
break;
}
case "DEBUFF_TASK":
{
final Instance world = player.getInstanceWorld();
if (isInInstance(world))
{
world.getPlayers().forEach(plr ->
{
AUDIENCE_DEBUFF.getSkill().applyEffects(player, player);
});
}
break;
}
}
return super.onAdvEvent(event, npc, player);
}
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
{
final Instance world = attacker.getInstanceWorld();
if (isInInstance(world))
{
final boolean ACTIVATED = world.getParameters().getBoolean("ACTIVATED", false);
final boolean STAGE1_50 = world.getParameters().getBoolean("STAGE1_50", false);
final boolean STAGE2_50 = world.getParameters().getBoolean("STAGE2_50", false);
final boolean HELIOS_80 = world.getParameters().getBoolean("HELIOS_80", false);
final boolean HELIOS_50 = world.getParameters().getBoolean("HELIOS_50", false);
final boolean ANNOUNCE = world.getParameters().getBoolean("ANNOUNCE", false);
if ((npc.getId() == FE_HELIOS1) && !ANNOUNCE)
{
world.getParameters().set("ANNOUNCE", true);
startQuestTimer("DEBUFF_TASK", 20000, npc, attacker);
Broadcast.toAllOnlinePlayers(new ExShowScreenMessage(NpcStringId.THE_ADEN_WARRIORS_BEGIN_BATTLE_WITH_THE_GIANT_EMPEROR_HELIOS, ExShowScreenMessage.TOP_CENTER, 10000, true));
}
if ((npc.getId() == FE_HELIOS1) && !STAGE1_50 && (npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)))
{
world.getParameters().set("ANNOUNCE", true);
world.getParameters().set("STAGE1_50", true);
HELIOS_RAGE1.getSkill().applyEffects(world.getNpc(FE_HELIOS1), world.getNpc(FE_HELIOS1));
}
if ((npc.getId() == FE_HELIOS2) && !ACTIVATED)
{
world.getParameters().set("ACTIVATED", true);
HELIOS_RAGE1.getSkill().applyEffects(world.getNpc(FE_HELIOS2), world.getNpc(FE_HELIOS2));
startQuestTimer("BLUE_SPEAR_TASK", 120000, npc, attacker);
startQuestTimer("RED_SPEAR_TASK", 120000, npc, attacker);
startQuestTimer("LEOPOLD_TASK", 120000, npc, attacker);
}
if ((npc.getId() == FE_HELIOS2) && !STAGE2_50 && (npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)))
{
world.getParameters().set("STAGE2_50", true);
HELIOS_RAGE2.getSkill().applyEffects(world.getNpc(FE_HELIOS2), world.getNpc(FE_HELIOS2));
}
if ((npc.getId() == FE_HELIOS3) && !ACTIVATED)
{
world.getParameters().set("ACTIVATED", true);
HELIOS_RAGE3.getSkill().applyEffects(world.getNpc(FE_HELIOS3), world.getNpc(FE_HELIOS3));
startQuestTimer("LEOPOLD_TASK", 120000, npc, attacker);
}
if ((npc.getId() == FE_HELIOS3) && !HELIOS_80 && (npc.getCurrentHp() <= (npc.getMaxHp() * 0.8)))
{
world.getParameters().set("HELIOS_80", true);
world.spawnGroup("LEOPOLD_ORIGIN");
world.spawnGroup("ENUMA_ELISH_ORIGIN");
showOnScreenMsg(world, NpcStringId.THE_KAMAEL_ORIGINS_ABOVE_THE_THRONE_OF_HELIOS_BEGIN_TO_SOAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
}
else if ((npc.getId() == FE_HELIOS3) && !HELIOS_50 && (npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)))
{
final Npc helios3 = world.getNpc(FE_HELIOS3);
world.getParameters().set("HELIOS_50", true);
HELIOS_RAGE4.getSkill().applyEffects(helios3, helios3);
showOnScreenMsg(world, NpcStringId.HELIOS_USES_THE_PRANARACH_SHIELD_OF_LIGHT_TO_MINIMIZE_DAMAGE, ExShowScreenMessage.TOP_CENTER, 10000, true);
helios3.abortCast();
helios3.doCast(PRANARACH.getSkill());
}
}
return super.onAttack(npc, attacker, damage, isSummon);
}
@Override
public String onKill(Npc npc, PlayerInstance player, boolean isSummon)
{
final Instance world = player.getInstanceWorld();
if (isInInstance(world))
{
switch (npc.getId())
{
case FE_HELIOS1:
{
world.getNpc(FE_HELIOS1).deleteMe();
playMovie(world.getPlayers(), Movie.SC_HELIOS_TRANS_A);
startQuestTimer("stage2", 15000, null, player);
break;
}
case FE_HELIOS2:
{
world.getNpc(FE_HELIOS2).deleteMe();
if (world.getNpc(LEOPOLD) != null)
{
world.getNpc(LEOPOLD).deleteMe();
}
if (world.getNpc(HELIOS_RED_LIGHTNING) != null)
{
world.getNpc(HELIOS_RED_LIGHTNING).deleteMe();
}
if (world.getNpc(HELIOS_BLUE_LIGHTNING) != null)
{
world.getNpc(HELIOS_BLUE_LIGHTNING).deleteMe();
}
playMovie(world.getPlayers(), Movie.SC_HELIOS_TRANS_B);
startQuestTimer("stage3", 15000, null, player);
break;
}
case FE_HELIOS3:
{
showOnScreenMsg(world, NpcStringId.HELIOS_DEFEATED_TAKES_FLIGHT_DEEP_IN_TO_THE_SUPERION_FORT_HIS_THRONE_IS_RENDERED_INACTIVE, ExShowScreenMessage.TOP_CENTER, 10000, true);
world.getAliveNpcs().forEach(mob ->
{
mob.deleteMe();
});
if (getQuestTimer("BLUE_SPEAR_TASK", npc, player) != null)
{
cancelQuestTimer("BLUE_SPEAR_TASK", npc, player);
}
if (getQuestTimer("RED_SPEAR_TASK", npc, player) != null)
{
cancelQuestTimer("RED_SPEAR_TASK", npc, player);
}
if (getQuestTimer("LEOPOLD_TASK", npc, player) != null)
{
cancelQuestTimer("LEOPOLD_TASK", npc, player);
}
if (getQuestTimer("DEBUFF_TASK", npc, player) != null)
{
cancelQuestTimer("DEBUFF_TASK", npc, player);
}
world.finishInstance(2);
break;
}
}
}
return super.onKill(npc, player, isSummon);
}
public static void main(String[] args)
{
new FallenEmperorsThrone();
}
}

View File

@@ -0,0 +1,4 @@
<html><body>Kekropus:<br>
That many people can't be moved.<br>
(A maximum of 7 people can participate.)
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Kekropus:<br>
You can enter only by forming an association.
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Kekropus:<br>
You are too weak. I won't let you enter.<br>
(Only players between levels 103-130 may participate.)
</body></html>