Q00198_SevenSignsEmbryo.java 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  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.Q00198_SevenSignsEmbryo;
  20. import quests.Q00197_SevenSignsTheSacredBookOfSeal.Q00197_SevenSignsTheSacredBookOfSeal;
  21. import com.l2jserver.gameserver.ai.CtrlIntention;
  22. import com.l2jserver.gameserver.model.actor.L2Npc;
  23. import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
  24. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  25. import com.l2jserver.gameserver.model.holders.SkillHolder;
  26. import com.l2jserver.gameserver.model.itemcontainer.Inventory;
  27. import com.l2jserver.gameserver.model.quest.Quest;
  28. import com.l2jserver.gameserver.model.quest.QuestState;
  29. import com.l2jserver.gameserver.model.quest.State;
  30. import com.l2jserver.gameserver.network.NpcStringId;
  31. import com.l2jserver.gameserver.network.clientpackets.Say2;
  32. import com.l2jserver.gameserver.network.serverpackets.NpcSay;
  33. /**
  34. * Seven Signs, Embryo (198)
  35. * @author Adry_85
  36. */
  37. public final class Q00198_SevenSignsEmbryo extends Quest
  38. {
  39. // NPCs
  40. private static final int SHILENS_EVIL_THOUGHTS = 27346;
  41. private static final int WOOD = 32593;
  42. private static final int FRANZ = 32597;
  43. private static final int JAINA = 32617;
  44. // Items
  45. private static final int SCULPTURE_OF_DOUBT = 14355;
  46. private static final int DAWNS_BRACELET = 15312;
  47. // Misc
  48. private static final int MIN_LEVEL = 79;
  49. private boolean isBusy = false;
  50. // Skill
  51. private static SkillHolder NPC_HEAL = new SkillHolder(4065, 8);
  52. public Q00198_SevenSignsEmbryo()
  53. {
  54. super(198, Q00198_SevenSignsEmbryo.class.getSimpleName(), "Seven Signs, Embryo");
  55. addFirstTalkId(JAINA);
  56. addStartNpc(WOOD);
  57. addTalkId(WOOD, FRANZ);
  58. addKillId(SHILENS_EVIL_THOUGHTS);
  59. registerQuestItems(SCULPTURE_OF_DOUBT);
  60. }
  61. @Override
  62. public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  63. {
  64. if ((npc.getId() == SHILENS_EVIL_THOUGHTS) && "despawn".equals(event))
  65. {
  66. if (!npc.isDead())
  67. {
  68. isBusy = false;
  69. npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.NPC_ALL, npc.getId(), NpcStringId.NEXT_TIME_YOU_WILL_NOT_ESCAPE));
  70. npc.deleteMe();
  71. }
  72. return super.onAdvEvent(event, npc, player);
  73. }
  74. final QuestState st = getQuestState(player, false);
  75. if (st == null)
  76. {
  77. return null;
  78. }
  79. String htmltext = null;
  80. switch (event)
  81. {
  82. case "32593-02.html":
  83. {
  84. st.startQuest();
  85. htmltext = event;
  86. break;
  87. }
  88. case "32597-02.html":
  89. case "32597-03.html":
  90. case "32597-04.html":
  91. {
  92. if (st.isCond(1))
  93. {
  94. htmltext = event;
  95. }
  96. break;
  97. }
  98. case "fight":
  99. {
  100. htmltext = "32597-05.html";
  101. if (st.isCond(1))
  102. {
  103. isBusy = true;
  104. npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.NPC_ALL, npc.getId(), NpcStringId.S1_THAT_STRANGER_MUST_BE_DEFEATED_HERE_IS_THE_ULTIMATE_HELP).addStringParameter(player.getName()));
  105. startQuestTimer("heal", 30000 - getRandom(20000), npc, player);
  106. L2MonsterInstance monster = (L2MonsterInstance) addSpawn(SHILENS_EVIL_THOUGHTS, -23734, -9184, -5384, 0, false, 0, false, npc.getInstanceId());
  107. monster.broadcastPacket(new NpcSay(monster.getObjectId(), Say2.NPC_ALL, monster.getId(), NpcStringId.YOU_ARE_NOT_THE_OWNER_OF_THAT_ITEM));
  108. monster.setRunning();
  109. monster.addDamageHate(player, 0, 999);
  110. monster.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player);
  111. startQuestTimer("despawn", 300000, monster, null);
  112. }
  113. break;
  114. }
  115. case "heal":
  116. {
  117. if (!npc.isInsideRadius(player, 600, true, false))
  118. {
  119. NpcSay ns = new NpcSay(npc.getObjectId(), Say2.NPC_ALL, npc.getId(), NpcStringId.LOOK_HERE_S1_DONT_FALL_TOO_FAR_BEHIND);
  120. ns.addStringParameter(player.getName());
  121. npc.broadcastPacket(ns);
  122. }
  123. else if (!player.isDead())
  124. {
  125. npc.setTarget(player);
  126. npc.doCast(NPC_HEAL.getSkill());
  127. }
  128. startQuestTimer("heal", 30000 - getRandom(20000), npc, player);
  129. break;
  130. }
  131. case "32597-08.html":
  132. case "32597-09.html":
  133. case "32597-10.html":
  134. {
  135. if (st.isCond(2) && st.hasQuestItems(SCULPTURE_OF_DOUBT))
  136. {
  137. htmltext = event;
  138. }
  139. break;
  140. }
  141. case "32597-11.html":
  142. {
  143. if (st.isCond(2) && st.hasQuestItems(SCULPTURE_OF_DOUBT))
  144. {
  145. st.takeItems(SCULPTURE_OF_DOUBT, -1);
  146. st.setCond(3, true);
  147. htmltext = event;
  148. npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.NPC_ALL, npc.getId(), NpcStringId.WE_WILL_BE_WITH_YOU_ALWAYS));
  149. }
  150. break;
  151. }
  152. case "32617-02.html":
  153. {
  154. htmltext = event;
  155. break;
  156. }
  157. }
  158. return htmltext;
  159. }
  160. @Override
  161. public String onFirstTalk(L2Npc npc, L2PcInstance player)
  162. {
  163. return "32617-01.html";
  164. }
  165. @Override
  166. public String onKill(L2Npc npc, L2PcInstance player, boolean isSummon)
  167. {
  168. final L2PcInstance partyMember = getRandomPartyMember(player, 1);
  169. if (partyMember == null)
  170. {
  171. return null;
  172. }
  173. final QuestState st = getQuestState(partyMember, false);
  174. if (npc.isInsideRadius(partyMember, 1500, true, false))
  175. {
  176. st.giveItems(SCULPTURE_OF_DOUBT, 1);
  177. st.setCond(2, true);
  178. }
  179. isBusy = false;
  180. cancelQuestTimers("despawn");
  181. cancelQuestTimers("heal");
  182. npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.NPC_ALL, npc.getId(), NpcStringId.S1_YOU_MAY_HAVE_WON_THIS_TIME_BUT_NEXT_TIME_I_WILL_SURELY_CAPTURE_YOU).addStringParameter(partyMember.getName()));
  183. npc.deleteMe();
  184. partyMember.showQuestMovie(14);
  185. return super.onKill(npc, player, isSummon);
  186. }
  187. @Override
  188. public String onTalk(L2Npc npc, L2PcInstance player)
  189. {
  190. QuestState st = getQuestState(player, true);
  191. String htmltext = getNoQuestMsg(player);
  192. switch (st.getState())
  193. {
  194. case State.COMPLETED:
  195. {
  196. htmltext = getAlreadyCompletedMsg(player);
  197. break;
  198. }
  199. case State.CREATED:
  200. {
  201. if (npc.getId() == WOOD)
  202. {
  203. st = player.getQuestState(Q00197_SevenSignsTheSacredBookOfSeal.class.getSimpleName());
  204. htmltext = ((player.getLevel() >= MIN_LEVEL) && (st != null) && (st.isCompleted())) ? "32593-01.htm" : "32593-03.html";
  205. }
  206. break;
  207. }
  208. case State.STARTED:
  209. {
  210. if (npc.getId() == WOOD)
  211. {
  212. if ((st.getCond() > 0) && (st.getCond() < 3))
  213. {
  214. htmltext = "32593-04.html";
  215. }
  216. else if (st.isCond(3))
  217. {
  218. if (player.getLevel() >= MIN_LEVEL)
  219. {
  220. st.addExpAndSp(315108090, 34906059);
  221. st.giveItems(DAWNS_BRACELET, 1);
  222. st.giveItems(Inventory.ANCIENT_ADENA_ID, 1500000);
  223. st.exitQuest(false, true);
  224. htmltext = "32593-05.html";
  225. }
  226. else
  227. {
  228. htmltext = "level_check.html";
  229. }
  230. }
  231. }
  232. else if (npc.getId() == FRANZ)
  233. {
  234. switch (st.getCond())
  235. {
  236. case 1:
  237. {
  238. htmltext = (isBusy) ? "32597-06.html" : "32597-01.html";
  239. break;
  240. }
  241. case 2:
  242. {
  243. if (st.hasQuestItems(SCULPTURE_OF_DOUBT))
  244. {
  245. htmltext = "32597-07.html";
  246. }
  247. break;
  248. }
  249. case 3:
  250. {
  251. htmltext = "32597-12.html";
  252. break;
  253. }
  254. }
  255. }
  256. break;
  257. }
  258. }
  259. return htmltext;
  260. }
  261. }