MonasteryOfSilence1.java 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  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 instances.MonasteryOfSilence1;
  20. import instances.AbstractInstance;
  21. import com.l2jserver.gameserver.instancemanager.InstanceManager;
  22. import com.l2jserver.gameserver.model.Location;
  23. import com.l2jserver.gameserver.model.actor.L2Npc;
  24. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  25. import com.l2jserver.gameserver.model.holders.SkillHolder;
  26. import com.l2jserver.gameserver.model.instancezone.InstanceWorld;
  27. import com.l2jserver.gameserver.network.NpcStringId;
  28. import com.l2jserver.gameserver.network.clientpackets.Say2;
  29. /**
  30. * Monastery of Silence instance zone.
  31. * @author Adry_85
  32. */
  33. public final class MonasteryOfSilence1 extends AbstractInstance
  34. {
  35. protected static final class MoSWorld extends InstanceWorld
  36. {
  37. protected L2Npc elcadia = null;
  38. }
  39. // NPCs
  40. private static final int ELCADIA_INSTANCE = 32787;
  41. private static final int ERIS_EVIL_THOUGHTS = 32792;
  42. private static final int RELIC_GUARDIAN = 32803;
  43. private static final int RELIC_WATCHER1 = 32804;
  44. private static final int RELIC_WATCHER2 = 32805;
  45. private static final int RELIC_WATCHER3 = 32806;
  46. private static final int RELIC_WATCHER4 = 32807;
  47. private static final int ODD_GLOBE = 32815;
  48. private static final int TELEPORT_CONTROL_DEVICE1 = 32817;
  49. private static final int TELEPORT_CONTROL_DEVICE2 = 32818;
  50. private static final int TELEPORT_CONTROL_DEVICE3 = 32819;
  51. private static final int TELEPORT_CONTROL_DEVICE4 = 32820;
  52. // Skills
  53. private static final SkillHolder[] BUFFS =
  54. {
  55. new SkillHolder(6725, 1), // Bless the Blood of Elcadia
  56. new SkillHolder(6728, 1), // Recharge of Elcadia
  57. new SkillHolder(6730, 1), // Greater Battle Heal of Elcadia
  58. };
  59. // Locations
  60. private static final Location START_LOC = new Location(120710, -86971, -3392);
  61. private static final Location EXIT_LOC = new Location(115983, -87351, -3397, 0, 0);
  62. private static final Location CENTRAL_ROOM_LOC = new Location(85794, -249788, -8320);
  63. private static final Location SOUTH_WATCHERS_ROOM_LOC = new Location(85798, -246566, -8320);
  64. private static final Location WEST_WATCHERS_ROOM_LOC = new Location(82531, -249405, -8320);
  65. private static final Location EAST_WATCHERS_ROOM_LOC = new Location(88665, -249784, -8320);
  66. private static final Location NORTH_WATCHERS_ROOM_LOC = new Location(85792, -252336, -8320);
  67. private static final Location BACK_LOC = new Location(120710, -86971, -3392);
  68. // NpcString
  69. private static final NpcStringId[] ELCADIA_DIALOGS =
  70. {
  71. NpcStringId.IT_SEEMS_THAT_YOU_CANNOT_REMEMBER_TO_THE_ROOM_OF_THE_WATCHER_WHO_FOUND_THE_BOOK,
  72. NpcStringId.WE_MUST_SEARCH_HIGH_AND_LOW_IN_EVERY_ROOM_FOR_THE_READING_DESK_THAT_CONTAINS_THE_BOOK_WE_SEEK,
  73. NpcStringId.REMEMBER_THE_CONTENT_OF_THE_BOOKS_THAT_YOU_FOUND_YOU_CANT_TAKE_THEM_OUT_WITH_YOU
  74. };
  75. // Misc
  76. private static final int TEMPLATE_ID = 151;
  77. public MonasteryOfSilence1()
  78. {
  79. super(MonasteryOfSilence1.class.getSimpleName());
  80. addFirstTalkId(TELEPORT_CONTROL_DEVICE1, TELEPORT_CONTROL_DEVICE2, TELEPORT_CONTROL_DEVICE3, TELEPORT_CONTROL_DEVICE4, ERIS_EVIL_THOUGHTS);
  81. addStartNpc(ODD_GLOBE, TELEPORT_CONTROL_DEVICE1, TELEPORT_CONTROL_DEVICE2, TELEPORT_CONTROL_DEVICE3, TELEPORT_CONTROL_DEVICE4, ERIS_EVIL_THOUGHTS);
  82. addTalkId(ODD_GLOBE, ERIS_EVIL_THOUGHTS, RELIC_GUARDIAN, RELIC_WATCHER1, RELIC_WATCHER2, RELIC_WATCHER3, RELIC_WATCHER4, TELEPORT_CONTROL_DEVICE1, TELEPORT_CONTROL_DEVICE2, TELEPORT_CONTROL_DEVICE3, TELEPORT_CONTROL_DEVICE4, ERIS_EVIL_THOUGHTS);
  83. }
  84. @Override
  85. public void onEnterInstance(L2PcInstance player, InstanceWorld world, boolean firstEntrance)
  86. {
  87. if (firstEntrance)
  88. {
  89. world.addAllowed(player.getObjectId());
  90. }
  91. teleportPlayer(player, START_LOC, world.getInstanceId(), false);
  92. spawnElcadia(player, (MoSWorld) world);
  93. }
  94. @Override
  95. public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  96. {
  97. final InstanceWorld tmpworld = InstanceManager.getInstance().getPlayerWorld(player);
  98. if (!(tmpworld instanceof MoSWorld))
  99. {
  100. return null;
  101. }
  102. final MoSWorld world = (MoSWorld) tmpworld;
  103. switch (event)
  104. {
  105. case "TELE2":
  106. {
  107. teleportPlayer(player, CENTRAL_ROOM_LOC, world.getInstanceId());
  108. world.elcadia.teleToLocation(CENTRAL_ROOM_LOC, 0, world.getInstanceId());
  109. startQuestTimer("START_MOVIE", 2000, npc, player);
  110. break;
  111. }
  112. case "EXIT":
  113. {
  114. cancelQuestTimer("FOLLOW", npc, player);
  115. teleportPlayer(player, EXIT_LOC, 0);
  116. world.elcadia.deleteMe();
  117. break;
  118. }
  119. case "START_MOVIE":
  120. {
  121. player.showQuestMovie(24);
  122. break;
  123. }
  124. case "BACK":
  125. {
  126. teleportPlayer(player, BACK_LOC, world.getInstanceId());
  127. world.elcadia.teleToLocation(BACK_LOC, 0, world.getInstanceId());
  128. break;
  129. }
  130. case "EAST":
  131. {
  132. teleportPlayer(player, EAST_WATCHERS_ROOM_LOC, world.getInstanceId());
  133. world.elcadia.teleToLocation(EAST_WATCHERS_ROOM_LOC, 0, world.getInstanceId());
  134. break;
  135. }
  136. case "WEST":
  137. {
  138. teleportPlayer(player, WEST_WATCHERS_ROOM_LOC, world.getInstanceId());
  139. world.elcadia.teleToLocation(WEST_WATCHERS_ROOM_LOC, 0, world.getInstanceId());
  140. break;
  141. }
  142. case "NORTH":
  143. {
  144. teleportPlayer(player, NORTH_WATCHERS_ROOM_LOC, world.getInstanceId());
  145. world.elcadia.teleToLocation(NORTH_WATCHERS_ROOM_LOC, 0, world.getInstanceId());
  146. break;
  147. }
  148. case "SOUTH":
  149. {
  150. teleportPlayer(player, SOUTH_WATCHERS_ROOM_LOC, world.getInstanceId());
  151. world.elcadia.teleToLocation(SOUTH_WATCHERS_ROOM_LOC, 0, world.getInstanceId());
  152. break;
  153. }
  154. case "CENTER":
  155. {
  156. teleportPlayer(player, CENTRAL_ROOM_LOC, world.getInstanceId());
  157. world.elcadia.teleToLocation(CENTRAL_ROOM_LOC, 0, world.getInstanceId());
  158. break;
  159. }
  160. case "FOLLOW":
  161. {
  162. npc.setIsRunning(true);
  163. npc.getAI().startFollow(player);
  164. if (player.isInCombat())
  165. {
  166. broadcastNpcSay(npc, Say2.NPC_ALL, NpcStringId.YOUR_WORK_HERE_IS_DONE_SO_RETURN_TO_THE_CENTRAL_GUARDIAN);
  167. npc.setTarget(player);
  168. npc.doCast(BUFFS[getRandom(BUFFS.length)].getSkill());
  169. }
  170. else
  171. {
  172. broadcastNpcSay(npc, Say2.NPC_ALL, ELCADIA_DIALOGS[getRandom(ELCADIA_DIALOGS.length)]);
  173. }
  174. startQuestTimer("FOLLOW", 10000, npc, player);
  175. break;
  176. }
  177. }
  178. return super.onAdvEvent(event, npc, player);
  179. }
  180. @Override
  181. public String onTalk(L2Npc npc, L2PcInstance talker)
  182. {
  183. if (npc.getId() == ODD_GLOBE)
  184. {
  185. enterInstance(talker, new MoSWorld(), "MonasteryOfSilence.xml", TEMPLATE_ID);
  186. }
  187. return super.onTalk(npc, talker);
  188. }
  189. protected void spawnElcadia(L2PcInstance player, MoSWorld world)
  190. {
  191. if (world.elcadia != null)
  192. {
  193. world.elcadia.deleteMe();
  194. }
  195. world.elcadia = addSpawn(ELCADIA_INSTANCE, player.getX(), player.getY(), player.getZ(), 0, false, 0, false, player.getInstanceId());
  196. startQuestTimer("FOLLOW", 3000, world.elcadia, player);
  197. }
  198. }