Q00254_LegendaryTales.java 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  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.Q00254_LegendaryTales;
  20. import com.l2jserver.gameserver.enums.QuestSound;
  21. import com.l2jserver.gameserver.model.actor.L2Npc;
  22. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  23. import com.l2jserver.gameserver.model.quest.Quest;
  24. import com.l2jserver.gameserver.model.quest.QuestState;
  25. import com.l2jserver.gameserver.model.quest.State;
  26. /**
  27. * Legendary Tales (254)
  28. * @author nonom
  29. */
  30. public class Q00254_LegendaryTales extends Quest
  31. {
  32. // NPC
  33. private static final int GILMORE = 30754;
  34. // Monsters
  35. public enum Bosses
  36. {
  37. EMERALD_HORN(25718),
  38. DUST_RIDER(25719),
  39. BLEEDING_FLY(25720),
  40. BLACK_DAGGER(25721),
  41. SHADOW_SUMMONER(25722),
  42. SPIKE_SLASHER(25723),
  43. MUSCLE_BOMBER(25724);
  44. private final int _bossId;
  45. private final int _mask;
  46. private Bosses(int bossId)
  47. {
  48. _bossId = bossId;
  49. _mask = 1 << ordinal();
  50. }
  51. public int getId()
  52. {
  53. return _bossId;
  54. }
  55. public int getMask()
  56. {
  57. return _mask;
  58. }
  59. public static Bosses valueOf(int npcId)
  60. {
  61. for (Bosses val : values())
  62. {
  63. if (val.getId() == npcId)
  64. {
  65. return val;
  66. }
  67. }
  68. return null;
  69. }
  70. }
  71. // @formatter:off
  72. private static final int[] MONSTERS =
  73. {
  74. Bosses.EMERALD_HORN.getId(), Bosses.DUST_RIDER.getId(), Bosses.BLEEDING_FLY.getId(),
  75. Bosses.BLACK_DAGGER.getId(), Bosses.SHADOW_SUMMONER.getId(), Bosses.SPIKE_SLASHER.getId(),
  76. Bosses.MUSCLE_BOMBER.getId()
  77. };
  78. // @formatter:on
  79. // Items
  80. private static final int LARGE_DRAGON_SKULL = 17249;
  81. // Misc
  82. private static final int MIN_LEVEL = 80;
  83. public Q00254_LegendaryTales()
  84. {
  85. super(254, Q00254_LegendaryTales.class.getSimpleName(), "Legendary Tales");
  86. addStartNpc(GILMORE);
  87. addTalkId(GILMORE);
  88. addKillId(MONSTERS);
  89. registerQuestItems(LARGE_DRAGON_SKULL);
  90. }
  91. @Override
  92. public String onTalk(L2Npc npc, L2PcInstance player)
  93. {
  94. String htmltext = getNoQuestMsg(player);
  95. final QuestState st = getQuestState(player, true);
  96. if (st == null)
  97. {
  98. return htmltext;
  99. }
  100. switch (st.getState())
  101. {
  102. case State.CREATED:
  103. htmltext = (player.getLevel() < MIN_LEVEL) ? "30754-00.htm" : "30754-01.htm";
  104. break;
  105. case State.STARTED:
  106. long count = getQuestItemsCount(player, LARGE_DRAGON_SKULL);
  107. if (st.isCond(1))
  108. {
  109. htmltext = ((count > 0) ? "30754-14.htm" : "30754-06.html");
  110. }
  111. else if (st.isCond(2))
  112. {
  113. htmltext = ((count < 7) ? "30754-12.htm" : "30754-07.html");
  114. }
  115. break;
  116. case State.COMPLETED:
  117. htmltext = "30754-29.html";
  118. break;
  119. }
  120. return htmltext;
  121. }
  122. @Override
  123. public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  124. {
  125. String htmltext = getNoQuestMsg(player);
  126. final QuestState st = getQuestState(player, false);
  127. if (st == null)
  128. {
  129. return htmltext;
  130. }
  131. switch (event)
  132. {
  133. case "30754-05.html":
  134. st.startQuest();
  135. case "30754-02.html":
  136. case "30754-03.html":
  137. case "30754-04.htm":
  138. case "30754-08.html":
  139. case "30754-15.html":
  140. case "30754-20.html":
  141. case "30754-21.html":
  142. htmltext = event;
  143. break;
  144. case "25718": // Emerald Horn
  145. htmltext = (checkMask(st, Bosses.EMERALD_HORN) ? "30754-22.html" : "30754-16.html");
  146. break;
  147. case "25719": // Dust Rider
  148. htmltext = (checkMask(st, Bosses.DUST_RIDER) ? "30754-23.html" : "30754-17.html");
  149. break;
  150. case "25720": // Bleeding Fly
  151. htmltext = (checkMask(st, Bosses.BLEEDING_FLY) ? "30754-24.html" : "30754-18.html");
  152. break;
  153. case "25721": // Black Dagger Wing
  154. htmltext = (checkMask(st, Bosses.BLACK_DAGGER) ? "30754-25.html" : "30754-19.html");
  155. break;
  156. case "25722": // Shadow Summoner
  157. htmltext = (checkMask(st, Bosses.SHADOW_SUMMONER) ? "30754-26.html" : "30754-16.html");
  158. break;
  159. case "25723": // Spike Slasher
  160. htmltext = (checkMask(st, Bosses.SPIKE_SLASHER) ? "30754-27.html" : "30754-17.html");
  161. break;
  162. case "25724": // Muscle Bomber
  163. htmltext = (checkMask(st, Bosses.MUSCLE_BOMBER) ? "30754-28.html" : "30754-18.html");
  164. break;
  165. case "13467": // Vesper Thrower
  166. case "13466": // Vesper Singer
  167. case "13465": // Vesper Caster
  168. case "13464": // Vesper Retributer
  169. case "13463": // Vesper Avenger
  170. case "13457": // Vesper Cutter
  171. case "13458": // Vesper Slasher
  172. case "13459": // Vesper Buster
  173. case "13460": // Vesper Sharper
  174. case "13461": // Vesper Fighter
  175. case "13462": // Vesper Stormer
  176. if (st.isCond(2) && (getQuestItemsCount(player, LARGE_DRAGON_SKULL) >= 7))
  177. {
  178. htmltext = "30754-09.html";
  179. rewardItems(player, Integer.parseInt(event), 1);
  180. st.exitQuest(false, true);
  181. }
  182. break;
  183. }
  184. return htmltext;
  185. }
  186. @Override
  187. public String onKill(L2Npc npc, L2PcInstance player, boolean isPet)
  188. {
  189. if (player.isInParty())
  190. {
  191. for (L2PcInstance partyMember : player.getParty().getMembers())
  192. {
  193. actionForEachPlayer(partyMember, npc, false);
  194. }
  195. }
  196. else
  197. {
  198. actionForEachPlayer(player, npc, false);
  199. }
  200. return super.onKill(npc, player, isPet);
  201. }
  202. @Override
  203. public void actionForEachPlayer(L2PcInstance player, L2Npc npc, boolean isSummon)
  204. {
  205. final QuestState st = player.getQuestState(Q00254_LegendaryTales.class.getSimpleName());
  206. if ((st != null) && st.isCond(1))
  207. {
  208. int raids = st.getInt("raids");
  209. Bosses boss = Bosses.valueOf(npc.getId());
  210. if (!checkMask(st, boss))
  211. {
  212. st.set("raids", raids | boss.getMask());
  213. st.giveItems(LARGE_DRAGON_SKULL, 1);
  214. if (st.getQuestItemsCount(LARGE_DRAGON_SKULL) < 7)
  215. {
  216. st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
  217. }
  218. else
  219. {
  220. st.setCond(2, true);
  221. }
  222. }
  223. }
  224. }
  225. private static boolean checkMask(QuestState qs, Bosses boss)
  226. {
  227. int pos = boss.getMask();
  228. return ((qs.getInt("raids") & pos) == pos);
  229. }
  230. }