Chamber.java 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644
  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.ChambersOfDelusion;
  20. import instances.AbstractInstance;
  21. import java.util.Calendar;
  22. import java.util.concurrent.ScheduledFuture;
  23. import java.util.logging.Level;
  24. import com.l2jserver.Config;
  25. import com.l2jserver.gameserver.ThreadPoolManager;
  26. import com.l2jserver.gameserver.ai.CtrlIntention;
  27. import com.l2jserver.gameserver.instancemanager.InstanceManager;
  28. import com.l2jserver.gameserver.model.L2Object;
  29. import com.l2jserver.gameserver.model.L2Party;
  30. import com.l2jserver.gameserver.model.L2World;
  31. import com.l2jserver.gameserver.model.Location;
  32. import com.l2jserver.gameserver.model.actor.L2Npc;
  33. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  34. import com.l2jserver.gameserver.model.entity.Instance;
  35. import com.l2jserver.gameserver.model.holders.SkillHolder;
  36. import com.l2jserver.gameserver.model.instancezone.InstanceWorld;
  37. import com.l2jserver.gameserver.model.quest.QuestState;
  38. import com.l2jserver.gameserver.model.skills.Skill;
  39. import com.l2jserver.gameserver.network.NpcStringId;
  40. import com.l2jserver.gameserver.network.SystemMessageId;
  41. import com.l2jserver.gameserver.network.clientpackets.Say2;
  42. import com.l2jserver.gameserver.network.serverpackets.Earthquake;
  43. import com.l2jserver.gameserver.network.serverpackets.NpcSay;
  44. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  45. import com.l2jserver.gameserver.util.Util;
  46. /**
  47. * Chambers of Delusion superclass.
  48. * @author GKR
  49. */
  50. public abstract class Chamber extends AbstractInstance
  51. {
  52. protected class CDWorld extends InstanceWorld
  53. {
  54. protected int currentRoom;
  55. protected final L2Party partyInside;
  56. protected final ScheduledFuture<?> _banishTask;
  57. protected ScheduledFuture<?> _roomChangeTask;
  58. protected CDWorld(L2Party party)
  59. {
  60. currentRoom = 0;
  61. partyInside = party;
  62. _banishTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new BanishTask(), 60000, 60000);
  63. }
  64. protected L2Party getPartyInside()
  65. {
  66. return partyInside;
  67. }
  68. protected void scheduleRoomChange(boolean bossRoom)
  69. {
  70. final Instance inst = InstanceManager.getInstance().getInstance(getInstanceId());
  71. final long nextInterval = bossRoom ? 60000L : (ROOM_CHANGE_INTERVAL + getRandom(ROOM_CHANGE_RANDOM_TIME)) * 1000L;
  72. // Schedule next room change only if remaining time is enough
  73. if ((inst.getInstanceEndTime() - System.currentTimeMillis()) > nextInterval)
  74. {
  75. _roomChangeTask = ThreadPoolManager.getInstance().scheduleGeneral(new ChangeRoomTask(), nextInterval - 5000);
  76. }
  77. }
  78. protected void stopBanishTask()
  79. {
  80. _banishTask.cancel(true);
  81. }
  82. protected void stopRoomChangeTask()
  83. {
  84. _roomChangeTask.cancel(true);
  85. }
  86. protected class BanishTask implements Runnable
  87. {
  88. @Override
  89. public void run()
  90. {
  91. final Instance inst = InstanceManager.getInstance().getInstance(getInstanceId());
  92. if ((inst == null) || ((inst.getInstanceEndTime() - System.currentTimeMillis()) < 60000))
  93. {
  94. _banishTask.cancel(false);
  95. }
  96. else
  97. {
  98. for (int objId : inst.getPlayers())
  99. {
  100. final L2PcInstance pl = L2World.getInstance().getPlayer(objId);
  101. if ((pl != null) && pl.isOnline())
  102. {
  103. if ((partyInside == null) || !pl.isInParty() || (partyInside != pl.getParty()))
  104. {
  105. exitInstance(pl);
  106. }
  107. }
  108. }
  109. }
  110. }
  111. }
  112. protected class ChangeRoomTask implements Runnable
  113. {
  114. @Override
  115. public void run()
  116. {
  117. try
  118. {
  119. earthQuake(CDWorld.this);
  120. Thread.sleep(5000);
  121. changeRoom(CDWorld.this);
  122. }
  123. catch (Exception e)
  124. {
  125. _log.log(Level.WARNING, getClass().getSimpleName() + " ChangeRoomTask exception : " + e.getMessage(), e);
  126. }
  127. }
  128. }
  129. }
  130. // Items
  131. private static final int ENRIA = 4042;
  132. private static final int ASOFE = 4043;
  133. private static final int THONS = 4044;
  134. private static final int LEONARD = 9628;
  135. private static final int DELUSION_MARK = 15311;
  136. // NPCs
  137. private final int ENTRANCE_GATEKEEPER;
  138. private final int ROOM_GATEKEEPER_FIRST;
  139. private final int ROOM_GATEKEEPER_LAST;
  140. private final int AENKINEL;
  141. private final int BOX;
  142. // Skills
  143. private static final SkillHolder SUCCESS_SKILL = new SkillHolder(5758, 1);
  144. private static final SkillHolder FAIL_SKILL = new SkillHolder(5376, 4);
  145. private static final int ROOM_CHANGE_INTERVAL = 480; // 8 min
  146. private static final int ROOM_CHANGE_RANDOM_TIME = 120; // 2 min
  147. // Instance restart time
  148. private static final int RESET_HOUR = 6;
  149. private static final int RESET_MIN = 30;
  150. // Following values vary between scripts
  151. private final int INSTANCEID;
  152. private final String INSTANCE_TEMPLATE;
  153. protected Location[] ROOM_ENTER_POINTS;
  154. // Misc
  155. private static final String RETURN = Chamber.class.getSimpleName() + "_return";
  156. protected Chamber(String name, String descr, int instanceId, String instanceTemplateName, int entranceGKId, int roomGKFirstId, int roomGKLastId, int aenkinelId, int boxId)
  157. {
  158. super(name, descr);
  159. INSTANCEID = instanceId;
  160. INSTANCE_TEMPLATE = instanceTemplateName;
  161. ENTRANCE_GATEKEEPER = entranceGKId;
  162. ROOM_GATEKEEPER_FIRST = roomGKFirstId;
  163. ROOM_GATEKEEPER_LAST = roomGKLastId;
  164. AENKINEL = aenkinelId;
  165. BOX = boxId;
  166. addStartNpc(ENTRANCE_GATEKEEPER);
  167. addTalkId(ENTRANCE_GATEKEEPER);
  168. for (int i = ROOM_GATEKEEPER_FIRST; i <= ROOM_GATEKEEPER_LAST; i++)
  169. {
  170. addStartNpc(i);
  171. addTalkId(i);
  172. }
  173. addKillId(AENKINEL);
  174. addAttackId(BOX);
  175. addSpellFinishedId(BOX);
  176. addEventReceivedId(BOX);
  177. }
  178. private boolean isBigChamber()
  179. {
  180. return ((INSTANCEID == 131) || (INSTANCEID == 132));
  181. }
  182. private boolean isBossRoom(CDWorld world)
  183. {
  184. return (world.currentRoom == (ROOM_ENTER_POINTS.length - 1));
  185. }
  186. @Override
  187. protected boolean checkConditions(L2PcInstance player)
  188. {
  189. final L2Party party = player.getParty();
  190. if (party == null)
  191. {
  192. player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOT_IN_PARTY_CANT_ENTER));
  193. return false;
  194. }
  195. if (party.getLeader() != player)
  196. {
  197. player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ONLY_PARTY_LEADER_CAN_ENTER));
  198. return false;
  199. }
  200. for (L2PcInstance partyMember : party.getMembers())
  201. {
  202. if (partyMember.getLevel() < 80)
  203. {
  204. final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_S_LEVEL_REQUIREMENT_IS_NOT_SUFFICIENT_AND_CANNOT_BE_ENTERED);
  205. sm.addPcName(partyMember);
  206. party.broadcastPacket(sm);
  207. return false;
  208. }
  209. if (!Util.checkIfInRange(1000, player, partyMember, true))
  210. {
  211. final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_IS_IN_A_LOCATION_WHICH_CANNOT_BE_ENTERED_THEREFORE_IT_CANNOT_BE_PROCESSED);
  212. sm.addPcName(partyMember);
  213. party.broadcastPacket(sm);
  214. return false;
  215. }
  216. if (isBigChamber())
  217. {
  218. final long reentertime = InstanceManager.getInstance().getInstanceTime(partyMember.getObjectId(), INSTANCEID);
  219. if (System.currentTimeMillis() < reentertime)
  220. {
  221. final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_MAY_NOT_RE_ENTER_YET);
  222. sm.addPcName(partyMember);
  223. party.broadcastPacket(sm);
  224. return false;
  225. }
  226. }
  227. }
  228. return true;
  229. }
  230. private void markRestriction(InstanceWorld world)
  231. {
  232. if (world instanceof CDWorld)
  233. {
  234. final Calendar reenter = Calendar.getInstance();
  235. final Calendar now = Calendar.getInstance();
  236. reenter.set(Calendar.MINUTE, RESET_MIN);
  237. reenter.set(Calendar.HOUR_OF_DAY, RESET_HOUR);
  238. if (reenter.before(now))
  239. {
  240. reenter.add(Calendar.DAY_OF_WEEK, 1);
  241. }
  242. final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.INSTANT_ZONE_FROM_HERE_S1_S_ENTRY_HAS_BEEN_RESTRICTED);
  243. sm.addString(InstanceManager.getInstance().getInstanceIdName(world.getTemplateId()));
  244. // set instance reenter time for all allowed players
  245. for (int objectId : world.getAllowed())
  246. {
  247. final L2PcInstance player = L2World.getInstance().getPlayer(objectId);
  248. if ((player != null) && player.isOnline())
  249. {
  250. InstanceManager.getInstance().setInstanceTime(objectId, world.getTemplateId(), reenter.getTimeInMillis());
  251. player.sendPacket(sm);
  252. }
  253. }
  254. }
  255. }
  256. protected void changeRoom(CDWorld world)
  257. {
  258. final L2Party party = world.getPartyInside();
  259. final Instance inst = InstanceManager.getInstance().getInstance(world.getInstanceId());
  260. if ((party == null) || (inst == null))
  261. {
  262. return;
  263. }
  264. int newRoom = world.currentRoom;
  265. // Do nothing, if there are raid room of Sqare or Tower Chamber
  266. if (isBigChamber() && isBossRoom(world))
  267. {
  268. return;
  269. }
  270. // Teleport to raid room 10 min or lesser before instance end time for Tower and Square Chambers
  271. else if (isBigChamber() && ((inst.getInstanceEndTime() - System.currentTimeMillis()) < 600000))
  272. {
  273. newRoom = ROOM_ENTER_POINTS.length - 1;
  274. }
  275. // 10% chance for teleport to raid room if not here already for Northern, Southern, Western and Eastern Chambers
  276. else if (!isBigChamber() && !isBossRoom(world) && (getRandom(100) < 10))
  277. {
  278. newRoom = ROOM_ENTER_POINTS.length - 1;
  279. }
  280. else
  281. {
  282. while (newRoom == world.currentRoom) // otherwise teleport to another room, except current
  283. {
  284. newRoom = getRandom(ROOM_ENTER_POINTS.length - 1);
  285. }
  286. }
  287. for (L2PcInstance partyMember : party.getMembers())
  288. {
  289. if (world.getInstanceId() == partyMember.getInstanceId())
  290. {
  291. partyMember.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
  292. partyMember.teleToLocation(ROOM_ENTER_POINTS[newRoom], true);
  293. }
  294. }
  295. world.currentRoom = newRoom;
  296. // Do not schedule room change for Square and Tower Chambers, if raid room is reached
  297. if (isBigChamber() && isBossRoom(world))
  298. {
  299. inst.setDuration((int) ((inst.getInstanceEndTime() - System.currentTimeMillis()) + 1200000)); // Add 20 min to instance time if raid room is reached
  300. for (L2Npc npc : inst.getNpcs())
  301. {
  302. if (npc.getId() == ROOM_GATEKEEPER_LAST)
  303. {
  304. npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.NPC_ALL, npc.getId(), NpcStringId.N21_MINUTES_ARE_ADDED_TO_THE_REMAINING_TIME_IN_THE_INSTANT_ZONE));
  305. }
  306. }
  307. }
  308. else
  309. {
  310. world.scheduleRoomChange(false);
  311. }
  312. }
  313. private void enter(CDWorld world)
  314. {
  315. final L2Party party = world.getPartyInside();
  316. if (party == null)
  317. {
  318. return;
  319. }
  320. for (L2PcInstance partyMember : party.getMembers())
  321. {
  322. if (hasQuestItems(partyMember, DELUSION_MARK))
  323. {
  324. takeItems(partyMember, DELUSION_MARK, -1);
  325. }
  326. if (party.isLeader(partyMember))
  327. {
  328. giveItems(partyMember, DELUSION_MARK, 1);
  329. }
  330. // Save location for teleport back into main hall
  331. partyMember.getVariables().set(RETURN, Integer.toString(partyMember.getX()) + ";" + Integer.toString(partyMember.getY()) + ";" + Integer.toString(partyMember.getZ()));
  332. partyMember.setInstanceId(world.getInstanceId());
  333. world.addAllowed(partyMember.getObjectId());
  334. }
  335. changeRoom(world);
  336. }
  337. protected void earthQuake(CDWorld world)
  338. {
  339. final L2Party party = world.getPartyInside();
  340. if (party == null)
  341. {
  342. return;
  343. }
  344. for (L2PcInstance partyMember : party.getMembers())
  345. {
  346. if (world.getInstanceId() == partyMember.getInstanceId())
  347. {
  348. partyMember.sendPacket(new Earthquake(partyMember.getX(), partyMember.getY(), partyMember.getZ(), 20, 10));
  349. }
  350. }
  351. }
  352. @Override
  353. public void onEnterInstance(L2PcInstance player, InstanceWorld world, boolean firstEntrance)
  354. {
  355. if (firstEntrance)
  356. {
  357. enter((CDWorld) world);
  358. }
  359. else
  360. {
  361. final CDWorld currentWorld = (CDWorld) world;
  362. teleportPlayer(player, ROOM_ENTER_POINTS[currentWorld.currentRoom], world.getInstanceId());
  363. }
  364. }
  365. protected void exitInstance(L2PcInstance player)
  366. {
  367. if ((player == null) || !player.isOnline() || (player.getInstanceId() == 0))
  368. {
  369. return;
  370. }
  371. final Instance inst = InstanceManager.getInstance().getInstance(player.getInstanceId());
  372. Location ret = inst.getSpawnLoc();
  373. final String return_point = player.getVariables().getString(RETURN, null);
  374. if (return_point != null)
  375. {
  376. String[] coords = return_point.split(";");
  377. if (coords.length == 3)
  378. {
  379. try
  380. {
  381. int x = Integer.parseInt(coords[0]);
  382. int y = Integer.parseInt(coords[1]);
  383. int z = Integer.parseInt(coords[2]);
  384. ret.setLocation(new Location(x, y, z));
  385. }
  386. catch (Exception e)
  387. {
  388. }
  389. }
  390. }
  391. teleportPlayer(player, ret, 0);
  392. final InstanceWorld world = InstanceManager.getInstance().getPlayerWorld(player);
  393. if (world != null)
  394. {
  395. world.removeAllowed((player.getObjectId()));
  396. }
  397. }
  398. @Override
  399. public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  400. {
  401. String htmltext = "";
  402. final InstanceWorld tmpworld = InstanceManager.getInstance().getWorld(npc.getInstanceId());
  403. if ((player != null) && (tmpworld != null) && (tmpworld instanceof CDWorld) && (npc.getId() >= ROOM_GATEKEEPER_FIRST) && (npc.getId() <= ROOM_GATEKEEPER_LAST))
  404. {
  405. final CDWorld world = (CDWorld) tmpworld;
  406. // Change room from dialog
  407. if (event.equals("next_room"))
  408. {
  409. if (player.getParty() == null)
  410. {
  411. htmltext = getHtm(player.getHtmlPrefix(), "data/scripts/instances/ChambersOfDelusion/no_party.html");
  412. }
  413. else if (player.getParty().getLeaderObjectId() != player.getObjectId())
  414. {
  415. htmltext = getHtm(player.getHtmlPrefix(), "data/scripts/instances/ChambersOfDelusion/no_leader.html");
  416. }
  417. else if (hasQuestItems(player, DELUSION_MARK))
  418. {
  419. takeItems(player, DELUSION_MARK, 1);
  420. world.stopRoomChangeTask();
  421. changeRoom(world);
  422. }
  423. else
  424. {
  425. htmltext = getHtm(player.getHtmlPrefix(), "data/scripts/instances/ChambersOfDelusion/no_item.html");
  426. }
  427. }
  428. else if (event.equals("go_out"))
  429. {
  430. if (player.getParty() == null)
  431. {
  432. htmltext = getHtm(player.getHtmlPrefix(), "data/scripts/instances/ChambersOfDelusion/no_party.html");
  433. }
  434. else if (player.getParty().getLeaderObjectId() != player.getObjectId())
  435. {
  436. htmltext = getHtm(player.getHtmlPrefix(), "data/scripts/instances/ChambersOfDelusion/no_leader.html");
  437. }
  438. else
  439. {
  440. final Instance inst = InstanceManager.getInstance().getInstance(world.getInstanceId());
  441. world.stopRoomChangeTask();
  442. world.stopBanishTask();
  443. for (L2PcInstance partyMember : player.getParty().getMembers())
  444. {
  445. exitInstance(partyMember);
  446. }
  447. inst.setEmptyDestroyTime(0);
  448. }
  449. }
  450. else if (event.equals("look_party"))
  451. {
  452. if ((player.getParty() != null) && (player.getParty() == world.getPartyInside()))
  453. {
  454. player.teleToLocation(ROOM_ENTER_POINTS[world.currentRoom], false);
  455. }
  456. }
  457. }
  458. return htmltext;
  459. }
  460. @Override
  461. public String onAttack(final L2Npc npc, final L2PcInstance attacker, final int damage, final boolean isPet, final Skill skill)
  462. {
  463. if (!npc.isBusy() && (npc.getCurrentHp() < (npc.getMaxHp() / 10)))
  464. {
  465. npc.setBusy(true);
  466. if (getRandom(100) < 25) // 25% chance to reward
  467. {
  468. if (getRandom(100) < 33)
  469. {
  470. npc.dropItem(attacker, ENRIA, (int) (3 * Config.RATE_QUEST_DROP));
  471. }
  472. if (getRandom(100) < 50)
  473. {
  474. npc.dropItem(attacker, THONS, (int) (4 * Config.RATE_QUEST_DROP));
  475. }
  476. if (getRandom(100) < 50)
  477. {
  478. npc.dropItem(attacker, ASOFE, (int) (4 * Config.RATE_QUEST_DROP));
  479. }
  480. if (getRandom(100) < 16)
  481. {
  482. npc.dropItem(attacker, LEONARD, (int) (2 * Config.RATE_QUEST_DROP));
  483. }
  484. npc.broadcastEvent("SCE_LUCKY", 2000, null);
  485. npc.doCast(SUCCESS_SKILL.getSkill());
  486. }
  487. else
  488. {
  489. npc.broadcastEvent("SCE_DREAM_FIRE_IN_THE_HOLE", 2000, null);
  490. }
  491. }
  492. return super.onAttack(npc, attacker, damage, isPet, skill);
  493. }
  494. @Override
  495. public String onEventReceived(String eventName, L2Npc sender, L2Npc receiver, L2Object reference)
  496. {
  497. switch (eventName)
  498. {
  499. case "SCE_LUCKY":
  500. receiver.setBusy(true);
  501. receiver.doCast(SUCCESS_SKILL.getSkill());
  502. break;
  503. case "SCE_DREAM_FIRE_IN_THE_HOLE":
  504. receiver.setBusy(true);
  505. receiver.doCast(FAIL_SKILL.getSkill());
  506. break;
  507. }
  508. return null;
  509. }
  510. @Override
  511. public String onKill(L2Npc npc, L2PcInstance player, boolean isPet)
  512. {
  513. final InstanceWorld tmpworld = InstanceManager.getInstance().getPlayerWorld(player);
  514. if ((tmpworld != null) && (tmpworld instanceof CDWorld))
  515. {
  516. final CDWorld world = (CDWorld) tmpworld;
  517. final Instance inst = InstanceManager.getInstance().getInstance(world.getInstanceId());
  518. if (isBigChamber())
  519. {
  520. markRestriction(world); // Set reenter restriction
  521. if ((inst.getInstanceEndTime() - System.currentTimeMillis()) > 300000)
  522. {
  523. inst.setDuration(300000); // Finish instance in 5 minutes
  524. }
  525. }
  526. else
  527. {
  528. world.stopRoomChangeTask();
  529. world.scheduleRoomChange(true);
  530. }
  531. inst.spawnGroup("boxes");
  532. }
  533. return super.onKill(npc, player, isPet);
  534. }
  535. @Override
  536. public String onSpellFinished(L2Npc npc, L2PcInstance player, Skill skill)
  537. {
  538. if ((npc.getId() == BOX) && ((skill.getId() == 5376) || (skill.getId() == 5758)) && !npc.isDead())
  539. {
  540. npc.doDie(player);
  541. }
  542. return super.onSpellFinished(npc, player, skill);
  543. }
  544. @Override
  545. public String onTalk(L2Npc npc, L2PcInstance player)
  546. {
  547. int npcId = npc.getId();
  548. QuestState st = getQuestState(player, false);
  549. if (st == null)
  550. {
  551. st = newQuestState(player);
  552. }
  553. if (npcId == ENTRANCE_GATEKEEPER)
  554. {
  555. if (checkConditions(player))
  556. {
  557. final L2Party party = player.getParty();
  558. enterInstance(player, new CDWorld(party), INSTANCE_TEMPLATE, INSTANCEID);
  559. }
  560. }
  561. return "";
  562. }
  563. }