Q00409_PathOfTheElvenOracle.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404
  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.Q00409_PathOfTheElvenOracle;
  20. import com.l2jserver.gameserver.model.actor.L2Npc;
  21. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  22. import com.l2jserver.gameserver.model.base.ClassId;
  23. import com.l2jserver.gameserver.model.quest.Quest;
  24. import com.l2jserver.gameserver.model.quest.QuestState;
  25. import com.l2jserver.gameserver.network.NpcStringId;
  26. import com.l2jserver.gameserver.network.clientpackets.Say2;
  27. import com.l2jserver.gameserver.network.serverpackets.NpcSay;
  28. import com.l2jserver.gameserver.network.serverpackets.SocialAction;
  29. import com.l2jserver.gameserver.util.Util;
  30. /**
  31. * Path of the Elven Oracle (409)
  32. * @author ivantotov
  33. */
  34. public final class Q00409_PathOfTheElvenOracle extends Quest
  35. {
  36. // NPCs
  37. private static final int PRIEST_MANUEL = 30293;
  38. private static final int ALLANA = 30424;
  39. private static final int PERRIN = 30428;
  40. // Items
  41. private static final int CRYSTAL_MEDALLION = 1231;
  42. private static final int SWINDLERS_MONEY = 1232;
  43. private static final int ALLANA_OF_DAIRY = 1233;
  44. private static final int LIZARD_CAPTAIN_ORDER = 1234;
  45. private static final int HALF_OF_DAIRY = 1236;
  46. private static final int TAMIL_NECKLACE = 1275;
  47. // Reward
  48. private static final int LEAF_OF_ORACLE = 1235;
  49. // Misc
  50. private static final int MIN_LEVEL = 18;
  51. // Quest Monster
  52. private static final int lIZARDMAN_WARRIOR = 27032;
  53. private static final int LIZARDMAN_SCOUT = 27033;
  54. private static final int LIZARDMAN_SOLDIER = 27034;
  55. private static final int TAMIL = 27035;
  56. public Q00409_PathOfTheElvenOracle()
  57. {
  58. super(409, Q00409_PathOfTheElvenOracle.class.getSimpleName(), "Path of the Elven Oracle");
  59. addStartNpc(PRIEST_MANUEL);
  60. addTalkId(PRIEST_MANUEL, ALLANA, PERRIN);
  61. addKillId(TAMIL, lIZARDMAN_WARRIOR, LIZARDMAN_SCOUT, LIZARDMAN_SOLDIER);
  62. addAttackId(TAMIL, lIZARDMAN_WARRIOR, LIZARDMAN_SCOUT, LIZARDMAN_SOLDIER);
  63. registerQuestItems(CRYSTAL_MEDALLION, SWINDLERS_MONEY, ALLANA_OF_DAIRY, LIZARD_CAPTAIN_ORDER, HALF_OF_DAIRY, TAMIL_NECKLACE);
  64. }
  65. @Override
  66. public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  67. {
  68. final QuestState qs = getQuestState(player, false);
  69. if (qs == null)
  70. {
  71. return null;
  72. }
  73. String htmltext = null;
  74. switch (event)
  75. {
  76. case "ACCEPT":
  77. {
  78. if (player.getClassId() == ClassId.elvenMage)
  79. {
  80. if (player.getLevel() >= MIN_LEVEL)
  81. {
  82. if (hasQuestItems(player, LEAF_OF_ORACLE))
  83. {
  84. htmltext = "30293-04.htm";
  85. }
  86. else
  87. {
  88. qs.startQuest();
  89. qs.setMemoState(1);
  90. giveItems(player, CRYSTAL_MEDALLION, 1);
  91. htmltext = "30293-05.htm";
  92. }
  93. }
  94. else
  95. {
  96. htmltext = "30293-03.htm";
  97. }
  98. }
  99. else if (player.getClassId() == ClassId.oracle)
  100. {
  101. htmltext = "30293-02a.htm";
  102. }
  103. else
  104. {
  105. htmltext = "30293-02.htm";
  106. }
  107. break;
  108. }
  109. case "30424-08.html":
  110. case "30424-09.html":
  111. {
  112. htmltext = event;
  113. break;
  114. }
  115. case "30424-07.html":
  116. {
  117. if (qs.isMemoState(1))
  118. {
  119. htmltext = event;
  120. }
  121. break;
  122. }
  123. case "replay_1":
  124. {
  125. qs.setMemoState(2);
  126. addAttackPlayerDesire(addSpawn(lIZARDMAN_WARRIOR, npc, true, 0, false), player);
  127. addAttackPlayerDesire(addSpawn(LIZARDMAN_SCOUT, npc, true, 0, false), player);
  128. addAttackPlayerDesire(addSpawn(LIZARDMAN_SOLDIER, npc, true, 0, false), player);
  129. break;
  130. }
  131. case "30428-02.html":
  132. case "30428-03.html":
  133. {
  134. if (qs.isMemoState(2))
  135. {
  136. htmltext = event;
  137. }
  138. break;
  139. }
  140. case "replay_2":
  141. {
  142. if (qs.isMemoState(2))
  143. {
  144. qs.setMemoState(3);
  145. addAttackPlayerDesire(addSpawn(TAMIL, npc, true, 0, true), player);
  146. }
  147. break;
  148. }
  149. }
  150. return htmltext;
  151. }
  152. @Override
  153. public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon)
  154. {
  155. if (getQuestState(attacker, false) != null)
  156. {
  157. switch (npc.getScriptValue())
  158. {
  159. case 0:
  160. {
  161. switch (npc.getId())
  162. {
  163. case lIZARDMAN_WARRIOR:
  164. {
  165. npc.broadcastPacket(new NpcSay(npc, Say2.NPC_ALL, NpcStringId.THE_SACRED_FLAME_IS_OURS));
  166. break;
  167. }
  168. case LIZARDMAN_SCOUT:
  169. {
  170. npc.broadcastPacket(new NpcSay(npc, Say2.NPC_ALL, NpcStringId.THE_SACRED_FLAME_IS_OURS));
  171. break;
  172. }
  173. case LIZARDMAN_SOLDIER:
  174. {
  175. npc.broadcastPacket(new NpcSay(npc, Say2.NPC_ALL, NpcStringId.THE_SACRED_FLAME_IS_OURS));
  176. break;
  177. }
  178. case TAMIL:
  179. {
  180. npc.broadcastPacket(new NpcSay(npc, Say2.NPC_ALL, NpcStringId.AS_YOU_WISH_MASTER));
  181. break;
  182. }
  183. }
  184. npc.setScriptValue(1);
  185. npc.getVariables().set("firstAttacker", attacker.getObjectId());
  186. break;
  187. }
  188. case 1:
  189. {
  190. if (npc.getVariables().getInt("firstAttacker") != attacker.getObjectId())
  191. {
  192. npc.setScriptValue(2);
  193. }
  194. break;
  195. }
  196. }
  197. }
  198. return super.onAttack(npc, attacker, damage, isSummon);
  199. }
  200. @Override
  201. public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
  202. {
  203. final QuestState qs = getQuestState(killer, false);
  204. if ((qs != null) && qs.isStarted() && npc.isScriptValue(1) && Util.checkIfInRange(1500, npc, killer, true))
  205. {
  206. switch (npc.getId())
  207. {
  208. case lIZARDMAN_WARRIOR:
  209. {
  210. if (!hasQuestItems(killer, LIZARD_CAPTAIN_ORDER))
  211. {
  212. npc.broadcastPacket(new NpcSay(npc, Say2.NPC_ALL, NpcStringId.ARRGHHWE_SHALL_NEVER_SURRENDER));
  213. giveItems(killer, LIZARD_CAPTAIN_ORDER, 1);
  214. qs.setCond(3, true);
  215. }
  216. break;
  217. }
  218. case LIZARDMAN_SCOUT:
  219. case LIZARDMAN_SOLDIER:
  220. {
  221. if (!hasQuestItems(killer, LIZARD_CAPTAIN_ORDER))
  222. {
  223. giveItems(killer, LIZARD_CAPTAIN_ORDER, 1);
  224. qs.setCond(3, true);
  225. }
  226. break;
  227. }
  228. case TAMIL:
  229. {
  230. if (!hasQuestItems(killer, TAMIL_NECKLACE))
  231. {
  232. giveItems(killer, TAMIL_NECKLACE, 1);
  233. qs.setCond(5, true);
  234. }
  235. break;
  236. }
  237. }
  238. }
  239. return super.onKill(npc, killer, isSummon);
  240. }
  241. @Override
  242. public String onTalk(L2Npc npc, L2PcInstance player)
  243. {
  244. final QuestState qs = getQuestState(player, true);
  245. String htmltext = getNoQuestMsg(player);
  246. if (qs.isCreated() || qs.isCompleted())
  247. {
  248. if (npc.getId() == PRIEST_MANUEL)
  249. {
  250. if (!hasQuestItems(player, LEAF_OF_ORACLE))
  251. {
  252. htmltext = "30293-01.htm";
  253. }
  254. else
  255. {
  256. htmltext = "30293-04.htm";
  257. }
  258. }
  259. }
  260. else if (qs.isStarted())
  261. {
  262. switch (npc.getId())
  263. {
  264. case PRIEST_MANUEL:
  265. {
  266. if (hasQuestItems(player, CRYSTAL_MEDALLION))
  267. {
  268. if (!hasAtLeastOneQuestItem(player, SWINDLERS_MONEY, ALLANA_OF_DAIRY, LIZARD_CAPTAIN_ORDER, HALF_OF_DAIRY))
  269. {
  270. if (qs.isMemoState(2))
  271. {
  272. qs.setMemoState(1);
  273. qs.setCond(8);
  274. htmltext = "30293-09.html";
  275. }
  276. else
  277. {
  278. qs.setMemoState(1);
  279. htmltext = "30293-06.html";
  280. }
  281. }
  282. else if (hasQuestItems(player, SWINDLERS_MONEY, ALLANA_OF_DAIRY, LIZARD_CAPTAIN_ORDER))
  283. {
  284. if (!hasQuestItems(player, HALF_OF_DAIRY))
  285. {
  286. giveAdena(player, 163800, true);
  287. giveItems(player, LEAF_OF_ORACLE, 1);
  288. final int level = player.getLevel();
  289. if (level >= 20)
  290. {
  291. addExpAndSp(player, 320534, 20392);
  292. }
  293. else if (level == 19)
  294. {
  295. addExpAndSp(player, 456128, 27090);
  296. }
  297. else
  298. {
  299. addExpAndSp(player, 591724, 33788);
  300. }
  301. qs.exitQuest(false, true);
  302. player.sendPacket(new SocialAction(player.getObjectId(), 3));
  303. qs.saveGlobalQuestVar("1ClassQuestFinished", "1");
  304. htmltext = "30293-08.html";
  305. }
  306. }
  307. else
  308. {
  309. htmltext = "30293-07.html";
  310. }
  311. }
  312. break;
  313. }
  314. case ALLANA:
  315. {
  316. if (hasQuestItems(player, CRYSTAL_MEDALLION))
  317. {
  318. if (!hasAtLeastOneQuestItem(player, SWINDLERS_MONEY, ALLANA_OF_DAIRY, LIZARD_CAPTAIN_ORDER, HALF_OF_DAIRY))
  319. {
  320. if (qs.isMemoState(2))
  321. {
  322. htmltext = "30424-05.html";
  323. }
  324. else if (qs.isMemoState(1))
  325. {
  326. qs.setCond(2, true);
  327. htmltext = "30424-01.html";
  328. }
  329. }
  330. else if (!hasAtLeastOneQuestItem(player, SWINDLERS_MONEY, ALLANA_OF_DAIRY, HALF_OF_DAIRY) && hasQuestItems(player, LIZARD_CAPTAIN_ORDER))
  331. {
  332. qs.setMemoState(2);
  333. giveItems(player, HALF_OF_DAIRY, 1);
  334. qs.setCond(4, true);
  335. htmltext = "30424-02.html";
  336. }
  337. else if (!hasAtLeastOneQuestItem(player, SWINDLERS_MONEY, ALLANA_OF_DAIRY) && hasQuestItems(player, LIZARD_CAPTAIN_ORDER, HALF_OF_DAIRY))
  338. {
  339. if ((qs.isMemoState(3)) && !hasQuestItems(player, TAMIL_NECKLACE))
  340. {
  341. qs.setMemoState(2);
  342. qs.setCond(4, true);
  343. htmltext = "30424-06.html";
  344. }
  345. else
  346. {
  347. htmltext = "30424-03.html";
  348. }
  349. }
  350. else if (hasQuestItems(player, SWINDLERS_MONEY, LIZARD_CAPTAIN_ORDER, HALF_OF_DAIRY) && !hasQuestItems(player, ALLANA_OF_DAIRY))
  351. {
  352. giveItems(player, ALLANA_OF_DAIRY, 1);
  353. takeItems(player, HALF_OF_DAIRY, 1);
  354. qs.setCond(9, true);
  355. htmltext = "30424-04.html";
  356. }
  357. else if (hasQuestItems(player, SWINDLERS_MONEY, LIZARD_CAPTAIN_ORDER, ALLANA_OF_DAIRY))
  358. {
  359. qs.setCond(7, true);
  360. htmltext = "30424-05.html";
  361. }
  362. }
  363. break;
  364. }
  365. case PERRIN:
  366. {
  367. if (hasQuestItems(player, CRYSTAL_MEDALLION, LIZARD_CAPTAIN_ORDER, HALF_OF_DAIRY))
  368. {
  369. if (hasQuestItems(player, TAMIL_NECKLACE))
  370. {
  371. giveItems(player, SWINDLERS_MONEY, 1);
  372. takeItems(player, TAMIL_NECKLACE, 1);
  373. qs.setCond(6, true);
  374. htmltext = "30428-04.html";
  375. }
  376. else if (hasQuestItems(player, SWINDLERS_MONEY))
  377. {
  378. htmltext = "30428-05.html";
  379. }
  380. else if (qs.isMemoState(3))
  381. {
  382. htmltext = "30428-06.html";
  383. }
  384. else
  385. {
  386. htmltext = "30428-01.html";
  387. }
  388. }
  389. break;
  390. }
  391. }
  392. }
  393. return htmltext;
  394. }
  395. }