/* * 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.Q00416_PathOfTheOrcShaman; 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.base.ClassId; 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.network.NpcStringId; import com.l2jserver.gameserver.network.clientpackets.Say2; import com.l2jserver.gameserver.network.serverpackets.NpcSay; import com.l2jserver.gameserver.network.serverpackets.SocialAction; /** * Path of the Orc Shaman (416) * @author Adry_85 */ public final class Q00416_PathOfTheOrcShaman extends Quest { // NPCs private static final int UMOS = 30502; private static final int TATARU_ZU_HESTUI = 30585; private static final int HESTUI_TOTEM_SPIRIT = 30592; private static final int DUDA_MARA_TOTEM_SPIRIT = 30593; private static final int MOIRA = 31979; private static final int TOTEM_SPIRIT_OF_GANDI = 32057; private static final int DEAD_LEOPARDS_CARCASS = 32090; // Items private static final int FIRE_CHARM = 1616; private static final int KASHA_BEAR_PELT = 1617; private static final int KASHA_BLADE_SPIDER_HUSK = 1618; private static final int FIRST_FIERY_EGG = 1619; private static final int HESTUI_MASK = 1620; private static final int SECOND_FIERY_EGG = 1621; private static final int TOTEM_SPIRIT_CLAW = 1622; private static final int TATARUS_LETTER = 1623; private static final int FLAME_CHARM = 1624; private static final int GRIZZLY_BLOOD = 1625; private static final int BLOOD_CAULDRON = 1626; private static final int SPIRIT_NET = 1627; private static final int BOUND_DURKA_SPIRIT = 1628; private static final int DURKA_PARASITE = 1629; private static final int TOTEM_SPIRIT_BLOOD = 1630; private static final int MASK_OF_MEDIUM = 1631; // Quest Monsters private static final int DURKA_SPIRIT = 27056; private static final int BLACK_LEOPARD = 27319; // Misc private static final int MIN_LEVEL = 18; // Mobs private static final Map MOBS = new HashMap<>(); static { MOBS.put(20415, new ItemChanceHolder(FIRST_FIERY_EGG, 1.0, 1)); // scarlet_salamander MOBS.put(20478, new ItemChanceHolder(KASHA_BLADE_SPIDER_HUSK, 1.0, 1)); // kasha_blade_spider MOBS.put(20479, new ItemChanceHolder(KASHA_BEAR_PELT, 1.0, 1)); // kasha_bear MOBS.put(20335, new ItemChanceHolder(GRIZZLY_BLOOD, 1.0, 6)); // grizzly_bear MOBS.put(20038, new ItemChanceHolder(DURKA_PARASITE, 1.0, 9)); // poison_spider MOBS.put(20043, new ItemChanceHolder(DURKA_PARASITE, 1.0, 9)); // bind_poison_spider MOBS.put(27056, new ItemChanceHolder(DURKA_PARASITE, 1.0, 9)); // durka_spirit } public Q00416_PathOfTheOrcShaman() { super(416, Q00416_PathOfTheOrcShaman.class.getSimpleName(), "Path of the Orc Shaman"); addStartNpc(TATARU_ZU_HESTUI); addTalkId(TATARU_ZU_HESTUI, UMOS, MOIRA, DEAD_LEOPARDS_CARCASS, DUDA_MARA_TOTEM_SPIRIT, HESTUI_TOTEM_SPIRIT, TOTEM_SPIRIT_OF_GANDI); addKillId(MOBS.keySet()); addKillId(BLACK_LEOPARD); registerQuestItems(FIRE_CHARM, KASHA_BEAR_PELT, KASHA_BLADE_SPIDER_HUSK, FIRST_FIERY_EGG, HESTUI_MASK, SECOND_FIERY_EGG, TOTEM_SPIRIT_CLAW, TATARUS_LETTER, FLAME_CHARM, GRIZZLY_BLOOD, BLOOD_CAULDRON, SPIRIT_NET, BOUND_DURKA_SPIRIT, DURKA_PARASITE, TOTEM_SPIRIT_BLOOD); } @Override public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) { final QuestState st = getQuestState(player, false); if (st == null) { return null; } String htmltext = null; switch (event) { case "START": { if (player.getClassId() != ClassId.orcMage) { if (player.getClassId() == ClassId.orcShaman) { htmltext = "30585-02.htm"; } else { htmltext = "30585-03.htm"; } } else if (player.getLevel() < MIN_LEVEL) { htmltext = "30585-04.htm"; } else if (hasQuestItems(player, MASK_OF_MEDIUM)) { htmltext = "30585-05.htm"; } else { htmltext = "30585-06.htm"; } break; } case "30585-07.htm": { st.startQuest(); st.setMemoState(1); giveItems(player, FIRE_CHARM, 1); htmltext = event; break; } case "30585-12.html": { if (hasQuestItems(player, TOTEM_SPIRIT_CLAW)) { htmltext = event; } break; } case "30585-13.html": { if (hasQuestItems(player, TOTEM_SPIRIT_CLAW)) { takeItems(player, TOTEM_SPIRIT_CLAW, -1); giveItems(player, TATARUS_LETTER, 1); st.setCond(5, true); htmltext = event; } break; } case "30585-14.html": { if (hasQuestItems(player, TOTEM_SPIRIT_CLAW)) { takeItems(player, TOTEM_SPIRIT_CLAW, -1); st.setCond(12, true); st.setMemoState(100); htmltext = event; } break; } case "30502-07.html": { if (hasQuestItems(player, TOTEM_SPIRIT_BLOOD)) { takeItems(player, TOTEM_SPIRIT_BLOOD, -1); giveItems(player, MASK_OF_MEDIUM, 1); final int level = player.getLevel(); if (level >= 20) { addExpAndSp(player, 320534, 22992); } else if (level >= 19) { addExpAndSp(player, 456128, 29690); } else { addExpAndSp(player, 591724, 36388); } giveAdena(player, 163800, true); st.exitQuest(false, true); player.sendPacket(new SocialAction(player.getObjectId(), 3)); st.saveGlobalQuestVar("1ClassQuestFinished", "1"); htmltext = event; } break; } case "32090-05.html": { if (st.isMemoState(106)) { htmltext = event; } break; } case "32090-06.html": { if (st.isMemoState(106)) { st.setMemoState(107); st.setCond(18, true); htmltext = event; } break; } case "30593-02.html": { if (hasQuestItems(player, BLOOD_CAULDRON)) { htmltext = event; } break; } case "30593-03.html": { if (hasQuestItems(player, BLOOD_CAULDRON)) { takeItems(player, BLOOD_CAULDRON, -1); giveItems(player, SPIRIT_NET, 1); st.setCond(9, true); htmltext = event; } break; } case "30592-02.html": { if (hasQuestItems(player, HESTUI_MASK, SECOND_FIERY_EGG)) { htmltext = event; } break; } case "30592-03.html": { if (hasQuestItems(player, HESTUI_MASK, SECOND_FIERY_EGG)) { takeItems(player, -1, HESTUI_MASK, SECOND_FIERY_EGG); giveItems(player, TOTEM_SPIRIT_CLAW, 1); st.setCond(4, true); htmltext = event; } break; } case "32057-02.html": { if (st.isMemoState(101)) { st.setMemoState(102); st.setCond(14, true); htmltext = event; } break; } case "32057-05.html": { if (st.isMemoState(109)) { st.setMemoState(110); st.setCond(21, true); htmltext = event; } break; } } return htmltext; } @Override public String onKill(L2Npc npc, L2PcInstance player, boolean isSummon) { final QuestState st = getRandomPartyMemberState(player, -1, 3, npc); if (st == null) { return super.onKill(npc, player, isSummon); } if (npc.getId() == BLACK_LEOPARD) { switch (st.getMemoState()) { case 102: { st.setMemoState(103); break; } case 103: { st.setMemoState(104); st.setCond(15, true); if (getRandom(100) < 66) { npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.NPC_ALL, npc.getId(), NpcStringId.MY_DEAR_FRIEND_OF_S1_WHO_HAS_GONE_ON_AHEAD_OF_ME).addStringParameter(st.getPlayer().getName())); } break; } case 105: { st.setMemoState(106); st.setCond(17, true); if (getRandom(100) < 66) { npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.NPC_ALL, npc.getId(), NpcStringId.LISTEN_TO_TEJAKAR_GANDI_YOUNG_OROKA_THE_SPIRIT_OF_THE_SLAIN_LEOPARD_IS_CALLING_YOU_S1).addStringParameter(st.getPlayer().getName())); } break; } case 107: { st.setMemoState(108); st.setCond(19, true); break; } } return super.onKill(npc, player, isSummon); } final ItemChanceHolder item = MOBS.get(npc.getId()); if (item.getCount() == st.getCond()) { if (st.isCond(1) && hasQuestItems(st.getPlayer(), FIRE_CHARM)) { if (giveItemRandomly(st.getPlayer(), npc, item.getId(), 1, 1, item.getChance(), true) // && hasQuestItems(st.getPlayer(), FIRST_FIERY_EGG, KASHA_BLADE_SPIDER_HUSK, KASHA_BEAR_PELT)) { st.setCond(2, true); } } else if (st.isCond(6) && hasQuestItems(st.getPlayer(), FLAME_CHARM)) { if (giveItemRandomly(st.getPlayer(), npc, item.getId(), 1, 3, item.getChance(), true)) { st.setCond(7); } } else if (st.isCond(9) && hasQuestItems(st.getPlayer(), SPIRIT_NET) // && !hasQuestItems(st.getPlayer(), BOUND_DURKA_SPIRIT) // && (getQuestItemsCount(st.getPlayer(), DURKA_PARASITE) <= 8)) { if ((npc.getId() == 20038) || (npc.getId() == 20043)) { final int random = getRandom(10); final long itemCount = getQuestItemsCount(st.getPlayer(), DURKA_PARASITE); if ((((itemCount == 5) && (random < 1))) // || ((itemCount == 6) && (random < 2)) // || ((itemCount == 7) && (random < 2)) // || (itemCount >= 8)) { takeItems(player, DURKA_PARASITE, -1); addSpawn(DURKA_SPIRIT, npc.getX(), npc.getY(), npc.getZ(), 0, true, 0, false); playSound(st.getPlayer(), QuestSound.ITEMSOUND_QUEST_BEFORE_BATTLE); } else { giveItems(st.getPlayer(), DURKA_PARASITE, 1); playSound(st.getPlayer(), QuestSound.ITEMSOUND_QUEST_ITEMGET); } } else { giveItems(st.getPlayer(), BOUND_DURKA_SPIRIT, 1); takeItems(st.getPlayer(), -1, DURKA_PARASITE, SPIRIT_NET); } } } return super.onKill(npc, player, isSummon); } @Override public String onTalk(L2Npc npc, L2PcInstance player) { final QuestState st = getQuestState(player, true); String htmltext = getNoQuestMsg(player); if (st.isCreated()) { if (npc.getId() == TATARU_ZU_HESTUI) { htmltext = "30585-01.htm"; } } else if (st.isStarted()) { switch (npc.getId()) { case TATARU_ZU_HESTUI: { if (st.isMemoState(1)) { if (hasQuestItems(player, FIRE_CHARM)) { if (getQuestItemsCount(player, KASHA_BEAR_PELT, KASHA_BLADE_SPIDER_HUSK, FIRST_FIERY_EGG) < 3) { htmltext = "30585-08.html"; } else { takeItems(player, -1, FIRE_CHARM, KASHA_BEAR_PELT, KASHA_BLADE_SPIDER_HUSK, FIRST_FIERY_EGG); giveItems(player, HESTUI_MASK, 1); giveItems(player, SECOND_FIERY_EGG, 1); st.setCond(3, true); htmltext = "30585-09.html"; } } else if (hasQuestItems(player, HESTUI_MASK, SECOND_FIERY_EGG)) { htmltext = "30585-10.html"; } else if (hasQuestItems(player, TOTEM_SPIRIT_CLAW)) { htmltext = "30585-11.html"; } else if (hasQuestItems(player, TATARUS_LETTER)) { htmltext = "30585-15.html"; } else if (hasAtLeastOneQuestItem(player, GRIZZLY_BLOOD, FLAME_CHARM, BLOOD_CAULDRON, SPIRIT_NET, BOUND_DURKA_SPIRIT, TOTEM_SPIRIT_BLOOD)) { htmltext = "30585-16.html"; } } else if (st.isMemoState(100)) { htmltext = "30585-14.html"; } break; } case UMOS: { if (st.isMemoState(1)) { if (hasQuestItems(player, TATARUS_LETTER)) { giveItems(player, FLAME_CHARM, 1); takeItems(player, TATARUS_LETTER, -1); st.setCond(6, true); htmltext = "30502-01.html"; } else if (hasQuestItems(player, FLAME_CHARM)) { if (getQuestItemsCount(player, GRIZZLY_BLOOD) < 3) { htmltext = "30502-02.html"; } else { takeItems(player, -1, FLAME_CHARM, GRIZZLY_BLOOD); giveItems(player, BLOOD_CAULDRON, 1); st.setCond(8, true); htmltext = "30502-03.html"; } } else if (hasQuestItems(player, BLOOD_CAULDRON)) { htmltext = "30502-04.html"; } else if (hasAtLeastOneQuestItem(player, BOUND_DURKA_SPIRIT, SPIRIT_NET)) { htmltext = "30502-05.html"; } else if (hasQuestItems(player, TOTEM_SPIRIT_BLOOD)) { htmltext = "30502-06.html"; } } break; } case MOIRA: { final int memoState = st.getMemoState(); if (memoState == 100) { st.setMemoState(101); st.setCond(13, true); htmltext = "31979-01.html"; } else if ((memoState >= 101) && (memoState < 108)) { htmltext = "31979-02.html"; } else if (memoState == 110) { giveItems(player, MASK_OF_MEDIUM, 1); final int level = player.getLevel(); if (level >= 20) { addExpAndSp(player, 160267, 11496); } else if (level >= 19) { addExpAndSp(player, 228064, 14845); } else { addExpAndSp(player, 295862, 18194); } giveAdena(player, 81900, true); st.exitQuest(false, true); player.sendPacket(new SocialAction(player.getObjectId(), 3)); st.saveGlobalQuestVar("1ClassQuestFinished", "1"); htmltext = "31979-03.html"; } break; } case DEAD_LEOPARDS_CARCASS: { switch (st.getMemoState()) { case 102: case 103: { htmltext = "32090-01.html"; break; } case 104: { st.setMemoState(105); st.setCond(16, true); htmltext = "32090-03.html"; break; } case 105: { htmltext = "32090-01.html"; break; } case 106: { htmltext = "32090-04.html"; break; } case 107: { htmltext = "32090-07.html"; break; } case 108: { st.setMemoState(109); st.setCond(20, true); htmltext = "32090-08.html"; break; } } break; } case DUDA_MARA_TOTEM_SPIRIT: { if (st.isMemoState(1)) { if (hasQuestItems(player, BLOOD_CAULDRON)) { htmltext = "30593-01.html"; } else if (hasQuestItems(player, SPIRIT_NET) && !hasQuestItems(player, BOUND_DURKA_SPIRIT)) { htmltext = "30593-04.html"; } else if (!hasQuestItems(player, SPIRIT_NET) && hasQuestItems(player, BOUND_DURKA_SPIRIT)) { takeItems(player, BOUND_DURKA_SPIRIT, -1); giveItems(player, TOTEM_SPIRIT_BLOOD, 1); st.setCond(11, true); htmltext = "30593-05.html"; } else if (hasQuestItems(player, TOTEM_SPIRIT_BLOOD)) { htmltext = "30593-06.html"; } } break; } case HESTUI_TOTEM_SPIRIT: { if (st.isMemoState(1)) { if (hasQuestItems(player, HESTUI_MASK, SECOND_FIERY_EGG)) { htmltext = "30592-01.html"; } else if (hasQuestItems(player, TOTEM_SPIRIT_CLAW)) { htmltext = "30592-04.html"; } else if (hasAtLeastOneQuestItem(player, GRIZZLY_BLOOD, FLAME_CHARM, BLOOD_CAULDRON, SPIRIT_NET, BOUND_DURKA_SPIRIT, TOTEM_SPIRIT_BLOOD, TATARUS_LETTER)) { htmltext = "30592-05.html"; } } break; } case TOTEM_SPIRIT_OF_GANDI: { switch (st.getMemoState()) { case 101: { htmltext = "32057-01.html"; break; } case 102: { htmltext = "32057-03.html"; break; } case 109: { htmltext = "32057-04.html"; break; } } break; } } } return htmltext; } }