Q00063_PathOfTheWarder.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539
  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.Q00063_PathOfTheWarder;
  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 Warder (63)
  30. * @author ivantotov
  31. */
  32. public final class Q00063_PathOfTheWarder extends Quest
  33. {
  34. // NPCs
  35. private static final int MASTER_SIONE = 32195;
  36. private static final int MASTER_GOBIE = 32198;
  37. private static final int MASTER_TOBIAS = 30297;
  38. private static final int CAPTAIN_BATHIS = 30332;
  39. // Items
  40. private static final int ORDERS = 9762;
  41. private static final int ORGANIZATION_CHART = 9763;
  42. private static final int GOBIES_ORDERS = 9764;
  43. private static final int LETTER_TO_HUMANS = 9765;
  44. private static final int HUMANS_REOLY = 9766;
  45. private static final int LETTER_TO_THE_DARKELVES = 9767;
  46. private static final int DARK_ELVES_REPLY = 9768;
  47. private static final int REPORT_TO_SIONE = 9769;
  48. private static final int EMPTY_SOUL_CRYSTAL = 9770;
  49. private static final int TAKS_CAPTURED_SOUL = 9771;
  50. // Reward
  51. private static final int STEELRAZOR_EVALUTION = 9772;
  52. // Monster
  53. private static final int OL_MAHUM_PATROL = 20053;
  54. private static final int OL_MAHUM_NOVICE = 20782;
  55. private static final int MAILLE_LIZARDMAN = 20919;
  56. private static final int MAILLE_LIZARDMAN_SCOUT = 20920;
  57. private static final int MAILLE_LIZARDMAN_GUARD = 20921;
  58. // Quest Monster
  59. private static final int OL_MAHUM_OFFICER_TAK = 27337;
  60. // Misc
  61. private static final int MIN_LEVEL = 18;
  62. public Q00063_PathOfTheWarder()
  63. {
  64. super(63, Q00063_PathOfTheWarder.class.getSimpleName(), "Path Of The Warder");
  65. addStartNpc(MASTER_SIONE);
  66. addTalkId(MASTER_SIONE, MASTER_GOBIE, MASTER_TOBIAS, CAPTAIN_BATHIS);
  67. addKillId(OL_MAHUM_PATROL, OL_MAHUM_NOVICE, MAILLE_LIZARDMAN, MAILLE_LIZARDMAN_SCOUT, MAILLE_LIZARDMAN_GUARD, OL_MAHUM_OFFICER_TAK);
  68. registerQuestItems(ORDERS, ORGANIZATION_CHART, GOBIES_ORDERS, LETTER_TO_HUMANS, HUMANS_REOLY, LETTER_TO_THE_DARKELVES, DARK_ELVES_REPLY, REPORT_TO_SIONE, EMPTY_SOUL_CRYSTAL, TAKS_CAPTURED_SOUL);
  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. if (qs.isCreated())
  84. {
  85. qs.startQuest();
  86. qs.setMemoState(1);
  87. htmltext = "32195-05.htm";
  88. }
  89. break;
  90. }
  91. case "32195-06.html":
  92. {
  93. if (qs.isMemoState(1))
  94. {
  95. htmltext = event;
  96. }
  97. break;
  98. }
  99. case "32195-08.html":
  100. {
  101. if (qs.isMemoState(1))
  102. {
  103. qs.setMemoState(2);
  104. qs.setCond(2, true);
  105. htmltext = event;
  106. }
  107. break;
  108. }
  109. case "32198-03.html":
  110. {
  111. if (qs.isMemoState(3))
  112. {
  113. takeItems(player, GOBIES_ORDERS, 1);
  114. giveItems(player, LETTER_TO_HUMANS, 1);
  115. qs.setMemoState(4);
  116. qs.setCond(5, true);
  117. htmltext = event;
  118. }
  119. break;
  120. }
  121. case "32198-07.html":
  122. {
  123. if (qs.isMemoState(7))
  124. {
  125. htmltext = event;
  126. }
  127. break;
  128. }
  129. case "32198-08.html":
  130. {
  131. if (qs.isMemoState(7))
  132. {
  133. giveItems(player, LETTER_TO_THE_DARKELVES, 1);
  134. qs.setMemoState(8);
  135. qs.setCond(7, true);
  136. htmltext = event;
  137. }
  138. break;
  139. }
  140. case "32198-12.html":
  141. {
  142. if (qs.isMemoState(12))
  143. {
  144. giveItems(player, REPORT_TO_SIONE, 1);
  145. qs.setMemoState(13);
  146. qs.setCond(9, true);
  147. htmltext = event;
  148. }
  149. break;
  150. }
  151. case "32198-15.html":
  152. {
  153. if (qs.isMemoState(14))
  154. {
  155. qs.setMemoState(15);
  156. htmltext = event;
  157. }
  158. break;
  159. }
  160. case "32198-16.html":
  161. {
  162. if (qs.isMemoState(15))
  163. {
  164. giveItems(player, EMPTY_SOUL_CRYSTAL, 1);
  165. qs.setMemoState(16);
  166. qs.set("ex", 0);
  167. qs.setCond(11, true);
  168. htmltext = event;
  169. }
  170. break;
  171. }
  172. case "30332-03.html":
  173. {
  174. if (qs.isMemoState(4))
  175. {
  176. takeItems(player, LETTER_TO_HUMANS, 1);
  177. giveItems(player, HUMANS_REOLY, 1);
  178. qs.setMemoState(5);
  179. htmltext = event;
  180. }
  181. break;
  182. }
  183. case "30332-05.html":
  184. {
  185. if (qs.isMemoState(5))
  186. {
  187. htmltext = event;
  188. }
  189. break;
  190. }
  191. case "30332-06.html":
  192. {
  193. if (qs.isMemoState(5))
  194. {
  195. qs.setMemoState(6);
  196. qs.setCond(6, true);
  197. htmltext = event;
  198. }
  199. break;
  200. }
  201. case "30297-03.html":
  202. {
  203. if (qs.isMemoState(9))
  204. {
  205. htmltext = event;
  206. }
  207. break;
  208. }
  209. case "30297-04.html":
  210. {
  211. if (qs.isMemoState(9))
  212. {
  213. qs.setMemoState(10);
  214. htmltext = event;
  215. }
  216. break;
  217. }
  218. case "30297-06.html":
  219. {
  220. if (qs.isMemoState(10))
  221. {
  222. giveItems(player, DARK_ELVES_REPLY, 1);
  223. qs.setMemoState(11);
  224. qs.setCond(8, true);
  225. htmltext = event;
  226. }
  227. break;
  228. }
  229. }
  230. return htmltext;
  231. }
  232. @Override
  233. public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
  234. {
  235. final QuestState qs = getQuestState(killer, false);
  236. if ((qs != null) && qs.isStarted() && Util.checkIfInRange(1500, npc, killer, true))
  237. {
  238. switch (npc.getId())
  239. {
  240. case OL_MAHUM_PATROL:
  241. {
  242. if (qs.isMemoState(2) && (getQuestItemsCount(killer, ORGANIZATION_CHART) < 5))
  243. {
  244. if ((getQuestItemsCount(killer, ORDERS) >= 10) && (getQuestItemsCount(killer, ORGANIZATION_CHART) >= 4))
  245. {
  246. qs.setCond(3, true);
  247. }
  248. else
  249. {
  250. playSound(qs.getPlayer(), QuestSound.ITEMSOUND_QUEST_ITEMGET);
  251. }
  252. giveItems(killer, ORGANIZATION_CHART, 1);
  253. }
  254. break;
  255. }
  256. case OL_MAHUM_NOVICE:
  257. {
  258. if (qs.isMemoState(2) && (getQuestItemsCount(killer, ORDERS) < 10))
  259. {
  260. if ((getQuestItemsCount(killer, ORDERS) >= 9) && (getQuestItemsCount(killer, ORGANIZATION_CHART) >= 5))
  261. {
  262. qs.setCond(3, true);
  263. }
  264. else
  265. {
  266. playSound(qs.getPlayer(), QuestSound.ITEMSOUND_QUEST_ITEMGET);
  267. }
  268. giveItems(killer, ORDERS, 1);
  269. }
  270. break;
  271. }
  272. case MAILLE_LIZARDMAN:
  273. case MAILLE_LIZARDMAN_SCOUT:
  274. case MAILLE_LIZARDMAN_GUARD:
  275. {
  276. if (qs.isMemoState(16) && !hasQuestItems(killer, TAKS_CAPTURED_SOUL))
  277. {
  278. final int i4 = qs.getInt("ex");
  279. if (i4 < 4)
  280. {
  281. qs.set("ex", i4 + 1);
  282. }
  283. else
  284. {
  285. qs.set("ex", 0);
  286. final L2Npc monster = addSpawn(OL_MAHUM_OFFICER_TAK, npc, true, 0, false);
  287. addAttackPlayerDesire(monster, killer);
  288. }
  289. }
  290. break;
  291. }
  292. case OL_MAHUM_OFFICER_TAK:
  293. {
  294. if (qs.isMemoState(16) && !hasQuestItems(killer, TAKS_CAPTURED_SOUL))
  295. {
  296. takeItems(killer, EMPTY_SOUL_CRYSTAL, 1);
  297. giveItems(killer, TAKS_CAPTURED_SOUL, 1);
  298. qs.setCond(12, true);
  299. }
  300. break;
  301. }
  302. }
  303. }
  304. return super.onKill(npc, killer, isSummon);
  305. }
  306. @Override
  307. public String onTalk(L2Npc npc, L2PcInstance player)
  308. {
  309. final QuestState qs = getQuestState(player, true);
  310. final int memoState = qs.getMemoState();
  311. String htmltext = getNoQuestMsg(player);
  312. if (qs.isCreated())
  313. {
  314. if (npc.getId() == MASTER_SIONE)
  315. {
  316. if ((player.getClassId() == ClassId.femaleSoldier) && !hasQuestItems(player, STEELRAZOR_EVALUTION))
  317. {
  318. if (player.getLevel() >= MIN_LEVEL)
  319. {
  320. htmltext = "32195-01.htm";
  321. }
  322. else
  323. {
  324. htmltext = "32195-02.html";
  325. }
  326. }
  327. else if (hasQuestItems(player, STEELRAZOR_EVALUTION))
  328. {
  329. htmltext = "32195-03.html";
  330. }
  331. else
  332. {
  333. htmltext = "32195-04.html";
  334. }
  335. }
  336. }
  337. else if (qs.isStarted())
  338. {
  339. switch (npc.getId())
  340. {
  341. case MASTER_SIONE:
  342. {
  343. if (memoState == 1)
  344. {
  345. htmltext = "32195-07.html";
  346. }
  347. else if (memoState == 2)
  348. {
  349. if ((getQuestItemsCount(player, ORDERS) < 10) || (getQuestItemsCount(player, ORGANIZATION_CHART) < 5))
  350. {
  351. htmltext = "32195-09.html";
  352. }
  353. else
  354. {
  355. takeItems(player, ORDERS, -1);
  356. takeItems(player, ORGANIZATION_CHART, -1);
  357. giveItems(player, GOBIES_ORDERS, 1);
  358. qs.setMemoState(3);
  359. qs.setCond(4, true);
  360. htmltext = "32195-10.html";
  361. }
  362. }
  363. else if (memoState == 3)
  364. {
  365. htmltext = "32195-11.html";
  366. }
  367. else if ((memoState > 3) && (memoState != 13))
  368. {
  369. htmltext = "32195-12.html";
  370. }
  371. else if (memoState == 13)
  372. {
  373. takeItems(player, REPORT_TO_SIONE, 1);
  374. qs.setMemoState(14);
  375. qs.setCond(10, true);
  376. htmltext = "32195-13.html";
  377. }
  378. break;
  379. }
  380. case MASTER_GOBIE:
  381. {
  382. if (memoState < 3)
  383. {
  384. htmltext = "32198-01.html";
  385. }
  386. else if (memoState == 3)
  387. {
  388. htmltext = "32198-02.html";
  389. }
  390. else if ((memoState == 4) || (memoState == 5))
  391. {
  392. htmltext = "32198-04.html";
  393. }
  394. else if (memoState == 6)
  395. {
  396. takeItems(player, HUMANS_REOLY, 1);
  397. qs.setMemoState(7);
  398. htmltext = "32198-05.html";
  399. }
  400. else if (memoState == 7)
  401. {
  402. htmltext = "32198-06.html";
  403. }
  404. else if (memoState == 8)
  405. {
  406. htmltext = "32198-09.html";
  407. }
  408. else if (memoState == 11)
  409. {
  410. takeItems(player, DARK_ELVES_REPLY, 1);
  411. qs.setMemoState(12);
  412. htmltext = "32198-10.html";
  413. }
  414. else if (memoState == 12)
  415. {
  416. giveItems(player, REPORT_TO_SIONE, 1);
  417. qs.setMemoState(13);
  418. htmltext = "32198-11.html";
  419. }
  420. else if (memoState == 13)
  421. {
  422. htmltext = "32198-13.html";
  423. }
  424. else if (memoState == 14)
  425. {
  426. htmltext = "32198-14.html";
  427. }
  428. else if (memoState == 15)
  429. {
  430. giveItems(player, EMPTY_SOUL_CRYSTAL, 1);
  431. qs.setMemoState(16);
  432. qs.set("ex", 0);
  433. qs.setCond(11, true);
  434. htmltext = "32198-17.html";
  435. }
  436. else if (memoState == 16)
  437. {
  438. if (!hasQuestItems(player, TAKS_CAPTURED_SOUL))
  439. {
  440. qs.set("ex", 0);
  441. htmltext = "32198-18.html";
  442. }
  443. else
  444. {
  445. giveAdena(player, 163800, true);
  446. takeItems(player, TAKS_CAPTURED_SOUL, 1);
  447. giveItems(player, STEELRAZOR_EVALUTION, 1);
  448. final int level = player.getLevel();
  449. if (level >= 20)
  450. {
  451. addExpAndSp(player, 320534, 22046);
  452. }
  453. else if (level == 19)
  454. {
  455. addExpAndSp(player, 456128, 28744);
  456. }
  457. else
  458. {
  459. addExpAndSp(player, 591724, 35442);
  460. }
  461. qs.exitQuest(false, true);
  462. player.sendPacket(new SocialAction(player.getObjectId(), 3));
  463. qs.saveGlobalQuestVar("1ClassQuestFinished", "1");
  464. htmltext = "32198-19.html";
  465. }
  466. }
  467. break;
  468. }
  469. case CAPTAIN_BATHIS:
  470. {
  471. if (memoState == 4)
  472. {
  473. htmltext = "30332-01.html";
  474. }
  475. else if (memoState < 4)
  476. {
  477. htmltext = "30332-02.html";
  478. }
  479. else if (memoState == 5)
  480. {
  481. htmltext = "30332-04.html";
  482. }
  483. else if (memoState == 6)
  484. {
  485. htmltext = "30332-07.html";
  486. }
  487. else if (memoState > 6)
  488. {
  489. htmltext = "30332-08.html";
  490. }
  491. break;
  492. }
  493. case MASTER_TOBIAS:
  494. {
  495. if (memoState == 8)
  496. {
  497. takeItems(player, LETTER_TO_THE_DARKELVES, 1);
  498. qs.setMemoState(9);
  499. htmltext = "30297-01.html";
  500. }
  501. else if (memoState == 9)
  502. {
  503. htmltext = "30297-02.html";
  504. }
  505. else if (memoState == 10)
  506. {
  507. giveItems(player, DARK_ELVES_REPLY, 1);
  508. qs.setMemoState(11);
  509. qs.setCond(8, true);
  510. htmltext = "30297-05.html";
  511. }
  512. else if (memoState >= 11)
  513. {
  514. htmltext = "30297-07.html";
  515. }
  516. break;
  517. }
  518. }
  519. }
  520. else if (qs.isCompleted())
  521. {
  522. if (npc.getId() == MASTER_GOBIE)
  523. {
  524. if (hasQuestItems(player, STEELRAZOR_EVALUTION))
  525. {
  526. htmltext = "32198-20.html";
  527. }
  528. }
  529. }
  530. return htmltext;
  531. }
  532. }