Q00422_RepentYourSins.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509
  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.Q00422_RepentYourSins;
  20. import com.l2jserver.gameserver.enums.QuestSound;
  21. import com.l2jserver.gameserver.model.actor.L2Npc;
  22. import com.l2jserver.gameserver.model.actor.L2Summon;
  23. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  24. import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
  25. import com.l2jserver.gameserver.model.quest.Quest;
  26. import com.l2jserver.gameserver.model.quest.QuestState;
  27. import com.l2jserver.gameserver.util.Util;
  28. /**
  29. * Repent Your Sins (422)
  30. * @author ivantotov
  31. */
  32. public final class Q00422_RepentYourSins extends Quest
  33. {
  34. // NPCs
  35. private static final int BLACKSMITH_PUSHKIN = 30300;
  36. private static final int PIOTUR = 30597;
  37. private static final int ELDER_CASIAN = 30612;
  38. private static final int KATARI = 30668;
  39. private static final int MAGISTER_JOAN = 30718;
  40. private static final int BLACK_JUDGE = 30981;
  41. // Items
  42. private static final int RATMAN_SCAVENGERS_SKULL = 4326;
  43. private static final int TUREK_WAR_HOUNDS_TAIL = 4327;
  44. private static final int TYRANT_KINGPINS_HEART = 4328;
  45. private static final int TRISALIM_TARANTULAS_VENOM_SAC = 4329;
  46. private static final int PENITENTS_MANACLES1 = 4330;
  47. private static final int MANUAL_OF_MANACLES = 4331;
  48. private static final int PENITENTS_MANACLES = 4425;
  49. // Reward
  50. private static final int MANACLES_OF_PENITENT = 4426;
  51. // Materials
  52. private static final int SILVER_NUGGET = 1873;
  53. private static final int ADAMANTITE_NUGGET = 1877;
  54. private static final int COKES = 1879;
  55. private static final int STEEL = 1880;
  56. private static final int BLACKSMITHS_FRAME = 1892;
  57. // Monster
  58. private static final int SCAVENGER_WERERAT = 20039;
  59. private static final int TYRANT_KINGPIN = 20193;
  60. private static final int TUREK_WAR_HOUND = 20494;
  61. private static final int TRISALIM_TARANTULA = 20561;
  62. public Q00422_RepentYourSins()
  63. {
  64. super(422, Q00422_RepentYourSins.class.getSimpleName(), "Repent Your Sins");
  65. addStartNpc(BLACK_JUDGE);
  66. addTalkId(BLACK_JUDGE, BLACKSMITH_PUSHKIN, PIOTUR, ELDER_CASIAN, KATARI, MAGISTER_JOAN);
  67. addKillId(SCAVENGER_WERERAT, TYRANT_KINGPIN, TUREK_WAR_HOUND, TRISALIM_TARANTULA);
  68. registerQuestItems(RATMAN_SCAVENGERS_SKULL, TUREK_WAR_HOUNDS_TAIL, TYRANT_KINGPINS_HEART, TRISALIM_TARANTULAS_VENOM_SAC, PENITENTS_MANACLES1, MANUAL_OF_MANACLES, PENITENTS_MANACLES);
  69. }
  70. @Override
  71. public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  72. {
  73. final QuestState qs = getQuestState(player, false);
  74. if (qs == null)
  75. {
  76. return null;
  77. }
  78. String htmltext = null;
  79. switch (event)
  80. {
  81. case "ACCEPT":
  82. {
  83. qs.startQuest();
  84. if ((player.getLevel() > 20) && (player.getLevel() < 31))
  85. {
  86. playSound(player, QuestSound.ITEMSOUND_QUEST_ACCEPT);
  87. qs.setMemoState(2);
  88. qs.setCond(3);
  89. htmltext = "30981-04.htm";
  90. }
  91. else if (player.getLevel() < 21)
  92. {
  93. qs.setMemoState(1);
  94. qs.setMemoStateEx(1, 0);
  95. qs.setCond(2);
  96. htmltext = "30981-03.htm";
  97. }
  98. else if ((player.getLevel() > 30) && (player.getLevel() < 41))
  99. {
  100. qs.setMemoState(3);
  101. qs.setCond(4);
  102. htmltext = "30981-05.htm";
  103. }
  104. else
  105. {
  106. qs.setMemoState(4);
  107. qs.setCond(5);
  108. htmltext = "30981-06.htm";
  109. }
  110. break;
  111. }
  112. case "30981-11.html":
  113. {
  114. if ((qs.getMemoState() >= 9) && (qs.getMemoState() <= 12))
  115. {
  116. if (hasAtLeastOneQuestItem(player, MANACLES_OF_PENITENT, PENITENTS_MANACLES1))
  117. {
  118. if (hasQuestItems(player, PENITENTS_MANACLES1))
  119. {
  120. takeItems(player, PENITENTS_MANACLES1, 1);
  121. }
  122. if (hasQuestItems(player, MANACLES_OF_PENITENT))
  123. {
  124. takeItems(player, MANACLES_OF_PENITENT, 1);
  125. }
  126. qs.setMemoStateEx(1, player.getLevel());
  127. giveItems(player, PENITENTS_MANACLES, 1);
  128. qs.setCond(16);
  129. htmltext = event;
  130. }
  131. }
  132. break;
  133. }
  134. case "30981-14.html":
  135. case "30981-17.html":
  136. {
  137. if ((qs.getMemoState() >= 9) && (qs.getMemoState() <= 12))
  138. {
  139. htmltext = event;
  140. }
  141. break;
  142. }
  143. case "30981-15t.html":
  144. {
  145. final L2ItemInstance petItem = player.getInventory().getItemByItemId(PENITENTS_MANACLES);
  146. final int petLevel = (petItem == null) ? 0 : petItem.getEnchantLevel();
  147. if ((qs.getMemoState() >= 9) && (qs.getMemoState() <= 12) && (petLevel > qs.getMemoStateEx(1)))
  148. {
  149. final L2Summon summon = player.getSummon();
  150. if (summon != null)
  151. {
  152. htmltext = event;
  153. }
  154. else
  155. {
  156. int i1 = 0;
  157. if (player.getLevel() > qs.getMemoStateEx(1))
  158. {
  159. i1 = petLevel - qs.getMemoStateEx(1) - (player.getLevel() - qs.getMemoStateEx(1));
  160. }
  161. else
  162. {
  163. i1 = petLevel - qs.getMemoStateEx(1);
  164. }
  165. if (i1 < 0)
  166. {
  167. i1 = 0;
  168. }
  169. int i0 = getRandom(i1) + 1;
  170. if (player.getPkKills() <= i0)
  171. {
  172. giveItems(player, MANACLES_OF_PENITENT, 1);
  173. if (petItem != null)
  174. {
  175. takeItems(player, PENITENTS_MANACLES, -1);
  176. }
  177. htmltext = "30981-15.html";
  178. player.setPkKills(0);
  179. qs.exitQuest(true, true);
  180. }
  181. else
  182. {
  183. giveItems(player, MANACLES_OF_PENITENT, 1);
  184. if (petItem != null)
  185. {
  186. takeItems(player, PENITENTS_MANACLES, -1);
  187. }
  188. htmltext = "30981-16.html";
  189. player.setPkKills(player.getPkKills() - i0);
  190. qs.setMemoStateEx(1, 0);
  191. }
  192. }
  193. }
  194. break;
  195. }
  196. case "30981-18.html":
  197. {
  198. if ((qs.getMemoState() >= 9) && (qs.getMemoState() <= 12))
  199. {
  200. qs.exitQuest(true, true);
  201. htmltext = event;
  202. }
  203. break;
  204. }
  205. }
  206. return htmltext;
  207. }
  208. @Override
  209. public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
  210. {
  211. final QuestState qs = getQuestState(killer, false);
  212. if ((qs != null) && qs.isStarted() && Util.checkIfInRange(1500, npc, killer, true))
  213. {
  214. switch (npc.getId())
  215. {
  216. case SCAVENGER_WERERAT:
  217. {
  218. if (qs.isMemoState(5) && (getQuestItemsCount(killer, RATMAN_SCAVENGERS_SKULL) < 10))
  219. {
  220. if (getQuestItemsCount(killer, RATMAN_SCAVENGERS_SKULL) == 9)
  221. {
  222. giveItems(killer, RATMAN_SCAVENGERS_SKULL, 1);
  223. playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE);
  224. }
  225. else
  226. {
  227. giveItems(killer, RATMAN_SCAVENGERS_SKULL, 1);
  228. playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
  229. }
  230. }
  231. break;
  232. }
  233. case TYRANT_KINGPIN:
  234. {
  235. if (qs.isMemoState(7) && !hasQuestItems(killer, TYRANT_KINGPINS_HEART))
  236. {
  237. giveItems(killer, TYRANT_KINGPINS_HEART, 1);
  238. playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE);
  239. }
  240. break;
  241. }
  242. case TUREK_WAR_HOUND:
  243. {
  244. if (qs.isMemoState(6) && (getQuestItemsCount(killer, TUREK_WAR_HOUNDS_TAIL) < 10))
  245. {
  246. if (getQuestItemsCount(killer, TUREK_WAR_HOUNDS_TAIL) == 9)
  247. {
  248. giveItems(killer, TUREK_WAR_HOUNDS_TAIL, 1);
  249. playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE);
  250. }
  251. else
  252. {
  253. giveItems(killer, TUREK_WAR_HOUNDS_TAIL, 1);
  254. playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
  255. }
  256. }
  257. break;
  258. }
  259. case TRISALIM_TARANTULA:
  260. {
  261. if (qs.isMemoState(8) && (getQuestItemsCount(killer, TRISALIM_TARANTULAS_VENOM_SAC) < 3))
  262. {
  263. if (getQuestItemsCount(killer, TRISALIM_TARANTULAS_VENOM_SAC) == 2)
  264. {
  265. giveItems(killer, TRISALIM_TARANTULAS_VENOM_SAC, 1);
  266. playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE);
  267. }
  268. else
  269. {
  270. giveItems(killer, TRISALIM_TARANTULAS_VENOM_SAC, 1);
  271. playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
  272. }
  273. }
  274. break;
  275. }
  276. }
  277. }
  278. return super.onKill(npc, killer, isSummon);
  279. }
  280. @Override
  281. public String onTalk(L2Npc npc, L2PcInstance player)
  282. {
  283. final QuestState qs = getQuestState(player, true);
  284. final int memoState = qs.getMemoState();
  285. String htmltext = getNoQuestMsg(player);
  286. if (qs.isCreated())
  287. {
  288. if (npc.getId() == BLACK_JUDGE)
  289. {
  290. if (player.getPkKills() == 0)
  291. {
  292. htmltext = "30981-01.htm";
  293. }
  294. else
  295. {
  296. htmltext = "30981-02.htm";
  297. }
  298. }
  299. }
  300. else if (qs.isStarted())
  301. {
  302. switch (npc.getId())
  303. {
  304. case BLACK_JUDGE:
  305. {
  306. if (memoState == 1000)
  307. {
  308. takeItems(player, PENITENTS_MANACLES, 1);
  309. }
  310. else if (memoState < 9)
  311. {
  312. htmltext = "30981-07.html";
  313. }
  314. else if ((memoState >= 9) && (memoState <= 12))
  315. {
  316. if (!hasAtLeastOneQuestItem(player, MANUAL_OF_MANACLES, MANACLES_OF_PENITENT, PENITENTS_MANACLES1, PENITENTS_MANACLES))
  317. {
  318. giveItems(player, MANUAL_OF_MANACLES, 1);
  319. qs.setCond(14, true);
  320. htmltext = "30981-08.html";
  321. }
  322. else if (hasQuestItems(player, MANUAL_OF_MANACLES) && !hasAtLeastOneQuestItem(player, MANACLES_OF_PENITENT, PENITENTS_MANACLES1, PENITENTS_MANACLES))
  323. {
  324. htmltext = "30981-09.html";
  325. }
  326. else if (hasQuestItems(player, PENITENTS_MANACLES1) && !hasAtLeastOneQuestItem(player, MANUAL_OF_MANACLES, MANACLES_OF_PENITENT, PENITENTS_MANACLES))
  327. {
  328. htmltext = "30981-10.html";
  329. }
  330. else if (hasQuestItems(player, PENITENTS_MANACLES))
  331. {
  332. final L2ItemInstance petItem = player.getInventory().getItemByItemId(PENITENTS_MANACLES);
  333. final int petLevel = (petItem == null) ? 0 : petItem.getEnchantLevel();
  334. if (petLevel < (qs.getMemoStateEx(1) + 1))
  335. {
  336. htmltext = "30981-12.html";
  337. }
  338. else
  339. {
  340. htmltext = "30981-13.html";
  341. }
  342. }
  343. else if (hasQuestItems(player, MANACLES_OF_PENITENT) && !hasQuestItems(player, PENITENTS_MANACLES))
  344. {
  345. htmltext = "30981-16t.html";
  346. }
  347. }
  348. break;
  349. }
  350. case BLACKSMITH_PUSHKIN:
  351. {
  352. if ((memoState >= 9) && (memoState <= 12))
  353. {
  354. if (!hasAtLeastOneQuestItem(player, PENITENTS_MANACLES1, PENITENTS_MANACLES, MANACLES_OF_PENITENT) && hasQuestItems(player, MANUAL_OF_MANACLES))
  355. {
  356. if ((getQuestItemsCount(player, BLACKSMITHS_FRAME) > 0) && (getQuestItemsCount(player, STEEL) >= 5) && (getQuestItemsCount(player, ADAMANTITE_NUGGET) >= 2) && (getQuestItemsCount(player, SILVER_NUGGET) >= 10) && (getQuestItemsCount(player, COKES) >= 10))
  357. {
  358. takeItems(player, SILVER_NUGGET, 10);
  359. takeItems(player, ADAMANTITE_NUGGET, 2);
  360. takeItems(player, COKES, 10);
  361. takeItems(player, STEEL, 5);
  362. takeItems(player, BLACKSMITHS_FRAME, 1);
  363. giveItems(player, PENITENTS_MANACLES1, 1);
  364. takeItems(player, MANUAL_OF_MANACLES, 1);
  365. qs.setCond(15, true);
  366. htmltext = "30300-01.html";
  367. }
  368. else
  369. {
  370. htmltext = "30300-02.html";
  371. }
  372. }
  373. else if (hasAtLeastOneQuestItem(player, PENITENTS_MANACLES1, PENITENTS_MANACLES, MANACLES_OF_PENITENT))
  374. {
  375. htmltext = "30300-03.html";
  376. }
  377. }
  378. break;
  379. }
  380. case PIOTUR:
  381. {
  382. if (memoState == 2)
  383. {
  384. qs.setMemoState(6);
  385. qs.setCond(7, true);
  386. htmltext = "30597-01.html";
  387. }
  388. else if (memoState == 6)
  389. {
  390. if (getQuestItemsCount(player, TUREK_WAR_HOUNDS_TAIL) < 10)
  391. {
  392. htmltext = "30597-02.html";
  393. }
  394. else
  395. {
  396. takeItems(player, TUREK_WAR_HOUNDS_TAIL, -1);
  397. qs.setMemoState(10);
  398. qs.setCond(11, true);
  399. htmltext = "30597-03.html";
  400. }
  401. }
  402. else if (memoState == 10)
  403. {
  404. htmltext = "30597-04.html";
  405. }
  406. break;
  407. }
  408. case ELDER_CASIAN:
  409. {
  410. if (memoState == 3)
  411. {
  412. qs.setMemoState(7);
  413. qs.setCond(8, true);
  414. htmltext = "30612-01.html";
  415. }
  416. else if (memoState == 7)
  417. {
  418. if (!hasQuestItems(player, TYRANT_KINGPINS_HEART))
  419. {
  420. htmltext = "30612-02.html";
  421. }
  422. else
  423. {
  424. takeItems(player, TYRANT_KINGPINS_HEART, -1);
  425. qs.setMemoState(11);
  426. qs.setCond(12, true);
  427. htmltext = "30612-03.html";
  428. }
  429. }
  430. else if (memoState == 11)
  431. {
  432. htmltext = "30612-04.html";
  433. }
  434. break;
  435. }
  436. case KATARI:
  437. {
  438. if (memoState == 1)
  439. {
  440. qs.setMemoState(5);
  441. qs.setCond(6, true);
  442. htmltext = "30668-01.html";
  443. }
  444. else if (memoState == 5)
  445. {
  446. if (getQuestItemsCount(player, RATMAN_SCAVENGERS_SKULL) < 10)
  447. {
  448. htmltext = "30668-02.html";
  449. }
  450. else
  451. {
  452. takeItems(player, RATMAN_SCAVENGERS_SKULL, -1);
  453. qs.setMemoState(9);
  454. qs.setCond(10, true);
  455. htmltext = "30668-03.html";
  456. }
  457. }
  458. else if (memoState == 9)
  459. {
  460. htmltext = "30668-04.html";
  461. }
  462. break;
  463. }
  464. case MAGISTER_JOAN:
  465. {
  466. if (memoState == 4)
  467. {
  468. qs.setMemoState(8);
  469. qs.setCond(9, true);
  470. htmltext = "30718-01.html";
  471. }
  472. else if (memoState == 8)
  473. {
  474. if (getQuestItemsCount(player, TRISALIM_TARANTULAS_VENOM_SAC) < 3)
  475. {
  476. htmltext = "30718-02.html";
  477. }
  478. else
  479. {
  480. takeItems(player, TRISALIM_TARANTULAS_VENOM_SAC, -1);
  481. qs.setMemoState(12);
  482. qs.setCond(13, true);
  483. htmltext = "30718-03.html";
  484. }
  485. }
  486. else if (memoState == 12)
  487. {
  488. htmltext = "30718-04.html";
  489. }
  490. break;
  491. }
  492. }
  493. }
  494. return htmltext;
  495. }
  496. }