diff --git a/trunk/dist/db_installer/sql/game/spawnlist.sql b/trunk/dist/db_installer/sql/game/spawnlist.sql index d9c7d65a87..c12550a059 100644 --- a/trunk/dist/db_installer/sql/game/spawnlist.sql +++ b/trunk/dist/db_installer/sql/game/spawnlist.sql @@ -49696,3 +49696,7 @@ INSERT INTO `spawnlist` VALUES INSERT INTO `spawnlist` VALUES ('Imperial Tomb', 1, 33372, 186611, -75975, -2824, 0, 0, 8465, 60, 0, 0, 0), ('Imperial Tomb', 1, 33372, 186569, -75928, -2824, 0, 0, 7980, 60, 0, 0, 0); + +-- Dokara +INSERT INTO `spawnlist` VALUES +("Swamp of Screams", 1, 33847, 69540, -50392, -3292, 0, 0, 10000, 60, 0, 0, 0); diff --git a/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/31328-01.html b/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/31328-01.html new file mode 100644 index 0000000000..ef902651d1 --- /dev/null +++ b/trunk/dist/game/data/scripts/quests/Q10789_LettersFromTheQueen_SwampOfScreams/31328-01.html @@ -0,0 +1,5 @@ +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)