Q00186_ContractExecution.java 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  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.Q00186_ContractExecution;
  20. import java.util.HashMap;
  21. import java.util.Map;
  22. import quests.Q00184_ArtOfPersuasion.Q00184_ArtOfPersuasion;
  23. import com.l2jserver.gameserver.enums.QuestSound;
  24. import com.l2jserver.gameserver.model.actor.L2Npc;
  25. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  26. import com.l2jserver.gameserver.model.quest.Quest;
  27. import com.l2jserver.gameserver.model.quest.QuestState;
  28. import com.l2jserver.gameserver.util.Util;
  29. /**
  30. * Contract Execution (186)
  31. * @author ivantotov
  32. */
  33. public final class Q00186_ContractExecution extends Quest
  34. {
  35. // NPCs
  36. private static final int MAESTRO_NIKOLA = 30621;
  37. private static final int RESEARCHER_LORAIN = 30673;
  38. private static final int BLUEPRINT_SELLER_LUKA = 31437;
  39. // Items
  40. private static final int LORAINES_CERTIFICATE = 10362;
  41. private static final int METALLOGRAPH_RESEARCH_REPORT = 10366;
  42. private static final int LETO_LIZARDMAN_ACCESSORY = 10367;
  43. // Misc
  44. private static final int MIN_LEVEL = 41;
  45. private static final int MAX_LEVEL_FOR_EXP_SP = 47;
  46. // Monsters
  47. private static final Map<Integer, Integer> MONSTERS = new HashMap<>();
  48. static
  49. {
  50. MONSTERS.put(20577, 40); // Leto Lizardman
  51. MONSTERS.put(20578, 44); // Leto Lizardman Archer
  52. MONSTERS.put(20579, 46); // Leto Lizardman Soldier
  53. MONSTERS.put(20580, 88); // Leto Lizardman Warrior
  54. MONSTERS.put(20581, 50); // Leto Lizardman Shaman
  55. MONSTERS.put(20582, 100); // Leto Lizardman Overlord
  56. }
  57. public Q00186_ContractExecution()
  58. {
  59. super(186, Q00186_ContractExecution.class.getSimpleName(), "Contract Execution");
  60. addStartNpc(RESEARCHER_LORAIN);
  61. addTalkId(RESEARCHER_LORAIN, BLUEPRINT_SELLER_LUKA, MAESTRO_NIKOLA);
  62. addKillId(MONSTERS.keySet());
  63. registerQuestItems(METALLOGRAPH_RESEARCH_REPORT, LETO_LIZARDMAN_ACCESSORY);
  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 "30673-03.htm":
  77. {
  78. if ((player.getLevel() >= MIN_LEVEL) && hasQuestItems(player, LORAINES_CERTIFICATE))
  79. {
  80. qs.startQuest();
  81. qs.setMemoState(1);
  82. giveItems(player, METALLOGRAPH_RESEARCH_REPORT, 1);
  83. takeItems(player, LORAINES_CERTIFICATE, -1);
  84. htmltext = event;
  85. }
  86. break;
  87. }
  88. case "30621-02.html":
  89. {
  90. if (qs.isMemoState(1))
  91. {
  92. htmltext = event;
  93. }
  94. break;
  95. }
  96. case "30621-03.html":
  97. {
  98. if (qs.isMemoState(1))
  99. {
  100. qs.setMemoState(2);
  101. qs.setCond(2, true);
  102. htmltext = event;
  103. }
  104. break;
  105. }
  106. case "31437-03.html":
  107. {
  108. if (qs.isMemoState(2) && hasQuestItems(player, LETO_LIZARDMAN_ACCESSORY))
  109. {
  110. htmltext = event;
  111. }
  112. break;
  113. }
  114. case "31437-04.html":
  115. {
  116. if (qs.isMemoState(2) && hasQuestItems(player, LETO_LIZARDMAN_ACCESSORY))
  117. {
  118. qs.setMemoState(3);
  119. htmltext = event;
  120. }
  121. break;
  122. }
  123. case "31437-06.html":
  124. {
  125. if (qs.isMemoState(3))
  126. {
  127. giveAdena(player, 105083, true);
  128. if (player.getLevel() < MAX_LEVEL_FOR_EXP_SP)
  129. {
  130. addExpAndSp(player, 285935, 18711);
  131. }
  132. qs.exitQuest(false, true);
  133. htmltext = event;
  134. }
  135. break;
  136. }
  137. }
  138. return htmltext;
  139. }
  140. @Override
  141. public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
  142. {
  143. final QuestState qs = getQuestState(killer, false);
  144. if ((qs != null) && qs.isMemoState(2) && Util.checkIfInRange(1500, npc, killer, false) && (getRandom(100) < MONSTERS.get(npc.getId())))
  145. {
  146. if (!hasQuestItems(killer, LETO_LIZARDMAN_ACCESSORY))
  147. {
  148. giveItems(killer, LETO_LIZARDMAN_ACCESSORY, 1);
  149. playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
  150. }
  151. }
  152. return super.onKill(npc, killer, isSummon);
  153. }
  154. @Override
  155. public String onTalk(L2Npc npc, L2PcInstance player)
  156. {
  157. final QuestState qs = getQuestState(player, true);
  158. final int memoState = qs.getMemoState();
  159. String htmltext = getNoQuestMsg(player);
  160. if (qs.isCreated())
  161. {
  162. if (npc.getId() == RESEARCHER_LORAIN)
  163. {
  164. final QuestState q184 = player.getQuestState(Q00184_ArtOfPersuasion.class.getSimpleName());
  165. if ((q184 != null) && q184.isCompleted() && hasQuestItems(player, LORAINES_CERTIFICATE))
  166. {
  167. htmltext = player.getLevel() >= MIN_LEVEL ? "30673-01.htm" : "30673-02.htm";
  168. }
  169. }
  170. }
  171. else if (qs.isStarted())
  172. {
  173. switch (npc.getId())
  174. {
  175. case RESEARCHER_LORAIN:
  176. {
  177. if (memoState >= 1)
  178. {
  179. htmltext = "30673-04.html";
  180. }
  181. break;
  182. }
  183. case MAESTRO_NIKOLA:
  184. {
  185. if (memoState == 1)
  186. {
  187. htmltext = "30621-01.html";
  188. }
  189. else if (memoState == 2)
  190. {
  191. htmltext = "30621-04.html";
  192. }
  193. break;
  194. }
  195. case BLUEPRINT_SELLER_LUKA:
  196. {
  197. if (memoState == 2)
  198. {
  199. if (hasQuestItems(player, LETO_LIZARDMAN_ACCESSORY))
  200. {
  201. htmltext = "31437-02.html";
  202. }
  203. else
  204. {
  205. htmltext = "31437-01.html";
  206. }
  207. }
  208. else if (memoState == 3)
  209. {
  210. htmltext = "31437-05.html";
  211. }
  212. break;
  213. }
  214. }
  215. }
  216. else if (qs.isCompleted())
  217. {
  218. if (npc.getId() == RESEARCHER_LORAIN)
  219. {
  220. htmltext = getAlreadyCompletedMsg(player);
  221. }
  222. }
  223. return htmltext;
  224. }
  225. }