From 9f649e00f2532d12096a8728a2d4544f3d4df1b8 Mon Sep 17 00:00:00 2001
From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com>
Date: Fri, 15 Apr 2016 08:33:21 +0000
Subject: [PATCH] Nightmare Kamaloka. Contributed by NviX.
---
trunk/dist/game/data/MinionData.xml | 15 +
trunk/dist/game/data/html/guard/30870-1.htm | 4 -
trunk/dist/game/data/html/guard/30870.htm | 2 +-
.../game/data/instances/NightmareKamaloka.xml | 22 ++
.../ai/group_template/MinionSpawnManager.java | 4 +
.../scripts/instances/InstanceLoader.java | 2 +
.../NightmareKamaloka/NightmareKamaloka.java | 218 ++++++++++++
.../quests/Q00760_BlockTheExit/30870-1.html | 6 +
.../quests/Q00760_BlockTheExit/30870-2.html | 6 +
.../quests/Q00760_BlockTheExit/30870-3.html | 5 +
.../quests/Q00760_BlockTheExit/30870-4.html | 4 +
.../quests/Q00760_BlockTheExit/30870-5.html | 6 +
.../quests/Q00760_BlockTheExit/30870-6.html | 5 +
.../quests/Q00760_BlockTheExit/30870-7.html | 4 +
.../quests/Q00760_BlockTheExit/30870-8.html | 4 +
.../Q00760_BlockTheExit.java | 117 +++++++
.../quests/Q00760_BlockTheExit/no_level.html | 4 +
.../scripts/quests/QuestMasterHandler.java | 2 +
.../game/data/stats/items/10200-10299.xml | 5 +-
.../game/data/stats/items/46500-46599.xml | 4 +-
.../dist/game/data/stats/npcs/26000-26099.xml | 182 +++++++---
.../dist/game/data/stats/npcs/26100-26199.xml | 327 +++++++++++-------
.../game/data/stats/skills/16200-16299.xml | 22 +-
.../game/data/stats/skills/16400-16499.xml | 178 ++++++++--
.../game/data/stats/skills/18500-18599.xml | 18 +-
.../gameserver/model/actor/L2Attackable.java | 14 +-
.../l2jmobius/gameserver/util/MinionList.java | 12 +-
27 files changed, 968 insertions(+), 224 deletions(-)
delete mode 100644 trunk/dist/game/data/html/guard/30870-1.htm
create mode 100644 trunk/dist/game/data/instances/NightmareKamaloka.xml
create mode 100644 trunk/dist/game/data/scripts/instances/NightmareKamaloka/NightmareKamaloka.java
create mode 100644 trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-1.html
create mode 100644 trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-2.html
create mode 100644 trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-3.html
create mode 100644 trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-4.html
create mode 100644 trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-5.html
create mode 100644 trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-6.html
create mode 100644 trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-7.html
create mode 100644 trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-8.html
create mode 100644 trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/Q00760_BlockTheExit.java
create mode 100644 trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/no_level.html
diff --git a/trunk/dist/game/data/MinionData.xml b/trunk/dist/game/data/MinionData.xml
index ac6c4401f7..e5472a196c 100644
--- a/trunk/dist/game/data/MinionData.xml
+++ b/trunk/dist/game/data/MinionData.xml
@@ -2626,4 +2626,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/trunk/dist/game/data/html/guard/30870-1.htm b/trunk/dist/game/data/html/guard/30870-1.htm
deleted file mode 100644
index 7c17fc6369..0000000000
--- a/trunk/dist/game/data/html/guard/30870-1.htm
+++ /dev/null
@@ -1,4 +0,0 @@
-
Kurtiz
-Aren't you in a party? But you are not the party leader.
-(Only the party leader can request to enter.)
-
\ No newline at end of file
diff --git a/trunk/dist/game/data/html/guard/30870.htm b/trunk/dist/game/data/html/guard/30870.htm
index 32492ff035..77e79dc856 100644
--- a/trunk/dist/game/data/html/guard/30870.htm
+++ b/trunk/dist/game/data/html/guard/30870.htm
@@ -1,7 +1,7 @@
Captain Kurtiz:
Aden Castle is practically invulnerable, but as well protected as it is, there are more dangers out there for which we might not be ready. My brethren and I have been sending you on adventures into the Kamalokas to test your endurance for that very reason.
But despite the successes, there remains one place that remains unconquered. It is one of my nightmares. If only I could send in someone to conquer it once and for all...
-
+
\ No newline at end of file
diff --git a/trunk/dist/game/data/instances/NightmareKamaloka.xml b/trunk/dist/game/data/instances/NightmareKamaloka.xml
new file mode 100644
index 0000000000..d8a1e67478
--- /dev/null
+++ b/trunk/dist/game/data/instances/NightmareKamaloka.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/trunk/dist/game/data/scripts/ai/group_template/MinionSpawnManager.java b/trunk/dist/game/data/scripts/ai/group_template/MinionSpawnManager.java
index b772ba7fc9..2104836528 100644
--- a/trunk/dist/game/data/scripts/ai/group_template/MinionSpawnManager.java
+++ b/trunk/dist/game/data/scripts/ai/group_template/MinionSpawnManager.java
@@ -357,6 +357,10 @@ final class MinionSpawnManager extends AbstractNpcAI
NPC.add(25794); // Kernon
NPC.add(25797); // Meanas Anor
NPC.add(25800); // Mammon Collector Talos
+ NPC.add(26094); // Sola
+ NPC.add(26096); // Ariarc
+ NPC.add(26099); // Sirra
+ NPC.add(26102); // Dark Rider
NPC.add(27036); // Calpico
NPC.add(27041); // Varangka's Messenger
NPC.add(27062); // Tanukia
diff --git a/trunk/dist/game/data/scripts/instances/InstanceLoader.java b/trunk/dist/game/data/scripts/instances/InstanceLoader.java
index 285623ad21..3bc5319f86 100644
--- a/trunk/dist/game/data/scripts/instances/InstanceLoader.java
+++ b/trunk/dist/game/data/scripts/instances/InstanceLoader.java
@@ -51,6 +51,7 @@ import instances.MithrilMine.MithrilMine;
import instances.MonasteryOfSilence1.MonasteryOfSilence1;
import instances.MonasteryOfSilence2.MonasteryOfSilence2;
import instances.MuseumDungeon.MuseumDungeon;
+import instances.NightmareKamaloka.NightmareKamaloka;
import instances.NornilsGarden.NornilsGarden;
import instances.PailakaDevilsLegacy.PailakaDevilsLegacy;
import instances.PailakaSongOfIceAndFire.PailakaSongOfIceAndFire;
@@ -99,6 +100,7 @@ final class InstanceLoader
MonasteryOfSilence1.class,
MonasteryOfSilence2.class,
MuseumDungeon.class,
+ NightmareKamaloka.class,
NornilsGarden.class,
PailakaDevilsLegacy.class,
PailakaSongOfIceAndFire.class,
diff --git a/trunk/dist/game/data/scripts/instances/NightmareKamaloka/NightmareKamaloka.java b/trunk/dist/game/data/scripts/instances/NightmareKamaloka/NightmareKamaloka.java
new file mode 100644
index 0000000000..294519675d
--- /dev/null
+++ b/trunk/dist/game/data/scripts/instances/NightmareKamaloka/NightmareKamaloka.java
@@ -0,0 +1,218 @@
+/*
+ * 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.NightmareKamaloka;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.l2jmobius.gameserver.instancemanager.InstanceManager;
+import com.l2jmobius.gameserver.model.L2Party;
+import com.l2jmobius.gameserver.model.Location;
+import com.l2jmobius.gameserver.model.PcCondOverride;
+import com.l2jmobius.gameserver.model.actor.L2Npc;
+import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jmobius.gameserver.model.actor.instance.L2RaidBossInstance;
+import com.l2jmobius.gameserver.model.instancezone.InstanceWorld;
+import com.l2jmobius.gameserver.model.quest.QuestState;
+import com.l2jmobius.gameserver.model.quest.State;
+import com.l2jmobius.gameserver.network.SystemMessageId;
+import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
+import com.l2jmobius.gameserver.util.Util;
+
+import instances.AbstractInstance;
+import quests.Q00760_BlockTheExit.Q00760_BlockTheExit;
+
+/**
+ * @author NviX
+ */
+public final class NightmareKamaloka extends AbstractInstance
+{
+ class NKWorld extends InstanceWorld
+ {
+ L2RaidBossInstance sola = null;
+ L2RaidBossInstance ariarc = null;
+ L2RaidBossInstance sirra = null;
+ L2RaidBossInstance dark_rider = null;
+ final List playersInside = new ArrayList<>();
+ }
+
+ // NPC
+ private static final int KURTIZ = 30870;
+ // Bosses & Monsters
+ private static final int MINO = 26093;
+ private static final int SOLA = 26094;
+ private static final int ARIARC = 26096;
+ private static final int SIRRA = 26099;
+ private static final int DARK_RIDER = 26102;
+ // Instance
+ private static final int TEMPLATE_ID = 258;
+ // Doors
+ private static final int DOOR_1 = 18170002;
+ private static final int DOOR_2 = 18170004;
+ private static final int DOOR_3 = 18170006;
+ private static final int DOOR_4 = 18170008;
+ // Locations
+ private static final Location START_LOC = new Location(-42921, -16243, -12212);
+ private static final Location SOLA_SPAWN_LOC = new Location(-45719, -16241, -11965);
+ private static final Location ARIARC_SPAWN_LOC = new Location(-48055, -16243, -11702);
+ private static final Location SIRRA_SPAWN_LOC = new Location(-50385, -16240, -11439);
+ private static final Location DARK_RIDER_SPAWN_LOC = new Location(-54172, -16241, -10995);
+
+ public NightmareKamaloka()
+ {
+ super(NightmareKamaloka.class.getSimpleName());
+ addStartNpc(KURTIZ);
+ addTalkId(KURTIZ);
+ addKillId(MINO);
+ addKillId(SOLA);
+ addKillId(ARIARC);
+ addKillId(SIRRA);
+ addKillId(DARK_RIDER);
+ }
+
+ @Override
+ public void onEnterInstance(L2PcInstance player, InstanceWorld world, boolean firstEntrance)
+ {
+ if (firstEntrance)
+ {
+ final NKWorld tmpworld = (NKWorld) world;
+ if (!player.isInParty())
+ {
+ tmpworld.addAllowed(player.getObjectId());
+ tmpworld.playersInside.add(player);
+ teleportPlayer(player, START_LOC, tmpworld.getInstanceId(), false);
+ }
+ else
+ {
+ for (L2PcInstance member : player.getParty().getMembers())
+ {
+ tmpworld.addAllowed(member.getObjectId());
+ tmpworld.playersInside.add(member);
+ teleportPlayer(member, START_LOC, tmpworld.getInstanceId(), false);
+ }
+ }
+ }
+ else
+ {
+ teleportPlayer(player, START_LOC, world.getInstanceId(), false);
+ }
+ }
+
+ @Override
+ public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
+ {
+ if (event.equals("enter"))
+ {
+ enterInstance(player, new NKWorld(), "NightmareKamaloka.xml", TEMPLATE_ID);
+ }
+ return super.onAdvEvent(event, npc, player);
+ }
+
+ @Override
+ protected boolean checkConditions(L2PcInstance player)
+ {
+ if (player.canOverrideCond(PcCondOverride.INSTANCE_CONDITIONS))
+ {
+ return true;
+ }
+ final L2Party party = player.getParty();
+ if (party == null)
+ {
+ player.sendPacket(SystemMessageId.YOU_ARE_NOT_CURRENTLY_IN_A_PARTY_SO_YOU_CANNOT_ENTER);
+ return false;
+ }
+ if (party.getLeader() != player)
+ {
+ player.sendPacket(SystemMessageId.ONLY_A_PARTY_LEADER_CAN_MAKE_THE_REQUEST_TO_ENTER);
+ return false;
+ }
+ for (L2PcInstance member : party.getMembers())
+ {
+ if (member.getLevel() < 99)
+ {
+ party.broadcastPacket(SystemMessage.getSystemMessage(SystemMessageId.C1_S_LEVEL_DOES_NOT_CORRESPOND_TO_THE_REQUIREMENTS_FOR_ENTRY).addPcName(member));
+ return false;
+ }
+ if (!Util.checkIfInRange(1000, party.getLeader(), member, true))
+ {
+ party.broadcastPacket(SystemMessage.getSystemMessage(SystemMessageId.C1_IS_IN_A_LOCATION_WHICH_CANNOT_BE_ENTERED_THEREFORE_IT_CANNOT_BE_PROCESSED).addPcName(member));
+ return false;
+ }
+ final Long reenterTime = InstanceManager.getInstance().getInstanceTime(member.getObjectId(), TEMPLATE_ID);
+ if (System.currentTimeMillis() < reenterTime)
+ {
+ party.broadcastPacket(SystemMessage.getSystemMessage(SystemMessageId.C1_MAY_NOT_RE_ENTER_YET));
+ return false;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
+ {
+ final InstanceWorld tmpWorld = InstanceManager.getInstance().getWorld(npc.getInstanceId());
+ if ((tmpWorld != null) && (tmpWorld instanceof NKWorld))
+ {
+ final NKWorld world = (NKWorld) tmpWorld;
+ switch (npc.getId())
+ {
+ case MINO:
+ {
+ openDoor(DOOR_1, world.getInstanceId());
+ world.sola = (L2RaidBossInstance) addSpawn(SOLA, SOLA_SPAWN_LOC, false, 0, true, world.getInstanceId());
+ break;
+ }
+ case SOLA:
+ {
+ openDoor(DOOR_2, world.getInstanceId());
+ world.ariarc = (L2RaidBossInstance) addSpawn(ARIARC, ARIARC_SPAWN_LOC, false, 0, true, world.getInstanceId());
+ break;
+ }
+ case ARIARC:
+ {
+ openDoor(DOOR_3, world.getInstanceId());
+ world.sirra = (L2RaidBossInstance) addSpawn(SIRRA, SIRRA_SPAWN_LOC, false, 0, true, world.getInstanceId());
+ break;
+ }
+ case SIRRA:
+ {
+ openDoor(DOOR_4, world.getInstanceId());
+ world.dark_rider = (L2RaidBossInstance) addSpawn(DARK_RIDER, DARK_RIDER_SPAWN_LOC, false, 0, true, world.getInstanceId());
+ break;
+ }
+ case DARK_RIDER:
+ {
+ for (L2PcInstance plr : world.playersInside)
+ {
+ if ((plr != null) && (plr.getInstanceId() == world.getInstanceId()))
+ {
+ final QuestState qs = plr.getQuestState(Q00760_BlockTheExit.class.getSimpleName());
+ if ((qs != null) && (qs.getState() == State.STARTED) && qs.isCond(1))
+ {
+ qs.setCond(2);
+ }
+ }
+ }
+ finishInstance(world);
+ break;
+ }
+ }
+ }
+ return super.onKill(npc, killer, isSummon);
+ }
+}
diff --git a/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-1.html b/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-1.html
new file mode 100644
index 0000000000..c4a9f3a216
--- /dev/null
+++ b/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-1.html
@@ -0,0 +1,6 @@
+Captain Kurtiz:
+Do you know about Nightmare Kamaloka? It's a place for those who had to leave their homes, waiting for the right moment to go back.
+The way to Nightmare Kamaloka is very dangerous and it changes every time, so it's not just for anyone. The reason why people still went though, is because it was a safe place.
+Most of those people were fugitives or those whose lives were threatened.
+
+
\ No newline at end of file
diff --git a/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-2.html b/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-2.html
new file mode 100644
index 0000000000..43dc726c02
--- /dev/null
+++ b/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-2.html
@@ -0,0 +1,6 @@
+Captain Kurtiz:
+Those creatures grew stonger there and whenever the gates opened, they were able to go to the places they wanted.
+However, when the Seal of Punishment was released, it affected multiple dimensions. A lot of things were changed because of that impact, and even Nightmare Kamaloka was affected. I'm not sure about the details, but the various paths to Nightmare Kamaloka stopped working.
+The problem is that the dimensional door is linked to a place near Aden.
+
+
\ No newline at end of file
diff --git a/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-3.html b/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-3.html
new file mode 100644
index 0000000000..ab6d9940bf
--- /dev/null
+++ b/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-3.html
@@ -0,0 +1,5 @@
+Captain Kurtiz:
+Those creatures in Nightmare Kamaloka have been trying to come out to Aden. That's why we had to plan a battle there. The difference in the dimensions is making it difficult, though. It's because they keep appearing out from the other dimensions, even if we get rid of them.
+We have to defeat the creatures from each of the dimensions. In order to do that, we need the help of as many adventurers as possible. Thanks for listening to me.
+
+
\ No newline at end of file
diff --git a/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-4.html b/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-4.html
new file mode 100644
index 0000000000..d21bf26da7
--- /dev/null
+++ b/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-4.html
@@ -0,0 +1,4 @@
+Captain Kurtiz:
+
+Are you here now? Collect army soldiers and battle finally Nightmare Kamaloka!
+
\ No newline at end of file
diff --git a/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-5.html b/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-5.html
new file mode 100644
index 0000000000..1eefba0b5a
--- /dev/null
+++ b/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-5.html
@@ -0,0 +1,6 @@
+Captain Kurtiz:
+
+Oh, you're alive? I am very proud of you and your soldiers that you were able to slay the monsters.
+You deserve my reward.
+
+
\ No newline at end of file
diff --git a/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-6.html b/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-6.html
new file mode 100644
index 0000000000..05de9c990b
--- /dev/null
+++ b/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-6.html
@@ -0,0 +1,5 @@
+Captain Kurtiz:
+
+You already told me that you are a brave warrior and got my reward.
+(You already complete this quest today.)
+
\ No newline at end of file
diff --git a/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-7.html b/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-7.html
new file mode 100644
index 0000000000..33bdc4f4c4
--- /dev/null
+++ b/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-7.html
@@ -0,0 +1,4 @@
+Captain Kurtiz:
+I'll tell you again. Please don't let them use Aden as an exit. Go to Nightmare Kamaloka and defeat Tracker Mino, Ill-fated Princess Sola, Fallen Angel Ariarc, and Confined Princess Sirra, in that order. Lastly, defeat Betrayed Dark Rider.
+The monsters in Nightmare Kamaloka won't be easy to defeat, so make sure to take your friends with you. I won't say thanks until you come back safe and sound.
+
\ No newline at end of file
diff --git a/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-8.html b/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-8.html
new file mode 100644
index 0000000000..c9ed6eed5d
--- /dev/null
+++ b/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/30870-8.html
@@ -0,0 +1,4 @@
+Captain Kurtiz:
+
+Keep reward. Now all the soldiers will know that you are a brave killer monsters!
+
\ No newline at end of file
diff --git a/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/Q00760_BlockTheExit.java b/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/Q00760_BlockTheExit.java
new file mode 100644
index 0000000000..1127eec8de
--- /dev/null
+++ b/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/Q00760_BlockTheExit.java
@@ -0,0 +1,117 @@
+/*
+ * 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 quests.Q00760_BlockTheExit;
+
+import com.l2jmobius.gameserver.enums.QuestType;
+import com.l2jmobius.gameserver.model.actor.L2Npc;
+import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jmobius.gameserver.model.quest.Quest;
+import com.l2jmobius.gameserver.model.quest.QuestState;
+import com.l2jmobius.gameserver.model.quest.State;
+
+/**
+ * @author NviX
+ */
+public class Q00760_BlockTheExit extends Quest
+{
+ // NPC
+ private static final int KURTIZ = 30870;
+ // Monsters
+ private static final int DARK_RIDER = 26102;
+ // Items
+ private static final int CURTIZ_REWARD_BOX = 46560;
+ // Misc
+ private static final int MIN_LEVEL = 99;
+ private static final int MAX_LEVEL = 105;
+
+ public Q00760_BlockTheExit()
+ {
+ super(760, Q00760_BlockTheExit.class.getSimpleName(), "Block the Exit");
+ addStartNpc(KURTIZ);
+ addTalkId(KURTIZ);
+ addKillId(DARK_RIDER);
+ addCondMinLevel(MIN_LEVEL, "no_level.html");
+ addCondMaxLevel(MAX_LEVEL, "no_level.html");
+ }
+
+ @Override
+ public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
+ {
+ final String htmltext = event;
+ final QuestState qs = getQuestState(player, false);
+ if (qs == null)
+ {
+ return getNoQuestMsg(player);
+ }
+
+ switch (event)
+ {
+ case "30870-7.html":
+ {
+ qs.startQuest();
+ break;
+ }
+ case "30870-8.html":
+ {
+ giveItems(player, CURTIZ_REWARD_BOX, 1);
+ qs.exitQuest(QuestType.DAILY, true);
+ break;
+ }
+ }
+ return htmltext;
+ }
+
+ @Override
+ public String onTalk(L2Npc npc, L2PcInstance player)
+ {
+ final QuestState qs = getQuestState(player, true);
+ String htmltext = getNoQuestMsg(player);
+ if (qs == null)
+ {
+ return htmltext;
+ }
+
+ if (qs.isCreated())
+ {
+ htmltext = "30870-1.html";
+ }
+ else if (qs.isStarted())
+ {
+ if (qs.isCond(1))
+ {
+ htmltext = "30870-4.html";
+ }
+ else if (qs.isCond(2))
+ {
+ htmltext = "30870-5.html";
+ }
+ }
+ else if (qs.isCompleted())
+ {
+ if (!qs.isNowAvailable())
+ {
+ htmltext = "30870-6.html";
+ }
+ else
+ {
+ qs.setState(State.CREATED);
+ htmltext = "30870-1.html";
+ }
+ }
+ return htmltext;
+ }
+}
diff --git a/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/no_level.html b/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/no_level.html
new file mode 100644
index 0000000000..c0a008ec5b
--- /dev/null
+++ b/trunk/dist/game/data/scripts/quests/Q00760_BlockTheExit/no_level.html
@@ -0,0 +1,4 @@
+Kurtiz:
+Please, go away.
+(This quest is available for characters lvls 99-105.)
+
\ No newline at end of file
diff --git a/trunk/dist/game/data/scripts/quests/QuestMasterHandler.java b/trunk/dist/game/data/scripts/quests/QuestMasterHandler.java
index 36fe41db21..be8ed72021 100644
--- a/trunk/dist/game/data/scripts/quests/QuestMasterHandler.java
+++ b/trunk/dist/game/data/scripts/quests/QuestMasterHandler.java
@@ -182,6 +182,7 @@ import quests.Q00754_AssistingTheRebelForces.Q00754_AssistingTheRebelForces;
import quests.Q00755_InNeedOfPetras.Q00755_InNeedOfPetras;
import quests.Q00756_TopQualityPetra.Q00756_TopQualityPetra;
import quests.Q00757_TriolsMovement.Q00757_TriolsMovement;
+import quests.Q00760_BlockTheExit.Q00760_BlockTheExit;
import quests.Q00901_HowLavasaurusesAreMade.Q00901_HowLavasaurusesAreMade;
import quests.Q00902_ReclaimOurEra.Q00902_ReclaimOurEra;
import quests.Q00903_TheCallOfAntharas.Q00903_TheCallOfAntharas;
@@ -479,6 +480,7 @@ final class QuestMasterHandler
Q00755_InNeedOfPetras.class,
Q00756_TopQualityPetra.class,
Q00757_TriolsMovement.class,
+ Q00760_BlockTheExit.class,
Q00901_HowLavasaurusesAreMade.class,
Q00902_ReclaimOurEra.class,
Q00903_TheCallOfAntharas.class,
diff --git a/trunk/dist/game/data/stats/items/10200-10299.xml b/trunk/dist/game/data/stats/items/10200-10299.xml
index f2dd0cef39..6a8e22023f 100644
--- a/trunk/dist/game/data/stats/items/10200-10299.xml
+++ b/trunk/dist/game/data/stats/items/10200-10299.xml
@@ -177,15 +177,16 @@
-
-
+
-
+
+
diff --git a/trunk/dist/game/data/stats/items/46500-46599.xml b/trunk/dist/game/data/stats/items/46500-46599.xml
index 764914d222..2dba510045 100644
--- a/trunk/dist/game/data/stats/items/46500-46599.xml
+++ b/trunk/dist/game/data/stats/items/46500-46599.xml
@@ -726,7 +726,8 @@
-
-
+
+
@@ -734,6 +735,7 @@
+
-
diff --git a/trunk/dist/game/data/stats/npcs/26000-26099.xml b/trunk/dist/game/data/stats/npcs/26000-26099.xml
index ae15fa298d..dc09684ecb 100644
--- a/trunk/dist/game/data/stats/npcs/26000-26099.xml
+++ b/trunk/dist/game/data/stats/npcs/26000-26099.xml
@@ -4855,135 +4855,214 @@
-
+
HUMAN
MALE
+
-
-
-
+
+
+
-
-
+
+
-
-
+
+
+
+
+
+ true
+
-
+
DEMONIC
FEMALE
+
-
-
-
+
+
+
-
-
+
+
-
+
+
+
+
+ true
+
+
+ SOLA
+
+
-
-
+
HUMAN
FEMALE
+
+
+
+
+
+
-
+
-
+
+
+
+
+
+
+
+ true
+
+
+ SOLA
+
+
-
+
DIVINE
- FEMALE
-
+ MALE
+
-
-
-
+
+
+
-
-
+
+
-
+
-
+
+
+
+ true
+
+
+ ARIARC
+
+
-
-
+
HUMAN
- FEMALE
+ MALE
+
+
+
+
+
+
-
+
-
+
+
+
+
+
+
+
+
+ true
+
+
+ ARIARC
+
+
-
-
+
HUMAN
- FEMALE
+ MALE
+
+
+
+
+
+
+
+
-
+
+ 710
-
+
+
+
+
+
+
+
+ true
+
+
+ ARIARC
+
+
@@ -4993,25 +5072,34 @@
ELEMENTAL
FEMALE
-
+
-
-
-
+
+
+
-
-
+
+
-
+
-
+
+ true
+
+
+ SIRRA
+
+
+
+
+
diff --git a/trunk/dist/game/data/stats/npcs/26100-26199.xml b/trunk/dist/game/data/stats/npcs/26100-26199.xml
index c422220778..f044efb1c9 100644
--- a/trunk/dist/game/data/stats/npcs/26100-26199.xml
+++ b/trunk/dist/game/data/stats/npcs/26100-26199.xml
@@ -1,50 +1,88 @@
-
-
+
HUMAN
- FEMALE
+ MALE
+
+
+
+
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+ true
+
+
+ SIRRA
+
+
-
-
- HUMAN
- FEMALE
+
+ ELEMENTAL
+ MALE
+
+
+
+
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+ true
+
+
+ SIRRA
+
+
-
-
+
DRAGON
-
+ MALE
+
-
-
-
+
+
+
-
-
+
+
@@ -54,107 +92,104 @@
-
-
+
+
+
+
+
+
+
-
+
+
+ DARKRIDER
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -162,35 +197,73 @@
-
-
+
HUMAN
- FEMALE
+ MALE
+
+
+
+
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+ true
+
+
+ DARKRIDER
+
+
-
-
+
HUMAN
- FEMALE
+ MALE
+
+
+
+
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+ true
+
+
+ DARKRIDER
+
+
diff --git a/trunk/dist/game/data/stats/skills/16200-16299.xml b/trunk/dist/game/data/stats/skills/16200-16299.xml
index 018603ae3a..9e57d53a45 100644
--- a/trunk/dist/game/data/stats/skills/16200-16299.xml
+++ b/trunk/dist/game/data/stats/skills/16200-16299.xml
@@ -55,14 +55,24 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/trunk/dist/game/data/stats/skills/16400-16499.xml b/trunk/dist/game/data/stats/skills/16400-16499.xml
index a2524860d0..6ba2f2861f 100644
--- a/trunk/dist/game/data/stats/skills/16400-16499.xml
+++ b/trunk/dist/game/data/stats/skills/16400-16499.xml
@@ -424,24 +424,65 @@
-
-
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
@@ -452,31 +493,118 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/trunk/dist/game/data/stats/skills/18500-18599.xml b/trunk/dist/game/data/stats/skills/18500-18599.xml
index 0a86d27572..3112d0a4e4 100644
--- a/trunk/dist/game/data/stats/skills/18500-18599.xml
+++ b/trunk/dist/game/data/stats/skills/18500-18599.xml
@@ -310,12 +310,24 @@
-
-
-
+
+ 36553,1,20;36554,1,15;36548,1,15;36549,1,10;17527,1,7;17526,1,2;9552,1,5;9553,1,5;9554,1,5;9555,1,5;9556,1,5;9557,1,5;19448,1,0.7;19449,1,0.3
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/trunk/java/com/l2jmobius/gameserver/model/actor/L2Attackable.java b/trunk/java/com/l2jmobius/gameserver/model/actor/L2Attackable.java
index 1d114c5f42..4c630e594c 100644
--- a/trunk/java/com/l2jmobius/gameserver/model/actor/L2Attackable.java
+++ b/trunk/java/com/l2jmobius/gameserver/model/actor/L2Attackable.java
@@ -494,9 +494,9 @@ public class L2Attackable extends L2Npc
// mob = 24, atk = 50, diff = 26 (no xp)
final int levelDiff = attacker.getLevel() - getLevel();
- final int[] expSp = calculateExpAndSp(levelDiff, damage, totalDamage);
+ final long[] expSp = calculateExpAndSp(levelDiff, damage, totalDamage);
long exp = expSp[0];
- int sp = expSp[1];
+ int sp = (int) expSp[1];
if (((levelDiff >= 10) && (levelDiff <= 14)) || ((levelDiff <= -10) && (levelDiff >= -14))) // 30% on 10 - 14 level diff
{
@@ -615,9 +615,9 @@ public class L2Attackable extends L2Npc
final int levelDiff = partyLvl - getLevel();
// Calculate Exp and SP rewards
- final int[] expSp = calculateExpAndSp(levelDiff, partyDmg, totalDamage);
+ final long[] expSp = calculateExpAndSp(levelDiff, partyDmg, totalDamage);
long exp = expSp[0];
- int sp = expSp[1];
+ int sp = (int) expSp[1];
if (Config.L2JMOD_CHAMPION_ENABLE && isChampion())
{
@@ -1347,7 +1347,7 @@ public class L2Attackable extends L2Npc
* @param totalDamage The total damage done
* @return
*/
- private int[] calculateExpAndSp(int diff, int damage, long totalDamage)
+ private long[] calculateExpAndSp(int diff, int damage, long totalDamage)
{
double xp;
double sp;
@@ -1388,9 +1388,9 @@ public class L2Attackable extends L2Npc
sp = 0;
}
}
- final int[] tmp =
+ final long[] tmp =
{
- (int) xp,
+ (long) xp,
(int) sp
};
return tmp;
diff --git a/trunk/java/com/l2jmobius/gameserver/util/MinionList.java b/trunk/java/com/l2jmobius/gameserver/util/MinionList.java
index 2d26b3aba8..85a14230bb 100644
--- a/trunk/java/com/l2jmobius/gameserver/util/MinionList.java
+++ b/trunk/java/com/l2jmobius/gameserver/util/MinionList.java
@@ -16,6 +16,7 @@
*/
package com.l2jmobius.gameserver.util;
+import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.logging.Logger;
@@ -44,6 +45,15 @@ public class MinionList
/** List containing the cached deleted minions for reuse */
protected List _reusedMinionReferences = null;
+ private final static List KEEP_MINION_AFTER_DEATH_BOSS_IDS = new ArrayList<>();
+ static
+ {
+ KEEP_MINION_AFTER_DEATH_BOSS_IDS.add(26094);
+ KEEP_MINION_AFTER_DEATH_BOSS_IDS.add(26096);
+ KEEP_MINION_AFTER_DEATH_BOSS_IDS.add(26099);
+ KEEP_MINION_AFTER_DEATH_BOSS_IDS.add(26102);
+ }
+
public MinionList(L2MonsterInstance pMaster)
{
if (pMaster == null)
@@ -169,7 +179,7 @@ public class MinionList
*/
public void onMasterDie(boolean force)
{
- if (_master.isRaid() || force)
+ if ((_master.isRaid() && !KEEP_MINION_AFTER_DEATH_BOSS_IDS.contains(_master.getId())) || force)
{
deleteSpawnedMinions();
}