Q10294_SevenSignsToTheMonasteryOfSilence.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450
  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.Q10294_SevenSignsToTheMonasteryOfSilence;
  20. import quests.Q10293_SevenSignsForbiddenBookOfTheElmoreAdenKingdom.Q10293_SevenSignsForbiddenBookOfTheElmoreAdenKingdom;
  21. import com.l2jserver.gameserver.model.actor.L2Npc;
  22. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  23. import com.l2jserver.gameserver.model.holders.SkillHolder;
  24. import com.l2jserver.gameserver.model.quest.Quest;
  25. import com.l2jserver.gameserver.model.quest.QuestState;
  26. /**
  27. * Seven Signs, To the Monastery of Silence (10294)
  28. * @author Adry_85
  29. */
  30. public final class Q10294_SevenSignsToTheMonasteryOfSilence extends Quest
  31. {
  32. // NPCs
  33. private static final int ELCADIA = 32784;
  34. private static final int ELCADIA_INSTANCE = 32787;
  35. private static final int ERIS_EVIL_THOUGHTS = 32792;
  36. private static final int SOLINAS_EVIL_THOUGHTS = 32793;
  37. private static final int JUDE_VAN_ETINA = 32797;
  38. private static final int RELIC_GUARDIAN = 32803;
  39. private static final int RELIC_WATCHER1 = 32804;
  40. private static final int RELIC_WATCHER2 = 32805;
  41. private static final int RELIC_WATCHER3 = 32806;
  42. private static final int RELIC_WATCHER4 = 32807;
  43. private static final int ODD_GLOBE = 32815;
  44. private static final int READING_DESK1 = 32821;
  45. private static final int READING_DESK2 = 32822;
  46. private static final int READING_DESK3 = 32823;
  47. private static final int READING_DESK4 = 32824;
  48. private static final int READING_DESK5 = 32825;
  49. private static final int READING_DESK6 = 32826;
  50. private static final int READING_DESK7 = 32827;
  51. private static final int READING_DESK8 = 32828;
  52. private static final int READING_DESK9 = 32829;
  53. private static final int READING_DESK10 = 32830;
  54. private static final int READING_DESK11 = 32831;
  55. private static final int READING_DESK12 = 32832;
  56. private static final int READING_DESK13 = 32833;
  57. private static final int READING_DESK14 = 32834;
  58. private static final int READING_DESK15 = 32835;
  59. private static final int READING_DESK16 = 32836;
  60. private static final int JUDE_EVIL_THOUGHTS = 32888;
  61. // Monsters
  62. private static final int SOLINA_LAY_BROTHER = 22125;
  63. private static final int GUIDE_SOLINA = 27415;
  64. // Misc
  65. private static final int MIN_LEVEL = 81;
  66. // Buffs
  67. private static final SkillHolder VAMPIRIC_RAGE = new SkillHolder(6727, 1);
  68. private static final SkillHolder RESIST_HOLY = new SkillHolder(6729, 1);
  69. private static final SkillHolder[] MAGE_BUFFS =
  70. {
  71. new SkillHolder(6714, 1), // Wind Walk of Elcadia
  72. new SkillHolder(6721, 1), // Empower of Elcadia
  73. new SkillHolder(6722, 1), // Acumen of Elcadia
  74. new SkillHolder(6717, 1), // Berserker Spirit of Elcadia
  75. };
  76. private static final SkillHolder[] WARRIOR_BUFFS =
  77. {
  78. new SkillHolder(6714, 1), // Wind Walk of Elcadia
  79. new SkillHolder(6715, 1), // Haste of Elcadia
  80. new SkillHolder(6716, 1), // Might of Elcadia
  81. new SkillHolder(6717, 1), // Berserker Spirit of Elcadia
  82. };
  83. public Q10294_SevenSignsToTheMonasteryOfSilence()
  84. {
  85. super(10294, Q10294_SevenSignsToTheMonasteryOfSilence.class.getSimpleName(), "Seven Signs, To the Monastery of Silence");
  86. addFirstTalkId(ELCADIA_INSTANCE);
  87. addStartNpc(ELCADIA, ODD_GLOBE, ELCADIA_INSTANCE, RELIC_GUARDIAN);
  88. addTalkId(ELCADIA, ELCADIA_INSTANCE, ERIS_EVIL_THOUGHTS, RELIC_GUARDIAN, ODD_GLOBE, READING_DESK1, READING_DESK2, READING_DESK3, READING_DESK4, READING_DESK5, READING_DESK6, READING_DESK7, READING_DESK8, READING_DESK9, READING_DESK10, READING_DESK11, READING_DESK12, READING_DESK13, READING_DESK14, READING_DESK15, READING_DESK16, JUDE_VAN_ETINA, SOLINAS_EVIL_THOUGHTS, RELIC_WATCHER1, RELIC_WATCHER2, RELIC_WATCHER3, RELIC_WATCHER4);
  89. }
  90. @Override
  91. public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  92. {
  93. final QuestState qs = getQuestState(player, false);
  94. if (qs == null)
  95. {
  96. return null;
  97. }
  98. String htmltext = null;
  99. switch (event)
  100. {
  101. case "32784-03.htm":
  102. case "32784-04.htm":
  103. {
  104. htmltext = event;
  105. break;
  106. }
  107. case "32784-05.html":
  108. {
  109. qs.startQuest();
  110. htmltext = event;
  111. break;
  112. }
  113. case "32792-02.html":
  114. {
  115. if (qs.isCond(1))
  116. {
  117. htmltext = event;
  118. }
  119. break;
  120. }
  121. case "32792-03.html":
  122. {
  123. if (qs.isCond(1))
  124. {
  125. qs.setCond(2, true);
  126. htmltext = event;
  127. }
  128. break;
  129. }
  130. case "32792-04.html":
  131. case "32792-05.html":
  132. case "32792-06.html":
  133. case "32803-02.html":
  134. case "32803-03.html":
  135. case "32822-02.html":
  136. case "32804-02.html":
  137. case "32804-04.html":
  138. case "32804-06.html":
  139. case "32804-07.html":
  140. case "32804-08.html":
  141. case "32804-09.html":
  142. case "32804-10.html":
  143. case "32805-02.html":
  144. case "32805-04.html":
  145. case "32805-06.html":
  146. case "32805-07.html":
  147. case "32805-08.html":
  148. case "32805-09.html":
  149. case "32805-10.html":
  150. case "32806-02.html":
  151. case "32806-04.html":
  152. case "32806-06.html":
  153. case "32806-07.html":
  154. case "32806-08.html":
  155. case "32806-09.html":
  156. case "32806-10.html":
  157. case "32807-02.html":
  158. case "32807-04.html":
  159. case "32807-06.html":
  160. case "32807-07.html":
  161. case "32807-08.html":
  162. case "32807-09.html":
  163. case "32807-10.html":
  164. {
  165. if (qs.isCond(2))
  166. {
  167. htmltext = event;
  168. }
  169. break;
  170. }
  171. case "32792-08.html":
  172. {
  173. if (qs.isCond(3))
  174. {
  175. qs.unset("good1");
  176. qs.unset("good2");
  177. qs.unset("good3");
  178. qs.unset("good4");
  179. addExpAndSp(player, 25000000, 2500000);
  180. qs.exitQuest(false, true);
  181. htmltext = event;
  182. }
  183. break;
  184. }
  185. case "BUFF":
  186. {
  187. npc.setTarget(player);
  188. if (player.isMageClass())
  189. {
  190. for (SkillHolder skill : MAGE_BUFFS)
  191. {
  192. npc.doSimultaneousCast(skill.getSkill());
  193. }
  194. }
  195. else
  196. {
  197. for (SkillHolder skill : WARRIOR_BUFFS)
  198. {
  199. npc.doSimultaneousCast(skill.getSkill());
  200. }
  201. }
  202. break;
  203. }
  204. case "RIGHT_BOOK1":
  205. {
  206. qs.set("good1", "1");
  207. npc.setDisplayEffect(1);
  208. startQuestTimer("SPAWN_MOBS", 22000, npc, player);
  209. htmltext = "32821-02.html";
  210. if (hasCheckedAllRightBooks(qs))
  211. {
  212. player.showQuestMovie(25);
  213. }
  214. break;
  215. }
  216. case "RIGHT_BOOK2":
  217. {
  218. qs.set("good2", "1");
  219. npc.setDisplayEffect(1);
  220. npc.setTarget(player);
  221. npc.doCast(VAMPIRIC_RAGE.getSkill());
  222. htmltext = "32821-02.html";
  223. if (hasCheckedAllRightBooks(qs))
  224. {
  225. player.showQuestMovie(25);
  226. }
  227. break;
  228. }
  229. case "RIGHT_BOOK3":
  230. {
  231. qs.set("good3", "1");
  232. npc.setDisplayEffect(1);
  233. final L2Npc jude = addSpawn(JUDE_VAN_ETINA, 85783, -253471, -8320, 65, false, 0, false, player.getInstanceId());
  234. jude.setTarget(player);
  235. jude.doCast(RESIST_HOLY.getSkill());
  236. htmltext = "32821-02.html";
  237. if (hasCheckedAllRightBooks(qs))
  238. {
  239. player.showQuestMovie(25);
  240. }
  241. break;
  242. }
  243. case "RIGHT_BOOK4":
  244. {
  245. qs.set("good4", "1");
  246. npc.setDisplayEffect(1);
  247. final L2Npc solina = addSpawn(SOLINAS_EVIL_THOUGHTS, 85793, -247581, -8320, 0, false, 0, false, player.getInstanceId());
  248. solina.setTarget(player);
  249. solina.doCast(RESIST_HOLY.getSkill());
  250. htmltext = "32821-02.html";
  251. if (hasCheckedAllRightBooks(qs))
  252. {
  253. player.showQuestMovie(25);
  254. }
  255. break;
  256. }
  257. case "DONE1":
  258. {
  259. htmltext = ((qs.getInt("good1") == 1) ? "32804-05.html" : "32804-03.html");
  260. break;
  261. }
  262. case "DONE2":
  263. {
  264. htmltext = ((qs.getInt("good2") == 1) ? "32805-05.html" : "32805-03.html");
  265. break;
  266. }
  267. case "DONE3":
  268. {
  269. htmltext = ((qs.getInt("good3") == 1) ? "32806-05.html" : "32806-03.html");
  270. break;
  271. }
  272. case "DONE4":
  273. {
  274. htmltext = ((qs.getInt("good4") == 1) ? "32807-05.html" : "32807-03.html");
  275. break;
  276. }
  277. case "SPAWN_MOBS":
  278. {
  279. addSpawn(JUDE_EVIL_THOUGHTS, 88655, -250591, -8320, 144, false, 0, false, player.getInstanceId());
  280. addSpawn(GUIDE_SOLINA, 88655, -250591, -8320, 144, false, 0, false, player.getInstanceId());
  281. addSpawn(SOLINA_LAY_BROTHER, 88655, -250591, -8320, 144, false, 0, false, player.getInstanceId());
  282. addSpawn(SOLINA_LAY_BROTHER, 88655, -250591, -8320, 144, false, 0, false, player.getInstanceId());
  283. break;
  284. }
  285. }
  286. return htmltext;
  287. }
  288. @Override
  289. public String onFirstTalk(L2Npc npc, L2PcInstance player)
  290. {
  291. return "32787.html";
  292. }
  293. @Override
  294. public String onTalk(L2Npc npc, L2PcInstance player)
  295. {
  296. QuestState qs = getQuestState(player, true);
  297. String htmltext = getNoQuestMsg(player);
  298. switch (npc.getId())
  299. {
  300. case ELCADIA:
  301. {
  302. if (qs.isCompleted())
  303. {
  304. htmltext = "32784-02.html";
  305. }
  306. else if (qs.isCreated())
  307. {
  308. qs = player.getQuestState(Q10293_SevenSignsForbiddenBookOfTheElmoreAdenKingdom.class.getSimpleName());
  309. htmltext = ((player.getLevel() >= MIN_LEVEL) && (qs != null) && (qs.isCompleted())) ? "32784-01.htm" : "32784-07.htm";
  310. }
  311. else if (qs.isStarted())
  312. {
  313. if (qs.isCond(1))
  314. {
  315. htmltext = "32784-06.html";
  316. }
  317. }
  318. break;
  319. }
  320. case ERIS_EVIL_THOUGHTS:
  321. {
  322. switch (qs.getCond())
  323. {
  324. case 1:
  325. {
  326. htmltext = "32792-01.html";
  327. break;
  328. }
  329. case 2:
  330. {
  331. htmltext = "32792-04.html";
  332. break;
  333. }
  334. case 3:
  335. {
  336. htmltext = ((player.isSubClassActive()) ? "32792-09.html" : "32792-07.html");
  337. break;
  338. }
  339. }
  340. break;
  341. }
  342. case RELIC_GUARDIAN:
  343. {
  344. if (qs.isCond(2))
  345. {
  346. if (hasCheckedAllRightBooks(qs))
  347. {
  348. qs.setCond(3, true);
  349. htmltext = "32803-04.html";
  350. }
  351. else
  352. {
  353. htmltext = "32803-01.html";
  354. }
  355. }
  356. else if (qs.isCond(3))
  357. {
  358. htmltext = "32803-05.html";
  359. }
  360. break;
  361. }
  362. case ODD_GLOBE:
  363. {
  364. if (qs.getCond() < 3)
  365. {
  366. htmltext = "32815-01.html";
  367. }
  368. break;
  369. }
  370. case ELCADIA_INSTANCE:
  371. {
  372. if (qs.isCond(1))
  373. {
  374. htmltext = "32787-01.html";
  375. }
  376. else if (qs.isCond(2))
  377. {
  378. htmltext = "32787-02.html";
  379. }
  380. break;
  381. }
  382. case READING_DESK2:
  383. case READING_DESK3:
  384. case READING_DESK4:
  385. case READING_DESK6:
  386. case READING_DESK7:
  387. case READING_DESK8:
  388. case READING_DESK10:
  389. case READING_DESK11:
  390. case READING_DESK12:
  391. case READING_DESK14:
  392. case READING_DESK15:
  393. case READING_DESK16:
  394. {
  395. if (qs.isCond(2))
  396. {
  397. htmltext = "32822-01.html";
  398. }
  399. break;
  400. }
  401. case READING_DESK1:
  402. {
  403. htmltext = ((qs.getInt("good1") == 1) ? "32821-03.html" : "32821-01.html");
  404. break;
  405. }
  406. case READING_DESK5:
  407. {
  408. htmltext = ((qs.getInt("good2") == 1) ? "32821-03.html" : "32825-01.html");
  409. break;
  410. }
  411. case READING_DESK9:
  412. {
  413. htmltext = ((qs.getInt("good3") == 1) ? "32821-03.html" : "32829-01.html");
  414. break;
  415. }
  416. case READING_DESK13:
  417. {
  418. htmltext = ((qs.getInt("good4") == 1) ? "32821-03.html" : "32833-01.html");
  419. break;
  420. }
  421. case SOLINAS_EVIL_THOUGHTS:
  422. case JUDE_VAN_ETINA:
  423. case RELIC_WATCHER1:
  424. case RELIC_WATCHER2:
  425. case RELIC_WATCHER3:
  426. case RELIC_WATCHER4:
  427. {
  428. if (qs.isCond(2))
  429. {
  430. htmltext = npc.getId() + "-01.html";
  431. }
  432. break;
  433. }
  434. }
  435. return htmltext;
  436. }
  437. public boolean hasCheckedAllRightBooks(QuestState qs)
  438. {
  439. return ((qs.getInt("good1") == 1) && (qs.getInt("good2") == 1) && (qs.getInt("good3") == 1) && (qs.getInt("good4") == 1));
  440. }
  441. }