/* * 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.Q00111_ElrokianHuntersProof; import java.util.HashMap; import java.util.Map; 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.ItemChanceHolder; import com.l2jserver.gameserver.model.quest.Quest; import com.l2jserver.gameserver.model.quest.QuestState; import com.l2jserver.gameserver.model.quest.State; /** * Elrokian Hunter's Proof (111) * @author Adry_85 */ public final class Q00111_ElrokianHuntersProof extends Quest { // NPCs private static final int MARQUEZ = 32113; private static final int MUSHIKA = 32114; private static final int ASAMAH = 32115; private static final int KIRIKACHIN = 32116; // Items private static final int ELROKIAN_TRAP = 8763; private static final int TRAP_STONE = 8764; private static final int DIARY_FRAGMENT = 8768; private static final int EXPEDITION_MEMBERS_LETTER = 8769; private static final int ORNITHOMINUS_CLAW = 8770; private static final int DEINONYCHUS_BONE = 8771; private static final int PACHYCEPHALOSAURUS_SKIN = 8772; private static final int PRACTICE_ELROKIAN_TRAP = 8773; // Misc private static final int MIN_LEVEL = 75; // Mobs private static final Map MOBS_DROP_CHANCES = new HashMap<>(); static { MOBS_DROP_CHANCES.put(22196, new ItemChanceHolder(DIARY_FRAGMENT, 0.51, 4)); // velociraptor_leader MOBS_DROP_CHANCES.put(22197, new ItemChanceHolder(DIARY_FRAGMENT, 0.51, 4)); // velociraptor MOBS_DROP_CHANCES.put(22198, new ItemChanceHolder(DIARY_FRAGMENT, 0.51, 4)); // velociraptor_s MOBS_DROP_CHANCES.put(22218, new ItemChanceHolder(DIARY_FRAGMENT, 0.25, 4)); // velociraptor_n MOBS_DROP_CHANCES.put(22223, new ItemChanceHolder(DIARY_FRAGMENT, 0.26, 4)); // velociraptor_leader2 MOBS_DROP_CHANCES.put(22200, new ItemChanceHolder(ORNITHOMINUS_CLAW, 0.66, 11)); // ornithomimus_leader MOBS_DROP_CHANCES.put(22201, new ItemChanceHolder(ORNITHOMINUS_CLAW, 0.33, 11)); // ornithomimus MOBS_DROP_CHANCES.put(22202, new ItemChanceHolder(ORNITHOMINUS_CLAW, 0.66, 11)); // ornithomimus_s MOBS_DROP_CHANCES.put(22219, new ItemChanceHolder(ORNITHOMINUS_CLAW, 0.33, 11)); // ornithomimus_n MOBS_DROP_CHANCES.put(22224, new ItemChanceHolder(ORNITHOMINUS_CLAW, 0.33, 11)); // ornithomimus_leader2 MOBS_DROP_CHANCES.put(22203, new ItemChanceHolder(DEINONYCHUS_BONE, 0.65, 11)); // deinonychus_leader MOBS_DROP_CHANCES.put(22204, new ItemChanceHolder(DEINONYCHUS_BONE, 0.32, 11)); // deinonychus MOBS_DROP_CHANCES.put(22205, new ItemChanceHolder(DEINONYCHUS_BONE, 0.66, 11)); // deinonychus_s MOBS_DROP_CHANCES.put(22220, new ItemChanceHolder(DEINONYCHUS_BONE, 0.32, 11)); // deinonychus_n MOBS_DROP_CHANCES.put(22225, new ItemChanceHolder(DEINONYCHUS_BONE, 0.32, 11)); // deinonychus_leader2 MOBS_DROP_CHANCES.put(22208, new ItemChanceHolder(PACHYCEPHALOSAURUS_SKIN, 0.50, 11)); // pachycephalosaurus_ldr MOBS_DROP_CHANCES.put(22209, new ItemChanceHolder(PACHYCEPHALOSAURUS_SKIN, 0.50, 11)); // pachycephalosaurus MOBS_DROP_CHANCES.put(22210, new ItemChanceHolder(PACHYCEPHALOSAURUS_SKIN, 0.50, 11)); // pachycephalosaurus_s MOBS_DROP_CHANCES.put(22221, new ItemChanceHolder(PACHYCEPHALOSAURUS_SKIN, 0.49, 11)); // pachycephalosaurus_n MOBS_DROP_CHANCES.put(22226, new ItemChanceHolder(PACHYCEPHALOSAURUS_SKIN, 0.50, 11)); // pachycephalosaurus_ldr2 } public Q00111_ElrokianHuntersProof() { super(111, Q00111_ElrokianHuntersProof.class.getSimpleName(), "Elrokian Hunter's Proof"); addStartNpc(MARQUEZ); addTalkId(MARQUEZ, MUSHIKA, ASAMAH, KIRIKACHIN); addKillId(MOBS_DROP_CHANCES.keySet()); registerQuestItems(DIARY_FRAGMENT, EXPEDITION_MEMBERS_LETTER, ORNITHOMINUS_CLAW, DEINONYCHUS_BONE, PACHYCEPHALOSAURUS_SKIN, PRACTICE_ELROKIAN_TRAP); } @Override public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) { final QuestState qs = getQuestState(player, false); String htmltext = null; if (qs == null) { return htmltext; } switch (event) { case "32113-02.htm": case "32113-05.htm": case "32113-04.html": case "32113-10.html": case "32113-11.html": case "32113-12.html": case "32113-13.html": case "32113-14.html": case "32113-18.html": case "32113-19.html": case "32113-20.html": case "32113-21.html": case "32113-22.html": case "32113-23.html": case "32113-24.html": case "32115-08.html": case "32116-03.html": { htmltext = event; break; } case "32113-03.html": { qs.startQuest(); qs.setMemoState(1); htmltext = event; break; } case "32113-15.html": { if (qs.isMemoState(3)) { qs.setMemoState(4); qs.setCond(4, true); htmltext = event; } break; } case "32113-25.html": { if (qs.isMemoState(5)) { qs.setMemoState(6); qs.setCond(6, true); giveItems(player, EXPEDITION_MEMBERS_LETTER, 1); htmltext = event; } break; } case "32115-03.html": { if (qs.isMemoState(2)) { qs.setMemoState(3); qs.setCond(3, true); htmltext = event; } break; } case "32115-06.html": { if (qs.isMemoState(9)) { qs.setMemoState(10); qs.setCond(9); playSound(player, QuestSound.ETCSOUND_ELROKI_SONG_FULL); htmltext = event; } break; } case "32115-09.html": { if (qs.isMemoState(10)) { qs.setMemoState(11); qs.setCond(10, true); htmltext = event; } break; } case "32116-04.html": { if (qs.isMemoState(7)) { qs.setMemoState(8); playSound(player, QuestSound.ETCSOUND_ELROKI_SONG_FULL); htmltext = event; } break; } case "32116-07.html": { if (qs.isMemoState(8)) { qs.setMemoState(9); qs.setCond(8, true); htmltext = event; } break; } case "32116-10.html": { if (qs.isMemoState(12) && hasQuestItems(player, PRACTICE_ELROKIAN_TRAP)) { takeItems(player, PRACTICE_ELROKIAN_TRAP, -1); giveItems(player, ELROKIAN_TRAP, 1); giveItems(player, TRAP_STONE, 100); giveAdena(player, 1071691, true); addExpAndSp(player, 553524, 55538); qs.exitQuest(false, true); htmltext = event; } break; } } return htmltext; } @Override public String onKill(L2Npc npc, L2PcInstance player, boolean isSummon) { final QuestState qs = getRandomPartyMemberState(player, -1, 3, npc); if (qs != null) { final ItemChanceHolder item = MOBS_DROP_CHANCES.get(npc.getId()); if (item.getCount() == qs.getMemoState()) { if (qs.isCond(4)) { if (giveItemRandomly(qs.getPlayer(), npc, item.getId(), 1, 50, item.getChance(), true)) { qs.setCond(5); } } else if (qs.isCond(10)) { if (giveItemRandomly(qs.getPlayer(), npc, item.getId(), 1, 10, item.getChance(), true) // && (getQuestItemsCount(qs.getPlayer(), ORNITHOMINUS_CLAW) >= 10) // && (getQuestItemsCount(qs.getPlayer(), DEINONYCHUS_BONE) >= 10) // && (getQuestItemsCount(qs.getPlayer(), PACHYCEPHALOSAURUS_SKIN) >= 10)) { qs.setCond(11); } } } } return super.onKill(npc, player, isSummon); } @Override public String onTalk(L2Npc npc, L2PcInstance player) { QuestState qs = getQuestState(player, true); String htmltext = getNoQuestMsg(player); if (qs == null) { return htmltext; } switch (qs.getState()) { case State.COMPLETED: { if (npc.getId() == MARQUEZ) { htmltext = getAlreadyCompletedMsg(player); } break; } case State.CREATED: { if (npc.getId() == MARQUEZ) { htmltext = ((player.getLevel() >= MIN_LEVEL) ? "32113-01.htm" : "32113-06.html"); } break; } case State.STARTED: { switch (npc.getId()) { case MARQUEZ: { switch (qs.getMemoState()) { case 1: { htmltext = "32113-07.html"; break; } case 2: { htmltext = "32113-08.html"; break; } case 3: { htmltext = "32113-09.html"; break; } case 4: { if (getQuestItemsCount(player, DIARY_FRAGMENT) < 50) { htmltext = "32113-16.html"; } else { takeItems(player, DIARY_FRAGMENT, -1); qs.setMemoState(5); htmltext = "32113-17.html"; } break; } case 5: { htmltext = "32113-26.html"; break; } case 6: { htmltext = "32113-27.html"; break; } case 7: case 8: { htmltext = "32113-28.html"; break; } case 9: { htmltext = "32113-29.html"; break; } case 10: case 11: case 12: { htmltext = "32113-30.html"; break; } } break; } case MUSHIKA: { if (qs.isMemoState(1)) { qs.setCond(2, true); qs.setMemoState(2); htmltext = "32114-01.html"; } else if ((qs.getMemoState() > 1) && (qs.getMemoState() < 10)) { htmltext = "32114-02.html"; } else { htmltext = "32114-03.html"; } break; } case ASAMAH: { switch (qs.getMemoState()) { case 1: { htmltext = "32115-01.html"; break; } case 2: { htmltext = "32115-02.html"; break; } case 3: case 4: case 5: case 6: case 7: case 8: { htmltext = "32115-04.html"; break; } case 9: { htmltext = "32115-05.html"; break; } case 10: { htmltext = "32115-07.html"; break; } case 11: { if ((getQuestItemsCount(player, ORNITHOMINUS_CLAW) < 10) || (getQuestItemsCount(player, DEINONYCHUS_BONE) < 10) || (getQuestItemsCount(player, PACHYCEPHALOSAURUS_SKIN) < 10)) { htmltext = "32115-10.html"; } else { qs.setMemoState(12); qs.setCond(12, true); giveItems(player, PRACTICE_ELROKIAN_TRAP, 1); takeItems(player, ORNITHOMINUS_CLAW, -1); takeItems(player, DEINONYCHUS_BONE, -1); takeItems(player, PACHYCEPHALOSAURUS_SKIN, -1); htmltext = "32115-11.html"; } break; } case 12: { htmltext = "32115-12.html"; break; } } break; } case KIRIKACHIN: { switch (qs.getMemoState()) { case 1: case 2: case 3: case 4: case 5: { htmltext = "32116-01.html"; break; } case 6: { if (hasQuestItems(player, EXPEDITION_MEMBERS_LETTER)) { qs.setMemoState(7); qs.setCond(7, true); takeItems(player, EXPEDITION_MEMBERS_LETTER, -1); htmltext = "32116-02.html"; } break; } case 7: { htmltext = "32116-05.html"; break; } case 8: { htmltext = "32116-06.html"; break; } case 9: case 10: case 11: { htmltext = "32116-08.html"; break; } case 12: { htmltext = "32116-09.html"; break; } } break; } } break; } } return htmltext; } }