Q10289_FadeToBlack.java 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  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.Q10289_FadeToBlack;
  20. import quests.Q10288_SecretMission.Q10288_SecretMission;
  21. import com.l2jserver.gameserver.model.L2Party;
  22. import com.l2jserver.gameserver.model.actor.L2Npc;
  23. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  24. import com.l2jserver.gameserver.model.quest.Quest;
  25. import com.l2jserver.gameserver.model.quest.QuestState;
  26. /**
  27. * Fade to Black (10289)
  28. * @author Plim
  29. */
  30. public class Q10289_FadeToBlack extends Quest
  31. {
  32. // NPC
  33. private static final int GREYMORE = 32757;
  34. // Items
  35. private static final int MARK_OF_SPLENDOR = 15527;
  36. private static final int MARK_OF_DARKNESS = 15528;
  37. // Monster
  38. private static final int ANAYS = 25701;
  39. public Q10289_FadeToBlack()
  40. {
  41. super(10289, Q10289_FadeToBlack.class.getSimpleName(), "Fade to Black");
  42. addStartNpc(GREYMORE);
  43. addTalkId(GREYMORE);
  44. addKillId(ANAYS);
  45. registerQuestItems(MARK_OF_SPLENDOR, MARK_OF_DARKNESS);
  46. }
  47. @Override
  48. public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  49. {
  50. QuestState qs = getQuestState(player, false);
  51. String htmltext = null;
  52. if (qs == null)
  53. {
  54. return htmltext;
  55. }
  56. switch (event)
  57. {
  58. case "32757-02.htm":
  59. htmltext = event;
  60. break;
  61. case "32757-03.htm":
  62. qs.startQuest();
  63. htmltext = event;
  64. break;
  65. case "32757-06.html":
  66. if (qs.isCond(2) && hasQuestItems(player, MARK_OF_DARKNESS))
  67. {
  68. htmltext = "32757-07.html";
  69. }
  70. else if (qs.isCond(3) && hasQuestItems(player, MARK_OF_SPLENDOR))
  71. {
  72. htmltext = "32757-08.html";
  73. }
  74. else
  75. {
  76. htmltext = event;
  77. }
  78. break;
  79. case "11":
  80. case "12":
  81. case "13":
  82. case "14":
  83. case "15":
  84. case "16":
  85. case "17":
  86. case "18":
  87. case "19":
  88. case "20":
  89. case "21":
  90. case "22":
  91. case "23":
  92. case "24":
  93. case "25":
  94. case "26":
  95. case "27":
  96. case "28":
  97. case "29":
  98. case "30":
  99. if (qs.isCond(3) && hasQuestItems(player, MARK_OF_SPLENDOR))
  100. {
  101. // see 32757-08.html for recipe list (all moirai armor 60%)
  102. switch (event)
  103. {
  104. case "11":
  105. rewardItems(player, 15775, 1);
  106. giveAdena(player, 420920, true);
  107. break;
  108. case "12":
  109. rewardItems(player, 15776, 1);
  110. giveAdena(player, 420920, true);
  111. break;
  112. case "13":
  113. rewardItems(player, 15777, 1);
  114. giveAdena(player, 420920, true);
  115. break;
  116. case "14":
  117. rewardItems(player, 15778, 1);
  118. break;
  119. case "15":
  120. rewardItems(player, 15779, 1);
  121. giveAdena(player, 168360, true);
  122. break;
  123. case "16":
  124. rewardItems(player, 15780, 1);
  125. giveAdena(player, 168360, true);
  126. break;
  127. case "17":
  128. rewardItems(player, 15781, 1);
  129. giveAdena(player, 252540, true);
  130. break;
  131. case "18":
  132. rewardItems(player, 15782, 1);
  133. giveAdena(player, 357780, true);
  134. break;
  135. case "19":
  136. rewardItems(player, 15783, 1);
  137. giveAdena(player, 357780, true);
  138. break;
  139. case "20":
  140. rewardItems(player, 15784, 1);
  141. giveAdena(player, 505100, true);
  142. break;
  143. case "21":
  144. rewardItems(player, 15785, 1);
  145. giveAdena(player, 505100, true);
  146. break;
  147. case "22":
  148. rewardItems(player, 15786, 1);
  149. giveAdena(player, 505100, true);
  150. break;
  151. case "23":
  152. rewardItems(player, 15787, 1);
  153. giveAdena(player, 505100, true);
  154. break;
  155. case "24":
  156. rewardItems(player, 15787, 1);
  157. giveAdena(player, 505100, true);
  158. break;
  159. case "25":
  160. rewardItems(player, 15789, 1);
  161. giveAdena(player, 505100, true);
  162. break;
  163. case "26":
  164. rewardItems(player, 15790, 1);
  165. giveAdena(player, 496680, true);
  166. break;
  167. case "27":
  168. rewardItems(player, 15791, 1);
  169. giveAdena(player, 496680, true);
  170. break;
  171. case "28":
  172. rewardItems(player, 15792, 1);
  173. giveAdena(player, 563860, true);
  174. break;
  175. case "29":
  176. rewardItems(player, 15793, 1);
  177. giveAdena(player, 509040, true);
  178. break;
  179. case "30":
  180. rewardItems(player, 15794, 1);
  181. giveAdena(player, 454240, true);
  182. break;
  183. }
  184. long marksOfDarkness = getQuestItemsCount(player, MARK_OF_DARKNESS);
  185. if (marksOfDarkness > 0)
  186. {
  187. addExpAndSp(player, 55983 * marksOfDarkness, 136500 * (int) marksOfDarkness);
  188. }
  189. qs.exitQuest(false, true);
  190. htmltext = "32757-09.html";
  191. }
  192. break;
  193. }
  194. return htmltext;
  195. }
  196. @Override
  197. public String onKill(L2Npc anays, L2PcInstance killer, boolean isSummon)
  198. {
  199. final QuestState qs = getRandomPartyMemberState(killer, -1, 3, anays);
  200. if (qs != null)
  201. {
  202. if (qs.getPlayer().isInParty())
  203. {
  204. // if player is in party, reward all members
  205. final L2Party party = qs.getPlayer().getParty();
  206. final int rnd = getRandom(party.getMemberCount());
  207. int idx = 0;
  208. for (L2PcInstance member : party.getMembers())
  209. {
  210. // only one lucky player will get the good item, the rest will get the bad one
  211. rewardPlayer(getQuestState(member, false), (idx == rnd));
  212. idx++;
  213. }
  214. }
  215. else
  216. {
  217. // if no party, the winner gets it all
  218. rewardPlayer(qs, true);
  219. }
  220. }
  221. return super.onKill(anays, killer, isSummon);
  222. }
  223. @Override
  224. public boolean checkPartyMember(QuestState qs, L2Npc npc)
  225. {
  226. return (qs.getCond() < 3);
  227. }
  228. @Override
  229. public String onTalk(L2Npc npc, L2PcInstance player)
  230. {
  231. final QuestState qs = getQuestState(player, true);
  232. String htmltext = getNoQuestMsg(player);
  233. if (qs == null)
  234. {
  235. return htmltext;
  236. }
  237. if (qs.isCreated())
  238. {
  239. final QuestState q10288 = player.getQuestState(Q10288_SecretMission.class.getSimpleName());
  240. if ((player.getLevel() < 82) || (q10288 == null) || !q10288.isCompleted())
  241. {
  242. htmltext = "32757-00.htm";
  243. }
  244. else
  245. {
  246. htmltext = "32757-01.htm";
  247. }
  248. }
  249. else if (qs.isStarted())
  250. {
  251. switch (qs.getCond())
  252. {
  253. case 1:
  254. htmltext = "32757-04.html";
  255. break;
  256. case 2:
  257. case 3:
  258. htmltext = "32757-05.html";
  259. break;
  260. }
  261. }
  262. else
  263. {
  264. htmltext = "32757-10.html";
  265. }
  266. return htmltext;
  267. }
  268. private static final void rewardPlayer(QuestState qs, boolean isLucky)
  269. {
  270. if ((qs != null) && qs.isCond(1))
  271. {
  272. giveItems(qs.getPlayer(), (isLucky ? MARK_OF_SPLENDOR : MARK_OF_DARKNESS), 1);
  273. qs.setCond(isLucky ? 3 : 2, true);
  274. }
  275. }
  276. }