diff --git a/src/main/java/com/l2jserver/datapack/quests/Q00214_TrialOfTheScholar/Q00214_TrialOfTheScholar.java b/src/main/java/com/l2jserver/datapack/quests/Q00214_TrialOfTheScholar/Q00214_TrialOfTheScholar.java index 4eefc7cae78eb694b21589d80e1866d735baf348..a8cf71d49e44f171b93e8cb7d75d21e604d79bdd 100644 --- a/src/main/java/com/l2jserver/datapack/quests/Q00214_TrialOfTheScholar/Q00214_TrialOfTheScholar.java +++ b/src/main/java/com/l2jserver/datapack/quests/Q00214_TrialOfTheScholar/Q00214_TrialOfTheScholar.java @@ -22,7 +22,9 @@ import com.l2jserver.gameserver.enums.audio.Sound; 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.QuestItemChanceHolder; import com.l2jserver.gameserver.model.quest.Quest; +import com.l2jserver.gameserver.model.quest.QuestDroplist; import com.l2jserver.gameserver.model.quest.QuestState; import com.l2jserver.gameserver.network.serverpackets.SocialAction; import com.l2jserver.gameserver.util.Util; @@ -47,6 +49,17 @@ public final class Q00214_TrialOfTheScholar extends Quest { private static final int ELDER_CRONOS = 30610; private static final int DRUNKARD_TRIFF = 30611; private static final int ELDER_CASIAN = 30612; + // Monsters + private static final int MONSTER_EYE_DESTROYER = 20068; + private static final int MEDUSA = 20158; + private static final int GHOUL = 20201; + private static final int SHACKLE1 = 20235; + private static final int BREKA_ORC_SHAMAN = 20269; + private static final int SHACKLE2 = 20279; + private static final int FETTERED_SOUL = 20552; + private static final int GRANDIS = 20554; + private static final int ENCHANTED_GARGOYLE = 20567; + private static final int LETO_LIZARDMAN_WARRIOR = 20580; // Items private static final int MIRIENS_1ST_SIGIL = 2675; private static final int MIRIENS_2ND_SIGIL = 2676; @@ -60,7 +73,6 @@ public final class Q00214_TrialOfTheScholar extends Quest { private static final int CRERAS_PAINTING1 = 2684; private static final int CRERAS_PAINTING2 = 2685; private static final int CRERAS_PAINTING3 = 2686; - private static final int BROWN_SCROLL_SCRAP = 2687; private static final int CRYSTAL_OF_PURITY1 = 2688; private static final int HIGH_PRIESTS_SIGIL = 2689; private static final int GRAND_MAGISTER_SIGIL = 2690; @@ -68,9 +80,6 @@ public final class Q00214_TrialOfTheScholar extends Quest { private static final int SYLVAINS_LETTER = 2692; private static final int SYMBOL_OF_SYLVAIN = 2693; private static final int JUREKS_LIST = 2694; - private static final int MONSTER_EYE_DESTROYER_SKIN = 2695; - private static final int SHAMANS_NECKLACE = 2696; - private static final int SHACKLES_SCALP = 2697; private static final int SYMBOL_OF_JUREK = 2698; private static final int CRONOS_LETTER = 2699; private static final int DIETERS_KEY = 2700; @@ -88,25 +97,31 @@ public final class Q00214_TrialOfTheScholar extends Quest { private static final int STRONG_LIGUOR = 2713; private static final int CRYSTAL_OF_PURITY2 = 2714; private static final int CASIANS_LIST = 2715; - private static final int GHOULS_SKIN = 2716; - private static final int MEDUSAS_BLOOD = 2717; - private static final int FETTERED_SOULS_ICHOR = 2718; - private static final int ENCHANTED_GARGOYLES_NAIL = 2719; private static final int SYMBOL_OF_CRONOS = 2720; + private static final QuestItemChanceHolder BROWN_SCROLL_SCRAP = new QuestItemChanceHolder(2687, 5L); + private static final QuestItemChanceHolder MONSTER_EYE_DESTROYER_SKIN = new QuestItemChanceHolder(2695, 5L); + private static final QuestItemChanceHolder SHAMANS_NECKLACE = new QuestItemChanceHolder(2696, 5L); + private static final QuestItemChanceHolder SHACKLES_SCALP = new QuestItemChanceHolder(2697, 2L); + private static final QuestItemChanceHolder GHOULS_SKIN = new QuestItemChanceHolder(2716, 10L); + private static final QuestItemChanceHolder MEDUSAS_BLOOD = new QuestItemChanceHolder(2717, 12L); + private static final QuestItemChanceHolder FETTERED_SOULS_ICHOR = new QuestItemChanceHolder(2718, 5L); + private static final QuestItemChanceHolder ENCHANTED_GARGOYLES_NAIL = new QuestItemChanceHolder(2719, 5L); + // Droplists + private static final QuestDroplist DROPLIST_JUREK = QuestDroplist.builder() + .addSingleDrop(MONSTER_EYE_DESTROYER, MONSTER_EYE_DESTROYER_SKIN) + .addSingleDrop(SHACKLE1, SHACKLES_SCALP) + .addSingleDrop(SHACKLE2, SHACKLES_SCALP) + .addSingleDrop(BREKA_ORC_SHAMAN, SHAMANS_NECKLACE) + .build(); + private static final QuestDroplist DROPLIST_CASIAN = QuestDroplist.builder() + .addSingleDrop(MEDUSA, MEDUSAS_BLOOD) + .addSingleDrop(GHOUL, GHOULS_SKIN) + .addSingleDrop(FETTERED_SOUL, FETTERED_SOULS_ICHOR) + .addSingleDrop(ENCHANTED_GARGOYLE, ENCHANTED_GARGOYLES_NAIL) + .build(); // Reward private static final int MARK_OF_SCHOLAR = 2674; private static final int DIMENSIONAL_DIAMOND = 7562; - // Monsters - private static final int MONSTER_EYE_DESTREOYER = 20068; - private static final int MEDUSA = 20158; - private static final int GHOUL = 20201; - private static final int SHACKLE1 = 20235; - private static final int BREKA_ORC_SHAMAN = 20269; - private static final int SHACKLE2 = 20279; - private static final int FETTERED_SOUL = 20552; - private static final int GRANDIS = 20554; - private static final int ENCHANTED_GARGOYLE = 20567; - private static final int LETO_LIZARDMAN_WARRIOR = 20580; // Misc private static final int MIN_LVL = 35; private static final int LEVEL = 36; @@ -115,8 +130,8 @@ public final class Q00214_TrialOfTheScholar extends Quest { super(214, Q00214_TrialOfTheScholar.class.getSimpleName(), "Trial Of The Scholar"); addStartNpc(MAGISTER_MIRIEN); addTalkId(MAGISTER_MIRIEN, HIGH_PRIEST_SYLVAIN, CAPTAIN_LUCAS, WAREHOUSE_KEEPER_VALKON, MAGISTER_DIETER, GRAND_MAGISTER_JUREK, TRADER_EDROC, WAREHOUSE_KEEPER_RAUT, BLACKSMITH_POITAN, MARIA, ASTROLOGER_CRETA, ELDER_CRONOS, DRUNKARD_TRIFF, ELDER_CASIAN); - addKillId(MONSTER_EYE_DESTREOYER, MEDUSA, GHOUL, SHACKLE1, BREKA_ORC_SHAMAN, SHACKLE2, FETTERED_SOUL, GRANDIS, ENCHANTED_GARGOYLE, LETO_LIZARDMAN_WARRIOR); - registerQuestItems(MIRIENS_1ST_SIGIL, MIRIENS_2ND_SIGIL, MIRIENS_3RD_SIGIL, MIRIENS_INSTRUCTION, MARIAS_1ST_LETTER, MARIAS_2ND_LETTER, LUCASS_LETTER, LUCILLAS_HANDBAG, CRETAS_1ST_LETTER, CRERAS_PAINTING1, CRERAS_PAINTING1, CRERAS_PAINTING3, BROWN_SCROLL_SCRAP, CRYSTAL_OF_PURITY1, HIGH_PRIESTS_SIGIL, GRAND_MAGISTER_SIGIL, CRONOS_SIGIL, SYLVAINS_LETTER, SYMBOL_OF_SYLVAIN, JUREKS_LIST, MONSTER_EYE_DESTROYER_SKIN, SHAMANS_NECKLACE, SHACKLES_SCALP, SYMBOL_OF_JUREK, CRONOS_LETTER, DIETERS_KEY, CRETAS_2ND_LETTER, DIETERS_LETTER, DIETERS_DIARY, RAUTS_LETTER_ENVELOPE, TRIFFS_RING, SCRIPTURE_CHAPTER_1, SCRIPTURE_CHAPTER_2, SCRIPTURE_CHAPTER_3, SCRIPTURE_CHAPTER_4, VALKONS_REQUEST, POITANS_NOTES, STRONG_LIGUOR, CRYSTAL_OF_PURITY2, CASIANS_LIST, GHOULS_SKIN, MEDUSAS_BLOOD, FETTERED_SOULS_ICHOR, ENCHANTED_GARGOYLES_NAIL, SYMBOL_OF_CRONOS); + addKillId(MONSTER_EYE_DESTROYER, MEDUSA, GHOUL, SHACKLE1, BREKA_ORC_SHAMAN, SHACKLE2, FETTERED_SOUL, GRANDIS, ENCHANTED_GARGOYLE, LETO_LIZARDMAN_WARRIOR); + registerQuestItems(MIRIENS_1ST_SIGIL, MIRIENS_2ND_SIGIL, MIRIENS_3RD_SIGIL, MIRIENS_INSTRUCTION, MARIAS_1ST_LETTER, MARIAS_2ND_LETTER, LUCASS_LETTER, LUCILLAS_HANDBAG, CRETAS_1ST_LETTER, CRERAS_PAINTING1, CRERAS_PAINTING1, CRERAS_PAINTING3, BROWN_SCROLL_SCRAP.getId(), CRYSTAL_OF_PURITY1, HIGH_PRIESTS_SIGIL, GRAND_MAGISTER_SIGIL, CRONOS_SIGIL, SYLVAINS_LETTER, SYMBOL_OF_SYLVAIN, JUREKS_LIST, MONSTER_EYE_DESTROYER_SKIN.getId(), SHAMANS_NECKLACE.getId(), SHACKLES_SCALP.getId(), SYMBOL_OF_JUREK, CRONOS_LETTER, DIETERS_KEY, CRETAS_2ND_LETTER, DIETERS_LETTER, DIETERS_DIARY, RAUTS_LETTER_ENVELOPE, TRIFFS_RING, SCRIPTURE_CHAPTER_1, SCRIPTURE_CHAPTER_2, SCRIPTURE_CHAPTER_3, SCRIPTURE_CHAPTER_4, VALKONS_REQUEST, POITANS_NOTES, STRONG_LIGUOR, CRYSTAL_OF_PURITY2, CASIANS_LIST, GHOULS_SKIN.getId(), MEDUSAS_BLOOD.getId(), FETTERED_SOULS_ICHOR.getId(), ENCHANTED_GARGOYLES_NAIL.getId(), SYMBOL_OF_CRONOS); } @Override @@ -274,7 +289,7 @@ public final class Q00214_TrialOfTheScholar extends Quest { case "30608-14.html": { if (hasQuestItems(player, CRERAS_PAINTING3)) { takeItems(player, CRERAS_PAINTING3, 1); - takeItems(player, BROWN_SCROLL_SCRAP, -1); + takeItems(player, BROWN_SCROLL_SCRAP.getId(), -1); giveItems(player, CRYSTAL_OF_PURITY1, 1); qs.setCond(13, true); htmltext = event; @@ -349,10 +364,10 @@ public final class Q00214_TrialOfTheScholar extends Quest { giveItems(player, SCRIPTURE_CHAPTER_4, 1); takeItems(player, POITANS_NOTES, 1); takeItems(player, CASIANS_LIST, 1); - takeItems(player, GHOULS_SKIN, -1); - takeItems(player, MEDUSAS_BLOOD, -1); - takeItems(player, FETTERED_SOULS_ICHOR, -1); - takeItems(player, ENCHANTED_GARGOYLES_NAIL, -1); + takeItems(player, GHOULS_SKIN.getId(), -1); + takeItems(player, MEDUSAS_BLOOD.getId(), -1); + takeItems(player, FETTERED_SOULS_ICHOR.getId(), -1); + takeItems(player, ENCHANTED_GARGOYLES_NAIL.getId(), -1); qs.setCond(30, true); htmltext = event; break; @@ -365,102 +380,30 @@ public final class Q00214_TrialOfTheScholar extends Quest { public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon) { final QuestState qs = getQuestState(killer, false); if ((qs != null) && qs.isStarted() && Util.checkIfInRange(1500, npc, killer, true)) { - switch (npc.getId()) { - case MONSTER_EYE_DESTREOYER: { - if (hasQuestItems(killer, MIRIENS_2ND_SIGIL, GRAND_MAGISTER_SIGIL, JUREKS_LIST) && (getQuestItemsCount(killer, MONSTER_EYE_DESTROYER_SKIN) < 5)) { - giveItems(killer, MONSTER_EYE_DESTROYER_SKIN, 1); - if ((getQuestItemsCount(killer, MONSTER_EYE_DESTROYER_SKIN) == 5) && (getQuestItemsCount(killer, SHAMANS_NECKLACE) >= 5) && (getQuestItemsCount(killer, SHACKLES_SCALP) >= 2)) { - qs.setCond(17, true); - } else { - playSound(killer, Sound.ITEMSOUND_QUEST_ITEMGET); - } - } - break; - } - case MEDUSA: { - if (hasQuestItems(killer, TRIFFS_RING, POITANS_NOTES, CASIANS_LIST) && (getQuestItemsCount(killer, MEDUSAS_BLOOD) < 12)) { - giveItems(killer, MEDUSAS_BLOOD, 1); - if (getQuestItemsCount(killer, MEDUSAS_BLOOD) == 12) { + if (DROPLIST_JUREK.get(npc) != null && hasQuestItems(qs.getPlayer(), MIRIENS_2ND_SIGIL, GRAND_MAGISTER_SIGIL, JUREKS_LIST)) { + if (giveItemRandomly(qs.getPlayer(), npc, DROPLIST_JUREK.get(npc), true) + && hasItemsAtLimit(qs.getPlayer(), MONSTER_EYE_DESTROYER_SKIN, SHAMANS_NECKLACE, SHACKLES_SCALP)) { + qs.setCond(17); + } + } else if (DROPLIST_CASIAN.get(npc) != null && hasQuestItems(qs.getPlayer(), TRIFFS_RING, POITANS_NOTES, CASIANS_LIST)) { + if (giveItemRandomly(qs.getPlayer(), npc, DROPLIST_CASIAN.get(npc), true) + && hasItemsAtLimit(qs.getPlayer(), MEDUSAS_BLOOD, GHOULS_SKIN, FETTERED_SOULS_ICHOR, ENCHANTED_GARGOYLES_NAIL)) { + qs.setCond(29); + } + } else { + switch (npc.getId()) { + case GRANDIS -> { + if (hasQuestItems(killer, MIRIENS_3RD_SIGIL, CRONOS_SIGIL, TRIFFS_RING) && !hasQuestItems(killer, SCRIPTURE_CHAPTER_3)) { + giveItems(killer, SCRIPTURE_CHAPTER_3, 1); playSound(killer, Sound.ITEMSOUND_QUEST_MIDDLE); - } else { - playSound(killer, Sound.ITEMSOUND_QUEST_ITEMGET); } } - break; - } - case GHOUL: { - if (hasQuestItems(killer, TRIFFS_RING, POITANS_NOTES, CASIANS_LIST) && (getQuestItemsCount(killer, GHOULS_SKIN) < 10)) { - giveItems(killer, GHOULS_SKIN, 1); - if (getQuestItemsCount(killer, GHOULS_SKIN) == 10) { - qs.setCond(29, true); - } else { - playSound(killer, Sound.ITEMSOUND_QUEST_ITEMGET); + case LETO_LIZARDMAN_WARRIOR -> { + if (hasQuestItems(killer, MIRIENS_1ST_SIGIL, HIGH_PRIESTS_SIGIL, CRERAS_PAINTING3) + && giveItemRandomly(qs.getPlayer(), npc, BROWN_SCROLL_SCRAP, true)) { + qs.setCond(12); } } - break; - } - case SHACKLE1: - case SHACKLE2: { - if (hasQuestItems(killer, MIRIENS_2ND_SIGIL, GRAND_MAGISTER_SIGIL, JUREKS_LIST) && (getQuestItemsCount(killer, SHACKLES_SCALP) < 2)) { - giveItems(killer, SHACKLES_SCALP, 1); - if ((getQuestItemsCount(killer, MONSTER_EYE_DESTROYER_SKIN) >= 5) && (getQuestItemsCount(killer, SHAMANS_NECKLACE) >= 5) && (getQuestItemsCount(killer, SHACKLES_SCALP) == 2)) { - qs.setCond(17, true); - } else { - playSound(killer, Sound.ITEMSOUND_QUEST_ITEMGET); - } - } - break; - } - case BREKA_ORC_SHAMAN: { - if (hasQuestItems(killer, MIRIENS_2ND_SIGIL, GRAND_MAGISTER_SIGIL, JUREKS_LIST) && (getQuestItemsCount(killer, SHAMANS_NECKLACE) < 5)) { - giveItems(killer, SHAMANS_NECKLACE, 1); - if ((getQuestItemsCount(killer, MONSTER_EYE_DESTROYER_SKIN) >= 5) && (getQuestItemsCount(killer, SHAMANS_NECKLACE) == 5) && (getQuestItemsCount(killer, SHACKLES_SCALP) >= 2)) { - qs.setCond(17, true); - } else { - playSound(killer, Sound.ITEMSOUND_QUEST_ITEMGET); - } - } - break; - } - case FETTERED_SOUL: { - if (hasQuestItems(killer, TRIFFS_RING, POITANS_NOTES, CASIANS_LIST) && (getQuestItemsCount(killer, FETTERED_SOULS_ICHOR) < 5)) { - giveItems(killer, FETTERED_SOULS_ICHOR, 1); - if (getQuestItemsCount(killer, FETTERED_SOULS_ICHOR) >= 5) { - playSound(killer, Sound.ITEMSOUND_QUEST_MIDDLE); - } else { - playSound(killer, Sound.ITEMSOUND_QUEST_ITEMGET); - } - } - break; - } - case GRANDIS: { - if (hasQuestItems(killer, MIRIENS_3RD_SIGIL, CRONOS_SIGIL, TRIFFS_RING) && !hasQuestItems(killer, SCRIPTURE_CHAPTER_3)) { - giveItems(killer, SCRIPTURE_CHAPTER_3, 1); - playSound(killer, Sound.ITEMSOUND_QUEST_MIDDLE); - } - break; - } - case ENCHANTED_GARGOYLE: { - if (hasQuestItems(killer, TRIFFS_RING, POITANS_NOTES, CASIANS_LIST) && (getQuestItemsCount(killer, ENCHANTED_GARGOYLES_NAIL) < 5)) { - giveItems(killer, ENCHANTED_GARGOYLES_NAIL, 1); - if (getQuestItemsCount(killer, ENCHANTED_GARGOYLES_NAIL) >= 5) { - playSound(killer, Sound.ITEMSOUND_QUEST_MIDDLE); - } else { - playSound(killer, Sound.ITEMSOUND_QUEST_ITEMGET); - } - } - break; - } - case LETO_LIZARDMAN_WARRIOR: { - if (hasQuestItems(killer, MIRIENS_1ST_SIGIL, HIGH_PRIESTS_SIGIL, CRERAS_PAINTING3) && (getQuestItemsCount(killer, BROWN_SCROLL_SCRAP) < 5)) { - giveItems(killer, BROWN_SCROLL_SCRAP, 1); - if (getQuestItemsCount(killer, BROWN_SCROLL_SCRAP) == 5) { - qs.setCond(12, true); - } else { - playSound(killer, Sound.ITEMSOUND_QUEST_ITEMGET); - } - } - break; } } } @@ -555,7 +498,7 @@ public final class Q00214_TrialOfTheScholar extends Quest { } else if (hasQuestItems(player, CRERAS_PAINTING2)) { htmltext = "30071-03.html"; } else if (hasQuestItems(player, CRERAS_PAINTING3)) { - if (getQuestItemsCount(player, BROWN_SCROLL_SCRAP) < 5) { + if (!hasItemsAtLimit(player, BROWN_SCROLL_SCRAP)) { htmltext = "30071-05.html"; } else { htmltext = "30071-06.html"; @@ -611,14 +554,14 @@ public final class Q00214_TrialOfTheScholar extends Quest { if (!hasAtLeastOneQuestItem(player, GRAND_MAGISTER_SIGIL, SYMBOL_OF_JUREK)) { htmltext = "30115-01.html"; } else if (hasQuestItems(player, JUREKS_LIST)) { - if ((getQuestItemsCount(player, MONSTER_EYE_DESTROYER_SKIN) + getQuestItemsCount(player, SHAMANS_NECKLACE) + getQuestItemsCount(player, SHACKLES_SCALP)) < 12) { + if (!hasItemsAtLimit(qs.getPlayer(), MONSTER_EYE_DESTROYER_SKIN, SHAMANS_NECKLACE, SHACKLES_SCALP)) { htmltext = "30115-04.html"; } else { takeItems(player, GRAND_MAGISTER_SIGIL, 1); takeItems(player, JUREKS_LIST, 1); - takeItems(player, MONSTER_EYE_DESTROYER_SKIN, -1); - takeItems(player, SHAMANS_NECKLACE, -1); - takeItems(player, SHACKLES_SCALP, -1); + takeItems(player, MONSTER_EYE_DESTROYER_SKIN.getId(), -1); + takeItems(player, SHAMANS_NECKLACE.getId(), -1); + takeItems(player, SHACKLES_SCALP.getId(), -1); giveItems(player, SYMBOL_OF_JUREK, 1); qs.setCond(18, true); htmltext = "30115-05.html"; @@ -695,7 +638,7 @@ public final class Q00214_TrialOfTheScholar extends Quest { } else if (hasQuestItems(player, CRERAS_PAINTING2)) { htmltext = "30608-11.html"; } else if (hasQuestItems(player, CRERAS_PAINTING3)) { - if (getQuestItemsCount(player, BROWN_SCROLL_SCRAP) < 5) { + if (!hasItemsAtLimit(player, BROWN_SCROLL_SCRAP)) { qs.setCond(11, true); htmltext = "30608-12.html"; } else { @@ -772,7 +715,7 @@ public final class Q00214_TrialOfTheScholar extends Quest { htmltext = "30612-01.html"; } } else { - if ((getQuestItemsCount(player, GHOULS_SKIN) + getQuestItemsCount(player, MEDUSAS_BLOOD) + getQuestItemsCount(player, FETTERED_SOULS_ICHOR) + getQuestItemsCount(player, ENCHANTED_GARGOYLES_NAIL)) < 32) { + if (!hasItemsAtLimit(player, GHOULS_SKIN, MEDUSAS_BLOOD, FETTERED_SOULS_ICHOR, ENCHANTED_GARGOYLES_NAIL)) { htmltext = "30612-05.html"; } else { htmltext = "30612-06.html"; diff --git a/src/main/java/com/l2jserver/datapack/quests/Q00219_TestimonyOfFate/Q00219_TestimonyOfFate.java b/src/main/java/com/l2jserver/datapack/quests/Q00219_TestimonyOfFate/Q00219_TestimonyOfFate.java index d5f9e7c7dc54607bd86a4e561753a5e08af45199..01b9f5e7a276efc25992d169ca2a543c497c262b 100644 --- a/src/main/java/com/l2jserver/datapack/quests/Q00219_TestimonyOfFate/Q00219_TestimonyOfFate.java +++ b/src/main/java/com/l2jserver/datapack/quests/Q00219_TestimonyOfFate/Q00219_TestimonyOfFate.java @@ -23,7 +23,9 @@ import com.l2jserver.gameserver.enums.Race; import com.l2jserver.gameserver.enums.audio.Sound; import com.l2jserver.gameserver.model.actor.L2Npc; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; +import com.l2jserver.gameserver.model.holders.QuestItemChanceHolder; import com.l2jserver.gameserver.model.quest.Quest; +import com.l2jserver.gameserver.model.quest.QuestDroplist; import com.l2jserver.gameserver.model.quest.QuestState; import com.l2jserver.gameserver.network.serverpackets.SocialAction; import com.l2jserver.gameserver.util.Util; @@ -44,17 +46,27 @@ public final class Q00219_TestimonyOfFate extends Quest { private static final int BROTHER_METHEUS = 30614; private static final int BLOODY_PIXY = 31845; private static final int BLIGHT_TREANT = 31850; + // Monster + private static final int HANGMAN_TREE = 20144; + private static final int MARSH_STAKATO = 20157; + private static final int MEDUSA = 20158; + private static final int TYRANT = 20192; + private static final int TYRANT_KINGPIN = 20193; + private static final int DEAD_SEEKER = 20202; + private static final int MARSH_STAKATO_WORKER = 20230; + private static final int MARSH_STAKATO_SOLDIER = 20232; + private static final int MARSH_SPIDER = 20233; + private static final int MARSH_STAKATO_DRONE = 20234; + private static final int BREKA_ORC_OVERLORD = 20270; + private static final int GRANDIS = 20554; + private static final int LETO_LIZARDMAN_OVERLORD = 20582; + private static final int KARUL_BUGBEAR = 20600; // Items private static final int KAIRAS_LETTER = 3173; private static final int METHEUSS_FUNERAL_JAR = 3174; private static final int KASANDRAS_REMAINS = 3175; private static final int HERBALISM_TEXTBOOK = 3176; private static final int IXIAS_LIST = 3177; - private static final int MEDUSAS_ICHOR = 3178; - private static final int MARSH_SPIDER_FLUIDS = 3179; - private static final int DEAD_SEEKER_DUNG = 3180; - private static final int TYRANTS_BLOOD = 3181; - private static final int NIGHTSHADE_ROOT = 3182; private static final int BELLADONNA = 3183; private static final int ALDERS_SKULL1 = 3184; private static final int ALDERS_SKULL2 = 3185; @@ -75,24 +87,22 @@ public final class Q00219_TestimonyOfFate extends Quest { private static final int BLACK_WILLOW_LEAF = 3200; private static final int BLIGHT_TREANT_SAP = 3201; private static final int ARKENIAS_LETTER = 3202; + private static final QuestItemChanceHolder MEDUSAS_ICHOR = new QuestItemChanceHolder(3178, 10L); + private static final QuestItemChanceHolder MARSH_SPIDER_FLUIDS = new QuestItemChanceHolder(3179, 10L); + private static final QuestItemChanceHolder DEAD_SEEKER_DUNG = new QuestItemChanceHolder(3180, 10L); + private static final QuestItemChanceHolder TYRANTS_BLOOD = new QuestItemChanceHolder(3181, 10L); + private static final QuestItemChanceHolder NIGHTSHADE_ROOT = new QuestItemChanceHolder(3182, 10L); + // Droplist + private static final QuestDroplist DROPLIST = QuestDroplist.builder() + .bulkAddSingleDrop(NIGHTSHADE_ROOT).withNpcs(MARSH_STAKATO, MARSH_STAKATO_WORKER, MARSH_STAKATO_SOLDIER, MARSH_STAKATO_DRONE).withRequiredItems(IXIAS_LIST).build() + .addSingleDrop(MEDUSA, MEDUSAS_ICHOR).withRequiredItems(IXIAS_LIST) + .bulkAddSingleDrop(TYRANTS_BLOOD).withNpcs(TYRANT, TYRANT_KINGPIN).withRequiredItems(IXIAS_LIST).build() + .addSingleDrop(DEAD_SEEKER, DEAD_SEEKER_DUNG).withRequiredItems(IXIAS_LIST) + .addSingleDrop(MARSH_SPIDER, MARSH_SPIDER_FLUIDS).withRequiredItems(IXIAS_LIST) + .build(); // Reward private static final int MARK_OF_FATE = 3172; private static final int DIMENSIONAL_DIAMOND = 7562; - // Monster - private static final int HANGMAN_TREE = 20144; - private static final int MARSH_STAKATO = 20157; - private static final int MEDUSA = 20158; - private static final int TYRANT = 20192; - private static final int TYRANT_KINGPIN = 20193; - private static final int DEAD_SEEKER = 20202; - private static final int MARSH_STAKATO_WORKER = 20230; - private static final int MARSH_STAKATO_SOLDIER = 20232; - private static final int MARSH_SPIDER = 20233; - private static final int MARSH_STAKATO_DRONE = 20234; - private static final int BREKA_ORC_OVERLORD = 20270; - private static final int GRANDIS = 20554; - private static final int LETO_LIZARDMAN_OVERLORD = 20582; - private static final int KARUL_BUGBEAR = 20600; // Quest Monster private static final int BLACK_WILLOW_LURKER = 27079; // Misc @@ -103,7 +113,7 @@ public final class Q00219_TestimonyOfFate extends Quest { addStartNpc(MAGISTER_KAIRA); addTalkId(MAGISTER_KAIRA, MAGISTER_ROA, WAREHOUSE_KEEPER_NORMAN, TETRARCH_THIFIELL, ARKENIA, MASTER_IXIA, ALDERS_SPIRIT, BROTHER_METHEUS, BLOODY_PIXY, BLIGHT_TREANT); addKillId(HANGMAN_TREE, MARSH_STAKATO, MEDUSA, TYRANT, TYRANT_KINGPIN, DEAD_SEEKER, MARSH_STAKATO_WORKER, MARSH_STAKATO_SOLDIER, MARSH_SPIDER, MARSH_STAKATO_DRONE, BREKA_ORC_OVERLORD, GRANDIS, LETO_LIZARDMAN_OVERLORD, KARUL_BUGBEAR, BLACK_WILLOW_LURKER); - registerQuestItems(KAIRAS_LETTER, METHEUSS_FUNERAL_JAR, KASANDRAS_REMAINS, HERBALISM_TEXTBOOK, IXIAS_LIST, MEDUSAS_ICHOR, MARSH_SPIDER_FLUIDS, DEAD_SEEKER_DUNG, TYRANTS_BLOOD, NIGHTSHADE_ROOT, BELLADONNA, ALDERS_SKULL1, ALDERS_SKULL2, ALDERS_RECEIPT, REVELATIONS_MANUSCRIPT, KAIRAS_RECOMMENDATION, KAIRAS_INSTRUCTIONS, PALUS_CHARM, THIFIELLS_LETTER, ARKENIAS_NOTE, PIXY_GARNET, GRANDISS_SKULL, KARUL_BUGBEAR_SKULL, BREKA_OVERLORD_SKULL, LETO_OVERLORD_SKULL, RED_FAIRY_DUST, TIMIRIRAN_SEED, BLACK_WILLOW_LEAF, BLIGHT_TREANT_SAP, ARKENIAS_LETTER); + registerQuestItems(KAIRAS_LETTER, METHEUSS_FUNERAL_JAR, KASANDRAS_REMAINS, HERBALISM_TEXTBOOK, IXIAS_LIST, MEDUSAS_ICHOR.getId(), MARSH_SPIDER_FLUIDS.getId(), DEAD_SEEKER_DUNG.getId(), TYRANTS_BLOOD.getId(), NIGHTSHADE_ROOT.getId(), BELLADONNA, ALDERS_SKULL1, ALDERS_SKULL2, ALDERS_RECEIPT, REVELATIONS_MANUSCRIPT, KAIRAS_RECOMMENDATION, KAIRAS_INSTRUCTIONS, PALUS_CHARM, THIFIELLS_LETTER, ARKENIAS_NOTE, PIXY_GARNET, GRANDISS_SKULL, KARUL_BUGBEAR_SKULL, BREKA_OVERLORD_SKULL, LETO_OVERLORD_SKULL, RED_FAIRY_DUST, TIMIRIRAN_SEED, BLACK_WILLOW_LEAF, BLIGHT_TREANT_SAP, ARKENIAS_LETTER); } @Override @@ -194,136 +204,58 @@ public final class Q00219_TestimonyOfFate extends Quest { @Override public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon) { final QuestState qs = getQuestState(killer, false); - if ((qs != null) && qs.isStarted() && Util.checkIfInRange(1500, npc, killer, true)) { + if ((qs != null) && qs.isStarted() && Util.checkIfInRange(1500, npc, qs.getPlayer(), true)) { + if (DROPLIST.get(npc) != null && hasQuestItems(qs.getPlayer(), DROPLIST.get(npc).requiredItems())) { + if (giveItemRandomly(qs.getPlayer(), npc, DROPLIST.get(npc), true) + && hasItemsAtLimit(qs.getPlayer(), MEDUSAS_ICHOR, MARSH_SPIDER_FLUIDS, DEAD_SEEKER_DUNG, TYRANTS_BLOOD, NIGHTSHADE_ROOT)) { + qs.setCond(7); + } + } switch (npc.getId()) { - case HANGMAN_TREE: { + case HANGMAN_TREE -> { if (hasQuestItems(killer, METHEUSS_FUNERAL_JAR) && !hasQuestItems(killer, KASANDRAS_REMAINS)) { takeItems(killer, METHEUSS_FUNERAL_JAR, 1); giveItems(killer, KASANDRAS_REMAINS, 1); qs.setCond(3, true); } } - case MARSH_STAKATO: - case MARSH_STAKATO_WORKER: - case MARSH_STAKATO_SOLDIER: - case MARSH_STAKATO_DRONE: { - if (hasQuestItems(killer, IXIAS_LIST) && (getQuestItemsCount(killer, NIGHTSHADE_ROOT) < 10)) { - if (getQuestItemsCount(killer, NIGHTSHADE_ROOT) == 9) { - giveItems(killer, NIGHTSHADE_ROOT, 1); - playSound(killer, Sound.ITEMSOUND_QUEST_MIDDLE); - if ((getQuestItemsCount(killer, MEDUSAS_ICHOR) >= 10) && (getQuestItemsCount(killer, MARSH_SPIDER_FLUIDS) >= 10) && (getQuestItemsCount(killer, DEAD_SEEKER_DUNG) >= 10) && (getQuestItemsCount(killer, TYRANTS_BLOOD) >= 10)) { - qs.setCond(7); - } - } else { - giveItems(killer, NIGHTSHADE_ROOT, 1); - playSound(killer, Sound.ITEMSOUND_QUEST_ITEMGET); - } - } - break; - } - case MEDUSA: { - if (hasQuestItems(killer, IXIAS_LIST) && (getQuestItemsCount(killer, MEDUSAS_ICHOR) < 10)) { - if (getQuestItemsCount(killer, MEDUSAS_ICHOR) == 9) { - giveItems(killer, MEDUSAS_ICHOR, 1); - playSound(killer, Sound.ITEMSOUND_QUEST_MIDDLE); - if ((getQuestItemsCount(killer, MARSH_SPIDER_FLUIDS) >= 10) && (getQuestItemsCount(killer, DEAD_SEEKER_DUNG) >= 10) && (getQuestItemsCount(killer, TYRANTS_BLOOD) >= 10) && (getQuestItemsCount(killer, NIGHTSHADE_ROOT) >= 10)) { - qs.setCond(7); - } - } else { - giveItems(killer, MEDUSAS_ICHOR, 1); - playSound(killer, Sound.ITEMSOUND_QUEST_ITEMGET); - } - } - break; - } - case TYRANT: - case TYRANT_KINGPIN: { - if (hasQuestItems(killer, IXIAS_LIST) && (getQuestItemsCount(killer, TYRANTS_BLOOD) < 10)) { - if (getQuestItemsCount(killer, TYRANTS_BLOOD) == 9) { - giveItems(killer, TYRANTS_BLOOD, 1); - playSound(killer, Sound.ITEMSOUND_QUEST_MIDDLE); - if ((getQuestItemsCount(killer, MEDUSAS_ICHOR) >= 10) && (getQuestItemsCount(killer, MARSH_SPIDER_FLUIDS) >= 10) && (getQuestItemsCount(killer, DEAD_SEEKER_DUNG) >= 10) && (getQuestItemsCount(killer, NIGHTSHADE_ROOT) >= 10)) { - qs.setCond(7); - } - } else { - giveItems(killer, TYRANTS_BLOOD, 1); - playSound(killer, Sound.ITEMSOUND_QUEST_ITEMGET); - } - } - break; - } - case DEAD_SEEKER: { - if (hasQuestItems(killer, IXIAS_LIST) && (getQuestItemsCount(killer, DEAD_SEEKER_DUNG) < 10)) { - if (getQuestItemsCount(killer, DEAD_SEEKER_DUNG) == 9) { - giveItems(killer, DEAD_SEEKER_DUNG, 1); - playSound(killer, Sound.ITEMSOUND_QUEST_MIDDLE); - if ((getQuestItemsCount(killer, MEDUSAS_ICHOR) >= 10) && (getQuestItemsCount(killer, MARSH_SPIDER_FLUIDS) >= 10) && (getQuestItemsCount(killer, TYRANTS_BLOOD) >= 10) && (getQuestItemsCount(killer, NIGHTSHADE_ROOT) >= 10)) { - qs.setCond(7); - } - } else { - giveItems(killer, DEAD_SEEKER_DUNG, 1); - playSound(killer, Sound.ITEMSOUND_QUEST_ITEMGET); - } - } - break; - } - case MARSH_SPIDER: { - if (hasQuestItems(killer, IXIAS_LIST) && (getQuestItemsCount(killer, MARSH_SPIDER_FLUIDS) < 10)) { - if (getQuestItemsCount(killer, MARSH_SPIDER_FLUIDS) == 9) { - giveItems(killer, MARSH_SPIDER_FLUIDS, 1); - playSound(killer, Sound.ITEMSOUND_QUEST_MIDDLE); - if ((getQuestItemsCount(killer, MEDUSAS_ICHOR) >= 10) && (getQuestItemsCount(killer, DEAD_SEEKER_DUNG) >= 10) && (getQuestItemsCount(killer, TYRANTS_BLOOD) >= 10) && (getQuestItemsCount(killer, NIGHTSHADE_ROOT) >= 10)) { - qs.setCond(7); - } - } else { - giveItems(killer, MARSH_SPIDER_FLUIDS, 1); - playSound(killer, Sound.ITEMSOUND_QUEST_ITEMGET); - } - } - break; - } - case BREKA_ORC_OVERLORD: { + case BREKA_ORC_OVERLORD -> { if (hasQuestItems(killer, PALUS_CHARM, ARKENIAS_NOTE, PIXY_GARNET) && !hasQuestItems(killer, RED_FAIRY_DUST, BREKA_OVERLORD_SKULL)) { if (!hasQuestItems(killer, BREKA_OVERLORD_SKULL)) { giveItems(killer, BREKA_OVERLORD_SKULL, 1); playSound(killer, Sound.ITEMSOUND_QUEST_MIDDLE); } } - break; } - case GRANDIS: { + case GRANDIS -> { if (hasQuestItems(killer, PALUS_CHARM, ARKENIAS_NOTE, PIXY_GARNET) && !hasQuestItems(killer, RED_FAIRY_DUST, GRANDISS_SKULL)) { if (!hasQuestItems(killer, GRANDISS_SKULL)) { giveItems(killer, GRANDISS_SKULL, 1); playSound(killer, Sound.ITEMSOUND_QUEST_MIDDLE); } } - break; } - case LETO_LIZARDMAN_OVERLORD: { + case LETO_LIZARDMAN_OVERLORD -> { if (hasQuestItems(killer, PALUS_CHARM, ARKENIAS_NOTE, PIXY_GARNET) && !hasQuestItems(killer, RED_FAIRY_DUST, LETO_OVERLORD_SKULL)) { if (!hasQuestItems(killer, LETO_OVERLORD_SKULL)) { giveItems(killer, LETO_OVERLORD_SKULL, 1); playSound(killer, Sound.ITEMSOUND_QUEST_MIDDLE); } } - break; } - case KARUL_BUGBEAR: { + case KARUL_BUGBEAR -> { if (hasQuestItems(killer, PALUS_CHARM, ARKENIAS_NOTE, PIXY_GARNET) && !hasQuestItems(killer, RED_FAIRY_DUST, KARUL_BUGBEAR_SKULL)) { if (!hasQuestItems(killer, KARUL_BUGBEAR_SKULL)) { giveItems(killer, KARUL_BUGBEAR_SKULL, 1); playSound(killer, Sound.ITEMSOUND_QUEST_MIDDLE); } } - break; } - case BLACK_WILLOW_LURKER: { + case BLACK_WILLOW_LURKER -> { if (hasQuestItems(killer, PALUS_CHARM, ARKENIAS_NOTE, TIMIRIRAN_SEED) && !hasQuestItems(killer, BLIGHT_TREANT_SAP, BLACK_WILLOW_LEAF)) { giveItems(killer, BLACK_WILLOW_LEAF, 1); playSound(killer, Sound.ITEMSOUND_QUEST_MIDDLE); } - break; } } } @@ -414,14 +346,13 @@ public final class Q00219_TestimonyOfFate extends Quest { qs.setCond(6, true); htmltext = "30463-01.html"; } else if (hasQuestItems(player, IXIAS_LIST)) { - if ((getQuestItemsCount(player, MEDUSAS_ICHOR) >= 10) && (getQuestItemsCount(player, MARSH_SPIDER_FLUIDS) >= 10) && (getQuestItemsCount(player, DEAD_SEEKER_DUNG) >= 10) && (getQuestItemsCount(player, TYRANTS_BLOOD) >= 10) - && (getQuestItemsCount(player, NIGHTSHADE_ROOT) >= 10)) { + if (hasItemsAtLimit(player, MEDUSAS_ICHOR, MARSH_SPIDER_FLUIDS, DEAD_SEEKER_DUNG, TYRANTS_BLOOD, NIGHTSHADE_ROOT)) { takeItems(player, IXIAS_LIST, 1); - takeItems(player, MEDUSAS_ICHOR, -1); - takeItems(player, MARSH_SPIDER_FLUIDS, -1); - takeItems(player, DEAD_SEEKER_DUNG, -1); - takeItems(player, TYRANTS_BLOOD, -1); - takeItems(player, NIGHTSHADE_ROOT, -1); + takeItems(player, MEDUSAS_ICHOR.getId(), -1); + takeItems(player, MARSH_SPIDER_FLUIDS.getId(), -1); + takeItems(player, DEAD_SEEKER_DUNG.getId(), -1); + takeItems(player, TYRANTS_BLOOD.getId(), -1); + takeItems(player, NIGHTSHADE_ROOT.getId(), -1); giveItems(player, BELLADONNA, 1); qs.setCond(8, true); htmltext = "30463-03.html"; @@ -543,4 +474,4 @@ public final class Q00219_TestimonyOfFate extends Quest { } return htmltext; } -} \ No newline at end of file +} diff --git a/src/main/java/com/l2jserver/datapack/quests/Q00228_TestOfMagus/Q00228_TestOfMagus.java b/src/main/java/com/l2jserver/datapack/quests/Q00228_TestOfMagus/Q00228_TestOfMagus.java index a3b3372ca742ff385bc95062b546c80ce1c31742..c21679bfcfad32847c9cab71c52a5ece5d7cdddc 100644 --- a/src/main/java/com/l2jserver/datapack/quests/Q00228_TestOfMagus/Q00228_TestOfMagus.java +++ b/src/main/java/com/l2jserver/datapack/quests/Q00228_TestOfMagus/Q00228_TestOfMagus.java @@ -25,7 +25,6 @@ import com.l2jserver.gameserver.model.base.ClassId; import com.l2jserver.gameserver.model.holders.QuestItemChanceHolder; import com.l2jserver.gameserver.model.quest.Quest; import com.l2jserver.gameserver.model.quest.QuestDroplist; -import com.l2jserver.gameserver.model.quest.QuestDroplist.QuestDropInfo; import com.l2jserver.gameserver.model.quest.QuestState; import com.l2jserver.gameserver.network.NpcStringId; import com.l2jserver.gameserver.network.clientpackets.Say2; @@ -33,9 +32,6 @@ import com.l2jserver.gameserver.network.serverpackets.NpcSay; import com.l2jserver.gameserver.network.serverpackets.SocialAction; import com.l2jserver.gameserver.util.Util; -import java.util.HashMap; -import java.util.Map; - /** * Test Of Magus (228) * @author ivantotov @@ -92,35 +88,17 @@ public final class Q00228_TestOfMagus extends Quest { private static final QuestItemChanceHolder ENCHANTED_IRON_GOLEM_SCRAP = new QuestItemChanceHolder(2855, 10L); // Droplist private static final QuestDroplist DROPLIST = QuestDroplist.builder() - .addSingleDrop(HARPY, HARPYS_FEATHER) + .addSingleDrop(HARPY, HARPYS_FEATHER).withRequiredItems(SCORE_OF_ELEMENTS, SYLPH_CHARM) .bulkAddSingleDrop(DAZZLING_DROP) - .withNpcs(MARSH_STAKATO, MARSH_STAKATO_WORKER, TOAD_LORD, MARSH_STAKATO_SOLDIER, MARSH_STAKATO_DRONE).build() - .addSingleDrop(WYRM, WYRMS_WINGBONE) - .addSingleDrop(WINDSUS, WINDSUS_MANE) - .addSingleDrop(ENCHANTED_MONSTEREYE, ENCHANTED_MONSTER_EYE_SHELL) - .addSingleDrop(ENCHANTED_STOLEN_GOLEM, ENCHANTED_GOLEM_POWDER) - .addSingleDrop(ENCHANTED_IRON_GOLEM, ENCHANTED_IRON_GOLEM_SCRAP) - .addSingleDrop(GHOST_FIRE, FLAME_CRYSTAL) + .withNpcs(MARSH_STAKATO, MARSH_STAKATO_WORKER, TOAD_LORD, MARSH_STAKATO_SOLDIER, MARSH_STAKATO_DRONE) + .withRequiredItems(SCORE_OF_ELEMENTS, UNDINE_CHARM).build() + .addSingleDrop(WYRM, WYRMS_WINGBONE).withRequiredItems(SCORE_OF_ELEMENTS, SYLPH_CHARM) + .addSingleDrop(WINDSUS, WINDSUS_MANE).withRequiredItems(SCORE_OF_ELEMENTS, SYLPH_CHARM) + .addSingleDrop(ENCHANTED_MONSTEREYE, ENCHANTED_MONSTER_EYE_SHELL).withRequiredItems(SCORE_OF_ELEMENTS, SERPENT_CHARM) + .addSingleDrop(ENCHANTED_STOLEN_GOLEM, ENCHANTED_GOLEM_POWDER).withRequiredItems(SCORE_OF_ELEMENTS, SERPENT_CHARM) + .addSingleDrop(ENCHANTED_IRON_GOLEM, ENCHANTED_IRON_GOLEM_SCRAP).withRequiredItems(SCORE_OF_ELEMENTS, SERPENT_CHARM) + .addSingleDrop(GHOST_FIRE, FLAME_CRYSTAL).withRequiredItems(SCORE_OF_ELEMENTS, SALAMANDER_CHARM) .build(); - private static final int[] SYLPH_REQUIRED_ITEMS = { SCORE_OF_ELEMENTS, SYLPH_CHARM }; - private static final int[] UNDINE_REQUIRED_ITEMS = { SCORE_OF_ELEMENTS, UNDINE_CHARM }; - private static final int[] SERPENT_REQUIRED_ITEMS = { SCORE_OF_ELEMENTS, SERPENT_CHARM }; - private static final int[] SALAMANDER_REQUIRED_ITEMS = { SCORE_OF_ELEMENTS, SALAMANDER_CHARM }; - private static final Map<Integer, int[]> MOBS_REQUIRED_ITEMS = new HashMap<>(); - static { - MOBS_REQUIRED_ITEMS.put(HARPY, SYLPH_REQUIRED_ITEMS); - MOBS_REQUIRED_ITEMS.put(MARSH_STAKATO, UNDINE_REQUIRED_ITEMS); - MOBS_REQUIRED_ITEMS.put(MARSH_STAKATO_WORKER, UNDINE_REQUIRED_ITEMS); - MOBS_REQUIRED_ITEMS.put(TOAD_LORD, UNDINE_REQUIRED_ITEMS); - MOBS_REQUIRED_ITEMS.put(MARSH_STAKATO_SOLDIER, UNDINE_REQUIRED_ITEMS); - MOBS_REQUIRED_ITEMS.put(MARSH_STAKATO_DRONE, UNDINE_REQUIRED_ITEMS); - MOBS_REQUIRED_ITEMS.put(WYRM, SYLPH_REQUIRED_ITEMS); - MOBS_REQUIRED_ITEMS.put(WINDSUS, SYLPH_REQUIRED_ITEMS); - MOBS_REQUIRED_ITEMS.put(ENCHANTED_MONSTEREYE, SERPENT_REQUIRED_ITEMS); - MOBS_REQUIRED_ITEMS.put(ENCHANTED_STOLEN_GOLEM, SERPENT_REQUIRED_ITEMS); - MOBS_REQUIRED_ITEMS.put(ENCHANTED_IRON_GOLEM, SERPENT_REQUIRED_ITEMS); - MOBS_REQUIRED_ITEMS.put(GHOST_FIRE, SALAMANDER_REQUIRED_ITEMS); - } // Reward private static final int MARK_OF_MAGUS = 2840; private static final int DIMENSIONAL_DIAMOND = 7562; @@ -210,9 +188,8 @@ public final class Q00228_TestOfMagus extends Quest { public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon) { final QuestState qs = getQuestState(killer, false); if ((qs != null) && qs.isStarted() && Util.checkIfInRange(1500, npc, qs.getPlayer(), true)) { - QuestDropInfo dropInfo = DROPLIST.get(npc); - if (dropInfo != null && hasQuestItems(qs.getPlayer(), MOBS_REQUIRED_ITEMS.get(npc.getId()))) { - giveItemRandomly(qs.getPlayer(), npc, dropInfo, true); + if (DROPLIST.get(npc) != null && hasQuestItems(qs.getPlayer(), DROPLIST.get(npc).requiredItems())) { + giveItemRandomly(qs.getPlayer(), npc, DROPLIST.get(npc), true); } else { switch (npc.getId()) { case SINGING_FLOWER_PHANTASM -> { diff --git a/src/main/java/com/l2jserver/datapack/quests/Q00412_PathOfTheDarkWizard/Q00412_PathOfTheDarkWizard.java b/src/main/java/com/l2jserver/datapack/quests/Q00412_PathOfTheDarkWizard/Q00412_PathOfTheDarkWizard.java index 7f2508a10161914273f49abc227f158b4ec7f2d3..55025493e972687d3f6d4513ce75b25490c76151 100644 --- a/src/main/java/com/l2jserver/datapack/quests/Q00412_PathOfTheDarkWizard/Q00412_PathOfTheDarkWizard.java +++ b/src/main/java/com/l2jserver/datapack/quests/Q00412_PathOfTheDarkWizard/Q00412_PathOfTheDarkWizard.java @@ -28,8 +28,6 @@ import com.l2jserver.gameserver.model.quest.QuestState; import com.l2jserver.gameserver.network.serverpackets.SocialAction; import com.l2jserver.gameserver.util.Util; -import java.util.Map; - /** * Path Of The Dark Wizard (412) * @author ivantotov @@ -59,16 +57,10 @@ public final class Q00412_PathOfTheDarkWizard extends Quest { private static final QuestItemChanceHolder HEART_OF_LUNACY = new QuestItemChanceHolder(1260, 50.0, 3L); // Droplist private static final QuestDroplist DROPLIST = QuestDroplist.builder() - .addSingleDrop(MARSH_ZOMBIE, FAMILYS_REMAINS) - .bulkAddSingleDrop(KNEE_BONE).withNpcs(MISERY_SKELETON, SKELETON_HUNTER, SKELETON_HUNTER_ARCHER).build() - .addSingleDrop(SKELETON_SCOUT, HEART_OF_LUNACY) + .addSingleDrop(MARSH_ZOMBIE, FAMILYS_REMAINS).withRequiredItems(LUCKY_KEY) + .bulkAddSingleDrop(KNEE_BONE).withNpcs(MISERY_SKELETON, SKELETON_HUNTER, SKELETON_HUNTER_ARCHER).withRequiredItems(CANDLE).build() + .addSingleDrop(SKELETON_SCOUT, HEART_OF_LUNACY).withRequiredItems(HUB_SCENT) .build(); - private static final Map<Integer, Integer> MOBS_REQUIRED_ITEM = Map.of( - MARSH_ZOMBIE, LUCKY_KEY, - MISERY_SKELETON, CANDLE, - SKELETON_HUNTER, CANDLE, - SKELETON_HUNTER_ARCHER, CANDLE, - SKELETON_SCOUT, HUB_SCENT); // Reward private static final int JEWEL_OF_DARKNESS = 1261; // Misc @@ -158,7 +150,7 @@ public final class Q00412_PathOfTheDarkWizard extends Quest { public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon) { final QuestState qs = getQuestState(killer, false); if ((qs != null) && qs.isStarted() && Util.checkIfInRange(1500, npc, qs.getPlayer(), true)) { - if (hasQuestItems(qs.getPlayer(), MOBS_REQUIRED_ITEM.get(npc.getId()))) { + if (hasQuestItems(qs.getPlayer(), DROPLIST.get(npc).requiredItems())) { giveItemRandomly(qs.getPlayer(), npc, DROPLIST.get(npc), true); } } diff --git a/src/main/java/com/l2jserver/datapack/quests/Q00419_GetAPet/Q00419_GetAPet.java b/src/main/java/com/l2jserver/datapack/quests/Q00419_GetAPet/Q00419_GetAPet.java index a9d3b35fd006e38f557f61366ddc3c273f8852c7..d7d7336d59077fe33f4b3736d146f5de1caf83ae 100644 --- a/src/main/java/com/l2jserver/datapack/quests/Q00419_GetAPet/Q00419_GetAPet.java +++ b/src/main/java/com/l2jserver/datapack/quests/Q00419_GetAPet/Q00419_GetAPet.java @@ -18,11 +18,7 @@ */ package com.l2jserver.datapack.quests.Q00419_GetAPet; -import java.util.HashMap; -import java.util.Map; - import com.l2jserver.gameserver.enums.Race; -import com.l2jserver.gameserver.enums.audio.Sound; import com.l2jserver.gameserver.model.actor.L2Npc; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.holders.QuestItemChanceHolder; @@ -31,6 +27,9 @@ import com.l2jserver.gameserver.model.quest.QuestDroplist; import com.l2jserver.gameserver.model.quest.QuestState; import com.l2jserver.gameserver.util.Util; +import java.util.HashMap; +import java.util.Map; + /** * Get A Pet (419) * @author ivantotov @@ -73,40 +72,22 @@ public final class Q00419_GetAPet extends Quest { private static final QuestItemChanceHolder BLOODY_RED_CLAW = new QuestItemChanceHolder(10165, 50L); // Droplist private static final QuestDroplist DROPLIST = QuestDroplist.builder() - .addSingleDrop(LESSER_DARK_HORROR, BLOODY_NAIL, 60.0) - .addSingleDrop(PROWLER, BLOODY_NAIL, 100.0) - .addSingleDrop(GIANT_SPIDER, BLOODY_FANG, 60.0) - .addSingleDrop(DARK_HORROR, BLOODY_NAIL, 75.0) - .addSingleDrop(TALON_SPIDER, BLOODY_FANG, 75.0) - .addSingleDrop(BLADE_SPIDER, BLOODY_FANG, 100.0) - .addSingleDrop(HOOK_SPIDER, BLOODY_CLAW, 75.0) - .addSingleDrop(HUNTER_TARANTULA, BLOODY_TARANTULA_NAIL, 75.0) - .addSingleDrop(CRIMSON_SPIDER, BLOODY_CLAW, 60.0) - .addSingleDrop(PINCER_SPIDER, BLOODY_CLAW, 100.0) - .addSingleDrop(KASHA_SPIDER, BLOODY_KASHA_FANG, 60.0) - .addSingleDrop(KASHA_FANG_SPIDER, BLOODY_KASHA_FANG, 75.0) - .addSingleDrop(KASHA_BLADE_SPIDER, BLOODY_KASHA_FANG, 100.0) - .addSingleDrop(PLUNDER_TARANTULA, BLOODY_TARANTULA_NAIL, 100.0) - .addSingleDrop(CRIMSON_SPIDER2, BLOODY_RED_CLAW, 75.0) + .addSingleDrop(LESSER_DARK_HORROR, BLOODY_NAIL, 60.0).withRequiredItems(ANIMAL_SLAYERS_3RD_LIST) + .addSingleDrop(PROWLER, BLOODY_NAIL, 100.0).withRequiredItems(ANIMAL_SLAYERS_3RD_LIST) + .addSingleDrop(GIANT_SPIDER, BLOODY_FANG, 60.0).withRequiredItems(ANIMAL_SLAYERS_1ST_LIST) + .addSingleDrop(DARK_HORROR, BLOODY_NAIL, 75.0).withRequiredItems(ANIMAL_SLAYERS_3RD_LIST) + .addSingleDrop(TALON_SPIDER, BLOODY_FANG, 75.0).withRequiredItems(ANIMAL_SLAYERS_1ST_LIST) + .addSingleDrop(BLADE_SPIDER, BLOODY_FANG, 100.0).withRequiredItems(ANIMAL_SLAYERS_1ST_LIST) + .addSingleDrop(HOOK_SPIDER, BLOODY_CLAW, 75.0).withRequiredItems(ANIMAL_SLAYERS_2ND_LIST) + .addSingleDrop(HUNTER_TARANTULA, BLOODY_TARANTULA_NAIL, 75.0).withRequiredItems(ANIMAL_SLAYERS_5TH_LIST) + .addSingleDrop(CRIMSON_SPIDER, BLOODY_CLAW, 60.0).withRequiredItems(ANIMAL_SLAYERS_2ND_LIST) + .addSingleDrop(PINCER_SPIDER, BLOODY_CLAW, 100.0).withRequiredItems(ANIMAL_SLAYERS_2ND_LIST) + .addSingleDrop(KASHA_SPIDER, BLOODY_KASHA_FANG, 60.0).withRequiredItems(ANIMAL_SLAYERS_4TH_LIST) + .addSingleDrop(KASHA_FANG_SPIDER, BLOODY_KASHA_FANG, 75.0).withRequiredItems(ANIMAL_SLAYERS_4TH_LIST) + .addSingleDrop(KASHA_BLADE_SPIDER, BLOODY_KASHA_FANG, 100.0).withRequiredItems(ANIMAL_SLAYERS_4TH_LIST) + .addSingleDrop(PLUNDER_TARANTULA, BLOODY_TARANTULA_NAIL, 100.0).withRequiredItems(ANIMAL_SLAYERS_5TH_LIST) + .addSingleDrop(CRIMSON_SPIDER2, BLOODY_RED_CLAW, 75.0).withRequiredItems(ANIMAL_SLAYERS_LIST) .build(); - private static final Map<Integer, Integer> MOBS_REQUIRED_ITEM = new HashMap<>(); - static { - MOBS_REQUIRED_ITEM.put(LESSER_DARK_HORROR, ANIMAL_SLAYERS_3RD_LIST); - MOBS_REQUIRED_ITEM.put(PROWLER, ANIMAL_SLAYERS_3RD_LIST); - MOBS_REQUIRED_ITEM.put(GIANT_SPIDER, ANIMAL_SLAYERS_1ST_LIST); - MOBS_REQUIRED_ITEM.put(DARK_HORROR, ANIMAL_SLAYERS_3RD_LIST); - MOBS_REQUIRED_ITEM.put(TALON_SPIDER, ANIMAL_SLAYERS_1ST_LIST); - MOBS_REQUIRED_ITEM.put(BLADE_SPIDER, ANIMAL_SLAYERS_1ST_LIST); - MOBS_REQUIRED_ITEM.put(HOOK_SPIDER, ANIMAL_SLAYERS_2ND_LIST); - MOBS_REQUIRED_ITEM.put(HUNTER_TARANTULA, ANIMAL_SLAYERS_5TH_LIST); - MOBS_REQUIRED_ITEM.put(CRIMSON_SPIDER, ANIMAL_SLAYERS_2ND_LIST); - MOBS_REQUIRED_ITEM.put(PINCER_SPIDER, ANIMAL_SLAYERS_2ND_LIST); - MOBS_REQUIRED_ITEM.put(KASHA_SPIDER, ANIMAL_SLAYERS_4TH_LIST); - MOBS_REQUIRED_ITEM.put(KASHA_FANG_SPIDER, ANIMAL_SLAYERS_4TH_LIST); - MOBS_REQUIRED_ITEM.put(KASHA_BLADE_SPIDER, ANIMAL_SLAYERS_4TH_LIST); - MOBS_REQUIRED_ITEM.put(PLUNDER_TARANTULA, ANIMAL_SLAYERS_5TH_LIST); - MOBS_REQUIRED_ITEM.put(CRIMSON_SPIDER2, ANIMAL_SLAYERS_LIST); - } // Reward private static final int WOLF_COLLAR = 2375; // Misc @@ -353,7 +334,7 @@ public final class Q00419_GetAPet extends Quest { public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon) { final QuestState qs = getQuestState(killer, false); if ((qs != null) && qs.isStarted() && Util.checkIfInRange(1500, npc, qs.getPlayer(), true)) { - if (hasQuestItems(qs.getPlayer(), MOBS_REQUIRED_ITEM.get(npc.getId()))) { + if (hasQuestItems(qs.getPlayer(), DROPLIST.get(npc).requiredItems())) { giveItemRandomly(qs.getPlayer(), npc, DROPLIST.get(npc), true); } }