From 5a8c209e153d81ea8cbd7161566435f382b7cdec Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Tue, 29 Oct 2019 14:33:00 +0000 Subject: [PATCH] Addition of Procella and Nebula instances. Contributed by robikbobik. --- .../game/data/html/teleporter/34046-1.htm | 6 + .../dist/game/data/html/teleporter/34046.htm | 9 +- .../game/data/html/teleporter/34047-1.htm | 2 +- .../game/data/html/teleporter/34048-1.htm | 4 +- .../game/data/html/teleporter/34049-1.htm | 2 +- .../instances/ResidenceOfKingProcella.xml | 31 ++++ .../data/instances/ResidenceOfQueenNebula.xml | 36 ++++ .../ResidenceOfKingProcella.java | 163 +++++++++++++++++ .../ResidenceOfQueenNebula.java | 168 ++++++++++++++++++ .../dist/game/data/stats/npcs/29100-29199.xml | 12 +- .../game/data/stats/skills/50000-50099.xml | 69 +++++-- .../game/data/html/teleporter/34046-1.htm | 6 + .../dist/game/data/html/teleporter/34046.htm | 9 +- .../game/data/html/teleporter/34047-1.htm | 2 +- .../game/data/html/teleporter/34048-1.htm | 4 +- .../game/data/html/teleporter/34049-1.htm | 2 +- .../instances/ResidenceOfKingProcella.xml | 31 ++++ .../data/instances/ResidenceOfQueenNebula.xml | 36 ++++ .../ResidenceOfKingProcella.java | 163 +++++++++++++++++ .../ResidenceOfQueenNebula.java | 168 ++++++++++++++++++ .../dist/game/data/stats/npcs/29100-29199.xml | 12 +- .../game/data/stats/skills/50000-50099.xml | 125 ++++++++++--- .../game/data/html/teleporter/34046-1.htm | 6 + .../dist/game/data/html/teleporter/34046.htm | 9 +- .../game/data/html/teleporter/34047-1.htm | 2 +- .../game/data/html/teleporter/34048-1.htm | 4 +- .../game/data/html/teleporter/34049-1.htm | 2 +- .../instances/ResidenceOfKingProcella.xml | 31 ++++ .../data/instances/ResidenceOfQueenNebula.xml | 36 ++++ .../ResidenceOfKingProcella.java | 163 +++++++++++++++++ .../ResidenceOfQueenNebula.java | 168 ++++++++++++++++++ .../dist/game/data/stats/npcs/29100-29199.xml | 12 +- .../game/data/stats/skills/50000-50099.xml | 32 +++- 33 files changed, 1438 insertions(+), 87 deletions(-) create mode 100644 L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/34046-1.htm create mode 100644 L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/instances/ResidenceOfKingProcella.xml create mode 100644 L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/instances/ResidenceOfQueenNebula.xml create mode 100644 L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/instances/ResidenceOfKingProcella/ResidenceOfKingProcella.java create mode 100644 L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/instances/ResidenceOfQueenNebula/ResidenceOfQueenNebula.java create mode 100644 L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/34046-1.htm create mode 100644 L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/instances/ResidenceOfKingProcella.xml create mode 100644 L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/instances/ResidenceOfQueenNebula.xml create mode 100644 L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/instances/ResidenceOfKingProcella/ResidenceOfKingProcella.java create mode 100644 L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/instances/ResidenceOfQueenNebula/ResidenceOfQueenNebula.java create mode 100644 L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/34046-1.htm create mode 100644 L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/instances/ResidenceOfKingProcella.xml create mode 100644 L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/instances/ResidenceOfQueenNebula.xml create mode 100644 L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/instances/ResidenceOfKingProcella/ResidenceOfKingProcella.java create mode 100644 L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/instances/ResidenceOfQueenNebula/ResidenceOfQueenNebula.java diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/34046-1.htm b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/34046-1.htm new file mode 100644 index 0000000000..5e148396e6 --- /dev/null +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/34046-1.htm @@ -0,0 +1,6 @@ + +Iris:
+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.
+(You need a command channel of 18 or more characters.).
+ + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/34046.htm b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/34046.htm index f21d7366e1..599018b8a7 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/34046.htm +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/34046.htm @@ -1,6 +1,7 @@ Iris:
-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...
-And in a place I changed upon, I saw the Water Spirit Queen 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.
- - +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...
+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.
+By the way, I have seen the Water Spirit Queen 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.

+ + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/34047-1.htm b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/34047-1.htm index 94ab7a93e0..d58e2bb263 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/34047-1.htm +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/34047-1.htm @@ -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 Fire Ignis. Somehow he managed to divide himself and gain two bodies.
And you know, it's very strange, but in the same place I saw Ice Queen Freya. 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.
But first you need to get a force that will help withstand the energy of fire. Collect loyal supporters and come back !!! Alone you can not cope.
-(You need a command channel of 27 or more characters.). +(You need a command channel of 18 or more characters.). \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/34048-1.htm b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/34048-1.htm index d348663904..d9c734d70d 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/34048-1.htm +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/34048-1.htm @@ -3,6 +3,6 @@ Haha, I knew you were coming to find out more. Wind Kings are called Prochela. One hero, who was lucky to return alive after meeting him, said that Procella commands the deadly whirlwinds.
Moreover, in battle, the King of Spirits creates multiple doubles. Killing one makes the rest even meaner and more dangerous.
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. -(You need a command channel of 27 or more characters.)
- +(You need a command channel of 18 or more characters.)
+ \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/34049-1.htm b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/34049-1.htm index 97d8acd570..84ab1b6a95 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/34049-1.htm +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/teleporter/34049-1.htm @@ -3,6 +3,6 @@ Oh, I got you interested, right? As a child I read an old book about the King of Spirits Petrama. 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!
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 the stones covering the body of the King of the Earth Spirits make it virtually invulnerable.
He is really incredibly strong and dangerous. Therefore, to meet with Peter must be prepared. You have to develop a force that will help resist earth energy. When you are ready, come along with colleagues, and I will tell you where to find this giant.
-(You need a command channel of 27 or more characters.)
+(You need a command channel of 18 or more characters.)
\ No newline at end of file diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/instances/ResidenceOfKingProcella.xml b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/instances/ResidenceOfKingProcella.xml new file mode 100644 index 0000000000..7fc87eaa89 --- /dev/null +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/instances/ResidenceOfKingProcella.xml @@ -0,0 +1,31 @@ + + + diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/instances/ResidenceOfQueenNebula.xml b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/instances/ResidenceOfQueenNebula.xml new file mode 100644 index 0000000000..6a6d1af068 --- /dev/null +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/instances/ResidenceOfQueenNebula.xml @@ -0,0 +1,36 @@ + + + diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/instances/ResidenceOfKingProcella/ResidenceOfKingProcella.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/instances/ResidenceOfKingProcella/ResidenceOfKingProcella.java new file mode 100644 index 0000000000..21c5cbaee5 --- /dev/null +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/instances/ResidenceOfKingProcella/ResidenceOfKingProcella.java @@ -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 . + */ +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(); + } +} diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/instances/ResidenceOfQueenNebula/ResidenceOfQueenNebula.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/instances/ResidenceOfQueenNebula/ResidenceOfQueenNebula.java new file mode 100644 index 0000000000..611d931159 --- /dev/null +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/instances/ResidenceOfQueenNebula/ResidenceOfQueenNebula.java @@ -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 . + */ +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(); + } +} diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/npcs/29100-29199.xml b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/npcs/29100-29199.xml index 2332e3646c..13759ebf18 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/npcs/29100-29199.xml +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/npcs/29100-29199.xml @@ -525,7 +525,7 @@ - + ETC FEMALE @@ -544,7 +544,7 @@ - + ETC FEMALE @@ -563,7 +563,7 @@ - + ETC FEMALE @@ -582,7 +582,7 @@ - + ETC FEMALE @@ -601,11 +601,11 @@ - + ETC FEMALE - + diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/skills/50000-50099.xml b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/skills/50000-50099.xml index 51dd8df177..6f927f8ef6 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/skills/50000-50099.xml +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/skills/50000-50099.xml @@ -373,12 +373,34 @@ icon.skill1170 - A1 - true - 600 - 2500 - 500 + 5 + 80 + MAGIC + 900 -100 + 1400 + 2500 + true + 1 + 1 + 85 + 69 + A2 + PARALYZE + -5 + 1 + PARALYZE + DARK + 120 + PARALYZE + ENEMY + SINGLE + + + + 138 + + @@ -397,26 +419,39 @@ icon.skill1062 - A1 - 1000 - 500 - 100 + P + + + 20 + PER + + icon.skill1062 - A1 - 1000 - 500 - 100 + P + + + 50 + PER + + + 50 + PER + + icon.skill1062 - A1 - 1000 - 500 - 100 + P + + + 20 + PER + + diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/34046-1.htm b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/34046-1.htm new file mode 100644 index 0000000000..5e148396e6 --- /dev/null +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/34046-1.htm @@ -0,0 +1,6 @@ + +Iris:
+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.
+(You need a command channel of 18 or more characters.).
+ + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/34046.htm b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/34046.htm index f21d7366e1..599018b8a7 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/34046.htm +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/34046.htm @@ -1,6 +1,7 @@ Iris:
-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...
-And in a place I changed upon, I saw the Water Spirit Queen 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.
- - +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...
+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.
+By the way, I have seen the Water Spirit Queen 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.

+ + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/34047-1.htm b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/34047-1.htm index 94ab7a93e0..d58e2bb263 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/34047-1.htm +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/34047-1.htm @@ -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 Fire Ignis. Somehow he managed to divide himself and gain two bodies.
And you know, it's very strange, but in the same place I saw Ice Queen Freya. 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.
But first you need to get a force that will help withstand the energy of fire. Collect loyal supporters and come back !!! Alone you can not cope.
-(You need a command channel of 27 or more characters.). +(You need a command channel of 18 or more characters.). \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/34048-1.htm b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/34048-1.htm index d348663904..d9c734d70d 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/34048-1.htm +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/34048-1.htm @@ -3,6 +3,6 @@ Haha, I knew you were coming to find out more. Wind Kings are called Prochela. One hero, who was lucky to return alive after meeting him, said that Procella commands the deadly whirlwinds.
Moreover, in battle, the King of Spirits creates multiple doubles. Killing one makes the rest even meaner and more dangerous.
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. -(You need a command channel of 27 or more characters.)
- +(You need a command channel of 18 or more characters.)
+ \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/34049-1.htm b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/34049-1.htm index 97d8acd570..84ab1b6a95 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/34049-1.htm +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/teleporter/34049-1.htm @@ -3,6 +3,6 @@ Oh, I got you interested, right? As a child I read an old book about the King of Spirits Petrama. 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!
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 the stones covering the body of the King of the Earth Spirits make it virtually invulnerable.
He is really incredibly strong and dangerous. Therefore, to meet with Peter must be prepared. You have to develop a force that will help resist earth energy. When you are ready, come along with colleagues, and I will tell you where to find this giant.
-(You need a command channel of 27 or more characters.)
+(You need a command channel of 18 or more characters.)
\ No newline at end of file diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/instances/ResidenceOfKingProcella.xml b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/instances/ResidenceOfKingProcella.xml new file mode 100644 index 0000000000..7fc87eaa89 --- /dev/null +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/instances/ResidenceOfKingProcella.xml @@ -0,0 +1,31 @@ + + + diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/instances/ResidenceOfQueenNebula.xml b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/instances/ResidenceOfQueenNebula.xml new file mode 100644 index 0000000000..6a6d1af068 --- /dev/null +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/instances/ResidenceOfQueenNebula.xml @@ -0,0 +1,36 @@ + + + diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/instances/ResidenceOfKingProcella/ResidenceOfKingProcella.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/instances/ResidenceOfKingProcella/ResidenceOfKingProcella.java new file mode 100644 index 0000000000..21c5cbaee5 --- /dev/null +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/instances/ResidenceOfKingProcella/ResidenceOfKingProcella.java @@ -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 . + */ +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(); + } +} diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/instances/ResidenceOfQueenNebula/ResidenceOfQueenNebula.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/instances/ResidenceOfQueenNebula/ResidenceOfQueenNebula.java new file mode 100644 index 0000000000..611d931159 --- /dev/null +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/instances/ResidenceOfQueenNebula/ResidenceOfQueenNebula.java @@ -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 . + */ +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(); + } +} diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/npcs/29100-29199.xml b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/npcs/29100-29199.xml index f36417b592..2de61bced8 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/npcs/29100-29199.xml +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/npcs/29100-29199.xml @@ -541,7 +541,7 @@
- + ETC FEMALE @@ -560,7 +560,7 @@ - + ETC FEMALE @@ -579,7 +579,7 @@ - + ETC FEMALE @@ -598,7 +598,7 @@ - + ETC FEMALE @@ -617,11 +617,11 @@ - + ETC FEMALE - + diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/skills/50000-50099.xml b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/skills/50000-50099.xml index b13033ed28..2a6dc995d3 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/skills/50000-50099.xml +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/skills/50000-50099.xml @@ -371,14 +371,36 @@ 500 - + icon.skill1170 - A1 - true - 600 - 2500 - 500 + 5 + 80 + MAGIC + 900 -100 + 1400 + 2500 + true + 1 + 1 + 85 + 69 + A2 + PARALYZE + -5 + 1 + PARALYZE + DARK + 120 + PARALYZE + ENEMY + SINGLE + + + + 138 + + @@ -395,28 +417,41 @@ -100 - + icon.skill1062 - A1 - 1000 - 500 - 100 + P + + + 20 + PER + + - + icon.skill1062 - A1 - 1000 - 500 - 100 + P + + + 50 + PER + + + 50 + PER + + - + icon.skill1062 - A1 - 1000 - 500 - 100 + P + + + 20 + PER + + @@ -964,8 +999,8 @@ A1 1 true - 2000 - 30000 + 1000 + 5000 -1621 -1831 @@ -982,6 +1017,50 @@ 95 95 + + + + -10 + -12 + -14 + -16 + -18 + -20 + + + -10 + -12 + -14 + -16 + -18 + -20 + + + -10 + -12 + -14 + -16 + -18 + -20 + + + -10 + -12 + -14 + -16 + -18 + -20 + + + -10 + -12 + -14 + -16 + -18 + -20 + + + diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/34046-1.htm b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/34046-1.htm new file mode 100644 index 0000000000..5e148396e6 --- /dev/null +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/34046-1.htm @@ -0,0 +1,6 @@ + +Iris:
+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.
+(You need a command channel of 18 or more characters.).
+ + \ No newline at end of file diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/34046.htm b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/34046.htm index f21d7366e1..599018b8a7 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/34046.htm +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/34046.htm @@ -1,6 +1,7 @@ Iris:
-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...
-And in a place I changed upon, I saw the Water Spirit Queen 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.
- - +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...
+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.
+By the way, I have seen the Water Spirit Queen 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.

