Guest User

Untitled

a guest
Jul 20th, 2013
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 48.08 KB | None | 0 0
  1. package events.TvT;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. import javolution.util.FastMap;
  7. import javolution.util.FastList;
  8. import l2r.gameserver.Announcements;
  9. import l2r.gameserver.ThreadPoolManager;
  10. import l2r.gameserver.ai.CtrlEvent;
  11. import l2r.gameserver.data.xml.holder.InstantZoneHolder;
  12. import l2r.gameserver.data.xml.holder.ItemHolder;
  13. import l2r.gameserver.instancemanager.ReflectionManager;
  14. import l2r.gameserver.listener.actor.player.OnPlayerExitListener;
  15. import l2r.gameserver.model.Creature;
  16. import l2r.gameserver.model.Effect;
  17. import l2r.gameserver.model.GameObjectsStorage;
  18. import l2r.gameserver.model.Player;
  19. import l2r.gameserver.model.Skill;
  20. import l2r.gameserver.model.Summon;
  21. import l2r.gameserver.model.base.ClassId;
  22. import l2r.gameserver.model.entity.Reflection;
  23. import l2r.gameserver.model.entity.events.GameEvent;
  24. import l2r.gameserver.model.entity.events.GameEventManager;
  25. import l2r.gameserver.model.entity.olympiad.Olympiad;
  26. import l2r.gameserver.model.instances.DoorInstance;
  27. import l2r.gameserver.model.items.ItemInstance;
  28. import l2r.gameserver.network.serverpackets.ChangeWaitType;
  29. import l2r.gameserver.network.serverpackets.ExShowScreenMessage;
  30. import l2r.gameserver.network.serverpackets.Revive;
  31. import l2r.gameserver.network.serverpackets.components.ChatType;
  32. import l2r.gameserver.network.serverpackets.components.CustomMessage;
  33. import l2r.gameserver.scripts.ScriptFile;
  34. import l2r.gameserver.skills.effects.EffectTemplate;
  35. import l2r.gameserver.stats.Env;
  36. import l2r.gameserver.tables.SkillTable;
  37. import l2r.gameserver.templates.InstantZone;
  38. import l2r.gameserver.utils.GArray;
  39. import l2r.gameserver.utils.Location;
  40. import l2r.gameserver.utils.Strings;
  41.  
  42. import org.apache.commons.lang3.ArrayUtils;
  43. import org.slf4j.Logger;
  44. import org.slf4j.LoggerFactory;
  45.  
  46. public class TvT extends GameEvent implements ScriptFile, OnPlayerExitListener
  47. {
  48. private int _state = 0;
  49. private static TvT _instance;
  50. private static final Logger _log = LoggerFactory.getLogger(TvT.class);
  51.  
  52. private FastMap<Player, Integer> _participants = new FastMap<Player, Integer>();
  53. private FastMap<Player, List<Effect>> returnBuffs = new FastMap<Player, List<Effect>>();
  54. private List<Effect> _effects;
  55.  
  56. private FastList<String> _ipLockList = new FastList<String>();
  57.  
  58. private FastMap<Player, Integer> live_list = new FastMap<Player, Integer>();
  59. private int[] _score;
  60. private int curr_round = 1;
  61.  
  62. public long startBattle = 0;
  63. private Reflection _ref;
  64. private InstantZone _instantZone;
  65.  
  66. public TvT()
  67. {
  68. _instance = this;
  69. }
  70.  
  71. public static TvT getInstance()
  72. {
  73. if (_instance == null)
  74. _instance = new TvT();
  75. return _instance;
  76. }
  77.  
  78. @Override
  79. public int getState()
  80. {
  81. return _state;
  82. }
  83.  
  84.  
  85. @Override
  86. public String getName()
  87. {
  88. return "TvT";
  89. }
  90.  
  91. public long getNextTime()
  92. {
  93. long next_time = getConfigs().START_TIME;
  94.  
  95. while (next_time <= System.currentTimeMillis() / 1000)
  96. {
  97. getConfigs().START_TIME += 86400;
  98. setNextEvent();
  99. next_time = getConfigs().START_TIME;
  100. }
  101.  
  102. return next_time;
  103. }
  104.  
  105. public void setNextEvent()
  106. {
  107. if (TvTConfig._configs != null && TvTConfig._configs.size() > 1)
  108. {
  109. TvTConfig._configs.sort();
  110. }
  111. }
  112.  
  113. public Configs getConfigs()
  114. {
  115. return TvTConfig._configs == null ? null : TvTConfig._configs.get(0);
  116. }
  117.  
  118. @Override
  119. public boolean canUseItem(Player actor, ItemInstance item)
  120. {
  121. if(_state == 2)
  122. {
  123. if((item.isHeroWeapon() && !getConfigs().ALLOW_HERO_WEAPONS) || ArrayUtils.contains(getConfigs().getRestictId(), item.getItemId()))
  124. {
  125. actor.sendMessage(actor.isLangRus() ? "Запрещено использовать во время ивентов." : "You may not use during the events.");
  126. return false;
  127. }
  128. }
  129. return true;
  130. }
  131.  
  132. @Override
  133. public void onLoad()
  134. {
  135. TvTConfig.load();
  136. GameEventManager.getInstance().registerEvent(getInstance());
  137. _log.info("Loaded Event: TvT");
  138. _state = 0;
  139. }
  140.  
  141. @Override
  142. public void onReload()
  143. {
  144. if (_ref != null)
  145. _ref.clearReflection(1, false);
  146. if (TvTConfig._configs.size() > 0)
  147. TvTConfig._configs.clear();
  148. if (_state != 0)
  149. finish();
  150. onLoad();
  151. }
  152.  
  153. @Override
  154. public void onShutdown()
  155. {
  156. _state = 0;
  157. }
  158.  
  159. @Override
  160. public boolean register(Player player)
  161. {
  162. if(_ipLockList.contains(player.getIP()))
  163. {
  164. player.sendMessage("Вы уже зарегистрированы на эвент с этого IP адреса.");
  165. return false;
  166. }
  167.  
  168. if (!canRegister(player, true))
  169. return false;
  170.  
  171. player.setPvPTeam(TeamWithMinPlayers());
  172. _participants.put(player, 0);
  173. _ipLockList.add(player.getIP());
  174. player.sendMessage(new CustomMessage("scripts.events.TvT.TvT.YouRegistred", player, new Object[0]));
  175. player._event = this;
  176. return true;
  177. }
  178.  
  179. public void addPlayer()
  180. {
  181. registerPlayer();
  182. }
  183.  
  184. public void registerPlayer()
  185. {
  186. Player player = getSelf();
  187. GameEvent event = GameEventManager.getInstance().findEvent("TvT");
  188. event.register(player);
  189. }
  190.  
  191. @Override
  192. public void unreg(Player player)
  193. {
  194. if (player == null)
  195. return;
  196.  
  197. if (_state == 2 || !isParticipant(player))
  198. {
  199. player.sendMessage(new CustomMessage("scripts.events.TvT.TvT.YouCancelRegistration", player, new Object[0]));
  200. return;
  201. }
  202. _participants.remove(player);
  203. _ipLockList.remove(player.getIP());
  204. player._event = null;
  205. player.setPvPTeam(0);
  206. player.allowPvPTeam();
  207. player.sendMessage(new CustomMessage("scripts.events.TvT.TvT.YouRegistrationCanceled", player, new Object[0]));
  208. }
  209.  
  210. @Override
  211. public void remove(Player player)
  212. {
  213. if (player == null)
  214. return;
  215.  
  216. if (_participants.containsKey(player))
  217. {
  218. _participants.remove(player);
  219. _ipLockList.remove(player.getIP());
  220. }
  221. if (live_list.containsKey(player))
  222. live_list.remove(player);
  223. player.setPvPTeam(0);
  224. player.allowPvPTeam();
  225. player._event = null;
  226. player.sendMessage(new CustomMessage("scripts.events.TvT.TvT.YouDisqualified", player, new Object[0]));
  227. }
  228.  
  229. public boolean canRegister(Player player, boolean first)
  230. {
  231. if (getConfigs().ALLOW_TAKE_ITEM)
  232. {
  233. long take_item_count = getItemCount(player, getConfigs().TAKE_ITEM_ID);
  234. String name_take_items = ItemHolder.getInstance().getTemplate(getConfigs().TAKE_ITEM_ID).getName();
  235. if(take_item_count > 0)
  236. {
  237. if((int)take_item_count < getConfigs().TAKE_COUNT)
  238. {
  239. player.sendMessage("Недостаточно" + name_take_items + "для участия.");
  240. return false;
  241. }
  242. }
  243. else
  244. {
  245. player.sendMessage("У Вас нет " + name_take_items + ", требуется для участия.");
  246. return false;
  247. }
  248. }
  249. if (first && _state != 1)
  250. {
  251. player.sendMessage("Процесс регистрации не активен.");
  252. return false;
  253. }
  254. if (first && isParticipant(player))
  255. {
  256. player.sendMessage("Вы уже являетесь участником этого эвента.");
  257. return false;
  258. }
  259. if (player.isMounted())
  260. {
  261. player.sendMessage("Отзовите питомца.");
  262. return false;
  263. }
  264. if (player.isInDuel())
  265. {
  266. player.sendMessage("Вы должны завершить дуель.");
  267. return false;
  268. }
  269. if (player.getLevel() < getConfigs().MIN_LEVEL || player.getLevel() > getConfigs().MAX_LEVEL)
  270. {
  271. player.sendMessage("Вы не подходите для участия в эвенте с таким уровнем.");
  272. return false;
  273. }
  274. if (first && player._event != null)
  275. {
  276. player.sendMessage("Вы уже зарегестрированы на другом эвенте.");
  277. return false;
  278. }
  279. if (player.isInOlympiadMode() || Olympiad.isRegistered(player))
  280. {
  281. player.sendMessage("Вы уже зарегестрированы на Олимпиаде.");
  282. return false;
  283. }
  284. if (player.isInParty() && player.getParty().isInDimensionalRift())
  285. {
  286. player.sendMessage("Вы уже зарегестрированы на другом эвенте.");
  287. return false;
  288. }
  289. if (player.isTeleporting())
  290. {
  291. player.sendMessage("Вы находитесь в процессе телепортации.");
  292. return false;
  293. }
  294. if (first && _participants.size() >= getConfigs().MAX_PARTICIPANTS)
  295. {
  296. player.sendMessage("Достигнуто максимальное кол-во участников.");
  297. return false;
  298. }
  299. if (player.isCursedWeaponEquipped())
  300. {
  301. player.sendMessage("С проклятым оружием на эвент нельзя.");
  302. return false;
  303. }
  304. if (player.getKarma() > 0)
  305. {
  306. player.sendMessage("PK не может учавствовать в эвенте.");
  307. return false;
  308. }
  309. return true;
  310. }
  311.  
  312. public boolean canTeleport(Player player)
  313. {
  314. if(player.isCursedWeaponEquipped())
  315. {
  316. player.sendMessage("С проклятым оружием на эвент нельзя.");
  317. return false;
  318. }
  319. if(player.getKarma() > 0)
  320. {
  321. player.sendMessage("PK не может учавствовать в эвенте.");
  322. return false;
  323. }
  324. return true;
  325. }
  326.  
  327. public void question()
  328. {
  329. for(Player player : GameObjectsStorage.getAllPlayersForIterate())
  330. {
  331. if(player != null && ((player.getLevel() >= getConfigs().MIN_LEVEL && player.getLevel() <= getConfigs().MAX_LEVEL) || player.getReflection().getId() <= 0 || !player.isInOlympiadMode() || !Olympiad.isRegistered(player) || !player.isInOfflineMode()))
  332. {
  333. player.scriptRequest(new CustomMessage("scripts.events.TvT.TvT.AskPlayer", player).toString(), "events.TvT.TvT:registerPlayer", new Object[0]);
  334. }
  335. }
  336. }
  337.  
  338. public int getCountPlayers()
  339. {
  340. return _participants.size();
  341. }
  342.  
  343. public void canRegisters()
  344. {
  345. if (_participants != null)
  346. for (Player player : _participants.keySet())
  347. if (!canRegister(player, false))
  348. player.sendMessage("Если все условия не будут соблюдены - вы будите дисквалифицированы");
  349. }
  350.  
  351. @Override
  352. public boolean isParticipant(Player player)
  353. {
  354. return _participants.containsKey(player);
  355. }
  356.  
  357. public int TeamWithMinPlayers()
  358. {
  359. int[] count = new int[getConfigs().TEAM_COUNTS + 1];
  360.  
  361. for (Player player : _participants.keySet())
  362. {
  363. count[player.getPvPTeam()] += 1;
  364. }
  365. int min = count[1];
  366.  
  367. for (int i = 1; i < count.length; i++)
  368. min = Math.min(min, count[i]);
  369. for (int i = 1; i < count.length; i++)
  370. {
  371. if (count[i] != min)
  372. continue;
  373. min = i;
  374. }
  375. return min;
  376. }
  377.  
  378. public void sayToAll(String adress, String[] replacements, boolean all)
  379. {
  380. if (all)
  381. Announcements.getInstance().announceByCustomMessage(adress, replacements, ChatType.CRITICAL_ANNOUNCE);
  382. else
  383. for (Player player : _participants.keySet())
  384. Announcements.getInstance().announceToPlayerByCustomMessage(player, adress, replacements, ChatType.CRITICAL_ANNOUNCE);
  385. }
  386.  
  387. public void startRegistration()
  388. {
  389. _state = 1;
  390. sayToAll("scripts.events.TvT.TvT.AnnounceRegistrationStarted", new String[] { getName(), "" + getConfigs().MIN_LEVEL, "" + getConfigs().MAX_LEVEL }, true);
  391. question();
  392.  
  393. _score = new int[getConfigs().TEAM_COUNTS + 1];
  394.  
  395. if (getConfigs().TIME_TO_START_BATTLE >= 30)
  396. ThreadPoolManager.getInstance().schedule(new StartMessages("scripts.events.TvT.TvT.EventStartOver", new String[] { "30" }), (getConfigs().TIME_TO_START_BATTLE - 30) * 1000);
  397. if (getConfigs().TIME_TO_START_BATTLE >= 10)
  398. ThreadPoolManager.getInstance().schedule(new StartMessages("scripts.events.TvT.TvT.EventStartOver", new String[] { "10" }), (getConfigs().TIME_TO_START_BATTLE - 10) * 1000);
  399. for (int i = 5; i >= 1; i--)
  400. {
  401. if (getConfigs().TIME_TO_START_BATTLE - i >= i)
  402. ThreadPoolManager.getInstance().schedule(new StartMessages("scripts.events.TvT.TvT.EventStartOver", new String[] { Integer.toString(i) }), (getConfigs().TIME_TO_START_BATTLE - i) * 1000);
  403. }
  404. ThreadPoolManager.getInstance().schedule(new TaskVoid("canRegisters", null), (getConfigs().TIME_TO_START_BATTLE - 10) * 1000);
  405. ThreadPoolManager.getInstance().schedule(new TaskVoid("start", null), getConfigs().TIME_TO_START_BATTLE * 1000);
  406. }
  407.  
  408. private void initRef()
  409. {
  410. _ref = new Reflection();
  411. _instantZone = InstantZoneHolder.getInstance().getInstantZone(603);
  412. _ref.init(_instantZone);
  413. }
  414.  
  415. @Override
  416. public void start()
  417. {
  418. initRef();
  419.  
  420. if (_state == 0)
  421. {
  422. startRegistration();
  423. }
  424. else if (_state == 1)
  425. {
  426. if (getCountPlayers() >= getConfigs().MIN_PARTICIPANTS)
  427. {
  428. teleportPlayersToColiseum();
  429. ThreadPoolManager.getInstance().schedule(new go(), getConfigs().PAUSE_TIME * 1000);
  430. sayToAll("scripts.events.TvT.TvT.AnnounceTeleportToColiseum", null, true);
  431. _state = 2;
  432. }
  433. else
  434. {
  435. sayToAll("scripts.events.TvT.TvT.AnnounceEventCanceled", new String[] { getName() }, true);
  436. for(Player player : _participants.keySet())
  437. {
  438. player.setPvPTeam(0);
  439. player.allowPvPTeam();
  440. player._event = null;
  441. }
  442. _participants.clear();
  443. _state = 0;
  444. abort();
  445. }
  446. }
  447. else
  448. {
  449. sayToAll("scripts.events.TvT.TvT.AnnounceStartError", null, true);
  450. }
  451. }
  452.  
  453. @Override
  454. public void finish()
  455. {
  456. sayToAll("scripts.events.TvT.TvT.AnnounceEventEnd", null, false);
  457.  
  458. if (_state == 2)
  459. {
  460. int WinTeam = -1;
  461. int count = 0;
  462. int max = 0;
  463.  
  464. for (int i = 0; i < _score.length - 1; i++)
  465. {
  466. max = Math.max(_score[i], _score[(i + 1)]);
  467. }
  468. for (int i = 0; i < _score.length; i++)
  469. {
  470. if (_score[i] != max)
  471. continue;
  472. WinTeam = i;
  473. count++;
  474. }
  475. if (count != 1 || WinTeam == -1 || _score[WinTeam] == 0)
  476. {
  477. sayToAll("scripts.events.TvT.TvT.EventDraw", null, false);
  478. }
  479. else
  480. {
  481. rewardToWinTeam(WinTeam);
  482. }
  483. ThreadPoolManager.getInstance().schedule(new TaskVoid("restorePlayers", null), 1000L);
  484. ThreadPoolManager.getInstance().schedule(new TaskVoid("teleportPlayersToSavedCoords", null), 2000L);
  485. }
  486. ThreadPoolManager.getInstance().schedule(new TaskVoid("clearAll", null), 3500L);
  487. GameEventManager.getInstance().nextEvent();
  488. _state = 0;
  489. }
  490.  
  491. @Override
  492. public void abort()
  493. {
  494. finish();
  495. if (_state > 0)
  496. sayToAll("scripts.events.TvT.TvT.EventCompletedManually", new String[] { getName() }, true);
  497. }
  498.  
  499. @Override
  500. public void onLogout(Player player)
  501. {
  502. if (player == null || player.getPvPTeam() < 1)
  503. {
  504. return;
  505. }
  506.  
  507. if (_state == 1 && _participants.containsKey(player))
  508. {
  509. unreg(player);
  510. player.setPvPTeam(0);
  511. player.allowPvPTeam();
  512. player._event = null;
  513. return;
  514. }
  515.  
  516. if (_state == 2 && _participants.containsKey(player))
  517. {
  518. try
  519. {
  520. if(player != null)
  521. player.teleToLocation(player._stablePoint, ReflectionManager.DEFAULT);
  522. remove(player);
  523. player.setPvPTeam(0);
  524. player.allowPvPTeam();
  525. player._event = null;
  526. }
  527. catch (Exception e)
  528. {
  529. e.printStackTrace();
  530. }
  531. }
  532. }
  533.  
  534. public void teleportPlayersToSavedCoords()
  535. {
  536. for (Player player : _participants.keySet())
  537. {
  538. teleportPlayerToSavedCoords(player);
  539. }
  540. }
  541.  
  542. public void teleportPlayerToSavedCoords(Player player)
  543. {
  544. try
  545. {
  546. if(player == null)
  547. return;
  548. if (player._stablePoint == null) // игрока не портнуло на стадион
  549. return;
  550. player.getEffectList().stopAllEffects();
  551. if(player.getPet() != null)
  552. {
  553. Summon summon = player.getPet();
  554. summon.unSummon();
  555. }
  556. player.teleToLocation(player._stablePoint, ReflectionManager.DEFAULT);
  557. if (getConfigs().STOP_ALL_EFFECTS)
  558. ThreadPoolManager.getInstance().schedule(new TaskVoid("returnBuffsToPlayers", player), 500L);
  559. player._stablePoint = null;
  560. player.setPvPTeam(0);
  561. player.allowPvPTeam();
  562. player._event = null;
  563. }
  564. catch (Exception e)
  565. {
  566. e.printStackTrace();
  567. }
  568. }
  569.  
  570. @Override
  571. public void doDie(Creature killer, Creature self)
  572. {
  573. if (self == null || killer == null)
  574. return;
  575. if ((self instanceof Player) && (killer instanceof Player))
  576. {
  577. Player player = (Player)self;
  578. Player kill = (Player)killer;
  579. if (_participants.containsKey(player))
  580. _participants.put(player, _participants.get(player) + 1);
  581. if(getConfigs().ALLOW_KILL_BONUS && _participants.containsKey(kill))
  582. addItem(kill, getConfigs().KILL_BONUS_ID, getConfigs().KILL_BONUS_COUNT);
  583. if (_state == 2 && player.getPvPTeam() > 0 && kill.getPvPTeam() > 0 && _participants.containsKey(player) && _participants.containsKey(kill))
  584. {
  585. if (getConfigs().RESURRECTION_TIME == 0)
  586. {
  587. if (player != null)
  588. {
  589. player.setFakeDeath(true);
  590. player.getAI().notifyEvent(CtrlEvent.EVT_FAKE_DEATH, null, null);
  591. player.broadcastPacket(new ChangeWaitType(player, ChangeWaitType.WT_START_FAKEDEATH));
  592. player.broadcastCharInfo();
  593. player.abortCast(true, false);
  594. player.abortAttack(true, false);
  595. show(new CustomMessage("scripts.events.TvT.TvT.YouDead", player), player);
  596. live_list.remove(player);
  597. }
  598. }
  599. else
  600. {
  601. if (killer != null)
  602. _score[kill.getPvPTeam()] += 1;
  603. if (player != null)
  604. {
  605. player.setFakeDeath(true);
  606. player.getAI().notifyEvent(CtrlEvent.EVT_FAKE_DEATH, null, null);
  607. player.broadcastPacket(new ChangeWaitType(player, ChangeWaitType.WT_START_FAKEDEATH));
  608. player.broadcastCharInfo();
  609. player.abortCast(true, false);
  610. player.abortAttack(true, false);
  611. player.sendMessage(new CustomMessage("scripts.events.TvT.TvT.YouWillBeRessuction", player, new Object[0]).add(new Object[] { getConfigs().RESURRECTION_TIME }));
  612. ThreadPoolManager.getInstance().schedule(new TaskVoid("ResurrectionPlayer", player), getConfigs().RESURRECTION_TIME * 1000);
  613. }
  614. }
  615. }
  616. }
  617. }
  618.  
  619. public boolean checkRound(boolean finish)
  620. {
  621. if (!finish)
  622. {
  623. int liveTeamCount = 0;
  624. int team = 0;
  625. for (int i = 1; i <= getConfigs().TEAM_COUNTS; i++)
  626. {
  627. if (!live_list.containsValue(Integer.valueOf(i)))
  628. continue;
  629. liveTeamCount++;
  630. team = i;
  631. if (liveTeamCount > 1)
  632. return false;
  633. }
  634.  
  635. _score[team] += 1;
  636. }
  637.  
  638. if (curr_round >= getConfigs().NUMBER_OF_ROUNDS)
  639. finish();
  640. else
  641. nextRound();
  642.  
  643. return true;
  644. }
  645.  
  646. public void nextRound()
  647. {
  648. for(Player player : _participants.keySet())
  649. {
  650. restorePlayer(player);
  651. Reflection ref = _ref;
  652. InstantZone instantZone = ref.getInstancedZone();
  653. Location tele = Location.findPointToStay(instantZone.getTeleportCoords().get(player.getPvPTeam() - 1), 50, 50, ref.getGeoIndex());
  654. player.teleToLocation(tele, ref);
  655. if(getConfigs().NUMBER_OF_ROUNDS > 0)
  656. live_list.put(player, player.getPvPTeam());
  657. player.sendPacket(new ExShowScreenMessage(new CustomMessage("scripts.events.TvT.TvT.StartBattle", player, new Object[0]).toString(), getConfigs().PAUSE_TIME * 700, ExShowScreenMessage.ScreenMessageAlign.MIDDLE_CENTER, true));
  658. }
  659. curr_round += 1;
  660. paralyzePlayers();
  661. ThreadPoolManager.getInstance().schedule(new go(), getConfigs().PAUSE_TIME * 1000);
  662. }
  663.  
  664. public void teleportPlayersToColiseum()
  665. {
  666. for(Player player : _participants.keySet())
  667. {
  668. if (!canRegister(player, false))
  669. {
  670. remove(player);
  671. continue;
  672. }
  673. if(getConfigs().ALLOW_TAKE_ITEM)
  674. removeItem(player, getConfigs().TAKE_ITEM_ID, (long)getConfigs().TAKE_COUNT);
  675. ItemInstance wpn = player.getActiveWeaponInstance();
  676. if(wpn != null && wpn.isHeroWeapon() && !getConfigs().ALLOW_HERO_WEAPONS)
  677. {
  678. player.getInventory().unEquipItem(wpn);
  679. player.abortAttack(true, true);
  680. }
  681. unRide(player);
  682. if(getConfigs().STOP_ALL_EFFECTS)
  683. removeBuff(player);
  684. if(player.getParty() != null)
  685. player.leaveParty();
  686. player.allowPvPTeam();
  687. player._stablePoint = player._stablePoint == null ? player.getReflection().getReturnLoc() == null ? player.getLoc() : player.getReflection().getReturnLoc() : player._stablePoint;
  688. Reflection ref = _ref;
  689. InstantZone instantZone = ref.getInstancedZone();
  690. Location tele = Location.findPointToStay(instantZone.getTeleportCoords().get(player.getPvPTeam() - 1), 50, 50, ref.getGeoIndex());
  691. player.teleToLocation(tele, ref);
  692. restorePlayer(player);
  693. if(getConfigs().NUMBER_OF_ROUNDS > 0)
  694. live_list.put(player, Integer.valueOf(player.getPvPTeam()));
  695. player.sendPacket(new ExShowScreenMessage(new CustomMessage("scripts.events.TvT.TvT.StartBattle", player, new Object[0]).toString(), getConfigs().PAUSE_TIME * 700, ExShowScreenMessage.ScreenMessageAlign.MIDDLE_CENTER, true));
  696. }
  697.  
  698. paralyzePlayers();
  699. }
  700.  
  701. public void removeBuff(Player player)
  702. {
  703. if(player != null)
  704. {
  705. List<Effect> effectList = player.getEffectList().getAllEffects();
  706. _effects = new ArrayList<Effect>(effectList.size());
  707.  
  708. if (player.isCastingNow())
  709. {
  710. player.abortCast(true, true);
  711. }
  712. for(Effect $effect : effectList)
  713. {
  714. Effect effect = $effect.getTemplate().getEffect(new Env($effect.getEffector(), $effect.getEffected(), $effect.getSkill()));
  715. effect.setCount($effect.getCount());
  716. effect.setPeriod($effect.getCount() == 1 ? $effect.getPeriod() - $effect.getTime() : $effect.getPeriod());
  717. _effects.add(effect);
  718. }
  719. if(player.getPet() != null)
  720. {
  721. Summon summon = player.getPet();
  722. summon.unSummon();
  723. }
  724. returnBuffs.put(player, _effects);
  725. player.getEffectList().stopAllEffects();
  726. }
  727. }
  728.  
  729. public void returnBuffsToPlayers(Player player)
  730. {
  731. for(Effect e : returnBuffs.get(player))
  732. player.getEffectList().addEffect(e);
  733. }
  734.  
  735. public void paralyzePlayers()
  736. {
  737. Skill revengeSkill = SkillTable.getInstance().getInfo(4515, 1);
  738. for (Player player : _participants.keySet())
  739. {
  740. player.getEffectList().stopEffect(1411);
  741. revengeSkill.getEffects(player, player, false, false);
  742. if (player.getPet() != null)
  743. revengeSkill.getEffects(player, player.getPet(), false, false);
  744. }
  745. }
  746.  
  747. public void unParalyzePlayers()
  748. {
  749. for (Player player : _participants.keySet())
  750. {
  751. player.getEffectList().stopEffect(4515);
  752. if (player.getPet() != null)
  753. player.getPet().getEffectList().stopEffect(4515);
  754. if(player.isInParty())
  755. player.leaveParty();
  756. }
  757. }
  758.  
  759. public void restorePlayer(Player player)
  760. {
  761. ClassId nclassId = ClassId.VALUES[player.getClassId().getId()];
  762. if(player.isFakeDeath())
  763. {
  764. player.setFakeDeath(false);
  765. player.broadcastPacket(new ChangeWaitType(player, ChangeWaitType.WT_STOP_FAKEDEATH));
  766. player.broadcastPacket(new Revive(player));
  767. player.broadcastCharInfo();
  768. }
  769. if(nclassId.isMage())
  770. playerBuff(player, getConfigs().LIST_MAGE_MAG_SUPPORT);
  771. else
  772. playerBuff(player, getConfigs().LIST_MAGE_FAITER_SUPPORT);
  773. player.setCurrentHpMp(player.getMaxHp(), player.getMaxMp());
  774. player.setCurrentCp(player.getMaxCp());
  775. }
  776.  
  777. public void restorePlayers()
  778. {
  779. for (Player player : _participants.keySet())
  780. {
  781. if(player.isFakeDeath())
  782. {
  783. player.setFakeDeath(false);
  784. player.broadcastPacket(new ChangeWaitType(player, ChangeWaitType.WT_STOP_FAKEDEATH));
  785. player.broadcastPacket(new Revive(player));
  786. player.broadcastCharInfo();
  787. }
  788. player.setCurrentHpMp(player.getMaxHp(), player.getMaxMp());
  789. player.setCurrentCp(player.getMaxCp());
  790. }
  791. }
  792.  
  793. public void ResurrectionPlayer(Player player)
  794. {
  795. if ((player._event == null) || (_state != 2) || (!_participants.containsKey(player)))
  796. return;
  797. Reflection ref = _ref;
  798. InstantZone instantZone = ref.getInstancedZone();
  799. Location tele = Location.findPointToStay(instantZone.getTeleportCoords().get(player.getPvPTeam() - 1), 50, 50, ref.getGeoIndex());
  800. player.teleToLocation(tele, ref);
  801. restorePlayer(player);
  802. }
  803.  
  804. private void clearAll()
  805. {
  806. for(Player player : _participants.keySet())
  807. {
  808. player.setPvPTeam(0);
  809. player.allowPvPTeam();
  810. player._event = null;
  811. }
  812. _participants.clear();
  813. live_list.clear();
  814. }
  815.  
  816. public void rewardToWinTeam(int WinTeam)
  817. {
  818. int count = 0;
  819. for (Player player : _participants.keySet())
  820. {
  821. if (player != null && player.getPvPTeam() == WinTeam)
  822. count++;
  823. }
  824. if (count < 1)
  825. return;
  826.  
  827. for (Player player : _participants.keySet())
  828. {
  829. if (player != null && player.getPvPTeam() == WinTeam)// && _participants.get(player) >= getConfigs().REWARD_FOR_KILL)
  830. {
  831. for(int i = 0; i < getConfigs().getRewardId().length; i++)
  832. addItem(player, getConfigs().getRewardId()[i], getConfigs().getRewardCount()[i]);
  833. }
  834. }
  835. sayToAll("scripts.events.TvT.TvT.EventWin", new String[] { getConfigs().TEAM_NAME.get(WinTeam - 1), getConfigs().NUMBER_OF_ROUNDS > 0 ? "Очков" : "Убийств", Integer.toString(_score[WinTeam]) }, false);
  836. }
  837.  
  838. public StringBuffer getInformation(Player player)
  839. {
  840. int rounds = getConfigs().NUMBER_OF_ROUNDS;
  841. long min = (getConfigs().START_TIME - System.currentTimeMillis() / 1000L) / 60L;
  842. String time = min + " минут";
  843. String reward = "";//getConfigs().REWARD_COUNT + " " + ItemHolder.getInstance().getTemplate(getConfigs().REWARD_ITEM_ID).getName();
  844.  
  845. StringBuffer content = new StringBuffer();
  846. content.append("<table width=425 cellspacing=0>");
  847. content.append("<tr><td align=center>Эвент: <font color=LEVEL>").append(getName()).append("</font></td></tr>");
  848. content.append("<tr><td align=center>Тип: <font color=LEVEL>").append(rounds > 0 ? "По раундам" : "По времени").append("</font></td></tr>");
  849. content.append("<tr><td align=center>Приз: <font color=LEVEL>").append(reward).append("</font></td></tr>");
  850. content.append("<tr><td align=center>Кол-во команд: <font color=LEVEL>").append(getConfigs().TEAM_COUNTS).append("</font></td></tr>");
  851. content.append("<tr><td align=center>Мин/Макс участников: <font color=LEVEL>").append(getConfigs().MIN_PARTICIPANTS).append("/").append(getConfigs().MAX_PARTICIPANTS).append("</font></td></tr>");
  852. if (_state == 1)
  853. {
  854. content.append("<tr><td align=center>");
  855. if (_participants == null || !_participants.containsKey(player))
  856. content.append(Strings.htmlButton("Зарегестрироваться", "bypass -h _bbseventreg;" + getName(), 120, 25));
  857. else
  858. content.append(Strings.htmlButton("Отмена", "bypass -h _bbseventunreg;", 120, 25));
  859. content.append("</td></tr>");
  860. }
  861. else
  862. {
  863. content.append("<tr><td align=center>Начало через: <font color=LEVEL>").append(time).append("</font></td></tr>");
  864. }
  865. content.append("</table>");
  866. return content;
  867. }
  868.  
  869. class TaskVoid implements Runnable
  870. {
  871. String _name;
  872. Player _player;
  873.  
  874. TaskVoid(String name, Player player)
  875. {
  876. _name = name;
  877. _player = player;
  878. }
  879.  
  880. public void run()
  881. {
  882. if (_name.equals("canRegisters"))
  883. canRegisters();
  884. else if (_name.equals("start"))
  885. start();
  886. else if (_name.equals("restorePlayers"))
  887. restorePlayers();
  888. else if (_name.equals("returnBuffsToPlayers"))
  889. returnBuffsToPlayers(_player);
  890. else if (_name.equals("teleportPlayersToSavedCoords"))
  891. teleportPlayersToSavedCoords();
  892. else if (_name.equals("clearAll"))
  893. clearAll();
  894. else if (_name.equals("ResurrectionPlayer"))
  895. ResurrectionPlayer(_player);
  896. }
  897. }
  898.  
  899. class StartMessages implements Runnable
  900. {
  901. String _adress;
  902. String[] _replacing;
  903.  
  904. StartMessages(String adress, String[] replacing)
  905. {
  906. _adress = adress;
  907. _replacing = replacing;
  908. }
  909.  
  910. public void run()
  911. {
  912. if (_state == 1)
  913. sayToAll(_adress, _replacing, true);
  914. }
  915. }
  916.  
  917. public class go implements Runnable
  918. {
  919. public go()
  920. {
  921. }
  922.  
  923. public void run()
  924. {
  925. openDoors();
  926. unParalyzePlayers();
  927. int time = getConfigs().TIME_TO_END_BATTLE;
  928.  
  929. sayToAll("scripts.events.TvT.TvT.RoundStarted", null, false);
  930.  
  931. while (time >= 0 && _state == 2)
  932. {
  933. int sec = time - time / 60 * 60;
  934.  
  935. for (Player player : _participants.keySet())
  936. {
  937. String message;
  938. if (getConfigs().NUMBER_OF_ROUNDS > 0)
  939. {
  940. message = "Раунд: " + curr_round + " из " + getConfigs().NUMBER_OF_ROUNDS;
  941. message = message + "\nКоманда: " + getConfigs().TEAM_NAME.get(player.getPvPTeam() - 1);
  942. }
  943. else
  944. {
  945. message = "\nКоманда: " + getConfigs().TEAM_NAME.get(player.getPvPTeam() - 1);
  946. }
  947.  
  948. if (sec < 10)
  949. message = message + "\nОсталось: " + time / 60 + ":0" + sec;
  950. else
  951. {
  952. message = message + "\nОсталось: " + time / 60 + ":" + sec;
  953. }
  954. player.sendPacket(new ExShowScreenMessage(message, 2000, ExShowScreenMessage.ScreenMessageAlign.BOTTOM_RIGHT, false));
  955. }
  956. if(getCountPlayers() <= 1)
  957. finish();
  958. if (getConfigs().NUMBER_OF_ROUNDS > 0 && checkRound(false))
  959. return;
  960. try
  961. {
  962. Thread.sleep(1000);
  963. }
  964. catch (Exception e)
  965. {
  966. e.printStackTrace();
  967. }
  968. time--;
  969. }
  970.  
  971. if (getConfigs().NUMBER_OF_ROUNDS > 0)
  972. checkRound(true);
  973. else
  974. finish();
  975. }
  976. }
  977.  
  978. public void openDoors()
  979. {
  980. for(DoorInstance door : _ref.getDoors())
  981. door.openMe();
  982. }
  983.  
  984. @SuppressWarnings("unused")
  985. private void playersBuff()
  986. {
  987. for(Player player : _participants.keySet())
  988. {
  989. ClassId nclassId = ClassId.VALUES[player.getClassId().getId()];
  990. if(nclassId.isMage())
  991. playerBuff(player, getConfigs().LIST_MAGE_MAG_SUPPORT);
  992. else
  993. playerBuff(player, getConfigs().LIST_MAGE_FAITER_SUPPORT);
  994. }
  995. }
  996.  
  997. private void playerBuff(Player player, GArray<Integer> list)
  998. {
  999. int time = getConfigs().TIME_MAGE_SUPPORT;
  1000. Summon pet = player.getPet();
  1001. Skill skill = null;
  1002.  
  1003. for(int i : list)
  1004. {
  1005. int lvl = SkillTable.getInstance().getBaseLevel(i);
  1006.  
  1007. skill = SkillTable.getInstance().getInfo(i, lvl);
  1008. if(pet != null)
  1009. for(EffectTemplate et : skill.getEffectTemplates())
  1010. {
  1011. Env env = new Env(pet, pet, skill);
  1012. Effect effect = et.getEffect(env);
  1013. effect.setPeriod(time * 60000);
  1014. pet.getEffectList().addEffect(effect);
  1015. pet.updateEffectIcons();
  1016. }
  1017. else
  1018. for(EffectTemplate et : skill.getEffectTemplates())
  1019. {
  1020. Env env = new Env(player, player, skill);
  1021. Effect effect = et.getEffect(env);
  1022. effect.setPeriod(time * 60000);
  1023. player.getEffectList().addEffect(effect);
  1024. player.sendChanges();
  1025. player.updateEffectIcons();
  1026. }
  1027. }
  1028. }
  1029.  
  1030. @Override
  1031. public boolean canAttack(Creature attacker, Creature target)
  1032. {
  1033. if(_state == 2)
  1034. {
  1035. if(attacker.getTeam() == target.getTeam())
  1036. return false;
  1037. if(target.isFakeDeath())
  1038. return false;
  1039. }
  1040. return true;
  1041. }
  1042.  
  1043. @Override
  1044. public boolean canUseSkill(Creature caster, Creature target, Skill skill)
  1045. {
  1046. if(_state == 2)
  1047. {
  1048. if(caster.getTeam() == target.getTeam() && skill.isOffensive())
  1049. return false;
  1050.  
  1051. if(skill.getId() == 60 || skill.isHeroic() && !getConfigs().ALLOW_HERO_WEAPONS)
  1052. {
  1053. caster.sendMessage(caster.getPlayer().isLangRus() ? "Запрещено использовать во время ивентов." : "You may not use during the events.");
  1054. return false;
  1055. }
  1056. }
  1057. return true;
  1058. }
  1059.  
  1060. @Override
  1061. public String minLvl()
  1062. {
  1063. return "" + getConfigs().MIN_LEVEL;
  1064. }
  1065.  
  1066. @Override
  1067. public String maxLvl()
  1068. {
  1069. return "" + getConfigs().MAX_LEVEL;
  1070. }
  1071.  
  1072. @Override
  1073. public void onPlayerExit(Player player)
  1074. {
  1075. if(player.getPvPTeam() == 0)
  1076. return;
  1077.  
  1078. // Вышел или вылетел во время эвента
  1079. if(_state > 1 && player != null && player.getPvPTeam() != 0 && _participants.containsKey(player))
  1080. {
  1081. try
  1082. {
  1083. if(player != null)
  1084. player.teleToLocation(player._stablePoint, ReflectionManager.DEFAULT);
  1085. remove(player);
  1086. player.setPvPTeam(0);
  1087. player.allowPvPTeam();
  1088. player._event = null;
  1089. }
  1090. catch (Exception e)
  1091. {
  1092. e.printStackTrace();
  1093. }
  1094. }
  1095. }
  1096. }
Advertisement
Add Comment
Please, Sign In to add comment