123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461 |
- /*
- * 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 <http://www.gnu.org/licenses/>.
- */
- package quests.Q00327_RecoverTheFarmland;
- 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.ItemHolder;
- import com.l2jserver.gameserver.model.quest.Quest;
- import com.l2jserver.gameserver.model.quest.QuestState;
- /**
- * Recover the Farmland (327).
- * @author GKR
- */
- public final class Q00327_RecoverTheFarmland extends Quest
- {
- // NPCs
- private static final int IRIS = 30034;
- private static final int ASHA = 30313;
- private static final int NESTLE = 30314;
- private static final int LEIKAN = 30382;
- private static final int PIOTUR = 30597;
- private static final int TUREK_ORK_WARLORD = 20495;
- private static final int TUREK_ORK_ARCHER = 20496;
- private static final int TUREK_ORK_SKIRMISHER = 20497;
- private static final int TUREK_ORK_SUPPLIER = 20498;
- private static final int TUREK_ORK_FOOTMAN = 20499;
- private static final int TUREK_ORK_SENTINEL = 20500;
- private static final int TUREK_ORK_SHAMAN = 20501;
-
- // Items
- private static final int TUREK_DOG_TAG = 1846;
- private static final int TUREK_MEDALLION = 1847;
- private static final int LEIKANS_LETTER = 5012;
- private static final int CLAY_URN_FRAGMENT = 1848;
- private static final int BRASS_TRINKET_PIECE = 1849;
- private static final int BRONZE_MIRROR_PIECE = 1850;
- private static final int JADE_NECKLACE_BEAD = 1851;
- private static final int ANCIENT_CLAY_URN = 1852;
- private static final int ANCIENT_BRASS_TIARA = 1853;
- private static final int ANCIENT_BRONZE_MIRROR = 1854;
- private static final int ANCIENT_JADE_NECKLACE = 1855;
- private static final int QUICK_STEP_POTION = 734;
- private static final int SWIFT_ATTACK_POTION = 735;
- private static final int SCROLL_OF_ESCAPE = 736;
- private static final int SCROLL_OF_RESURRECTION = 737;
- private static final int HEALING_POTION = 1061;
- private static final int SOULSHOT_D = 1463;
- private static final int SPIRITSHOT_D = 2510;
-
- // Misc
- private static final int MIN_LVL = 25;
- private static final Map<String, ItemHolder> FRAGMENTS_REWARD_DATA = new HashMap<>(4);
- private static final Map<Integer, Integer> FRAGMENTS_DROP_PROB = new HashMap<>(7);
- private static final ItemHolder[] FULL_REWARD_DATA =
- {
- new ItemHolder(ANCIENT_CLAY_URN, 2766),
- new ItemHolder(ANCIENT_BRASS_TIARA, 3227),
- new ItemHolder(ANCIENT_BRONZE_MIRROR, 3227),
- new ItemHolder(ANCIENT_JADE_NECKLACE, 3919)
- };
-
- static
- {
- FRAGMENTS_REWARD_DATA.put("30034-03.html", new ItemHolder(CLAY_URN_FRAGMENT, 307));
- FRAGMENTS_REWARD_DATA.put("30034-04.html", new ItemHolder(BRASS_TRINKET_PIECE, 368));
- FRAGMENTS_REWARD_DATA.put("30034-05.html", new ItemHolder(BRONZE_MIRROR_PIECE, 368));
- FRAGMENTS_REWARD_DATA.put("30034-06.html", new ItemHolder(JADE_NECKLACE_BEAD, 430));
-
- FRAGMENTS_DROP_PROB.put(TUREK_ORK_ARCHER, 21);
- FRAGMENTS_DROP_PROB.put(TUREK_ORK_FOOTMAN, 19);
- FRAGMENTS_DROP_PROB.put(TUREK_ORK_SENTINEL, 18);
- FRAGMENTS_DROP_PROB.put(TUREK_ORK_SHAMAN, 22);
- FRAGMENTS_DROP_PROB.put(TUREK_ORK_SKIRMISHER, 21);
- FRAGMENTS_DROP_PROB.put(TUREK_ORK_SUPPLIER, 20);
- FRAGMENTS_DROP_PROB.put(TUREK_ORK_WARLORD, 26);
- }
-
- public Q00327_RecoverTheFarmland()
- {
- super(327, Q00327_RecoverTheFarmland.class.getSimpleName(), "Recover the Farmland");
- addStartNpc(LEIKAN, PIOTUR);
- addTalkId(LEIKAN, PIOTUR, IRIS, ASHA, NESTLE);
- addKillId(TUREK_ORK_WARLORD, TUREK_ORK_ARCHER, TUREK_ORK_SKIRMISHER, TUREK_ORK_SUPPLIER, TUREK_ORK_FOOTMAN, TUREK_ORK_SENTINEL, TUREK_ORK_SHAMAN);
- registerQuestItems(TUREK_DOG_TAG, TUREK_MEDALLION, LEIKANS_LETTER);
- }
-
- @Override
- public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
- {
- final QuestState st = getQuestState(player, false);
- if (st == null)
- {
- return null;
- }
-
- String html = null;
-
- switch (event)
- {
- case "30034-01.html":
- case "30313-01.html":
- case "30314-02.html":
- case "30314-08.html":
- case "30314-09.html":
- case "30382-05a.html":
- case "30382-05b.html":
- case "30597-03.html":
- case "30597-07.html":
- {
- html = event;
- break;
- }
- case "30382-03.htm":
- {
- st.startQuest();
- giveItems(player, LEIKANS_LETTER, 1);
- st.setCond(2);
- html = event;
- break;
- }
- case "30597-03.htm":
- {
- st.startQuest();
- html = event;
- break;
- }
- case "30597-06.html":
- {
- st.exitQuest(true, true);
- html = event;
- break;
- }
- case "30034-03.html":
- case "30034-04.html":
- case "30034-05.html":
- case "30034-06.html":
- {
- final ItemHolder item = FRAGMENTS_REWARD_DATA.get(event);
- if (!hasQuestItems(player, item.getId()))
- {
- html = "30034-02.html";
- }
- else
- {
- addExpAndSp(player, getQuestItemsCount(player, item.getId()) * item.getCount(), 0);
- takeItems(player, item.getId(), -1);
- playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
- html = event;
- }
- break;
- }
- case "30034-07.html":
- {
- boolean rewarded = false;
- for (ItemHolder it : FULL_REWARD_DATA)
- {
- if (hasQuestItems(player, it.getId()))
- {
- addExpAndSp(player, getQuestItemsCount(player, it.getId()) * it.getCount(), 0);
- takeItems(player, it.getId(), -1);
- playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
- rewarded = true;
- }
- }
- html = rewarded ? event : "30034-02.html";
- break;
- }
- case "30313-03.html":
- {
- if (getQuestItemsCount(player, CLAY_URN_FRAGMENT) < 5)
- {
- html = "30313-02.html";
- }
- else
- {
- takeItems(player, CLAY_URN_FRAGMENT, 5);
- if (getRandom(6) < 5)
- {
- giveItems(player, ANCIENT_CLAY_URN, 1);
- html = event;
- }
- else
- {
- html = "30313-10.html";
- }
- }
- break;
- }
- case "30313-05.html":
- {
- if (getQuestItemsCount(player, BRASS_TRINKET_PIECE) < 5)
- {
- html = "30313-04.html";
- }
- else
- {
- takeItems(player, BRASS_TRINKET_PIECE, 5);
- if (getRandom(7) < 6)
- {
- giveItems(player, ANCIENT_BRASS_TIARA, 1);
- html = event;
- }
- else
- {
- html = "30313-10.html";
- }
- }
- break;
- }
- case "30313-07.html":
- {
- if (getQuestItemsCount(player, BRONZE_MIRROR_PIECE) < 5)
- {
- html = "30313-06.html";
- }
- else
- {
- takeItems(player, BRONZE_MIRROR_PIECE, 5);
- if (getRandom(7) < 6)
- {
- giveItems(player, ANCIENT_BRONZE_MIRROR, 1);
- html = event;
- }
- else
- {
- html = "30313-10.html";
- }
- }
- break;
- }
- case "30313-09.html":
- {
- if (getQuestItemsCount(player, JADE_NECKLACE_BEAD) < 5)
- {
- html = "30313-08.html";
- }
- else
- {
- takeItems(player, JADE_NECKLACE_BEAD, 5);
- if (getRandom(8) < 7)
- {
- giveItems(player, ANCIENT_JADE_NECKLACE, 1);
- html = event;
- }
- else
- {
- html = "30313-10.html";
- }
- }
- break;
- }
- case "30314-03.html":
- {
- if (!hasQuestItems(player, ANCIENT_CLAY_URN))
- {
- html = "30314-07.html";
- }
- else
- {
- rewardItems(player, SOULSHOT_D, getRandom(70, 110));
- takeItems(player, ANCIENT_CLAY_URN, 1);
- html = event;
- }
- break;
- }
- case "30314-04.html":
- {
- if (!hasQuestItems(player, ANCIENT_BRASS_TIARA))
- {
- html = "30314-07.html";
- }
- else
- {
- final int rnd = getRandom(100);
- if (rnd < 40)
- {
- rewardItems(player, HEALING_POTION, 1);
- }
- else if (rnd < 84)
- {
- rewardItems(player, QUICK_STEP_POTION, 1);
- }
- else
- {
- rewardItems(player, SWIFT_ATTACK_POTION, 1);
- }
- takeItems(player, ANCIENT_BRASS_TIARA, 1);
- html = event;
- }
- break;
- }
- case "30314-05.html":
- {
- if (!hasQuestItems(player, ANCIENT_BRONZE_MIRROR))
- {
- html = "30314-07.html";
- }
- else
- {
- rewardItems(player, (getRandom(100) < 59) ? SCROLL_OF_ESCAPE : SCROLL_OF_RESURRECTION, 1);
- takeItems(player, ANCIENT_BRONZE_MIRROR, 1);
- html = event;
- }
- break;
- }
- case "30314-06.html":
- {
- if (!hasQuestItems(player, ANCIENT_JADE_NECKLACE))
- {
- html = "30314-07.html";
- }
- else
- {
- rewardItems(player, SPIRITSHOT_D, getRandom(50, 90));
- takeItems(player, ANCIENT_JADE_NECKLACE, 1);
- html = event;
- }
- break;
- }
- }
-
- return html;
- }
-
- @Override
- public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
- {
- final QuestState st = getQuestState(killer, false);
- if (st != null)
- {
- if ((npc.getId() == TUREK_ORK_SHAMAN) || (npc.getId() == TUREK_ORK_WARLORD))
- {
- giveItems(killer, TUREK_MEDALLION, 1);
- }
- else
- {
- giveItems(killer, TUREK_DOG_TAG, 1);
- }
-
- if (getRandom(100) < FRAGMENTS_DROP_PROB.get(npc.getId()))
- {
- giveItems(killer, getRandom(CLAY_URN_FRAGMENT, JADE_NECKLACE_BEAD), 1);
- }
- }
- return super.onKill(npc, killer, isSummon);
- }
-
- @Override
- public String onTalk(L2Npc npc, L2PcInstance player)
- {
- final QuestState st = getQuestState(player, true);
- String html = getNoQuestMsg(player);
-
- switch (npc.getId())
- {
- case LEIKAN:
- {
- if (st.isCreated())
- {
- html = ((player.getLevel() >= MIN_LVL) ? "30382-02.htm" : "30382-01.htm");
- }
- else if (st.isStarted())
- {
- if (hasQuestItems(player, LEIKANS_LETTER))
- {
- html = "30382-04.html";
- }
- else
- {
- html = "30382-05.html";
- st.setCond(5, true);
- }
- }
- break;
- }
- case PIOTUR:
- {
- if (st.isCreated())
- {
- html = ((player.getLevel() >= MIN_LVL) ? "30597-02.htm" : "30597-01.htm");
- }
- else if (st.isStarted())
- {
- if (hasQuestItems(player, LEIKANS_LETTER))
- {
- html = "30597-03a.htm";
- takeItems(player, LEIKANS_LETTER, -1);
- st.setCond(3, true);
- }
- else
- {
- if (!hasQuestItems(player, TUREK_DOG_TAG) && !hasQuestItems(player, TUREK_MEDALLION))
- {
- html = "30597-04.html";
- }
- else
- {
- html = "30597-05.html";
- final long dogTags = getQuestItemsCount(player, TUREK_DOG_TAG);
- final long medallions = getQuestItemsCount(player, TUREK_MEDALLION);
- final long rewardCount = (dogTags * 40) + (medallions * 50) + (((dogTags + medallions) >= 10) ? 619 : 0);
- giveAdena(player, rewardCount, true);
- takeItems(player, TUREK_DOG_TAG, -1);
- takeItems(player, TUREK_MEDALLION, -1);
- st.setCond(4, true);
- }
- }
- }
- break;
- }
- case IRIS:
- {
- if (st.isStarted())
- {
- html = "30034-01.html";
- }
- break;
- }
- case ASHA:
- {
- if (st.isStarted())
- {
- html = "30313-01.html";
- }
- break;
- }
- case NESTLE:
- {
- if (st.isStarted())
- {
- html = "30314-01.html";
- }
- break;
- }
- }
-
- return html;
- }
- }
|