/* * Copyright (C) 2004-2015 L2J DataPack * * This file is part of L2J DataPack. * * L2J DataPack 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. * * L2J DataPack 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.Q00692_HowtoOpposeEvil; import java.util.HashMap; import java.util.Map; import com.l2jserver.Config; import com.l2jserver.gameserver.enums.QuestSound; import com.l2jserver.gameserver.model.actor.L2Npc; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.holders.ItemHolder; import com.l2jserver.gameserver.model.quest.Quest; import com.l2jserver.gameserver.model.quest.QuestState; /** * How to Oppose Evil (692) * @author Gigiikun */ public final class Q00692_HowtoOpposeEvil extends Quest { private static final int DILIOS = 32549; private static final int KIRKLAN = 32550; private static final int LEKONS_CERTIFICATE = 13857; private static final int[] QUEST_ITEMS = { 13863, 13864, 13865, 13866, 13867, 15535, 15536 }; private static final Map QUEST_MOBS = new HashMap<>(); static { // Seed of Infinity QUEST_MOBS.put(22509, new ItemHolder(13863, 500)); QUEST_MOBS.put(22510, new ItemHolder(13863, 500)); QUEST_MOBS.put(22511, new ItemHolder(13863, 500)); QUEST_MOBS.put(22512, new ItemHolder(13863, 500)); QUEST_MOBS.put(22513, new ItemHolder(13863, 500)); QUEST_MOBS.put(22514, new ItemHolder(13863, 500)); QUEST_MOBS.put(22515, new ItemHolder(13863, 500)); // Seed of Destruction QUEST_MOBS.put(22537, new ItemHolder(13865, 250)); QUEST_MOBS.put(22538, new ItemHolder(13865, 250)); QUEST_MOBS.put(22539, new ItemHolder(13865, 250)); QUEST_MOBS.put(22540, new ItemHolder(13865, 250)); QUEST_MOBS.put(22541, new ItemHolder(13865, 250)); QUEST_MOBS.put(22542, new ItemHolder(13865, 250)); QUEST_MOBS.put(22543, new ItemHolder(13865, 250)); QUEST_MOBS.put(22544, new ItemHolder(13865, 250)); QUEST_MOBS.put(22546, new ItemHolder(13865, 250)); QUEST_MOBS.put(22547, new ItemHolder(13865, 250)); QUEST_MOBS.put(22548, new ItemHolder(13865, 250)); QUEST_MOBS.put(22549, new ItemHolder(13865, 250)); QUEST_MOBS.put(22550, new ItemHolder(13865, 250)); QUEST_MOBS.put(22551, new ItemHolder(13865, 250)); QUEST_MOBS.put(22552, new ItemHolder(13865, 250)); QUEST_MOBS.put(22593, new ItemHolder(13865, 250)); QUEST_MOBS.put(22596, new ItemHolder(13865, 250)); QUEST_MOBS.put(22597, new ItemHolder(13865, 250)); // Seed of Annihilation QUEST_MOBS.put(22746, new ItemHolder(15536, 125)); QUEST_MOBS.put(22747, new ItemHolder(15536, 125)); QUEST_MOBS.put(22748, new ItemHolder(15536, 125)); QUEST_MOBS.put(22749, new ItemHolder(15536, 125)); QUEST_MOBS.put(22750, new ItemHolder(15536, 125)); QUEST_MOBS.put(22751, new ItemHolder(15536, 125)); QUEST_MOBS.put(22752, new ItemHolder(15536, 125)); QUEST_MOBS.put(22753, new ItemHolder(15536, 125)); QUEST_MOBS.put(22754, new ItemHolder(15536, 125)); QUEST_MOBS.put(22755, new ItemHolder(15536, 125)); QUEST_MOBS.put(22756, new ItemHolder(15536, 125)); QUEST_MOBS.put(22757, new ItemHolder(15536, 125)); QUEST_MOBS.put(22758, new ItemHolder(15536, 125)); QUEST_MOBS.put(22759, new ItemHolder(15536, 125)); QUEST_MOBS.put(22760, new ItemHolder(15536, 125)); QUEST_MOBS.put(22761, new ItemHolder(15536, 125)); QUEST_MOBS.put(22762, new ItemHolder(15536, 125)); QUEST_MOBS.put(22763, new ItemHolder(15536, 125)); QUEST_MOBS.put(22764, new ItemHolder(15536, 125)); QUEST_MOBS.put(22765, new ItemHolder(15536, 125)); } public Q00692_HowtoOpposeEvil() { super(692, Q00692_HowtoOpposeEvil.class.getSimpleName(), "How to Oppose Evil"); addStartNpc(DILIOS); addTalkId(DILIOS, KIRKLAN); addKillId(QUEST_MOBS.keySet()); } @Override public final String onAdvEvent(String event, L2Npc npc, L2PcInstance player) { QuestState st = getQuestState(player, false); if (st == null) { return getNoQuestMsg(player); } if (event.equalsIgnoreCase("32549-03.htm")) { st.startQuest(); } else if (event.equalsIgnoreCase("32550-04.htm")) { st.setCond(3); } else if (event.equalsIgnoreCase("32550-07.htm")) { if (!giveReward(st, 13863, 5, 13796, 1)) { return "32550-08.htm"; } } else if (event.equalsIgnoreCase("32550-09.htm")) { if (!giveReward(st, 13798, 1, 57, 5000)) { return "32550-10.htm"; } } else if (event.equalsIgnoreCase("32550-12.htm")) { if (!giveReward(st, 13865, 5, 13841, 1)) { return "32550-13.htm"; } } else if (event.equalsIgnoreCase("32550-14.htm")) { if (!giveReward(st, 13867, 1, 57, 5000)) { return "32550-15.htm"; } } else if (event.equalsIgnoreCase("32550-17.htm")) { if (!giveReward(st, 15536, 5, 15486, 1)) { return "32550-18.htm"; } } else if (event.equalsIgnoreCase("32550-19.htm")) { if (!giveReward(st, 15535, 1, 57, 5000)) { return "32550-20.htm"; } } return event; } @Override public final String onKill(L2Npc npc, L2PcInstance player, boolean isSummon) { final L2PcInstance partyMember = getRandomPartyMember(player, 3); if (partyMember == null) { return null; } final QuestState st = getQuestState(partyMember, false); final int npcId = npc.getId(); if ((st != null) && QUEST_MOBS.containsKey(npcId)) { int chance = (int) (QUEST_MOBS.get(npcId).getCount() * Config.RATE_QUEST_DROP); int numItems = chance / 1000; chance = chance % 1000; if (getRandom(1000) < chance) { numItems++; } if (numItems > 0) { st.giveItems(QUEST_MOBS.get(npcId).getId(), numItems); st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET); } } return null; } @Override public final String onTalk(L2Npc npc, L2PcInstance player) { String htmltext = getNoQuestMsg(player); final QuestState st = getQuestState(player, true); if (st == null) { return htmltext; } if (st.isCreated()) { htmltext = (player.getLevel() >= 75) ? "32549-01.htm" : "32549-00.htm"; } else { if (npc.getId() == DILIOS) { if (st.isCond(1) && st.hasQuestItems(LEKONS_CERTIFICATE)) { htmltext = "32549-04.htm"; st.takeItems(LEKONS_CERTIFICATE, -1); st.setCond(2); } else if (st.isCond(2)) { htmltext = "32549-05.htm"; } } else { if (st.isCond(2)) { htmltext = "32550-01.htm"; } else if (st.isCond(3)) { for (int i : QUEST_ITEMS) { if (st.getQuestItemsCount(i) > 0) { return "32550-05.htm"; } } htmltext = "32550-04.htm"; } } } return htmltext; } private static final boolean giveReward(QuestState st, int itemId, int minCount, int rewardItemId, long rewardCount) { long count = st.getQuestItemsCount(itemId); if (count < minCount) { return false; } count = count / minCount; st.takeItems(itemId, count * minCount); st.rewardItems(rewardItemId, rewardCount * count); return true; } }