Guard Silvan:
Well, I have a little favor to ask you.
There've been a lot of trouble around here lately. I can't even get a decent sleep, so I'm barely standing straight. Ugh.
-
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11031_TrainingBeginsNow/Q11031_TrainingBeginsNow.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11031_TrainingBeginsNow/Q11031_TrainingBeginsNow.java
index 1f74c63501..f184df3bf3 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11031_TrainingBeginsNow/Q11031_TrainingBeginsNow.java
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11031_TrainingBeginsNow/Q11031_TrainingBeginsNow.java
@@ -21,6 +21,7 @@ import java.util.Set;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.QuestSound;
+import org.l2jmobius.gameserver.instancemanager.QuestManager;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@@ -38,6 +39,8 @@ import org.l2jmobius.gameserver.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import org.l2jmobius.gameserver.network.serverpackets.ExTutorialShowId;
+import quests.Q11032_CurseOfUndying.Q11032_CurseOfUndying;
+
/**
* Training Begins Now (11031)
* @URL https://l2wiki.com/Training_Begins_Now
@@ -131,6 +134,13 @@ public class Q11031_TrainingBeginsNow extends Quest
addExpAndSp(player, 48229, 43);
qs.exitQuest(false, true);
htmltext = event;
+
+ // Initialize next quest.
+ final Quest nextQuest = QuestManager.getInstance().getQuest(Q11032_CurseOfUndying.class.getSimpleName());
+ if (nextQuest != null)
+ {
+ nextQuest.newQuestState(player);
+ }
}
break;
}
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11032_CurseOfUndying/33178-01.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11032_CurseOfUndying/33178-01.html
new file mode 100644
index 0000000000..51afaf8410
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11032_CurseOfUndying/33178-01.html
@@ -0,0 +1,5 @@
+Guard Silvan:
+Will, I have a little favor to ask of you.
+There've been a lot of trouble around here lately. I can't even get a decent sleep, so I'm barely standing straight. Ugh.
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11032_CurseOfUndying/33178-02.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11032_CurseOfUndying/33178-02.html
new file mode 100644
index 0000000000..bb8e35ba66
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11032_CurseOfUndying/33178-02.html
@@ -0,0 +1,6 @@
+Guard Silvan:
+Ugh, have you seen Nasty Zombies and Nasty Zombie Lords around?
+Ugh, I can't sleep because there are so many of them, ugh.
+I'm not sure... May be, there is some curse on those dead people, may be, that's the case, ugh.
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11032_CurseOfUndying/33178-03.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11032_CurseOfUndying/33178-03.html
new file mode 100644
index 0000000000..9091dae81d
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11032_CurseOfUndying/33178-03.html
@@ -0,0 +1,6 @@
+Guard Silvan:
+All we can do here is to help the dead to go to their last home. It is necessary to kill Nasty Zombies and Nasty Zombie Lords.
+Please, do it for the sake of peace between the living and the dead. Hyaaaaah....
+By the way, it will be easier to complete the mission if you use Use Supplies Automatically function. Just try it out and you'll see.
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11032_CurseOfUndying/34505-01.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11032_CurseOfUndying/34505-01.html
new file mode 100644
index 0000000000..7f6426fcec
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11032_CurseOfUndying/34505-01.html
@@ -0,0 +1,4 @@
+Tarti:
+Have you defeated the Nasty Zombies and Nasty Zombie Lords?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11032_CurseOfUndying/34505-02.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11032_CurseOfUndying/34505-02.html
new file mode 100644
index 0000000000..0bc35f5c71
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11032_CurseOfUndying/34505-02.html
@@ -0,0 +1,5 @@
+Tarti:
+Sometimes even death doesn't bring peace. That's horrible... Your training's going very well by the way. Congratulations.
+I think I'll tell you about class change. It's pretty simple even if you're doing it for the first time.
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11032_CurseOfUndying/34505-03.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11032_CurseOfUndying/34505-03.html
new file mode 100644
index 0000000000..12ed97f739
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11032_CurseOfUndying/34505-03.html
@@ -0,0 +1,7 @@
+Tarti:
+To get stronger you need to change class.
+Once you change class you'll be able to increase your knowledge and learn even more skills. You will learn to handle new weapons and get new abilities.
+In order to change class, however, you need to gain a lot of power. I ree that the challenges you've faced have made you tougher and stronger.
+Are you ready to change class?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11032_CurseOfUndying/34505-04.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11032_CurseOfUndying/34505-04.html
new file mode 100644
index 0000000000..35bbfd1c13
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11032_CurseOfUndying/34505-04.html
@@ -0,0 +1,4 @@
+Tarti:
+Congratulations! Once you change your class you can learn new skills. That happens every time you change class.
+Keep in mind, though, that class change is only possible in towns.
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11032_CurseOfUndying/Q11032_CurseOfUndying.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11032_CurseOfUndying/Q11032_CurseOfUndying.java
new file mode 100644
index 0000000000..4d0a1436ae
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11032_CurseOfUndying/Q11032_CurseOfUndying.java
@@ -0,0 +1,247 @@
+/*
+ * 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.Q11032_CurseOfUndying;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.l2jmobius.Config;
+import org.l2jmobius.gameserver.data.xml.impl.CategoryData;
+import org.l2jmobius.gameserver.enums.CategoryType;
+import org.l2jmobius.gameserver.enums.QuestSound;
+import org.l2jmobius.gameserver.model.Location;
+import org.l2jmobius.gameserver.model.actor.Npc;
+import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.ListenerRegisterType;
+import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent;
+import org.l2jmobius.gameserver.model.events.annotations.RegisterType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin;
+import org.l2jmobius.gameserver.model.holders.ItemHolder;
+import org.l2jmobius.gameserver.model.holders.NpcLogListHolder;
+import org.l2jmobius.gameserver.model.quest.Quest;
+import org.l2jmobius.gameserver.model.quest.QuestState;
+import org.l2jmobius.gameserver.model.quest.State;
+import org.l2jmobius.gameserver.network.NpcStringId;
+import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
+import org.l2jmobius.gameserver.network.serverpackets.ExTutorialShowId;
+import org.l2jmobius.gameserver.network.serverpackets.classchange.ExRequestClassChangeUi;
+
+import quests.Q11031_TrainingBeginsNow.Q11031_TrainingBeginsNow;
+
+/**
+ * Curse of Undying (11032)
+ * @URL https://l2wiki.com/Curse_of_Undying
+ * @author Dmitri, Mobius
+ */
+public class Q11032_CurseOfUndying extends Quest
+{
+ // NPCs
+ private static final int SILVAN = 33178;
+ private static final int TARTI = 34505;
+ private static final int DISGUSTING_ZOMBIES = 24382;
+ private static final int THE_HIDEOUS_LORD_ZOMBIE = 24383;
+ // Item
+ private static final ItemHolder SOE_SILVAN = new ItemHolder(80677, 1);
+ // Location
+ private static final Location TRAINING_GROUNDS_TELEPORT = new Location(-19204, 138941, -3896);
+ // Misc
+ private static final String KILL_COUNT_VAR = "KillCount";
+
+ public Q11032_CurseOfUndying()
+ {
+ super(11032);
+ addStartNpc(SILVAN);
+ addTalkId(SILVAN, TARTI);
+ addKillId(DISGUSTING_ZOMBIES, THE_HIDEOUS_LORD_ZOMBIE);
+ registerQuestItems(SOE_SILVAN.getId());
+ addCondCompletedQuest(Q11031_TrainingBeginsNow.class.getSimpleName(), getNoQuestMsg(null));
+ setQuestNameNpcStringId(NpcStringId.LV_1_20_CURSE_OF_UNDYING);
+ }
+
+ @Override
+ public String onAdvEvent(String event, Npc npc, PlayerInstance player)
+ {
+ String htmltext = null;
+ QuestState qs = getQuestState(player, false);
+ if (qs == null)
+ {
+ return htmltext;
+ }
+
+ switch (event)
+ {
+ case "33178-03.html":
+ {
+ htmltext = event;
+ break;
+ }
+ case "33178-02.html":
+ {
+ qs.startQuest();
+ player.sendPacket(new ExTutorialShowId(23)); // Adventurers Guide
+ htmltext = event;
+ break;
+ }
+ case "34505-04.html":
+ {
+ qs.setCond(4, true);
+ showOnScreenMsg(player, NpcStringId.CLASS_TRANSFER_IS_AVAILABLE_NCLICK_THE_CLASS_TRANSFER_ICON_IN_THE_NOTIFICATION_WINDOW_TO_TRANSFER_YOUR_CLASS, ExShowScreenMessage.TOP_CENTER, 10000);
+ htmltext = event;
+ break;
+ }
+ case "34505-03.html":
+ {
+ qs.setCond(3, true);
+ player.sendPacket(new ExTutorialShowId(22)); // Adventurers Guide
+ htmltext = event;
+ break;
+ }
+ case "teleport":
+ {
+ if (qs.isCond(1))
+ {
+ player.teleToLocation(TRAINING_GROUNDS_TELEPORT);
+ }
+ break;
+ }
+ case "34505-02.html":
+ {
+ if (qs.isCond(2))
+ {
+ showOnScreenMsg(player, NpcStringId.FIRST_CLASS_TRANSFER_IS_AVAILABLE_NGO_SEE_TARTI_IN_THE_TOWN_OF_GLUDIO_TO_START_THE_CLASS_TRANSFER, ExShowScreenMessage.TOP_CENTER, 10000);
+ addExpAndSp(player, 787633, 708);
+ qs.exitQuest(false, true);
+ if (CategoryData.getInstance().isInCategory(CategoryType.FIRST_CLASS_GROUP, player.getClassId().getId()))
+ {
+ player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
+ }
+ htmltext = event;
+ break;
+ }
+ }
+ }
+ return htmltext;
+ }
+
+ @Override
+ public String onTalk(Npc npc, PlayerInstance player)
+ {
+ final QuestState qs = getQuestState(player, true);
+ String htmltext = getNoQuestMsg(player);
+
+ switch (qs.getState())
+ {
+ case State.CREATED:
+ {
+ if (npc.getId() == SILVAN)
+ {
+ htmltext = "33178-01.html";
+ }
+ break;
+ }
+ case State.STARTED:
+ {
+ switch (npc.getId())
+ {
+ case SILVAN:
+ {
+ if (qs.isCond(1))
+ {
+ htmltext = "33178-02.html";
+ }
+ break;
+ }
+ case TARTI:
+ {
+ if (qs.isCond(2))
+ {
+ htmltext = "34505-01.html";
+ }
+ break;
+ }
+ }
+ break;
+ }
+ case State.COMPLETED:
+ {
+ htmltext = getAlreadyCompletedMsg(player);
+ break;
+ }
+ }
+ return htmltext;
+ }
+
+ @Override
+ public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
+ {
+ final QuestState qs = getQuestState(killer, false);
+ if ((qs != null) && qs.isCond(1))
+ {
+ final int killCount = qs.getInt(KILL_COUNT_VAR) + 1;
+ if (killCount < 30)
+ {
+ qs.set(KILL_COUNT_VAR, killCount);
+ playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
+ sendNpcLogList(killer);
+ }
+ else
+ {
+ qs.setCond(2, true);
+ qs.unset(KILL_COUNT_VAR);
+ giveItems(killer, SOE_SILVAN);
+ showOnScreenMsg(killer, NpcStringId.USE_SCROLL_OF_ESCAPE_TARTI_IN_YOUR_INVENTORY_NTALK_TO_TARTI_TO_COMPLETE_THE_QUEST, ExShowScreenMessage.TOP_CENTER, 10000);
+ }
+ }
+ return super.onKill(npc, killer, isSummon);
+ }
+
+ @Override
+ public Set getNpcLogList(PlayerInstance player)
+ {
+ final QuestState qs = getQuestState(player, false);
+ if ((qs != null) && qs.isCond(1))
+ {
+ final Set holder = new HashSet<>();
+ holder.add(new NpcLogListHolder(NpcStringId.DEFEAT_THE_SWARM_OF_ZOMBIES.getId(), true, qs.getInt(KILL_COUNT_VAR)));
+ return holder;
+ }
+ return super.getNpcLogList(player);
+ }
+
+ @RegisterEvent(EventType.ON_PLAYER_LOGIN)
+ @RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
+ public void OnPlayerLogin(OnPlayerLogin event)
+ {
+ if (Config.DISABLE_TUTORIAL)
+ {
+ return;
+ }
+
+ final PlayerInstance player = event.getPlayer();
+ if ((player == null) || !CategoryData.getInstance().isInCategory(CategoryType.FIRST_CLASS_GROUP, player.getClassId().getId()))
+ {
+ return;
+ }
+
+ final QuestState qs = getQuestState(player, false);
+ if ((qs != null) && qs.isCompleted())
+ {
+ player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
+ }
+ }
+}
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/QuestMasterHandler.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/QuestMasterHandler.java
index 05057f879f..752213e220 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/QuestMasterHandler.java
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/QuestMasterHandler.java
@@ -165,6 +165,7 @@ import quests.Q10843_AnomalyInTheEnchantedValley.Q10843_AnomalyInTheEnchantedVal
import quests.Q10851_ElvenBotany.Q10851_ElvenBotany;
import quests.Q10856_SuperionAppears.Q10856_SuperionAppears;
import quests.Q11031_TrainingBeginsNow.Q11031_TrainingBeginsNow;
+import quests.Q11032_CurseOfUndying.Q11032_CurseOfUndying;
import quests.custom.Q00529_RegularBarrierMaintenance.Q00529_RegularBarrierMaintenance;
import quests.custom.Q00560_HowToOvercomeFear.Q00560_HowToOvercomeFear;
import quests.custom.Q00589_ASecretChange.Q00589_ASecretChange;
@@ -479,7 +480,7 @@ public class QuestMasterHandler
Q10900_PathToStrength.class, // TODO: Not done.
Q10901_AModelAdventurer.class, // TODO: Not done.
Q11031_TrainingBeginsNow.class,
- Q11032_CurseOfUndying.class, // TODO: Not done.
+ Q11032_CurseOfUndying.class,
Q11034_ResurrectedOne.class, // TODO: Not done.
Q11035_DeathlyMischief.class, // TODO: Not done.
Q11037_WhyAreTheRatelHere.class, // TODO: Not done.
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/not_done/Q11032_CurseOfUndying.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/not_done/Q11032_CurseOfUndying.java
deleted file mode 100644
index fd1f6080b7..0000000000
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/not_done/Q11032_CurseOfUndying.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * This file is part of the L2J Mobius project.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package quests.not_done;
-
-import org.l2jmobius.Config;
-import org.l2jmobius.gameserver.model.quest.Quest;
-
-/**
- * @author Mobius
- */
-public class Q11032_CurseOfUndying extends Quest
-{
- private static final int START_NPC = 33178;
-
- public Q11032_CurseOfUndying()
- {
- super(11032);
- addStartNpc(START_NPC);
- addTalkId(START_NPC);
- addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
- }
-}
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/items/80600-80699.xml b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/items/80600-80699.xml
index 70cb72fb81..55e1d4c7db 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/items/80600-80699.xml
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/items/80600-80699.xml
@@ -706,6 +706,10 @@
+
+
+
+
@@ -718,6 +722,10 @@
+
+
+
+
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/39400-39499.xml b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/39400-39499.xml
index a2c43aaf19..d70e7535b3 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/39400-39499.xml
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/39400-39499.xml
@@ -898,11 +898,47 @@
A14200
+ SELF
+ SINGLE
+ 80677
+ 1
+
+
+ CASTER
+ LAWFUL
+
+
+
+
+
+ -14180
+ 123840
+ -3120
+
+ A14200
+ SELF
+ SINGLE
+ 80678
+ 1
+
+
+ CASTER
+ LAWFUL
+
+
+
+
+
+ -19353
+ 136854
+ -3760
+
+ A1