Q00418_PathOfTheArtisan.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639
  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.Q00418_PathOfTheArtisan;
  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.base.ClassId;
  24. import com.l2jserver.gameserver.model.quest.Quest;
  25. import com.l2jserver.gameserver.model.quest.QuestState;
  26. import com.l2jserver.gameserver.network.serverpackets.SocialAction;
  27. import com.l2jserver.gameserver.util.Util;
  28. /**
  29. * Path Of The Artisan (418)
  30. * @author ivantotov
  31. */
  32. public final class Q00418_PathOfTheArtisan extends Quest
  33. {
  34. // NPCs
  35. private static final int BLACKSMITH_SILVERA = 30527;
  36. private static final int BLACKSMITH_PINTER = 30298;
  37. private static final int BLACKSMITH_KLUTO = 30317;
  38. private static final int IRON_GATES_LOCKIRIN = 30531;
  39. private static final int WAREHOUSE_KEEPER_RYDEL = 31956;
  40. private static final int MINERAL_TRADER_HITCHI = 31963;
  41. private static final int RAILROAD_WORKER_OBI = 32052;
  42. // Items
  43. private static final int SILVERYS_RING = 1632;
  44. private static final int PASS_1ST_CERTIFICATE = 1633;
  45. private static final int PASS_2ND_CERTIFICATE = 1634;
  46. private static final int BOOGLE_RATMAN_TOOTH = 1636;
  47. private static final int BOOGLE_RATMAN_LEADERS_TOOTH = 1637;
  48. private static final int KLUTOS_LETTER = 1638;
  49. private static final int FOOTPRINT_OF_THIEF = 1639;
  50. private static final int STOLEN_SECRET_BOX = 1640;
  51. private static final int SECRET_BOX = 1641;
  52. // Reward
  53. private static final int FINAL_PASS_CERTIFICATE = 1635;
  54. // Monster
  55. private static final int VUKU_ORC_FIGHTER = 20017;
  56. private static final int BOOGLE_RATMAN = 20389;
  57. private static final int BOOGLE_RATMAN_LEADER = 20390;
  58. // Misc
  59. private static final int MIN_LEVEL = 18;
  60. public Q00418_PathOfTheArtisan()
  61. {
  62. super(418, Q00418_PathOfTheArtisan.class.getSimpleName(), "Path Of The Artisan");
  63. addStartNpc(BLACKSMITH_SILVERA);
  64. addTalkId(BLACKSMITH_SILVERA, BLACKSMITH_PINTER, BLACKSMITH_KLUTO, IRON_GATES_LOCKIRIN, WAREHOUSE_KEEPER_RYDEL, MINERAL_TRADER_HITCHI, RAILROAD_WORKER_OBI);
  65. addKillId(VUKU_ORC_FIGHTER, BOOGLE_RATMAN, BOOGLE_RATMAN_LEADER);
  66. registerQuestItems(SILVERYS_RING, PASS_1ST_CERTIFICATE, PASS_2ND_CERTIFICATE, BOOGLE_RATMAN_TOOTH, BOOGLE_RATMAN_LEADERS_TOOTH, KLUTOS_LETTER, FOOTPRINT_OF_THIEF, STOLEN_SECRET_BOX, SECRET_BOX);
  67. }
  68. @Override
  69. public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  70. {
  71. final QuestState qs = getQuestState(player, false);
  72. if (qs == null)
  73. {
  74. return null;
  75. }
  76. String htmltext = null;
  77. switch (event)
  78. {
  79. case "ACCEPT":
  80. {
  81. if (player.getClassId() == ClassId.dwarvenFighter)
  82. {
  83. if (player.getLevel() >= MIN_LEVEL)
  84. {
  85. if (hasQuestItems(player, FINAL_PASS_CERTIFICATE))
  86. {
  87. htmltext = "30527-04.htm";
  88. }
  89. else
  90. {
  91. htmltext = "30527-05.htm";
  92. }
  93. }
  94. else
  95. {
  96. htmltext = "30527-03.htm";
  97. }
  98. }
  99. else if (player.getClassId() == ClassId.artisan)
  100. {
  101. htmltext = "30527-02a.htm";
  102. }
  103. else
  104. {
  105. htmltext = "30527-02.htm";
  106. }
  107. break;
  108. }
  109. case "30527-06.htm":
  110. {
  111. qs.startQuest();
  112. giveItems(player, SILVERYS_RING, 1);
  113. htmltext = event;
  114. break;
  115. }
  116. case "30527-08b.html":
  117. {
  118. takeItems(player, SILVERYS_RING, 1);
  119. takeItems(player, BOOGLE_RATMAN_TOOTH, -1);
  120. takeItems(player, BOOGLE_RATMAN_LEADERS_TOOTH, -1);
  121. giveItems(player, PASS_1ST_CERTIFICATE, 1);
  122. qs.setCond(3, true);
  123. htmltext = event;
  124. break;
  125. }
  126. case "30527-08c.html":
  127. {
  128. takeItems(player, SILVERYS_RING, 1);
  129. takeItems(player, BOOGLE_RATMAN_TOOTH, -1);
  130. takeItems(player, BOOGLE_RATMAN_LEADERS_TOOTH, -1);
  131. qs.setMemoState(10);
  132. qs.setCond(8, true);
  133. htmltext = event;
  134. break;
  135. }
  136. case "30298-02.html":
  137. case "30317-02.html":
  138. case "30317-03.html":
  139. case "30317-05.html":
  140. case "30317-06.html":
  141. case "30317-11.html":
  142. case "30531-02.html":
  143. case "30531-03.html":
  144. case "30531-04.html":
  145. case "31956-02.html":
  146. case "31956-03.html":
  147. case "32052-02.html":
  148. case "32052-03.html":
  149. case "32052-04.html":
  150. case "32052-05.html":
  151. case "32052-06.html":
  152. case "32052-10.html":
  153. case "32052-11.html":
  154. case "32052-12.html":
  155. {
  156. htmltext = event;
  157. break;
  158. }
  159. case "30298-03.html":
  160. {
  161. if (hasQuestItems(player, KLUTOS_LETTER))
  162. {
  163. takeItems(player, KLUTOS_LETTER, 1);
  164. giveItems(player, FOOTPRINT_OF_THIEF, 1);
  165. qs.setCond(5, true);
  166. htmltext = event;
  167. }
  168. break;
  169. }
  170. case "30298-06.html":
  171. {
  172. if (hasQuestItems(player, FOOTPRINT_OF_THIEF, STOLEN_SECRET_BOX))
  173. {
  174. giveItems(player, PASS_2ND_CERTIFICATE, 1);
  175. takeItems(player, FOOTPRINT_OF_THIEF, 1);
  176. takeItems(player, STOLEN_SECRET_BOX, 1);
  177. giveItems(player, SECRET_BOX, 1);
  178. qs.setCond(7, true);
  179. htmltext = event;
  180. }
  181. break;
  182. }
  183. case "30317-04.html":
  184. {
  185. giveItems(player, KLUTOS_LETTER, 1);
  186. qs.setCond(4, true);
  187. htmltext = event;
  188. break;
  189. }
  190. case "30317-07.html":
  191. {
  192. giveItems(player, KLUTOS_LETTER, 1);
  193. qs.setCond(4);
  194. htmltext = event;
  195. break;
  196. }
  197. case "30317-10.html":
  198. {
  199. if (hasQuestItems(player, PASS_2ND_CERTIFICATE, SECRET_BOX))
  200. {
  201. giveAdena(player, 163800, true);
  202. giveItems(player, FINAL_PASS_CERTIFICATE, 1);
  203. final int level = player.getLevel();
  204. if (level >= 20)
  205. {
  206. addExpAndSp(player, 320534, 32452);
  207. }
  208. else if (level == 19)
  209. {
  210. addExpAndSp(player, 456128, 30150);
  211. }
  212. else
  213. {
  214. addExpAndSp(player, 591724, 36848);
  215. }
  216. qs.exitQuest(false, true);
  217. player.sendPacket(new SocialAction(player.getObjectId(), 3));
  218. qs.saveGlobalQuestVar("1ClassQuestFinished", "1");
  219. htmltext = event;
  220. }
  221. break;
  222. }
  223. case "30317-12.html":
  224. {
  225. if (hasQuestItems(player, PASS_2ND_CERTIFICATE, SECRET_BOX))
  226. {
  227. giveAdena(player, 81900, true);
  228. giveItems(player, FINAL_PASS_CERTIFICATE, 1);
  229. final int level = player.getLevel();
  230. if (level >= 20)
  231. {
  232. addExpAndSp(player, 160267, 11726);
  233. }
  234. else if (level == 19)
  235. {
  236. addExpAndSp(player, 228064, 15075);
  237. }
  238. else
  239. {
  240. addExpAndSp(player, 295862, 18424);
  241. }
  242. qs.exitQuest(false, true);
  243. player.sendPacket(new SocialAction(player.getObjectId(), 3));
  244. qs.saveGlobalQuestVar("1ClassQuestFinished", "1");
  245. htmltext = event;
  246. }
  247. break;
  248. }
  249. case "30531-05.html":
  250. {
  251. if (qs.isMemoState(101))
  252. {
  253. giveAdena(player, 81900, true);
  254. giveItems(player, FINAL_PASS_CERTIFICATE, 1);
  255. final int level = player.getLevel();
  256. if (level >= 20)
  257. {
  258. addExpAndSp(player, 160267, 11726);
  259. }
  260. else if (level == 19)
  261. {
  262. addExpAndSp(player, 228064, 15075);
  263. }
  264. else
  265. {
  266. addExpAndSp(player, 295862, 18424);
  267. }
  268. qs.exitQuest(false, true);
  269. player.sendPacket(new SocialAction(player.getObjectId(), 3));
  270. qs.saveGlobalQuestVar("1ClassQuestFinished", "1");
  271. htmltext = event;
  272. }
  273. break;
  274. }
  275. case "31956-04.html":
  276. {
  277. if (qs.isMemoState(201))
  278. {
  279. giveAdena(player, 81900, true);
  280. giveItems(player, FINAL_PASS_CERTIFICATE, 1);
  281. final int level = player.getLevel();
  282. if (level >= 20)
  283. {
  284. addExpAndSp(player, 160267, 11726);
  285. }
  286. else if (level == 19)
  287. {
  288. addExpAndSp(player, 228064, 15075);
  289. }
  290. else
  291. {
  292. addExpAndSp(player, 295862, 18424);
  293. }
  294. qs.exitQuest(false, true);
  295. player.sendPacket(new SocialAction(player.getObjectId(), 3));
  296. qs.saveGlobalQuestVar("1ClassQuestFinished", "1");
  297. htmltext = event;
  298. }
  299. break;
  300. }
  301. case "31963-02.html":
  302. case "31963-06.html":
  303. {
  304. if (qs.isMemoState(100))
  305. {
  306. htmltext = event;
  307. }
  308. break;
  309. }
  310. case "31963-03.html":
  311. {
  312. if (qs.isMemoState(100))
  313. {
  314. qs.setMemoState(101);
  315. qs.setCond(10, true);
  316. htmltext = event;
  317. }
  318. break;
  319. }
  320. case "31963-05.html":
  321. {
  322. if (qs.isMemoState(100))
  323. {
  324. qs.setMemoState(102);
  325. qs.setCond(11, true);
  326. htmltext = event;
  327. }
  328. break;
  329. }
  330. case "31963-07.html":
  331. {
  332. if (qs.isMemoState(100))
  333. {
  334. qs.setMemoState(201);
  335. qs.setCond(12, true);
  336. htmltext = event;
  337. }
  338. break;
  339. }
  340. case "31963-09.html":
  341. {
  342. if (qs.isMemoState(100))
  343. {
  344. qs.setMemoState(202);
  345. htmltext = event;
  346. }
  347. break;
  348. }
  349. case "31963-10.html":
  350. {
  351. if (qs.isMemoState(202))
  352. {
  353. giveAdena(player, 81900, true);
  354. giveItems(player, FINAL_PASS_CERTIFICATE, 1);
  355. final int level = player.getLevel();
  356. if (level >= 20)
  357. {
  358. addExpAndSp(player, 160267, 11726);
  359. }
  360. else if (level == 19)
  361. {
  362. addExpAndSp(player, 228064, 15075);
  363. }
  364. else
  365. {
  366. addExpAndSp(player, 295862, 18424);
  367. }
  368. qs.exitQuest(false, true);
  369. player.sendPacket(new SocialAction(player.getObjectId(), 3));
  370. qs.saveGlobalQuestVar("1ClassQuestFinished", "1");
  371. htmltext = event;
  372. }
  373. break;
  374. }
  375. case "32052-07.html":
  376. {
  377. if (qs.isMemoState(10))
  378. {
  379. qs.setMemoState(100);
  380. qs.setCond(9, true);
  381. htmltext = event;
  382. }
  383. break;
  384. }
  385. case "32052-13.html":
  386. {
  387. if (qs.isMemoState(102))
  388. {
  389. giveAdena(player, 81900, true);
  390. giveItems(player, FINAL_PASS_CERTIFICATE, 1);
  391. final int level = player.getLevel();
  392. if (level >= 20)
  393. {
  394. addExpAndSp(player, 160267, 11726);
  395. }
  396. else if (level == 19)
  397. {
  398. addExpAndSp(player, 228064, 15075);
  399. }
  400. else
  401. {
  402. addExpAndSp(player, 295862, 18424);
  403. }
  404. qs.exitQuest(false, true);
  405. player.sendPacket(new SocialAction(player.getObjectId(), 3));
  406. qs.saveGlobalQuestVar("1ClassQuestFinished", "1");
  407. htmltext = event;
  408. }
  409. break;
  410. }
  411. }
  412. return htmltext;
  413. }
  414. @Override
  415. public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
  416. {
  417. final QuestState qs = getQuestState(killer, false);
  418. if ((qs != null) && qs.isStarted() && Util.checkIfInRange(1500, npc, killer, true))
  419. {
  420. switch (npc.getId())
  421. {
  422. case VUKU_ORC_FIGHTER:
  423. {
  424. if (hasQuestItems(killer, FOOTPRINT_OF_THIEF) && !hasQuestItems(killer, STOLEN_SECRET_BOX))
  425. {
  426. if (getRandom(10) < 2)
  427. {
  428. giveItems(killer, STOLEN_SECRET_BOX, 1);
  429. qs.setCond(6, true);
  430. }
  431. }
  432. break;
  433. }
  434. case BOOGLE_RATMAN:
  435. {
  436. if (hasQuestItems(killer, SILVERYS_RING) && (getQuestItemsCount(killer, BOOGLE_RATMAN_TOOTH) < 10))
  437. {
  438. if (getRandom(10) < 7)
  439. {
  440. if (getQuestItemsCount(killer, BOOGLE_RATMAN_TOOTH) == 9)
  441. {
  442. giveItems(killer, BOOGLE_RATMAN_TOOTH, 1);
  443. playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE);
  444. if (getQuestItemsCount(killer, BOOGLE_RATMAN_LEADERS_TOOTH) >= 2)
  445. {
  446. qs.setCond(2);
  447. }
  448. }
  449. else
  450. {
  451. giveItems(killer, BOOGLE_RATMAN_TOOTH, 1);
  452. playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
  453. }
  454. }
  455. }
  456. break;
  457. }
  458. case BOOGLE_RATMAN_LEADER:
  459. {
  460. if (hasQuestItems(killer, SILVERYS_RING) && (getQuestItemsCount(killer, BOOGLE_RATMAN_LEADERS_TOOTH) < 2))
  461. {
  462. if (getRandom(10) < 5)
  463. {
  464. if (getQuestItemsCount(killer, BOOGLE_RATMAN_LEADERS_TOOTH) == 1)
  465. {
  466. giveItems(killer, BOOGLE_RATMAN_LEADERS_TOOTH, 1);
  467. playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE);
  468. if (getQuestItemsCount(killer, BOOGLE_RATMAN_TOOTH) >= 10)
  469. {
  470. qs.setCond(2);
  471. }
  472. }
  473. }
  474. else
  475. {
  476. giveItems(killer, BOOGLE_RATMAN_LEADERS_TOOTH, 1);
  477. playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
  478. }
  479. }
  480. break;
  481. }
  482. }
  483. }
  484. return super.onKill(npc, killer, isSummon);
  485. }
  486. @Override
  487. public String onTalk(L2Npc npc, L2PcInstance player)
  488. {
  489. final QuestState qs = getQuestState(player, true);
  490. String htmltext = getNoQuestMsg(player);
  491. if (qs.isCreated() || qs.isCompleted())
  492. {
  493. if (npc.getId() == BLACKSMITH_SILVERA)
  494. {
  495. htmltext = "30527-01.htm";
  496. }
  497. }
  498. else if (qs.isStarted())
  499. {
  500. switch (npc.getId())
  501. {
  502. case BLACKSMITH_SILVERA:
  503. {
  504. if (hasQuestItems(player, SILVERYS_RING) && ((getQuestItemsCount(player, BOOGLE_RATMAN_TOOTH) + getQuestItemsCount(player, BOOGLE_RATMAN_LEADERS_TOOTH)) < 12))
  505. {
  506. htmltext = "30527-07.html";
  507. }
  508. else if (hasQuestItems(player, SILVERYS_RING) && (getQuestItemsCount(player, BOOGLE_RATMAN_TOOTH) >= 10) && (getQuestItemsCount(player, BOOGLE_RATMAN_LEADERS_TOOTH) >= 2))
  509. {
  510. htmltext = "30527-08a.html";
  511. }
  512. else if (hasQuestItems(player, PASS_1ST_CERTIFICATE))
  513. {
  514. htmltext = "30527-09.html";
  515. }
  516. else if (!hasQuestItems(player, PASS_1ST_CERTIFICATE) && qs.isMemoState(10))
  517. {
  518. htmltext = "30527-09a.html";
  519. }
  520. break;
  521. }
  522. case BLACKSMITH_PINTER:
  523. {
  524. if (hasQuestItems(player, PASS_1ST_CERTIFICATE, KLUTOS_LETTER))
  525. {
  526. htmltext = "30298-01.html";
  527. }
  528. else if (hasQuestItems(player, PASS_1ST_CERTIFICATE, FOOTPRINT_OF_THIEF) && !hasQuestItems(player, STOLEN_SECRET_BOX))
  529. {
  530. htmltext = "30298-04.html";
  531. }
  532. else if (hasQuestItems(player, PASS_1ST_CERTIFICATE, FOOTPRINT_OF_THIEF, STOLEN_SECRET_BOX))
  533. {
  534. htmltext = "30298-05.html";
  535. }
  536. else if (hasQuestItems(player, PASS_1ST_CERTIFICATE, PASS_2ND_CERTIFICATE, SECRET_BOX))
  537. {
  538. htmltext = "30298-07.html";
  539. }
  540. break;
  541. }
  542. case BLACKSMITH_KLUTO:
  543. {
  544. if (hasQuestItems(player, PASS_1ST_CERTIFICATE) && !hasAtLeastOneQuestItem(player, FOOTPRINT_OF_THIEF, KLUTOS_LETTER, PASS_2ND_CERTIFICATE, SECRET_BOX))
  545. {
  546. htmltext = "30317-01.html";
  547. }
  548. else if (hasQuestItems(player, PASS_1ST_CERTIFICATE) && hasAtLeastOneQuestItem(player, KLUTOS_LETTER, FOOTPRINT_OF_THIEF))
  549. {
  550. htmltext = "30317-08.html";
  551. }
  552. else if (hasQuestItems(player, PASS_1ST_CERTIFICATE, PASS_2ND_CERTIFICATE, SECRET_BOX))
  553. {
  554. htmltext = "30317-09.html";
  555. }
  556. break;
  557. }
  558. case IRON_GATES_LOCKIRIN:
  559. {
  560. if (qs.isMemoState(101))
  561. {
  562. htmltext = "30531-01.html";
  563. }
  564. break;
  565. }
  566. case WAREHOUSE_KEEPER_RYDEL:
  567. {
  568. if (qs.isMemoState(201))
  569. {
  570. htmltext = "31956-01.html";
  571. }
  572. break;
  573. }
  574. case MINERAL_TRADER_HITCHI:
  575. {
  576. switch (qs.getMemoState())
  577. {
  578. case 100:
  579. {
  580. htmltext = "31963-01.html";
  581. break;
  582. }
  583. case 101:
  584. {
  585. htmltext = "31963-04.html";
  586. break;
  587. }
  588. case 102:
  589. {
  590. htmltext = "31963-06a.html";
  591. break;
  592. }
  593. case 201:
  594. {
  595. htmltext = "31963-08.html";
  596. break;
  597. }
  598. case 202:
  599. {
  600. htmltext = "31963-11.html";
  601. break;
  602. }
  603. }
  604. break;
  605. }
  606. case RAILROAD_WORKER_OBI:
  607. {
  608. switch (qs.getMemoState())
  609. {
  610. case 10:
  611. {
  612. htmltext = "32052-01.html";
  613. break;
  614. }
  615. case 100:
  616. {
  617. htmltext = "32052-08.html";
  618. break;
  619. }
  620. case 102:
  621. {
  622. htmltext = "32052-09.html";
  623. break;
  624. }
  625. }
  626. break;
  627. }
  628. }
  629. }
  630. return htmltext;
  631. }
  632. }