Addition of Dimensional Warp quests (2 to 7).
This commit is contained in:
		| @@ -152,12 +152,6 @@ | ||||
| 10731 The Minstrel's Song, Part 6 | ||||
| 10748 Mysterious Suggestion - 1 | ||||
| 10749 Mysterious Suggestion - 2 | ||||
| 10802 The Dimensional Warp, Part 2 | ||||
| 10803 The Dimensional Warp, Part 3 | ||||
| 10804 The Dimensional Warp, Part 4 | ||||
| 10805 The Dimensional Warp, Part 5 | ||||
| 10806 The Dimensional Warp, Part 6 | ||||
| 10807 The Dimensional Warp, Part 7 | ||||
| 10844 Bloody Battle - Seizing Supplies | ||||
| 10845 Bloody Battle - Rescue the Smiths | ||||
| 10846 Bloody Battle - Meeting the Commander | ||||
|   | ||||
| @@ -41,7 +41,7 @@ public class Q10801_TheDimensionalWarpPart1 extends Quest | ||||
| 	private static final int RESED = 33974; | ||||
| 	// Monsters | ||||
| 	private static final int DIMENSIONAL_BUGBEAR = 23465; | ||||
| 	// other | ||||
| 	// Others | ||||
| 	private static final int MIN_LEVEL = 99; | ||||
| 	private static final int DIMENSIONAL_BRACELET_STAGE_1 = 39747; | ||||
| 	private static final int WARP_CRYSTAL = 39597; | ||||
|   | ||||
| @@ -0,0 +1,4 @@ | ||||
| <html><body>Resed:<br> | ||||
| Are you trying to enter the Dimensional Warp? It's not a place for people like you.<br> | ||||
| (Only characters Lv. 99 or above may undertake this quest.) | ||||
| </body></html> | ||||
| @@ -0,0 +1,5 @@ | ||||
| <html><body>Resed:<br> | ||||
| Have you been inside Dimensional Warp? My job is to send the explorers to the Dimensional Warp, but I don't have enough information here. I'm continuously collecting more, but it's still not enough.<br> | ||||
| I know it won't be easy, but can you do me a favor?<br>  | ||||
| <Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10802_TheDimensionalWarpPart2 33974-02.htm">"What is it?"</Button> | ||||
| </body></html> | ||||
| @@ -0,0 +1,5 @@ | ||||
| <html><body>Resed:<br> | ||||
| In the early stages of a Dimensional Warp, <font color="LEVEL">Dimensional Binders</font> come out.<br> | ||||
| But we still don't have enough information about them. I need more information about them because people run into them the most.<br>  | ||||
| <Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10802_TheDimensionalWarpPart2 33974-03.htm">"How many do you need?"</Button> | ||||
| </body></html> | ||||
| @@ -0,0 +1,5 @@ | ||||
| <html><body>Resed:<br> | ||||
| Can we start with 100?<br> | ||||
| They come out often, so it won't be too hard. Thank you!<br>  | ||||
| <Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10802_TheDimensionalWarpPart2 33974-04.htm">"I didn't say yes yet..."</Button> | ||||
| </body></html> | ||||
| @@ -0,0 +1,3 @@ | ||||
| <html><body>Resed:<br> | ||||
| Kill 100 <font color="LEVEL">Dimensional Binders</font> and come back to me. | ||||
| </body></html> | ||||
| @@ -0,0 +1,4 @@ | ||||
| <html><body>Resed:<br> | ||||
| We still don't have enough information. That's not enough.<br> | ||||
| Go kill more <font color="LEVEL">Dimensional Binders</font>. | ||||
| </body></html> | ||||
| @@ -0,0 +1,5 @@ | ||||
| <html><body>Resed:<br> | ||||
| Thank you. This will be enough.<br> | ||||
| Can You give me the information now?<br> | ||||
| <Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10802_TheDimensionalWarpPart2 33974-07.html">"Yup"</Button> | ||||
| </body></html> | ||||
| @@ -0,0 +1,4 @@ | ||||
| <html><body>Resed:<br> | ||||
| Good work. You're almost at the finish line.<br> | ||||
| The reward is better than the last time. Take it. | ||||
| </body></html> | ||||
| @@ -0,0 +1,179 @@ | ||||
| /* | ||||
|  * 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 <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package quests.Q10802_TheDimensionalWarpPart2; | ||||
|  | ||||
| import java.util.HashSet; | ||||
| import java.util.Set; | ||||
|  | ||||
| import com.l2jmobius.Config; | ||||
| import com.l2jmobius.gameserver.enums.QuestSound; | ||||
| import com.l2jmobius.gameserver.model.L2Party; | ||||
| import com.l2jmobius.gameserver.model.actor.L2Npc; | ||||
| import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; | ||||
| import com.l2jmobius.gameserver.model.holders.NpcLogListHolder; | ||||
| import com.l2jmobius.gameserver.model.quest.Quest; | ||||
| import com.l2jmobius.gameserver.model.quest.QuestState; | ||||
| import com.l2jmobius.gameserver.model.quest.State; | ||||
|  | ||||
| import quests.Q10801_TheDimensionalWarpPart1.Q10801_TheDimensionalWarpPart1; | ||||
|  | ||||
| /** | ||||
|  * The Dimensional Warp, Part 2 (10802) | ||||
|  * @URL https://l2wiki.com/The_Dimensional_Warp,_Part_2 | ||||
|  * @author Mobius | ||||
|  */ | ||||
| public class Q10802_TheDimensionalWarpPart2 extends Quest | ||||
| { | ||||
| 	// NPC | ||||
| 	private static final int RESED = 33974; | ||||
| 	// Monsters | ||||
| 	private static final int DIMENSIONAL_BINDER = 23467; | ||||
| 	// Others | ||||
| 	private static final int MIN_LEVEL = 99; | ||||
| 	private static final int WARP_CRYSTAL = 39597; | ||||
| 	 | ||||
| 	public Q10802_TheDimensionalWarpPart2() | ||||
| 	{ | ||||
| 		super(10802); | ||||
| 		addStartNpc(RESED); | ||||
| 		addTalkId(RESED); | ||||
| 		addKillId(DIMENSIONAL_BINDER); | ||||
| 		addCondMinLevel(MIN_LEVEL, "33974-00.htm"); | ||||
| 		addCondCompletedQuest(Q10801_TheDimensionalWarpPart1.class.getSimpleName(), ""); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) | ||||
| 	{ | ||||
| 		String htmltext = null; | ||||
| 		final QuestState qs = getQuestState(player, false); | ||||
| 		if (qs == null) | ||||
| 		{ | ||||
| 			return htmltext; | ||||
| 		} | ||||
| 		 | ||||
| 		switch (event) | ||||
| 		{ | ||||
| 			case "33974-02.htm": | ||||
| 			case "33974-03.htm": | ||||
| 			{ | ||||
| 				htmltext = event; | ||||
| 				break; | ||||
| 			} | ||||
| 			case "33974-04.htm": | ||||
| 			{ | ||||
| 				qs.startQuest(); | ||||
| 				htmltext = event; | ||||
| 				break; | ||||
| 			} | ||||
| 			case "33974-07.html": | ||||
| 			{ | ||||
| 				if (qs.isCond(2)) | ||||
| 				{ | ||||
| 					if (player.getLevel() >= MIN_LEVEL) | ||||
| 					{ | ||||
| 						addExpAndSp(player, 49380951086L, 0); | ||||
| 						giveItems(player, WARP_CRYSTAL, 300); | ||||
| 						qs.exitQuest(false, true); | ||||
| 						htmltext = event; | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						htmltext = getNoQuestLevelRewardMsg(player); | ||||
| 					} | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		return htmltext; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String onTalk(L2Npc npc, L2PcInstance player) | ||||
| 	{ | ||||
| 		final QuestState qs = getQuestState(player, true); | ||||
| 		String htmltext = getNoQuestMsg(player); | ||||
| 		 | ||||
| 		switch (qs.getState()) | ||||
| 		{ | ||||
| 			case State.CREATED: | ||||
| 			{ | ||||
| 				htmltext = "33974-01.htm"; | ||||
| 				break; | ||||
| 			} | ||||
| 			case State.STARTED: | ||||
| 			{ | ||||
| 				htmltext = (qs.isCond(1)) ? "33974-05.html" : "33974-06.html"; | ||||
| 				break; | ||||
| 			} | ||||
| 			case State.COMPLETED: | ||||
| 			{ | ||||
| 				htmltext = getAlreadyCompletedMsg(player); | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		return htmltext; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon) | ||||
| 	{ | ||||
| 		L2Party party = killer.getParty(); | ||||
| 		if (party != null) | ||||
| 		{ | ||||
| 			party.getMembers().forEach(p -> onKill(npc, p)); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			onKill(npc, killer); | ||||
| 		} | ||||
| 		return super.onKill(npc, killer, isSummon); | ||||
| 	} | ||||
| 	 | ||||
| 	private void onKill(L2Npc npc, L2PcInstance killer) | ||||
| 	{ | ||||
| 		final QuestState qs = getQuestState(killer, false); | ||||
| 		 | ||||
| 		if ((qs != null) && qs.isCond(1) && (npc.calculateDistance3D(killer) <= Config.ALT_PARTY_RANGE)) | ||||
| 		{ | ||||
| 			int killedBugbear = qs.getInt("killed_" + DIMENSIONAL_BINDER); | ||||
| 			if (killedBugbear < 100) | ||||
| 			{ | ||||
| 				qs.set("killed_" + DIMENSIONAL_BINDER, ++killedBugbear); | ||||
| 				playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 			} | ||||
| 			if (killedBugbear >= 100) | ||||
| 			{ | ||||
| 				qs.setCond(2, true); | ||||
| 			} | ||||
| 			sendNpcLogList(killer); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Set<NpcLogListHolder> getNpcLogList(L2PcInstance player) | ||||
| 	{ | ||||
| 		final QuestState qs = getQuestState(player, false); | ||||
| 		if ((qs != null) && qs.isCond(1)) | ||||
| 		{ | ||||
| 			final Set<NpcLogListHolder> holder = new HashSet<>(); | ||||
| 			holder.add(new NpcLogListHolder(DIMENSIONAL_BINDER, false, qs.getInt("killed_" + DIMENSIONAL_BINDER))); | ||||
| 			return holder; | ||||
| 		} | ||||
| 		return super.getNpcLogList(player); | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,4 @@ | ||||
| <html><body>Resed:<br> | ||||
| Are you trying to enter the Dimensional Warp? It's not a place for people like you.<br> | ||||
| (Only characters Lv. 99 or above may undertake this quest.) | ||||
| </body></html> | ||||
| @@ -0,0 +1,5 @@ | ||||
| <html><body>Resed:<br> | ||||
| Have you been inside Dimensional Warp? My job is to send the explorers to the Dimensional Warp, but I don't have enough information here. I'm continuously collecting more, but it's still not enough.<br> | ||||
| I know it won't be easy, but can you do me a favor?<br>  | ||||
| <Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10803_TheDimensionalWarpPart3 33974-02.htm">"What is it?"</Button> | ||||
| </body></html> | ||||
| @@ -0,0 +1,5 @@ | ||||
| <html><body>Resed:<br> | ||||
| In the early stages of a Dimensional Warp, <font color="LEVEL">Unworldly Etins</font> come out.<br> | ||||
| But we still don't have enough information about them. I need more information about them because people run into them the most.<br>  | ||||
| <Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10803_TheDimensionalWarpPart3 33974-03.htm">"How many do you need?"</Button> | ||||
| </body></html> | ||||
| @@ -0,0 +1,5 @@ | ||||
| <html><body>Resed:<br> | ||||
| Can we start with 100?<br> | ||||
| They come out often, so it won't be too hard. Thank you!<br>  | ||||
| <Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10803_TheDimensionalWarpPart3 33974-04.htm">"I didn't say yes yet..."</Button> | ||||
| </body></html> | ||||
| @@ -0,0 +1,3 @@ | ||||
| <html><body>Resed:<br> | ||||
| Kill 100 <font color="LEVEL">Unworldly Etins</font> and come back to me. | ||||
| </body></html> | ||||
| @@ -0,0 +1,4 @@ | ||||
| <html><body>Resed:<br> | ||||
| We still don't have enough information. That's not enough.<br> | ||||
| Go kill more <font color="LEVEL">Unworldly Etins</font>. | ||||
| </body></html> | ||||
| @@ -0,0 +1,5 @@ | ||||
| <html><body>Resed:<br> | ||||
| Thank you. This will be enough.<br> | ||||
| Can You give me the information now?<br> | ||||
| <Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10803_TheDimensionalWarpPart3 33974-07.html">"Yup"</Button> | ||||
| </body></html> | ||||
| @@ -0,0 +1,4 @@ | ||||
| <html><body>Resed:<br> | ||||
| Good work. You're almost at the finish line.<br> | ||||
| The reward is better than the last time. Take it. | ||||
| </body></html> | ||||
| @@ -0,0 +1,181 @@ | ||||
| /* | ||||
|  * 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 <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package quests.Q10803_TheDimensionalWarpPart3; | ||||
|  | ||||
| import java.util.HashSet; | ||||
| import java.util.Set; | ||||
|  | ||||
| import com.l2jmobius.Config; | ||||
| import com.l2jmobius.gameserver.enums.QuestSound; | ||||
| import com.l2jmobius.gameserver.model.L2Party; | ||||
| import com.l2jmobius.gameserver.model.actor.L2Npc; | ||||
| import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; | ||||
| import com.l2jmobius.gameserver.model.holders.NpcLogListHolder; | ||||
| import com.l2jmobius.gameserver.model.quest.Quest; | ||||
| import com.l2jmobius.gameserver.model.quest.QuestState; | ||||
| import com.l2jmobius.gameserver.model.quest.State; | ||||
|  | ||||
| import quests.Q10802_TheDimensionalWarpPart2.Q10802_TheDimensionalWarpPart2; | ||||
|  | ||||
| /** | ||||
|  * The Dimensional Warp, Part 3 (10803) | ||||
|  * @URL https://l2wiki.com/The_Dimensional_Warp,_Part_3 | ||||
|  * @author Mobius | ||||
|  */ | ||||
| public class Q10803_TheDimensionalWarpPart3 extends Quest | ||||
| { | ||||
| 	// NPC | ||||
| 	private static final int RESED = 33974; | ||||
| 	// Monsters | ||||
| 	private static final int UNWORDLY_ETIN = 23471; | ||||
| 	// Others | ||||
| 	private static final int MIN_LEVEL = 99; | ||||
| 	private static final int BLOODY_ETERNAL_ENHANCEMENT_STONE = 3556; | ||||
| 	private static final int WARP_CRYSTAL = 39597; | ||||
| 	 | ||||
| 	public Q10803_TheDimensionalWarpPart3() | ||||
| 	{ | ||||
| 		super(10803); | ||||
| 		addStartNpc(RESED); | ||||
| 		addTalkId(RESED); | ||||
| 		addKillId(UNWORDLY_ETIN); | ||||
| 		addCondMinLevel(MIN_LEVEL, "33974-00.htm"); | ||||
| 		addCondCompletedQuest(Q10802_TheDimensionalWarpPart2.class.getSimpleName(), ""); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) | ||||
| 	{ | ||||
| 		String htmltext = null; | ||||
| 		final QuestState qs = getQuestState(player, false); | ||||
| 		if (qs == null) | ||||
| 		{ | ||||
| 			return htmltext; | ||||
| 		} | ||||
| 		 | ||||
| 		switch (event) | ||||
| 		{ | ||||
| 			case "33974-02.htm": | ||||
| 			case "33974-03.htm": | ||||
| 			{ | ||||
| 				htmltext = event; | ||||
| 				break; | ||||
| 			} | ||||
| 			case "33974-04.htm": | ||||
| 			{ | ||||
| 				qs.startQuest(); | ||||
| 				htmltext = event; | ||||
| 				break; | ||||
| 			} | ||||
| 			case "33974-07.html": | ||||
| 			{ | ||||
| 				if (qs.isCond(2)) | ||||
| 				{ | ||||
| 					if (player.getLevel() >= MIN_LEVEL) | ||||
| 					{ | ||||
| 						addExpAndSp(player, 54383249571L, 0); | ||||
| 						giveItems(player, BLOODY_ETERNAL_ENHANCEMENT_STONE, 1); | ||||
| 						giveItems(player, WARP_CRYSTAL, 300); | ||||
| 						qs.exitQuest(false, true); | ||||
| 						htmltext = event; | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						htmltext = getNoQuestLevelRewardMsg(player); | ||||
| 					} | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		return htmltext; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String onTalk(L2Npc npc, L2PcInstance player) | ||||
| 	{ | ||||
| 		final QuestState qs = getQuestState(player, true); | ||||
| 		String htmltext = getNoQuestMsg(player); | ||||
| 		 | ||||
| 		switch (qs.getState()) | ||||
| 		{ | ||||
| 			case State.CREATED: | ||||
| 			{ | ||||
| 				htmltext = "33974-01.htm"; | ||||
| 				break; | ||||
| 			} | ||||
| 			case State.STARTED: | ||||
| 			{ | ||||
| 				htmltext = (qs.isCond(1)) ? "33974-05.html" : "33974-06.html"; | ||||
| 				break; | ||||
| 			} | ||||
| 			case State.COMPLETED: | ||||
| 			{ | ||||
| 				htmltext = getAlreadyCompletedMsg(player); | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		return htmltext; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon) | ||||
| 	{ | ||||
| 		L2Party party = killer.getParty(); | ||||
| 		if (party != null) | ||||
| 		{ | ||||
| 			party.getMembers().forEach(p -> onKill(npc, p)); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			onKill(npc, killer); | ||||
| 		} | ||||
| 		return super.onKill(npc, killer, isSummon); | ||||
| 	} | ||||
| 	 | ||||
| 	private void onKill(L2Npc npc, L2PcInstance killer) | ||||
| 	{ | ||||
| 		final QuestState qs = getQuestState(killer, false); | ||||
| 		 | ||||
| 		if ((qs != null) && qs.isCond(1) && (npc.calculateDistance3D(killer) <= Config.ALT_PARTY_RANGE)) | ||||
| 		{ | ||||
| 			int killedBugbear = qs.getInt("killed_" + UNWORDLY_ETIN); | ||||
| 			if (killedBugbear < 100) | ||||
| 			{ | ||||
| 				qs.set("killed_" + UNWORDLY_ETIN, ++killedBugbear); | ||||
| 				playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 			} | ||||
| 			if (killedBugbear >= 100) | ||||
| 			{ | ||||
| 				qs.setCond(2, true); | ||||
| 			} | ||||
| 			sendNpcLogList(killer); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Set<NpcLogListHolder> getNpcLogList(L2PcInstance player) | ||||
| 	{ | ||||
| 		final QuestState qs = getQuestState(player, false); | ||||
| 		if ((qs != null) && qs.isCond(1)) | ||||
| 		{ | ||||
| 			final Set<NpcLogListHolder> holder = new HashSet<>(); | ||||
| 			holder.add(new NpcLogListHolder(UNWORDLY_ETIN, false, qs.getInt("killed_" + UNWORDLY_ETIN))); | ||||
| 			return holder; | ||||
| 		} | ||||
| 		return super.getNpcLogList(player); | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,4 @@ | ||||
| <html><body>Resed:<br> | ||||
| Are you trying to enter the Dimensional Warp? It's not a place for people like you.<br> | ||||
| (Only characters Lv. 99 or above may undertake this quest.) | ||||
| </body></html> | ||||
| @@ -0,0 +1,5 @@ | ||||
| <html><body>Resed:<br> | ||||
| Have you been inside Dimensional Warp? My job is to send the explorers to the Dimensional Warp, but I don't have enough information here. I'm continuously collecting more, but it's still not enough.<br> | ||||
| I know it won't be easy, but can you do me a favor?<br>  | ||||
| <Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10804_TheDimensionalWarpPart4 33974-02.htm">"What is it?"</Button> | ||||
| </body></html> | ||||
| @@ -0,0 +1,5 @@ | ||||
| <html><body>Resed:<br> | ||||
| In the early stages of a Dimensional Warp, <font color="LEVEL">Unworldly Golems</font> come out.<br> | ||||
| But we still don't have enough information about them. I need more information about them because people run into them the most.<br>  | ||||
| <Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10804_TheDimensionalWarpPart4 33974-03.htm">"How many do you need?"</Button> | ||||
| </body></html> | ||||
| @@ -0,0 +1,5 @@ | ||||
| <html><body>Resed:<br> | ||||
| Can we start with 100?<br> | ||||
| They come out often, so it won't be too hard. Thank you!<br>  | ||||
| <Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10804_TheDimensionalWarpPart4 33974-04.htm">"I didn't say yes yet..."</Button> | ||||
| </body></html> | ||||
| @@ -0,0 +1,3 @@ | ||||
| <html><body>Resed:<br> | ||||
| Kill 100 <font color="LEVEL">Unworldly Golems</font> and come back to me. | ||||
| </body></html> | ||||
| @@ -0,0 +1,4 @@ | ||||
| <html><body>Resed:<br> | ||||
| We still don't have enough information. That's not enough.<br> | ||||
| Go kill more <font color="LEVEL">Unworldly Golems</font>. | ||||
| </body></html> | ||||
| @@ -0,0 +1,5 @@ | ||||
| <html><body>Resed:<br> | ||||
| Thank you. This will be enough.<br> | ||||
| Can You give me the information now?<br> | ||||
| <Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10804_TheDimensionalWarpPart4 33974-07.html">"Yup"</Button> | ||||
| </body></html> | ||||
| @@ -0,0 +1,4 @@ | ||||
| <html><body>Resed:<br> | ||||
| Good work. You're almost at the finish line.<br> | ||||
| The reward is better than the last time. Take it. | ||||
| </body></html> | ||||
| @@ -0,0 +1,181 @@ | ||||
| /* | ||||
|  * 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 <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package quests.Q10804_TheDimensionalWarpPart4; | ||||
|  | ||||
| import java.util.HashSet; | ||||
| import java.util.Set; | ||||
|  | ||||
| import com.l2jmobius.Config; | ||||
| import com.l2jmobius.gameserver.enums.QuestSound; | ||||
| import com.l2jmobius.gameserver.model.L2Party; | ||||
| import com.l2jmobius.gameserver.model.actor.L2Npc; | ||||
| import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; | ||||
| import com.l2jmobius.gameserver.model.holders.NpcLogListHolder; | ||||
| import com.l2jmobius.gameserver.model.quest.Quest; | ||||
| import com.l2jmobius.gameserver.model.quest.QuestState; | ||||
| import com.l2jmobius.gameserver.model.quest.State; | ||||
|  | ||||
| import quests.Q10803_TheDimensionalWarpPart3.Q10803_TheDimensionalWarpPart3; | ||||
|  | ||||
| /** | ||||
|  * The Dimensional Warp, Part 4 (10804) | ||||
|  * @URL https://l2wiki.com/The_Dimensional_Warp,_Part_4 | ||||
|  * @author Mobius | ||||
|  */ | ||||
| public class Q10804_TheDimensionalWarpPart4 extends Quest | ||||
| { | ||||
| 	// NPC | ||||
| 	private static final int RESED = 33974; | ||||
| 	// Monsters | ||||
| 	private static final int UNWORLDLY_GOLEM = 23474; | ||||
| 	// Others | ||||
| 	private static final int MIN_LEVEL = 99; | ||||
| 	private static final int DARK_ETERNAL_ENHANCEMENT_STONE = 35567; | ||||
| 	private static final int WARP_CRYSTAL = 39597; | ||||
| 	 | ||||
| 	public Q10804_TheDimensionalWarpPart4() | ||||
| 	{ | ||||
| 		super(10804); | ||||
| 		addStartNpc(RESED); | ||||
| 		addTalkId(RESED); | ||||
| 		addKillId(UNWORLDLY_GOLEM); | ||||
| 		addCondMinLevel(MIN_LEVEL, "33974-00.htm"); | ||||
| 		addCondCompletedQuest(Q10803_TheDimensionalWarpPart3.class.getSimpleName(), ""); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) | ||||
| 	{ | ||||
| 		String htmltext = null; | ||||
| 		final QuestState qs = getQuestState(player, false); | ||||
| 		if (qs == null) | ||||
| 		{ | ||||
| 			return htmltext; | ||||
| 		} | ||||
| 		 | ||||
| 		switch (event) | ||||
| 		{ | ||||
| 			case "33974-02.htm": | ||||
| 			case "33974-03.htm": | ||||
| 			{ | ||||
| 				htmltext = event; | ||||
| 				break; | ||||
| 			} | ||||
| 			case "33974-04.htm": | ||||
| 			{ | ||||
| 				qs.startQuest(); | ||||
| 				htmltext = event; | ||||
| 				break; | ||||
| 			} | ||||
| 			case "33974-07.html": | ||||
| 			{ | ||||
| 				if (qs.isCond(2)) | ||||
| 				{ | ||||
| 					if (player.getLevel() >= MIN_LEVEL) | ||||
| 					{ | ||||
| 						addExpAndSp(player, 60425832857L, 0); | ||||
| 						giveItems(player, DARK_ETERNAL_ENHANCEMENT_STONE, 1); | ||||
| 						giveItems(player, WARP_CRYSTAL, 300); | ||||
| 						qs.exitQuest(false, true); | ||||
| 						htmltext = event; | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						htmltext = getNoQuestLevelRewardMsg(player); | ||||
| 					} | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		return htmltext; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String onTalk(L2Npc npc, L2PcInstance player) | ||||
| 	{ | ||||
| 		final QuestState qs = getQuestState(player, true); | ||||
| 		String htmltext = getNoQuestMsg(player); | ||||
| 		 | ||||
| 		switch (qs.getState()) | ||||
| 		{ | ||||
| 			case State.CREATED: | ||||
| 			{ | ||||
| 				htmltext = "33974-01.htm"; | ||||
| 				break; | ||||
| 			} | ||||
| 			case State.STARTED: | ||||
| 			{ | ||||
| 				htmltext = (qs.isCond(1)) ? "33974-05.html" : "33974-06.html"; | ||||
| 				break; | ||||
| 			} | ||||
| 			case State.COMPLETED: | ||||
| 			{ | ||||
| 				htmltext = getAlreadyCompletedMsg(player); | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		return htmltext; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon) | ||||
| 	{ | ||||
| 		L2Party party = killer.getParty(); | ||||
| 		if (party != null) | ||||
| 		{ | ||||
| 			party.getMembers().forEach(p -> onKill(npc, p)); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			onKill(npc, killer); | ||||
| 		} | ||||
| 		return super.onKill(npc, killer, isSummon); | ||||
| 	} | ||||
| 	 | ||||
| 	private void onKill(L2Npc npc, L2PcInstance killer) | ||||
| 	{ | ||||
| 		final QuestState qs = getQuestState(killer, false); | ||||
| 		 | ||||
| 		if ((qs != null) && qs.isCond(1) && (npc.calculateDistance3D(killer) <= Config.ALT_PARTY_RANGE)) | ||||
| 		{ | ||||
| 			int killedBugbear = qs.getInt("killed_" + UNWORLDLY_GOLEM); | ||||
| 			if (killedBugbear < 100) | ||||
| 			{ | ||||
| 				qs.set("killed_" + UNWORLDLY_GOLEM, ++killedBugbear); | ||||
| 				playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 			} | ||||
| 			if (killedBugbear >= 100) | ||||
| 			{ | ||||
| 				qs.setCond(2, true); | ||||
| 			} | ||||
| 			sendNpcLogList(killer); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Set<NpcLogListHolder> getNpcLogList(L2PcInstance player) | ||||
| 	{ | ||||
| 		final QuestState qs = getQuestState(player, false); | ||||
| 		if ((qs != null) && qs.isCond(1)) | ||||
| 		{ | ||||
| 			final Set<NpcLogListHolder> holder = new HashSet<>(); | ||||
| 			holder.add(new NpcLogListHolder(UNWORLDLY_GOLEM, false, qs.getInt("killed_" + UNWORLDLY_GOLEM))); | ||||
| 			return holder; | ||||
| 		} | ||||
| 		return super.getNpcLogList(player); | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,4 @@ | ||||
| <html><body>Resed:<br> | ||||
| Are you trying to enter the Dimensional Warp? It's not a place for people like you.<br> | ||||
| (Only characters Lv. 99 or above may undertake this quest.) | ||||
| </body></html> | ||||
| @@ -0,0 +1,5 @@ | ||||
| <html><body>Resed:<br> | ||||
| Have you been inside Dimensional Warp? My job is to send the explorers to the Dimensional Warp, but I don't have enough information here. I'm continuously collecting more, but it's still not enough.<br> | ||||
| I know it won't be easy, but can you do me a favor?<br>  | ||||
| <Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10805_TheDimensionalWarpPart5 33974-02.htm">"What is it?"</Button> | ||||
| </body></html> | ||||
| @@ -0,0 +1,5 @@ | ||||
| <html><body>Resed:<br> | ||||
| In the early stages of a Dimensional Warp, <font color="LEVEL">Abyssal Golems</font> come out.<br> | ||||
| But we still don't have enough information about them. I need more information about them because people run into them the most.<br>  | ||||
| <Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10805_TheDimensionalWarpPart5 33974-03.htm">"How many do you need?"</Button> | ||||
| </body></html> | ||||
| @@ -0,0 +1,5 @@ | ||||
| <html><body>Resed:<br> | ||||
| Can we start with 100?<br> | ||||
| They come out often, so it won't be too hard. Thank you!<br>  | ||||
| <Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10805_TheDimensionalWarpPart5 33974-04.htm">"I didn't say yes yet..."</Button> | ||||
| </body></html> | ||||
| @@ -0,0 +1,3 @@ | ||||
| <html><body>Resed:<br> | ||||
| Kill 100 <font color="LEVEL">Abyssal Golems</font> and come back to me. | ||||
| </body></html> | ||||
| @@ -0,0 +1,4 @@ | ||||
| <html><body>Resed:<br> | ||||
| We still don't have enough information. That's not enough.<br> | ||||
| Go kill more <font color="LEVEL">Abyssal Golems</font>. | ||||
| </body></html> | ||||
| @@ -0,0 +1,5 @@ | ||||
| <html><body>Resed:<br> | ||||
| Thank you. This will be enough.<br> | ||||
| Can You give me the information now?<br> | ||||
| <Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10805_TheDimensionalWarpPart5 33974-07.html">"Yup"</Button> | ||||
| </body></html> | ||||
| @@ -0,0 +1,4 @@ | ||||
| <html><body>Resed:<br> | ||||
| Good work. You're almost at the finish line.<br> | ||||
| The reward is better than the last time. Take it. | ||||
| </body></html> | ||||
| @@ -0,0 +1,181 @@ | ||||
| /* | ||||
|  * 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 <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package quests.Q10805_TheDimensionalWarpPart5; | ||||
|  | ||||
| import java.util.HashSet; | ||||
| import java.util.Set; | ||||
|  | ||||
| import com.l2jmobius.Config; | ||||
| import com.l2jmobius.gameserver.enums.QuestSound; | ||||
| import com.l2jmobius.gameserver.model.L2Party; | ||||
| import com.l2jmobius.gameserver.model.actor.L2Npc; | ||||
| import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; | ||||
| import com.l2jmobius.gameserver.model.holders.NpcLogListHolder; | ||||
| import com.l2jmobius.gameserver.model.quest.Quest; | ||||
| import com.l2jmobius.gameserver.model.quest.QuestState; | ||||
| import com.l2jmobius.gameserver.model.quest.State; | ||||
|  | ||||
| import quests.Q10804_TheDimensionalWarpPart4.Q10804_TheDimensionalWarpPart4; | ||||
|  | ||||
| /** | ||||
|  * The Dimensional Warp, Part 5 (10805) | ||||
|  * @URL https://l2wiki.com/The_Dimensional_Warp,_Part_5 | ||||
|  * @author Mobius | ||||
|  */ | ||||
| public class Q10805_TheDimensionalWarpPart5 extends Quest | ||||
| { | ||||
| 	// NPC | ||||
| 	private static final int RESED = 33974; | ||||
| 	// Monsters | ||||
| 	private static final int ABYSSAL_GOLEM = 23483; | ||||
| 	// Others | ||||
| 	private static final int MIN_LEVEL = 99; | ||||
| 	private static final int DARK_ETERNAL_ENHANCEMENT_STONE = 35567; | ||||
| 	private static final int WARP_CRYSTAL = 39597; | ||||
| 	 | ||||
| 	public Q10805_TheDimensionalWarpPart5() | ||||
| 	{ | ||||
| 		super(10805); | ||||
| 		addStartNpc(RESED); | ||||
| 		addTalkId(RESED); | ||||
| 		addKillId(ABYSSAL_GOLEM); | ||||
| 		addCondMinLevel(MIN_LEVEL, "33974-00.htm"); | ||||
| 		addCondCompletedQuest(Q10804_TheDimensionalWarpPart4.class.getSimpleName(), ""); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) | ||||
| 	{ | ||||
| 		String htmltext = null; | ||||
| 		final QuestState qs = getQuestState(player, false); | ||||
| 		if (qs == null) | ||||
| 		{ | ||||
| 			return htmltext; | ||||
| 		} | ||||
| 		 | ||||
| 		switch (event) | ||||
| 		{ | ||||
| 			case "33974-02.htm": | ||||
| 			case "33974-03.htm": | ||||
| 			{ | ||||
| 				htmltext = event; | ||||
| 				break; | ||||
| 			} | ||||
| 			case "33974-04.htm": | ||||
| 			{ | ||||
| 				qs.startQuest(); | ||||
| 				htmltext = event; | ||||
| 				break; | ||||
| 			} | ||||
| 			case "33974-07.html": | ||||
| 			{ | ||||
| 				if (qs.isCond(2)) | ||||
| 				{ | ||||
| 					if (player.getLevel() >= MIN_LEVEL) | ||||
| 					{ | ||||
| 						addExpAndSp(player, 66530730240L, 0); | ||||
| 						giveItems(player, DARK_ETERNAL_ENHANCEMENT_STONE, 1); | ||||
| 						giveItems(player, WARP_CRYSTAL, 300); | ||||
| 						qs.exitQuest(false, true); | ||||
| 						htmltext = event; | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						htmltext = getNoQuestLevelRewardMsg(player); | ||||
| 					} | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		return htmltext; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String onTalk(L2Npc npc, L2PcInstance player) | ||||
| 	{ | ||||
| 		final QuestState qs = getQuestState(player, true); | ||||
| 		String htmltext = getNoQuestMsg(player); | ||||
| 		 | ||||
| 		switch (qs.getState()) | ||||
| 		{ | ||||
| 			case State.CREATED: | ||||
| 			{ | ||||
| 				htmltext = "33974-01.htm"; | ||||
| 				break; | ||||
| 			} | ||||
| 			case State.STARTED: | ||||
| 			{ | ||||
| 				htmltext = (qs.isCond(1)) ? "33974-05.html" : "33974-06.html"; | ||||
| 				break; | ||||
| 			} | ||||
| 			case State.COMPLETED: | ||||
| 			{ | ||||
| 				htmltext = getAlreadyCompletedMsg(player); | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		return htmltext; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon) | ||||
| 	{ | ||||
| 		L2Party party = killer.getParty(); | ||||
| 		if (party != null) | ||||
| 		{ | ||||
| 			party.getMembers().forEach(p -> onKill(npc, p)); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			onKill(npc, killer); | ||||
| 		} | ||||
| 		return super.onKill(npc, killer, isSummon); | ||||
| 	} | ||||
| 	 | ||||
| 	private void onKill(L2Npc npc, L2PcInstance killer) | ||||
| 	{ | ||||
| 		final QuestState qs = getQuestState(killer, false); | ||||
| 		 | ||||
| 		if ((qs != null) && qs.isCond(1) && (npc.calculateDistance3D(killer) <= Config.ALT_PARTY_RANGE)) | ||||
| 		{ | ||||
| 			int killedBugbear = qs.getInt("killed_" + ABYSSAL_GOLEM); | ||||
| 			if (killedBugbear < 100) | ||||
| 			{ | ||||
| 				qs.set("killed_" + ABYSSAL_GOLEM, ++killedBugbear); | ||||
| 				playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 			} | ||||
| 			if (killedBugbear >= 100) | ||||
| 			{ | ||||
| 				qs.setCond(2, true); | ||||
| 			} | ||||
| 			sendNpcLogList(killer); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Set<NpcLogListHolder> getNpcLogList(L2PcInstance player) | ||||
| 	{ | ||||
| 		final QuestState qs = getQuestState(player, false); | ||||
| 		if ((qs != null) && qs.isCond(1)) | ||||
| 		{ | ||||
| 			final Set<NpcLogListHolder> holder = new HashSet<>(); | ||||
| 			holder.add(new NpcLogListHolder(ABYSSAL_GOLEM, false, qs.getInt("killed_" + ABYSSAL_GOLEM))); | ||||
| 			return holder; | ||||
| 		} | ||||
| 		return super.getNpcLogList(player); | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,4 @@ | ||||
| <html><body>Resed:<br> | ||||
| Are you trying to enter the Dimensional Warp? It's not a place for people like you.<br> | ||||
| (Only characters Lv. 99 or above may undertake this quest.) | ||||
| </body></html> | ||||
| @@ -0,0 +1,5 @@ | ||||
| <html><body>Resed:<br> | ||||
| Have you been inside Dimensional Warp? My job is to send the explorers to the Dimensional Warp, but I don't have enough information here. I'm continuously collecting more, but it's still not enough.<br> | ||||
| I know it won't be easy, but can you do me a favor?<br>  | ||||
| <Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10806_TheDimensionalWarpPart6 33974-02.htm">"What is it?"</Button> | ||||
| </body></html> | ||||
| @@ -0,0 +1,5 @@ | ||||
| <html><body>Resed:<br> | ||||
| In the early stages of a Dimensional Warp, <font color="LEVEL">Abyssal Berserkers</font> come out.<br> | ||||
| But we still don't have enough information about them. I need more information about them because people run into them the most.<br>  | ||||
| <Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10806_TheDimensionalWarpPart6 33974-03.htm">"How many do you need?"</Button> | ||||
| </body></html> | ||||
| @@ -0,0 +1,5 @@ | ||||
| <html><body>Resed:<br> | ||||
| Can we start with 100?<br> | ||||
| They come out often, so it won't be too hard. Thank you!<br>  | ||||
| <Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10806_TheDimensionalWarpPart6 33974-04.htm">"I didn't say yes yet..."</Button> | ||||
| </body></html> | ||||
| @@ -0,0 +1,3 @@ | ||||
| <html><body>Resed:<br> | ||||
| Kill 100 <font color="LEVEL">Abyssal Berserkers</font> and come back to me. | ||||
| </body></html> | ||||
| @@ -0,0 +1,4 @@ | ||||
| <html><body>Resed:<br> | ||||
| We still don't have enough information. That's not enough.<br> | ||||
| Go kill more <font color="LEVEL">Abyssal Berserkers</font>. | ||||
| </body></html> | ||||
| @@ -0,0 +1,5 @@ | ||||
| <html><body>Resed:<br> | ||||
| Thank you. This will be enough.<br> | ||||
| Can You give me the information now?<br> | ||||
| <Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10806_TheDimensionalWarpPart6 33974-07.html">"Yup"</Button> | ||||
| </body></html> | ||||
| @@ -0,0 +1,4 @@ | ||||
| <html><body>Resed:<br> | ||||
| Good work. You're almost at the finish line.<br> | ||||
| The reward is better than the last time. Take it. | ||||
| </body></html> | ||||
| @@ -0,0 +1,179 @@ | ||||
| /* | ||||
|  * 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 <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package quests.Q10806_TheDimensionalWarpPart6; | ||||
|  | ||||
| import java.util.HashSet; | ||||
| import java.util.Set; | ||||
|  | ||||
| import com.l2jmobius.Config; | ||||
| import com.l2jmobius.gameserver.enums.QuestSound; | ||||
| import com.l2jmobius.gameserver.model.L2Party; | ||||
| import com.l2jmobius.gameserver.model.actor.L2Npc; | ||||
| import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; | ||||
| import com.l2jmobius.gameserver.model.holders.NpcLogListHolder; | ||||
| import com.l2jmobius.gameserver.model.quest.Quest; | ||||
| import com.l2jmobius.gameserver.model.quest.QuestState; | ||||
| import com.l2jmobius.gameserver.model.quest.State; | ||||
|  | ||||
| import quests.Q10805_TheDimensionalWarpPart5.Q10805_TheDimensionalWarpPart5; | ||||
|  | ||||
| /** | ||||
|  * The Dimensional Warp, Part 6 (10806) | ||||
|  * @URL https://l2wiki.com/The_Dimensional_Warp,_Part_6 | ||||
|  * @author Mobius | ||||
|  */ | ||||
| public class Q10806_TheDimensionalWarpPart6 extends Quest | ||||
| { | ||||
| 	// NPC | ||||
| 	private static final int RESED = 33974; | ||||
| 	// Monsters | ||||
| 	private static final int ABYSSAL_BERSERKER = 23478; | ||||
| 	// Others | ||||
| 	private static final int MIN_LEVEL = 99; | ||||
| 	private static final int WARP_CRYSTAL = 39597; | ||||
| 	 | ||||
| 	public Q10806_TheDimensionalWarpPart6() | ||||
| 	{ | ||||
| 		super(10806); | ||||
| 		addStartNpc(RESED); | ||||
| 		addTalkId(RESED); | ||||
| 		addKillId(ABYSSAL_BERSERKER); | ||||
| 		addCondMinLevel(MIN_LEVEL, "33974-00.htm"); | ||||
| 		addCondCompletedQuest(Q10805_TheDimensionalWarpPart5.class.getSimpleName(), ""); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) | ||||
| 	{ | ||||
| 		String htmltext = null; | ||||
| 		final QuestState qs = getQuestState(player, false); | ||||
| 		if (qs == null) | ||||
| 		{ | ||||
| 			return htmltext; | ||||
| 		} | ||||
| 		 | ||||
| 		switch (event) | ||||
| 		{ | ||||
| 			case "33974-02.htm": | ||||
| 			case "33974-03.htm": | ||||
| 			{ | ||||
| 				htmltext = event; | ||||
| 				break; | ||||
| 			} | ||||
| 			case "33974-04.htm": | ||||
| 			{ | ||||
| 				qs.startQuest(); | ||||
| 				htmltext = event; | ||||
| 				break; | ||||
| 			} | ||||
| 			case "33974-07.html": | ||||
| 			{ | ||||
| 				if (qs.isCond(2)) | ||||
| 				{ | ||||
| 					if (player.getLevel() >= MIN_LEVEL) | ||||
| 					{ | ||||
| 						addExpAndSp(player, 73923033600L, 0); | ||||
| 						giveItems(player, WARP_CRYSTAL, 300); | ||||
| 						qs.exitQuest(false, true); | ||||
| 						htmltext = event; | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						htmltext = getNoQuestLevelRewardMsg(player); | ||||
| 					} | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		return htmltext; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String onTalk(L2Npc npc, L2PcInstance player) | ||||
| 	{ | ||||
| 		final QuestState qs = getQuestState(player, true); | ||||
| 		String htmltext = getNoQuestMsg(player); | ||||
| 		 | ||||
| 		switch (qs.getState()) | ||||
| 		{ | ||||
| 			case State.CREATED: | ||||
| 			{ | ||||
| 				htmltext = "33974-01.htm"; | ||||
| 				break; | ||||
| 			} | ||||
| 			case State.STARTED: | ||||
| 			{ | ||||
| 				htmltext = (qs.isCond(1)) ? "33974-05.html" : "33974-06.html"; | ||||
| 				break; | ||||
| 			} | ||||
| 			case State.COMPLETED: | ||||
| 			{ | ||||
| 				htmltext = getAlreadyCompletedMsg(player); | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		return htmltext; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon) | ||||
| 	{ | ||||
| 		L2Party party = killer.getParty(); | ||||
| 		if (party != null) | ||||
| 		{ | ||||
| 			party.getMembers().forEach(p -> onKill(npc, p)); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			onKill(npc, killer); | ||||
| 		} | ||||
| 		return super.onKill(npc, killer, isSummon); | ||||
| 	} | ||||
| 	 | ||||
| 	private void onKill(L2Npc npc, L2PcInstance killer) | ||||
| 	{ | ||||
| 		final QuestState qs = getQuestState(killer, false); | ||||
| 		 | ||||
| 		if ((qs != null) && qs.isCond(1) && (npc.calculateDistance3D(killer) <= Config.ALT_PARTY_RANGE)) | ||||
| 		{ | ||||
| 			int killedBugbear = qs.getInt("killed_" + ABYSSAL_BERSERKER); | ||||
| 			if (killedBugbear < 100) | ||||
| 			{ | ||||
| 				qs.set("killed_" + ABYSSAL_BERSERKER, ++killedBugbear); | ||||
| 				playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 			} | ||||
| 			if (killedBugbear >= 100) | ||||
| 			{ | ||||
| 				qs.setCond(2, true); | ||||
| 			} | ||||
| 			sendNpcLogList(killer); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Set<NpcLogListHolder> getNpcLogList(L2PcInstance player) | ||||
| 	{ | ||||
| 		final QuestState qs = getQuestState(player, false); | ||||
| 		if ((qs != null) && qs.isCond(1)) | ||||
| 		{ | ||||
| 			final Set<NpcLogListHolder> holder = new HashSet<>(); | ||||
| 			holder.add(new NpcLogListHolder(ABYSSAL_BERSERKER, false, qs.getInt("killed_" + ABYSSAL_BERSERKER))); | ||||
| 			return holder; | ||||
| 		} | ||||
| 		return super.getNpcLogList(player); | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,4 @@ | ||||
| <html><body>Resed:<br> | ||||
| Are you trying to enter the Dimensional Warp? It's not a place for people like you.<br> | ||||
| (Only characters Lv. 99 or above may undertake this quest.) | ||||
| </body></html> | ||||
| @@ -0,0 +1,5 @@ | ||||
| <html><body>Resed:<br> | ||||
| Have you been inside Dimensional Warp? My job is to send the explorers to the Dimensional Warp, but I don't have enough information here. I'm continuously collecting more, but it's still not enough.<br> | ||||
| I know it won't be easy, but can you do me a favor?<br>  | ||||
| <Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10807_TheDimensionalWarpPart7 33974-02.htm">"What is it?"</Button> | ||||
| </body></html> | ||||
| @@ -0,0 +1,5 @@ | ||||
| <html><body>Resed:<br> | ||||
| In the early stages of a Dimensional Warp, <font color="LEVEL">Abyssal Binders</font> come out.<br> | ||||
| But we still don't have enough information about them. I need more information about them because people run into them the most.<br>  | ||||
| <Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10807_TheDimensionalWarpPart7 33974-03.htm">"How many do you need?"</Button> | ||||
| </body></html> | ||||
| @@ -0,0 +1,5 @@ | ||||
| <html><body>Resed:<br> | ||||
| Can we start with 100?<br> | ||||
| They come out often, so it won't be too hard. Thank you!<br>  | ||||
| <Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10807_TheDimensionalWarpPart7 33974-04.htm">"I didn't say yes yet..."</Button> | ||||
| </body></html> | ||||
| @@ -0,0 +1,3 @@ | ||||
| <html><body>Resed:<br> | ||||
| Kill 100 <font color="LEVEL">Abyssal Binders</font> and come back to me. | ||||
| </body></html> | ||||
| @@ -0,0 +1,4 @@ | ||||
| <html><body>Resed:<br> | ||||
| We still don't have enough information. That's not enough.<br> | ||||
| Go kill more <font color="LEVEL">Abyssal Binders</font>. | ||||
| </body></html> | ||||
| @@ -0,0 +1,5 @@ | ||||
| <html><body>Resed:<br> | ||||
| Thank you. This will be enough.<br> | ||||
| Can You give me the information now?<br> | ||||
| <Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10807_TheDimensionalWarpPart7 33974-07.html">"Yup"</Button> | ||||
| </body></html> | ||||
| @@ -0,0 +1,4 @@ | ||||
| <html><body>Resed:<br> | ||||
| Good work. You're almost at the finish line.<br> | ||||
| The reward is better than the last time. Take it. | ||||
| </body></html> | ||||
| @@ -0,0 +1,179 @@ | ||||
| /* | ||||
|  * 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 <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package quests.Q10807_TheDimensionalWarpPart7; | ||||
|  | ||||
| import java.util.HashSet; | ||||
| import java.util.Set; | ||||
|  | ||||
| import com.l2jmobius.Config; | ||||
| import com.l2jmobius.gameserver.enums.QuestSound; | ||||
| import com.l2jmobius.gameserver.model.L2Party; | ||||
| import com.l2jmobius.gameserver.model.actor.L2Npc; | ||||
| import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; | ||||
| import com.l2jmobius.gameserver.model.holders.NpcLogListHolder; | ||||
| import com.l2jmobius.gameserver.model.quest.Quest; | ||||
| import com.l2jmobius.gameserver.model.quest.QuestState; | ||||
| import com.l2jmobius.gameserver.model.quest.State; | ||||
|  | ||||
| import quests.Q10806_TheDimensionalWarpPart6.Q10806_TheDimensionalWarpPart6; | ||||
|  | ||||
| /** | ||||
|  * The Dimensional Warp, Part 7 (10807) | ||||
|  * @URL https://l2wiki.com/The_Dimensional_Warp,_Part_7 | ||||
|  * @author Mobius | ||||
|  */ | ||||
| public class Q10807_TheDimensionalWarpPart7 extends Quest | ||||
| { | ||||
| 	// NPC | ||||
| 	private static final int RESED = 33974; | ||||
| 	// Monsters | ||||
| 	private static final int ABYSSAL_BINDER = 23481; | ||||
| 	// Others | ||||
| 	private static final int MIN_LEVEL = 99; | ||||
| 	private static final int WARP_CRYSTAL = 39597; | ||||
| 	 | ||||
| 	public Q10807_TheDimensionalWarpPart7() | ||||
| 	{ | ||||
| 		super(10807); | ||||
| 		addStartNpc(RESED); | ||||
| 		addTalkId(RESED); | ||||
| 		addKillId(ABYSSAL_BINDER); | ||||
| 		addCondMinLevel(MIN_LEVEL, "33974-00.htm"); | ||||
| 		addCondCompletedQuest(Q10806_TheDimensionalWarpPart6.class.getSimpleName(), ""); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) | ||||
| 	{ | ||||
| 		String htmltext = null; | ||||
| 		final QuestState qs = getQuestState(player, false); | ||||
| 		if (qs == null) | ||||
| 		{ | ||||
| 			return htmltext; | ||||
| 		} | ||||
| 		 | ||||
| 		switch (event) | ||||
| 		{ | ||||
| 			case "33974-02.htm": | ||||
| 			case "33974-03.htm": | ||||
| 			{ | ||||
| 				htmltext = event; | ||||
| 				break; | ||||
| 			} | ||||
| 			case "33974-04.htm": | ||||
| 			{ | ||||
| 				qs.startQuest(); | ||||
| 				htmltext = event; | ||||
| 				break; | ||||
| 			} | ||||
| 			case "33974-07.html": | ||||
| 			{ | ||||
| 				if (qs.isCond(2)) | ||||
| 				{ | ||||
| 					if (player.getLevel() >= MIN_LEVEL) | ||||
| 					{ | ||||
| 						addExpAndSp(player, 90422325000L, 0); | ||||
| 						giveItems(player, WARP_CRYSTAL, 300); | ||||
| 						qs.exitQuest(false, true); | ||||
| 						htmltext = event; | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						htmltext = getNoQuestLevelRewardMsg(player); | ||||
| 					} | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		return htmltext; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String onTalk(L2Npc npc, L2PcInstance player) | ||||
| 	{ | ||||
| 		final QuestState qs = getQuestState(player, true); | ||||
| 		String htmltext = getNoQuestMsg(player); | ||||
| 		 | ||||
| 		switch (qs.getState()) | ||||
| 		{ | ||||
| 			case State.CREATED: | ||||
| 			{ | ||||
| 				htmltext = "33974-01.htm"; | ||||
| 				break; | ||||
| 			} | ||||
| 			case State.STARTED: | ||||
| 			{ | ||||
| 				htmltext = (qs.isCond(1)) ? "33974-05.html" : "33974-06.html"; | ||||
| 				break; | ||||
| 			} | ||||
| 			case State.COMPLETED: | ||||
| 			{ | ||||
| 				htmltext = getAlreadyCompletedMsg(player); | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		return htmltext; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon) | ||||
| 	{ | ||||
| 		L2Party party = killer.getParty(); | ||||
| 		if (party != null) | ||||
| 		{ | ||||
| 			party.getMembers().forEach(p -> onKill(npc, p)); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			onKill(npc, killer); | ||||
| 		} | ||||
| 		return super.onKill(npc, killer, isSummon); | ||||
| 	} | ||||
| 	 | ||||
| 	private void onKill(L2Npc npc, L2PcInstance killer) | ||||
| 	{ | ||||
| 		final QuestState qs = getQuestState(killer, false); | ||||
| 		 | ||||
| 		if ((qs != null) && qs.isCond(1) && (npc.calculateDistance3D(killer) <= Config.ALT_PARTY_RANGE)) | ||||
| 		{ | ||||
| 			int killedBugbear = qs.getInt("killed_" + ABYSSAL_BINDER); | ||||
| 			if (killedBugbear < 100) | ||||
| 			{ | ||||
| 				qs.set("killed_" + ABYSSAL_BINDER, ++killedBugbear); | ||||
| 				playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 			} | ||||
| 			if (killedBugbear >= 100) | ||||
| 			{ | ||||
| 				qs.setCond(2, true); | ||||
| 			} | ||||
| 			sendNpcLogList(killer); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Set<NpcLogListHolder> getNpcLogList(L2PcInstance player) | ||||
| 	{ | ||||
| 		final QuestState qs = getQuestState(player, false); | ||||
| 		if ((qs != null) && qs.isCond(1)) | ||||
| 		{ | ||||
| 			final Set<NpcLogListHolder> holder = new HashSet<>(); | ||||
| 			holder.add(new NpcLogListHolder(ABYSSAL_BINDER, false, qs.getInt("killed_" + ABYSSAL_BINDER))); | ||||
| 			return holder; | ||||
| 		} | ||||
| 		return super.getNpcLogList(player); | ||||
| 	} | ||||
| } | ||||
| @@ -420,6 +420,12 @@ import quests.Q10798_LettersFromTheQueenDragonValley.Q10798_LettersFromTheQueenD | ||||
| import quests.Q10799_StrangeThingsAfootInTheValley.Q10799_StrangeThingsAfootInTheValley; | ||||
| import quests.Q10800_ReconnaissanceAtDragonValley.Q10800_ReconnaissanceAtDragonValley; | ||||
| import quests.Q10801_TheDimensionalWarpPart1.Q10801_TheDimensionalWarpPart1; | ||||
| import quests.Q10802_TheDimensionalWarpPart2.Q10802_TheDimensionalWarpPart2; | ||||
| import quests.Q10803_TheDimensionalWarpPart3.Q10803_TheDimensionalWarpPart3; | ||||
| import quests.Q10804_TheDimensionalWarpPart4.Q10804_TheDimensionalWarpPart4; | ||||
| import quests.Q10805_TheDimensionalWarpPart5.Q10805_TheDimensionalWarpPart5; | ||||
| import quests.Q10806_TheDimensionalWarpPart6.Q10806_TheDimensionalWarpPart6; | ||||
| import quests.Q10807_TheDimensionalWarpPart7.Q10807_TheDimensionalWarpPart7; | ||||
| import quests.Q10811_ExaltedOneWhoFacesTheLimit.Q10811_ExaltedOneWhoFacesTheLimit; | ||||
| import quests.Q10812_FacingSadness.Q10812_FacingSadness; | ||||
| import quests.Q10813_ForGlory.Q10813_ForGlory; | ||||
| @@ -858,6 +864,12 @@ public class QuestMasterHandler | ||||
| 		Q10799_StrangeThingsAfootInTheValley.class, | ||||
| 		Q10800_ReconnaissanceAtDragonValley.class, | ||||
| 		Q10801_TheDimensionalWarpPart1.class, | ||||
| 		Q10802_TheDimensionalWarpPart2.class, | ||||
| 		Q10803_TheDimensionalWarpPart3.class, | ||||
| 		Q10804_TheDimensionalWarpPart4.class, | ||||
| 		Q10805_TheDimensionalWarpPart5.class, | ||||
| 		Q10806_TheDimensionalWarpPart6.class, | ||||
| 		Q10807_TheDimensionalWarpPart7.class, | ||||
| 		Q10811_ExaltedOneWhoFacesTheLimit.class, | ||||
| 		Q10812_FacingSadness.class, | ||||
| 		Q10813_ForGlory.class, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 MobiusDev
					MobiusDev