Addition of Procella and Nebula instances.
Contributed by robikbobik.
This commit is contained in:
6
L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/34046-1.htm
vendored
Normal file
6
L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/34046-1.htm
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
<!-- Translated from Russian -->
|
||||
<html><body>Iris:<br>
|
||||
I went to study one place where the energy of the water was very strong. At that moment, when the radiation became incredibly powerful, I saw a beautiful maiden, over whose head I took off a huge silhouette from a water. It was the Queen Nebula. Somehow he managed to divide himself and gain two bodies.<br>
|
||||
<font color="LEVEL">(You need a command channel of 18 or more characters.)</font>.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ResidenceOfQueenNebula ENTER">Move to the top level of Garden of Eva</Button>
|
||||
</body></html>
|
@@ -1,6 +1,7 @@
|
||||
<html><body>Iris:<br>
|
||||
This is the Garden of Eva. As a member of the Bronze Guild, I advertised for equipment to explore the area for relics, but I don't know where it's all disappeared to...<br>
|
||||
And in a place I changed upon, <font color="LEVEL">I saw the Water Spirit Queen</font> who used to dwell here. I saw her from afar, but I still remember every detail. If you're curious, I'll tell you more.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 0">Move to Upper Terrace of Garden of Eva</Button>
|
||||
<!--<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 0">I want to know more about the Water Spirit Queen</Button>-->
|
||||
This is the Garden of Eva. The strongest monsters inhabit the top levels. bronze Key Guild appointed me to head a squad and to explore local ruins. But I have already lost all my squad somehow...<br>
|
||||
But I managed to find out a couple of things. Though. If you came here with your companions, I would recommend to go the room in the end of the tunnel. Or you can go straight to the top level. If you are here for the first time I will be happy to show your around.<br>
|
||||
By the way, I have seen the <font color="LEVEL">Water Spirit Queen</font> here not so long ago. She was passing by not far from here and I hgazed in admiration at here movements. If you are interested I can tell you more.<br><br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 0">Teleport to the top level of Garden of Eva</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 1">Learn more about the Water Spirit Queen</Button>
|
||||
</body></html>
|
@@ -3,6 +3,6 @@
|
||||
I went to study one place where the energy of the fire was very strong. At that moment, when the radiation became incredibly powerful, I saw a beautiful maiden, over whose head I took off a huge silhouette woven from a burning flame. It was the King of Spirits <font color="LEVEL">Fire Ignis</font>. Somehow he managed to divide himself and gain two bodies.<br>
|
||||
And you know, it's very strange, but in the same place I saw <font color="LEVEL">Ice Queen Freya</font>. What could Freya do where the energy of fire pulsates? King Ignis has not yet declared himself openly, but is hiding and accumulating strength. Perhaps, when he leaves the shelter, Aden will plunge into chaos. Therefore, it is necessary in whatever would prevent Ignis.<br>
|
||||
But first you need to get <font color="LEVEL">a force that will help withstand the energy of fire</font>. Collect loyal supporters and come back !!! Alone you can not cope.<br>
|
||||
<font color="LEVEL">(You need a command channel of 27 or more characters.)</font>.<br1>
|
||||
<font color="LEVEL">(You need a command channel of 18 or more characters.)</font>.<br1>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ResidenceOfKingIgnis ENTER">Move to the lair of King Ignis</Button>
|
||||
</body></html>
|
@@ -3,6 +3,6 @@
|
||||
Haha, I knew you were coming to find out more. Wind Kings are called <font color="LEVEL">Prochela</font>. One hero, who was lucky to return alive after meeting him, said that Procella commands the deadly <font color="LEVEL">whirlwinds</font>.<br>
|
||||
Moreover, in battle, the King of Spirits creates <font color="LEVEL">multiple doubles</font>. Killing one makes the rest even meaner and more dangerous.<br>
|
||||
At the mere thought of this, I have a cold skin. Maybe you want to challenge him? I know where the King of Spirits lives, and I can send you to him. If you are ready, then gather supporters and get ready for battle. I wonder what happens. But remember: Prochella is very strong and dangerous.<br1>
|
||||
(<font color="LEVEL">You need a command channel of 27 or more characters.</font>)<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 2">Move to the Wind King's Lair</Button>
|
||||
(<font color="LEVEL">You need a command channel of 18 or more characters.</font>)<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ResidenceOfKingProcella ENTER">Move to the Wind King's Lair</Button>
|
||||
</body></html>
|
@@ -3,6 +3,6 @@
|
||||
Oh, I got you interested, right? As a child I read an old book about the King of Spirits <font color="LEVEL">Petrama</font>. True, I always thought of Petram as a mere fiction. And then the ships invaded the spirits, and I had to do research to find out the reason. Imagine my surprise when I realized that Peter really exists!<br>
|
||||
He's just huge! His body is like a rock, and his fists are like huge boulders. What else to tell? Hmm ..... Oh, yes! In that old book it was written that <font color="LEVEL">the stones covering the body of the King of the Earth Spirits make it virtually invulnerable</font>.<br>
|
||||
He is really incredibly strong and dangerous. Therefore, to meet with Peter must be prepared. You have to develop <font color="LEVEL">a force that will help resist earth energy</font>. When you are ready, come along with colleagues, and I will tell you where to find this giant.<br>
|
||||
<font color="LEVEL">(You need a command channel of 27 or more characters.)</font><br>
|
||||
<font color="LEVEL">(You need a command channel of 18 or more characters.)</font><br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ResidenceOfKingPetram ENTER">Move to Petram</Button>
|
||||
</body></html>
|
31
L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/instances/ResidenceOfKingProcella.xml
vendored
Normal file
31
L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/instances/ResidenceOfKingProcella.xml
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<instance id="197" maxWorlds="80" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
|
||||
<time duration="120" empty="0" />
|
||||
<removeBuffs type="ALL" />
|
||||
<locations>
|
||||
<enter type="FIXED">
|
||||
<location x="212884" y="178847" z="-15485" />
|
||||
</enter>
|
||||
<exit type="ORIGIN" />
|
||||
</locations>
|
||||
<conditions>
|
||||
<condition type="Party" />
|
||||
<condition type="CommandChannel" />
|
||||
<condition type="CommandChannelLeader" />
|
||||
<condition type="GroupMin">
|
||||
<param name="limit" value="27" />
|
||||
</condition>
|
||||
<condition type="GroupMax">
|
||||
<param name="limit" value="100" />
|
||||
</condition>
|
||||
<condition type="Level">
|
||||
<param name="min" value="76" />
|
||||
<param name="max" value="82" />
|
||||
</condition>
|
||||
<condition type="Distance" />
|
||||
<condition type="Reenter" />
|
||||
</conditions>
|
||||
<reenter apply="ON_ENTER">
|
||||
<reset day="WEDNESDAY" hour="6" minute="30" />
|
||||
</reenter>
|
||||
</instance>
|
36
L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/instances/ResidenceOfQueenNebula.xml
vendored
Normal file
36
L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/instances/ResidenceOfQueenNebula.xml
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<instance id="196" maxWorlds="80" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
|
||||
<time duration="120" empty="0" />
|
||||
<removeBuffs type="ALL" />
|
||||
<locations>
|
||||
<enter type="FIXED">
|
||||
<location x="222149" y="168087" z="-15485" />
|
||||
</enter>
|
||||
<exit type="ORIGIN" />
|
||||
</locations>
|
||||
<conditions>
|
||||
<condition type="Party" />
|
||||
<condition type="CommandChannel" />
|
||||
<condition type="CommandChannelLeader" />
|
||||
<condition type="GroupMin">
|
||||
<param name="limit" value="27" />
|
||||
</condition>
|
||||
<condition type="GroupMax">
|
||||
<param name="limit" value="100" />
|
||||
</condition>
|
||||
<condition type="Level">
|
||||
<param name="min" value="76" />
|
||||
<param name="max" value="82" />
|
||||
</condition>
|
||||
<condition type="Distance" />
|
||||
<condition type="Reenter" />
|
||||
</conditions>
|
||||
<reenter apply="ON_ENTER">
|
||||
<reset day="WEDNESDAY" hour="6" minute="30" />
|
||||
</reenter>
|
||||
<spawnlist>
|
||||
<group>
|
||||
<npc id="29106" x="222127" y="169057" z="-15486" heading="48730" /> <!-- Nebula -->
|
||||
</group>
|
||||
</spawnlist>
|
||||
</instance>
|
@@ -0,0 +1,163 @@
|
||||
/*
|
||||
* 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.ResidenceOfKingProcella;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.ChatType;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.MonsterInstance;
|
||||
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.skills.SkillCaster;
|
||||
|
||||
import instances.AbstractInstance;
|
||||
|
||||
/**
|
||||
* @author RobikBobik
|
||||
* @NOTE: Retail like working
|
||||
* @TODO: Rewrite code to modern style.
|
||||
*/
|
||||
public class ResidenceOfKingProcella extends AbstractInstance
|
||||
{
|
||||
// NPCs
|
||||
private static final int WIRI = 34048;
|
||||
private static final int PROCELLA = 29107;
|
||||
private static final int PROCELLA_GUARDIAN_1 = 29112;
|
||||
private static final int PROCELLA_GUARDIAN_2 = 29113;
|
||||
private static final int PROCELLA_GUARDIAN_3 = 29114;
|
||||
private static final int PROCELLA_STORM = 29115;
|
||||
// Skills
|
||||
private static final SkillHolder HURRICANE_SUMMON = new SkillHolder(50042, 1); // When spawn Minion
|
||||
private static final SkillHolder HURRICANE_BOLT = new SkillHolder(50043, 1); // When player in Radius + para
|
||||
// Misc
|
||||
private static final int TEMPLATE_ID = 197;
|
||||
private static int STORM_MAX_COUNT = 16; // TODO: Max is limit ?
|
||||
private int _procellaStormCount;
|
||||
private RaidBossInstance _procella;
|
||||
private MonsterInstance _minion1;
|
||||
private MonsterInstance _minion2;
|
||||
private MonsterInstance _minion3;
|
||||
|
||||
public ResidenceOfKingProcella()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(WIRI);
|
||||
addKillId(PROCELLA, PROCELLA_GUARDIAN_1, PROCELLA_GUARDIAN_2, PROCELLA_GUARDIAN_3);
|
||||
addInstanceEnterId(TEMPLATE_ID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "ENTER":
|
||||
{
|
||||
enterInstance(player, npc, TEMPLATE_ID);
|
||||
_procella = (RaidBossInstance) addSpawn(PROCELLA, 212862, 179828, -15489, 49151, false, 0, true, player.getInstanceId());
|
||||
startQuestTimer("SPAWN_MINION", 20000, _procella, player);
|
||||
startQuestTimer("SPAWN_STORM", 5000, _procella, player);
|
||||
_procellaStormCount = 0;
|
||||
break;
|
||||
}
|
||||
case "SPAWN_MINION":
|
||||
{
|
||||
if (npc.getId() == PROCELLA)
|
||||
{
|
||||
_minion1 = (MonsterInstance) addSpawn(PROCELLA_GUARDIAN_1, 212663, 179421, -15486, 31011, true, 0, true, npc.getInstanceId());
|
||||
_minion2 = (MonsterInstance) addSpawn(PROCELLA_GUARDIAN_2, 213258, 179822, -15486, 12001, true, 0, true, npc.getInstanceId());
|
||||
_minion3 = (MonsterInstance) addSpawn(PROCELLA_GUARDIAN_3, 212558, 179974, -15486, 12311, true, 0, true, npc.getInstanceId());
|
||||
startQuestTimer("HIDE_PROCELLA", 3000, _procella, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "SPAWN_STORM":
|
||||
{
|
||||
if (_procellaStormCount < STORM_MAX_COUNT)
|
||||
{
|
||||
_procella.useMagic(HURRICANE_SUMMON.getSkill());
|
||||
|
||||
final Npc procellaStorm = addSpawn(PROCELLA_STORM, _procella.getX() + getRandom(-500, 500), _procella.getY() + getRandom(-500, 500), _procella.getZ(), 31011, true, 0, true, npc.getInstanceId());
|
||||
procellaStorm.setRandomWalking(true);
|
||||
_procellaStormCount++;
|
||||
startQuestTimer("SPAWN_STORM", 300000, _procella, null);
|
||||
startQuestTimer("CHECK_CHAR_INSIDE_RADIUS_NPC", 1000, procellaStorm, player);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "HIDE_PROCELLA":
|
||||
{
|
||||
if (_procella.isInvisible())
|
||||
{
|
||||
_procella.setInvisible(false);
|
||||
_procella.broadcastSay(ChatType.NPC_SHOUT, "Im invisible");
|
||||
}
|
||||
else
|
||||
{
|
||||
_procella.setInvisible(true);
|
||||
_procella.broadcastSay(ChatType.NPC_SHOUT, "Im visible");
|
||||
startQuestTimer("SPAWN_MINION", 300000, _procella, player);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "CHECK_CHAR_INSIDE_RADIUS_NPC":
|
||||
{
|
||||
if ((player != null) && (player.isInsideRadius3D(npc, 200)))
|
||||
{
|
||||
npc.abortAttack();
|
||||
npc.abortCast();
|
||||
npc.setTarget(player);
|
||||
if (SkillCaster.checkUseConditions(npc, HURRICANE_BOLT.getSkill()))
|
||||
{
|
||||
npc.doCast(HURRICANE_BOLT.getSkill());
|
||||
}
|
||||
startQuestTimer("CHECK_CHAR_INSIDE_RADIUS_NPC", 10000, npc, player);
|
||||
}
|
||||
else
|
||||
{
|
||||
startQuestTimer("CHECK_CHAR_INSIDE_RADIUS_NPC", 10000, npc, player);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, PlayerInstance player, boolean isSummon)
|
||||
{
|
||||
if (npc.getId() == PROCELLA)
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
if (world != null)
|
||||
{
|
||||
world.finishInstance();
|
||||
}
|
||||
}
|
||||
else if ((_minion1.isDead()) && (_minion2.isDead()) && (_minion3.isDead()))
|
||||
{
|
||||
startQuestTimer("HIDE_PROCELLA", 1000, _procella, null);
|
||||
}
|
||||
return super.onKill(npc, player, isSummon);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new ResidenceOfKingProcella();
|
||||
}
|
||||
}
|
@@ -0,0 +1,168 @@
|
||||
/*
|
||||
* 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.ResidenceOfQueenNebula;
|
||||
|
||||
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.skills.SkillCaster;
|
||||
|
||||
import instances.AbstractInstance;
|
||||
|
||||
/**
|
||||
* @author RobikBobik
|
||||
* @NOTE: Retail like working
|
||||
* @TODO: Rewrite code to modern style.
|
||||
* @TODO: Nebula uses attacks on a surface, summons minions (Water Slime) and casts
|
||||
* @TODO: The less Nebula's HP, the more damage she deals.
|
||||
*/
|
||||
public class ResidenceOfQueenNebula extends AbstractInstance
|
||||
{
|
||||
// NPCs
|
||||
private static final int IRIS = 34046;
|
||||
private static final int NEBULA = 29106;
|
||||
private static final int WATER_SLIME = 29111;
|
||||
// Misc
|
||||
private static final int TEMPLATE_ID = 196;
|
||||
// Skills
|
||||
// Debuffs which reduces Speed and increases the damage received (the effect stacks up to 5 times). When it's stacked to 5 times, the character becomes unable to move or make any actions.
|
||||
private static SkillHolder AQUA_RAGE_1 = new SkillHolder(50036, 1);
|
||||
private static SkillHolder AQUA_RAGE_2 = new SkillHolder(50036, 2);
|
||||
private static SkillHolder AQUA_RAGE_3 = new SkillHolder(50036, 3);
|
||||
private static SkillHolder AQUA_RAGE_4 = new SkillHolder(50036, 4);
|
||||
private static SkillHolder AQUA_RAGE_5 = new SkillHolder(50036, 5);
|
||||
|
||||
public ResidenceOfQueenNebula()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(IRIS);
|
||||
addKillId(NEBULA);
|
||||
addSpawnId(NEBULA);
|
||||
addInstanceLeaveId(TEMPLATE_ID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "ENTER":
|
||||
{
|
||||
enterInstance(player, npc, TEMPLATE_ID);
|
||||
break;
|
||||
}
|
||||
case "SPAWN_WATER_SLIME":
|
||||
{
|
||||
startQuestTimer("CAST_AQUA_RAGE", 5000, npc, player);
|
||||
if (npc.getId() == NEBULA)
|
||||
{
|
||||
for (int i = 0; i < getRandom(4, 6); i++)
|
||||
{
|
||||
addSpawn(npc, WATER_SLIME, npc.getX(), npc.getY(), npc.getZ(), npc.getHeading(), true, -1, true, npc.getInstanceId());
|
||||
startQuestTimer("SPAWN_WATER_SLIME", 300000, npc, null);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "PLAYER_PARA":
|
||||
{
|
||||
player.setIsImmobilized(true);
|
||||
startQuestTimer("PLAYER_UNPARA", 30000, npc, player);
|
||||
break;
|
||||
}
|
||||
case "PLAYER_UNPARA":
|
||||
{
|
||||
player.getEffectList().stopSkillEffects(true, AQUA_RAGE_5.getSkill());
|
||||
player.setIsImmobilized(false);
|
||||
break;
|
||||
}
|
||||
case "CAST_AQUA_RAGE":
|
||||
{
|
||||
startQuestTimer("CAST_AQUA_RAGE", 10000, npc, player);
|
||||
if (!player.isAffectedBySkill(AQUA_RAGE_1))
|
||||
{
|
||||
if (SkillCaster.checkUseConditions(npc, AQUA_RAGE_1.getSkill()))
|
||||
{
|
||||
npc.doCast(AQUA_RAGE_1.getSkill());
|
||||
}
|
||||
}
|
||||
else if (player.isAffectedBySkill(AQUA_RAGE_1))
|
||||
{
|
||||
if (SkillCaster.checkUseConditions(npc, AQUA_RAGE_2.getSkill()))
|
||||
{
|
||||
player.getEffectList().stopSkillEffects(true, AQUA_RAGE_1.getSkill());
|
||||
npc.doCast(AQUA_RAGE_2.getSkill());
|
||||
}
|
||||
}
|
||||
else if (player.isAffectedBySkill(AQUA_RAGE_2))
|
||||
{
|
||||
if (SkillCaster.checkUseConditions(npc, AQUA_RAGE_3.getSkill()))
|
||||
{
|
||||
player.getEffectList().stopSkillEffects(true, AQUA_RAGE_2.getSkill());
|
||||
npc.doCast(AQUA_RAGE_3.getSkill());
|
||||
}
|
||||
}
|
||||
else if (player.isAffectedBySkill(AQUA_RAGE_3))
|
||||
{
|
||||
if (SkillCaster.checkUseConditions(npc, AQUA_RAGE_4.getSkill()))
|
||||
{
|
||||
player.getEffectList().stopSkillEffects(true, AQUA_RAGE_3.getSkill());
|
||||
npc.doCast(AQUA_RAGE_4.getSkill());
|
||||
}
|
||||
}
|
||||
else if (player.isAffectedBySkill(AQUA_RAGE_4))
|
||||
{
|
||||
if (SkillCaster.checkUseConditions(npc, AQUA_RAGE_5.getSkill()))
|
||||
{
|
||||
player.getEffectList().stopSkillEffects(true, AQUA_RAGE_4.getSkill());
|
||||
npc.doCast(AQUA_RAGE_5.getSkill());
|
||||
startQuestTimer("PLAYER_PARA", 1000, npc, player);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpawn(Npc npc)
|
||||
{
|
||||
startQuestTimer("SPAWN_WATER_SLIME", 12000, npc, null);
|
||||
return super.onSpawn(npc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, PlayerInstance player, boolean isSummon)
|
||||
{
|
||||
if (npc.getId() == NEBULA)
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
if (world != null)
|
||||
{
|
||||
world.finishInstance();
|
||||
}
|
||||
}
|
||||
return super.onKill(npc, player, isSummon);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new ResidenceOfQueenNebula();
|
||||
}
|
||||
}
|
@@ -525,7 +525,7 @@
|
||||
<height normal="0.001" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29111" level="80" type="Npc" name="Water Slime">
|
||||
<npc id="29111" level="80" type="Monster" name="Water Slime">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<sex>FEMALE</sex>
|
||||
@@ -544,7 +544,7 @@
|
||||
<height normal="39" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29112" level="80" type="Npc" name="Procella's Guardian">
|
||||
<npc id="29112" level="80" type="Monster" name="Procella's Guardian">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<sex>FEMALE</sex>
|
||||
@@ -563,7 +563,7 @@
|
||||
<height normal="133" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29113" level="80" type="Npc" name="Procella's Guardian">
|
||||
<npc id="29113" level="80" type="Monster" name="Procella's Guardian">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<sex>FEMALE</sex>
|
||||
@@ -582,7 +582,7 @@
|
||||
<height normal="133" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29114" level="80" type="Npc" name="Procella's Guardian">
|
||||
<npc id="29114" level="80" type="Monster" name="Procella's Guardian">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<sex>FEMALE</sex>
|
||||
@@ -601,11 +601,11 @@
|
||||
<height normal="133" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29115" level="80" type="Npc" name="Procella's Storm">
|
||||
<npc id="29115" level="80" type="Monster" name="Procella's Storm">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<stats str="88" int="79" dex="55" wit="20" con="82" men="78">
|
||||
<vitals hp="8446" hpRegen="10.5" mp="18000" mpRegen="3.6" />
|
||||
<speed>
|
||||
<walk ground="50" />
|
||||
|
@@ -373,12 +373,34 @@
|
||||
<skill id="50043" toLevel="1" name="Hurricane Bolt">
|
||||
<!-- Bolt of lightning attacks with 138 Power addedt to M. Atk., paralyses for 5 sec. -->
|
||||
<icon>icon.skill1170</icon>
|
||||
<operateType>A1</operateType>
|
||||
<isDebuff>true</isDebuff>
|
||||
<castRange>600</castRange>
|
||||
<hitTime>2500</hitTime>
|
||||
<coolTime>500</coolTime>
|
||||
<abnormalTime>5</abnormalTime>
|
||||
<activateRate>80</activateRate>
|
||||
<basicProperty>MAGIC</basicProperty>
|
||||
<castRange>900</castRange>
|
||||
<effectPoint>-100</effectPoint>
|
||||
<effectRange>1400</effectRange>
|
||||
<hitTime>2500</hitTime>
|
||||
<isDebuff>true</isDebuff>
|
||||
<isMagic>1</isMagic> <!-- Magic Skill -->
|
||||
<lvlBonusRate>1</lvlBonusRate>
|
||||
<magicLvl>85</magicLvl>
|
||||
<mpConsume>69</mpConsume>
|
||||
<operateType>A2</operateType>
|
||||
<abnormalType>PARALYZE</abnormalType>
|
||||
<magicCriticalRate>-5</magicCriticalRate>
|
||||
<abnormalLvl>1</abnormalLvl>
|
||||
<trait>PARALYZE</trait>
|
||||
<attributeType>DARK</attributeType>
|
||||
<attributeValue>120</attributeValue>
|
||||
<abnormalVisualEffect>PARALYZE</abnormalVisualEffect>
|
||||
<targetType>ENEMY</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<effects>
|
||||
<effect name="BlockActions" />
|
||||
<effect name="MagicalAttack">
|
||||
<power>138</power>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="50044" toLevel="1" name="Hurricane Destruction">
|
||||
<!-- Strong whirlwind attacks with 170 Power added to M. Atk. and knocks down nereby enemies. -->
|
||||
@@ -397,26 +419,39 @@
|
||||
<skill id="50046" toLevel="2" name="Wind Ability - Lv. 1 Atk.">
|
||||
<!-- P. Atk. +20%. -->
|
||||
<icon>icon.skill1062</icon>
|
||||
<operateType>A1</operateType>
|
||||
<hitTime>1000</hitTime>
|
||||
<coolTime>500</coolTime>
|
||||
<effectPoint>100</effectPoint>
|
||||
<operateType>P</operateType>
|
||||
<effects>
|
||||
<effect name="PAtk">
|
||||
<amount>20</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="50047" toLevel="2" name="Wind Ability - Lv. 1 Def.">
|
||||
<!-- P./ M. Def. +50%. -->
|
||||
<icon>icon.skill1062</icon>
|
||||
<operateType>A1</operateType>
|
||||
<hitTime>1000</hitTime>
|
||||
<coolTime>500</coolTime>
|
||||
<effectPoint>100</effectPoint>
|
||||
<operateType>P</operateType>
|
||||
<effects>
|
||||
<effect name="PhysicalDefence">
|
||||
<amount>50</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="MagicalDefence">
|
||||
<amount>50</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="50048" toLevel="2" name="Wind Ability - Lv. 1 Magic">
|
||||
<!-- M. Atk. +20%. -->
|
||||
<icon>icon.skill1062</icon>
|
||||
<operateType>A1</operateType>
|
||||
<hitTime>1000</hitTime>
|
||||
<coolTime>500</coolTime>
|
||||
<effectPoint>100</effectPoint>
|
||||
<operateType>P</operateType>
|
||||
<effects>
|
||||
<effect name="MAtk">
|
||||
<amount>20</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="50049" toLevel="1" name="Fire Breath">
|
||||
<!-- Attacks enemies in front of the boss with 220 Power added to M. Atk. -->
|
||||
|
6
L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/34046-1.htm
vendored
Normal file
6
L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/34046-1.htm
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
<!-- Translated from Russian -->
|
||||
<html><body>Iris:<br>
|
||||
I went to study one place where the energy of the water was very strong. At that moment, when the radiation became incredibly powerful, I saw a beautiful maiden, over whose head I took off a huge silhouette from a water. It was the Queen Nebula. Somehow he managed to divide himself and gain two bodies.<br>
|
||||
<font color="LEVEL">(You need a command channel of 18 or more characters.)</font>.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ResidenceOfQueenNebula ENTER">Move to the top level of Garden of Eva</Button>
|
||||
</body></html>
|
@@ -1,6 +1,7 @@
|
||||
<html><body>Iris:<br>
|
||||
This is the Garden of Eva. As a member of the Bronze Guild, I advertised for equipment to explore the area for relics, but I don't know where it's all disappeared to...<br>
|
||||
And in a place I changed upon, <font color="LEVEL">I saw the Water Spirit Queen</font> who used to dwell here. I saw her from afar, but I still remember every detail. If you're curious, I'll tell you more.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 0">Move to Upper Terrace of Garden of Eva</Button>
|
||||
<!--<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 0">I want to know more about the Water Spirit Queen</Button>-->
|
||||
This is the Garden of Eva. The strongest monsters inhabit the top levels. bronze Key Guild appointed me to head a squad and to explore local ruins. But I have already lost all my squad somehow...<br>
|
||||
But I managed to find out a couple of things. Though. If you came here with your companions, I would recommend to go the room in the end of the tunnel. Or you can go straight to the top level. If you are here for the first time I will be happy to show your around.<br>
|
||||
By the way, I have seen the <font color="LEVEL">Water Spirit Queen</font> here not so long ago. She was passing by not far from here and I hgazed in admiration at here movements. If you are interested I can tell you more.<br><br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 0">Teleport to the top level of Garden of Eva</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 1">Learn more about the Water Spirit Queen</Button>
|
||||
</body></html>
|
@@ -3,6 +3,6 @@
|
||||
I went to study one place where the energy of the fire was very strong. At that moment, when the radiation became incredibly powerful, I saw a beautiful maiden, over whose head I took off a huge silhouette woven from a burning flame. It was the King of Spirits <font color="LEVEL">Fire Ignis</font>. Somehow he managed to divide himself and gain two bodies.<br>
|
||||
And you know, it's very strange, but in the same place I saw <font color="LEVEL">Ice Queen Freya</font>. What could Freya do where the energy of fire pulsates? King Ignis has not yet declared himself openly, but is hiding and accumulating strength. Perhaps, when he leaves the shelter, Aden will plunge into chaos. Therefore, it is necessary in whatever would prevent Ignis.<br>
|
||||
But first you need to get <font color="LEVEL">a force that will help withstand the energy of fire</font>. Collect loyal supporters and come back !!! Alone you can not cope.<br>
|
||||
<font color="LEVEL">(You need a command channel of 27 or more characters.)</font>.<br1>
|
||||
<font color="LEVEL">(You need a command channel of 18 or more characters.)</font>.<br1>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ResidenceOfKingIgnis ENTER">Move to the lair of King Ignis</Button>
|
||||
</body></html>
|
@@ -3,6 +3,6 @@
|
||||
Haha, I knew you were coming to find out more. Wind Kings are called <font color="LEVEL">Prochela</font>. One hero, who was lucky to return alive after meeting him, said that Procella commands the deadly <font color="LEVEL">whirlwinds</font>.<br>
|
||||
Moreover, in battle, the King of Spirits creates <font color="LEVEL">multiple doubles</font>. Killing one makes the rest even meaner and more dangerous.<br>
|
||||
At the mere thought of this, I have a cold skin. Maybe you want to challenge him? I know where the King of Spirits lives, and I can send you to him. If you are ready, then gather supporters and get ready for battle. I wonder what happens. But remember: Prochella is very strong and dangerous.<br1>
|
||||
(<font color="LEVEL">You need a command channel of 27 or more characters.</font>)<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 2">Move to the Wind King's Lair</Button>
|
||||
(<font color="LEVEL">You need a command channel of 18 or more characters.</font>)<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ResidenceOfKingProcella ENTER">Move to the Wind King's Lair</Button>
|
||||
</body></html>
|
@@ -3,6 +3,6 @@
|
||||
Oh, I got you interested, right? As a child I read an old book about the King of Spirits <font color="LEVEL">Petrama</font>. True, I always thought of Petram as a mere fiction. And then the ships invaded the spirits, and I had to do research to find out the reason. Imagine my surprise when I realized that Peter really exists!<br>
|
||||
He's just huge! His body is like a rock, and his fists are like huge boulders. What else to tell? Hmm ..... Oh, yes! In that old book it was written that <font color="LEVEL">the stones covering the body of the King of the Earth Spirits make it virtually invulnerable</font>.<br>
|
||||
He is really incredibly strong and dangerous. Therefore, to meet with Peter must be prepared. You have to develop <font color="LEVEL">a force that will help resist earth energy</font>. When you are ready, come along with colleagues, and I will tell you where to find this giant.<br>
|
||||
<font color="LEVEL">(You need a command channel of 27 or more characters.)</font><br>
|
||||
<font color="LEVEL">(You need a command channel of 18 or more characters.)</font><br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ResidenceOfKingPetram ENTER">Move to Petram</Button>
|
||||
</body></html>
|
31
L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/instances/ResidenceOfKingProcella.xml
vendored
Normal file
31
L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/instances/ResidenceOfKingProcella.xml
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<instance id="197" maxWorlds="80" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
|
||||
<time duration="120" empty="0" />
|
||||
<removeBuffs type="ALL" />
|
||||
<locations>
|
||||
<enter type="FIXED">
|
||||
<location x="212884" y="178847" z="-15485" />
|
||||
</enter>
|
||||
<exit type="ORIGIN" />
|
||||
</locations>
|
||||
<conditions>
|
||||
<condition type="Party" />
|
||||
<condition type="CommandChannel" />
|
||||
<condition type="CommandChannelLeader" />
|
||||
<condition type="GroupMin">
|
||||
<param name="limit" value="27" />
|
||||
</condition>
|
||||
<condition type="GroupMax">
|
||||
<param name="limit" value="100" />
|
||||
</condition>
|
||||
<condition type="Level">
|
||||
<param name="min" value="76" />
|
||||
<param name="max" value="82" />
|
||||
</condition>
|
||||
<condition type="Distance" />
|
||||
<condition type="Reenter" />
|
||||
</conditions>
|
||||
<reenter apply="ON_ENTER">
|
||||
<reset day="WEDNESDAY" hour="6" minute="30" />
|
||||
</reenter>
|
||||
</instance>
|
36
L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/instances/ResidenceOfQueenNebula.xml
vendored
Normal file
36
L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/instances/ResidenceOfQueenNebula.xml
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<instance id="196" maxWorlds="80" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
|
||||
<time duration="120" empty="0" />
|
||||
<removeBuffs type="ALL" />
|
||||
<locations>
|
||||
<enter type="FIXED">
|
||||
<location x="222149" y="168087" z="-15485" />
|
||||
</enter>
|
||||
<exit type="ORIGIN" />
|
||||
</locations>
|
||||
<conditions>
|
||||
<condition type="Party" />
|
||||
<condition type="CommandChannel" />
|
||||
<condition type="CommandChannelLeader" />
|
||||
<condition type="GroupMin">
|
||||
<param name="limit" value="27" />
|
||||
</condition>
|
||||
<condition type="GroupMax">
|
||||
<param name="limit" value="100" />
|
||||
</condition>
|
||||
<condition type="Level">
|
||||
<param name="min" value="76" />
|
||||
<param name="max" value="82" />
|
||||
</condition>
|
||||
<condition type="Distance" />
|
||||
<condition type="Reenter" />
|
||||
</conditions>
|
||||
<reenter apply="ON_ENTER">
|
||||
<reset day="WEDNESDAY" hour="6" minute="30" />
|
||||
</reenter>
|
||||
<spawnlist>
|
||||
<group>
|
||||
<npc id="29106" x="222127" y="169057" z="-15486" heading="48730" /> <!-- Nebula -->
|
||||
</group>
|
||||
</spawnlist>
|
||||
</instance>
|
@@ -0,0 +1,163 @@
|
||||
/*
|
||||
* 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.ResidenceOfKingProcella;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.ChatType;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.MonsterInstance;
|
||||
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.skills.SkillCaster;
|
||||
|
||||
import instances.AbstractInstance;
|
||||
|
||||
/**
|
||||
* @author RobikBobik
|
||||
* @NOTE: Retail like working
|
||||
* @TODO: Rewrite code to modern style.
|
||||
*/
|
||||
public class ResidenceOfKingProcella extends AbstractInstance
|
||||
{
|
||||
// NPCs
|
||||
private static final int WIRI = 34048;
|
||||
private static final int PROCELLA = 29107;
|
||||
private static final int PROCELLA_GUARDIAN_1 = 29112;
|
||||
private static final int PROCELLA_GUARDIAN_2 = 29113;
|
||||
private static final int PROCELLA_GUARDIAN_3 = 29114;
|
||||
private static final int PROCELLA_STORM = 29115;
|
||||
// Skills
|
||||
private static final SkillHolder HURRICANE_SUMMON = new SkillHolder(50042, 1); // When spawn Minion
|
||||
private static final SkillHolder HURRICANE_BOLT = new SkillHolder(50043, 1); // When player in Radius + para
|
||||
// Misc
|
||||
private static final int TEMPLATE_ID = 197;
|
||||
private static int STORM_MAX_COUNT = 16; // TODO: Max is limit ?
|
||||
private int _procellaStormCount;
|
||||
private RaidBossInstance _procella;
|
||||
private MonsterInstance _minion1;
|
||||
private MonsterInstance _minion2;
|
||||
private MonsterInstance _minion3;
|
||||
|
||||
public ResidenceOfKingProcella()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(WIRI);
|
||||
addKillId(PROCELLA, PROCELLA_GUARDIAN_1, PROCELLA_GUARDIAN_2, PROCELLA_GUARDIAN_3);
|
||||
addInstanceEnterId(TEMPLATE_ID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "ENTER":
|
||||
{
|
||||
enterInstance(player, npc, TEMPLATE_ID);
|
||||
_procella = (RaidBossInstance) addSpawn(PROCELLA, 212862, 179828, -15489, 49151, false, 0, true, player.getInstanceId());
|
||||
startQuestTimer("SPAWN_MINION", 20000, _procella, player);
|
||||
startQuestTimer("SPAWN_STORM", 5000, _procella, player);
|
||||
_procellaStormCount = 0;
|
||||
break;
|
||||
}
|
||||
case "SPAWN_MINION":
|
||||
{
|
||||
if (npc.getId() == PROCELLA)
|
||||
{
|
||||
_minion1 = (MonsterInstance) addSpawn(PROCELLA_GUARDIAN_1, 212663, 179421, -15486, 31011, true, 0, true, npc.getInstanceId());
|
||||
_minion2 = (MonsterInstance) addSpawn(PROCELLA_GUARDIAN_2, 213258, 179822, -15486, 12001, true, 0, true, npc.getInstanceId());
|
||||
_minion3 = (MonsterInstance) addSpawn(PROCELLA_GUARDIAN_3, 212558, 179974, -15486, 12311, true, 0, true, npc.getInstanceId());
|
||||
startQuestTimer("HIDE_PROCELLA", 3000, _procella, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "SPAWN_STORM":
|
||||
{
|
||||
if (_procellaStormCount < STORM_MAX_COUNT)
|
||||
{
|
||||
_procella.useMagic(HURRICANE_SUMMON.getSkill());
|
||||
|
||||
final Npc procellaStorm = addSpawn(PROCELLA_STORM, _procella.getX() + getRandom(-500, 500), _procella.getY() + getRandom(-500, 500), _procella.getZ(), 31011, true, 0, true, npc.getInstanceId());
|
||||
procellaStorm.setRandomWalking(true);
|
||||
_procellaStormCount++;
|
||||
startQuestTimer("SPAWN_STORM", 300000, _procella, null);
|
||||
startQuestTimer("CHECK_CHAR_INSIDE_RADIUS_NPC", 1000, procellaStorm, player);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "HIDE_PROCELLA":
|
||||
{
|
||||
if (_procella.isInvisible())
|
||||
{
|
||||
_procella.setInvisible(false);
|
||||
_procella.broadcastSay(ChatType.NPC_SHOUT, "Im invisible");
|
||||
}
|
||||
else
|
||||
{
|
||||
_procella.setInvisible(true);
|
||||
_procella.broadcastSay(ChatType.NPC_SHOUT, "Im visible");
|
||||
startQuestTimer("SPAWN_MINION", 300000, _procella, player);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "CHECK_CHAR_INSIDE_RADIUS_NPC":
|
||||
{
|
||||
if ((player != null) && (player.isInsideRadius3D(npc, 200)))
|
||||
{
|
||||
npc.abortAttack();
|
||||
npc.abortCast();
|
||||
npc.setTarget(player);
|
||||
if (SkillCaster.checkUseConditions(npc, HURRICANE_BOLT.getSkill()))
|
||||
{
|
||||
npc.doCast(HURRICANE_BOLT.getSkill());
|
||||
}
|
||||
startQuestTimer("CHECK_CHAR_INSIDE_RADIUS_NPC", 10000, npc, player);
|
||||
}
|
||||
else
|
||||
{
|
||||
startQuestTimer("CHECK_CHAR_INSIDE_RADIUS_NPC", 10000, npc, player);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, PlayerInstance player, boolean isSummon)
|
||||
{
|
||||
if (npc.getId() == PROCELLA)
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
if (world != null)
|
||||
{
|
||||
world.finishInstance();
|
||||
}
|
||||
}
|
||||
else if ((_minion1.isDead()) && (_minion2.isDead()) && (_minion3.isDead()))
|
||||
{
|
||||
startQuestTimer("HIDE_PROCELLA", 1000, _procella, null);
|
||||
}
|
||||
return super.onKill(npc, player, isSummon);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new ResidenceOfKingProcella();
|
||||
}
|
||||
}
|
@@ -0,0 +1,168 @@
|
||||
/*
|
||||
* 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.ResidenceOfQueenNebula;
|
||||
|
||||
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.skills.SkillCaster;
|
||||
|
||||
import instances.AbstractInstance;
|
||||
|
||||
/**
|
||||
* @author RobikBobik
|
||||
* @NOTE: Retail like working
|
||||
* @TODO: Rewrite code to modern style.
|
||||
* @TODO: Nebula uses attacks on a surface, summons minions (Water Slime) and casts
|
||||
* @TODO: The less Nebula's HP, the more damage she deals.
|
||||
*/
|
||||
public class ResidenceOfQueenNebula extends AbstractInstance
|
||||
{
|
||||
// NPCs
|
||||
private static final int IRIS = 34046;
|
||||
private static final int NEBULA = 29106;
|
||||
private static final int WATER_SLIME = 29111;
|
||||
// Misc
|
||||
private static final int TEMPLATE_ID = 196;
|
||||
// Skills
|
||||
// Debuffs which reduces Speed and increases the damage received (the effect stacks up to 5 times). When it's stacked to 5 times, the character becomes unable to move or make any actions.
|
||||
private static SkillHolder AQUA_RAGE_1 = new SkillHolder(50036, 1);
|
||||
private static SkillHolder AQUA_RAGE_2 = new SkillHolder(50036, 2);
|
||||
private static SkillHolder AQUA_RAGE_3 = new SkillHolder(50036, 3);
|
||||
private static SkillHolder AQUA_RAGE_4 = new SkillHolder(50036, 4);
|
||||
private static SkillHolder AQUA_RAGE_5 = new SkillHolder(50036, 5);
|
||||
|
||||
public ResidenceOfQueenNebula()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(IRIS);
|
||||
addKillId(NEBULA);
|
||||
addSpawnId(NEBULA);
|
||||
addInstanceLeaveId(TEMPLATE_ID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "ENTER":
|
||||
{
|
||||
enterInstance(player, npc, TEMPLATE_ID);
|
||||
break;
|
||||
}
|
||||
case "SPAWN_WATER_SLIME":
|
||||
{
|
||||
startQuestTimer("CAST_AQUA_RAGE", 5000, npc, player);
|
||||
if (npc.getId() == NEBULA)
|
||||
{
|
||||
for (int i = 0; i < getRandom(4, 6); i++)
|
||||
{
|
||||
addSpawn(npc, WATER_SLIME, npc.getX(), npc.getY(), npc.getZ(), npc.getHeading(), true, -1, true, npc.getInstanceId());
|
||||
startQuestTimer("SPAWN_WATER_SLIME", 300000, npc, null);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "PLAYER_PARA":
|
||||
{
|
||||
player.setIsImmobilized(true);
|
||||
startQuestTimer("PLAYER_UNPARA", 30000, npc, player);
|
||||
break;
|
||||
}
|
||||
case "PLAYER_UNPARA":
|
||||
{
|
||||
player.getEffectList().stopSkillEffects(true, AQUA_RAGE_5.getSkill());
|
||||
player.setIsImmobilized(false);
|
||||
break;
|
||||
}
|
||||
case "CAST_AQUA_RAGE":
|
||||
{
|
||||
startQuestTimer("CAST_AQUA_RAGE", 10000, npc, player);
|
||||
if (!player.isAffectedBySkill(AQUA_RAGE_1))
|
||||
{
|
||||
if (SkillCaster.checkUseConditions(npc, AQUA_RAGE_1.getSkill()))
|
||||
{
|
||||
npc.doCast(AQUA_RAGE_1.getSkill());
|
||||
}
|
||||
}
|
||||
else if (player.isAffectedBySkill(AQUA_RAGE_1))
|
||||
{
|
||||
if (SkillCaster.checkUseConditions(npc, AQUA_RAGE_2.getSkill()))
|
||||
{
|
||||
player.getEffectList().stopSkillEffects(true, AQUA_RAGE_1.getSkill());
|
||||
npc.doCast(AQUA_RAGE_2.getSkill());
|
||||
}
|
||||
}
|
||||
else if (player.isAffectedBySkill(AQUA_RAGE_2))
|
||||
{
|
||||
if (SkillCaster.checkUseConditions(npc, AQUA_RAGE_3.getSkill()))
|
||||
{
|
||||
player.getEffectList().stopSkillEffects(true, AQUA_RAGE_2.getSkill());
|
||||
npc.doCast(AQUA_RAGE_3.getSkill());
|
||||
}
|
||||
}
|
||||
else if (player.isAffectedBySkill(AQUA_RAGE_3))
|
||||
{
|
||||
if (SkillCaster.checkUseConditions(npc, AQUA_RAGE_4.getSkill()))
|
||||
{
|
||||
player.getEffectList().stopSkillEffects(true, AQUA_RAGE_3.getSkill());
|
||||
npc.doCast(AQUA_RAGE_4.getSkill());
|
||||
}
|
||||
}
|
||||
else if (player.isAffectedBySkill(AQUA_RAGE_4))
|
||||
{
|
||||
if (SkillCaster.checkUseConditions(npc, AQUA_RAGE_5.getSkill()))
|
||||
{
|
||||
player.getEffectList().stopSkillEffects(true, AQUA_RAGE_4.getSkill());
|
||||
npc.doCast(AQUA_RAGE_5.getSkill());
|
||||
startQuestTimer("PLAYER_PARA", 1000, npc, player);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpawn(Npc npc)
|
||||
{
|
||||
startQuestTimer("SPAWN_WATER_SLIME", 12000, npc, null);
|
||||
return super.onSpawn(npc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, PlayerInstance player, boolean isSummon)
|
||||
{
|
||||
if (npc.getId() == NEBULA)
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
if (world != null)
|
||||
{
|
||||
world.finishInstance();
|
||||
}
|
||||
}
|
||||
return super.onKill(npc, player, isSummon);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new ResidenceOfQueenNebula();
|
||||
}
|
||||
}
|
@@ -541,7 +541,7 @@
|
||||
<height normal="0.001" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29111" level="80" type="Npc" name="Water Slime">
|
||||
<npc id="29111" level="80" type="Monster" name="Water Slime">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<sex>FEMALE</sex>
|
||||
@@ -560,7 +560,7 @@
|
||||
<height normal="39" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29112" level="80" type="Npc" name="Procella's Guardian">
|
||||
<npc id="29112" level="80" type="Monster" name="Procella's Guardian">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<sex>FEMALE</sex>
|
||||
@@ -579,7 +579,7 @@
|
||||
<height normal="133" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29113" level="80" type="Npc" name="Procella's Guardian">
|
||||
<npc id="29113" level="80" type="Monster" name="Procella's Guardian">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<sex>FEMALE</sex>
|
||||
@@ -598,7 +598,7 @@
|
||||
<height normal="133" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29114" level="80" type="Npc" name="Procella's Guardian">
|
||||
<npc id="29114" level="80" type="Monster" name="Procella's Guardian">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<sex>FEMALE</sex>
|
||||
@@ -617,11 +617,11 @@
|
||||
<height normal="133" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29115" level="80" type="Npc" name="Procella's Storm">
|
||||
<npc id="29115" level="80" type="Monster" name="Procella's Storm">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<stats str="88" int="79" dex="55" wit="20" con="82" men="78">
|
||||
<vitals hp="8446" hpRegen="10.5" mp="18000" mpRegen="3.6" />
|
||||
<speed>
|
||||
<walk ground="50" />
|
||||
|
@@ -371,14 +371,36 @@
|
||||
<coolTime>500</coolTime>
|
||||
</skill>
|
||||
<skill id="50043" toLevel="2" name="Hurricane Bolt">
|
||||
<!-- Bolt of lightning attacks with 138 Power addedt to M. Atk., paralyses for 5 sec. -->
|
||||
<!-- Bolt of lightning attacks with 138 Power added to M. Atk., paralyses for 5 sec. -->
|
||||
<icon>icon.skill1170</icon>
|
||||
<operateType>A1</operateType>
|
||||
<isDebuff>true</isDebuff>
|
||||
<castRange>600</castRange>
|
||||
<hitTime>2500</hitTime>
|
||||
<coolTime>500</coolTime>
|
||||
<abnormalTime>5</abnormalTime>
|
||||
<activateRate>80</activateRate>
|
||||
<basicProperty>MAGIC</basicProperty>
|
||||
<castRange>900</castRange>
|
||||
<effectPoint>-100</effectPoint>
|
||||
<effectRange>1400</effectRange>
|
||||
<hitTime>2500</hitTime>
|
||||
<isDebuff>true</isDebuff>
|
||||
<isMagic>1</isMagic> <!-- Magic Skill -->
|
||||
<lvlBonusRate>1</lvlBonusRate>
|
||||
<magicLvl>85</magicLvl>
|
||||
<mpConsume>69</mpConsume>
|
||||
<operateType>A2</operateType>
|
||||
<abnormalType>PARALYZE</abnormalType>
|
||||
<magicCriticalRate>-5</magicCriticalRate>
|
||||
<abnormalLvl>1</abnormalLvl>
|
||||
<trait>PARALYZE</trait>
|
||||
<attributeType>DARK</attributeType>
|
||||
<attributeValue>120</attributeValue>
|
||||
<abnormalVisualEffect>PARALYZE</abnormalVisualEffect>
|
||||
<targetType>ENEMY</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<effects>
|
||||
<effect name="BlockActions" />
|
||||
<effect name="MagicalAttack">
|
||||
<power>138</power>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="50044" toLevel="2" name="Hurricane Destruction">
|
||||
<!-- Strong whirlwind attacks with 170 Power added to M. Atk. and knocks down nereby enemies. -->
|
||||
@@ -395,28 +417,41 @@
|
||||
<effectPoint>-100</effectPoint>
|
||||
</skill>
|
||||
<skill id="50046" toLevel="4" name="Wind Ability - Lv. 1 Atk.">
|
||||
<!-- P. Atk. +$s1. -->
|
||||
<!-- P. Atk. +20%. -->
|
||||
<icon>icon.skill1062</icon>
|
||||
<operateType>A1</operateType>
|
||||
<hitTime>1000</hitTime>
|
||||
<coolTime>500</coolTime>
|
||||
<effectPoint>100</effectPoint>
|
||||
<operateType>P</operateType>
|
||||
<effects>
|
||||
<effect name="PAtk">
|
||||
<amount>20</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="50047" toLevel="4" name="Wind Ability - Lv. 1 Def.">
|
||||
<!-- P./ M. Def. +$s1. -->
|
||||
<!-- P./ M. Def. +50%. -->
|
||||
<icon>icon.skill1062</icon>
|
||||
<operateType>A1</operateType>
|
||||
<hitTime>1000</hitTime>
|
||||
<coolTime>500</coolTime>
|
||||
<effectPoint>100</effectPoint>
|
||||
<operateType>P</operateType>
|
||||
<effects>
|
||||
<effect name="PhysicalDefence">
|
||||
<amount>50</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="MagicalDefence">
|
||||
<amount>50</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="50048" toLevel="4" name="Wind Ability - Lv. 1 Magic">
|
||||
<!-- M. Atk. +$s1. -->
|
||||
<!-- M. Atk. +20%. -->
|
||||
<icon>icon.skill1062</icon>
|
||||
<operateType>A1</operateType>
|
||||
<hitTime>1000</hitTime>
|
||||
<coolTime>500</coolTime>
|
||||
<effectPoint>100</effectPoint>
|
||||
<operateType>P</operateType>
|
||||
<effects>
|
||||
<effect name="MAtk">
|
||||
<amount>20</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="50049" toLevel="2" name="Fire Breath">
|
||||
<!-- Attacks enemies in front of the boss with 220 Power added to M. Atk. -->
|
||||
@@ -964,8 +999,8 @@
|
||||
<operateType>A1</operateType>
|
||||
<isMagic>1</isMagic> <!-- Magic Skill -->
|
||||
<isDebuff>true</isDebuff>
|
||||
<hitTime>2000</hitTime>
|
||||
<reuseDelay>30000</reuseDelay>
|
||||
<hitTime>1000</hitTime>
|
||||
<reuseDelay>5000</reuseDelay>
|
||||
<effectPoint>
|
||||
<value level="1">-1621</value>
|
||||
<value level="2">-1831</value>
|
||||
@@ -982,6 +1017,50 @@
|
||||
<value level="5">95</value>
|
||||
<value level="6">95</value>
|
||||
</mpConsume>
|
||||
<effects>
|
||||
<effect name="DefenceTrait">
|
||||
<SLEEP>
|
||||
<value level="1">-10</value>
|
||||
<value level="2">-12</value>
|
||||
<value level="3">-14</value>
|
||||
<value level="4">-16</value>
|
||||
<value level="5">-18</value>
|
||||
<value level="6">-20</value>
|
||||
</SLEEP>
|
||||
<HOLD>
|
||||
<value level="1">-10</value>
|
||||
<value level="2">-12</value>
|
||||
<value level="3">-14</value>
|
||||
<value level="4">-16</value>
|
||||
<value level="5">-18</value>
|
||||
<value level="6">-20</value>
|
||||
</HOLD>
|
||||
<SHOCK>
|
||||
<value level="1">-10</value>
|
||||
<value level="2">-12</value>
|
||||
<value level="3">-14</value>
|
||||
<value level="4">-16</value>
|
||||
<value level="5">-18</value>
|
||||
<value level="6">-20</value>
|
||||
</SHOCK>
|
||||
<PARALYZE>
|
||||
<value level="1">-10</value>
|
||||
<value level="2">-12</value>
|
||||
<value level="3">-14</value>
|
||||
<value level="4">-16</value>
|
||||
<value level="5">-18</value>
|
||||
<value level="6">-20</value>
|
||||
</PARALYZE>
|
||||
<DERANGEMENT>
|
||||
<value level="1">-10</value>
|
||||
<value level="2">-12</value>
|
||||
<value level="3">-14</value>
|
||||
<value level="4">-16</value>
|
||||
<value level="5">-18</value>
|
||||
<value level="6">-20</value>
|
||||
</DERANGEMENT>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="50095" toLevel="5" name="Frintezza Heal Music">
|
||||
<!-- Music to soothe the soul. -->
|
||||
|
6
L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/34046-1.htm
vendored
Normal file
6
L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/34046-1.htm
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
<!-- Translated from Russian -->
|
||||
<html><body>Iris:<br>
|
||||
I went to study one place where the energy of the water was very strong. At that moment, when the radiation became incredibly powerful, I saw a beautiful maiden, over whose head I took off a huge silhouette from a water. It was the Queen Nebula. Somehow he managed to divide himself and gain two bodies.<br>
|
||||
<font color="LEVEL">(You need a command channel of 18 or more characters.)</font>.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ResidenceOfQueenNebula ENTER">Move to the top level of Garden of Eva</Button>
|
||||
</body></html>
|
@@ -1,6 +1,7 @@
|
||||
<html><body>Iris:<br>
|
||||
This is the Garden of Eva. As a member of the Bronze Guild, I advertised for equipment to explore the area for relics, but I don't know where it's all disappeared to...<br>
|
||||
And in a place I changed upon, <font color="LEVEL">I saw the Water Spirit Queen</font> who used to dwell here. I saw her from afar, but I still remember every detail. If you're curious, I'll tell you more.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 0">Move to Upper Terrace of Garden of Eva</Button>
|
||||
<!--<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 0">I want to know more about the Water Spirit Queen</Button>-->
|
||||
This is the Garden of Eva. The strongest monsters inhabit the top levels. bronze Key Guild appointed me to head a squad and to explore local ruins. But I have already lost all my squad somehow...<br>
|
||||
But I managed to find out a couple of things. Though. If you came here with your companions, I would recommend to go the room in the end of the tunnel. Or you can go straight to the top level. If you are here for the first time I will be happy to show your around.<br>
|
||||
By the way, I have seen the <font color="LEVEL">Water Spirit Queen</font> here not so long ago. She was passing by not far from here and I hgazed in admiration at here movements. If you are interested I can tell you more.<br><br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 0">Teleport to the top level of Garden of Eva</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 1">Learn more about the Water Spirit Queen</Button>
|
||||
</body></html>
|
@@ -3,6 +3,6 @@
|
||||
I went to study one place where the energy of the fire was very strong. At that moment, when the radiation became incredibly powerful, I saw a beautiful maiden, over whose head I took off a huge silhouette woven from a burning flame. It was the King of Spirits <font color="LEVEL">Fire Ignis</font>. Somehow he managed to divide himself and gain two bodies.<br>
|
||||
And you know, it's very strange, but in the same place I saw <font color="LEVEL">Ice Queen Freya</font>. What could Freya do where the energy of fire pulsates? King Ignis has not yet declared himself openly, but is hiding and accumulating strength. Perhaps, when he leaves the shelter, Aden will plunge into chaos. Therefore, it is necessary in whatever would prevent Ignis.<br>
|
||||
But first you need to get <font color="LEVEL">a force that will help withstand the energy of fire</font>. Collect loyal supporters and come back !!! Alone you can not cope.<br>
|
||||
<font color="LEVEL">(You need a command channel of 27 or more characters.)</font>.<br1>
|
||||
<font color="LEVEL">(You need a command channel of 18 or more characters.)</font>.<br1>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ResidenceOfKingIgnis ENTER">Move to the lair of King Ignis</Button>
|
||||
</body></html>
|
@@ -3,6 +3,6 @@
|
||||
Haha, I knew you were coming to find out more. Wind Kings are called <font color="LEVEL">Prochela</font>. One hero, who was lucky to return alive after meeting him, said that Procella commands the deadly <font color="LEVEL">whirlwinds</font>.<br>
|
||||
Moreover, in battle, the King of Spirits creates <font color="LEVEL">multiple doubles</font>. Killing one makes the rest even meaner and more dangerous.<br>
|
||||
At the mere thought of this, I have a cold skin. Maybe you want to challenge him? I know where the King of Spirits lives, and I can send you to him. If you are ready, then gather supporters and get ready for battle. I wonder what happens. But remember: Prochella is very strong and dangerous.<br1>
|
||||
(<font color="LEVEL">You need a command channel of 27 or more characters.</font>)<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 2">Move to the Wind King's Lair</Button>
|
||||
(<font color="LEVEL">You need a command channel of 18 or more characters.</font>)<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ResidenceOfKingProcella ENTER">Move to the Wind King's Lair</Button>
|
||||
</body></html>
|
@@ -3,6 +3,6 @@
|
||||
Oh, I got you interested, right? As a child I read an old book about the King of Spirits <font color="LEVEL">Petrama</font>. True, I always thought of Petram as a mere fiction. And then the ships invaded the spirits, and I had to do research to find out the reason. Imagine my surprise when I realized that Peter really exists!<br>
|
||||
He's just huge! His body is like a rock, and his fists are like huge boulders. What else to tell? Hmm ..... Oh, yes! In that old book it was written that <font color="LEVEL">the stones covering the body of the King of the Earth Spirits make it virtually invulnerable</font>.<br>
|
||||
He is really incredibly strong and dangerous. Therefore, to meet with Peter must be prepared. You have to develop <font color="LEVEL">a force that will help resist earth energy</font>. When you are ready, come along with colleagues, and I will tell you where to find this giant.<br>
|
||||
<font color="LEVEL">(You need a command channel of 27 or more characters.)</font><br>
|
||||
<font color="LEVEL">(You need a command channel of 18 or more characters.)</font><br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ResidenceOfKingPetram ENTER">Move to Petram</Button>
|
||||
</body></html>
|
31
L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/instances/ResidenceOfKingProcella.xml
vendored
Normal file
31
L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/instances/ResidenceOfKingProcella.xml
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<instance id="197" maxWorlds="80" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
|
||||
<time duration="120" empty="0" />
|
||||
<removeBuffs type="ALL" />
|
||||
<locations>
|
||||
<enter type="FIXED">
|
||||
<location x="212884" y="178847" z="-15485" />
|
||||
</enter>
|
||||
<exit type="ORIGIN" />
|
||||
</locations>
|
||||
<conditions>
|
||||
<condition type="Party" />
|
||||
<condition type="CommandChannel" />
|
||||
<condition type="CommandChannelLeader" />
|
||||
<condition type="GroupMin">
|
||||
<param name="limit" value="18" /> <!-- The Kamael update -->
|
||||
</condition>
|
||||
<condition type="GroupMax">
|
||||
<param name="limit" value="100" />
|
||||
</condition>
|
||||
<condition type="Level">
|
||||
<param name="min" value="76" />
|
||||
<param name="max" value="82" />
|
||||
</condition>
|
||||
<condition type="Distance" />
|
||||
<condition type="Reenter" />
|
||||
</conditions>
|
||||
<reenter apply="ON_ENTER">
|
||||
<reset day="WEDNESDAY" hour="6" minute="30" />
|
||||
</reenter>
|
||||
</instance>
|
36
L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/instances/ResidenceOfQueenNebula.xml
vendored
Normal file
36
L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/instances/ResidenceOfQueenNebula.xml
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<instance id="196" maxWorlds="80" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
|
||||
<time duration="120" empty="0" />
|
||||
<removeBuffs type="ALL" />
|
||||
<locations>
|
||||
<enter type="FIXED">
|
||||
<location x="222149" y="168087" z="-15485" />
|
||||
</enter>
|
||||
<exit type="ORIGIN" />
|
||||
</locations>
|
||||
<conditions>
|
||||
<condition type="Party" />
|
||||
<condition type="CommandChannel" />
|
||||
<condition type="CommandChannelLeader" />
|
||||
<condition type="GroupMin">
|
||||
<param name="limit" value="18" /> <!-- The Kamael update -->
|
||||
</condition>
|
||||
<condition type="GroupMax">
|
||||
<param name="limit" value="100" />
|
||||
</condition>
|
||||
<condition type="Level">
|
||||
<param name="min" value="76" />
|
||||
<param name="max" value="82" />
|
||||
</condition>
|
||||
<condition type="Distance" />
|
||||
<condition type="Reenter" />
|
||||
</conditions>
|
||||
<reenter apply="ON_ENTER">
|
||||
<reset day="WEDNESDAY" hour="6" minute="30" />
|
||||
</reenter>
|
||||
<spawnlist>
|
||||
<group>
|
||||
<npc id="29106" x="222127" y="169057" z="-15486" heading="48730" /> <!-- Nebula -->
|
||||
</group>
|
||||
</spawnlist>
|
||||
</instance>
|
@@ -0,0 +1,163 @@
|
||||
/*
|
||||
* 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.ResidenceOfKingProcella;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.ChatType;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.MonsterInstance;
|
||||
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.skills.SkillCaster;
|
||||
|
||||
import instances.AbstractInstance;
|
||||
|
||||
/**
|
||||
* @author RobikBobik
|
||||
* @NOTE: Retail like working
|
||||
* @TODO: Rewrite code to modern style.
|
||||
*/
|
||||
public class ResidenceOfKingProcella extends AbstractInstance
|
||||
{
|
||||
// NPCs
|
||||
private static final int WIRI = 34048;
|
||||
private static final int PROCELLA = 29107;
|
||||
private static final int PROCELLA_GUARDIAN_1 = 29112;
|
||||
private static final int PROCELLA_GUARDIAN_2 = 29113;
|
||||
private static final int PROCELLA_GUARDIAN_3 = 29114;
|
||||
private static final int PROCELLA_STORM = 29115;
|
||||
// Skills
|
||||
private static final SkillHolder HURRICANE_SUMMON = new SkillHolder(50042, 1); // When spawn Minion
|
||||
private static final SkillHolder HURRICANE_BOLT = new SkillHolder(50043, 1); // When player in Radius + para
|
||||
// Misc
|
||||
private static final int TEMPLATE_ID = 197;
|
||||
private static int STORM_MAX_COUNT = 16; // TODO: Max is limit ?
|
||||
private int _procellaStormCount;
|
||||
private RaidBossInstance _procella;
|
||||
private MonsterInstance _minion1;
|
||||
private MonsterInstance _minion2;
|
||||
private MonsterInstance _minion3;
|
||||
|
||||
public ResidenceOfKingProcella()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(WIRI);
|
||||
addKillId(PROCELLA, PROCELLA_GUARDIAN_1, PROCELLA_GUARDIAN_2, PROCELLA_GUARDIAN_3);
|
||||
addInstanceEnterId(TEMPLATE_ID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "ENTER":
|
||||
{
|
||||
enterInstance(player, npc, TEMPLATE_ID);
|
||||
_procella = (RaidBossInstance) addSpawn(PROCELLA, 212862, 179828, -15489, 49151, false, 0, true, player.getInstanceId());
|
||||
startQuestTimer("SPAWN_MINION", 20000, _procella, player);
|
||||
startQuestTimer("SPAWN_STORM", 5000, _procella, player);
|
||||
_procellaStormCount = 0;
|
||||
break;
|
||||
}
|
||||
case "SPAWN_MINION":
|
||||
{
|
||||
if (npc.getId() == PROCELLA)
|
||||
{
|
||||
_minion1 = (MonsterInstance) addSpawn(PROCELLA_GUARDIAN_1, 212663, 179421, -15486, 31011, true, 0, true, npc.getInstanceId());
|
||||
_minion2 = (MonsterInstance) addSpawn(PROCELLA_GUARDIAN_2, 213258, 179822, -15486, 12001, true, 0, true, npc.getInstanceId());
|
||||
_minion3 = (MonsterInstance) addSpawn(PROCELLA_GUARDIAN_3, 212558, 179974, -15486, 12311, true, 0, true, npc.getInstanceId());
|
||||
startQuestTimer("HIDE_PROCELLA", 3000, _procella, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "SPAWN_STORM":
|
||||
{
|
||||
if (_procellaStormCount < STORM_MAX_COUNT)
|
||||
{
|
||||
_procella.useMagic(HURRICANE_SUMMON.getSkill());
|
||||
|
||||
final Npc procellaStorm = addSpawn(PROCELLA_STORM, _procella.getX() + getRandom(-500, 500), _procella.getY() + getRandom(-500, 500), _procella.getZ(), 31011, true, 0, true, npc.getInstanceId());
|
||||
procellaStorm.setRandomWalking(true);
|
||||
_procellaStormCount++;
|
||||
startQuestTimer("SPAWN_STORM", 300000, _procella, null);
|
||||
startQuestTimer("CHECK_CHAR_INSIDE_RADIUS_NPC", 1000, procellaStorm, player);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "HIDE_PROCELLA":
|
||||
{
|
||||
if (_procella.isInvisible())
|
||||
{
|
||||
_procella.setInvisible(false);
|
||||
_procella.broadcastSay(ChatType.NPC_SHOUT, "Im invisible");
|
||||
}
|
||||
else
|
||||
{
|
||||
_procella.setInvisible(true);
|
||||
_procella.broadcastSay(ChatType.NPC_SHOUT, "Im visible");
|
||||
startQuestTimer("SPAWN_MINION", 300000, _procella, player);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "CHECK_CHAR_INSIDE_RADIUS_NPC":
|
||||
{
|
||||
if ((player != null) && (player.isInsideRadius3D(npc, 200)))
|
||||
{
|
||||
npc.abortAttack();
|
||||
npc.abortCast();
|
||||
npc.setTarget(player);
|
||||
if (SkillCaster.checkUseConditions(npc, HURRICANE_BOLT.getSkill()))
|
||||
{
|
||||
npc.doCast(HURRICANE_BOLT.getSkill());
|
||||
}
|
||||
startQuestTimer("CHECK_CHAR_INSIDE_RADIUS_NPC", 10000, npc, player);
|
||||
}
|
||||
else
|
||||
{
|
||||
startQuestTimer("CHECK_CHAR_INSIDE_RADIUS_NPC", 10000, npc, player);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, PlayerInstance player, boolean isSummon)
|
||||
{
|
||||
if (npc.getId() == PROCELLA)
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
if (world != null)
|
||||
{
|
||||
world.finishInstance();
|
||||
}
|
||||
}
|
||||
else if ((_minion1.isDead()) && (_minion2.isDead()) && (_minion3.isDead()))
|
||||
{
|
||||
startQuestTimer("HIDE_PROCELLA", 1000, _procella, null);
|
||||
}
|
||||
return super.onKill(npc, player, isSummon);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new ResidenceOfKingProcella();
|
||||
}
|
||||
}
|
@@ -0,0 +1,168 @@
|
||||
/*
|
||||
* 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.ResidenceOfQueenNebula;
|
||||
|
||||
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.skills.SkillCaster;
|
||||
|
||||
import instances.AbstractInstance;
|
||||
|
||||
/**
|
||||
* @author RobikBobik
|
||||
* @NOTE: Retail like working
|
||||
* @TODO: Rewrite code to modern style.
|
||||
* @TODO: Nebula uses attacks on a surface, summons minions (Water Slime) and casts
|
||||
* @TODO: The less Nebula's HP, the more damage she deals.
|
||||
*/
|
||||
public class ResidenceOfQueenNebula extends AbstractInstance
|
||||
{
|
||||
// NPCs
|
||||
private static final int IRIS = 34046;
|
||||
private static final int NEBULA = 29106;
|
||||
private static final int WATER_SLIME = 29111;
|
||||
// Misc
|
||||
private static final int TEMPLATE_ID = 196;
|
||||
// Skills
|
||||
// Debuffs which reduces Speed and increases the damage received (the effect stacks up to 5 times). When it's stacked to 5 times, the character becomes unable to move or make any actions.
|
||||
private static SkillHolder AQUA_RAGE_1 = new SkillHolder(50036, 1);
|
||||
private static SkillHolder AQUA_RAGE_2 = new SkillHolder(50036, 2);
|
||||
private static SkillHolder AQUA_RAGE_3 = new SkillHolder(50036, 3);
|
||||
private static SkillHolder AQUA_RAGE_4 = new SkillHolder(50036, 4);
|
||||
private static SkillHolder AQUA_RAGE_5 = new SkillHolder(50036, 5);
|
||||
|
||||
public ResidenceOfQueenNebula()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(IRIS);
|
||||
addKillId(NEBULA);
|
||||
addSpawnId(NEBULA);
|
||||
addInstanceLeaveId(TEMPLATE_ID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "ENTER":
|
||||
{
|
||||
enterInstance(player, npc, TEMPLATE_ID);
|
||||
break;
|
||||
}
|
||||
case "SPAWN_WATER_SLIME":
|
||||
{
|
||||
startQuestTimer("CAST_AQUA_RAGE", 5000, npc, player);
|
||||
if (npc.getId() == NEBULA)
|
||||
{
|
||||
for (int i = 0; i < getRandom(4, 6); i++)
|
||||
{
|
||||
addSpawn(npc, WATER_SLIME, npc.getX(), npc.getY(), npc.getZ(), npc.getHeading(), true, -1, true, npc.getInstanceId());
|
||||
startQuestTimer("SPAWN_WATER_SLIME", 300000, npc, null);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "PLAYER_PARA":
|
||||
{
|
||||
player.setIsImmobilized(true);
|
||||
startQuestTimer("PLAYER_UNPARA", 30000, npc, player);
|
||||
break;
|
||||
}
|
||||
case "PLAYER_UNPARA":
|
||||
{
|
||||
player.getEffectList().stopSkillEffects(true, AQUA_RAGE_5.getSkill());
|
||||
player.setIsImmobilized(false);
|
||||
break;
|
||||
}
|
||||
case "CAST_AQUA_RAGE":
|
||||
{
|
||||
startQuestTimer("CAST_AQUA_RAGE", 10000, npc, player);
|
||||
if (!player.isAffectedBySkill(AQUA_RAGE_1))
|
||||
{
|
||||
if (SkillCaster.checkUseConditions(npc, AQUA_RAGE_1.getSkill()))
|
||||
{
|
||||
npc.doCast(AQUA_RAGE_1.getSkill());
|
||||
}
|
||||
}
|
||||
else if (player.isAffectedBySkill(AQUA_RAGE_1))
|
||||
{
|
||||
if (SkillCaster.checkUseConditions(npc, AQUA_RAGE_2.getSkill()))
|
||||
{
|
||||
player.getEffectList().stopSkillEffects(true, AQUA_RAGE_1.getSkill());
|
||||
npc.doCast(AQUA_RAGE_2.getSkill());
|
||||
}
|
||||
}
|
||||
else if (player.isAffectedBySkill(AQUA_RAGE_2))
|
||||
{
|
||||
if (SkillCaster.checkUseConditions(npc, AQUA_RAGE_3.getSkill()))
|
||||
{
|
||||
player.getEffectList().stopSkillEffects(true, AQUA_RAGE_2.getSkill());
|
||||
npc.doCast(AQUA_RAGE_3.getSkill());
|
||||
}
|
||||
}
|
||||
else if (player.isAffectedBySkill(AQUA_RAGE_3))
|
||||
{
|
||||
if (SkillCaster.checkUseConditions(npc, AQUA_RAGE_4.getSkill()))
|
||||
{
|
||||
player.getEffectList().stopSkillEffects(true, AQUA_RAGE_3.getSkill());
|
||||
npc.doCast(AQUA_RAGE_4.getSkill());
|
||||
}
|
||||
}
|
||||
else if (player.isAffectedBySkill(AQUA_RAGE_4))
|
||||
{
|
||||
if (SkillCaster.checkUseConditions(npc, AQUA_RAGE_5.getSkill()))
|
||||
{
|
||||
player.getEffectList().stopSkillEffects(true, AQUA_RAGE_4.getSkill());
|
||||
npc.doCast(AQUA_RAGE_5.getSkill());
|
||||
startQuestTimer("PLAYER_PARA", 1000, npc, player);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpawn(Npc npc)
|
||||
{
|
||||
startQuestTimer("SPAWN_WATER_SLIME", 12000, npc, null);
|
||||
return super.onSpawn(npc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, PlayerInstance player, boolean isSummon)
|
||||
{
|
||||
if (npc.getId() == NEBULA)
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
if (world != null)
|
||||
{
|
||||
world.finishInstance();
|
||||
}
|
||||
}
|
||||
return super.onKill(npc, player, isSummon);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new ResidenceOfQueenNebula();
|
||||
}
|
||||
}
|
@@ -541,7 +541,7 @@
|
||||
<height normal="0.001" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29111" level="80" type="Npc" name="Water Slime">
|
||||
<npc id="29111" level="80" type="Monster" name="Water Slime">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<sex>FEMALE</sex>
|
||||
@@ -560,7 +560,7 @@
|
||||
<height normal="39" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29112" level="80" type="Npc" name="Procella's Guardian">
|
||||
<npc id="29112" level="80" type="Monster" name="Procella's Guardian">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<sex>FEMALE</sex>
|
||||
@@ -579,7 +579,7 @@
|
||||
<height normal="133" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29113" level="80" type="Npc" name="Procella's Guardian">
|
||||
<npc id="29113" level="80" type="Monster" name="Procella's Guardian">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<sex>FEMALE</sex>
|
||||
@@ -598,7 +598,7 @@
|
||||
<height normal="133" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29114" level="80" type="Npc" name="Procella's Guardian">
|
||||
<npc id="29114" level="80" type="Monster" name="Procella's Guardian">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<sex>FEMALE</sex>
|
||||
@@ -617,11 +617,11 @@
|
||||
<height normal="133" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29115" level="80" type="Npc" name="Procella's Storm">
|
||||
<npc id="29115" level="80" type="Monster" name="Procella's Storm">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<stats str="88" int="79" dex="55" wit="20" con="82" men="78">
|
||||
<vitals hp="8446" hpRegen="10.5" mp="18000" mpRegen="3.6" />
|
||||
<speed>
|
||||
<walk ground="50" />
|
||||
|
@@ -373,12 +373,34 @@
|
||||
<skill id="50043" toLevel="2" name="Hurricane Bolt">
|
||||
<!-- Bolt of lightning attacks with 138 Power added to M. Atk., paralyses for 5 sec. -->
|
||||
<icon>icon.skill1170</icon>
|
||||
<operateType>A1</operateType>
|
||||
<isDebuff>true</isDebuff>
|
||||
<castRange>600</castRange>
|
||||
<hitTime>2500</hitTime>
|
||||
<coolTime>500</coolTime>
|
||||
<abnormalTime>5</abnormalTime>
|
||||
<activateRate>80</activateRate>
|
||||
<basicProperty>MAGIC</basicProperty>
|
||||
<castRange>900</castRange>
|
||||
<effectPoint>-100</effectPoint>
|
||||
<effectRange>1400</effectRange>
|
||||
<hitTime>2500</hitTime>
|
||||
<isDebuff>true</isDebuff>
|
||||
<isMagic>1</isMagic> <!-- Magic Skill -->
|
||||
<lvlBonusRate>1</lvlBonusRate>
|
||||
<magicLvl>85</magicLvl>
|
||||
<mpConsume>69</mpConsume>
|
||||
<operateType>A2</operateType>
|
||||
<abnormalType>PARALYZE</abnormalType>
|
||||
<magicCriticalRate>-5</magicCriticalRate>
|
||||
<abnormalLvl>1</abnormalLvl>
|
||||
<trait>PARALYZE</trait>
|
||||
<attributeType>DARK</attributeType>
|
||||
<attributeValue>120</attributeValue>
|
||||
<abnormalVisualEffect>PARALYZE</abnormalVisualEffect>
|
||||
<targetType>ENEMY</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<effects>
|
||||
<effect name="BlockActions" />
|
||||
<effect name="MagicalAttack">
|
||||
<power>138</power>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="50044" toLevel="2" name="Hurricane Destruction">
|
||||
<!-- Strong whirlwind attacks with 170 Power added to M. Atk. and knocks down nereby enemies. -->
|
||||
|
Reference in New Issue
Block a user