High Priest Innocentin:
+What brings you here?
+I'm just an empthy shell that can't hear the goddess' voice anymore.
+
+
\ No newline at end of file
diff --git a/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/31328-02.htm b/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/31328-02.htm
new file mode 100644
index 0000000000..6eef8869a4
--- /dev/null
+++ b/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/31328-02.htm
@@ -0,0 +1,5 @@
+High Priest Innocentin:
+Oh, you are the Ertheia That the messengers promised would help us? Lately, we've had a lot of problems here in Rune Castle. We haven't been able to take care of everything because of the sheer amout.
+Do you think you can help us?
+
+
\ No newline at end of file
diff --git a/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/31328-03.htm b/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/31328-03.htm
new file mode 100644
index 0000000000..a4a20c309c
--- /dev/null
+++ b/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/31328-03.htm
@@ -0,0 +1,4 @@
+High Priest Innocentin:
+Thank you. I never thought that one of the Ertheia that only come out in legends would come to help us like this... It looks like the gods haven't forsaken us.
+First, go to the Swamp of Screams and find Tracker Dokara. He will tell you the details.
+
\ No newline at end of file
diff --git a/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/31328-04.html b/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/31328-04.html
new file mode 100644
index 0000000000..c8e43a0fee
--- /dev/null
+++ b/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/31328-04.html
@@ -0,0 +1,4 @@
+High Priest Innocentin:
+I'm sure an Ertheia knows much better than us.
+First, go to the Swamp of Screams and find Tracker Dokara. He will tell you the details.
+
\ No newline at end of file
diff --git a/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/33847-01.html b/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/33847-01.html
new file mode 100644
index 0000000000..72d19506bd
--- /dev/null
+++ b/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/33847-01.html
@@ -0,0 +1,4 @@
+Tracker Dokara:
+Who are you and why are you here?
+
+
\ No newline at end of file
diff --git a/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/33847-02.htm b/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/33847-02.htm
new file mode 100644
index 0000000000..8952563ffe
--- /dev/null
+++ b/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/33847-02.htm
@@ -0,0 +1,4 @@
+Tracker Dokara:
+Innocentin sent you? Hm. I did mention in passing that I needed some help. Looks like he hadn't forgotten.
+
+
\ No newline at end of file
diff --git a/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/33847-03.htm b/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/33847-03.htm
new file mode 100644
index 0000000000..f1a662f936
--- /dev/null
+++ b/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/33847-03.htm
@@ -0,0 +1,4 @@
+Tracker Dokara:
+Good. They've sent us someone who could actually be of some help.
+(You can get next Letters from the Queen at Lv.70.)
+
\ No newline at end of file
diff --git a/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/Announce.html b/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/Announce.html
new file mode 100644
index 0000000000..99bb7890c3
--- /dev/null
+++ b/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/Announce.html
@@ -0,0 +1,5 @@
+The Queen's Letter
+The Town of Rune asked for help.
+We are held by an oath to help. Go see High Priest Innocentin in Town of Rune. He will tell you about the incidents in the Swamp of Screams.
+
+
\ No newline at end of file
diff --git a/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/Q10789_LettersFromTheQueen_SwampOfScreams.java b/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/Q10789_LettersFromTheQueen_SwampOfScreams.java
new file mode 100644
index 0000000000..f5a8e28a40
--- /dev/null
+++ b/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/Q10789_LettersFromTheQueen_SwampOfScreams.java
@@ -0,0 +1,270 @@
+/*
+ * 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.Q10789_LettersFromTheQueen_SwampOfScreams;
+
+import com.l2jmobius.Config;
+import com.l2jmobius.gameserver.ai.CtrlIntention;
+import com.l2jmobius.gameserver.cache.HtmCache;
+import com.l2jmobius.gameserver.enums.QuestSound;
+import com.l2jmobius.gameserver.enums.Race;
+import com.l2jmobius.gameserver.handler.BypassHandler;
+import com.l2jmobius.gameserver.handler.IBypassHandler;
+import com.l2jmobius.gameserver.model.Location;
+import com.l2jmobius.gameserver.model.actor.L2Character;
+import com.l2jmobius.gameserver.model.actor.L2Npc;
+import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jmobius.gameserver.model.events.EventType;
+import com.l2jmobius.gameserver.model.events.ListenerRegisterType;
+import com.l2jmobius.gameserver.model.events.annotations.RegisterEvent;
+import com.l2jmobius.gameserver.model.events.annotations.RegisterType;
+import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerLevelChanged;
+import com.l2jmobius.gameserver.model.holders.ItemHolder;
+import com.l2jmobius.gameserver.model.quest.Quest;
+import com.l2jmobius.gameserver.model.quest.QuestState;
+import com.l2jmobius.gameserver.model.quest.State;
+import com.l2jmobius.gameserver.network.NpcStringId;
+import com.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
+import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
+
+/**
+ * Letters From The Queen: Swamp Of Screams (10789)
+ * @URL https://l2wiki.com/Letters_from_the_Queen:_Swamp_of_Screams
+ * @author Gigi
+ */
+public class Q10789_LettersFromTheQueen_SwampOfScreams extends Quest implements IBypassHandler
+{
+ // NPCs
+ private static final int INNOCENTIN = 31328;
+ private static final int DOKARA = 33847;
+ // Items
+ private static final ItemHolder SCROLL_OF_ESCAPE_SWAMP_OF_SCREAMS = new ItemHolder(37030, 1);
+ private static final ItemHolder STEEL_DOOR_GUILD = new ItemHolder(37045, 91);
+ private static final ItemHolder EWA = new ItemHolder(729, 1);
+ // Reward
+ private static final int EXP_REWARD = 942690;
+ private static final int SP_REWARD = 226;
+ // Misc
+ private static final int MIN_LEVEL = 65;
+ private static final int MAX_LEVEL = 69;
+ // Teleport
+ private static final Location TP_LOC = new Location(36563, -49178, -1128);
+ private static final String[] TP_COMMANDS =
+ {
+ "Q10789_Teleport"
+ };
+
+ public Q10789_LettersFromTheQueen_SwampOfScreams()
+ {
+ super(10789, Q10789_LettersFromTheQueen_SwampOfScreams.class.getSimpleName(), "Letters from the Queen: SwampOfScreams");
+ addStartNpc(INNOCENTIN);
+ addTalkId(INNOCENTIN, DOKARA);
+ addCondRace(Race.ERTHEIA, "noErtheia.html");
+ addCondMinLevel(MIN_LEVEL, "no_level.html");
+ BypassHandler.getInstance().registerHandler(this);
+ }
+
+ @Override
+ public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
+ {
+ final QuestState qs = getQuestState(player, false);
+ if (qs == null)
+ {
+ return null;
+ }
+ String htmltext = null;
+ switch (event)
+ {
+ case "31328-02.htm":
+ case "31328-04.html":
+ case "33847-02.htm":
+ {
+ htmltext = event;
+ break;
+ }
+ case "31328-03.htm": // start the quest
+ {
+ qs.startQuest();
+ if (getQuestItemsCount(player, SCROLL_OF_ESCAPE_SWAMP_OF_SCREAMS.getId()) < 1)
+ {
+ giveItems(player, SCROLL_OF_ESCAPE_SWAMP_OF_SCREAMS);
+ player.sendPacket(new ExShowScreenMessage("Try using the teleport scroll Innocentin gave you to go to Swamp Of Screams.", 10000));
+ qs.setCond(2, true);
+ htmltext = event;
+ }
+ break;
+ }
+ case "33847-03.htm":
+ {
+ if (qs.isCond(2))
+ {
+ showOnScreenMsg(player, NpcStringId.GROW_STRONGER_HERE_UNTIL_YOU_RECEIVE_THE_NEXT_LETTER_FROM_QUEEN_NAVARI_AT_LV_70, ExShowScreenMessage.TOP_CENTER, 5000);
+ giveItems(player, STEEL_DOOR_GUILD);
+ giveItems(player, EWA);
+ addExpAndSp(player, EXP_REWARD, SP_REWARD);
+ playSound(player, QuestSound.ITEMSOUND_QUEST_FINISH);
+ qs.exitQuest(false, true);
+ htmltext = event;
+ }
+ break;
+ }
+ }
+ return htmltext;
+ }
+
+ @Override
+ public String onTalk(L2Npc npc, L2PcInstance player)
+ {
+ final QuestState qs = getQuestState(player, true);
+ String htmltext = null;
+ if (qs == null)
+ {
+ return htmltext;
+ }
+
+ if (player.getRace() != Race.ERTHEIA)
+ {
+ return "noErtheia.html";
+ }
+
+ switch (qs.getState())
+ {
+ case State.CREATED:
+ {
+ switch (npc.getId())
+ {
+ case INNOCENTIN:
+ {
+ htmltext = "31328-01.html";
+ break;
+ }
+ case DOKARA:
+ {
+ if (player.getRace() != Race.ERTHEIA)
+ {
+ htmltext = getNoQuestMsg(player);
+ }
+ else if (qs.isCreated())
+ {
+ htmltext = getNoQuestMsg(player);
+ }
+ break;
+ }
+ }
+ break;
+ }
+ case State.STARTED:
+ {
+ switch (npc.getId())
+ {
+ case INNOCENTIN:
+ {
+ if (qs.isCond(1))
+ {
+ playSound(player, QuestSound.ITEMSOUND_QUEST_MIDDLE);
+ htmltext = "31328-03.htm";
+ }
+ else if (qs.isCond(2))
+ {
+ htmltext = "31328-04.html";
+ }
+ break;
+ }
+ case DOKARA:
+ {
+ if (qs.isCond(2))
+ {
+ htmltext = "33847-01.html";
+ }
+ break;
+ }
+ }
+ break;
+ }
+ case State.COMPLETED:
+ {
+ htmltext = getAlreadyCompletedMsg(player);
+ break;
+ }
+ }
+ return htmltext;
+ }
+
+ @RegisterEvent(EventType.ON_PLAYER_LEVEL_CHANGED)
+ @RegisterType(ListenerRegisterType.GLOBAL)
+ public void OnPlayerLevelChanged(OnPlayerLevelChanged event)
+ {
+ if (Config.DISABLE_TUTORIAL)
+ {
+ return;
+ }
+ final L2PcInstance player = event.getActiveChar();
+ final int oldLevel = event.getOldLevel();
+ final int newLevel = event.getNewLevel();
+ if ((oldLevel == (newLevel - 1)) && (player.getLevel() >= MIN_LEVEL) && (player.getLevel() <= MAX_LEVEL) && (player.getRace() == Race.ERTHEIA))
+ {
+ final QuestState qs = getQuestState(player, false);
+ if (qs == null)
+ {
+ final NpcHtmlMessage html = new NpcHtmlMessage(0, 0);
+ html.setHtml(HtmCache.getInstance().getHtm(player.getHtmlPrefix(), "scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/Announce.html"));
+ player.sendPacket(html);
+ }
+ }
+ }
+
+ @Override
+ public boolean useBypass(String command, L2PcInstance player, L2Character bypassOrigin)
+ {
+ final QuestState qs = getQuestState(player, false);
+ if ((qs != null) || (player.getLevel() < MIN_LEVEL) || (player.getLevel() > MAX_LEVEL) || (player.getRace() != Race.ERTHEIA))
+ {
+ return false;
+ }
+ if (player.isInParty())
+ {
+ player.sendPacket(new ExShowScreenMessage("You cannot teleport when you are in party.", 5000));
+ }
+ else if (player.isInCombat())
+ {
+ player.sendPacket(new ExShowScreenMessage("You cannot teleport when you in combat status.", 5000));
+ }
+ else if (player.isInDuel())
+ {
+ player.sendPacket(new ExShowScreenMessage("You cannot teleport when you are in a duel.", 5000));
+ }
+ else if (player.isInOlympiadMode())
+ {
+ player.sendPacket(new ExShowScreenMessage("You cannot teleport when you are in Olympiad.", 5000));
+ }
+ else if (player.isInVehicle())
+ {
+ player.sendPacket(new ExShowScreenMessage("You cannot teleport when you are in any vehicle or mount.", 5000));
+ }
+ else
+ {
+ player.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
+ player.teleToLocation(TP_LOC);
+ }
+ return true;
+ }
+
+ @Override
+ public String[] getBypassList()
+ {
+ return TP_COMMANDS;
+ }
+}
\ No newline at end of file
diff --git a/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/noErtheia.html b/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/noErtheia.html
new file mode 100644
index 0000000000..ea67e16f1c
--- /dev/null
+++ b/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/noErtheia.html
@@ -0,0 +1,3 @@
+High Priest Orven:
+You are not Ertheia, this quest is not for you.
+
\ No newline at end of file
diff --git a/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/no_level.htm b/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/no_level.htm
new file mode 100644
index 0000000000..e8ee20551f
--- /dev/null
+++ b/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/no_level.htm
@@ -0,0 +1,3 @@
+You don't meet level requirements
+(Quest available from level 65 - 69)
+
\ No newline at end of file
diff --git a/trunk/dist/game/data/scripts/quests/QuestMasterHandler.java b/trunk/dist/game/data/scripts/quests/QuestMasterHandler.java
index 4d5b803f02..9ad1ea3149 100644
--- a/trunk/dist/game/data/scripts/quests/QuestMasterHandler.java
+++ b/trunk/dist/game/data/scripts/quests/QuestMasterHandler.java
@@ -291,6 +291,7 @@ import quests.Q10764_FreeSpirit.Q10764_FreeSpirit;
import quests.Q10769_LettersFromTheQueen_CrumaTower.Q10769_LettersFromTheQueen_CrumaTower;
import quests.Q10782_LettersFromTheQueen_ForsakenPlains.Q10782_LettersFromTheQueen_ForsakenPlains;
import quests.Q10785_LettersFromTheQueen_FieldsOfMassacre.Q10785_LettersFromTheQueen_FieldsOfMassacre;
+import quests.Q10789_LettersFromTheQueen_SwampOfScreams.Q10789_LettersFromTheQueen_SwampOfScreams;
/**
* @author NosBit
@@ -572,7 +573,8 @@ final class QuestMasterHandler
Q10764_FreeSpirit.class,
Q10769_LettersFromTheQueen_CrumaTower.class,
Q10782_LettersFromTheQueen_ForsakenPlains.class,
- Q10785_LettersFromTheQueen_FieldsOfMassacre.class
+ Q10785_LettersFromTheQueen_FieldsOfMassacre.class,
+ Q10789_LettersFromTheQueen_SwampOfScreams.class
};
public static void main(String[] args)