/* * This program is free software: you can redistribute it &&/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. This program 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 silentium.scripts.quests; import silentium.gameserver.model.actor.L2Npc; import silentium.gameserver.model.actor.instance.L2PcInstance; import silentium.gameserver.model.quest.Quest; import silentium.gameserver.model.quest.QuestState; import silentium.gameserver.scripting.ScriptFile; /** * @author Demon */ public class Q103_SpiritOfCraftsman extends Quest implements ScriptFile { private static final String qn = "Q103_SpiritOfCraftsman"; private static final int KAROYDS_LETTER_ID = 968; private static final int CECKTINONS_VOUCHER1_ID = 969; private static final int CECKTINONS_VOUCHER2_ID = 970; private static final int BONE_FRAGMENT1_ID = 1107; private static final int SOUL_CATCHER_ID = 971; private static final int PRESERVE_OIL_ID = 972; private static final int ZOMBIE_HEAD_ID = 973; private static final int STEELBENDERS_HEAD_ID = 974; private static final int BLOODSABER_ID = 975; public Q103_SpiritOfCraftsman(final int scriptId, final String name, final String dname, final String path) { super(scriptId, name, dname, path); addStartNpc(30307); addTalkId(30307, 30132, 30144); addKillId(20015, 20020, 20455, 20517, 20518); questItemIds = new int[] { KAROYDS_LETTER_ID, CECKTINONS_VOUCHER1_ID, CECKTINONS_VOUCHER2_ID, BONE_FRAGMENT1_ID, SOUL_CATCHER_ID, PRESERVE_OIL_ID, ZOMBIE_HEAD_ID, STEELBENDERS_HEAD_ID }; } public static void onLoad() { new Q103_SpiritOfCraftsman(103, "Q103_SpiritOfCraftsman", "Spirit Of Craftsman", "quests"); } @Override public String onAdvEvent(final String event, final L2Npc npc, final L2PcInstance player) { final String htmltext = event; final QuestState st = player.getQuestState(qn); if (st == null) return htmltext; if (event == "30307-05.htm") { st.giveItems(KAROYDS_LETTER_ID, 1); st.set("cond", "1"); st.setState(QuestState.STARTED); st.playSound("ItemSound.quest_accept"); } return htmltext; } @Override public String onTalk(final L2Npc npc, final L2PcInstance player) { String htmltext = getNoQuestMsg(); final QuestState st = player.getQuestState(qn); final int id = st.getState(); final int npcId = npc.getNpcId(); if (id == QuestState.CREATED) { st.set("cond", "0"); st.set("onlyone", "0"); } if (npcId == 30307 && st.getInt("cond") == 0 && st.getInt("onlyone") == 0) { if (player.getRace().ordinal() != 2) htmltext = "30307-00.htm"; else if (player.getLevel() >= 10) { htmltext = "30307-03.htm"; return htmltext; } else { htmltext = "30307-02.htm"; st.exitQuest(true); } } else if (id == QuestState.STARTED) { if (npcId == 30307 && st.getInt("cond") >= 1 && (st.getQuestItemsCount(KAROYDS_LETTER_ID) >= 1 || st.getQuestItemsCount(CECKTINONS_VOUCHER1_ID) >= 1 || st.getQuestItemsCount(CECKTINONS_VOUCHER2_ID) >= 1)) htmltext = "30307-06.htm"; else if (npcId == 30132 && st.getInt("cond") == 1 && st.getQuestItemsCount(KAROYDS_LETTER_ID) == 1) { htmltext = "30132-01.htm"; st.set("cond", "2"); st.takeItems(KAROYDS_LETTER_ID, 1); st.giveItems(CECKTINONS_VOUCHER1_ID, 1); } else if (npcId == 30132 && st.getInt("cond") >= 2 && (st.getQuestItemsCount(CECKTINONS_VOUCHER1_ID) >= 1 || st.getQuestItemsCount(CECKTINONS_VOUCHER2_ID) >= 1)) htmltext = "30132-02.htm"; else if (npcId == 30144 && st.getInt("cond") == 2 && st.getQuestItemsCount(CECKTINONS_VOUCHER1_ID) >= 1) { htmltext = "30144-01.htm"; st.set("cond", "3"); st.takeItems(CECKTINONS_VOUCHER1_ID, 1); st.giveItems(CECKTINONS_VOUCHER2_ID, 1); } else if (npcId == 30144 && st.getInt("cond") == 3 && st.getQuestItemsCount(CECKTINONS_VOUCHER2_ID) >= 1 && st.getQuestItemsCount(BONE_FRAGMENT1_ID) < 10) htmltext = "30144-02.htm"; else if (npcId == 30144 && st.getInt("cond") == 4 && st.getQuestItemsCount(CECKTINONS_VOUCHER2_ID) == 1 && st.getQuestItemsCount(BONE_FRAGMENT1_ID) >= 10) { htmltext = "30144-03.htm"; st.set("cond", "5"); st.takeItems(CECKTINONS_VOUCHER2_ID, 1); st.takeItems(BONE_FRAGMENT1_ID, 10); st.giveItems(SOUL_CATCHER_ID, 1); } else if (npcId == 30144 && st.getInt("cond") == 5 && st.getQuestItemsCount(SOUL_CATCHER_ID) == 1) htmltext = "30144-04.htm"; else if (npcId == 30132 && st.getInt("cond") == 5 && st.getQuestItemsCount(SOUL_CATCHER_ID) == 1) { htmltext = "30132-03.htm"; st.set("cond", "6"); st.takeItems(SOUL_CATCHER_ID, 1); st.giveItems(PRESERVE_OIL_ID, 1); } else if (npcId == 30132 && st.getInt("cond") == 6 && st.getQuestItemsCount(PRESERVE_OIL_ID) == 1 && st.getQuestItemsCount(ZOMBIE_HEAD_ID) == 0 && st.getQuestItemsCount(STEELBENDERS_HEAD_ID) == 0) htmltext = "30132-04.htm"; else if (npcId == 30132 && st.getInt("cond") == 7 && st.getQuestItemsCount(ZOMBIE_HEAD_ID) == 1) { htmltext = "30132-05.htm"; st.set("cond", "8"); st.takeItems(ZOMBIE_HEAD_ID, 1); st.giveItems(STEELBENDERS_HEAD_ID, 1); } else if (npcId == 30132 && st.getInt("cond") == 8 && st.getQuestItemsCount(STEELBENDERS_HEAD_ID) == 1) htmltext = "30132-06.htm"; else if (npcId == 30307 && st.getInt("cond") == 8 && st.getQuestItemsCount(STEELBENDERS_HEAD_ID) == 1) htmltext = "30307-07.htm"; st.takeItems(STEELBENDERS_HEAD_ID, 1); st.giveItems(BLOODSABER_ID, 1); st.set("cond", "0"); st.setState(QuestState.COMPLETED); st.playSound("ItemSound.quest_finish"); st.set("onlyone", "1"); } else if (npcId == 30307 && st.getInt("cond") == 0 && st.getInt("onlyone") == 1) htmltext = "<html><body>This quest has already been completed.</body></html>"; return htmltext; } @Override public String onKill(final L2Npc npc, final L2PcInstance player, final boolean isPet) { final QuestState st = player.getQuestState(qn); final int npcId = npc.getNpcId(); if (st == null) return null; if (npcId == 20517 || npcId == 20518 || npcId == 20455) { final int bones = st.getQuestItemsCount(BONE_FRAGMENT1_ID); if (st.getQuestItemsCount(CECKTINONS_VOUCHER2_ID) == 1 && bones < 10) { final int chance = 30; if (st.getRandom(100) <= chance) { if (bones < 10) { st.playSound("ItemSound.quest_itemget"); st.giveItems(BONE_FRAGMENT1_ID, 1); } else { st.playSound("ItemSound.quest_middle"); st.set("cond", "4"); } } } } else if (npcId == 20015 || npcId == 20020) { if (st.getQuestItemsCount(PRESERVE_OIL_ID) == 1) { if (st.getRandom(10) < 3) { st.set("cond", "7"); st.giveItems(ZOMBIE_HEAD_ID, 1); st.playSound("ItemSound.quest_middle"); st.takeItems(PRESERVE_OIL_ID, 1); } } } return null; } }