Q00340_SubjugationOfLizardmen.java 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345
  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.Q00340_SubjugationOfLizardmen;
  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.quest.Quest;
  24. import com.l2jserver.gameserver.model.quest.QuestState;
  25. import com.l2jserver.gameserver.util.Util;
  26. /**
  27. * Subjugation Of Lizardmen (340)
  28. * @author ivantotov
  29. */
  30. public final class Q00340_SubjugationOfLizardmen extends Quest
  31. {
  32. // NPCs
  33. private static final int HIGH_PRIESTESS_LEVIAN = 30037;
  34. private static final int PRIEST_ADONIUS = 30375;
  35. private static final int GUARD_WEISZ = 30385;
  36. private static final int CHEST_OF_BIFRONS = 30989;
  37. // Items
  38. private static final int TRADE_CARGO = 4255;
  39. private static final int AGNESS_HOLY_SYMBOL = 4256;
  40. private static final int AGNESS_ROSARY = 4257;
  41. private static final int SINISTER_TOTEM = 4258;
  42. // Monster
  43. private static final int FELIM_LIZARDMAN = 20008;
  44. private static final int FELIM_LIZARDMAN_SCOUT = 20010;
  45. private static final int FELIM_LIZARDMAN_WARRIOR = 20014;
  46. private static final int LANGK_LIZARDMAN_WARRIOR = 20024;
  47. private static final int LANGK_LIZARDMAN_SCOUT = 20027;
  48. private static final int LANGK_LIZARDMAN = 20030;
  49. // Raid Boss
  50. private static final int SERPENT_DEMON_BIFRONS = 25146;
  51. // Misc
  52. private static final int MIN_LEVEL = 17;
  53. public Q00340_SubjugationOfLizardmen()
  54. {
  55. super(340, Q00340_SubjugationOfLizardmen.class.getSimpleName(), "Subjugation Of Lizardmen");
  56. addStartNpc(GUARD_WEISZ);
  57. addTalkId(GUARD_WEISZ, HIGH_PRIESTESS_LEVIAN, PRIEST_ADONIUS, CHEST_OF_BIFRONS);
  58. addKillId(FELIM_LIZARDMAN, FELIM_LIZARDMAN_SCOUT, FELIM_LIZARDMAN_WARRIOR, LANGK_LIZARDMAN_WARRIOR, LANGK_LIZARDMAN_SCOUT, LANGK_LIZARDMAN, SERPENT_DEMON_BIFRONS);
  59. registerQuestItems(TRADE_CARGO, AGNESS_HOLY_SYMBOL, AGNESS_ROSARY, SINISTER_TOTEM);
  60. }
  61. @Override
  62. public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  63. {
  64. final QuestState qs = getQuestState(player, false);
  65. if (qs == null)
  66. {
  67. return null;
  68. }
  69. String htmltext = null;
  70. switch (event)
  71. {
  72. case "30385-03.htm":
  73. {
  74. if (qs.isCreated())
  75. {
  76. qs.startQuest();
  77. qs.setMemoState(1);
  78. htmltext = event;
  79. }
  80. break;
  81. }
  82. case "30385-04.html":
  83. case "30385-08.html":
  84. {
  85. htmltext = event;
  86. break;
  87. }
  88. case "30385-07.html":
  89. {
  90. takeItems(player, TRADE_CARGO, -1);
  91. qs.setMemoState(2);
  92. qs.setCond(2, true);
  93. htmltext = event;
  94. break;
  95. }
  96. case "30385-09.html":
  97. {
  98. if (getQuestItemsCount(player, TRADE_CARGO) >= 30)
  99. {
  100. giveAdena(player, 4090, true);
  101. takeItems(player, TRADE_CARGO, -1);
  102. qs.setMemoState(1);
  103. htmltext = event;
  104. }
  105. break;
  106. }
  107. case "30385-10.html":
  108. {
  109. if (getQuestItemsCount(player, TRADE_CARGO) >= 30)
  110. {
  111. giveAdena(player, 4090, true);
  112. takeItems(player, TRADE_CARGO, -1);
  113. qs.exitQuest(false, true);
  114. htmltext = event;
  115. }
  116. break;
  117. }
  118. case "30037-02.html":
  119. {
  120. qs.setMemoState(5);
  121. qs.setCond(5, true);
  122. htmltext = event;
  123. break;
  124. }
  125. case "30375-02.html":
  126. {
  127. qs.setMemoState(3);
  128. qs.setCond(3, true);
  129. htmltext = event;
  130. break;
  131. }
  132. case "30989-02.html":
  133. {
  134. if (qs.isMemoState(5))
  135. {
  136. qs.setMemoState(6);
  137. qs.setCond(6, true);
  138. giveItems(player, SINISTER_TOTEM, 1);
  139. htmltext = event;
  140. }
  141. else
  142. {
  143. htmltext = "30989-03.html";
  144. }
  145. break;
  146. }
  147. }
  148. return htmltext;
  149. }
  150. @Override
  151. public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
  152. {
  153. final QuestState qs = getQuestState(killer, false);
  154. if ((qs != null) && qs.isStarted() && Util.checkIfInRange(1500, npc, killer, true))
  155. {
  156. switch (npc.getId())
  157. {
  158. case FELIM_LIZARDMAN:
  159. case FELIM_LIZARDMAN_SCOUT:
  160. {
  161. if (qs.isMemoState(1))
  162. {
  163. giveItemRandomly(killer, npc, TRADE_CARGO, 1, 30, 0.63, true);
  164. }
  165. break;
  166. }
  167. case FELIM_LIZARDMAN_WARRIOR:
  168. {
  169. if (qs.isMemoState(1))
  170. {
  171. giveItemRandomly(killer, npc, TRADE_CARGO, 1, 30, 0.68, true);
  172. }
  173. break;
  174. }
  175. case LANGK_LIZARDMAN_WARRIOR:
  176. {
  177. if (qs.isMemoState(3))
  178. {
  179. if (!hasQuestItems(killer, AGNESS_HOLY_SYMBOL) && (getRandom(100) <= 19))
  180. {
  181. giveItems(killer, AGNESS_HOLY_SYMBOL, 1);
  182. playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
  183. }
  184. else if (hasQuestItems(killer, AGNESS_HOLY_SYMBOL) && !hasQuestItems(killer, AGNESS_ROSARY) && (getRandom(100) <= 18))
  185. {
  186. giveItems(killer, AGNESS_ROSARY, 1);
  187. playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
  188. }
  189. }
  190. break;
  191. }
  192. case LANGK_LIZARDMAN_SCOUT:
  193. case LANGK_LIZARDMAN:
  194. {
  195. if (qs.isMemoState(3))
  196. {
  197. if (!hasQuestItems(killer, AGNESS_HOLY_SYMBOL) && (getRandom(100) <= 18))
  198. {
  199. giveItems(killer, AGNESS_HOLY_SYMBOL, 1);
  200. playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
  201. }
  202. else if (hasQuestItems(killer, AGNESS_HOLY_SYMBOL) && !hasQuestItems(killer, AGNESS_ROSARY) && (getRandom(100) <= 18))
  203. {
  204. giveItems(killer, AGNESS_ROSARY, 1);
  205. playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
  206. }
  207. }
  208. break;
  209. }
  210. case SERPENT_DEMON_BIFRONS:
  211. {
  212. addSpawn(CHEST_OF_BIFRONS, npc, true, 30000);
  213. break;
  214. }
  215. }
  216. }
  217. return super.onKill(npc, killer, isSummon);
  218. }
  219. @Override
  220. public String onTalk(L2Npc npc, L2PcInstance player)
  221. {
  222. final QuestState qs = getQuestState(player, true);
  223. final int memoState = qs.getMemoState();
  224. String htmltext = getNoQuestMsg(player);
  225. if (qs.isCreated())
  226. {
  227. if (npc.getId() == GUARD_WEISZ)
  228. {
  229. htmltext = (player.getLevel() >= MIN_LEVEL) ? "30385-02.htm" : "30385-01.htm";
  230. }
  231. }
  232. else if (qs.isStarted())
  233. {
  234. switch (npc.getId())
  235. {
  236. case GUARD_WEISZ:
  237. {
  238. if (memoState == 1)
  239. {
  240. if (getQuestItemsCount(player, TRADE_CARGO) < 30)
  241. {
  242. htmltext = "30385-05.html";
  243. }
  244. else
  245. {
  246. htmltext = "30385-06.html";
  247. }
  248. }
  249. else if (memoState == 2)
  250. {
  251. htmltext = "30385-11.html";
  252. }
  253. else if ((memoState >= 3) && (memoState < 7))
  254. {
  255. htmltext = "30385-12.html";
  256. }
  257. else if (memoState == 7)
  258. {
  259. giveAdena(player, 14700, true);
  260. qs.exitQuest(false, true);
  261. htmltext = "30385-13.html";
  262. }
  263. break;
  264. }
  265. case HIGH_PRIESTESS_LEVIAN:
  266. {
  267. if (memoState == 4)
  268. {
  269. htmltext = "30037-01.html";
  270. }
  271. else if (memoState == 5)
  272. {
  273. htmltext = "30037-03.html";
  274. }
  275. else if (memoState == 6)
  276. {
  277. takeItems(player, SINISTER_TOTEM, 1);
  278. qs.setMemoState(7);
  279. qs.setCond(7, true);
  280. htmltext = "30037-04.html";
  281. }
  282. else if (memoState == 7)
  283. {
  284. htmltext = "30037-05.html";
  285. }
  286. break;
  287. }
  288. case PRIEST_ADONIUS:
  289. {
  290. if (memoState == 2)
  291. {
  292. htmltext = "30375-01.html";
  293. }
  294. else if (memoState == 3)
  295. {
  296. if (hasQuestItems(player, AGNESS_HOLY_SYMBOL, AGNESS_ROSARY))
  297. {
  298. takeItems(player, AGNESS_HOLY_SYMBOL, 1);
  299. takeItems(player, AGNESS_ROSARY, 1);
  300. qs.setMemoState(4);
  301. qs.setCond(4, true);
  302. htmltext = "30375-04.html";
  303. }
  304. else
  305. {
  306. htmltext = "30375-03.html";
  307. }
  308. }
  309. else if (memoState == 4)
  310. {
  311. htmltext = "30375-05.html";
  312. }
  313. else if (memoState >= 5)
  314. {
  315. htmltext = "30375-06.html";
  316. }
  317. break;
  318. }
  319. case CHEST_OF_BIFRONS:
  320. {
  321. if (memoState == 5)
  322. {
  323. htmltext = "30989-01.html";
  324. }
  325. break;
  326. }
  327. }
  328. }
  329. else if (qs.isCompleted())
  330. {
  331. if (npc.getId() == GUARD_WEISZ)
  332. {
  333. htmltext = getAlreadyCompletedMsg(player);
  334. }
  335. }
  336. return htmltext;
  337. }
  338. }