diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/MissingQuests.txt b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/MissingQuests.txt
index 1d1250759b..547e160280 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/MissingQuests.txt
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/MissingQuests.txt
@@ -232,20 +232,11 @@
10900 Path to Strength
10901 A Model Adventurer
11024 Path of Destiny - Beginning
-11025 Path of Destiny - Proving
11026 Path of Destiny - Conviction
11027 Path of Destiny - Overcome
11028 Wind of Destiny - Encounter
11029 Wind of Destiny - Promise
11030 Wind of Destiny - Choice
-11033 Antidote Ingredients
-11034 Resurrected One
-11035 Deathly Mischief
-11036 Changed Spirits
-11037 Why are the Ratel here?
-11038 Growlers Turned Violent
-11039 Communication Breakdown
-11040 Attack of the Enraged Forest
11041 Check Out the Situation
11042 Suspicious Movements
11043 Someone's Trace
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/30289-01.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/30289-01.html
new file mode 100644
index 0000000000..49fab0ba47
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/30289-01.html
@@ -0,0 +1,7 @@
+
High Priest Raymond:
+Friend... I've been waiting for you.
+An object determined to be from the Wind Spirit Realm was found in the vicinity of the Town of Gludio.
+We asked the Ertheia delegation to investigate since they were in area, but they didn't stay for long.
+Another member of the delegation left to investigate alone.
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/30289-02.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/30289-02.html
new file mode 100644
index 0000000000..a378f59cb5
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/30289-02.html
@@ -0,0 +1,5 @@
+High Priest Raymond:
+They went to the notheast side of the town. Skeletons have never appeared so close to town before, but I heard that they've been showing up more frequently. Initially, the guards were able to quickly neutralize them, but they've no longer been entering town, and instead observe us.
+This is the object we found with the monsters. We were curious about its identity since we'd never seen anything like it, but a passing wiizard told us that it's an object from the Wind Spirit Realm.
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/30289-03.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/30289-03.html
new file mode 100644
index 0000000000..44b8d62cac
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/30289-03.html
@@ -0,0 +1,6 @@
+High Priest Raymond:
+He just referred to himself as a passing wizard. The delegation said someone that would recognize it as something of the wind Spirit Realm would be a powerful wizard, so maybe it's someone from Ivory Tower.
+Go to the notheast side of town. The other Ertheia has already gone towards where the Skeleton Warrior and Skeleton Archers are. Those Skeletons have the Wind Spirit Realm object that you were shown.
+Please be careful. May the power of lights be with you!
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/30289-04.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/30289-04.html
new file mode 100644
index 0000000000..55798421cb
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/30289-04.html
@@ -0,0 +1,5 @@
+High Priest Raymond:
+You've come back safely. Thank goodness.
+I got worried because I couldn't make contact with the other person. Did you find your friend?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/30289-05.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/30289-05.html
new file mode 100644
index 0000000000..51c2238df5
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/30289-05.html
@@ -0,0 +1,6 @@
+High Priest Raymond:
+This is unfortunate. May your friend rest in peace in Einhasad's light.
+But... our guards tell us that the Skeletons are very Weak. You can easily defeat one with your bare hands. I can't understand how a Skeleton could kill a member of your delegation!
+Are you sure someone else wasn't involved?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/30289-06.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/30289-06.html
new file mode 100644
index 0000000000..b26a9c7520
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/30289-06.html
@@ -0,0 +1,4 @@
+High Priest Raymond:
+A Mysterious Wizard? The same person who introduced himself as a wizard just passing by? That can't be... he handed over the object from the Wind Spirit Realm willingly. And why would a wizard go around harming people?
+Anyway, we are wasting time. Shouldn't you hurry and report to Tarti that a member of the Ertheia Delegation was killed?
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/33980-01.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/33980-01.html
new file mode 100644
index 0000000000..651a5ae1c3
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/33980-01.html
@@ -0,0 +1,5 @@
+Mysterios Wizard:
+The deaths of your companions must have been shocking for you. I thought it was strange that Skeletons were appearing near the town.
+Please let your guard down. I'm just a wizard passing by.
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/33980-02.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/33980-02.html
new file mode 100644
index 0000000000..d9d3c12969
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/33980-02.html
@@ -0,0 +1,7 @@
+Mysterious Wizard:
+Me? Perhaps it was some other wizard passing by? There are many wizards in the world.
+By the way, I took the liberty of burying the dead body of the Ertheia, so please do not be angry.
+I will give you this to earn your trust. An item belonging to the dead. It's as if is from another world.
+I like you very much. I hope to see you again.
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/33981-01.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/33981-01.html
new file mode 100644
index 0000000000..86f1836e98
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/33981-01.html
@@ -0,0 +1,6 @@
+Telesha:
+This is the additional delegation member sent to the Town of Gludio.
+Unfortunately, death seemed to have reigned for a while on this body.
+The face is strangely peaceful.
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-01.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-01.html
new file mode 100644
index 0000000000..87b4790901
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-01.html
@@ -0,0 +1,8 @@
+Tarti:
+That's the Breath of Death indeed!
+It's horrible... But thank you for your help!
+You're ready for your second class change so soon? That's incredible! I know that Material Realm people have their powers sealed unlike us, Ertheia.
+You need to change class in order to hone your skills, right?
+I helped you grow stronger the last time you decided to change class... I can help you this time as well.
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-02.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-02.html
new file mode 100644
index 0000000000..4db35a332e
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-02.html
@@ -0,0 +1,3 @@
+Tarti:
+You need to get 40 lvl, if you have already received 40 lvl, refer to tarti, she is waiting for you to continue the quest.
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-03.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-03.html
new file mode 100644
index 0000000000..97a32cd470
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-03.html
@@ -0,0 +1,6 @@
+Tarti:
+Take the stairs to the Einhasad Temple and find Raymond.
+An object from the Wind Spirit realm has been found near the town. He could've given it to me but for some reason decided to hand it over to you personally.
+When she learned about it Telesha visited the Delegation and then quickly left the town. Something must have happened.
+Raymond will fill you in.
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-04.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-04.html
new file mode 100644
index 0000000000..a170007d63
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-04.html
@@ -0,0 +1,4 @@
+Tarti:
+How did it go? Raymond told me you'd left to meet Telesha. What did you learn?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-05.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-05.html
new file mode 100644
index 0000000000..c120eec746
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-05.html
@@ -0,0 +1,6 @@
+Tarti:
+D-dead? It can't be! How could that happen?
+Telesha is very strong! She wanted to become the town's guard captain so bad...
+Do you know who's resposible?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-06.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-06.html
new file mode 100644
index 0000000000..2b73c0a70d
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-06.html
@@ -0,0 +1,5 @@
+Tarti:
+Skeletons?.. Ha!.. I don't believe it! Some measly Skeletons killing Telesha... There must've been someone else!
+You don't know anything about it? Could it be that there was someone else nearby?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-07.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-07.html
new file mode 100644
index 0000000000..89d0e3848a
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-07.html
@@ -0,0 +1,6 @@
+Tarti:
+Mysterious Wizard? Do you know who he is? Okay, that's not important right now. Thank you for taking care of Telesha's body.
+It's so weird that it scattered... Telesha is dead... How should I break the news to Navari...
+By the way, you said you'd found some object from the Wind Spirit realm?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-08.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-08.html
new file mode 100644
index 0000000000..d4880c1c9d
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-08.html
@@ -0,0 +1,7 @@
+Tarti:
+Telesha had it?.. That's weird. Probably means something. It's no coincidence that this object was there!
+We need to study it. Thanks for your help! If it wasn't for you, we would've never learned what happened to Telesha.
+Her death is a great loss... The only silver lining is that I'm now sure that you are ready for a second class change.
+Do you want to do it right now?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-09.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-09.html
new file mode 100644
index 0000000000..66587decb9
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-09.html
@@ -0,0 +1,6 @@
+Tarti:
+You've changed a lot and are now ready for the second class change. The power hidden deep within you will now come closer to the surface.
+Now you have to choose what to develop next.
+If you are ready let's start your training.
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-10.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-10.html
new file mode 100644
index 0000000000..34d8493edb
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-10.html
@@ -0,0 +1,4 @@
+Tarti:
+I hope you will carefully examine all the possibilities and make the right choice.
+You know that class change is only possible in the town, right? In the meantime I'll think your further training through.
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-11.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-11.html
new file mode 100644
index 0000000000..266563b963
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/34505-11.html
@@ -0,0 +1,3 @@
+Tarti:
+Artey cannot participate in this quest! The minimum level should be 40.
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/Q11025_PathOfDestinyProving.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/Q11025_PathOfDestinyProving.java
new file mode 100644
index 0000000000..9fc1021f7d
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11025_PathOfDestinyProving/Q11025_PathOfDestinyProving.java
@@ -0,0 +1,301 @@
+/*
+ * 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.Q11025_PathOfDestinyProving;
+
+import org.l2jmobius.Config;
+import org.l2jmobius.gameserver.data.xml.impl.CategoryData;
+import org.l2jmobius.gameserver.enums.CategoryType;
+import org.l2jmobius.gameserver.enums.Race;
+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.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.classchange.ExRequestClassChangeUi;
+
+/**
+ * Path of Destiny - Proving (11025)
+ * @URL https://l2wiki.com/Path_of_Destiny_-_Proving
+ * @author Dmitri
+ */
+public class Q11025_PathOfDestinyProving extends Quest
+{
+ // NPCs
+ private static final int TARTI = 34505;
+ private static final int RAYMOND = 30289;
+ private static final int TERESIA = 33981;
+ private static final int MYSTERIOUS_MAGE = 33980;
+ private static final int SKELETON_ARCHER = 27529;
+ private static final int SKELETON_WARRIOR = 27528;
+ // Items
+ private static final int WIND_SPIRIT = 80673;
+ // Location
+ private static final Location TRAINING_GROUNDS_TELEPORT = new Location(-4983, 116607, -3344);
+ // Misc
+ private static final int MIN_LEVEL = 39;
+
+ public Q11025_PathOfDestinyProving()
+ {
+ super(11025);
+ addStartNpc(TARTI);
+ addFirstTalkId(TERESIA, MYSTERIOUS_MAGE);
+ addTalkId(TARTI, RAYMOND, TERESIA, MYSTERIOUS_MAGE);
+ addKillId(SKELETON_ARCHER, SKELETON_WARRIOR);
+ registerQuestItems(WIND_SPIRIT);
+ // addCondNotRace(Race.ERTHEIA, "34505-11.html");
+ addCondMinLevel(MIN_LEVEL, "34505-11.html");
+ setQuestNameNpcStringId(NpcStringId.LV_20_PATH_OF_DESTINY_PROVING);
+ }
+
+ @Override
+ public String onAdvEvent(String event, Npc npc, PlayerInstance player)
+ {
+ String htmltext = null;
+ final QuestState qs = getQuestState(player, false);
+ if (qs == null)
+ {
+ return htmltext;
+ }
+
+ switch (event)
+ {
+ case "30289-02.html":
+ case "30289-05.html":
+ case "34505-05.html":
+ case "34505-06.html":
+ case "34505-07.html":
+ case "34505-08.html":
+ case "34505-09.html":
+ case "34505-12.html":
+ case "33980-02.html":
+ {
+ htmltext = event;
+ break;
+ }
+ case "34505-02.html":
+ {
+ qs.startQuest();
+ htmltext = event;
+ if (player.getLevel() >= 40)
+ {
+ qs.setCond(2, true);
+ htmltext = "34505-03.html";
+ }
+ break;
+ }
+ case "30289-03.html":
+ {
+ qs.setCond(3, true);
+ giveItems(player, WIND_SPIRIT, 1);
+ htmltext = event;
+ break;
+ }
+ case "teleport":
+ {
+ if (qs.isCond(3))
+ {
+ player.teleToLocation(TRAINING_GROUNDS_TELEPORT);
+ }
+ break;
+ }
+ case "mega_menu":
+ {
+ if (qs.isCond(4))
+ {
+ addSpawn(MYSTERIOUS_MAGE, npc, false, 300000);
+ showOnScreenMsg(player, NpcStringId.TALK_TO_THE_MYSTERIOUS_WIZARD_2, ExShowScreenMessage.TOP_CENTER, 10000);
+ break;
+ }
+ }
+ case "falver":
+ {
+ qs.setCond(5, true);
+ showOnScreenMsg(player, NpcStringId.RETURN_TO_RAYMOND_OF_THE_TOWN_OF_GLUDIO, ExShowScreenMessage.TOP_CENTER, 10000);
+ giveItems(player, WIND_SPIRIT, 1);
+ htmltext = event;
+ break;
+ }
+ case "30289-06.html":
+ {
+ qs.setCond(6, true);
+ htmltext = event;
+ break;
+ }
+ case "34505-10.html":
+ {
+ if (qs.isCond(6))
+ {
+ giveAdena(player, 5000, 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);
+ qs.exitQuest(false, true);
+ if (CategoryData.getInstance().isInCategory(CategoryType.SECOND_CLASS_GROUP, player.getClassId().getId()) || //
+ (CategoryData.getInstance().isInCategory(CategoryType.FIRST_CLASS_GROUP, player.getClassId().getId()) && (player.getRace() == Race.ERTHEIA)))
+ {
+ 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() == TARTI)
+ {
+ htmltext = "34505-01.html";
+ }
+ break;
+ }
+ case State.STARTED:
+ {
+ switch (npc.getId())
+ {
+ case TARTI:
+ {
+ if (qs.isCond(1) && (player.getLevel() > MIN_LEVEL))
+ {
+ qs.setCond(2, true);
+ htmltext = "34505-03.html";
+ break;
+ }
+ else if (qs.isCond(2))
+ {
+ htmltext = "34505-03.html"; // TODO: Proper second talk dialog.
+ break;
+ }
+ else if (qs.isCond(6))
+ {
+ htmltext = "34505-04.html";
+ }
+ break;
+ }
+ case RAYMOND:
+ {
+ if (qs.isCond(2))
+ {
+ htmltext = "30289-01.html";
+ }
+ else if (qs.isCond(5))
+ {
+ htmltext = "30289-04.html";
+ }
+ else if (qs.isCond(6))
+ {
+ htmltext = "30289-06.html"; // TODO: Proper second talk dialog.
+ }
+ break;
+ }
+ case TERESIA:
+ {
+ if (qs.isCond(4))
+ {
+ htmltext = "33981-01.html";
+ }
+ break;
+ }
+ case MYSTERIOUS_MAGE:
+ {
+ if (qs.isCond(4))
+ {
+ htmltext = "33980-01.html";
+ }
+ break;
+ }
+ }
+ break;
+ }
+ case State.COMPLETED:
+ {
+ htmltext = getAlreadyCompletedMsg(player);
+ break;
+ }
+ }
+ return htmltext;
+ }
+
+ @Override
+ public String onFirstTalk(Npc npc, PlayerInstance player)
+ {
+ return npc.getId() + "-01.html";
+ }
+
+ @Override
+ public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
+ {
+ final QuestState qs = getQuestState(killer, true);
+ if ((qs != null) && qs.isCond(3))
+ {
+ addSpawn(TERESIA, npc, false, 300000);
+ showOnScreenMsg(killer, NpcStringId.CHECK_ON_TELESHA, ExShowScreenMessage.TOP_CENTER, 10000);
+ qs.setCond(4, true);
+ }
+ return super.onKill(npc, killer, isSummon);
+ }
+
+ @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)
+ {
+ return;
+ }
+
+ if (player.getRace() == Race.ERTHEIA)
+ {
+ if (!CategoryData.getInstance().isInCategory(CategoryType.FIRST_CLASS_GROUP, player.getClassId().getId()))
+ {
+ return;
+ }
+ }
+ else if (!CategoryData.getInstance().isInCategory(CategoryType.SECOND_CLASS_GROUP, player.getClassId().getId()))
+ {
+ return;
+ }
+
+ final QuestState qs = getQuestState(player, false);
+ if ((qs != null) && qs.isCompleted())
+ {
+ player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
+ }
+ }
+}
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
index 4d0a1436ae..65a34a092e 100644
--- 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
@@ -23,6 +23,7 @@ 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.enums.Race;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@@ -123,13 +124,17 @@ public class Q11032_CurseOfUndying extends Quest
{
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);
+ // Ertheias do not change.
+ if (player.getRace() != Race.ERTHEIA)
+ {
+ 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);
+ if (CategoryData.getInstance().isInCategory(CategoryType.FIRST_CLASS_GROUP, player.getClassId().getId()))
+ {
+ player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
+ }
+ }
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;
}
@@ -238,6 +243,12 @@ public class Q11032_CurseOfUndying extends Quest
return;
}
+ // Ertheias do not change.
+ if (player.getRace() == Race.ERTHEIA)
+ {
+ return;
+ }
+
final QuestState qs = getQuestState(player, false);
if ((qs != null) && qs.isCompleted())
{
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11033_AntidoteIngredients/33177-01.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11033_AntidoteIngredients/33177-01.html
new file mode 100644
index 0000000000..9a41f3d4b4
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11033_AntidoteIngredients/33177-01.html
@@ -0,0 +1,4 @@
+Guard Kallesin:
+So, what brings you to me? Ah, is it about the Secret Material?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11033_AntidoteIngredients/33177-02.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11033_AntidoteIngredients/33177-02.html
new file mode 100644
index 0000000000..fdcd54a986
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11033_AntidoteIngredients/33177-02.html
@@ -0,0 +1,5 @@
+Guard Kallesin:
+So, that's you they've sent from Gludio? I use this material to deal with the curse. Thank you!
+It will be hard to pull this one off, so if you excuse me...
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11033_AntidoteIngredients/34505-01.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11033_AntidoteIngredients/34505-01.html
new file mode 100644
index 0000000000..fa510614d0
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11033_AntidoteIngredients/34505-01.html
@@ -0,0 +1,5 @@
+Tarti:
+Do you remember what you've heard about the immortality curse in the Ruins of Despair? I've learned about a... let's say, an antidote that might have something to do with this curse.
+There is a place you can go to investigate it. It's not far from here.
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11033_AntidoteIngredients/34505-02.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11033_AntidoteIngredients/34505-02.html
new file mode 100644
index 0000000000..a6faa1e32f
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11033_AntidoteIngredients/34505-02.html
@@ -0,0 +1,5 @@
+Tarti:
+The place is called Ruins of Agony. It's somewhat similar to the Ruins of Despair though there are quite a few differences.
+The immortality curse is pretty common in that region. That's why I think that you should start there if you want to learn about its origins.
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11033_AntidoteIngredients/34505-03.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11033_AntidoteIngredients/34505-03.html
new file mode 100644
index 0000000000..bc2ad557ba
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11033_AntidoteIngredients/34505-03.html
@@ -0,0 +1,5 @@
+Tarti:
+To be honest, I'm not quite sure mysself what you need to look for. What I am sure is that this adventure will benefit you greatly. Consider it training.
+On you go! Oh!.. You know about skill training, right?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11033_AntidoteIngredients/34505-04.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11033_AntidoteIngredients/34505-04.html
new file mode 100644
index 0000000000..c9e6de2f86
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11033_AntidoteIngredients/34505-04.html
@@ -0,0 +1,8 @@
+Tarti:
+To learn a new skill press Alt+K. You will see a menu with information about all available skill.
+If you continue to gain experience, you will soon be able to learn new skill and increase the level of the skills you've already learned.
+Don't neglect your skills as they let you grow stronger and defeat increasingly powerful enemies.
+Oh!.. You can create a shortcut for the skill you've learned if you find it useful.
+Well, are you ready?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11033_AntidoteIngredients/34505-05.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11033_AntidoteIngredients/34505-05.html
new file mode 100644
index 0000000000..4df15bc9d3
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11033_AntidoteIngredients/34505-05.html
@@ -0,0 +1,7 @@
+Tarti:
+In the Ruins of Agony you will find Carcass Bats and Vampires.
+I think Vampires might have something to do with the curse. I've heard that you can gain a Secret Material if you defeat Carcass Bats and Vampires.
+Find the Secret Material and give it to Guard Kallesin.
+I don't want you to get lost on your way to the ruins so I'll send you right there.
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11033_AntidoteIngredients/34505-06.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11033_AntidoteIngredients/34505-06.html
new file mode 100644
index 0000000000..83711526a2
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11033_AntidoteIngredients/34505-06.html
@@ -0,0 +1,3 @@
+Tarti:
+Artey cannot participate in this quest! The minimum level should be 20, and players who have not completed 2nd profession.
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11033_AntidoteIngredients/Q11033_AntidoteIngredients.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11033_AntidoteIngredients/Q11033_AntidoteIngredients.java
new file mode 100644
index 0000000000..580c708b99
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11033_AntidoteIngredients/Q11033_AntidoteIngredients.java
@@ -0,0 +1,214 @@
+/*
+ * 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.Q11033_AntidoteIngredients;
+
+import java.util.HashSet;
+import java.util.Set;
+
+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;
+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 quests.Q11034_ResurrectedOne.Q11034_ResurrectedOne;
+
+/**
+ * Antidote Ingredients (11033)
+ * @URL https://l2wiki.com/Antidote_Ingredients
+ * @author Dmitri
+ */
+public class Q11033_AntidoteIngredients extends Quest
+{
+ // NPCs
+ private static final int TARTI = 34505;
+ private static final int KALESIN = 33177;
+ private static final int KRAKOS_BAT = 24384;
+ private static final int A_VAMMPIRE = 24385;
+ // Items
+ private static final ItemHolder SOE_SILVAN = new ItemHolder(80679, 1);
+ // Location
+ private static final Location TRAINING_GROUNDS_TELEPORT = new Location(-44121, 115926, -3624);
+ // Misc
+ private static final String KILL_COUNT_VAR = "KillCount";
+ private static final int MIN_LEVEL = 20;
+
+ public Q11033_AntidoteIngredients()
+ {
+ super(11033);
+ addStartNpc(TARTI);
+ addTalkId(TARTI, KALESIN);
+ addKillId(KRAKOS_BAT, A_VAMMPIRE);
+ registerQuestItems(SOE_SILVAN.getId());
+ // addCondNotRace(Race.ERTHEIA, "34505-06.html");
+ addCondMinLevel(MIN_LEVEL, "34505-06.html");
+ setQuestNameNpcStringId(NpcStringId.LV_20_40_ANTIDOTE_INGREDIENTS);
+ }
+
+ @Override
+ public String onAdvEvent(String event, Npc npc, PlayerInstance player)
+ {
+ String htmltext = null;
+ final QuestState qs = getQuestState(player, false);
+ if (qs == null)
+ {
+ return htmltext;
+ }
+
+ switch (event)
+ {
+ case "34505-02.html":
+ case "34505-05.html":
+ {
+ htmltext = event;
+ break;
+ }
+ case "34505-03.html":
+ {
+ player.sendPacket(new ExTutorialShowId(18)); // Quest Progress
+ showOnScreenMsg(player, NpcStringId.PRESS_ALT_K_TO_ACQUIRE_THE_SKILL_IN_THE_SKILL_WINDOW, ExShowScreenMessage.TOP_CENTER, 10000);
+ htmltext = event;
+ break;
+ }
+ case "34505-04.html":
+ {
+ qs.startQuest();
+ htmltext = event;
+ break;
+ }
+ case "teleport":
+ {
+ if (qs.isCond(1))
+ {
+ player.teleToLocation(TRAINING_GROUNDS_TELEPORT);
+ }
+ break;
+ }
+ case "33177-02.html":
+ {
+ if (qs.isCond(2))
+ {
+ addExpAndSp(player, 913551, 822);
+ qs.exitQuest(false, true);
+ htmltext = event;
+
+ // Initialize next quest.
+ final Quest nextQuest = QuestManager.getInstance().getQuest(Q11034_ResurrectedOne.class.getSimpleName());
+ if (nextQuest != null)
+ {
+ nextQuest.newQuestState(player);
+ }
+ }
+ 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() == TARTI)
+ {
+ htmltext = "34505-01.html";
+ }
+ break;
+ }
+ case State.STARTED:
+ {
+ switch (npc.getId())
+ {
+ case TARTI:
+ {
+ if (qs.isCond(1))
+ {
+ htmltext = "34505-04.html";
+ }
+ break;
+ }
+ case KALESIN:
+ {
+ if (qs.isCond(2))
+ {
+ htmltext = "33177-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 < 15)
+ {
+ 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_KALLESIN_IN_YOUR_INVENTORY_NTALK_TO_KALLESIN_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.RUINS_OF_AGONY_BEND_LV_19.getId(), true, qs.getInt(KILL_COUNT_VAR)));
+ return holder;
+ }
+ return super.getNpcLogList(player);
+ }
+}
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11034_ResurrectedOne/33177-01.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11034_ResurrectedOne/33177-01.html
new file mode 100644
index 0000000000..25835e16b3
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11034_ResurrectedOne/33177-01.html
@@ -0,0 +1,5 @@
+Guard Kallesin:
+So, that's you they've sent from Gludio? I use this material to deal with the curse. Thank you!
+It will be hard to pull this one off, so if you excuse me...
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11034_ResurrectedOne/33177-02.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11034_ResurrectedOne/33177-02.html
new file mode 100644
index 0000000000..ae90f64678
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11034_ResurrectedOne/33177-02.html
@@ -0,0 +1,5 @@
+Guard Kallesin:
+Do you want to help?
+Great! I have a mission for you. First of all, get rid of those bloody Skeletons.
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11034_ResurrectedOne/33177-03.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11034_ResurrectedOne/33177-03.html
new file mode 100644
index 0000000000..bcedbe2443
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11034_ResurrectedOne/33177-03.html
@@ -0,0 +1,4 @@
+Guard Kallesin:
+Go to the Ruins of Agony, there are plenty of them there. For some reason there've become so many of them all of the sudden. It has never happened before.
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11034_ResurrectedOne/33177-04.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11034_ResurrectedOne/33177-04.html
new file mode 100644
index 0000000000..28d23973ba
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11034_ResurrectedOne/33177-04.html
@@ -0,0 +1,6 @@
+Guard Kallesin:
+Kill Skeleton Scouts, Skeleton Archers, and Skeleton Warriors. When you're done, go to Guard Zenath in the Ruins of Agony.
+It seems like it's even worse for her there. I will teleport you to the Skeletons, so you can proceed to the mission right away.
+By the way, haven't you used automatic hunting yet? I strongly recommend that you do. You can see the details in the Help menu.
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11034_ResurrectedOne/33177-05.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11034_ResurrectedOne/33177-05.html
new file mode 100644
index 0000000000..10b290c068
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11034_ResurrectedOne/33177-05.html
@@ -0,0 +1,3 @@
+Tarti:
+Artey cannot participate in this quest! The minimum level should be 27.
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11034_ResurrectedOne/33509-01.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11034_ResurrectedOne/33509-01.html
new file mode 100644
index 0000000000..d9778de377
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11034_ResurrectedOne/33509-01.html
@@ -0,0 +1,4 @@
+Guard Zenath:
+Have you dealt with the Skeletons?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11034_ResurrectedOne/33509-02.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11034_ResurrectedOne/33509-02.html
new file mode 100644
index 0000000000..93c9e57dfb
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11034_ResurrectedOne/33509-02.html
@@ -0,0 +1,5 @@
+Guard Zenath:
+Thank you! There've been a surge in numbers of Skeletons lately. It worries me.
+Skeletons and Spartoi... I don't know what is going on.
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11034_ResurrectedOne/Q11034_ResurrectedOne.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11034_ResurrectedOne/Q11034_ResurrectedOne.java
new file mode 100644
index 0000000000..866764e17e
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11034_ResurrectedOne/Q11034_ResurrectedOne.java
@@ -0,0 +1,209 @@
+/*
+ * 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.Q11034_ResurrectedOne;
+
+import java.util.HashSet;
+import java.util.Set;
+
+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;
+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 quests.Q11035_DeathlyMischief.Q11035_DeathlyMischief;
+
+/**
+ * Resurrected One (11034)
+ * @URL https://l2wiki.com/Resurrected_One
+ * @author Dmitri
+ */
+public class Q11034_ResurrectedOne extends Quest
+{
+ // NPCs
+ private static final int KALESIN = 33177;
+ private static final int JENA = 33509;
+ private static final int SKELETON_SCOUT = 24386;
+ private static final int SKELETON_ARCHER = 24387;
+ private static final int SKELETON_WARRIOR = 24388;
+ // Items
+ private static final ItemHolder SOE_SILVAN = new ItemHolder(80680, 1);
+ // Location
+ private static final Location TRAINING_GROUNDS_TELEPORT = new Location(-46169, 110937, -3808);
+ // Misc
+ private static final String KILL_COUNT_VAR = "KillCount";
+ private static final int MIN_LEVEL = 27;
+
+ public Q11034_ResurrectedOne()
+ {
+ super(11034);
+ addStartNpc(KALESIN);
+ addTalkId(KALESIN, JENA);
+ addKillId(SKELETON_SCOUT, SKELETON_ARCHER, SKELETON_WARRIOR);
+ registerQuestItems(SOE_SILVAN.getId());
+ // addCondNotRace(Race.ERTHEIA, "33177-05.html");
+ addCondMinLevel(MIN_LEVEL, "33177-05.html");
+ setQuestNameNpcStringId(NpcStringId.LV_20_40_THE_RESURRECTED_ONE);
+ }
+
+ @Override
+ public String onAdvEvent(String event, Npc npc, PlayerInstance player)
+ {
+ String htmltext = null;
+ final QuestState qs = getQuestState(player, false);
+ if (qs == null)
+ {
+ return htmltext;
+ }
+
+ switch (event)
+ {
+ case "33177-02.html":
+ case "33177-03.html":
+ {
+ htmltext = event;
+ break;
+ }
+ case "33177-04.html":
+ {
+ qs.startQuest();
+ player.sendPacket(new ExTutorialShowId(19)); // Adventurers Guide
+ htmltext = event;
+ break;
+ }
+ case "teleport":
+ {
+ if (qs.isCond(1))
+ {
+ player.teleToLocation(TRAINING_GROUNDS_TELEPORT);
+ }
+ break;
+ }
+ case "33509-02.html":
+ {
+ if (qs.isCond(2))
+ {
+ addExpAndSp(player, 1640083, 1476);
+ qs.exitQuest(false, true);
+ htmltext = event;
+
+ // Initialize next quest.
+ final Quest nextQuest = QuestManager.getInstance().getQuest(Q11035_DeathlyMischief.class.getSimpleName());
+ if (nextQuest != null)
+ {
+ nextQuest.newQuestState(player);
+ }
+ }
+ 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() == KALESIN)
+ {
+ htmltext = "33177-01.html";
+ }
+ break;
+ }
+ case State.STARTED:
+ {
+ switch (npc.getId())
+ {
+ case KALESIN:
+ {
+ if (qs.isCond(1))
+ {
+ htmltext = "33177-04.html";
+ }
+ break;
+ }
+ case JENA:
+ {
+ if (qs.isCond(2))
+ {
+ htmltext = "33509-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_ZENATH_IN_YOUR_INVENTORY_NTALK_TO_ZENATH_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_SKELETONS_3.getId(), true, qs.getInt(KILL_COUNT_VAR)));
+ return holder;
+ }
+ return super.getNpcLogList(player);
+ }
+}
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11035_DeathlyMischief/33509-01.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11035_DeathlyMischief/33509-01.html
new file mode 100644
index 0000000000..93c9e57dfb
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11035_DeathlyMischief/33509-01.html
@@ -0,0 +1,5 @@
+Guard Zenath:
+Thank you! There've been a surge in numbers of Skeletons lately. It worries me.
+Skeletons and Spartoi... I don't know what is going on.
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11035_DeathlyMischief/33509-02.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11035_DeathlyMischief/33509-02.html
new file mode 100644
index 0000000000..42d55a6202
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11035_DeathlyMischief/33509-02.html
@@ -0,0 +1,5 @@
+Guard Zenath:
+It happened before that the dead would walk. But there has never been so many of them. It's strange.
+They say, Skeletons were seen in the vicinity of the town.
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11035_DeathlyMischief/33509-03.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11035_DeathlyMischief/33509-03.html
new file mode 100644
index 0000000000..ac479af0c0
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11035_DeathlyMischief/33509-03.html
@@ -0,0 +1,5 @@
+Guard Zenath:
+It seems that it's no accident. They say that even vampires were seen here.
+I'm afraid that somebody might let the Breath of Death out.
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11035_DeathlyMischief/33509-04.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11035_DeathlyMischief/33509-04.html
new file mode 100644
index 0000000000..ad1c4037f0
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11035_DeathlyMischief/33509-04.html
@@ -0,0 +1,7 @@
+Guard Zenath:
+Breath of Death is a type of black magic. It's energy that can rise the dead. It haven't been used for a while, but it seems that's the case now.
+Kill Spartoi Soldiers and Raging Spartoi, get Breath of Death from their remnants. If they are indeed influenced by that magic, it will leave traces on their bones.
+I will teleport you to the place you need, don't waste time.
+By the way, if you aren't familiar with potion auto-use function, please, look into Help menu. It is a very useful thing, I assure you.
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11035_DeathlyMischief/33509-05.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11035_DeathlyMischief/33509-05.html
new file mode 100644
index 0000000000..62b0d207a6
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11035_DeathlyMischief/33509-05.html
@@ -0,0 +1,3 @@
+Tarti:
+Artey cannot participate in this quest! The minimum level should be 33.
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11035_DeathlyMischief/34505-01.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11035_DeathlyMischief/34505-01.html
new file mode 100644
index 0000000000..6cf37c91bd
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11035_DeathlyMischief/34505-01.html
@@ -0,0 +1,4 @@
+Tarti:
+So you've found the Breath of Death
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11035_DeathlyMischief/34505-02.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11035_DeathlyMischief/34505-02.html
new file mode 100644
index 0000000000..87b4790901
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11035_DeathlyMischief/34505-02.html
@@ -0,0 +1,8 @@
+Tarti:
+That's the Breath of Death indeed!
+It's horrible... But thank you for your help!
+You're ready for your second class change so soon? That's incredible! I know that Material Realm people have their powers sealed unlike us, Ertheia.
+You need to change class in order to hone your skills, right?
+I helped you grow stronger the last time you decided to change class... I can help you this time as well.
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11035_DeathlyMischief/Q11035_DeathlyMischief.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11035_DeathlyMischief/Q11035_DeathlyMischief.java
new file mode 100644
index 0000000000..0a1e2e64d5
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11035_DeathlyMischief/Q11035_DeathlyMischief.java
@@ -0,0 +1,184 @@
+/*
+ * 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.Q11035_DeathlyMischief;
+
+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;
+import org.l2jmobius.gameserver.model.holders.ItemHolder;
+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 quests.Q11025_PathOfDestinyProving.Q11025_PathOfDestinyProving;
+
+/**
+ * Deathly Mischief (11035)
+ * @URL https://l2wiki.com/Deathly_Mischief
+ * @author Dmitri
+ */
+public class Q11035_DeathlyMischief extends Quest
+{
+ // NPCs
+ private static final int JENA = 33509;
+ private static final int TARTI = 34505;
+ private static final int PHANTOM_SKELETON_SOLDIER = 24389;
+ private static final int SKELETON_BERSERKER = 24390;
+ // Items
+ private static final int BREATH_OF_DEATH = 80672;
+ private static final ItemHolder SOE_SILVAN = new ItemHolder(80677, 1);
+ // Location
+ private static final Location TRAINING_GROUNDS_TELEPORT = new Location(-51130, 110053, -3664);
+ // Misc
+ private static final int MIN_LEVEL = 33;
+
+ public Q11035_DeathlyMischief()
+ {
+ super(11035);
+ addStartNpc(JENA);
+ addTalkId(JENA, TARTI);
+ addKillId(PHANTOM_SKELETON_SOLDIER, SKELETON_BERSERKER);
+ registerQuestItems(SOE_SILVAN.getId(), BREATH_OF_DEATH);
+ // addCondNotRace(Race.ERTHEIA, "33509-05.html");
+ addCondMinLevel(MIN_LEVEL, "33509-05.html");
+ setQuestNameNpcStringId(NpcStringId.LV_20_40_DEATHLY_MISCHIEF);
+ }
+
+ @Override
+ public String onAdvEvent(String event, Npc npc, PlayerInstance player)
+ {
+ String htmltext = null;
+ final QuestState qs = getQuestState(player, false);
+ if (qs == null)
+ {
+ return htmltext;
+ }
+
+ switch (event)
+ {
+ case "33509-02.html":
+ case "33509-03.html":
+ {
+ htmltext = event;
+ break;
+ }
+ case "33509-04.html":
+ {
+ qs.startQuest();
+ player.sendPacket(new ExTutorialShowId(17)); // 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))
+ {
+ addExpAndSp(player, 4952686, 4457);
+ giveAdena(player, 165000, true);
+ showOnScreenMsg(player, NpcStringId.SECOND_CLASS_TRANSFER_IS_AVAILABLE_NGO_SEE_TARTI_IN_THE_TOWN_OF_GLUDIO_TO_START_THE_CLASS_TRANSFER, ExShowScreenMessage.TOP_CENTER, 10000);
+ qs.exitQuest(false, true);
+ htmltext = event;
+
+ // Initialize next quest.
+ final Quest nextQuest = QuestManager.getInstance().getQuest(Q11025_PathOfDestinyProving.class.getSimpleName());
+ if (nextQuest != null)
+ {
+ nextQuest.newQuestState(player);
+ }
+ }
+ 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() == JENA)
+ {
+ htmltext = "33509-01.html";
+ }
+ break;
+ }
+ case State.STARTED:
+ {
+ switch (npc.getId())
+ {
+ case JENA:
+ {
+ if (qs.isCond(1))
+ {
+ htmltext = "33509-04.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))
+ {
+ if (giveItemRandomly(killer, BREATH_OF_DEATH, 1, 15, 0.5, true))
+ {
+ qs.setCond(2, true);
+ 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);
+ }
+}
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11036_ChangedSpirits/33963-01.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11036_ChangedSpirits/33963-01.html
new file mode 100644
index 0000000000..a5a7bbcde4
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11036_ChangedSpirits/33963-01.html
@@ -0,0 +1,4 @@
+Guard Kallesin:
+So, what brings you to me? Ah, is it about the Secret Material?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11036_ChangedSpirits/33963-02.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11036_ChangedSpirits/33963-02.html
new file mode 100644
index 0000000000..a43339cd33
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11036_ChangedSpirits/33963-02.html
@@ -0,0 +1,5 @@
+Guard Kallesin:
+So, that's you they've sent from Gludio? I use this material to deal with the curse. Thank you!
+It will be hard to pull this one off, so if you excuse me...
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11036_ChangedSpirits/34505-01.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11036_ChangedSpirits/34505-01.html
new file mode 100644
index 0000000000..6b0ad6cb92
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11036_ChangedSpirits/34505-01.html
@@ -0,0 +1,5 @@
+Tarti:
+Do you remember what you've heard about the immortality curse in the Ruins of Despair? I've learned about a... let's say, an antidote that might have something to do with this curse.
+There is a place you can go to investigate it. It's not far from here.
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11036_ChangedSpirits/34505-02.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11036_ChangedSpirits/34505-02.html
new file mode 100644
index 0000000000..a81707c410
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11036_ChangedSpirits/34505-02.html
@@ -0,0 +1,5 @@
+Tarti:
+The place is called Ruins of Agony. It's somewhat similar to the Ruins of Despair though there are quite a few differences.
+The immortality curse is pretty common in that region. That's why I think that you should start there if you want to learn about its origins.
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11036_ChangedSpirits/34505-03.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11036_ChangedSpirits/34505-03.html
new file mode 100644
index 0000000000..e265cbfaee
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11036_ChangedSpirits/34505-03.html
@@ -0,0 +1,5 @@
+Tarti:
+To be honest, I'm not quite sure mysself what you need to look for. What I am sure is that this adventure will benefit you greatly. Consider it training.
+On you go! Oh!.. You know about skill training, right?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11036_ChangedSpirits/34505-04.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11036_ChangedSpirits/34505-04.html
new file mode 100644
index 0000000000..660e34ee85
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11036_ChangedSpirits/34505-04.html
@@ -0,0 +1,7 @@
+Tarti:
+In the Ruins of Agony you will find Carcass Bats and Vampires.
+I think Vampires might have something to do with the curse. I've heard that you can gain a Secret Material if you defeat Carcass Bats and Vampires.
+Find the Secret Material and give it to Guard Kallesin.
+I don't want you to get lost on your way to the ruins so I'll send you right there.
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11036_ChangedSpirits/34505-06.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11036_ChangedSpirits/34505-06.html
new file mode 100644
index 0000000000..83711526a2
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11036_ChangedSpirits/34505-06.html
@@ -0,0 +1,3 @@
+Tarti:
+Artey cannot participate in this quest! The minimum level should be 20, and players who have not completed 2nd profession.
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11036_ChangedSpirits/Q11036_ChangedSpirits.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11036_ChangedSpirits/Q11036_ChangedSpirits.java
new file mode 100644
index 0000000000..817b565ac0
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11036_ChangedSpirits/Q11036_ChangedSpirits.java
@@ -0,0 +1,208 @@
+/*
+ * 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.Q11036_ChangedSpirits;
+
+import java.util.HashSet;
+import java.util.Set;
+
+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;
+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 quests.Q11025_PathOfDestinyProving.Q11025_PathOfDestinyProving;
+import quests.Q11037_WhyAreTheRatelHere.Q11037_WhyAreTheRatelHere;
+
+/**
+ * Changed Spirits (11036)
+ * @URL https://l2wiki.com/Changed_Spirits
+ * @author Dmitri
+ */
+public class Q11036_ChangedSpirits extends Quest
+{
+ // NPCs
+ private static final int TARTI = 34505;
+ private static final int PIO = 33963;
+ private static final int SOBBING_BREEZE = 24391;
+ private static final int WHISPERING_BREEZE = 24392;
+ private static final int LAUGHING_BREEZE = 24393;
+ // Items
+ private static final ItemHolder SOE_SILVAN = new ItemHolder(80681, 1);
+ // Location
+ private static final Location TRAINING_GROUNDS_TELEPORT = new Location(-74631, 94630, -3736);
+ // Misc
+ private static final String KILL_COUNT_VAR = "KillCount";
+ private static final int MIN_LEVEL = 40;
+
+ public Q11036_ChangedSpirits()
+ {
+ super(11036);
+ addStartNpc(TARTI);
+ addTalkId(TARTI, PIO);
+ addKillId(SOBBING_BREEZE, WHISPERING_BREEZE, LAUGHING_BREEZE);
+ registerQuestItems(SOE_SILVAN.getId());
+ addCondMinLevel(MIN_LEVEL, "34505-06.html");
+ addCondCompletedQuest(Q11025_PathOfDestinyProving.class.getSimpleName(), "34505-06.html");
+ setQuestNameNpcStringId(NpcStringId.LV_40_76_CHANGED_SPIRITS);
+ }
+
+ @Override
+ public String onAdvEvent(String event, Npc npc, PlayerInstance player)
+ {
+ String htmltext = null;
+ final QuestState qs = getQuestState(player, false);
+ if (qs == null)
+ {
+ return htmltext;
+ }
+
+ switch (event)
+ {
+ case "34505-02.html":
+ case "34505-04.html":
+ {
+ htmltext = event;
+ break;
+ }
+ case "34505-03.html":
+ {
+ qs.startQuest();
+ htmltext = event;
+ break;
+ }
+ case "teleport":
+ {
+ if (qs.isCond(1))
+ {
+ player.teleToLocation(TRAINING_GROUNDS_TELEPORT);
+ }
+ break;
+ }
+ case "33963-02.html":
+ {
+ if (qs.isCond(2))
+ {
+ addExpAndSp(player, 14281098, 12852);
+ qs.exitQuest(false, true);
+ htmltext = event;
+
+ // Initialize next quest.
+ final Quest nextQuest = QuestManager.getInstance().getQuest(Q11037_WhyAreTheRatelHere.class.getSimpleName());
+ if (nextQuest != null)
+ {
+ nextQuest.newQuestState(player);
+ }
+ }
+ 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() == TARTI)
+ {
+ htmltext = "34505-01.html";
+ }
+ break;
+ }
+ case State.STARTED:
+ {
+ switch (npc.getId())
+ {
+ case TARTI:
+ {
+ if (qs.isCond(1))
+ {
+ htmltext = "34505-03.html";
+ }
+ break;
+ }
+ case PIO:
+ {
+ if (qs.isCond(2))
+ {
+ htmltext = "33963-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_PIO_IN_YOUR_INVENTORY_NTALK_TO_PIO_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_PACK_OF_WINDRA_2.getId(), true, qs.getInt(KILL_COUNT_VAR)));
+ return holder;
+ }
+ return super.getNpcLogList(player);
+ }
+}
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11037_WhyAreTheRatelHere/33963-01.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11037_WhyAreTheRatelHere/33963-01.html
new file mode 100644
index 0000000000..9ec49b9f9b
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11037_WhyAreTheRatelHere/33963-01.html
@@ -0,0 +1,4 @@
+Guard Kallesin:
+So, what brings you to me? Ah, is it about the Secret Material?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11037_WhyAreTheRatelHere/33963-02.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11037_WhyAreTheRatelHere/33963-02.html
new file mode 100644
index 0000000000..d3aa9ba666
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11037_WhyAreTheRatelHere/33963-02.html
@@ -0,0 +1,5 @@
+Guard Kallesin:
+So, that's you they've sent from Gludio? I use this material to deal with the curse. Thank you!
+It will be hard to pull this one off, so if you excuse me...
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11037_WhyAreTheRatelHere/33963-03.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11037_WhyAreTheRatelHere/33963-03.html
new file mode 100644
index 0000000000..18b49c31d3
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11037_WhyAreTheRatelHere/33963-03.html
@@ -0,0 +1,4 @@
+Guard Kallesin:
+So, what brings you to me? Ah, is it about the Secret Material?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11037_WhyAreTheRatelHere/33963-04.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11037_WhyAreTheRatelHere/33963-04.html
new file mode 100644
index 0000000000..0fcbced5ec
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11037_WhyAreTheRatelHere/33963-04.html
@@ -0,0 +1,4 @@
+Guard Kallesin:
+So, what brings you to me? Ah, is it about the Secret Material?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11037_WhyAreTheRatelHere/33963-05.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11037_WhyAreTheRatelHere/33963-05.html
new file mode 100644
index 0000000000..6390067280
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11037_WhyAreTheRatelHere/33963-05.html
@@ -0,0 +1,4 @@
+Guard Kallesin:
+So, what brings you to me? Ah, is it about the Secret Material?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11037_WhyAreTheRatelHere/33963-06.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11037_WhyAreTheRatelHere/33963-06.html
new file mode 100644
index 0000000000..83711526a2
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11037_WhyAreTheRatelHere/33963-06.html
@@ -0,0 +1,3 @@
+Tarti:
+Artey cannot participate in this quest! The minimum level should be 20, and players who have not completed 2nd profession.
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11037_WhyAreTheRatelHere/Q11037_WhyAreTheRatelHere.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11037_WhyAreTheRatelHere/Q11037_WhyAreTheRatelHere.java
new file mode 100644
index 0000000000..065fb726a0
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11037_WhyAreTheRatelHere/Q11037_WhyAreTheRatelHere.java
@@ -0,0 +1,201 @@
+/*
+ * 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.Q11037_WhyAreTheRatelHere;
+
+import java.util.HashSet;
+import java.util.Set;
+
+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;
+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 quests.Q11036_ChangedSpirits.Q11036_ChangedSpirits;
+import quests.Q11038_GrowlersTurnedViolent.Q11038_GrowlersTurnedViolent;
+
+/**
+ * Why are the Ratel here? (11037)
+ * @URL https://l2wiki.com/Why_are_the_Ratel_here%3F
+ * @author Dmitri
+ */
+public class Q11037_WhyAreTheRatelHere extends Quest
+{
+ // NPCs
+ private static final int PIO = 33963;
+ private static final int AWESOME_HONEY_BADGER = 24394;
+ private static final int AWESOME_STRONG_HONEY_BADGER = 24395;
+ // Items
+ private static final ItemHolder SOE_PIO = new ItemHolder(80681, 1);
+ // Location
+ private static final Location TRAINING_GROUNDS_TELEPORT = new Location(-80777, 91995, -3720);
+ // Misc
+ private static final String KILL_COUNT_VAR = "KillCount";
+ private static final int MIN_LEVEL = 45;
+
+ public Q11037_WhyAreTheRatelHere()
+ {
+ super(11037);
+ addStartNpc(PIO);
+ addTalkId(PIO);
+ addKillId(AWESOME_HONEY_BADGER, AWESOME_STRONG_HONEY_BADGER);
+ registerQuestItems(SOE_PIO.getId());
+ addCondMinLevel(MIN_LEVEL, "33963-06.html");
+ addCondCompletedQuest(Q11036_ChangedSpirits.class.getSimpleName(), "33963-06.html");
+ setQuestNameNpcStringId(NpcStringId.LV_40_76_WHY_ARE_THE_RATEL_HERE);
+ }
+
+ @Override
+ public String onAdvEvent(String event, Npc npc, PlayerInstance player)
+ {
+ String htmltext = null;
+ final QuestState qs = getQuestState(player, false);
+ if (qs == null)
+ {
+ return htmltext;
+ }
+
+ switch (event)
+ {
+ case "33963-03.html":
+ {
+ htmltext = event;
+ break;
+ }
+ case "33963-02.html":
+ {
+ qs.startQuest();
+ htmltext = event;
+ break;
+ }
+ case "teleport":
+ {
+ if (qs.isCond(1))
+ {
+ player.teleToLocation(TRAINING_GROUNDS_TELEPORT);
+ }
+ break;
+ }
+ case "33963-05.html":
+ {
+ if (qs.isCond(2))
+ {
+ addExpAndSp(player, 30949789, 27854);
+ qs.exitQuest(false, true);
+ htmltext = event;
+
+ // Initialize next quest.
+ final Quest nextQuest = QuestManager.getInstance().getQuest(Q11038_GrowlersTurnedViolent.class.getSimpleName());
+ if (nextQuest != null)
+ {
+ nextQuest.newQuestState(player);
+ }
+ }
+ 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() == PIO)
+ {
+ htmltext = "33963-01.html";
+ }
+ break;
+ }
+ case State.STARTED:
+ {
+ switch (npc.getId())
+ {
+ case PIO:
+ {
+ if (qs.isCond(1))
+ {
+ htmltext = "33963-02.html";
+ }
+ else if (qs.isCond(2))
+ {
+ htmltext = "33963-04.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_PIO);
+ showOnScreenMsg(killer, NpcStringId.USE_SCROLL_OF_ESCAPE_PIO_IN_YOUR_INVENTORY_NTALK_TO_PIO_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.ERADICATE_THE_FEAR_RATEL_2.getId(), true, qs.getInt(KILL_COUNT_VAR)));
+ return holder;
+ }
+ return super.getNpcLogList(player);
+ }
+}
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11038_GrowlersTurnedViolent/33963-01.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11038_GrowlersTurnedViolent/33963-01.html
new file mode 100644
index 0000000000..6390067280
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11038_GrowlersTurnedViolent/33963-01.html
@@ -0,0 +1,4 @@
+Guard Kallesin:
+So, what brings you to me? Ah, is it about the Secret Material?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11038_GrowlersTurnedViolent/33963-02.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11038_GrowlersTurnedViolent/33963-02.html
new file mode 100644
index 0000000000..d376b6d337
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11038_GrowlersTurnedViolent/33963-02.html
@@ -0,0 +1,5 @@
+Guard Kallesin:
+So, that's you they've sent from Gludio? I use this material to deal with the curse. Thank you!
+It will be hard to pull this one off, so if you excuse me...
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11038_GrowlersTurnedViolent/33963-03.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11038_GrowlersTurnedViolent/33963-03.html
new file mode 100644
index 0000000000..24c64adec4
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11038_GrowlersTurnedViolent/33963-03.html
@@ -0,0 +1,4 @@
+Guard Kallesin:
+So, what brings you to me? Ah, is it about the Secret Material?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11038_GrowlersTurnedViolent/33963-04.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11038_GrowlersTurnedViolent/33963-04.html
new file mode 100644
index 0000000000..4fbd3d69d7
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11038_GrowlersTurnedViolent/33963-04.html
@@ -0,0 +1,4 @@
+Guard Kallesin:
+So, what brings you to me? Ah, is it about the Secret Material?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11038_GrowlersTurnedViolent/33963-05.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11038_GrowlersTurnedViolent/33963-05.html
new file mode 100644
index 0000000000..e2f7f2dbb7
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11038_GrowlersTurnedViolent/33963-05.html
@@ -0,0 +1,4 @@
+Guard Kallesin:
+So, what brings you to me? Ah, is it about the Secret Material?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11038_GrowlersTurnedViolent/33963-06.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11038_GrowlersTurnedViolent/33963-06.html
new file mode 100644
index 0000000000..83711526a2
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11038_GrowlersTurnedViolent/33963-06.html
@@ -0,0 +1,3 @@
+Tarti:
+Artey cannot participate in this quest! The minimum level should be 20, and players who have not completed 2nd profession.
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11038_GrowlersTurnedViolent/Q11038_GrowlersTurnedViolent.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11038_GrowlersTurnedViolent/Q11038_GrowlersTurnedViolent.java
new file mode 100644
index 0000000000..d0b27e99ef
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11038_GrowlersTurnedViolent/Q11038_GrowlersTurnedViolent.java
@@ -0,0 +1,173 @@
+/*
+ * 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.Q11038_GrowlersTurnedViolent;
+
+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;
+import org.l2jmobius.gameserver.model.holders.ItemHolder;
+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 quests.Q11037_WhyAreTheRatelHere.Q11037_WhyAreTheRatelHere;
+import quests.Q11039_CommunicationBreakdown.Q11039_CommunicationBreakdown;
+
+/**
+ * Growlers Turned Violent (11038)
+ * @URL https://l2wiki.com/Growlers_Turned_Violent
+ * @author Dmitri
+ */
+public class Q11038_GrowlersTurnedViolent extends Quest
+{
+ // NPCs
+ private static final int PIO = 33963;
+ private static final int AWESOME_SHRIKER = 24396;
+ private static final int AWESOME_DEVELOPED_SHRIKER = 24397;
+ private static final int AWESOME_STRONG_SHRIKER = 24398;
+ // Items
+ private static final int CORRUPTED_ENERGY = 80673;
+ private static final ItemHolder SOE_PIO = new ItemHolder(80681, 1);
+ // Location
+ private static final Location TRAINING_GROUNDS_TELEPORT = new Location(-84963, 80967, -3144);
+
+ public Q11038_GrowlersTurnedViolent()
+ {
+ super(11038);
+ addStartNpc(PIO);
+ addTalkId(PIO);
+ addKillId(AWESOME_SHRIKER, AWESOME_DEVELOPED_SHRIKER, AWESOME_STRONG_SHRIKER);
+ registerQuestItems(SOE_PIO.getId(), CORRUPTED_ENERGY);
+ addCondCompletedQuest(Q11037_WhyAreTheRatelHere.class.getSimpleName(), "33963-06.html");
+ setQuestNameNpcStringId(NpcStringId.LV_40_76_GROWLERS_TURNED_VIOLENT);
+ }
+
+ @Override
+ public String onAdvEvent(String event, Npc npc, PlayerInstance player)
+ {
+ String htmltext = null;
+ final QuestState qs = getQuestState(player, false);
+ if (qs == null)
+ {
+ return htmltext;
+ }
+
+ switch (event)
+ {
+ case "33963-03.html":
+ {
+ htmltext = event;
+ break;
+ }
+ case "33963-02.html":
+ {
+ qs.startQuest();
+ htmltext = event;
+ break;
+ }
+ case "teleport":
+ {
+ if (qs.isCond(1))
+ {
+ player.teleToLocation(TRAINING_GROUNDS_TELEPORT);
+ }
+ break;
+ }
+ case "33963-05.html":
+ {
+ if (qs.isCond(2))
+ {
+ addExpAndSp(player, 76142825, 68528);
+ qs.exitQuest(false, true);
+ htmltext = event;
+
+ // Initialize next quest.
+ final Quest nextQuest = QuestManager.getInstance().getQuest(Q11039_CommunicationBreakdown.class.getSimpleName());
+ if (nextQuest != null)
+ {
+ nextQuest.newQuestState(player);
+ }
+ }
+ 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() == PIO)
+ {
+ htmltext = "33963-01.html";
+ }
+ break;
+ }
+ case State.STARTED:
+ {
+ switch (npc.getId())
+ {
+ case PIO:
+ {
+ if (qs.isCond(1))
+ {
+ htmltext = "33963-02.html";
+ }
+ else if (qs.isCond(2))
+ {
+ htmltext = "33963-04.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))
+ {
+ if (giveItemRandomly(killer, CORRUPTED_ENERGY, 1, 15, 0.5, true))
+ {
+ qs.setCond(2, true);
+ giveItems(killer, SOE_PIO);
+ showOnScreenMsg(killer, NpcStringId.USE_SCROLL_OF_ESCAPE_PIO_IN_YOUR_INVENTORY_NTALK_TO_PIO_TO_COMPLETE_THE_QUEST, ExShowScreenMessage.TOP_CENTER, 10000);
+ }
+ }
+ return super.onKill(npc, killer, isSummon);
+ }
+}
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11039_CommunicationBreakdown/33963-01.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11039_CommunicationBreakdown/33963-01.html
new file mode 100644
index 0000000000..e2f7f2dbb7
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11039_CommunicationBreakdown/33963-01.html
@@ -0,0 +1,4 @@
+Guard Kallesin:
+So, what brings you to me? Ah, is it about the Secret Material?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11039_CommunicationBreakdown/33963-02.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11039_CommunicationBreakdown/33963-02.html
new file mode 100644
index 0000000000..167404d2dc
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11039_CommunicationBreakdown/33963-02.html
@@ -0,0 +1,5 @@
+Guard Kallesin:
+So, that's you they've sent from Gludio? I use this material to deal with the curse. Thank you!
+It will be hard to pull this one off, so if you excuse me...
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11039_CommunicationBreakdown/33963-03.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11039_CommunicationBreakdown/33963-03.html
new file mode 100644
index 0000000000..078b39afb8
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11039_CommunicationBreakdown/33963-03.html
@@ -0,0 +1,4 @@
+Guard Kallesin:
+So, what brings you to me? Ah, is it about the Secret Material?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11039_CommunicationBreakdown/33963-04.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11039_CommunicationBreakdown/33963-04.html
new file mode 100644
index 0000000000..2d1032755b
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11039_CommunicationBreakdown/33963-04.html
@@ -0,0 +1,4 @@
+Guard Kallesin:
+So, what brings you to me? Ah, is it about the Secret Material?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11039_CommunicationBreakdown/33963-05.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11039_CommunicationBreakdown/33963-05.html
new file mode 100644
index 0000000000..2fa3cbf898
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11039_CommunicationBreakdown/33963-05.html
@@ -0,0 +1,4 @@
+Guard Kallesin:
+So, what brings you to me? Ah, is it about the Secret Material?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11039_CommunicationBreakdown/33963-06.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11039_CommunicationBreakdown/33963-06.html
new file mode 100644
index 0000000000..83711526a2
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11039_CommunicationBreakdown/33963-06.html
@@ -0,0 +1,3 @@
+Tarti:
+Artey cannot participate in this quest! The minimum level should be 20, and players who have not completed 2nd profession.
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11039_CommunicationBreakdown/Q11039_CommunicationBreakdown.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11039_CommunicationBreakdown/Q11039_CommunicationBreakdown.java
new file mode 100644
index 0000000000..a6b26982fe
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11039_CommunicationBreakdown/Q11039_CommunicationBreakdown.java
@@ -0,0 +1,172 @@
+/*
+ * 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.Q11039_CommunicationBreakdown;
+
+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;
+import org.l2jmobius.gameserver.model.holders.ItemHolder;
+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 quests.Q11038_GrowlersTurnedViolent.Q11038_GrowlersTurnedViolent;
+import quests.Q11040_AttackOfTheEnragedForest.Q11040_AttackOfTheEnragedForest;
+
+/**
+ * Communication Breakdown (11039)
+ * @URL https://l2wiki.com/Communication_Breakdown
+ * @author Dmitri
+ */
+public class Q11039_CommunicationBreakdown extends Quest
+{
+ // NPCs
+ private static final int PIO = 33963;
+ private static final int FUSSY_VILA = 24399;
+ private static final int FUSSY_ARBOR = 24400;
+ // Items
+ private static final int EMBEDDED_SHARD = 80674;
+ private static final ItemHolder SOE_PIO = new ItemHolder(80681, 1);
+ // Location
+ private static final Location TRAINING_GROUNDS_TELEPORT = new Location(-87808, 87292, -3424);
+
+ public Q11039_CommunicationBreakdown()
+ {
+ super(11039);
+ addStartNpc(PIO);
+ addTalkId(PIO);
+ addKillId(FUSSY_VILA, FUSSY_ARBOR);
+ registerQuestItems(SOE_PIO.getId(), EMBEDDED_SHARD);
+ addCondCompletedQuest(Q11038_GrowlersTurnedViolent.class.getSimpleName(), "33963-06.html");
+ setQuestNameNpcStringId(NpcStringId.LV_40_76_COMMUNICATION_BREAKDOWN);
+ }
+
+ @Override
+ public String onAdvEvent(String event, Npc npc, PlayerInstance player)
+ {
+ String htmltext = null;
+ final QuestState qs = getQuestState(player, false);
+ if (qs == null)
+ {
+ return htmltext;
+ }
+
+ switch (event)
+ {
+ case "33963-03.html":
+ {
+ htmltext = event;
+ break;
+ }
+ case "33963-02.html":
+ {
+ qs.startQuest();
+ htmltext = event;
+ break;
+ }
+ case "teleport":
+ {
+ if (qs.isCond(1))
+ {
+ player.teleToLocation(TRAINING_GROUNDS_TELEPORT);
+ }
+ break;
+ }
+ case "33963-05.html":
+ {
+ if (qs.isCond(2))
+ {
+ addExpAndSp(player, 174520303, 157068);
+ qs.exitQuest(false, true);
+ htmltext = event;
+
+ // Initialize next quest.
+ final Quest nextQuest = QuestManager.getInstance().getQuest(Q11040_AttackOfTheEnragedForest.class.getSimpleName());
+ if (nextQuest != null)
+ {
+ nextQuest.newQuestState(player);
+ }
+ }
+ 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() == PIO)
+ {
+ htmltext = "33963-01.html";
+ }
+ break;
+ }
+ case State.STARTED:
+ {
+ switch (npc.getId())
+ {
+ case PIO:
+ {
+ if (qs.isCond(1))
+ {
+ htmltext = "33963-02.html";
+ }
+ else if (qs.isCond(2))
+ {
+ htmltext = "33963-04.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))
+ {
+ if (giveItemRandomly(killer, EMBEDDED_SHARD, 1, 15, 0.5, true))
+ {
+ qs.setCond(2, true);
+ giveItems(killer, SOE_PIO);
+ showOnScreenMsg(killer, NpcStringId.USE_SCROLL_OF_ESCAPE_PIO_IN_YOUR_INVENTORY_NTALK_TO_PIO_TO_COMPLETE_THE_QUEST, ExShowScreenMessage.TOP_CENTER, 10000);
+ }
+ }
+ return super.onKill(npc, killer, isSummon);
+ }
+}
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11040_AttackOfTheEnragedForest/33963-01.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11040_AttackOfTheEnragedForest/33963-01.html
new file mode 100644
index 0000000000..2fa3cbf898
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11040_AttackOfTheEnragedForest/33963-01.html
@@ -0,0 +1,4 @@
+Guard Kallesin:
+So, what brings you to me? Ah, is it about the Secret Material?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11040_AttackOfTheEnragedForest/33963-02.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11040_AttackOfTheEnragedForest/33963-02.html
new file mode 100644
index 0000000000..3acb7c5486
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11040_AttackOfTheEnragedForest/33963-02.html
@@ -0,0 +1,5 @@
+Guard Kallesin:
+So, that's you they've sent from Gludio? I use this material to deal with the curse. Thank you!
+It will be hard to pull this one off, so if you excuse me...
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11040_AttackOfTheEnragedForest/33963-03.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11040_AttackOfTheEnragedForest/33963-03.html
new file mode 100644
index 0000000000..b25f1ef956
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11040_AttackOfTheEnragedForest/33963-03.html
@@ -0,0 +1,4 @@
+Guard Kallesin:
+So, what brings you to me? Ah, is it about the Secret Material?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11040_AttackOfTheEnragedForest/33963-04.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11040_AttackOfTheEnragedForest/33963-04.html
new file mode 100644
index 0000000000..e1b638b716
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11040_AttackOfTheEnragedForest/33963-04.html
@@ -0,0 +1,4 @@
+Guard Kallesin:
+So, what brings you to me? Ah, is it about the Secret Material?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11040_AttackOfTheEnragedForest/33963-06.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11040_AttackOfTheEnragedForest/33963-06.html
new file mode 100644
index 0000000000..83711526a2
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11040_AttackOfTheEnragedForest/33963-06.html
@@ -0,0 +1,3 @@
+Tarti:
+Artey cannot participate in this quest! The minimum level should be 20, and players who have not completed 2nd profession.
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11040_AttackOfTheEnragedForest/34505-01.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11040_AttackOfTheEnragedForest/34505-01.html
new file mode 100644
index 0000000000..7ccf278b26
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11040_AttackOfTheEnragedForest/34505-01.html
@@ -0,0 +1,4 @@
+Guard Kallesin:
+So, what brings you to me? Ah, is it about the Secret Material?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11040_AttackOfTheEnragedForest/34505-02.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11040_AttackOfTheEnragedForest/34505-02.html
new file mode 100644
index 0000000000..7ccf278b26
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11040_AttackOfTheEnragedForest/34505-02.html
@@ -0,0 +1,4 @@
+Guard Kallesin:
+So, what brings you to me? Ah, is it about the Secret Material?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11040_AttackOfTheEnragedForest/Q11040_AttackOfTheEnragedForest.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11040_AttackOfTheEnragedForest/Q11040_AttackOfTheEnragedForest.java
new file mode 100644
index 0000000000..66ef3b26ea
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/Q11040_AttackOfTheEnragedForest/Q11040_AttackOfTheEnragedForest.java
@@ -0,0 +1,197 @@
+/*
+ * 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.Q11040_AttackOfTheEnragedForest;
+
+import java.util.HashSet;
+import java.util.Set;
+
+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.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 quests.Q11039_CommunicationBreakdown.Q11039_CommunicationBreakdown;
+
+/**
+ * Attack of the Enraged Forest (11040)
+ * @URL https://l2wiki.com/Attack_of_the_Enraged_Forest
+ * @author Dmitri
+ */
+public class Q11040_AttackOfTheEnragedForest extends Quest
+{
+ // NPCs
+ private static final int PIO = 33963;
+ private static final int TARTI = 34505;
+ private static final int TINY_WHIRLWIND = 24401;
+ private static final int GIANT_WHIRLWIND = 24402;
+ // Items
+ private static final ItemHolder SOE_TARTI = new ItemHolder(80677, 1);
+ // Location
+ private static final Location TRAINING_GROUNDS_TELEPORT = new Location(-91374, 92270, -3360);
+ // Misc
+ private static final String KILL_COUNT_VAR = "KillCount";
+
+ public Q11040_AttackOfTheEnragedForest()
+ {
+ super(11040);
+ addStartNpc(PIO);
+ addTalkId(PIO, TARTI);
+ addKillId(TINY_WHIRLWIND, GIANT_WHIRLWIND);
+ registerQuestItems(SOE_TARTI.getId());
+ addCondCompletedQuest(Q11039_CommunicationBreakdown.class.getSimpleName(), "33963-06");
+ setQuestNameNpcStringId(NpcStringId.LV_40_76_ATTACK_OF_THE_ENRAGED_FOREST);
+ }
+
+ @Override
+ public String onAdvEvent(String event, Npc npc, PlayerInstance player)
+ {
+ String htmltext = null;
+ final QuestState qs = getQuestState(player, false);
+ if (qs == null)
+ {
+ return htmltext;
+ }
+
+ switch (event)
+ {
+ case "33963-03.html":
+ case "33963-05.html":
+ {
+ htmltext = event;
+ break;
+ }
+ case "33963-02.html":
+ {
+ qs.startQuest();
+ htmltext = event;
+ break;
+ }
+ case "teleport":
+ {
+ if (qs.isCond(1))
+ {
+ player.teleToLocation(TRAINING_GROUNDS_TELEPORT);
+ }
+ break;
+ }
+ case "34505-02.html":
+ {
+ if (qs.isCond(2))
+ {
+ addExpAndSp(player, 834929477, 595042);
+ giveAdena(player, 240000, true);
+ qs.exitQuest(false, true);
+ 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() == PIO)
+ {
+ htmltext = "33963-01.html";
+ }
+ break;
+ }
+ case State.STARTED:
+ {
+ switch (npc.getId())
+ {
+ case PIO:
+ {
+ if (qs.isCond(1))
+ {
+ htmltext = "33963-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_TARTI);
+ 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_PACK_OF_WINDIMA_2.getId(), true, qs.getInt(KILL_COUNT_VAR)));
+ return holder;
+ }
+ return super.getNpcLogList(player);
+ }
+}
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 55ec182293..c3efd7a344 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,8 +165,17 @@ import quests.Q10840_TimeToRecover.Q10840_TimeToRecover;
import quests.Q10843_AnomalyInTheEnchantedValley.Q10843_AnomalyInTheEnchantedValley;
import quests.Q10851_ElvenBotany.Q10851_ElvenBotany;
import quests.Q10856_SuperionAppears.Q10856_SuperionAppears;
+import quests.Q11025_PathOfDestinyProving.Q11025_PathOfDestinyProving;
import quests.Q11031_TrainingBeginsNow.Q11031_TrainingBeginsNow;
import quests.Q11032_CurseOfUndying.Q11032_CurseOfUndying;
+import quests.Q11033_AntidoteIngredients.Q11033_AntidoteIngredients;
+import quests.Q11034_ResurrectedOne.Q11034_ResurrectedOne;
+import quests.Q11035_DeathlyMischief.Q11035_DeathlyMischief;
+import quests.Q11036_ChangedSpirits.Q11036_ChangedSpirits;
+import quests.Q11037_WhyAreTheRatelHere.Q11037_WhyAreTheRatelHere;
+import quests.Q11038_GrowlersTurnedViolent.Q11038_GrowlersTurnedViolent;
+import quests.Q11039_CommunicationBreakdown.Q11039_CommunicationBreakdown;
+import quests.Q11040_AttackOfTheEnragedForest.Q11040_AttackOfTheEnragedForest;
import quests.custom.Q00529_RegularBarrierMaintenance.Q00529_RegularBarrierMaintenance;
import quests.custom.Q00560_HowToOvercomeFear.Q00560_HowToOvercomeFear;
import quests.custom.Q00589_ASecretChange.Q00589_ASecretChange;
@@ -480,14 +489,17 @@ public class QuestMasterHandler
Q10899_VeteranAdventurer.class, // TODO: Not done.
Q10900_PathToStrength.class, // TODO: Not done.
Q10901_AModelAdventurer.class, // TODO: Not done.
+ Q11025_PathOfDestinyProving.class,
Q11031_TrainingBeginsNow.class,
Q11032_CurseOfUndying.class,
- Q11034_ResurrectedOne.class, // TODO: Not done.
- Q11035_DeathlyMischief.class, // TODO: Not done.
- Q11037_WhyAreTheRatelHere.class, // TODO: Not done.
- Q11038_GrowlersTurnedViolent.class, // TODO: Not done.
- Q11039_CommunicationBreakdown.class, // TODO: Not done.
- Q11040_AttackOfTheEnragedForest.class, // TODO: Not done.
+ Q11033_AntidoteIngredients.class,
+ Q11034_ResurrectedOne.class,
+ Q11035_DeathlyMischief.class,
+ Q11036_ChangedSpirits.class,
+ Q11037_WhyAreTheRatelHere.class,
+ Q11038_GrowlersTurnedViolent.class,
+ Q11039_CommunicationBreakdown.class,
+ Q11040_AttackOfTheEnragedForest.class,
Q11042_SuspiciousMovements.class, // TODO: Not done.
Q11043_SomeonesTrace.class, // TODO: Not done.
Q11044_KetraOrcs.class, // TODO: Not done.
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/not_done/Q11034_ResurrectedOne.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/not_done/Q11034_ResurrectedOne.java
deleted file mode 100644
index 5b09e9833b..0000000000
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/not_done/Q11034_ResurrectedOne.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 Q11034_ResurrectedOne extends Quest
-{
- private static final int START_NPC = 33177;
-
- public Q11034_ResurrectedOne()
- {
- super(11034);
- addStartNpc(START_NPC);
- addTalkId(START_NPC);
- addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
- }
-}
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/not_done/Q11035_DeathlyMischief.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/not_done/Q11035_DeathlyMischief.java
deleted file mode 100644
index ca31889a44..0000000000
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/not_done/Q11035_DeathlyMischief.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 Q11035_DeathlyMischief extends Quest
-{
- private static final int START_NPC = 33509;
-
- public Q11035_DeathlyMischief()
- {
- super(11035);
- addStartNpc(START_NPC);
- addTalkId(START_NPC);
- addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
- }
-}
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/not_done/Q11037_WhyAreTheRatelHere.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/not_done/Q11037_WhyAreTheRatelHere.java
deleted file mode 100644
index 85bbb3d37c..0000000000
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/not_done/Q11037_WhyAreTheRatelHere.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 Q11037_WhyAreTheRatelHere extends Quest
-{
- private static final int START_NPC = 33963;
-
- public Q11037_WhyAreTheRatelHere()
- {
- super(11037);
- addStartNpc(START_NPC);
- addTalkId(START_NPC);
- addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
- }
-}
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/not_done/Q11038_GrowlersTurnedViolent.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/not_done/Q11038_GrowlersTurnedViolent.java
deleted file mode 100644
index f1b5abc524..0000000000
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/not_done/Q11038_GrowlersTurnedViolent.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 Q11038_GrowlersTurnedViolent extends Quest
-{
- private static final int START_NPC = 33963;
-
- public Q11038_GrowlersTurnedViolent()
- {
- super(11038);
- addStartNpc(START_NPC);
- addTalkId(START_NPC);
- addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
- }
-}
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/not_done/Q11039_CommunicationBreakdown.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/not_done/Q11039_CommunicationBreakdown.java
deleted file mode 100644
index 0d8288abeb..0000000000
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/not_done/Q11039_CommunicationBreakdown.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 Q11039_CommunicationBreakdown extends Quest
-{
- private static final int START_NPC = 33963;
-
- public Q11039_CommunicationBreakdown()
- {
- super(11039);
- addStartNpc(START_NPC);
- addTalkId(START_NPC);
- addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
- }
-}
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/not_done/Q11040_AttackOfTheEnragedForest.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/not_done/Q11040_AttackOfTheEnragedForest.java
deleted file mode 100644
index 2e770a34d7..0000000000
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/quests/not_done/Q11040_AttackOfTheEnragedForest.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 Q11040_AttackOfTheEnragedForest extends Quest
-{
- private static final int START_NPC = 33963;
-
- public Q11040_AttackOfTheEnragedForest()
- {
- super(11040);
- 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 a4a23bfb16..0d5f943ac9 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
@@ -722,6 +722,7 @@
+
@@ -733,6 +734,7 @@
+
@@ -744,6 +746,7 @@
+
@@ -810,6 +813,10 @@
+
+
+
+
@@ -822,6 +829,10 @@
+
+
+
+
@@ -834,6 +845,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 56b7c88c1a..4dc881cf60 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
@@ -956,16 +956,70 @@
A14200
+ SELF
+ SINGLE
+ 80679
+ 1
+
+
+ CASTER
+ LAWFUL
+
+
+
+
+
+ -41314
+ 122982
+ -2904
+
+ A14200
+ SELF
+ SINGLE
+ 80680
+ 1
+
+
+ CASTER
+ LAWFUL
+
+
+
+
+
+ -46159
+ 109438
+ -3808
+
+ A14200
+ SELF
+ SINGLE
+ 80681
+ 1
+
+
+ CASTER
+ LAWFUL
+
+
+
+
+
+ -93474
+ 89730
+ -3208
+
+ A1
diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java
index c4ce083e26..79bbb9849d 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java
+++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java
@@ -22,6 +22,7 @@ import org.l2jmobius.gameserver.data.xml.impl.CategoryData;
import org.l2jmobius.gameserver.data.xml.impl.SkillData;
import org.l2jmobius.gameserver.data.xml.impl.SkillTreesData;
import org.l2jmobius.gameserver.enums.CategoryType;
+import org.l2jmobius.gameserver.enums.Race;
import org.l2jmobius.gameserver.model.SkillLearn;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.base.ClassId;
@@ -73,7 +74,7 @@ public class ExRequestClassChange implements IClientIncomingPacket
final int playerLevel = player.getLevel();
if (player.isInCategory(CategoryType.FIRST_CLASS_GROUP) && (playerLevel >= 18))
{
- canChange = CategoryData.getInstance().isInCategory(CategoryType.SECOND_CLASS_GROUP, _classId);
+ canChange = CategoryData.getInstance().isInCategory(player.getRace() == Race.ERTHEIA ? CategoryType.THIRD_CLASS_GROUP : CategoryType.SECOND_CLASS_GROUP, _classId);
}
else if (player.isInCategory(CategoryType.SECOND_CLASS_GROUP) && (playerLevel >= 38))
{