+ + \ No newline at end of file diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/34047-1.htm b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/34047-1.htm index 94ab7a93e0..d58e2bb263 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/34047-1.htm +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/34047-1.htm @@ -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 Fire Ignis. Somehow he managed to divide himself and gain two bodies.
And you know, it's very strange, but in the same place I saw Ice Queen Freya. 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.
But first you need to get a force that will help withstand the energy of fire. Collect loyal supporters and come back !!! Alone you can not cope.
-(You need a command channel of 27 or more characters.). +(You need a command channel of 18 or more characters.). \ No newline at end of file diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/34048-1.htm b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/34048-1.htm index d348663904..d9c734d70d 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/34048-1.htm +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/34048-1.htm @@ -3,6 +3,6 @@ Haha, I knew you were coming to find out more. Wind Kings are called Prochela. One hero, who was lucky to return alive after meeting him, said that Procella commands the deadly whirlwinds.
Moreover, in battle, the King of Spirits creates multiple doubles. Killing one makes the rest even meaner and more dangerous.
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. -(You need a command channel of 27 or more characters.)
- +(You need a command channel of 18 or more characters.)
+ \ No newline at end of file diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/34049-1.htm b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/34049-1.htm index 97d8acd570..84ab1b6a95 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/34049-1.htm +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/teleporter/34049-1.htm @@ -3,6 +3,6 @@ Oh, I got you interested, right? As a child I read an old book about the King of Spirits Petrama. 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!
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 the stones covering the body of the King of the Earth Spirits make it virtually invulnerable.
He is really incredibly strong and dangerous. Therefore, to meet with Peter must be prepared. You have to develop a force that will help resist earth energy. When you are ready, come along with colleagues, and I will tell you where to find this giant.
-(You need a command channel of 27 or more characters.)
+(You need a command channel of 18 or more characters.)
\ No newline at end of file diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/instances/ResidenceOfKingProcella.xml b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/instances/ResidenceOfKingProcella.xml new file mode 100644 index 0000000000..3466755d90 --- /dev/null +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/instances/ResidenceOfKingProcella.xml @@ -0,0 +1,31 @@ + + + diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/instances/ResidenceOfQueenNebula.xml b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/instances/ResidenceOfQueenNebula.xml new file mode 100644 index 0000000000..ff4e4911b7 --- /dev/null +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/instances/ResidenceOfQueenNebula.xml @@ -0,0 +1,36 @@ + + + diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/instances/ResidenceOfKingProcella/ResidenceOfKingProcella.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/instances/ResidenceOfKingProcella/ResidenceOfKingProcella.java new file mode 100644 index 0000000000..21c5cbaee5 --- /dev/null +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/instances/ResidenceOfKingProcella/ResidenceOfKingProcella.java @@ -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 . + */ +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(); + } +} diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/instances/ResidenceOfQueenNebula/ResidenceOfQueenNebula.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/instances/ResidenceOfQueenNebula/ResidenceOfQueenNebula.java new file mode 100644 index 0000000000..611d931159 --- /dev/null +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/instances/ResidenceOfQueenNebula/ResidenceOfQueenNebula.java @@ -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 . + */ +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(); + } +} diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/npcs/29100-29199.xml b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/npcs/29100-29199.xml index e4db719497..a49d160152 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/npcs/29100-29199.xml +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/npcs/29100-29199.xml @@ -541,7 +541,7 @@
- + ETC FEMALE @@ -560,7 +560,7 @@ - + ETC FEMALE @@ -579,7 +579,7 @@ - + ETC FEMALE @@ -598,7 +598,7 @@ - + ETC FEMALE @@ -617,11 +617,11 @@ - + ETC FEMALE - + diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/skills/50000-50099.xml b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/skills/50000-50099.xml index 22411ddd72..fc3c2606d1 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/skills/50000-50099.xml +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/skills/50000-50099.xml @@ -373,12 +373,34 @@ icon.skill1170 - A1 - true - 600 - 2500 - 500 + 5 + 80 + MAGIC + 900 -100 + 1400 + 2500 + true + 1 + 1 + 85 + 69 + A2 + PARALYZE + -5 + 1 + PARALYZE + DARK + 120 + PARALYZE + ENEMY + SINGLE + + + + 138 + +