Q00039_RedEyedInvaders.java 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  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.Q00039_RedEyedInvaders;
  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. * Red-eyed Invaders (39)
  27. * @author janiko
  28. */
  29. public final class Q00039_RedEyedInvaders extends Quest
  30. {
  31. // NPCs
  32. private static final int CAPTAIN_BATHIA = 30332;
  33. private static final int GUARD_BABENCO = 30334;
  34. // Monsters
  35. private static final int MALE_LIZARDMAN = 20919;
  36. private static final int MALE_LIZARDMAN_SCOUT = 20920;
  37. private static final int MALE_LIZARDMAN_GUARD = 20921;
  38. private static final int GIANT_ARANE = 20925;
  39. // Items
  40. private static final ItemHolder LIZ_NECKLACE_A = new ItemHolder(7178, 100);
  41. private static final ItemHolder LIZ_NECKLACE_B = new ItemHolder(7179, 100);
  42. private static final ItemHolder LIZ_PERFUME = new ItemHolder(7180, 30);
  43. private static final ItemHolder LIZ_GEM = new ItemHolder(7181, 30);
  44. // Rewards
  45. private static final ItemHolder GREEN_HIGH_LURE = new ItemHolder(6521, 60);
  46. private static final ItemHolder BABYDUCK_ROD = new ItemHolder(6529, 1);
  47. private static final ItemHolder FISHING_SHOT_NONE = new ItemHolder(6535, 500);
  48. // Misc
  49. private static final int MIN_LVL = 20;
  50. public Q00039_RedEyedInvaders()
  51. {
  52. super(39, Q00039_RedEyedInvaders.class.getSimpleName(), "Red-eyed Invaders");
  53. addStartNpc(GUARD_BABENCO);
  54. addTalkId(GUARD_BABENCO, CAPTAIN_BATHIA);
  55. addKillId(MALE_LIZARDMAN_GUARD, MALE_LIZARDMAN_SCOUT, MALE_LIZARDMAN, GIANT_ARANE);
  56. registerQuestItems(LIZ_NECKLACE_A.getId(), LIZ_NECKLACE_B.getId(), LIZ_PERFUME.getId(), LIZ_GEM.getId());
  57. }
  58. @Override
  59. public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  60. {
  61. final QuestState qs = getQuestState(player, false);
  62. String htmltext = null;
  63. if (qs == null)
  64. {
  65. return htmltext;
  66. }
  67. switch (event)
  68. {
  69. case "30334-03.htm":
  70. {
  71. if (qs.isCreated())
  72. {
  73. qs.startQuest();
  74. htmltext = event;
  75. }
  76. break;
  77. }
  78. case "30332-02.html":
  79. {
  80. if (qs.isCond(1))
  81. {
  82. qs.setCond(2, true);
  83. htmltext = event;
  84. }
  85. break;
  86. }
  87. case "30332-05.html":
  88. {
  89. if (qs.isCond(3))
  90. {
  91. if (hasAllItems(player, true, LIZ_NECKLACE_A, LIZ_NECKLACE_B))
  92. {
  93. qs.setCond(4, true);
  94. takeAllItems(player, LIZ_NECKLACE_A, LIZ_NECKLACE_B);
  95. htmltext = event;
  96. }
  97. else
  98. {
  99. htmltext = "30332-06.html";
  100. }
  101. }
  102. break;
  103. }
  104. case "30332-09.html":
  105. {
  106. if (qs.isCond(5))
  107. {
  108. if (hasAllItems(player, true, LIZ_PERFUME, LIZ_GEM))
  109. {
  110. rewardItems(player, GREEN_HIGH_LURE);
  111. rewardItems(player, BABYDUCK_ROD);
  112. rewardItems(player, FISHING_SHOT_NONE);
  113. addExpAndSp(player, 62366, 2783);
  114. qs.exitQuest(false, true);
  115. htmltext = event;
  116. }
  117. else
  118. {
  119. htmltext = "30332-10.html";
  120. }
  121. }
  122. break;
  123. }
  124. }
  125. return htmltext;
  126. }
  127. @Override
  128. public String onTalk(L2Npc npc, L2PcInstance talker)
  129. {
  130. final QuestState qs = getQuestState(talker, true);
  131. String htmltext = getNoQuestMsg(talker);
  132. switch (npc.getId())
  133. {
  134. case CAPTAIN_BATHIA:
  135. {
  136. switch (qs.getCond())
  137. {
  138. case 1:
  139. {
  140. htmltext = "30332-01.html";
  141. break;
  142. }
  143. case 2:
  144. {
  145. htmltext = "30332-03.html";
  146. break;
  147. }
  148. case 3:
  149. {
  150. htmltext = "30332-04.html";
  151. break;
  152. }
  153. case 4:
  154. {
  155. htmltext = "30332-07.html";
  156. break;
  157. }
  158. case 5:
  159. {
  160. htmltext = "30332-08.html";
  161. break;
  162. }
  163. }
  164. break;
  165. }
  166. case GUARD_BABENCO:
  167. {
  168. if (qs.isCreated())
  169. {
  170. htmltext = (talker.getLevel() >= MIN_LVL) ? "30334-01.htm" : "30334-02.htm";
  171. }
  172. else if (qs.isStarted() && qs.isCond(1))
  173. {
  174. htmltext = "30334-04.html";
  175. }
  176. else if (qs.isCompleted())
  177. {
  178. htmltext = getAlreadyCompletedMsg(talker);
  179. }
  180. break;
  181. }
  182. }
  183. return htmltext;
  184. }
  185. @Override
  186. public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
  187. {
  188. switch (npc.getId())
  189. {
  190. case MALE_LIZARDMAN:
  191. {
  192. final QuestState qs = getRandomPartyMemberState(killer, 2, 3, npc);
  193. if ((qs != null) && giveItemRandomly(qs.getPlayer(), npc, LIZ_NECKLACE_A.getId(), 1, LIZ_NECKLACE_A.getCount(), 0.5, true))
  194. {
  195. if (hasItem(qs.getPlayer(), LIZ_NECKLACE_B))
  196. {
  197. qs.setCond(3);
  198. }
  199. }
  200. break;
  201. }
  202. case MALE_LIZARDMAN_SCOUT:
  203. {
  204. if (getRandomBoolean())
  205. {
  206. final QuestState qs = getRandomPartyMemberState(killer, 2, 3, npc);
  207. if ((qs != null) && giveItemRandomly(qs.getPlayer(), npc, LIZ_NECKLACE_A.getId(), 1, LIZ_NECKLACE_A.getCount(), 0.5, true))
  208. {
  209. if (hasItem(qs.getPlayer(), LIZ_NECKLACE_B))
  210. {
  211. qs.setCond(3);
  212. }
  213. }
  214. }
  215. else
  216. {
  217. final QuestState qs = getRandomPartyMemberState(killer, 4, 3, npc);
  218. if ((qs != null) && giveItemRandomly(qs.getPlayer(), npc, LIZ_PERFUME.getId(), 1, LIZ_PERFUME.getCount(), 0.25, true))
  219. {
  220. if (hasItem(qs.getPlayer(), LIZ_GEM))
  221. {
  222. qs.setCond(5);
  223. }
  224. }
  225. }
  226. break;
  227. }
  228. case MALE_LIZARDMAN_GUARD:
  229. {
  230. if (getRandomBoolean())
  231. {
  232. final QuestState qs = getRandomPartyMemberState(killer, 2, 3, npc);
  233. if ((qs != null) && giveItemRandomly(qs.getPlayer(), npc, LIZ_NECKLACE_B.getId(), 1, LIZ_NECKLACE_B.getCount(), 0.5, true))
  234. {
  235. if (hasItem(qs.getPlayer(), LIZ_NECKLACE_A))
  236. {
  237. qs.setCond(3);
  238. }
  239. }
  240. }
  241. else
  242. {
  243. final QuestState qs = getRandomPartyMemberState(killer, 4, 3, npc);
  244. if ((qs != null) && giveItemRandomly(qs.getPlayer(), npc, LIZ_PERFUME.getId(), 1, LIZ_PERFUME.getCount(), 0.3, true))
  245. {
  246. if (hasItem(qs.getPlayer(), LIZ_GEM))
  247. {
  248. qs.setCond(5);
  249. }
  250. }
  251. }
  252. break;
  253. }
  254. case GIANT_ARANE:
  255. {
  256. final QuestState qs = getRandomPartyMemberState(killer, 4, 3, npc);
  257. if ((qs != null) && giveItemRandomly(qs.getPlayer(), npc, LIZ_GEM.getId(), 1, LIZ_GEM.getCount(), 0.3, true))
  258. {
  259. if (hasItem(qs.getPlayer(), LIZ_PERFUME))
  260. {
  261. qs.setCond(5);
  262. }
  263. }
  264. break;
  265. }
  266. }
  267. return super.onKill(npc, killer, isSummon);
  268. }
  269. }