Guest User

Untitled

a guest
Apr 21st, 2022
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 33.43 KB | None | 0 0
  1. package quests.Q00234_FatesWhisper;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. import org.l2jmobius.Config;
  7. import org.l2jmobius.gameserver.enums.ChatType;
  8. import org.l2jmobius.gameserver.enums.QuestSound;
  9. import org.l2jmobius.gameserver.model.actor.Npc;
  10. import org.l2jmobius.gameserver.model.actor.Player;
  11. import org.l2jmobius.gameserver.model.quest.Quest;
  12. import org.l2jmobius.gameserver.model.quest.QuestState;
  13. import org.l2jmobius.gameserver.network.NpcStringId;
  14. import org.l2jmobius.gameserver.network.serverpackets.NpcSay;
  15. import org.l2jmobius.gameserver.util.Util;
  16.  
  17. /**
  18. * Fate's Whisper (234)
  19. * @author Zealar
  20. */
  21. public class Q00234_FatesWhisper extends Quest
  22. {
  23. // NPCs
  24. private static final int ZENKIN = 30178;
  25. private static final int CLIFF = 30182;
  26. private static final int MASTER_KASPAR = 30833;
  27. private static final int HEAD_BLACKSMITH_FERRIS = 30847;
  28. private static final int MAESTRO_LEORIN = 31002;
  29. private static final int COFFER_OF_THE_DEAD = 31027;
  30. private static final int CHEST_OF_KERNON = 31028;
  31. private static final int CHEST_OF_GOLKONDA = 31029;
  32. private static final int CHEST_OF_HALLATE = 31030;
  33. // Quest Items
  34. private static final int Q_BLOODY_FABRIC_Q0234 = 14361;
  35. private static final int Q_WHITE_FABRIC_Q0234 = 14362;
  36. private static final int Q_STAR_OF_DESTINY = 5011;
  37. private static final int Q_PIPETTE_KNIFE = 4665;
  38. private static final int Q_REIRIAS_SOULORB = 4666;
  39. private static final int Q_INFERNIUM_SCEPTER_1 = 4667;
  40. private static final int Q_INFERNIUM_SCEPTER_2 = 4668;
  41. private static final int Q_INFERNIUM_SCEPTER_3 = 4669;
  42. private static final int Q_MAESTRO_REORINS_HAMMER = 4670;
  43. private static final int Q_MAESTRO_REORINS_MOLD = 4671;
  44. private static final int Q_INFERNIUM_VARNISH = 4672;
  45. private static final int Q_RED_PIPETTE_KNIFE = 4673;
  46. // Other Items
  47. private static final int CRYSTAL_B = 1460;
  48. // Monsters
  49. private static final int PLATINUM_TRIBE_GRUNT = 20823;
  50. private static final int PLATINUM_TRIBE_ARCHER = 20826;
  51. private static final int PLATINUM_TRIBE_WARRIOR = 20827;
  52. private static final int PLATINUM_TRIBE_SHAMAN = 20828;
  53. private static final int PLATINUM_TRIBE_LORD = 20829;
  54. private static final int GUARDIAN_ANGEL = 20830;
  55. private static final int SEAL_ANGEL = 20831;
  56. private static final int SEAL_ANGEL_R = 20860;
  57.  
  58. private static final int DOMB_DEATH_CABRIO = 25035;
  59. private static final int KERNON = 25054;
  60. private static final int GOLKONDA_LONGHORN = 25126;
  61. private static final int HALLATE_THE_DEATH_LORD = 25220;
  62. private static final int BAIUM = 29020;
  63.  
  64. // B-grade
  65. private static final int SWORD_OF_DAMASCUS = 79;
  66. private static final int SWORD_OF_DAMASCUS_FOCUS = 4717;
  67. private static final int SWORD_OF_DAMASCUS_CRT_DAMAGE = 4718;
  68. private static final int SWORD_OF_DAMASCUS_HASTE = 4719;
  69. private static final int HAZARD_BOW = 287;
  70. private static final int HAZARD_BOW_GUIDENCE = 4828;
  71. private static final int HAZARD_BOW_QUICKRECOVERY = 4829;
  72. private static final int HAZARD_BOW_CHEAPSHOT = 4830;
  73. private static final int LANCIA = 97;
  74. private static final int LANCIA_ANGER = 4858;
  75. private static final int LANCIA_CRT_STUN = 4859;
  76. private static final int LANCIA_LONGBLOW = 4860;
  77. private static final int ART_OF_BATTLE_AXE = 175;
  78. private static final int ART_OF_BATTLE_AXE_HEALTH = 4753;
  79. private static final int ART_OF_BATTLE_AXE_RSK_FOCUS = 4754;
  80. private static final int ART_OF_BATTLE_AXE_HASTE = 4755;
  81. private static final int STAFF_OF_EVIL_SPRIT = 210;
  82. private static final int STAFF_OF_EVIL_SPRIT_MAGICFOCUS = 4900;
  83. private static final int STAFF_OF_EVIL_SPRIT_MAGICBLESSTHEBODY = 4901;
  84. private static final int STAFF_OF_EVIL_SPRIT_MAGICPOISON = 4902;
  85. private static final int DEMONS_SWORD = 234;
  86. private static final int DEMONS_SWORD_CRT_BLEED = 4780;
  87. private static final int DEMONS_SWORD_CRT_POISON = 4781;
  88. private static final int DEMONS_SWORD_MIGHTMOTAL = 4782;
  89. private static final int BELLION_CESTUS = 268;
  90. private static final int BELLION_CESTUS_CRT_DRAIN = 4804;
  91. private static final int BELLION_CESTUS_CRT_POISON = 4805;
  92. private static final int BELLION_CESTUS_RSK_HASTE = 4806;
  93. private static final int DEADMANS_GLORY = 171;
  94. private static final int DEADMANS_GLORY_ANGER = 4750;
  95. private static final int DEADMANS_GLORY_HEALTH = 4751;
  96. private static final int DEADMANS_GLORY_HASTE = 4752;
  97. private static final int SAMURAI_LONGSWORD_SAMURAI_LONGSWORD = 2626;
  98. private static final int GUARDIANS_SWORD = 7883;
  99. private static final int GUARDIANS_SWORD_CRT_DRAIN = 8105;
  100. private static final int GUARDIANS_SWORD_HEALTH = 8106;
  101. private static final int GUARDIANS_SWORD_CRT_BLEED = 8107;
  102. private static final int TEARS_OF_WIZARD = 7889;
  103. private static final int TEARS_OF_WIZARD_ACUMEN = 8117;
  104. private static final int TEARS_OF_WIZARD_MAGICPOWER = 8118;
  105. private static final int TEARS_OF_WIZARD_UPDOWN = 8119;
  106. private static final int STAR_BUSTER = 7901;
  107. private static final int STAR_BUSTER_HEALTH = 8132;
  108. private static final int STAR_BUSTER_HASTE = 8133;
  109. private static final int STAR_BUSTER_RSK_FOCUS = 8134;
  110. private static final int BONE_OF_KAIM_VANUL = 7893;
  111. private static final int BONE_OF_KAIM_VANUL_MANAUP = 8144;
  112. private static final int BONE_OF_KAIM_VANUL_MAGICSILENCE = 8145;
  113. private static final int BONE_OF_KAIM_VANUL_UPDOWN = 8146;
  114. // A-grade
  115. private static final int TALLUM_BLADE = 80;
  116. private static final int CARNIUM_BOW = 288;
  117. private static final int HALBARD = 98;
  118. private static final int ELEMENTAL_SWORD = 150;
  119. private static final int DASPARIONS_STAFF = 212;
  120. private static final int BLOODY_ORCHID = 235;
  121. private static final int BLOOD_TORNADO = 269;
  122. private static final int METEOR_SHOWER = 2504;
  123. private static final int KSHANBERK_KSHANBERK = 5233;
  124. private static final int INFERNO_MASTER = 7884;
  125. private static final int EYE_OF_SOUL = 7894;
  126. private static final int HAMMER_OF_DESTROYER = 7899;
  127.  
  128. public Q00234_FatesWhisper()
  129. {
  130. super(234);
  131. addStartNpc(MAESTRO_LEORIN);
  132. addTalkId(ZENKIN, CLIFF, MASTER_KASPAR, HEAD_BLACKSMITH_FERRIS, MAESTRO_LEORIN);
  133. addTalkId(COFFER_OF_THE_DEAD, CHEST_OF_KERNON, CHEST_OF_HALLATE, CHEST_OF_GOLKONDA);
  134. addKillId(PLATINUM_TRIBE_GRUNT, PLATINUM_TRIBE_ARCHER, PLATINUM_TRIBE_WARRIOR, PLATINUM_TRIBE_SHAMAN, PLATINUM_TRIBE_LORD, GUARDIAN_ANGEL, SEAL_ANGEL, SEAL_ANGEL_R);
  135. addKillId(DOMB_DEATH_CABRIO, KERNON, GOLKONDA_LONGHORN, HALLATE_THE_DEATH_LORD);
  136. addSpawnId(COFFER_OF_THE_DEAD, CHEST_OF_KERNON, CHEST_OF_HALLATE, CHEST_OF_GOLKONDA);
  137. addAttackId(BAIUM);
  138. registerQuestItems(Q_BLOODY_FABRIC_Q0234, Q_WHITE_FABRIC_Q0234, Q_PIPETTE_KNIFE, Q_REIRIAS_SOULORB, Q_INFERNIUM_SCEPTER_1, Q_INFERNIUM_SCEPTER_2, Q_INFERNIUM_SCEPTER_3, Q_MAESTRO_REORINS_HAMMER, Q_MAESTRO_REORINS_MOLD, Q_INFERNIUM_VARNISH, Q_RED_PIPETTE_KNIFE);
  139. }
  140.  
  141. @Override
  142. public String onSpawn(Npc npc)
  143. {
  144. switch (npc.getId())
  145. {
  146. case COFFER_OF_THE_DEAD:
  147. {
  148. startQuestTimer("23401", 1000 * 120, npc, null);
  149. break;
  150. }
  151. case CHEST_OF_KERNON:
  152. {
  153. startQuestTimer("23402", 1000 * 120, npc, null);
  154. break;
  155. }
  156. case CHEST_OF_HALLATE:
  157. {
  158. startQuestTimer("23403", 1000 * 120, npc, null);
  159. break;
  160. }
  161. case CHEST_OF_GOLKONDA:
  162. {
  163. startQuestTimer("23404", 1000 * 120, npc, null);
  164. break;
  165. }
  166. }
  167. return super.onSpawn(npc);
  168. }
  169.  
  170. @Override
  171. public String onTalk(Npc npc, Player player)
  172. {
  173. final QuestState qs = getQuestState(player, true);
  174. final String htmltext = getNoQuestMsg(player);
  175. switch (npc.getId())
  176. {
  177. case ZENKIN:
  178. {
  179. switch (qs.getMemoState())
  180. {
  181. case 6:
  182. {
  183. return "30178-01.html";
  184. }
  185. case 7:
  186. {
  187. return "30178-03.html";
  188. }
  189. case 8:
  190. {
  191. return "30178-04.html";
  192. }
  193. }
  194. break;
  195. }
  196. case CLIFF:
  197. {
  198. if (qs.isMemoState(4) && !hasQuestItems(player, Q_INFERNIUM_VARNISH))
  199. {
  200. return "30182-01.html";
  201. }
  202. if (qs.isMemoState(4) && hasQuestItems(player, Q_INFERNIUM_VARNISH))
  203. {
  204. return "30182-05.html";
  205. }
  206. if (qs.getMemoState() >= 5)
  207. {
  208. return "30182-06.html";
  209. }
  210. break;
  211. }
  212. case MASTER_KASPAR:
  213. {
  214. if (qs.isMemoState(7))
  215. {
  216. return "30833-01.html";
  217. }
  218. final long bloodyFabricCount = getQuestItemsCount(player, Q_BLOODY_FABRIC_Q0234);
  219. final long whiteFabricCount = getQuestItemsCount(player, Q_WHITE_FABRIC_Q0234);
  220. final long whiteBloodyFabricCount = bloodyFabricCount + whiteFabricCount;
  221. if (qs.isMemoState(8) && !hasQuestItems(player, Q_RED_PIPETTE_KNIFE) && (whiteBloodyFabricCount <= 0))
  222. {
  223. return "30833-03.html";
  224. }
  225. if (qs.isMemoState(8) && hasQuestItems(player, Q_RED_PIPETTE_KNIFE) && (whiteBloodyFabricCount <= 0))
  226. {
  227. giveItems(player, Q_MAESTRO_REORINS_MOLD, 1);
  228. takeItems(player, Q_RED_PIPETTE_KNIFE, 1);
  229. qs.setMemoState(9);
  230. qs.setCond(10, true);
  231. qs.showQuestionMark(234);
  232. return "30833-04.html";
  233. }
  234. if (qs.isMemoState(8) && !hasQuestItems(player, Q_RED_PIPETTE_KNIFE) && (bloodyFabricCount < 30) && (whiteBloodyFabricCount >= 30))
  235. {
  236. return "30833-03c.html";
  237. }
  238. if (qs.isMemoState(8) && !hasQuestItems(player, Q_RED_PIPETTE_KNIFE) && (bloodyFabricCount >= 30) && (whiteBloodyFabricCount >= 30))
  239. {
  240. giveItems(player, Q_MAESTRO_REORINS_MOLD, 1);
  241. takeItems(player, Q_BLOODY_FABRIC_Q0234, -1);
  242. qs.setMemoState(9);
  243. qs.setCond(10, true);
  244. qs.showQuestionMark(234);
  245. return "30833-03d.html";
  246. }
  247. if (qs.isMemoState(8) && !hasQuestItems(player, Q_RED_PIPETTE_KNIFE) && (whiteBloodyFabricCount < 30) && (whiteBloodyFabricCount > 0))
  248. {
  249. giveItems(player, Q_WHITE_FABRIC_Q0234, 30 - whiteFabricCount);
  250. takeItems(player, Q_BLOODY_FABRIC_Q0234, -1);
  251. return "30833-03e.html";
  252. }
  253. if (qs.getMemoState() >= 9)
  254. {
  255. return "30833-05.html";
  256. }
  257. break;
  258. }
  259. case HEAD_BLACKSMITH_FERRIS:
  260. {
  261. if (qs.isMemoState(5))
  262. {
  263. if (hasQuestItems(player, Q_MAESTRO_REORINS_HAMMER))
  264. {
  265. return "30847-02.html";
  266. }
  267. giveItems(player, Q_MAESTRO_REORINS_HAMMER, 1);
  268. return "30847-01.html";
  269. }
  270. if (qs.getMemoState() >= 6)
  271. {
  272. return "30847-03.html";
  273. }
  274. break;
  275. }
  276. case MAESTRO_LEORIN:
  277. {
  278. if (qs.isCreated() && (player.getLevel() >= 75))
  279. {
  280. return "31002-01.htm";
  281. }
  282. if (qs.isCreated() && (player.getLevel() < 75))
  283. {
  284. return "31002-01a.htm";
  285. }
  286. if (qs.isCompleted())
  287. {
  288. return getAlreadyCompletedMsg(player);
  289. }
  290. if (qs.isMemoState(1) && !hasQuestItems(player, Q_REIRIAS_SOULORB))
  291. {
  292. return "31002-09.html";
  293. }
  294. if (qs.isMemoState(1) && hasQuestItems(player, Q_REIRIAS_SOULORB))
  295. {
  296. return "31002-10.html";
  297. }
  298. if (qs.isMemoState(2) && !hasQuestItems(player, Q_INFERNIUM_SCEPTER_1, Q_INFERNIUM_SCEPTER_2, Q_INFERNIUM_SCEPTER_3))
  299. {
  300. return "31002-12.html";
  301. }
  302. if (qs.isMemoState(2) && hasQuestItems(player, Q_INFERNIUM_SCEPTER_1, Q_INFERNIUM_SCEPTER_2, Q_INFERNIUM_SCEPTER_3))
  303. {
  304. return "31002-13.html";
  305. }
  306. if (qs.isMemoState(4) && !hasQuestItems(player, Q_INFERNIUM_VARNISH))
  307. {
  308. return "31002-15.html";
  309. }
  310. if (qs.isMemoState(4) && hasQuestItems(player, Q_INFERNIUM_VARNISH))
  311. {
  312. return "31002-16.html";
  313. }
  314. if (qs.isMemoState(5) && !hasQuestItems(player, Q_MAESTRO_REORINS_HAMMER))
  315. {
  316. return "31002-18.html";
  317. }
  318. if (qs.isMemoState(5) && hasQuestItems(player, Q_MAESTRO_REORINS_HAMMER))
  319. {
  320. return "31002-19.html";
  321. }
  322. if ((qs.getMemoState() < 9) && (qs.getMemoState() >= 6))
  323. {
  324. return "31002-21.html";
  325. }
  326. if (qs.isMemoState(9) && hasQuestItems(player, Q_MAESTRO_REORINS_MOLD))
  327. {
  328. return "31002-22.html";
  329. }
  330. if (qs.isMemoState(10) && (getQuestItemsCount(player, CRYSTAL_B) < 984))
  331. {
  332. return "31002-24.html";
  333. }
  334. if (qs.isMemoState(10) && (getQuestItemsCount(player, CRYSTAL_B) >= 984))
  335. {
  336. return "31002-25.html";
  337. }
  338. switch (qs.getMemoState())
  339. {
  340. case 11:
  341. {
  342. if (hasAtLeastOneQuestItem(player, SWORD_OF_DAMASCUS, SWORD_OF_DAMASCUS_FOCUS, SWORD_OF_DAMASCUS_CRT_DAMAGE, SWORD_OF_DAMASCUS_HASTE))
  343. {
  344. return "31002-35.html";
  345. }
  346. return "31002-35a.html";
  347. }
  348. case 12:
  349. {
  350. if (hasAtLeastOneQuestItem(player, HAZARD_BOW_GUIDENCE, HAZARD_BOW_QUICKRECOVERY, HAZARD_BOW_CHEAPSHOT, HAZARD_BOW))
  351. {
  352. return "31002-36.html";
  353. }
  354. return "31002-36a.html";
  355. }
  356. case 13:
  357. {
  358. if (hasAtLeastOneQuestItem(player, LANCIA_ANGER, LANCIA_CRT_STUN, LANCIA_LONGBLOW, LANCIA))
  359. {
  360. return "31002-37.html";
  361. }
  362. return "31002-37a.html";
  363. }
  364. case 14:
  365. {
  366. if (hasAtLeastOneQuestItem(player, ART_OF_BATTLE_AXE_HEALTH, ART_OF_BATTLE_AXE_RSK_FOCUS, ART_OF_BATTLE_AXE_HASTE, ART_OF_BATTLE_AXE))
  367. {
  368. return "31002-38.html";
  369. }
  370. return "31002-38a.html";
  371. }
  372. case 15:
  373. {
  374. if (hasAtLeastOneQuestItem(player, STAFF_OF_EVIL_SPRIT_MAGICFOCUS, STAFF_OF_EVIL_SPRIT_MAGICBLESSTHEBODY, STAFF_OF_EVIL_SPRIT_MAGICPOISON, STAFF_OF_EVIL_SPRIT))
  375. {
  376. return "31002-39.html";
  377. }
  378. return "31002-39a.html";
  379. }
  380. case 16:
  381. {
  382. if (hasAtLeastOneQuestItem(player, DEMONS_SWORD_CRT_BLEED, DEMONS_SWORD_CRT_POISON, DEMONS_SWORD_MIGHTMOTAL, DEMONS_SWORD))
  383. {
  384. return "31002-40.html";
  385. }
  386. return "31002-40a.html";
  387. }
  388. case 17:
  389. {
  390. if (hasAtLeastOneQuestItem(player, BELLION_CESTUS_CRT_DRAIN, BELLION_CESTUS_CRT_POISON, BELLION_CESTUS_RSK_HASTE, BELLION_CESTUS))
  391. {
  392. return "31002-41.html";
  393. }
  394. return "31002-41a.html";
  395. }
  396. case 18:
  397. {
  398. if (hasAtLeastOneQuestItem(player, DEADMANS_GLORY_ANGER, DEADMANS_GLORY_HEALTH, DEADMANS_GLORY_HASTE, DEADMANS_GLORY))
  399. {
  400. return "31002-42.html";
  401. }
  402. return "31002-42a.html";
  403. }
  404. case 19:
  405. {
  406. if (hasAtLeastOneQuestItem(player, SAMURAI_LONGSWORD_SAMURAI_LONGSWORD))
  407. {
  408. return "31002-43.html";
  409. }
  410. return "31002-43a.html";
  411. }
  412. case 41:
  413. {
  414. if (hasAtLeastOneQuestItem(player, GUARDIANS_SWORD, GUARDIANS_SWORD_CRT_DRAIN, GUARDIANS_SWORD_HEALTH, GUARDIANS_SWORD_CRT_BLEED))
  415. {
  416. return "31002-43b.html";
  417. }
  418. return "31002-43c.html";
  419. }
  420. case 42:
  421. {
  422. if (hasAtLeastOneQuestItem(player, TEARS_OF_WIZARD, TEARS_OF_WIZARD_ACUMEN, TEARS_OF_WIZARD_MAGICPOWER, TEARS_OF_WIZARD_UPDOWN))
  423. {
  424. return "31002-43d.html";
  425. }
  426. return "31002-43e.html";
  427. }
  428. case 43:
  429. {
  430. if (hasAtLeastOneQuestItem(player, STAR_BUSTER, STAR_BUSTER_HEALTH, STAR_BUSTER_HASTE, STAR_BUSTER_RSK_FOCUS))
  431. {
  432. return "31002-43f.html";
  433. }
  434. return "31002-43g.html";
  435. }
  436. case 44:
  437. {
  438. if (hasAtLeastOneQuestItem(player, BONE_OF_KAIM_VANUL, BONE_OF_KAIM_VANUL_MANAUP, BONE_OF_KAIM_VANUL_MAGICSILENCE, BONE_OF_KAIM_VANUL_UPDOWN))
  439. {
  440. return "31002-43h.html";
  441. }
  442. return "31002-43i.html";
  443. }
  444. }
  445. break;
  446. }
  447. case COFFER_OF_THE_DEAD:
  448. {
  449. if (qs.isMemoState(1) && !hasQuestItems(player, Q_REIRIAS_SOULORB))
  450. {
  451. giveItems(player, Q_REIRIAS_SOULORB, 1);
  452. playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
  453. return "31027-01.html";
  454. }
  455. if ((qs.getMemoState() > 1) || hasQuestItems(player, Q_REIRIAS_SOULORB))
  456. {
  457. return "31027-02.html";
  458. }
  459. break;
  460. }
  461. case CHEST_OF_KERNON:
  462. {
  463. if (qs.isMemoState(2) && !hasQuestItems(player, Q_INFERNIUM_SCEPTER_1))
  464. {
  465. giveItems(player, Q_INFERNIUM_SCEPTER_1, 1);
  466. playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
  467. return "31028-01.html";
  468. }
  469. if ((qs.getMemoState() != 2) || hasQuestItems(player, Q_INFERNIUM_SCEPTER_1))
  470. {
  471. return "31028-02.html";
  472. }
  473. break;
  474. }
  475. case CHEST_OF_GOLKONDA:
  476. {
  477. if (qs.isMemoState(2) && !hasQuestItems(player, Q_INFERNIUM_SCEPTER_2))
  478. {
  479. giveItems(player, Q_INFERNIUM_SCEPTER_2, 1);
  480. playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
  481. return "31029-01.html";
  482. }
  483. if ((qs.getMemoState() != 2) || hasQuestItems(player, Q_INFERNIUM_SCEPTER_2))
  484. {
  485. return "31029-02.html";
  486. }
  487. break;
  488. }
  489. case CHEST_OF_HALLATE:
  490. {
  491. if (qs.isMemoState(2) && !hasQuestItems(player, Q_INFERNIUM_SCEPTER_3))
  492. {
  493. giveItems(player, Q_INFERNIUM_SCEPTER_3, 1);
  494. playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
  495. return "31030-01.html";
  496. }
  497. if ((qs.getMemoState() != 2) || hasQuestItems(player, Q_INFERNIUM_SCEPTER_3))
  498. {
  499. return "31030-02.html";
  500. }
  501. break;
  502. }
  503. }
  504. return htmltext;
  505. }
  506.  
  507. @Override
  508. public String onAdvEvent(String event, Npc npc, Player player)
  509. {
  510. if (player == null)
  511. {
  512. if (event.equals("23401") || event.equals("23402") || event.equals("23403") || event.equals("23404"))
  513. {
  514. npc.decayMe();
  515. }
  516. return super.onAdvEvent(event, npc, player);
  517. }
  518.  
  519. final QuestState qs = getQuestState(player, false);
  520. if (qs == null)
  521. {
  522. return null;
  523. }
  524.  
  525. final String htmltext = null;
  526. if (event.equals("QUEST_ACCEPTED"))
  527. {
  528. qs.setMemoState(1);
  529. qs.startQuest();
  530. qs.showQuestionMark(234);
  531. playSound(player, QuestSound.ITEMSOUND_QUEST_ACCEPT);
  532. return "31002-06.html";
  533. }
  534. if (event.contains(".htm"))
  535. {
  536. return event;
  537. }
  538.  
  539. final int npcId = npc.getId();
  540. final int eventID = Integer.parseInt(event);
  541.  
  542. switch (npcId)
  543. {
  544. case ZENKIN:
  545. {
  546. switch (eventID)
  547. {
  548. case 1:
  549. {
  550. qs.setMemoState(7);
  551. qs.setCond(6);
  552. qs.showQuestionMark(234);
  553. playSound(player, QuestSound.ITEMSOUND_QUEST_MIDDLE);
  554. return "30178-02.html";
  555. }
  556. }
  557. break;
  558. }
  559. case CLIFF:
  560. {
  561. switch (eventID)
  562. {
  563. case 1:
  564. {
  565. return "30182-02.html";
  566. }
  567. case 2:
  568. {
  569. return "30182-03.html";
  570. }
  571. case 3:
  572. {
  573. if ((qs.getMemoState() == 4) && !hasQuestItems(player, Q_INFERNIUM_VARNISH))
  574. {
  575. giveItems(player, Q_INFERNIUM_VARNISH, 1);
  576. return "30182-04.html";
  577. }
  578. }
  579. }
  580. break;
  581. }
  582. case MASTER_KASPAR:
  583. {
  584. switch (eventID)
  585. {
  586. case 1:
  587. {
  588. if (qs.isMemoState(7))
  589. {
  590. return "30833-02.html";
  591. }
  592. break;
  593. }
  594. case 2:
  595. {
  596. if (qs.isMemoState(7))
  597. {
  598. giveItems(player, Q_PIPETTE_KNIFE, 1);
  599. qs.setMemoState(8);
  600. qs.setCond(7, true);
  601. qs.showQuestionMark(234);
  602. return "30833-03a.html";
  603. }
  604. break;
  605. }
  606. case 3:
  607. {
  608. if (qs.isMemoState(7))
  609. {
  610. giveItems(player, Q_WHITE_FABRIC_Q0234, 30);
  611. qs.setMemoState(8);
  612. qs.setCond(8, true);
  613. qs.showQuestionMark(234);
  614. return "30833-03b.html";
  615. }
  616. break;
  617. }
  618. }
  619. break;
  620. }
  621. case MAESTRO_LEORIN:
  622. {
  623. switch (eventID)
  624. {
  625. case 1:
  626. {
  627. return "31002-02.htm";
  628. }
  629. case 2:
  630. {
  631. return "31002-03.html";
  632. }
  633. case 3:
  634. {
  635. return "31002-04.html";
  636. }
  637. case 4:
  638. {
  639. if (!qs.isCompleted() && (player.getLevel() >= 75))
  640. {
  641. return "31002-05.html";
  642. }
  643. break;
  644. }
  645. case 5:
  646. {
  647. if (qs.isMemoState(1) && hasQuestItems(player, Q_REIRIAS_SOULORB))
  648. {
  649. takeItems(player, Q_REIRIAS_SOULORB, 1);
  650. qs.setMemoState(2);
  651. qs.setCond(2, true);
  652. qs.showQuestionMark(234);
  653. return "31002-11.html";
  654. }
  655. break;
  656. }
  657. case 6:
  658. {
  659. if (qs.isMemoState(2) && hasQuestItems(player, Q_INFERNIUM_SCEPTER_1, Q_INFERNIUM_SCEPTER_2, Q_INFERNIUM_SCEPTER_3))
  660. {
  661. takeItems(player, Q_INFERNIUM_SCEPTER_1, -1);
  662. takeItems(player, Q_INFERNIUM_SCEPTER_2, -1);
  663. takeItems(player, Q_INFERNIUM_SCEPTER_3, -1);
  664. qs.setMemoState(4);
  665. qs.setCond(3, true);
  666. qs.showQuestionMark(234);
  667. return "31002-14.html";
  668. }
  669. break;
  670. }
  671. case 7:
  672. {
  673. if (qs.isMemoState(4) && hasQuestItems(player, Q_INFERNIUM_VARNISH))
  674. {
  675. takeItems(player, Q_INFERNIUM_VARNISH, 1);
  676. qs.setMemoState(5);
  677. qs.setCond(4, true);
  678. qs.showQuestionMark(234);
  679. return "31002-17.html";
  680. }
  681. break;
  682. }
  683. case 8:
  684. {
  685. if (qs.isMemoState(5) && hasQuestItems(player, Q_MAESTRO_REORINS_HAMMER))
  686. {
  687. takeItems(player, Q_MAESTRO_REORINS_HAMMER, 1);
  688. qs.setMemoState(6);
  689. qs.setCond(5, true);
  690. qs.showQuestionMark(234);
  691. return "31002-20.html";
  692. }
  693. break;
  694. }
  695. case 9:
  696. {
  697. if (qs.isMemoState(9) && hasQuestItems(player, Q_MAESTRO_REORINS_MOLD))
  698. {
  699. takeItems(player, Q_MAESTRO_REORINS_MOLD, 1);
  700. qs.setMemoState(10);
  701. qs.setCond(11, true);
  702. qs.showQuestionMark(234);
  703. return "31002-23.html";
  704. }
  705. break;
  706. }
  707. case 10:
  708. {
  709. if (qs.isMemoState(10))
  710. {
  711. if (getQuestItemsCount(player, CRYSTAL_B) >= 984)
  712. {
  713. takeItems(player, CRYSTAL_B, 984);
  714. qs.setMemoState(11);
  715. qs.setCond(12, true);
  716. qs.showQuestionMark(234);
  717. return "31002-26.html";
  718. }
  719. return "31002-34.html";
  720. }
  721. break;
  722. }
  723. case 11:
  724. {
  725. if (qs.isMemoState(10))
  726. {
  727. if (getQuestItemsCount(player, CRYSTAL_B) >= 984)
  728. {
  729. takeItems(player, CRYSTAL_B, 984);
  730. qs.setMemoState(19);
  731. qs.setCond(12, true);
  732. qs.showQuestionMark(234);
  733. return "31002-26a.html";
  734. }
  735. return "31002-34.html";
  736. }
  737. break;
  738. }
  739. case 12:
  740. {
  741. if (qs.isMemoState(10))
  742. {
  743. if (getQuestItemsCount(player, CRYSTAL_B) >= 984)
  744. {
  745. takeItems(player, CRYSTAL_B, 984);
  746. qs.setMemoState(12);
  747. qs.setCond(12, true);
  748. qs.showQuestionMark(234);
  749. return "31002-27.html";
  750. }
  751. return "31002-34.html";
  752. }
  753. break;
  754. }
  755. case 13:
  756. {
  757. if (qs.isMemoState(10))
  758. {
  759. if (getQuestItemsCount(player, CRYSTAL_B) >= 984)
  760. {
  761. takeItems(player, CRYSTAL_B, 984);
  762. qs.setMemoState(13);
  763. qs.setCond(12, true);
  764. qs.showQuestionMark(234);
  765. return "31002-28.html";
  766. }
  767. return "31002-34.html";
  768. }
  769. break;
  770. }
  771. case 14:
  772. {
  773. if (qs.isMemoState(10))
  774. {
  775. if (getQuestItemsCount(player, CRYSTAL_B) >= 984)
  776. {
  777. takeItems(player, CRYSTAL_B, 984);
  778. qs.setMemoState(14);
  779. qs.setCond(12, true);
  780. qs.showQuestionMark(234);
  781. return "31002-29.html";
  782. }
  783. return "31002-34.html";
  784. }
  785. break;
  786. }
  787. case 15:
  788. {
  789. if (qs.isMemoState(10))
  790. {
  791. if (getQuestItemsCount(player, CRYSTAL_B) >= 984)
  792. {
  793. takeItems(player, CRYSTAL_B, 984);
  794. qs.setMemoState(15);
  795. qs.setCond(12, true);
  796. qs.showQuestionMark(234);
  797. return "31002-30.html";
  798. }
  799. return "31002-34.html";
  800. }
  801. break;
  802. }
  803. case 16:
  804. {
  805. if (qs.isMemoState(10))
  806. {
  807. if (getQuestItemsCount(player, CRYSTAL_B) >= 984)
  808. {
  809. takeItems(player, CRYSTAL_B, 984);
  810. qs.setMemoState(16);
  811. qs.setCond(12, true);
  812. qs.showQuestionMark(234);
  813. return "31002-31.html";
  814. }
  815. return "31002-34.html";
  816. }
  817. break;
  818. }
  819. case 17:
  820. {
  821. if (qs.isMemoState(10))
  822. {
  823. if (getQuestItemsCount(player, CRYSTAL_B) >= 984)
  824. {
  825. takeItems(player, CRYSTAL_B, 984);
  826. qs.setMemoState(17);
  827. qs.setCond(12, true);
  828. qs.showQuestionMark(234);
  829. return "31002-32.html";
  830. }
  831. return "31002-34.html";
  832. }
  833. break;
  834. }
  835. case 18:
  836. {
  837. if (qs.isMemoState(10))
  838. {
  839. if (getQuestItemsCount(player, CRYSTAL_B) >= 984)
  840. {
  841. takeItems(player, CRYSTAL_B, 984);
  842. qs.setMemoState(18);
  843. qs.setCond(12, true);
  844. qs.showQuestionMark(234);
  845. return "31002-33.html";
  846. }
  847. return "31002-34.html";
  848. }
  849. break;
  850. }
  851. case 41:
  852. {
  853. if (qs.isMemoState(10))
  854. {
  855. if (getQuestItemsCount(player, CRYSTAL_B) >= 984)
  856. {
  857. takeItems(player, CRYSTAL_B, 984);
  858. qs.setMemoState(41);
  859. qs.setCond(12, true);
  860. qs.showQuestionMark(234);
  861. return "31002-33a.html";
  862. }
  863. return "31002-34.html";
  864. }
  865. break;
  866. }
  867. case 42:
  868. {
  869. if (qs.isMemoState(10))
  870. {
  871. if (getQuestItemsCount(player, CRYSTAL_B) >= 984)
  872. {
  873. takeItems(player, CRYSTAL_B, 984);
  874. qs.setMemoState(42);
  875. qs.setCond(12, true);
  876. qs.showQuestionMark(234);
  877. return "31002-33b.html";
  878. }
  879. return "31002-34.html";
  880. }
  881. break;
  882. }
  883. case 43:
  884. {
  885. if (qs.isMemoState(10))
  886. {
  887. if (getQuestItemsCount(player, CRYSTAL_B) >= 984)
  888. {
  889. takeItems(player, CRYSTAL_B, 984);
  890. qs.setMemoState(43);
  891. qs.setCond(12, true);
  892. qs.showQuestionMark(234);
  893. return "31002-33c.html";
  894. }
  895. return "31002-34.html";
  896. }
  897. break;
  898. }
  899. case 44:
  900. {
  901. if (qs.isMemoState(10))
  902. {
  903. if (getQuestItemsCount(player, CRYSTAL_B) >= 984)
  904. {
  905. takeItems(player, CRYSTAL_B, 984);
  906. qs.setMemoState(44);
  907. qs.setCond(12, true);
  908. qs.showQuestionMark(234);
  909. return "31002-33d.html";
  910. }
  911. return "31002-34.html";
  912. }
  913. break;
  914. }
  915. case 21:
  916. {
  917. if (calculateReward(qs, player, TALLUM_BLADE))
  918. {
  919. return "31002-44.html";
  920. }
  921. break;
  922. }
  923. case 22:
  924. {
  925. if (calculateReward(qs, player, CARNIUM_BOW))
  926. {
  927. return "31002-44.html";
  928. }
  929. break;
  930. }
  931. case 23:
  932. {
  933. if (calculateReward(qs, player, HALBARD))
  934. {
  935. return "31002-44.html";
  936. }
  937. break;
  938. }
  939. case 24:
  940. {
  941. if (calculateReward(qs, player, ELEMENTAL_SWORD))
  942. {
  943. return "31002-44.html";
  944. }
  945. break;
  946. }
  947. case 25:
  948. {
  949. if (calculateReward(qs, player, DASPARIONS_STAFF))
  950. {
  951. return "31002-44.html";
  952. }
  953. break;
  954. }
  955. case 26:
  956. {
  957. if (calculateReward(qs, player, BLOODY_ORCHID))
  958. {
  959. return "31002-44.html";
  960. }
  961. break;
  962. }
  963. case 27:
  964. {
  965. if (calculateReward(qs, player, BLOOD_TORNADO))
  966. {
  967. return "31002-44.html";
  968. }
  969. break;
  970. }
  971. case 28:
  972. {
  973. if (calculateReward(qs, player, METEOR_SHOWER))
  974. {
  975. return "31002-44.html";
  976. }
  977. break;
  978. }
  979. case 29:
  980. {
  981. if (calculateReward(qs, player, KSHANBERK_KSHANBERK))
  982. {
  983. return "31002-44.html";
  984. }
  985. break;
  986. }
  987. case 30:
  988. {
  989. if (calculateReward(qs, player, INFERNO_MASTER))
  990. {
  991. return "31002-44.html";
  992. }
  993. break;
  994. }
  995. case 31:
  996. {
  997. if (calculateReward(qs, player, EYE_OF_SOUL))
  998. {
  999. return "31002-44.html";
  1000. }
  1001. break;
  1002. }
  1003. case 32:
  1004. {
  1005. if (calculateReward(qs, player, HAMMER_OF_DESTROYER))
  1006. {
  1007. return "31002-44.html";
  1008. }
  1009. break;
  1010. }
  1011. }
  1012. }
  1013. }
  1014. return htmltext;
  1015. }
  1016.  
  1017. private boolean calculateReward(QuestState qs, Player player, int reward)
  1018. {
  1019. switch (qs.getMemoState())
  1020. {
  1021. case 11:
  1022. {
  1023. return getReward(qs, player, SWORD_OF_DAMASCUS, SWORD_OF_DAMASCUS_FOCUS, SWORD_OF_DAMASCUS_CRT_DAMAGE, SWORD_OF_DAMASCUS_HASTE, reward);
  1024. }
  1025. case 12:
  1026. {
  1027. return getReward(qs, player, HAZARD_BOW, HAZARD_BOW_GUIDENCE, HAZARD_BOW_QUICKRECOVERY, HAZARD_BOW_CHEAPSHOT, reward);
  1028. }
  1029. case 13:
  1030. {
  1031. return getReward(qs, player, LANCIA, LANCIA_ANGER, LANCIA_CRT_STUN, LANCIA_LONGBLOW, reward);
  1032. }
  1033. case 14:
  1034. {
  1035. return getReward(qs, player, ART_OF_BATTLE_AXE, ART_OF_BATTLE_AXE_HEALTH, ART_OF_BATTLE_AXE_RSK_FOCUS, ART_OF_BATTLE_AXE_HASTE, reward);
  1036. }
  1037. case 15:
  1038. {
  1039. return getReward(qs, player, STAFF_OF_EVIL_SPRIT, STAFF_OF_EVIL_SPRIT_MAGICFOCUS, STAFF_OF_EVIL_SPRIT_MAGICBLESSTHEBODY, STAFF_OF_EVIL_SPRIT_MAGICPOISON, reward);
  1040. }
  1041. case 16:
  1042. {
  1043. return getReward(qs, player, DEMONS_SWORD, DEMONS_SWORD_CRT_BLEED, DEMONS_SWORD_CRT_POISON, DEMONS_SWORD_MIGHTMOTAL, reward);
  1044. }
  1045. case 17:
  1046. {
  1047. return getReward(qs, player, BELLION_CESTUS, BELLION_CESTUS_CRT_DRAIN, BELLION_CESTUS_CRT_POISON, BELLION_CESTUS_RSK_HASTE, reward);
  1048. }
  1049. case 18:
  1050. {
  1051. return getReward(qs, player, DEADMANS_GLORY, DEADMANS_GLORY_ANGER, DEADMANS_GLORY_HEALTH, DEADMANS_GLORY_HASTE, reward);
  1052. }
  1053. case 19:
  1054. {
  1055. return getReward(qs, player, SAMURAI_LONGSWORD_SAMURAI_LONGSWORD, 0, 0, 0, reward);
  1056. }
  1057. case 41:
  1058. {
  1059. return getReward(qs, player, GUARDIANS_SWORD, GUARDIANS_SWORD_CRT_DRAIN, GUARDIANS_SWORD_HEALTH, GUARDIANS_SWORD_CRT_BLEED, reward);
  1060. }
  1061. case 42:
  1062. {
  1063. return getReward(qs, player, TEARS_OF_WIZARD, TEARS_OF_WIZARD_ACUMEN, TEARS_OF_WIZARD_MAGICPOWER, TEARS_OF_WIZARD_UPDOWN, reward);
  1064. }
  1065. case 43:
  1066. {
  1067. return getReward(qs, player, STAR_BUSTER, STAR_BUSTER_HEALTH, STAR_BUSTER_HASTE, STAR_BUSTER_RSK_FOCUS, reward);
  1068. }
  1069. case 44:
  1070. {
  1071. return getReward(qs, player, BONE_OF_KAIM_VANUL, BONE_OF_KAIM_VANUL_MANAUP, BONE_OF_KAIM_VANUL_MAGICSILENCE, BONE_OF_KAIM_VANUL_UPDOWN, reward);
  1072. }
  1073. }
  1074. return false;
  1075. }
  1076.  
  1077. private boolean getReward(QuestState qs, Player player, int item1, int item2, int item3, int item4, int reward)
  1078. {
  1079. if (hasAtLeastOneQuestItem(player, item1, item2, item3, item4))
  1080. {
  1081. giveItems(player, reward, 1);
  1082. giveItems(player, Q_STAR_OF_DESTINY, 1);
  1083. if (hasQuestItems(player, item1))
  1084. {
  1085. takeItems(player, item1, 1);
  1086. }
  1087. else if (hasQuestItems(player, item2))
  1088. {
  1089. takeItems(player, item2, 1);
  1090. }
  1091. else if (hasQuestItems(player, item3))
  1092. {
  1093. takeItems(player, item3, 1);
  1094. }
  1095. else if (hasQuestItems(player, item4))
  1096. {
  1097. takeItems(player, item4, 1);
  1098. }
  1099. qs.exitQuest(false, true);
  1100. player.broadcastSocialAction(3);
  1101. return true;
  1102. }
  1103. return false;
  1104. }
  1105.  
  1106. @Override
  1107. public String onKill(Npc npc, Player killer, boolean isSummon)
  1108. {
  1109. switch (npc.getId())
  1110. {
  1111. case DOMB_DEATH_CABRIO:
  1112. {
  1113. addSpawn(COFFER_OF_THE_DEAD, npc.getLocation());
  1114. return super.onKill(npc, killer, isSummon);
  1115. }
  1116. case KERNON:
  1117. {
  1118. addSpawn(CHEST_OF_KERNON, npc.getLocation());
  1119. return super.onKill(npc, killer, isSummon);
  1120. }
  1121. case GOLKONDA_LONGHORN:
  1122. {
  1123. addSpawn(CHEST_OF_GOLKONDA, npc.getLocation());
  1124. return super.onKill(npc, killer, isSummon);
  1125. }
  1126. case HALLATE_THE_DEATH_LORD:
  1127. {
  1128. addSpawn(CHEST_OF_HALLATE, npc.getLocation());
  1129. return super.onKill(npc, killer, isSummon);
  1130. }
  1131. }
  1132. final QuestState qs = getRandomPlayerFromParty(killer, npc, 8);
  1133. if (qs != null)
  1134. {
  1135. switch (npc.getId())
  1136. {
  1137. case PLATINUM_TRIBE_GRUNT:
  1138. case PLATINUM_TRIBE_ARCHER:
  1139. case PLATINUM_TRIBE_WARRIOR:
  1140. case PLATINUM_TRIBE_SHAMAN:
  1141. case PLATINUM_TRIBE_LORD:
  1142. case GUARDIAN_ANGEL:
  1143. case SEAL_ANGEL:
  1144. case SEAL_ANGEL_R:
  1145. {
  1146. final Player member = qs.getPlayer();
  1147. if (member != null)
  1148. {
  1149. takeItems(member, Q_WHITE_FABRIC_Q0234, 1);
  1150. giveItems(member, Q_BLOODY_FABRIC_Q0234, 1);
  1151. if (getQuestItemsCount(member, Q_BLOODY_FABRIC_Q0234) >= 30)
  1152. {
  1153. qs.setCond(9, true);
  1154. qs.showQuestionMark(234);
  1155. }
  1156. else
  1157. {
  1158. playSound(member, QuestSound.ITEMSOUND_QUEST_ITEMGET);
  1159. }
  1160. }
  1161. break;
  1162. }
  1163. }
  1164. }
  1165. return super.onKill(npc, killer, isSummon);
  1166. }
  1167.  
  1168. @Override
  1169. public String onAttack(Npc npc, Player attacker, int damage, boolean isSummon)
  1170. {
  1171. final QuestState qs = getQuestState(attacker, false);
  1172. if ((qs != null) && (attacker.getActiveWeaponItem() != null) && (attacker.getActiveWeaponItem().getId() == Q_PIPETTE_KNIFE))
  1173. {
  1174. takeItems(attacker, Q_PIPETTE_KNIFE, 1);
  1175. giveItems(attacker, Q_RED_PIPETTE_KNIFE, 1);
  1176. playSound(attacker, QuestSound.ITEMSOUND_QUEST_ITEMGET);
  1177. npc.broadcastPacket(new NpcSay(npc.getObjectId(), ChatType.GENERAL, npc.getId(), NpcStringId.WHO_DARES_TO_TRY_AND_STEAL_MY_NOBLE_BLOOD));
  1178. }
  1179. return super.onAttack(npc, attacker, damage, isSummon);
  1180. }
  1181.  
  1182. private QuestState getRandomPlayerFromParty(Player player, Npc npc, int memoState)
  1183. {
  1184. final List<QuestState> candidates = new ArrayList<>();
  1185. final QuestState qs = getQuestState(player, false);
  1186. if ((qs != null) && qs.isStarted() && (qs.getMemoState() == memoState) && hasQuestItems(player, Q_WHITE_FABRIC_Q0234))
  1187. {
  1188. candidates.add(qs);
  1189. }
  1190. if (player.isInParty())
  1191. {
  1192. player.getParty().getMembers().stream().forEach(pm ->
  1193. {
  1194. final QuestState qs2 = getQuestState(pm, false);
  1195. if ((qs2 != null) && qs2.isStarted() && (qs2.getMemoState() == memoState) && hasQuestItems(player, Q_WHITE_FABRIC_Q0234) && Util.checkIfInRange(Config.ALT_PARTY_RANGE, npc, pm, true))
  1196. {
  1197. candidates.add(qs2);
  1198. }
  1199. });
  1200. }
  1201. return getRandomEntry(candidates);
  1202. }
  1203. }
  1204.  
Advertisement
Add Comment
Please, Sign In to add comment