Q00692_HowtoOpposeEvil.java 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. /*
  2. * Copyright (C) 2004-2015 L2J DataPack
  3. *
  4. * This file is part of L2J DataPack.
  5. *
  6. * L2J DataPack is free software: you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation, either version 3 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * L2J DataPack is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  18. */
  19. package quests.Q00692_HowtoOpposeEvil;
  20. import java.util.HashMap;
  21. import java.util.Map;
  22. import com.l2jserver.Config;
  23. import com.l2jserver.gameserver.enums.QuestSound;
  24. import com.l2jserver.gameserver.model.actor.L2Npc;
  25. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  26. import com.l2jserver.gameserver.model.holders.ItemHolder;
  27. import com.l2jserver.gameserver.model.quest.Quest;
  28. import com.l2jserver.gameserver.model.quest.QuestState;
  29. /**
  30. * How to Oppose Evil (692)
  31. * @author Gigiikun
  32. */
  33. public final class Q00692_HowtoOpposeEvil extends Quest
  34. {
  35. private static final int DILIOS = 32549;
  36. private static final int KIRKLAN = 32550;
  37. private static final int LEKONS_CERTIFICATE = 13857;
  38. private static final int[] QUEST_ITEMS =
  39. {
  40. 13863,
  41. 13864,
  42. 13865,
  43. 13866,
  44. 13867,
  45. 15535,
  46. 15536
  47. };
  48. private static final Map<Integer, ItemHolder> QUEST_MOBS = new HashMap<>();
  49. static
  50. {
  51. // Seed of Infinity
  52. QUEST_MOBS.put(22509, new ItemHolder(13863, 500));
  53. QUEST_MOBS.put(22510, new ItemHolder(13863, 500));
  54. QUEST_MOBS.put(22511, new ItemHolder(13863, 500));
  55. QUEST_MOBS.put(22512, new ItemHolder(13863, 500));
  56. QUEST_MOBS.put(22513, new ItemHolder(13863, 500));
  57. QUEST_MOBS.put(22514, new ItemHolder(13863, 500));
  58. QUEST_MOBS.put(22515, new ItemHolder(13863, 500));
  59. // Seed of Destruction
  60. QUEST_MOBS.put(22537, new ItemHolder(13865, 250));
  61. QUEST_MOBS.put(22538, new ItemHolder(13865, 250));
  62. QUEST_MOBS.put(22539, new ItemHolder(13865, 250));
  63. QUEST_MOBS.put(22540, new ItemHolder(13865, 250));
  64. QUEST_MOBS.put(22541, new ItemHolder(13865, 250));
  65. QUEST_MOBS.put(22542, new ItemHolder(13865, 250));
  66. QUEST_MOBS.put(22543, new ItemHolder(13865, 250));
  67. QUEST_MOBS.put(22544, new ItemHolder(13865, 250));
  68. QUEST_MOBS.put(22546, new ItemHolder(13865, 250));
  69. QUEST_MOBS.put(22547, new ItemHolder(13865, 250));
  70. QUEST_MOBS.put(22548, new ItemHolder(13865, 250));
  71. QUEST_MOBS.put(22549, new ItemHolder(13865, 250));
  72. QUEST_MOBS.put(22550, new ItemHolder(13865, 250));
  73. QUEST_MOBS.put(22551, new ItemHolder(13865, 250));
  74. QUEST_MOBS.put(22552, new ItemHolder(13865, 250));
  75. QUEST_MOBS.put(22593, new ItemHolder(13865, 250));
  76. QUEST_MOBS.put(22596, new ItemHolder(13865, 250));
  77. QUEST_MOBS.put(22597, new ItemHolder(13865, 250));
  78. // Seed of Annihilation
  79. QUEST_MOBS.put(22746, new ItemHolder(15536, 125));
  80. QUEST_MOBS.put(22747, new ItemHolder(15536, 125));
  81. QUEST_MOBS.put(22748, new ItemHolder(15536, 125));
  82. QUEST_MOBS.put(22749, new ItemHolder(15536, 125));
  83. QUEST_MOBS.put(22750, new ItemHolder(15536, 125));
  84. QUEST_MOBS.put(22751, new ItemHolder(15536, 125));
  85. QUEST_MOBS.put(22752, new ItemHolder(15536, 125));
  86. QUEST_MOBS.put(22753, new ItemHolder(15536, 125));
  87. QUEST_MOBS.put(22754, new ItemHolder(15536, 125));
  88. QUEST_MOBS.put(22755, new ItemHolder(15536, 125));
  89. QUEST_MOBS.put(22756, new ItemHolder(15536, 125));
  90. QUEST_MOBS.put(22757, new ItemHolder(15536, 125));
  91. QUEST_MOBS.put(22758, new ItemHolder(15536, 125));
  92. QUEST_MOBS.put(22759, new ItemHolder(15536, 125));
  93. QUEST_MOBS.put(22760, new ItemHolder(15536, 125));
  94. QUEST_MOBS.put(22761, new ItemHolder(15536, 125));
  95. QUEST_MOBS.put(22762, new ItemHolder(15536, 125));
  96. QUEST_MOBS.put(22763, new ItemHolder(15536, 125));
  97. QUEST_MOBS.put(22764, new ItemHolder(15536, 125));
  98. QUEST_MOBS.put(22765, new ItemHolder(15536, 125));
  99. }
  100. public Q00692_HowtoOpposeEvil()
  101. {
  102. super(692, Q00692_HowtoOpposeEvil.class.getSimpleName(), "How to Oppose Evil");
  103. addStartNpc(DILIOS);
  104. addTalkId(DILIOS, KIRKLAN);
  105. addKillId(QUEST_MOBS.keySet());
  106. }
  107. @Override
  108. public final String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  109. {
  110. QuestState st = getQuestState(player, false);
  111. if (st == null)
  112. {
  113. return getNoQuestMsg(player);
  114. }
  115. if (event.equalsIgnoreCase("32549-03.htm"))
  116. {
  117. st.startQuest();
  118. }
  119. else if (event.equalsIgnoreCase("32550-04.htm"))
  120. {
  121. st.setCond(3);
  122. }
  123. else if (event.equalsIgnoreCase("32550-07.htm"))
  124. {
  125. if (!giveReward(st, 13863, 5, 13796, 1))
  126. {
  127. return "32550-08.htm";
  128. }
  129. }
  130. else if (event.equalsIgnoreCase("32550-09.htm"))
  131. {
  132. if (!giveReward(st, 13798, 1, 57, 5000))
  133. {
  134. return "32550-10.htm";
  135. }
  136. }
  137. else if (event.equalsIgnoreCase("32550-12.htm"))
  138. {
  139. if (!giveReward(st, 13865, 5, 13841, 1))
  140. {
  141. return "32550-13.htm";
  142. }
  143. }
  144. else if (event.equalsIgnoreCase("32550-14.htm"))
  145. {
  146. if (!giveReward(st, 13867, 1, 57, 5000))
  147. {
  148. return "32550-15.htm";
  149. }
  150. }
  151. else if (event.equalsIgnoreCase("32550-17.htm"))
  152. {
  153. if (!giveReward(st, 15536, 5, 15486, 1))
  154. {
  155. return "32550-18.htm";
  156. }
  157. }
  158. else if (event.equalsIgnoreCase("32550-19.htm"))
  159. {
  160. if (!giveReward(st, 15535, 1, 57, 5000))
  161. {
  162. return "32550-20.htm";
  163. }
  164. }
  165. return event;
  166. }
  167. @Override
  168. public final String onKill(L2Npc npc, L2PcInstance player, boolean isSummon)
  169. {
  170. final L2PcInstance partyMember = getRandomPartyMember(player, 3);
  171. if (partyMember == null)
  172. {
  173. return null;
  174. }
  175. final QuestState st = getQuestState(partyMember, false);
  176. final int npcId = npc.getId();
  177. if ((st != null) && QUEST_MOBS.containsKey(npcId))
  178. {
  179. int chance = (int) (QUEST_MOBS.get(npcId).getCount() * Config.RATE_QUEST_DROP);
  180. int numItems = chance / 1000;
  181. chance = chance % 1000;
  182. if (getRandom(1000) < chance)
  183. {
  184. numItems++;
  185. }
  186. if (numItems > 0)
  187. {
  188. st.giveItems(QUEST_MOBS.get(npcId).getId(), numItems);
  189. st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
  190. }
  191. }
  192. return null;
  193. }
  194. @Override
  195. public final String onTalk(L2Npc npc, L2PcInstance player)
  196. {
  197. String htmltext = getNoQuestMsg(player);
  198. final QuestState st = getQuestState(player, true);
  199. if (st == null)
  200. {
  201. return htmltext;
  202. }
  203. if (st.isCreated())
  204. {
  205. htmltext = (player.getLevel() >= 75) ? "32549-01.htm" : "32549-00.htm";
  206. }
  207. else
  208. {
  209. if (npc.getId() == DILIOS)
  210. {
  211. if (st.isCond(1) && st.hasQuestItems(LEKONS_CERTIFICATE))
  212. {
  213. htmltext = "32549-04.htm";
  214. st.takeItems(LEKONS_CERTIFICATE, -1);
  215. st.setCond(2);
  216. }
  217. else if (st.isCond(2))
  218. {
  219. htmltext = "32549-05.htm";
  220. }
  221. }
  222. else
  223. {
  224. if (st.isCond(2))
  225. {
  226. htmltext = "32550-01.htm";
  227. }
  228. else if (st.isCond(3))
  229. {
  230. for (int i : QUEST_ITEMS)
  231. {
  232. if (st.getQuestItemsCount(i) > 0)
  233. {
  234. return "32550-05.htm";
  235. }
  236. }
  237. htmltext = "32550-04.htm";
  238. }
  239. }
  240. }
  241. return htmltext;
  242. }
  243. private static final boolean giveReward(QuestState st, int itemId, int minCount, int rewardItemId, long rewardCount)
  244. {
  245. long count = st.getQuestItemsCount(itemId);
  246. if (count < minCount)
  247. {
  248. return false;
  249. }
  250. count = count / minCount;
  251. st.takeItems(itemId, count * minCount);
  252. st.rewardItems(rewardItemId, rewardCount * count);
  253. return true;
  254. }
  255. }