Q00211_TrialOfTheChallenger.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446
  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.Q00211_TrialOfTheChallenger;
  20. import com.l2jserver.gameserver.datatables.SpawnTable;
  21. import com.l2jserver.gameserver.enums.CategoryType;
  22. import com.l2jserver.gameserver.enums.QuestSound;
  23. import com.l2jserver.gameserver.model.actor.L2Npc;
  24. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  25. import com.l2jserver.gameserver.model.holders.ItemHolder;
  26. import com.l2jserver.gameserver.model.quest.Quest;
  27. import com.l2jserver.gameserver.model.quest.QuestState;
  28. import com.l2jserver.gameserver.model.variables.PlayerVariables;
  29. import com.l2jserver.gameserver.network.serverpackets.RadarControl;
  30. import com.l2jserver.gameserver.network.serverpackets.SocialAction;
  31. import com.l2jserver.gameserver.util.Util;
  32. /**
  33. * Trial of the Challenger (211)
  34. * @author Pandragon
  35. */
  36. public final class Q00211_TrialOfTheChallenger extends Quest
  37. {
  38. // NPCs
  39. private static final int FILAUR = 30535;
  40. private static final int KASH = 30644;
  41. private static final int MARTIAN = 30645;
  42. private static final int RALDO = 30646;
  43. private static final int CHEST_OF_SHYSLASSYS = 30647;
  44. private static final int MARKETEER_OF_MAMMON = 31092;
  45. // Items
  46. private static final int LETTER_OF_KASH = 2628;
  47. private static final int WATCHERS_EYE1 = 2629;
  48. private static final int WATCHERS_EYE2 = 2630;
  49. private static final int SCROLL_OF_SHYSLASSYS = 2631;
  50. private static final int BROKEN_KEY = 2632;
  51. // Monsters
  52. private static final int SHYSLASSYS = 27110;
  53. private static final int GORR = 27112;
  54. private static final int BARAHAM = 27113;
  55. private static final int QUEEN_OF_SUCCUBUS = 27114;
  56. // Rewards
  57. private static final int ELVEN_NECKLACE_BEADS = 1904;
  58. private static final int WHITE_TUNIC_PATTERN = 1936;
  59. private static final int IRON_BOOTS_DESIGN = 1940;
  60. private static final int MANTICOR_SKIN_GAITERS_PATTERN = 1943;
  61. private static final int GAUNTLET_OF_REPOSE_PATTERN = 1946;
  62. private static final int MITHRIL_SCALE_GAITERS_MATERIAL = 2918;
  63. private static final int BRIGAMDINE_GAUNTLET_PATTERN = 2927;
  64. private static final int TOME_OF_BLOOD_PAGE = 2030;
  65. private static final int MARK_OF_CHALLENGER = 2627;
  66. private static final ItemHolder DIMENSIONAL_DIAMONDS = new ItemHolder(7562, 61);
  67. // Misc
  68. private static final int MIN_LVL = 35;
  69. public Q00211_TrialOfTheChallenger()
  70. {
  71. super(211, Q00211_TrialOfTheChallenger.class.getSimpleName(), "Trial of the Challenger");
  72. addStartNpc(KASH);
  73. addTalkId(FILAUR, KASH, MARTIAN, RALDO, CHEST_OF_SHYSLASSYS, MARKETEER_OF_MAMMON);
  74. addKillId(SHYSLASSYS, GORR, BARAHAM, QUEEN_OF_SUCCUBUS);
  75. registerQuestItems(LETTER_OF_KASH, WATCHERS_EYE1, WATCHERS_EYE2, SCROLL_OF_SHYSLASSYS, BROKEN_KEY);
  76. }
  77. @Override
  78. public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  79. {
  80. final QuestState qs = getQuestState(player, false);
  81. String htmltext = null;
  82. if (qs == null)
  83. {
  84. return null;
  85. }
  86. switch (event)
  87. {
  88. case "30644-04.htm":
  89. {
  90. htmltext = event;
  91. break;
  92. }
  93. case "30645-07.html":
  94. case "30645-08.html":
  95. case "30646-02.html":
  96. case "30646-03.html":
  97. {
  98. if (qs.isStarted())
  99. {
  100. htmltext = event;
  101. }
  102. break;
  103. }
  104. case "30644-06.htm":
  105. {
  106. if (qs.isCreated())
  107. {
  108. final PlayerVariables vars = player.getVariables();
  109. if (vars.getInt("2ND_CLASS_DIAMOND_REWARD", 0) == 0)
  110. {
  111. giveItems(player, DIMENSIONAL_DIAMONDS);
  112. vars.set("2ND_CLASS_DIAMOND_REWARD", 1);
  113. htmltext = event;
  114. }
  115. else
  116. {
  117. htmltext = "30644-05.htm";
  118. }
  119. qs.startQuest();
  120. }
  121. break;
  122. }
  123. case "30647-02.html":
  124. {
  125. if (qs.isCond(2) && hasQuestItems(player, BROKEN_KEY))
  126. {
  127. takeItems(player, BROKEN_KEY, -1);
  128. if (getRandom(10) < 2)
  129. {
  130. playSound(player, QuestSound.ITEMSOUND_QUEST_JACKPOT);
  131. final int random = getRandom(100);
  132. if (random > 90)
  133. {
  134. rewardItems(player, MITHRIL_SCALE_GAITERS_MATERIAL, 1);
  135. rewardItems(player, BRIGAMDINE_GAUNTLET_PATTERN, 1);
  136. rewardItems(player, MANTICOR_SKIN_GAITERS_PATTERN, 1);
  137. rewardItems(player, GAUNTLET_OF_REPOSE_PATTERN, 1);
  138. rewardItems(player, IRON_BOOTS_DESIGN, 1);
  139. }
  140. else if (random > 70)
  141. {
  142. rewardItems(player, TOME_OF_BLOOD_PAGE, 1);
  143. rewardItems(player, ELVEN_NECKLACE_BEADS, 1);
  144. }
  145. else if (random > 40)
  146. {
  147. rewardItems(player, WHITE_TUNIC_PATTERN, 1);
  148. }
  149. else
  150. {
  151. rewardItems(player, IRON_BOOTS_DESIGN, 1);
  152. }
  153. htmltext = "30647-03.html";
  154. }
  155. else
  156. {
  157. giveAdena(player, getRandom(1000) + 1, true);
  158. htmltext = event;
  159. }
  160. }
  161. else
  162. {
  163. htmltext = "30647-04.html";
  164. }
  165. break;
  166. }
  167. case "30645-02.html":
  168. {
  169. if (qs.isCond(3) && hasQuestItems(player, LETTER_OF_KASH))
  170. {
  171. qs.setCond(4, true);
  172. htmltext = event;
  173. }
  174. break;
  175. }
  176. case "30646-04.html":
  177. case "30646-05.html":
  178. {
  179. if (qs.isCond(7) && hasQuestItems(player, WATCHERS_EYE2))
  180. {
  181. takeItems(player, WATCHERS_EYE2, -1);
  182. qs.setCond(8, true);
  183. htmltext = event;
  184. }
  185. break;
  186. }
  187. }
  188. return htmltext;
  189. }
  190. @Override
  191. public String onTalk(L2Npc npc, L2PcInstance talker)
  192. {
  193. final QuestState qs = getQuestState(talker, true);
  194. String htmltext = getNoQuestMsg(talker);
  195. switch (npc.getId())
  196. {
  197. case KASH:
  198. {
  199. if (qs.isCreated())
  200. {
  201. if (!talker.isInCategory(CategoryType.WARRIOR_GROUP))
  202. {
  203. htmltext = "30644-02.html";
  204. }
  205. else if (talker.getLevel() < MIN_LVL)
  206. {
  207. htmltext = "30644-01.html";
  208. }
  209. else
  210. {
  211. htmltext = "30644-03.htm";
  212. }
  213. }
  214. else if (qs.isStarted())
  215. {
  216. switch (qs.getCond())
  217. {
  218. case 1:
  219. {
  220. htmltext = "30644-07.html";
  221. break;
  222. }
  223. case 2:
  224. {
  225. if (hasQuestItems(talker, SCROLL_OF_SHYSLASSYS))
  226. {
  227. takeItems(talker, SCROLL_OF_SHYSLASSYS, -1);
  228. giveItems(talker, LETTER_OF_KASH, 1);
  229. qs.setCond(3, true);
  230. htmltext = "30644-08.html";
  231. }
  232. break;
  233. }
  234. case 3:
  235. {
  236. if (hasQuestItems(talker, LETTER_OF_KASH))
  237. {
  238. htmltext = "30644-09.html";
  239. }
  240. break;
  241. }
  242. case 8:
  243. case 9:
  244. case 10:
  245. {
  246. htmltext = "30644-10.html";
  247. break;
  248. }
  249. }
  250. }
  251. else if (qs.isCompleted())
  252. {
  253. htmltext = getAlreadyCompletedMsg(talker);
  254. }
  255. break;
  256. }
  257. case MARTIAN:
  258. {
  259. switch (qs.getCond())
  260. {
  261. case 3:
  262. {
  263. if (hasQuestItems(talker, LETTER_OF_KASH))
  264. {
  265. htmltext = "30645-01.html";
  266. }
  267. break;
  268. }
  269. case 4:
  270. {
  271. htmltext = "30645-03.html";
  272. break;
  273. }
  274. case 5:
  275. {
  276. if (hasQuestItems(talker, WATCHERS_EYE1))
  277. {
  278. takeItems(talker, WATCHERS_EYE1, -1);
  279. qs.setCond(6, true);
  280. htmltext = "30645-04.html";
  281. }
  282. break;
  283. }
  284. case 6:
  285. {
  286. htmltext = "30645-05.html";
  287. break;
  288. }
  289. case 7:
  290. {
  291. htmltext = "30645-06.html";
  292. break;
  293. }
  294. case 8:
  295. case 9:
  296. {
  297. htmltext = "30645-09.html";
  298. break;
  299. }
  300. }
  301. break;
  302. }
  303. case CHEST_OF_SHYSLASSYS:
  304. {
  305. if (qs.isStarted())
  306. {
  307. htmltext = "30647-01.html";
  308. }
  309. break;
  310. }
  311. case RALDO:
  312. {
  313. switch (qs.getCond())
  314. {
  315. case 7:
  316. {
  317. if (hasQuestItems(talker, WATCHERS_EYE2))
  318. {
  319. htmltext = "30646-01.html";
  320. }
  321. break;
  322. }
  323. case 8:
  324. {
  325. htmltext = "30646-06.html";
  326. break;
  327. }
  328. case 10:
  329. {
  330. addExpAndSp(talker, 1067606, 69242);
  331. giveAdena(talker, 194556, true);
  332. giveItems(talker, MARK_OF_CHALLENGER, 1);
  333. // redundant retail check - already rewarded at beginning of quest
  334. final PlayerVariables vars = talker.getVariables();
  335. if (vars.getInt("2ND_CLASS_DIAMOND_REWARD", 0) == 0)
  336. {
  337. giveItems(talker, DIMENSIONAL_DIAMONDS);
  338. vars.set("2ND_CLASS_DIAMOND_REWARD", 1);
  339. }
  340. talker.sendPacket(new SocialAction(talker.getObjectId(), 3));
  341. qs.exitQuest(false, true);
  342. htmltext = "30646-07.html";
  343. break;
  344. }
  345. }
  346. break;
  347. }
  348. case FILAUR:
  349. {
  350. switch (qs.getCond())
  351. {
  352. case 8:
  353. {
  354. htmltext = "30535-01.html";
  355. qs.setCond(9, true);
  356. break;
  357. }
  358. case 9:
  359. {
  360. talker.sendPacket(new RadarControl(0, 2, 151589, -174823, -1776));
  361. htmltext = "30535-02.html";
  362. break;
  363. }
  364. case 10:
  365. {
  366. htmltext = "30535-03.html";
  367. break;
  368. }
  369. }
  370. break;
  371. }
  372. }
  373. return htmltext;
  374. }
  375. @Override
  376. public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
  377. {
  378. final QuestState qs = getQuestState(killer, false);
  379. if ((qs == null) || !Util.checkIfInRange(1500, npc, killer, true))
  380. {
  381. return super.onKill(npc, killer, isSummon);
  382. }
  383. switch (npc.getId())
  384. {
  385. case SHYSLASSYS:
  386. {
  387. if (qs.isCond(1))
  388. {
  389. if (SpawnTable.getInstance().getSpawns(npc.getId()).size() < 10)
  390. {
  391. addSpawn(CHEST_OF_SHYSLASSYS, npc, false, 200000);
  392. }
  393. giveItems(killer, SCROLL_OF_SHYSLASSYS, 1);
  394. giveItems(killer, BROKEN_KEY, 1);
  395. qs.setCond(2, true);
  396. }
  397. break;
  398. }
  399. case GORR:
  400. {
  401. if (qs.isCond(4))
  402. {
  403. giveItems(killer, WATCHERS_EYE1, 1);
  404. qs.setCond(5, true);
  405. }
  406. break;
  407. }
  408. case BARAHAM:
  409. {
  410. if (qs.isCond(6))
  411. {
  412. if (SpawnTable.getInstance().getSpawns(npc.getId()).size() < 10)
  413. {
  414. addSpawn(RALDO, npc, false, 100000);
  415. }
  416. giveItems(killer, WATCHERS_EYE2, 1);
  417. qs.setCond(7, true);
  418. }
  419. break;
  420. }
  421. case QUEEN_OF_SUCCUBUS:
  422. {
  423. if (qs.isCond(9))
  424. {
  425. if (SpawnTable.getInstance().getSpawns(npc.getId()).size() < 10)
  426. {
  427. addSpawn(RALDO, npc, false, 100000);
  428. }
  429. qs.setCond(10, true);
  430. }
  431. break;
  432. }
  433. }
  434. return super.onKill(npc, killer, isSummon);
  435. }
  436. }