diff --git a/trunk/dist/game/data/scripts/quests/MissingQuests.txt b/trunk/dist/game/data/scripts/quests/MissingQuests.txt index ca457b68d6..8ade6271a9 100644 --- a/trunk/dist/game/data/scripts/quests/MissingQuests.txt +++ b/trunk/dist/game/data/scripts/quests/MissingQuests.txt @@ -93,7 +93,6 @@ 10380 The Executioner's Execution 10388 Conspiracy Behind Doors 10389 The Voice of Authority -10425 The Ketra Orc Supporters 10426 Assassination of the Ketra Orc Commander 10427 Assassination of the Ketra Orc Chief 10430 Kekropus' Letter: Tracking the Evil (9/9) diff --git a/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/33852-01.htm b/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/33852-01.htm new file mode 100644 index 0000000000..5e5b0df363 --- /dev/null +++ b/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/33852-01.htm @@ -0,0 +1,4 @@ +Giant's Minion Lugonnes:
+If it is true that you defeated Sakum in the Wasteland you should have no trouble with Belos, a clone of Sakum created by Embryo. But how do I know if it's really you?
+ + \ No newline at end of file diff --git a/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/33852-02.htm b/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/33852-02.htm new file mode 100644 index 0000000000..49d3af2061 --- /dev/null +++ b/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/33852-02.htm @@ -0,0 +1,4 @@ +Giant's Minion Lugonnes:
+First, hide yourself among the Ketra Orcs. Then, find and kill those who help Embryo. That will make things easier.
+ + \ No newline at end of file diff --git a/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/33852-03.htm b/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/33852-03.htm new file mode 100644 index 0000000000..dfad50ef5d --- /dev/null +++ b/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/33852-03.htm @@ -0,0 +1,4 @@ +Giant's Minion Lugonnes:
+If I am right, the helpers sent by Embryo will appear when the Ketra Orc soldiers are in danger.
+ + \ No newline at end of file diff --git a/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/33852-04.htm b/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/33852-04.htm new file mode 100644 index 0000000000..2b111cc61a --- /dev/null +++ b/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/33852-04.htm @@ -0,0 +1,3 @@ +Giant's Minion Lugonnes:
+If you kill some Ketra Orcs here in the Ketra Orc Outpost, Ketra Backup Shooters and Ketra Backup Wizards will appear. Kill 50 each and come back to me. + \ No newline at end of file diff --git a/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/33852-05.html b/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/33852-05.html new file mode 100644 index 0000000000..2ee2c0c04c --- /dev/null +++ b/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/33852-05.html @@ -0,0 +1,3 @@ +Giant's Minion Lugonnes:
You haven't finished the mission yet!
+If you kill some Ketra Orcs here in the Ketra Orc Outpost, Ketra Backup Shooters and Ketra Backup Wizards will appear. Kill 50 each and come back to me. + \ No newline at end of file diff --git a/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/33852-06.html b/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/33852-06.html new file mode 100644 index 0000000000..59e226e306 --- /dev/null +++ b/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/33852-06.html @@ -0,0 +1,4 @@ +Giant's Minion Lugonnes:
+You've certainly proved your worth! That was a devastating blow you struck. Now that the situation is desperate, they will bring out Belos. They've been saving it as a last resort.
+ + \ No newline at end of file diff --git a/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/33852-07.html b/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/33852-07.html new file mode 100644 index 0000000000..e4ad92543c --- /dev/null +++ b/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/33852-07.html @@ -0,0 +1,3 @@ +Giant's Minion Lugonnes:
+For now, let's wait and observe their movements. That will help us find Belos. Until then, get some rest. + \ No newline at end of file diff --git a/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/33852-08.html b/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/33852-08.html new file mode 100644 index 0000000000..2d7ac8d24e --- /dev/null +++ b/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/33852-08.html @@ -0,0 +1,4 @@ +Giant's Minion Lugonnes:
+Maybe you're not prepared after all...
+(This quest may only be undertaken by a Wizard class character who is level 76 to 80.) + \ No newline at end of file diff --git a/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/33852-09.html b/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/33852-09.html new file mode 100644 index 0000000000..57f985258f --- /dev/null +++ b/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/33852-09.html @@ -0,0 +1,4 @@ +Giant's Minion Lugonnes:
+I don't trust you.
+(Ertheia classes cannot perform this quest.) + \ No newline at end of file diff --git a/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/Q10425_TheKetraOrcSupporters.java b/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/Q10425_TheKetraOrcSupporters.java new file mode 100644 index 0000000000..61dfdec605 --- /dev/null +++ b/trunk/dist/game/data/scripts/quests/Q10425_TheKetraOrcSupporters/Q10425_TheKetraOrcSupporters.java @@ -0,0 +1,224 @@ +/* + * 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.Q10425_TheKetraOrcSupporters; + +import java.util.HashSet; +import java.util.Set; + +import com.l2jmobius.commons.util.CommonUtil; +import com.l2jmobius.gameserver.enums.CategoryType; +import com.l2jmobius.gameserver.enums.ChatType; +import com.l2jmobius.gameserver.enums.QuestSound; +import com.l2jmobius.gameserver.enums.Race; +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 com.l2jmobius.gameserver.network.NpcStringId; + +/** + * The Ketra Orc Supporters (10425) + * @author Stayway + */ +public final class Q10425_TheKetraOrcSupporters extends Quest +{ + // NPCs + private static final int LUGONNES = 33852; + private static final int EMBRYO_SHOOTER = 27514; + private static final int EMBRYO_WIZARD = 27515; + private static final int[] SHOOTER_MONSTERS = + { + 21327, // Ketra Orc Raider + 21331, // Ketra Orc Warrior + 21332, // Ketra Orc Lieutenant + 21335, // Ketra Orc Elite Soldier + 21336, // Ketra Orc White Captain + 21339, // Ketra Orc Officer + 21340, // Ketra Orc Battalion Commander + 27511, // Ketra Backup Shooter + }; + private static final int[] WIZARD_MONSTERS = + { + 21334, // Ketra Orc Medium + 21338, // Ketra Orc Seer + 21342, // Ketra Orc Grand Priest + 27512, // Varka Backup Wizard + }; + // Items + private static final int EAS = 26353; // Scroll: Enchant Armor (S-grade) + // Misc + private static final int MIN_LEVEL = 76; + private static final int MAX_LEVEL = 80; + + public Q10425_TheKetraOrcSupporters() + { + super(10425); + addStartNpc(LUGONNES); + addTalkId(LUGONNES); + addKillId(SHOOTER_MONSTERS); + addKillId(WIZARD_MONSTERS); + addCondNotRace(Race.ERTHEIA, "33852-09.html"); + addCondInCategory(CategoryType.WIZARD_GROUP, "33852-08.html"); + addCondMinLevel(MIN_LEVEL, "33852-08.html"); + addCondMaxLevel(MAX_LEVEL, "33852-08.html"); + } + + @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 "33852-02.htm": + case "33852-03.htm": + { + htmltext = event; + break; + } + case "33852-04.htm": + { + qs.startQuest(); + htmltext = event; + break; + } + case "33852-07.html": + { + if (qs.isCond(2)) + { + qs.exitQuest(false, true); + giveItems(player, EAS, 2); + giveStoryQuestReward(player, 89); + if ((player.getLevel() >= MIN_LEVEL) && (player.getLevel() <= MAX_LEVEL)) + { + addExpAndSp(player, 22_997_520, 5519); + } + htmltext = event; + } + break; + } + } + return htmltext; + } + + @Override + public String onTalk(L2Npc npc, L2PcInstance player) + { + final QuestState qs = getQuestState(player, true); + String htmltext = null; + + switch (qs.getState()) + { + case State.CREATED: + { + htmltext = "33852-01.htm"; + break; + } + case State.STARTED: + { + htmltext = qs.isCond(1) ? "33852-05.html" : "33852-06.html"; + break; + } + case State.COMPLETED: + { + htmltext = getAlreadyCompletedMsg(player); + break; + } + } + return htmltext; + } + + @Override + public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon) + { + final QuestState qs = getQuestState(killer, false); + + if ((qs != null) && qs.isCond(1)) + { + if ((npc.getId() == EMBRYO_SHOOTER) || (npc.getId() == EMBRYO_WIZARD)) + { + int shooterCount = qs.getInt("KillCount_" + EMBRYO_SHOOTER); + int wizardCount = qs.getInt("KillCount_" + EMBRYO_WIZARD); + + if (npc.getId() == EMBRYO_SHOOTER) + { + if (shooterCount < 50) + { + qs.set("KillCount_" + EMBRYO_SHOOTER, ++shooterCount); + playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); + } + } + else + { + if (wizardCount < 50) + { + qs.set("KillCount_" + EMBRYO_WIZARD, ++wizardCount); + playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); + } + } + + if ((shooterCount >= 50) && (wizardCount >= 50)) + { + qs.setCond(2, true); + } + } + else + { + if (CommonUtil.contains(WIZARD_MONSTERS, npc.getId())) + { + if (qs.getInt("KillCount_" + EMBRYO_WIZARD) < 50) + { + final L2Npc embryo = addSpawn(EMBRYO_WIZARD, npc, false, 60000); + addAttackPlayerDesire(embryo, killer); + embryo.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.YOU_DARE_INTERFERE_WITH_EMBRYO_SURELY_YOU_WISH_FOR_DEATH); + } + } + else + { + if (qs.getInt("KillCount_" + EMBRYO_SHOOTER) < 50) + { + final L2Npc embryo = addSpawn(EMBRYO_SHOOTER, npc, false, 60000); + addAttackPlayerDesire(embryo, killer); + embryo.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.YOU_DARE_INTERFERE_WITH_EMBRYO_SURELY_YOU_WISH_FOR_DEATH); + } + } + } + } + return super.onKill(npc, killer, isSummon); + } + + @Override + public Set getNpcLogList(L2PcInstance activeChar) + { + final QuestState qs = getQuestState(activeChar, false); + if ((qs != null) && qs.isCond(1)) + { + final Set npcLogList = new HashSet<>(2); + npcLogList.add(new NpcLogListHolder(EMBRYO_SHOOTER, false, qs.getInt("KillCount_" + EMBRYO_SHOOTER))); + npcLogList.add(new NpcLogListHolder(EMBRYO_WIZARD, false, qs.getInt("KillCount_" + EMBRYO_WIZARD))); + return npcLogList; + } + return super.getNpcLogList(activeChar); + } +} \ 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 8bd3efd348..69d02ef620 100644 --- a/trunk/dist/game/data/scripts/quests/QuestMasterHandler.java +++ b/trunk/dist/game/data/scripts/quests/QuestMasterHandler.java @@ -284,6 +284,7 @@ import quests.Q10420_TheVarkaSilenosSupporters.Q10420_TheVarkaSilenosSupporters; import quests.Q10421_AssassinationOfTheVarkaSilenosCommander.Q10421_AssassinationOfTheVarkaSilenosCommander; import quests.Q10422_AssassinationOfTheVarkaSilenosChief.Q10422_AssassinationOfTheVarkaSilenosChief; import quests.Q10424_KekropusLetterBelosWhereabouts.Q10424_KekropusLetterBelosWhereabouts; +import quests.Q10425_TheKetraOrcSupporters.Q10425_TheKetraOrcSupporters; import quests.Q10442_TheAnnihilatedPlains1.Q10442_TheAnnihilatedPlains1; import quests.Q10445_AnImpendingThreat.Q10445_AnImpendingThreat; import quests.Q10450_ADarkAmbition.Q10450_ADarkAmbition; @@ -650,6 +651,7 @@ public class QuestMasterHandler Q10421_AssassinationOfTheVarkaSilenosCommander.class, Q10422_AssassinationOfTheVarkaSilenosChief.class, Q10424_KekropusLetterBelosWhereabouts.class, + Q10425_TheKetraOrcSupporters.class, Q10442_TheAnnihilatedPlains1.class, Q10445_AnImpendingThreat.class, Q10450_ADarkAmbition.class,