/* * 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.Q00700_CursedLife; import java.util.HashMap; import java.util.Map; import quests.Q10273_GoodDayToFly.Q10273_GoodDayToFly; 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.quest.Quest; import com.l2jserver.gameserver.model.quest.QuestState; import com.l2jserver.gameserver.model.quest.State; /** * Cursed Life (700) * @author xban1x */ public class Q00700_CursedLife extends Quest { // NPC private static final int ORBYU = 32560; // Monsters private static final int ROK = 25624; private static final Map MONSTERS = new HashMap<>(); //@formatter:off static { MONSTERS.put(22602, new Integer[] { 15, 139, 965}); // Mutant Bird lvl 1 MONSTERS.put(22603, new Integer[] { 15, 143, 999}); // Mutant Bird lvl 2 MONSTERS.put(25627, new Integer[] { 14, 125, 993}); // Mutant Bird lvl 3 MONSTERS.put(22604, new Integer[] { 5, 94, 994}); // Dra Hawk lvl 1 MONSTERS.put(22605, new Integer[] { 5, 99, 993}); // Dra Hawk lvl 2 MONSTERS.put(25628, new Integer[] { 3, 73, 991}); // Dra Hawk lvl 3 } //@formatter:on // Items private static final int SWALLOWED_BONES = 13874; private static final int SWALLOWED_STERNUM = 13873; private static final int SWALLOWED_SKULL = 13872; // Misc private static final int MIN_LVL = 75; private static final int SWALLOWED_BONES_ADENA = 500; private static final int SWALLOWED_STERNUM_ADENA = 5000; private static final int SWALLOWED_SKULL_ADENA = 50000; private static final int BONUS = 16670; public Q00700_CursedLife() { super(700, Q00700_CursedLife.class.getSimpleName(), "Cursed Life"); addStartNpc(ORBYU); addTalkId(ORBYU); addKillId(ROK); addKillId(MONSTERS.keySet()); registerQuestItems(SWALLOWED_BONES, SWALLOWED_STERNUM, SWALLOWED_SKULL); } @Override public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) { QuestState st = getQuestState(player, false); String htmltext = null; if (st != null) { switch (event) { case "32560-02.htm": { st = player.getQuestState(Q10273_GoodDayToFly.class.getSimpleName()); htmltext = ((player.getLevel() < MIN_LVL) || (st == null) || (!st.isCompleted())) ? "32560-03.htm" : event; break; } case "32560-04.htm": case "32560-09.html": { htmltext = event; break; } case "32560-05.htm": { st.startQuest(); htmltext = event; break; } case "32560-10.html": { st.exitQuest(true, true); htmltext = event; break; } } } return htmltext; } @Override public String onTalk(L2Npc npc, L2PcInstance player) { final QuestState st = getQuestState(player, true); String htmltext = getNoQuestMsg(player); if (st != null) { switch (st.getState()) { case State.CREATED: { htmltext = "32560-01.htm"; break; } case State.STARTED: { long bones = st.getQuestItemsCount(SWALLOWED_BONES); long ribs = st.getQuestItemsCount(SWALLOWED_STERNUM); long skulls = st.getQuestItemsCount(SWALLOWED_SKULL); long sum = bones + ribs + skulls; if (sum > 0) { st.giveAdena(((bones * SWALLOWED_BONES_ADENA) + (ribs * SWALLOWED_STERNUM_ADENA) + (skulls * SWALLOWED_SKULL_ADENA) + (sum >= 10 ? BONUS : 0)), true); takeItems(player, -1, SWALLOWED_BONES, SWALLOWED_STERNUM, SWALLOWED_SKULL); htmltext = sum < 10 ? "32560-07.html" : "32560-08.html"; } else { htmltext = "32560-06.html"; } break; } } } return htmltext; } @Override public String onKill(L2Npc npc, L2PcInstance player, boolean isSummon) { final QuestState st = getQuestState(player, false); if (st != null) { if (npc.getId() == ROK) { int amount = 0, chance = getRandom(1000); if (chance < 700) { amount = 1; } else if (chance < 885) { amount = 2; } else if (chance < 949) { amount = 3; } else if (chance < 966) { amount = getRandom(5) + 4; } else if (chance < 985) { amount = getRandom(9) + 4; } else if (chance < 993) { amount = getRandom(7) + 13; } else if (chance < 997) { amount = getRandom(15) + 9; } else if (chance < 999) { amount = getRandom(23) + 53; } else { amount = getRandom(49) + 76; } st.giveItems(SWALLOWED_BONES, amount); chance = getRandom(1000); if (chance < 520) { amount = 1; } else if (chance < 771) { amount = 2; } else if (chance < 836) { amount = 3; } else if (chance < 985) { amount = getRandom(2) + 4; } else if (chance < 995) { amount = getRandom(4) + 5; } else { amount = getRandom(8) + 6; } st.giveItems(SWALLOWED_STERNUM, amount); chance = getRandom(1000); if (chance < 185) { amount = getRandom(2) + 1; } else if (chance < 370) { amount = getRandom(6) + 2; } else if (chance < 570) { amount = getRandom(6) + 7; } else if (chance < 850) { amount = getRandom(6) + 12; } else { amount = getRandom(6) + 17; } st.giveItems(SWALLOWED_SKULL, amount); st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET); } else { Integer[] chances = MONSTERS.get(npc.getId()); int chance = getRandom(1000); if (chance < chances[0]) { st.giveItems(SWALLOWED_BONES, 1); st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET); } else if (chance < chances[1]) { st.giveItems(SWALLOWED_STERNUM, 1); st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET); } else if (chance < chances[2]) { st.giveItems(SWALLOWED_SKULL, 1); st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET); } } } return super.onKill(npc, player, isSummon); } }