Advertisement
Guest User

Untitled

a guest
Mar 6th, 2012
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 30.91 KB | None | 0 0
  1. package events.TvT;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Calendar;
  5. import java.util.HashMap;
  6. import java.util.LinkedHashMap;
  7. import java.util.List;
  8. import java.util.Map;
  9. import java.util.concurrent.CopyOnWriteArrayList;
  10. import java.util.concurrent.ScheduledFuture;
  11.  
  12. import l2p.commons.geometry.Polygon;
  13. import l2p.commons.threading.RunnableImpl;
  14. import l2p.commons.util.Rnd;
  15. import l2p.gameserver.Announcements;
  16. import l2p.gameserver.Config;
  17. import l2p.gameserver.ThreadPoolManager;
  18. import l2p.gameserver.data.xml.holder.ResidenceHolder;
  19. import l2p.gameserver.instancemanager.ReflectionManager;
  20. import l2p.gameserver.instancemanager.ServerVariables;
  21. import l2p.gameserver.listener.actor.OnDeathListener;
  22. import l2p.gameserver.listener.actor.OnMagicUseListener;
  23. import l2p.gameserver.listener.actor.player.OnPlayerExitListener;
  24. import l2p.gameserver.listener.actor.player.OnTeleportListener;
  25. import l2p.gameserver.listener.zone.OnZoneEnterLeaveListener;
  26. import l2p.gameserver.model.Creature;
  27. import l2p.gameserver.model.GameObject;
  28. import l2p.gameserver.model.GameObjectsStorage;
  29. import l2p.gameserver.model.Player;
  30. import l2p.gameserver.model.Skill;
  31. import l2p.gameserver.model.Territory;
  32. import l2p.gameserver.model.Zone;
  33. import l2p.gameserver.model.actor.listener.CharListenerList;
  34. import l2p.gameserver.model.base.TeamType;
  35. import l2p.gameserver.model.entity.Reflection;
  36. import l2p.gameserver.model.entity.olympiad.Olympiad;
  37. import l2p.gameserver.model.entity.residence.Castle;
  38. import l2p.gameserver.model.entity.residence.Residence;
  39. import l2p.gameserver.scripts.Functions;
  40. import l2p.gameserver.scripts.ScriptFile;
  41. import l2p.gameserver.serverpackets.Revive;
  42. import l2p.gameserver.serverpackets.components.ChatType;
  43. import l2p.gameserver.serverpackets.components.CustomMessage;
  44. import l2p.gameserver.skills.AbnormalEffect;
  45. import l2p.gameserver.tables.SkillTable;
  46. import l2p.gameserver.templates.DoorTemplate;
  47. import l2p.gameserver.templates.ZoneTemplate;
  48. import l2p.gameserver.utils.Location;
  49. import l2p.gameserver.utils.PositionUtils;
  50. import l2p.gameserver.utils.ReflectionUtils;
  51.  
  52. import org.napile.primitive.maps.IntObjectMap;
  53. import org.napile.primitive.maps.impl.HashIntObjectMap;
  54. import org.slf4j.Logger;
  55. import org.slf4j.LoggerFactory;
  56.  
  57. public class TvT extends Functions implements ScriptFile, OnDeathListener,
  58. OnTeleportListener, OnPlayerExitListener {
  59.  
  60. private static final Logger _log = LoggerFactory.getLogger(TvT.class);
  61.  
  62. private static ScheduledFuture<?> _startTask;
  63.  
  64. private static final int[] doors = new int[] { 24190001, 24190002, 24190003, 24190004 };
  65.  
  66. private static List<Long> players_list1 = new CopyOnWriteArrayList<Long>();
  67. private static List<Long> players_list2 = new CopyOnWriteArrayList<Long>();
  68. private static List<Long> live_list1 = new CopyOnWriteArrayList<Long>();
  69. private static List<Long> live_list2 = new CopyOnWriteArrayList<Long>();
  70.  
  71. private static int[][] mage_buffs = new int[Config.EVENT_TvTMageBuffs.length][2];
  72. private static int[][] fighter_buffs = new int[Config.EVENT_TvTFighterBuffs.length][2];
  73.  
  74. private static int[][] rewards = new int[Config.EVENT_TvTRewards.length][2];
  75.  
  76. private static Map<Long, Location> playerRestoreCoord = new LinkedHashMap<Long, Location>();
  77.  
  78. private static Map<Long, String> boxes = new LinkedHashMap<Long, String>();
  79.  
  80. private static boolean _isRegistrationActive = false;
  81. private static int _status = 0;
  82. private static int _time_to_start;
  83. private static int _category;
  84. private static int _minLevel;
  85. private static int _maxLevel;
  86. private static int _autoContinue = 0;
  87. private static boolean _active = false;
  88. private static Skill buff;
  89.  
  90. private static Reflection reflection = ReflectionManager.TVT_EVENT;
  91.  
  92. private static ScheduledFuture<?> _endTask;
  93.  
  94. private static Zone _zone;
  95. private static Map<String, ZoneTemplate> _zones = new HashMap<String, ZoneTemplate>();
  96. private static IntObjectMap<DoorTemplate> _doors = new HashIntObjectMap<DoorTemplate>();
  97. private static ZoneListener _zoneListener = new ZoneListener();
  98.  
  99. private static Territory team1spawn = new Territory().add(new Polygon().add(149878, 47505).add(150262, 47513).add(150502, 47233).add(150507, 46300).add(150256, 46002).add(149903, 46005).setZmin(-3408).setZmax(-3308));
  100.  
  101. private static Territory team2spawn = new Territory().add(new Polygon().add(149027, 46005).add(148686, 46003).add(148448, 46302).add(148449, 47231).add(148712, 47516).add(149014, 47527).setZmin(-3408).setZmax(-3308));
  102.  
  103. @Override
  104. public void onLoad()
  105. {
  106. CharListenerList.addGlobal(this);
  107.  
  108. _zones.put("[colosseum_battle]", ReflectionUtils.getZone("[colosseum_battle]").getTemplate());
  109. for(final int doorId : doors)
  110. _doors.put(doorId, ReflectionUtils.getDoor(doorId).getTemplate());
  111. reflection.init(_doors, _zones);
  112.  
  113. _zone = reflection.getZone("[colosseum_battle]");
  114.  
  115. _active = ServerVariables.getString("TvT", "off").equalsIgnoreCase("on");
  116. _zone.addListener(_zoneListener);
  117.  
  118. int i = 0;
  119.  
  120. if(Config.EVENT_TvTBuffPlayers && Config.EVENT_TvTMageBuffs.length != 0)
  121. for(String skill : Config.EVENT_TvTMageBuffs) {
  122. String[] splitSkill = skill.split(",");
  123. mage_buffs[i][0] = Integer.parseInt(splitSkill[0]);
  124. mage_buffs[i][1] = Integer.parseInt(splitSkill[1]);
  125. i++;
  126. }
  127.  
  128.  
  129. i = 0;
  130.  
  131. if(Config.EVENT_TvTBuffPlayers && Config.EVENT_TvTMageBuffs.length != 0)
  132. for(String skill : Config.EVENT_TvTFighterBuffs) {
  133. String[] splitSkill = skill.split(",");
  134. fighter_buffs[i][0] = Integer.parseInt(splitSkill[0]);
  135. fighter_buffs[i][1] = Integer.parseInt(splitSkill[1]);
  136. i++;
  137. }
  138.  
  139. i = 0;
  140. if(Config.EVENT_TvTRewards.length != 0)
  141. for(String reward : Config.EVENT_TvTRewards) {
  142. String[] splitReward = reward.split(",");
  143. rewards[i][0] = Integer.parseInt(splitReward[0]);
  144. rewards[i][1] = Integer.parseInt(splitReward[1]);
  145. i++;
  146. }
  147.  
  148. _log.info("Loaded Event: TvT");
  149. }
  150.  
  151. @Override
  152. public void onReload() {
  153. if(_startTask != null) {
  154. _startTask.cancel(false);
  155. _startTask = null;
  156. }
  157. }
  158.  
  159. @Override
  160. public void onShutdown() {
  161. onReload();
  162. }
  163.  
  164. private static boolean isActive() {
  165. return _active;
  166. }
  167.  
  168. public void activateEvent()
  169. {
  170. Player player = getSelf();
  171. if(!player.getPlayerAccess().IsEventGm)
  172. return;
  173.  
  174. if(!isActive())
  175. {
  176. if(_startTask == null)
  177. scheduleEventStart();
  178. ServerVariables.set("TvT", "on");
  179. _log.info("Event 'TvT' activated.");
  180. Announcements.getInstance().announceByCustomMessage("scripts.events.TvT.AnnounceEventStarted", null);
  181. }
  182. else
  183. player.sendMessage("Event 'TvT' already active.");
  184.  
  185. _active = true;
  186.  
  187. show("admin/events.htm", player);
  188. }
  189.  
  190. public void deactivateEvent()
  191. {
  192. Player player = getSelf();
  193. if(!player.getPlayerAccess().IsEventGm)
  194. return;
  195.  
  196. if(isActive()) {
  197. if(_startTask != null) {
  198. _startTask.cancel(false);
  199. _startTask = null;
  200. }
  201. ServerVariables.unset("TvT");
  202. _log.info("Event 'TvT' deactivated.");
  203. Announcements.getInstance().announceByCustomMessage("scripts.events.TvT.AnnounceEventStoped", null);
  204. }
  205. else
  206. player.sendMessage("Event 'TvT' not active.");
  207.  
  208. _active = false;
  209.  
  210. show("admin/events.htm", player);
  211. }
  212.  
  213. public static boolean isRunned() {
  214. return _isRegistrationActive || _status > 0;
  215. }
  216.  
  217. public static int getMinLevelForCategory(int category) {
  218. switch(category) {
  219. case 1:
  220. return 20;
  221. case 2:
  222. return 30;
  223. case 3:
  224. return 40;
  225. case 4:
  226. return 52;
  227. case 5:
  228. return 62;
  229. case 6:
  230. return 76;
  231. }
  232. return 0;
  233. }
  234.  
  235. public static int getMaxLevelForCategory(int category)
  236. {
  237. switch(category)
  238. {
  239. case 1:
  240. return 29;
  241. case 2:
  242. return 39;
  243. case 3:
  244. return 51;
  245. case 4:
  246. return 61;
  247. case 5:
  248. return 75;
  249. case 6:
  250. return 85;
  251. }
  252. return 0;
  253. }
  254.  
  255. public static int getCategory(int level) {
  256. if(level >= 20 && level <= 29)
  257. return 1;
  258. else if(level >= 30 && level <= 39)
  259. return 2;
  260. else if(level >= 40 && level <= 51)
  261. return 3;
  262. else if(level >= 52 && level <= 61)
  263. return 4;
  264. else if(level >= 62 && level <= 75)
  265. return 5;
  266. else if(level >= 76)
  267. return 6;
  268. return 0;
  269. }
  270.  
  271. public void start(String[] var)
  272. {
  273. Player player = getSelf();
  274. if(var.length != 2)
  275. {
  276. show(new CustomMessage("common.Error", player), player);
  277. return;
  278. }
  279.  
  280. Integer category;
  281. Integer autoContinue;
  282. try
  283. {
  284. category = Integer.valueOf(var[0]);
  285. autoContinue = Integer.valueOf(var[1]);
  286. }
  287. catch(Exception e)
  288. {
  289. show(new CustomMessage("common.Error", player), player);
  290. return;
  291. }
  292.  
  293. _category = category;
  294. _autoContinue = autoContinue;
  295.  
  296. if(_category == -1)
  297. {
  298. _minLevel = 1;
  299. _maxLevel = 85;
  300. }
  301. else
  302. {
  303. _minLevel = getMinLevelForCategory(_category);
  304. _maxLevel = getMaxLevelForCategory(_category);
  305. }
  306.  
  307. if(_endTask != null)
  308. {
  309. show(new CustomMessage("common.TryLater", player), player);
  310. return;
  311. }
  312.  
  313. _status = 0;
  314. _isRegistrationActive = true;
  315. _time_to_start = Config.EVENT_TvTTime;
  316.  
  317. players_list1 = new CopyOnWriteArrayList<Long>();
  318. players_list2 = new CopyOnWriteArrayList<Long>();
  319. live_list1 = new CopyOnWriteArrayList<Long>();
  320. live_list2 = new CopyOnWriteArrayList<Long>();
  321.  
  322. playerRestoreCoord = new LinkedHashMap<Long, Location>();
  323.  
  324.  
  325. String[] param = {
  326. String.valueOf(_time_to_start),
  327. String.valueOf(_minLevel),
  328. String.valueOf(_maxLevel)
  329. };
  330. sayToAll("scripts.events.TvT.AnnouncePreStart", param);
  331.  
  332. executeTask("events.TvT.TvT", "question", new Object[0], 10000);
  333. executeTask("events.TvT.TvT", "announce", new Object[0], 60000);
  334. }
  335.  
  336. public static void sayToAll(String address, String[] replacements) {
  337. Announcements.getInstance().announceByCustomMessage(address, replacements, ChatType.CRITICAL_ANNOUNCE);
  338. }
  339.  
  340. public static void question()
  341. {
  342. for(Player player : GameObjectsStorage.getAllPlayersForIterate())
  343. if(player != null && !player.isDead() && player.getLevel() >= _minLevel && player.getLevel() <= _maxLevel && player.getReflection().isDefault() && !player.isInOlympiadMode() && !player.isInObserverMode())
  344. player.scriptRequest(new CustomMessage("scripts.events.TvT.AskPlayer", player).toString(), "events.TvT.TvT:addPlayer", new Object[0]);
  345. }
  346.  
  347. public static void announce() {
  348. if(_time_to_start > 1) {
  349. _time_to_start--;
  350. String[] param = {
  351. String.valueOf(_time_to_start),
  352. String.valueOf(_minLevel),
  353. String.valueOf(_maxLevel)
  354. };
  355. sayToAll("scripts.events.TvT.AnnouncePreStart", param);
  356. executeTask("events.TvT.TvT", "announce", new Object[0], 60000);
  357. }
  358. else
  359. {
  360. if(players_list1.isEmpty() || players_list2.isEmpty()
  361. || players_list1.size() < Config.EVENT_TvTMinPlayerInTeam || players_list2.size() < Config.EVENT_TvTMinPlayerInTeam)
  362. {
  363. sayToAll("scripts.events.TvT.AnnounceEventCancelled", null);
  364. _isRegistrationActive = false;
  365. _status = 0;
  366. executeTask("events.TvT.TvT", "autoContinue", new Object[0], 10000);
  367. return;
  368. } else {
  369. _status = 1;
  370. _isRegistrationActive = false;
  371. sayToAll("scripts.events.TvT.AnnounceEventStarting", null);
  372. executeTask("events.TvT.TvT", "prepare", new Object[0], 5000);
  373. }
  374. }
  375. }
  376.  
  377. public void addPlayer()
  378. {
  379. Player player = getSelf();
  380. if(player == null || !checkPlayer(player, true) || !checkDualBox(player))
  381. return;
  382.  
  383. int team = 0, size1 = players_list1.size(), size2 = players_list2.size();
  384.  
  385. if(size1 == Config.EVENT_TvTMaxPlayerInTeam && size2 == Config.EVENT_TvTMaxPlayerInTeam) {
  386. show(new CustomMessage("scripts.events.TvT.CancelledCount", player), player);
  387. _isRegistrationActive = false;
  388. return;
  389. }
  390.  
  391. if(!Config.EVENT_TvTAllowMultiReg) {
  392. if("IP".equalsIgnoreCase(Config.EVENT_TvTCheckWindowMethod))
  393. boxes.put(player.getStoredId(), player.getIP());
  394. if("HWid".equalsIgnoreCase(Config.EVENT_TvTCheckWindowMethod))
  395. boxes.put(player.getStoredId(), player.getNetConnection().getHWID());
  396. }
  397.  
  398. if(size1 > size2)
  399. team = 2;
  400. else if(size1 < size2)
  401. team = 1;
  402. else
  403. team = Rnd.get(1, 2);
  404.  
  405. if(team == 1)
  406. {
  407. players_list1.add(player.getStoredId());
  408. live_list1.add(player.getStoredId());
  409. show(new CustomMessage("scripts.events.TvT.Registered", player), player);
  410. }
  411. else if(team == 2)
  412. {
  413. players_list2.add(player.getStoredId());
  414. live_list2.add(player.getStoredId());
  415. show(new CustomMessage("scripts.events.TvT.Registered", player), player);
  416. }
  417. else
  418. _log.info("WTF??? Command id 0 in TvT...");
  419. }
  420.  
  421. public static boolean checkPlayer(Player player, boolean first) {
  422.  
  423. if(first && (!_isRegistrationActive || player.isDead())) {
  424. show(new CustomMessage("scripts.events.Late", player), player);
  425. return false;
  426. }
  427.  
  428. if(first && (players_list1.contains(player.getStoredId()) || players_list2.contains(player.getStoredId()))) {
  429. show(new CustomMessage("scripts.events.TvT.Cancelled", player), player);
  430. if(players_list1.contains(player.getStoredId()))
  431. players_list1.remove(player.getStoredId());
  432. if(players_list2.contains(player.getStoredId()))
  433. players_list2.remove(player.getStoredId());
  434. if(live_list1.contains(player.getStoredId()))
  435. live_list1.remove(player.getStoredId());
  436. if(live_list2.contains(player.getStoredId()))
  437. live_list2.remove(player.getStoredId());
  438. if(boxes.containsKey(player.getStoredId()))
  439. boxes.remove(player.getStoredId());
  440. return false;
  441. }
  442.  
  443. if(player.getLevel() < _minLevel || player.getLevel() > _maxLevel) {
  444. show(new CustomMessage("scripts.events.TvT.CancelledLevel", player), player);
  445. return false;
  446. }
  447.  
  448. if(player.isMounted()) {
  449. show(new CustomMessage("scripts.events.TvT.Cancelled", player), player);
  450. return false;
  451. }
  452.  
  453. if(player.isInDuel()) {
  454. show(new CustomMessage("scripts.events.TvT.CancelledDuel", player), player);
  455. return false;
  456. }
  457.  
  458. if(player.getTeam() != TeamType.NONE) {
  459. show(new CustomMessage("scripts.events.TvT.CancelledOtherEvent", player), player);
  460. return false;
  461. }
  462.  
  463. if(player.getOlympiadGame() != null || first && Olympiad.isRegistered(player)) {
  464. show(new CustomMessage("scripts.events.TvT.CancelledOlympiad", player), player);
  465. return false;
  466. }
  467.  
  468. if(player.isInParty() && player.getParty().isInDimensionalRift()) {
  469. show(new CustomMessage("scripts.events.TvT.CancelledOtherEvent", player), player);
  470. return false;
  471. }
  472.  
  473. if(player.isInObserverMode()) {
  474. show(new CustomMessage("scripts.event.TvT.CancelledObserver", player), player);
  475. return false;
  476. }
  477.  
  478. if(player.isTeleporting())
  479. {
  480. show(new CustomMessage("scripts.events.TvT.CancelledTeleport", player), player);
  481. return false;
  482. }
  483. return true;
  484. }
  485.  
  486. public static void prepare()
  487. {
  488. cleanPlayers();
  489. clearArena();
  490. executeTask("events.TvT.TvT", "ressurectPlayers", new Object[0], 1000);
  491. executeTask("events.TvT.TvT", "healPlayers", new Object[0], 2000);
  492. executeTask("events.TvT.TvT", "teleportPlayersToColiseum", new Object[0], 3000);
  493. executeTask("events.TvT.TvT", "paralyzePlayers", new Object[0], 4000);
  494. executeTask("events.TvT.TvT", "buffPlayers", new Object[0], 5000);
  495. executeTask("events.TvT.TvT", "go", new Object[0], 60000);
  496.  
  497. sayToAll("scripts.events.TvT.AnnounceFinalCountdown", null);
  498. }
  499.  
  500. public static void go()
  501. {
  502. _status = 2;
  503. upParalyzePlayers();
  504. checkLive();
  505. clearArena();
  506. sayToAll("scripts.events.TvT.AnnounceFight", null);
  507. _endTask = executeTask("events.TvT.TvT", "endBattle", new Object[0], 300000);
  508. }
  509.  
  510. public static void endBattle()
  511. {
  512. _status = 0;
  513. removeAura();
  514. boxes.clear();
  515. if(live_list1.isEmpty())
  516. {
  517. sayToAll("scripts.events.TvT.AnnounceFinishedBlueWins", null);
  518. giveItemsToWinner(false, true, 1);
  519. }
  520. else if(live_list2.isEmpty())
  521. {
  522. sayToAll("scripts.events.TvT.AnnounceFinishedRedWins", null);
  523. giveItemsToWinner(true, false, 1);
  524. }
  525. else if(live_list1.size() < live_list2.size())
  526. {
  527. sayToAll("scripts.events.TvT.AnnounceFinishedBlueWins", null);
  528. giveItemsToWinner(false, true, 1);
  529. }
  530. else if(live_list1.size() > live_list2.size())
  531. {
  532. sayToAll("scripts.events.TvT.AnnounceFinishedRedWins", null);
  533. giveItemsToWinner(true, false, 1);
  534. }
  535. else if(live_list1.size() == live_list2.size())
  536. {
  537. sayToAll("scripts.events.TvT.AnnounceFinishedDraw", null);
  538. giveItemsToWinner(true, true, 0.5);
  539. }
  540.  
  541. sayToAll("scripts.events.TvT.AnnounceEnd", null);
  542. executeTask("events.TvT.TvT", "end", new Object[0], 30000);
  543. _isRegistrationActive = false;
  544. if(_endTask != null)
  545. {
  546. _endTask.cancel(false);
  547. _endTask = null;
  548. }
  549. }
  550.  
  551. public static void end()
  552. {
  553. executeTask("events.TvT.TvT", "ressurectPlayers", new Object[0], 1000);
  554. executeTask("events.TvT.TvT", "healPlayers", new Object[0], 2000);
  555. executeTask("events.TvT.TvT", "teleportPlayers", new Object[0], 3000);
  556. executeTask("events.TvT.TvT", "autoContinue", new Object[0], 10000);
  557. }
  558.  
  559. public void autoContinue()
  560. {
  561. live_list1.clear();
  562. live_list2.clear();
  563. players_list1.clear();
  564. players_list2.clear();
  565.  
  566. if(_autoContinue > 0)
  567. {
  568. if(_autoContinue >= 6)
  569. {
  570. _autoContinue = 0;
  571. return;
  572. }
  573. start(new String[]{
  574. "" + (_autoContinue + 1),
  575. "" + (_autoContinue + 1)
  576. });
  577. } else
  578. scheduleEventStart();
  579. }
  580.  
  581. public static void giveItemsToWinner(boolean team1, boolean team2, double rate)
  582. {
  583. if(team1)
  584. for(Player player : getPlayers(players_list1))
  585. for(int i = 0; i < rewards.length; i++)
  586. addItem(player, rewards[i][0], Math.round((Config.EVENT_TvTrate ? player.getLevel() : 1) * rewards[i][1] * rate));
  587. if(team2)
  588. for(Player player : getPlayers(players_list2))
  589. for(int i = 0; i < rewards.length; i++)
  590. addItem(player, rewards[i][0], Math.round((Config.EVENT_TvTrate ? player.getLevel() : 1) * rewards[i][1] * rate));
  591. }
  592.  
  593. public static void teleportPlayersToColiseum() {
  594. for(Player player : getPlayers(players_list1))
  595. {
  596. unRide(player);
  597.  
  598. if(!Config.EVENT_TvTAllowSummons)
  599. unSummonPet(player, true);
  600.  
  601. playerRestoreCoord.put(player.getStoredId(), new Location(player.getX(), player.getY(), player.getZ()));
  602.  
  603. player.teleToLocation(Territory.getRandomLoc(team1spawn), reflection);
  604.  
  605. if(!Config.EVENT_TvTAllowBuffs) {
  606. player.getEffectList().stopAllEffects();
  607. if(player.getPet() != null)
  608. player.getPet().getEffectList().stopAllEffects();
  609. }
  610. }
  611.  
  612. for(Player player : getPlayers(players_list2)) {
  613. unRide(player);
  614.  
  615. if(!Config.EVENT_TvTAllowSummons)
  616. unSummonPet(player, true);
  617.  
  618. playerRestoreCoord.put(player.getStoredId(), new Location(player.getX(), player.getY(), player.getZ()));
  619.  
  620. player.teleToLocation(Territory.getRandomLoc(team2spawn), reflection);
  621.  
  622. if(!Config.EVENT_TvTAllowBuffs) {
  623. player.getEffectList().stopAllEffects();
  624. if(player.getPet() != null)
  625. player.getPet().getEffectList().stopAllEffects();
  626. }
  627. }
  628. }
  629.  
  630. public static void teleportPlayers()
  631. {
  632. for(Player player : getPlayers(players_list1))
  633. player.teleToLocation(playerRestoreCoord.get(player.getStoredId()), ReflectionManager.DEFAULT);
  634.  
  635. for(Player player : getPlayers(players_list2))
  636. player.teleToLocation(playerRestoreCoord.get(player.getStoredId()), ReflectionManager.DEFAULT);
  637. }
  638.  
  639. public static void paralyzePlayers()
  640. {
  641. for(Player player : getPlayers(players_list1)) {
  642. if(player == null)
  643. continue;
  644.  
  645. if(!player.isRooted()) {
  646. player.getEffectList().stopEffect(Skill.SKILL_MYSTIC_IMMUNITY);
  647. player.startRooted();
  648. player.startDamageBlocked();
  649. player.startAbnormalEffect(AbnormalEffect.ROOT);
  650. }
  651.  
  652. if(player.getPet() != null && !player.getPet().isRooted()) {
  653. player.getPet().startRooted();
  654. player.getPet().startDamageBlocked();
  655. player.getPet().startAbnormalEffect(AbnormalEffect.ROOT);
  656. }
  657. }
  658. for(Player player : getPlayers(players_list2)) {
  659.  
  660. if(!player.isRooted()) {
  661. player.getEffectList().stopEffect(Skill.SKILL_MYSTIC_IMMUNITY);
  662. player.startRooted();
  663. player.startDamageBlocked();
  664. player.startAbnormalEffect(AbnormalEffect.ROOT);
  665. }
  666.  
  667. if(player.getPet() != null && !player.getPet().isRooted()) {
  668. player.getPet().startRooted();
  669. player.getPet().startDamageBlocked();
  670. player.getPet().startAbnormalEffect(AbnormalEffect.ROOT);
  671. }
  672. }
  673. }
  674.  
  675. public static void upParalyzePlayers()
  676. {
  677. for(Player player : getPlayers(players_list1)) {
  678. if(player.isRooted()) {
  679. player.stopRooted();
  680. player.stopDamageBlocked();
  681. player.stopAbnormalEffect(AbnormalEffect.ROOT);
  682. }
  683.  
  684. if(player.getPet() != null && player.getPet().isRooted()) {
  685. player.getPet().stopRooted();
  686. player.getPet().stopDamageBlocked();
  687. player.getPet().stopAbnormalEffect(AbnormalEffect.ROOT);
  688. }
  689.  
  690. }
  691. for(Player player : getPlayers(players_list2)) {
  692. if(player.isRooted()) {
  693. player.stopRooted();
  694. player.stopDamageBlocked();
  695. player.stopAbnormalEffect(AbnormalEffect.ROOT);
  696. }
  697. if(player.getPet() != null && player.getPet().isRooted()) {
  698. player.getPet().stopRooted();
  699. player.getPet().stopDamageBlocked();
  700. player.getPet().stopAbnormalEffect(AbnormalEffect.ROOT);
  701. }
  702. }
  703. }
  704.  
  705. public static void ressurectPlayers()
  706. {
  707. for(Player player : getPlayers(players_list1))
  708. if(player.isDead())
  709. {
  710. player.restoreExp();
  711. player.setCurrentCp(player.getMaxCp());
  712. player.setCurrentHp(player.getMaxHp(), true);
  713. player.setCurrentMp(player.getMaxMp());
  714. player.broadcastPacket(new Revive(player));
  715. }
  716. for(Player player : getPlayers(players_list2))
  717. if(player.isDead())
  718. {
  719. player.restoreExp();
  720. player.setCurrentCp(player.getMaxCp());
  721. player.setCurrentHp(player.getMaxHp(), true);
  722. player.setCurrentMp(player.getMaxMp());
  723. player.broadcastPacket(new Revive(player));
  724. }
  725. }
  726.  
  727. public static void healPlayers()
  728. {
  729. for(Player player : getPlayers(players_list1))
  730. {
  731. player.setCurrentHpMp(player.getMaxHp(), player.getMaxMp());
  732. player.setCurrentCp(player.getMaxCp());
  733. }
  734. for(Player player : getPlayers(players_list2))
  735. {
  736. player.setCurrentHpMp(player.getMaxHp(), player.getMaxMp());
  737. player.setCurrentCp(player.getMaxCp());
  738. }
  739. }
  740.  
  741. public static void cleanPlayers()
  742. {
  743. for(Player player : getPlayers(players_list1))
  744. if(!checkPlayer(player, false))
  745. removePlayer(player);
  746. for(Player player : getPlayers(players_list2))
  747. if(!checkPlayer(player, false))
  748. removePlayer(player);
  749. }
  750.  
  751. public static void checkLive()
  752. {
  753. List<Long> new_live_list1 = new CopyOnWriteArrayList<Long>();
  754. List<Long> new_live_list2 = new CopyOnWriteArrayList<Long>();
  755.  
  756. for(Long storeId : live_list1)
  757. {
  758. Player player = GameObjectsStorage.getAsPlayer(storeId);
  759. if(player != null)
  760. new_live_list1.add(storeId);
  761. }
  762.  
  763. for(Long storeId : live_list2)
  764. {
  765. Player player = GameObjectsStorage.getAsPlayer(storeId);
  766. if(player != null)
  767. new_live_list2.add(storeId);
  768. }
  769.  
  770. live_list1 = new_live_list1;
  771. live_list2 = new_live_list2;
  772.  
  773. for(Player player : getPlayers(live_list1))
  774. if(player.isInZone(_zone) && !player.isDead() && !player.isLogoutStarted())
  775. player.setTeam(TeamType.RED);
  776. else
  777. loosePlayer(player);
  778.  
  779. for(Player player : getPlayers(live_list2))
  780. if(player.isInZone(_zone) && !player.isDead() && !player.isLogoutStarted())
  781. player.setTeam(TeamType.BLUE);
  782. else
  783. loosePlayer(player);
  784.  
  785. if(live_list1.size() < 1 || live_list2.size() < 1)
  786. endBattle();
  787. }
  788.  
  789. public static void removeAura() {
  790. for(Player player : getPlayers(live_list1))
  791. player.setTeam(TeamType.NONE);
  792. for(Player player : getPlayers(live_list2))
  793. player.setTeam(TeamType.NONE);
  794. }
  795.  
  796. public static void clearArena()
  797. {
  798. for(GameObject obj : _zone.getObjects())
  799. if(obj != null)
  800. {
  801. Player player = obj.getPlayer();
  802. if(player != null && !live_list1.contains(player.getStoredId()) && !live_list2.contains(player.getStoredId()))
  803. player.teleToLocation(147451, 46728, -3410, ReflectionManager.DEFAULT);
  804. }
  805. }
  806.  
  807. @Override
  808. public void onDeath(Creature self, Creature killer) {
  809. if(_status > 1 && self.isPlayer() && self.getTeam() != TeamType.NONE
  810. && (live_list1.contains(self.getStoredId()) || live_list2.contains(self.getStoredId()))) {
  811. loosePlayer((Player) self);
  812. checkLive();
  813. }
  814.  
  815. }
  816.  
  817. @Override
  818. public void onTeleport(Player player, int x, int y, int z, Reflection reflection)
  819. {
  820. if(_zone.checkIfInZone(x, y, z, reflection))
  821. return;
  822.  
  823. if(_status > 1 && player != null && player.getTeam() != TeamType.NONE && (live_list1.contains(player.getStoredId()) || live_list2.contains(player.getStoredId())))
  824. {
  825. removePlayer(player);
  826. checkLive();
  827. }
  828. }
  829.  
  830. @Override
  831. public void onPlayerExit(Player player) {
  832. if(player.getTeam() == TeamType.NONE)
  833. return;
  834.  
  835. if(_status == 0 && _isRegistrationActive && player.getTeam() != TeamType.NONE && (live_list1.contains(player.getStoredId()) || live_list2.contains(player.getStoredId()))) {
  836. removePlayer(player);
  837. return;
  838. }
  839.  
  840. if(_status == 1 && (live_list1.contains(player.getStoredId()) || live_list2.contains(player.getStoredId()))) {
  841. player.teleToLocation(playerRestoreCoord.get(player.getStoredId()), ReflectionManager.DEFAULT);
  842. removePlayer(player);
  843. return;
  844. }
  845.  
  846. if(_status > 1 && player != null && player.getTeam() != TeamType.NONE
  847. && (live_list1.contains(player.getStoredId()) || live_list2.contains(player.getStoredId()))) {
  848. removePlayer(player);
  849. checkLive();
  850. }
  851. }
  852.  
  853. private static class ZoneListener implements OnZoneEnterLeaveListener
  854. {
  855. @Override
  856. public void onZoneEnter(Zone zone, Creature cha)
  857. {
  858. if(cha == null)
  859. return;
  860. Player player = cha.getPlayer();
  861. if(_status > 0 && player != null && !live_list1.contains(player.getStoredId()) && !live_list2.contains(player.getStoredId()))
  862. player.teleToLocation(147451, 46728, -3410, ReflectionManager.DEFAULT);
  863. }
  864.  
  865. @Override
  866. public void onZoneLeave(Zone zone, Creature cha)
  867. {
  868. if(cha == null)
  869. return;
  870. Player player = cha.getPlayer();
  871. if(_status > 1 && player != null && player.getTeam() != TeamType.NONE && (live_list1.contains(player.getStoredId()) || live_list2.contains(player.getStoredId())))
  872. {
  873. double angle = PositionUtils.convertHeadingToDegree(cha.getHeading()); // угол в градусах
  874. double radian = Math.toRadians(angle - 90); // угол в радианах
  875. int x = (int) (cha.getX() + 250 * Math.sin(radian));
  876. int y = (int) (cha.getY() - 250 * Math.cos(radian));
  877. int z = cha.getZ();
  878. player.teleToLocation(x, y, z, reflection);
  879. }
  880. }
  881. }
  882.  
  883. private static void loosePlayer(Player player)
  884. {
  885. if(player != null)
  886. {
  887. live_list1.remove(player.getStoredId());
  888. live_list2.remove(player.getStoredId());
  889. player.setTeam(TeamType.NONE);
  890. show(new CustomMessage("scripts.events.TvT.YouLose", player), player);
  891. }
  892. }
  893.  
  894. private static void removePlayer(Player player)
  895. {
  896. if(player != null)
  897. {
  898. live_list1.remove(player.getStoredId());
  899. live_list2.remove(player.getStoredId());
  900. players_list1.remove(player.getStoredId());
  901. players_list2.remove(player.getStoredId());
  902. playerRestoreCoord.remove(player.getStoredId());
  903.  
  904. if(!Config.EVENT_TvTAllowMultiReg)
  905. boxes.remove(player.getStoredId());
  906.  
  907. player.setTeam(TeamType.NONE);
  908. }
  909. }
  910.  
  911. private static List<Player> getPlayers(List<Long> list)
  912. {
  913. List<Player> result = new ArrayList<Player>();
  914. for(Long storeId : list)
  915. {
  916. Player player = GameObjectsStorage.getAsPlayer(storeId);
  917. if(player != null)
  918. result.add(player);
  919. }
  920. return result;
  921. }
  922.  
  923. public static void buffPlayers() {
  924.  
  925. for(Player player : getPlayers(players_list1)) {
  926. if(player.isMageClass())
  927. mageBuff(player);
  928. else
  929. fighterBuff(player);
  930. }
  931.  
  932. for(Player player : getPlayers(players_list2)) {
  933. if(player.isMageClass())
  934. mageBuff(player);
  935. else
  936. fighterBuff(player);
  937. }
  938. }
  939.  
  940. public void scheduleEventStart() {
  941. try {
  942. Calendar currentTime = Calendar.getInstance();
  943. Calendar nextStartTime = null;
  944. Calendar testStartTime = null;
  945.  
  946. for (String timeOfDay : Config.EVENT_TvTStartTime) {
  947. testStartTime = Calendar.getInstance();
  948. testStartTime.setLenient(true);
  949.  
  950. String[] splitTimeOfDay = timeOfDay.split(":");
  951.  
  952. testStartTime.set(Calendar.HOUR_OF_DAY, Integer.parseInt(splitTimeOfDay[0]));
  953. testStartTime.set(Calendar.MINUTE, Integer.parseInt(splitTimeOfDay[1]));
  954.  
  955. if (testStartTime.getTimeInMillis() < currentTime.getTimeInMillis())
  956. testStartTime.add(Calendar.DAY_OF_MONTH, 1);
  957.  
  958. if (nextStartTime == null || testStartTime.getTimeInMillis() < nextStartTime.getTimeInMillis())
  959. nextStartTime = testStartTime;
  960.  
  961. if(_startTask != null) {
  962. _startTask.cancel(false);
  963. _startTask = null;
  964. }
  965. _startTask = ThreadPoolManager.getInstance().schedule(new StartTask(), nextStartTime.getTimeInMillis() - System.currentTimeMillis());
  966.  
  967. }
  968.  
  969. currentTime = null;
  970. nextStartTime = null;
  971. testStartTime = null;
  972.  
  973. } catch (Exception e) {
  974. _log.warn("TvT: Error figuring out a start time. Check TvTEventInterval in config file.");
  975. }
  976. }
  977.  
  978. public static void mageBuff(Player player) {
  979. for(int i = 0; i < mage_buffs.length; i++) {
  980. buff = SkillTable.getInstance().getInfo(mage_buffs[i][0], mage_buffs[i][1]);
  981. buff.getEffects(player, player, false, false);
  982. }
  983. }
  984.  
  985. public static void fighterBuff(Player player) {
  986. for(int i = 0; i < fighter_buffs.length; i++) {
  987. buff = SkillTable.getInstance().getInfo(fighter_buffs[i][0], fighter_buffs[i][1]);
  988. buff.getEffects(player, player, false, false);
  989. }
  990. }
  991.  
  992. private static boolean checkDualBox(Player player) {
  993. if(!Config.EVENT_TvTAllowMultiReg)
  994. {
  995. if("IP".equalsIgnoreCase(Config.EVENT_TvTCheckWindowMethod)) {
  996. if(boxes.containsValue(player.getIP())) {
  997. show(new CustomMessage("scripts.events.TvT.CancelledBox", player), player);
  998. return false;
  999. }
  1000. }
  1001.  
  1002. else if("HWid".equalsIgnoreCase(Config.EVENT_TvTCheckWindowMethod)) {
  1003. if(boxes.containsValue(player.getNetConnection().getHWID())) {
  1004. show(new CustomMessage("scripts.events.TvT.CancelledBox", player), player);
  1005. return false;
  1006. }
  1007. }
  1008. }
  1009. return true;
  1010. }
  1011.  
  1012. public class StartTask extends RunnableImpl {
  1013.  
  1014. @Override
  1015. public void runImpl()
  1016. {
  1017. if(!_active)
  1018. return;
  1019.  
  1020. if(isPvPEventStarted()) {
  1021. _log.info("TvT not started: another event is already running");
  1022. return;
  1023. }
  1024.  
  1025. for(Residence c : ResidenceHolder.getInstance().getResidenceList(Castle.class))
  1026. if(c.getSiegeEvent() != null && c.getSiegeEvent().isInProgress()) {
  1027. _log.debug("TvT not started: CastleSiege in progress");
  1028. return;
  1029. }
  1030.  
  1031. if(Config.EVENT_TvTCategories)
  1032. start(new String[]{ "1", "1"});
  1033. else
  1034. start(new String[] {"-1", "-1"});
  1035. }
  1036. }
  1037. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement