Q00383_TreasureHunt.java 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  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.Q00383_TreasureHunt;
  20. import com.l2jserver.gameserver.model.actor.L2Npc;
  21. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  22. import com.l2jserver.gameserver.model.holders.ItemHolder;
  23. import com.l2jserver.gameserver.model.quest.Quest;
  24. import com.l2jserver.gameserver.model.quest.QuestState;
  25. /**
  26. * Treasure Hunt (383)
  27. * @author Adry_85
  28. */
  29. public final class Q00383_TreasureHunt extends Quest
  30. {
  31. // NPCs
  32. private static final int ESPEN = 30890;
  33. private static final int PIRATES_CHEST = 31148;
  34. // Items
  35. private static final int THIEF_KEY = 1661;
  36. private static final int PIRATES_TREASURE_MAP = 5915;
  37. // Misc
  38. private static final int MIN_LEVEL = 42;
  39. // Rewards
  40. private static final ItemHolder SCROLL_ENCHANT_ARMOR_C = new ItemHolder(952, 1);
  41. private static final ItemHolder SCROLL_ENCHANT_ARMOR_D = new ItemHolder(956, 1);
  42. private static final ItemHolder EMERALD = new ItemHolder(1337, 1);
  43. private static final ItemHolder BLUE_ONYX = new ItemHolder(1338, 2);
  44. private static final ItemHolder ONYX = new ItemHolder(1339, 2);
  45. private static final ItemHolder MITHRIL_GLOVES = new ItemHolder(2450, 1);
  46. private static final ItemHolder SAGES_WORN_GLOVES = new ItemHolder(2451, 1);
  47. private static final ItemHolder MOONSTONE = new ItemHolder(3447, 2);
  48. private static final ItemHolder ALEXANDRITE = new ItemHolder(3450, 1);
  49. private static final ItemHolder FIRE_EMERALD = new ItemHolder(3453, 1);
  50. private static final ItemHolder IMPERIAL_DIAMOND = new ItemHolder(3456, 1);
  51. private static final ItemHolder MUSICAL_SCORE_THEME_OF_LOVE = new ItemHolder(4408, 1);
  52. private static final ItemHolder MUSICAL_SCORE_THEME_OF_BATTLE = new ItemHolder(4409, 1);
  53. private static final ItemHolder MUSICAL_SCORE_THEME_OF_CELEBRATION = new ItemHolder(4418, 1);
  54. private static final ItemHolder MUSICAL_SCORE_THEME_OF_COMEDY = new ItemHolder(4419, 1);
  55. private static final ItemHolder DYE_S1C3_C = new ItemHolder(4481, 1); // Greater Dye of STR <Str+1 Con-3>
  56. private static final ItemHolder DYE_S1D3_C = new ItemHolder(4482, 1); // Greater Dye of STR <Str+1 Dex-3>
  57. private static final ItemHolder DYE_C1S3_C = new ItemHolder(4483, 1); // Greater Dye of CON<Con+1 Str-3>
  58. private static final ItemHolder DYE_C1C3_C = new ItemHolder(4484, 1); // Greater Dye of CON<Con+1 Dex-3>
  59. private static final ItemHolder DYE_D1S3_C = new ItemHolder(4485, 1); // Greater Dye of DEX <Dex+1 Str-3>
  60. private static final ItemHolder DYE_D1C3_C = new ItemHolder(4486, 1); // Greater Dye of DEX <Dex+1 Con-3>
  61. private static final ItemHolder DYE_I1M3_C = new ItemHolder(4487, 1); // Greater Dye of INT <Int+1 Men-3>
  62. private static final ItemHolder DYE_I1W3_C = new ItemHolder(4488, 1); // Greater Dye of INT <Int+1 Wit-3>
  63. private static final ItemHolder DYE_M1I3_C = new ItemHolder(4489, 1); // Greater Dye of MEN <Men+1 Int-3>
  64. private static final ItemHolder DYE_M1W3_C = new ItemHolder(4490, 1); // Greater Dye of MEN <Men+1 Wit-3>
  65. private static final ItemHolder DYE_W1I3_C = new ItemHolder(4491, 1); // Greater Dye of WIT <Wit+1 Int-3>
  66. private static final ItemHolder DYE_W1M3_C = new ItemHolder(4492, 1); // Greater Dye of WIT <Wit+1 Men-3>
  67. public Q00383_TreasureHunt()
  68. {
  69. super(383, Q00383_TreasureHunt.class.getSimpleName(), "Treasure Hunt");
  70. addStartNpc(ESPEN);
  71. addTalkId(ESPEN, PIRATES_CHEST);
  72. }
  73. @Override
  74. public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  75. {
  76. final QuestState qs = getQuestState(player, false);
  77. if (qs == null)
  78. {
  79. return null;
  80. }
  81. String htmltext = null;
  82. switch (event)
  83. {
  84. case "30890-04.htm":
  85. {
  86. htmltext = event;
  87. break;
  88. }
  89. case "30890-05.htm":
  90. {
  91. if (hasQuestItems(player, PIRATES_TREASURE_MAP))
  92. {
  93. giveAdena(player, 1000, false);
  94. takeItems(player, PIRATES_TREASURE_MAP, -1);
  95. htmltext = event;
  96. }
  97. break;
  98. }
  99. case "30890-06.htm":
  100. {
  101. htmltext = (hasQuestItems(player, PIRATES_TREASURE_MAP)) ? event : "30890-12.html";
  102. break;
  103. }
  104. case "30890-07.htm":
  105. {
  106. if (hasQuestItems(player, PIRATES_TREASURE_MAP))
  107. {
  108. qs.startQuest();
  109. takeItems(player, PIRATES_TREASURE_MAP, -1);
  110. htmltext = event;
  111. }
  112. break;
  113. }
  114. case "30890-08.html":
  115. case "30890-09.html":
  116. case "30890-10.html":
  117. {
  118. if (qs.isCond(1))
  119. {
  120. htmltext = event;
  121. }
  122. break;
  123. }
  124. case "30890-11.html":
  125. {
  126. if (qs.isCond(1))
  127. {
  128. qs.setCond(2, true);
  129. htmltext = event;
  130. }
  131. break;
  132. }
  133. case "31148-02.html":
  134. {
  135. if (qs.isCond(2))
  136. {
  137. if (hasQuestItems(player, THIEF_KEY))
  138. {
  139. takeItems(player, THIEF_KEY, -1);
  140. qs.exitQuest(true, true);
  141. htmltext = event;
  142. int bonus = 0;
  143. int random = getRandom(100);
  144. if (random < 5)
  145. {
  146. rewardItems(player, MITHRIL_GLOVES);
  147. }
  148. else if (random < 6)
  149. {
  150. rewardItems(player, SAGES_WORN_GLOVES);
  151. }
  152. else if (random < 18)
  153. {
  154. rewardItems(player, SCROLL_ENCHANT_ARMOR_D);
  155. }
  156. else if (random < 28)
  157. {
  158. rewardItems(player, SCROLL_ENCHANT_ARMOR_C);
  159. }
  160. else
  161. {
  162. bonus += 500;
  163. }
  164. random = getRandom(1000);
  165. if (random < 25)
  166. {
  167. rewardItems(player, DYE_S1C3_C);
  168. }
  169. else if (random < 50)
  170. {
  171. rewardItems(player, DYE_S1D3_C);
  172. }
  173. else if (random < 75)
  174. {
  175. rewardItems(player, DYE_C1S3_C);
  176. }
  177. else if (random < 100)
  178. {
  179. rewardItems(player, DYE_C1C3_C);
  180. }
  181. else if (random < 125)
  182. {
  183. rewardItems(player, DYE_D1S3_C);
  184. }
  185. else if (random < 150)
  186. {
  187. rewardItems(player, DYE_D1C3_C);
  188. }
  189. else if (random < 175)
  190. {
  191. rewardItems(player, DYE_I1M3_C);
  192. }
  193. else if (random < 200)
  194. {
  195. rewardItems(player, DYE_I1W3_C);
  196. }
  197. else if (random < 225)
  198. {
  199. rewardItems(player, DYE_M1I3_C);
  200. }
  201. else if (random < 250)
  202. {
  203. rewardItems(player, DYE_M1W3_C);
  204. }
  205. else if (random < 275)
  206. {
  207. rewardItems(player, DYE_W1I3_C);
  208. }
  209. else if (random < 300)
  210. {
  211. rewardItems(player, DYE_W1M3_C);
  212. }
  213. else
  214. {
  215. bonus += 300;
  216. }
  217. random = getRandom(100);
  218. if (random < 4)
  219. {
  220. rewardItems(player, EMERALD);
  221. }
  222. else if (random < 8)
  223. {
  224. rewardItems(player, BLUE_ONYX);
  225. }
  226. else if (random < 12)
  227. {
  228. rewardItems(player, ONYX);
  229. }
  230. else if (random < 16)
  231. {
  232. rewardItems(player, MOONSTONE);
  233. }
  234. else if (random < 20)
  235. {
  236. rewardItems(player, ALEXANDRITE);
  237. }
  238. else if (random < 25)
  239. {
  240. rewardItems(player, FIRE_EMERALD);
  241. }
  242. else if (random < 27)
  243. {
  244. rewardItems(player, IMPERIAL_DIAMOND);
  245. }
  246. else
  247. {
  248. bonus += 500;
  249. }
  250. random = getRandom(100);
  251. if (random < 20)
  252. {
  253. rewardItems(player, MUSICAL_SCORE_THEME_OF_LOVE);
  254. }
  255. else if (random < 40)
  256. {
  257. rewardItems(player, MUSICAL_SCORE_THEME_OF_BATTLE);
  258. }
  259. else if (random < 60)
  260. {
  261. rewardItems(player, MUSICAL_SCORE_THEME_OF_CELEBRATION);
  262. }
  263. else if (random < 80)
  264. {
  265. rewardItems(player, MUSICAL_SCORE_THEME_OF_COMEDY);
  266. }
  267. else
  268. {
  269. bonus += 500;
  270. }
  271. giveAdena(player, bonus, true);
  272. }
  273. else
  274. {
  275. htmltext = "31148-03.html";
  276. }
  277. }
  278. break;
  279. }
  280. }
  281. return htmltext;
  282. }
  283. @Override
  284. public String onTalk(L2Npc npc, L2PcInstance player)
  285. {
  286. final QuestState qs = getQuestState(player, true);
  287. String htmltext = getNoQuestMsg(player);
  288. if (qs.isCreated())
  289. {
  290. if (player.getLevel() < MIN_LEVEL)
  291. {
  292. htmltext = "30890-01.html";
  293. }
  294. else if (!hasQuestItems(player, PIRATES_TREASURE_MAP))
  295. {
  296. htmltext = "30890-02.html";
  297. }
  298. else
  299. {
  300. htmltext = "30890-03.htm";
  301. }
  302. }
  303. else if (qs.isStarted())
  304. {
  305. if (npc.getId() == ESPEN)
  306. {
  307. if (qs.isCond(1))
  308. {
  309. htmltext = "30890-13.html";
  310. }
  311. else if (qs.isCond(2))
  312. {
  313. htmltext = "30890-14.html";
  314. }
  315. }
  316. else
  317. {
  318. if (qs.isCond(2))
  319. {
  320. htmltext = "31148-01.html";
  321. }
  322. }
  323. }
  324. return htmltext;
  325. }
  326. }