Advertisement
Guest User

LastHero.java

a guest
Feb 1st, 2014
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 21.95 KB | None | 0 0
  1. package events.lastHero;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Calendar;
  5. import java.util.List;
  6. import java.util.concurrent.CopyOnWriteArrayList;
  7. import java.util.concurrent.ScheduledFuture;
  8.  
  9. import l2f.commons.threading.RunnableImpl;
  10. import l2f.gameserver.Announcements;
  11. import l2f.gameserver.ThreadPoolManager;
  12. import l2f.gameserver.instancemanager.ReflectionManager;
  13. import l2f.gameserver.instancemanager.ServerVariables;
  14. import l2f.gameserver.listener.actor.OnDeathListener;
  15. import l2f.gameserver.listener.actor.player.OnPlayerExitListener;
  16. import l2f.gameserver.listener.actor.player.OnTeleportListener;
  17. import l2f.gameserver.listener.zone.OnZoneEnterLeaveListener;
  18. import l2f.gameserver.model.Creature;
  19. import l2f.gameserver.model.GameObject;
  20. import l2f.gameserver.model.GameObjectsStorage;
  21. import l2f.gameserver.model.Player;
  22. import l2f.gameserver.model.Skill;
  23. import l2f.gameserver.model.Zone;
  24. import l2f.gameserver.model.actor.listener.CharListenerList;
  25. import l2f.gameserver.model.base.TeamType;
  26. import l2f.gameserver.model.entity.Hero;
  27. import l2f.gameserver.model.entity.Reflection;
  28. import l2f.gameserver.model.entity.olympiad.Olympiad;
  29. import l2f.gameserver.network.serverpackets.Revive;
  30. import l2f.gameserver.network.serverpackets.SkillList;
  31. import l2f.gameserver.network.serverpackets.components.ChatType;
  32. import l2f.gameserver.network.serverpackets.components.CustomMessage;
  33. import l2f.gameserver.scripts.Functions;
  34. import l2f.gameserver.scripts.ScriptFile;
  35. import l2f.gameserver.tables.SkillTable;
  36. import l2f.gameserver.utils.Location;
  37. import l2f.gameserver.utils.PositionUtils;
  38. import l2f.gameserver.utils.ReflectionUtils;
  39.  
  40. import org.slf4j.Logger;
  41. import org.slf4j.LoggerFactory;
  42.  
  43. import events.EventsConfig;
  44.  
  45. public class LastHero extends Functions implements ScriptFile, OnDeathListener, OnTeleportListener, OnPlayerExitListener
  46. {
  47.     private static final Logger _log = LoggerFactory.getLogger(LastHero.class);
  48.  
  49.     private static List<Long> players_list = new CopyOnWriteArrayList<Long>();
  50.     private static List<Long> live_list = new CopyOnWriteArrayList<Long>();
  51.  
  52.     private static boolean _isRegistrationActive = false;
  53.     private static int _status = 0;
  54.     private static int _time_to_start;
  55.     private static int _category;
  56.     private static int _pre_category;
  57.     private static int _minLevel;
  58.     private static int _maxLevel;
  59.  
  60.     private static ScheduledFuture<?> _endTask;
  61.  
  62.     private static Zone _zone = ReflectionUtils.getZone("[colosseum_battle]");
  63.     private static ZoneListener _zoneListener = new ZoneListener();
  64.  
  65.     private static final Location _enter = new Location(149505, 46719, -3417);
  66.  
  67.     private static Calendar _date = Calendar.getInstance();
  68.  
  69.     @Override
  70.     public void onLoad()
  71.     {
  72.         CharListenerList.addGlobal(this);
  73.         _zone.addListener(_zoneListener);
  74.         executeTask("events.lastHero.LastHero", "preLoad", new Object[0], 12000);
  75.         _active = ServerVariables.getString("LastHero", "off").equalsIgnoreCase("on");
  76.         _log.info("Loaded Event: Last Hero");
  77.     }
  78.  
  79.     @Override
  80.     public void onReload()
  81.     {
  82.         _zone.removeListener(_zoneListener);
  83.     }
  84.  
  85.     @Override
  86.     public void onShutdown()
  87.     {
  88.         onReload();
  89.     }
  90.  
  91.     private static boolean _active = false;
  92.  
  93.     private static boolean isActive()
  94.     {
  95.         return _active;
  96.     }
  97.  
  98.     public void activateEvent()
  99.     {
  100.         Player player = getSelf();
  101.         if(!player.getPlayerAccess().IsEventGm)
  102.             return;
  103.  
  104.         if(!isActive())
  105.         {
  106.             executeTask("events.lastHero.LastHero", "preLoad", new Object[0], 10000);
  107.             ServerVariables.set("LastHero", "on");
  108.             _log.info("Event 'Last Hero' activated.");
  109.             Announcements.getInstance().announceByCustomMessage("scripts.events.LastHero.AnnounceEventStarted", null);
  110.         }
  111.         else
  112.             player.sendMessage("Event 'Last Hero' already active.");
  113.  
  114.         _active = true;
  115.  
  116.         show("admin/events/events.htm", player);
  117.     }
  118.  
  119.     public void deactivateEvent()
  120.     {
  121.         Player player = getSelf();
  122.         if(!player.getPlayerAccess().IsEventGm)
  123.             return;
  124.  
  125.         if(isActive())
  126.         {
  127.             ServerVariables.unset("LastHero");
  128.             _log.info("Event 'Last Hero' deactivated.");
  129.             Announcements.getInstance().announceByCustomMessage("scripts.events.LastHero.AnnounceEventStoped", null);
  130.         }
  131.         else
  132.             player.sendMessage("Event 'LastHero' not active.");
  133.  
  134.         _active = false;
  135.  
  136.         show("admin/events/events.htm", player);
  137.     }
  138.  
  139.     public static boolean isRunned()
  140.     {
  141.         return _isRegistrationActive || _status > 0;
  142.     }
  143.  
  144.     public static int getMinLevelForCategory(int category)
  145.     {
  146.         switch(category)
  147.         {
  148.             case 1:
  149.                 return 20;
  150.             case 2:
  151.                 return 30;
  152.             case 3:
  153.                 return 40;
  154.             case 4:
  155.                 return 52;
  156.             case 5:
  157.                 return 62;
  158.             case 6:
  159.                 return 76;
  160.         }
  161.         return 0;
  162.     }
  163.  
  164.     public static int getMaxLevelForCategory(int category)
  165.     {
  166.         switch(category)
  167.         {
  168.             case 1:
  169.                 return 29;
  170.             case 2:
  171.                 return 39;
  172.             case 3:
  173.                 return 51;
  174.             case 4:
  175.                 return 61;
  176.             case 5:
  177.                 return 75;
  178.             case 6:
  179.                 return 85;
  180.         }
  181.         return 0;
  182.     }
  183.  
  184.     public static int getCategory(int level)
  185.     {
  186.         if(level >= 20 && level <= 29)
  187.             return 1;
  188.         else if(level >= 30 && level <= 39)
  189.             return 2;
  190.         else if(level >= 40 && level <= 51)
  191.             return 3;
  192.         else if(level >= 52 && level <= 61)
  193.             return 4;
  194.         else if(level >= 62 && level <= 75)
  195.             return 5;
  196.         else if(level >= 76)
  197.             return 6;
  198.         return 0;
  199.     }
  200.  
  201.     public void start(int var)
  202.     {
  203.         Player player = getSelf();
  204.  
  205.         _category = var;
  206.  
  207.         if(_category == -1){
  208.             _minLevel = 1;
  209.             _maxLevel = 85;}else{
  210.             _minLevel = getMinLevelForCategory(_category);
  211.             _maxLevel = getMaxLevelForCategory(_category);}
  212.  
  213.         if(_endTask != null){
  214.             show(new CustomMessage("common.TryLater", player), player);
  215.             return;}
  216.  
  217.         _log.info("LastHero started: LvL - " + _minLevel + " - " + _maxLevel);
  218.  
  219.         _status = 0;
  220.         _isRegistrationActive = true;
  221.         _time_to_start = EventsConfig.getInt("LastHero_time");
  222.  
  223.         players_list = new CopyOnWriteArrayList<Long>();
  224.  
  225.         String[] param = {
  226.                 String.valueOf(_time_to_start),
  227.                 String.valueOf(_minLevel),
  228.                 String.valueOf(_maxLevel)
  229.         };
  230.         sayToAll("scripts.events.LastHero.AnnouncePreStart", param);
  231.  
  232.         executeTask("events.lastHero.LastHero", "question", new Object[0], 10000);
  233.         executeTask("events.lastHero.LastHero", "announce", new Object[0], 60000);
  234.     }
  235.  
  236.     public static void sayToAll(String address, String[] replacements){
  237.         Announcements.getInstance().announceByCustomMessage(address, replacements, ChatType.CRITICAL_ANNOUNCE);}
  238.  
  239.     public static void question(){
  240.         for(Player player : GameObjectsStorage.getAllPlayersForIterate())
  241.         {
  242.             if(player.getVar("isPvPevents") == null)
  243.                 if(player != null && !player.isDead() && player.getLevel() >= _minLevel && player.getLevel() <= _maxLevel && player.getReflection().isDefault() && !player.isInOlympiadMode() && !player.isInObserverMode())
  244.                     player.scriptRequest(new CustomMessage("scripts.events.LastHero.AskPlayer", player).toString(), "events.lastHero.LastHero:addPlayer", new Object[0]);
  245.         }
  246.     }
  247.  
  248.     public static void announce(){
  249.         if(players_list.size() < 2 && _time_to_start <= 1){
  250.             sayToAll("scripts.events.LastHero.AnnounceEventCancelled", null);
  251.             _isRegistrationActive = false;
  252.             _status = 0;
  253.             executeTask("events.lastHero.LastHero", "preLoad", new Object[0], 10000);
  254.             return;}
  255.  
  256.         if(_time_to_start > 1){
  257.             _time_to_start--;
  258.             String[] param = {
  259.                     String.valueOf(_time_to_start),
  260.                     String.valueOf(_minLevel),
  261.                     String.valueOf(_maxLevel)};
  262.             sayToAll("scripts.events.LastHero.AnnouncePreStart", param);
  263.             executeTask("events.lastHero.LastHero", "announce", new Object[0], 60000);} else {
  264.             _status = 1;
  265.             _isRegistrationActive = false;
  266.             sayToAll("scripts.events.LastHero.AnnounceEventStarting", null);
  267.             executeTask("events.lastHero.LastHero", "prepare", new Object[0], 5000);}
  268.     }
  269.  
  270.     public void addPlayer(){
  271.         Player player = getSelf();
  272.         if(player == null || !checkPlayer(player, true))
  273.             return;
  274.  
  275.         if(player.getVar("isPvPevents") == null)
  276.         {
  277.             players_list.add(player.getStoredId());
  278.             live_list.add(player.getStoredId());
  279.             player.setVar("isPvPevents", "LastHero", -1);
  280.         }
  281.         else
  282.         {
  283.             show(new CustomMessage("scripts.events.Cancelled", player), player);
  284.             return;
  285.         }
  286.  
  287.         show(new CustomMessage("scripts.events.LastHero.Registered", player), player);}
  288.  
  289.     public static boolean checkPlayer(Player player, boolean first){
  290.         if(first && (!_isRegistrationActive || player.isDead())){
  291.             show(new CustomMessage("scripts.events.Late", player), player);
  292.             return false;}
  293.  
  294.         if(first && players_list.contains(player.getStoredId())){
  295.             show(new CustomMessage("scripts.events.LastHero.Cancelled", player), player);
  296.             return false;}
  297.  
  298.         if(player.getLevel() < _minLevel || player.getLevel() > _maxLevel){
  299.             show(new CustomMessage("scripts.events.LastHero.CancelledLevel", player), player);
  300.             return false;}
  301.  
  302.         if(player.isMounted()){
  303.             show(new CustomMessage("scripts.events.LastHero.Cancelled", player), player);
  304.             return false;}
  305.  
  306.         if(player.isInDuel()){
  307.             show(new CustomMessage("scripts.events.LastHero.CancelledDuel", player), player);
  308.             return false;}
  309.  
  310.         if(player.getTeam() != TeamType.NONE){
  311.             show(new CustomMessage("scripts.events.LastHero.CancelledOtherEvent", player), player);
  312.             return false;}
  313.  
  314.         if(player.getOlympiadGame() != null || first && Olympiad.isRegistered(player)){
  315.             show(new CustomMessage("scripts.events.LastHero.CancelledOlympiad", player), player);
  316.             return false;}
  317.  
  318.         if(player.isInParty() && player.getParty().isInDimensionalRift()){
  319.             show(new CustomMessage("scripts.events.LastHero.CancelledOtherEvent", player), player);
  320.             return false;}
  321.  
  322.         if(player.isTeleporting()){
  323.             show(new CustomMessage("scripts.events.LastHero.CancelledTeleport", player), player);
  324.             return false;}
  325.  
  326.         if(!player.getReflection().isDefault())
  327.         {
  328.             player.sendMessage(player.isLangRus() ? "?? ?? ?????? ???????????? ? ??????!" : "You can not participate in the opening event!!");
  329.             return false;
  330.         }
  331.  
  332.         return true;}
  333.  
  334.     public static void prepare(){
  335.         ReflectionUtils.getDoor(24190002).closeMe();
  336.         ReflectionUtils.getDoor(24190003).closeMe();
  337.  
  338.         cleanPlayers();
  339.         clearArena();
  340.  
  341.         executeTask("events.lastHero.LastHero", "ressurectPlayers", new Object[0], 1000);
  342.         executeTask("events.lastHero.LastHero", "healPlayers", new Object[0], 2000);
  343.         executeTask("events.lastHero.LastHero", "saveBackCoords", new Object[0], 3000);
  344.         executeTask("events.lastHero.LastHero", "paralyzePlayers", new Object[0], 4000);
  345.         executeTask("events.lastHero.LastHero", "teleportPlayersToColiseum", new Object[0], 5000);
  346.         executeTask("events.lastHero.LastHero", "go", new Object[0], EventsConfig.getInt("LastHero_Time_Paralyze") * 1000);
  347.  
  348.         sayToAll("scripts.events.LastHero.AnnounceFinalCountdown", null);}
  349.  
  350.     public static void go(){
  351.         _status = 2;
  352.         upParalyzePlayers();
  353.         checkLive();
  354.         clearArena();
  355.         sayToAll("scripts.events.LastHero.AnnounceFight", null);
  356.         _endTask = executeTask("events.lastHero.LastHero", "endBattle", new Object[0], EventsConfig.getInt("LastHero_Time_Batle") * 60000);}
  357.  
  358.     public static void endBattle(){
  359.         ReflectionUtils.getDoor(24190002).openMe();
  360.         ReflectionUtils.getDoor(24190003).openMe();
  361.  
  362.         _status = 0;
  363.         removeAura();
  364.         if(live_list.size() == 1)
  365.             for(Player player : getPlayers(live_list)){
  366.                 String[] repl = {player.getName()};
  367.                 sayToAll("scripts.events.LastHero.AnnounceWiner", repl);
  368.                 for(int i = 0; i < EventsConfig.getIntArray("LastHero_final_bonus_id").length; i++)
  369.                     addItem(player, EventsConfig.getIntArray("LastHero_final_bonus_id")[i], Math.round(EventsConfig.getBoolean("LastHero_rate_final") ? player.getLevel() * EventsConfig.getIntArray("LastHero_final_bonus_count")[i] : 1 * EventsConfig.getIntArray("LastHero_final_bonus_count")[i]));
  370.                 if(EventsConfig.getBoolean("LastHero_Allow_Hero_Aura")){
  371.                     player.setHero(true);
  372.                     Hero.addSkills(player);
  373.                     player.updatePledgeClass();
  374.                     player.sendPacket(new SkillList(player));
  375.                     player.broadcastUserInfo(true);}
  376.                 break;}
  377.         sayToAll("scripts.events.LastHero.AnnounceEnd", null);
  378.         executeTask("events.lastHero.LastHero", "end", new Object[0], 30000);
  379.         _isRegistrationActive = false;
  380.         if(_endTask != null){
  381.             _endTask.cancel(false);
  382.             _endTask = null;}}
  383.  
  384.     public static void end(){
  385.         executeTask("events.lastHero.LastHero", "ressurectPlayers", new Object[0], 1000);
  386.         executeTask("events.lastHero.LastHero", "healPlayers", new Object[0], 2000);
  387.         executeTask("events.lastHero.LastHero", "teleportPlayersToSavedCoords", new Object[0], 3000);
  388.         executeTask("events.lastHero.LastHero", "preLoad", new Object[0], 10000);}
  389.  
  390.     public static void saveBackCoords(){
  391.         for(Player player : getPlayers(players_list))
  392.             player.setVar("LastHero_backCoords", player.getX() + " " + player.getY() + " " + player.getZ() + " " + player.getReflectionId(), -1);}
  393.  
  394.     public static void teleportPlayersToColiseum(){
  395.         for(Player player : getPlayers(players_list)){
  396.             unRide(player);
  397.             unSummonPet(player, true);
  398.             player.teleToLocation(Location.findPointToStay(_enter, 150, 500, ReflectionManager.DEFAULT.getGeoIndex()), ReflectionManager.DEFAULT);}}
  399.  
  400.     public static void teleportPlayersToSavedCoords(){
  401.         for(Player player : getPlayers(players_list))
  402.             try{
  403.                 String var = player.getVar("LastHero_backCoords");
  404.                 if(var == null || var.equals(""))
  405.                     continue;
  406.                 String[] coords = var.split(" ");
  407.                 if(coords.length != 4)
  408.                     continue;
  409.                 player.teleToLocation(Integer.parseInt(coords[0]), Integer.parseInt(coords[1]), Integer.parseInt(coords[2]), Integer.parseInt(coords[3]));
  410.                 player.unsetVar("LastHero_backCoords");
  411.                 if(player.getVar("isPvPevents") != null)
  412.                     player.unsetVar("isPvPevents");}
  413.             catch(Exception e){e.printStackTrace();}}
  414.  
  415.     public static void paralyzePlayers(){
  416.         Skill revengeSkill = SkillTable.getInstance().getInfo(Skill.SKILL_RAID_CURSE, 1);
  417.         for(Player player : getPlayers(players_list)){
  418.             if(EventsConfig.getBoolean("LastHero_DisableEffect"))
  419.                 player.getEffectList().stopAllEffects();
  420.             player.getEffectList().stopEffect(Skill.SKILL_MYSTIC_IMMUNITY);
  421.             revengeSkill.getEffects(player, player, false, false);
  422.             if(player.getPet() != null){
  423.                 revengeSkill.getEffects(player, player.getPet(), false, false);
  424.                 if(EventsConfig.getBoolean("LastHero_DisablePetEffect"))
  425.                     player.getPet().getEffectList().stopAllEffects();}}}
  426.  
  427.     public static void upParalyzePlayers(){
  428.         for(Player player : getPlayers(players_list)){
  429.             player.getEffectList().stopEffect(Skill.SKILL_RAID_CURSE);
  430.             if(player.getPet() != null)
  431.                 player.getPet().getEffectList().stopEffect(Skill.SKILL_RAID_CURSE);
  432.  
  433.             player.leaveParty();}}
  434.  
  435.     public static void ressurectPlayers(){
  436.         for(Player player : getPlayers(players_list))
  437.             if(player.isDead()){
  438.                 player.restoreExp();
  439.                 player.setCurrentCp(player.getMaxCp());
  440.                 player.setCurrentHp(player.getMaxHp(), true);
  441.                 player.setCurrentMp(player.getMaxMp());
  442.                 player.broadcastPacket(new Revive(player));}}
  443.  
  444.     public static void healPlayers(){
  445.         for(Player player : getPlayers(players_list)){
  446.             player.setCurrentHpMp(player.getMaxHp(), player.getMaxMp());
  447.             player.setCurrentCp(player.getMaxCp());}}
  448.  
  449.     public static void cleanPlayers(){
  450.         for(Player player : getPlayers(players_list))
  451.             if(!checkPlayer(player, false))
  452.                 removePlayer(player);}
  453.  
  454.     public static void checkLive(){
  455.         List<Long> new_live_list = new CopyOnWriteArrayList<Long>();
  456.  
  457.         for(Long storeId : live_list){
  458.             Player player = GameObjectsStorage.getAsPlayer(storeId);
  459.             if(player != null)
  460.                 new_live_list.add(storeId);}
  461.  
  462.         live_list = new_live_list;
  463.  
  464.         for(Player player : getPlayers(live_list))
  465.             if(player.isInZone(_zone) && !player.isDead() && !player.isLogoutStarted())
  466.                 player.setTeam(TeamType.RED);
  467.             else if(player.isDead())
  468.             {
  469.                 player.restoreExp();
  470.                 player.setCurrentCp(player.getMaxCp());
  471.                 player.setCurrentHp(player.getMaxHp(), true);
  472.                 player.setCurrentMp(player.getMaxMp());
  473.                 player.broadcastPacket(new Revive(player));
  474.                 loosePlayer(player);
  475.             }
  476.             else
  477.                 loosePlayer(player);
  478.  
  479.         if(live_list.size() <= 1)
  480.             endBattle();}
  481.  
  482.     public static void removeAura(){
  483.         for(Player player : getPlayers(live_list))
  484.             player.setTeam(TeamType.NONE);}
  485.  
  486.     public static void clearArena(){
  487.         for(GameObject obj : _zone.getObjects())
  488.             if(obj != null){
  489.                 Player player = obj.getPlayer();
  490.                 if(player != null && !live_list.contains(player.getStoredId()))
  491.                     player.teleToLocation(147451, 46728, -3410);}}
  492.  
  493.     @Override
  494.     public void onDeath(Creature self, Creature killer){
  495.         if(_status > 1 && self.isPlayer() && self.getTeam() != TeamType.NONE && live_list.contains(self.getStoredId())){
  496.             Player player = (Player) self;
  497.             loosePlayer(player);
  498.             checkLive();
  499.             if(killer != null && killer.isPlayer() && killer.getPlayer().expertiseIndex - player.expertiseIndex > 2 && !killer.getPlayer().getIP().equals(player.getIP()))
  500.                 for(int i = 0; i < EventsConfig.getIntArray("LastHero_bonus_id").length; i++)
  501.                     addItem((Player) killer, EventsConfig.getIntArray("LastHero_bonus_id")[i], Math.round(EventsConfig.getBoolean("LastHero_rate") ? player.getLevel() * EventsConfig.getIntArray("LastHero_bonus_count")[i] : 1 * EventsConfig.getIntArray("LastHero_bonus_count")[i]));}}
  502.  
  503.     @Override
  504.     public void onTeleport(Player player, int x, int y, int z, Reflection reflection){
  505.         if(_zone.checkIfInZone(x, y, z, reflection))
  506.             return;
  507.  
  508.         if(_status > 1 && player.getTeam() != TeamType.NONE && live_list.contains(player.getStoredId())){
  509.             removePlayer(player);
  510.             checkLive();}}
  511.  
  512.     @Override
  513.     public void onPlayerExit(Player player){
  514.         if(player.getTeam() == TeamType.NONE)
  515.             return;
  516.  
  517.         // ????? ??? ??????? ?? ????? ???????????
  518.         if(_status == 0 && _isRegistrationActive && live_list.contains(player.getStoredId())){
  519.             removePlayer(player);
  520.             return;}
  521.  
  522.         // ????? ??? ??????? ?? ????? ????????????
  523.         if(_status == 1 && live_list.contains(player.getStoredId())){
  524.             removePlayer(player);
  525.  
  526.             try{
  527.                 String var = player.getVar("LastHero_backCoords");
  528.                 if(var == null || var.equals(""))
  529.                     return;
  530.                 String[] coords = var.split(" ");
  531.                 if(coords.length != 4)
  532.                     return;
  533.                 player.teleToLocation(Integer.parseInt(coords[0]), Integer.parseInt(coords[1]), Integer.parseInt(coords[2]), Integer.parseInt(coords[3]));
  534.                 player.unsetVar("LastHero_backCoords");}
  535.             catch(Exception e){e.printStackTrace();}
  536.  
  537.             return;}
  538.  
  539.         // ????? ??? ??????? ?? ????? ??????
  540.         if(_status > 1 && player.getTeam() != TeamType.NONE && live_list.contains(player.getStoredId())){
  541.             removePlayer(player);
  542.             checkLive();}}
  543.  
  544.     private static class ZoneListener implements OnZoneEnterLeaveListener{
  545.         @Override
  546.         public void onZoneEnter(Zone zone, Creature cha){
  547.             if(cha == null)
  548.                 return;
  549.             Player player = cha.getPlayer();
  550.             if(_status > 0 && player != null && !live_list.contains(player.getStoredId()))
  551.                 ThreadPoolManager.getInstance().schedule(new TeleportTask(cha, new Location(147451, 46728, -3410)), 3000);}
  552.  
  553.         @Override
  554.         public void onZoneLeave(Zone zone, Creature cha){
  555.             if(cha == null)
  556.                 return;
  557.             Player player = cha.getPlayer();
  558.             if(_status > 1 && player != null && player.getTeam() != TeamType.NONE && live_list.contains(player.getStoredId())){
  559.                 double angle = PositionUtils.convertHeadingToDegree(cha.getHeading()); // ???? ? ????????
  560.                 double radian = Math.toRadians(angle - 90); // ???? ? ????????
  561.                 int x = (int) (cha.getX() + 50 * Math.sin(radian));
  562.                 int y = (int) (cha.getY() - 50 * Math.cos(radian));
  563.                 int z = cha.getZ();
  564.                 ThreadPoolManager.getInstance().schedule(new TeleportTask(cha, new Location(x, y, z)), 3000);}}}
  565.  
  566.     private static class TeleportTask extends RunnableImpl{
  567.         Location loc;
  568.         Creature target;
  569.  
  570.         public TeleportTask(Creature target, Location loc){
  571.             this.target = target;
  572.             this.loc = loc;
  573.             target.block();}
  574.  
  575.         @Override
  576.         public void runImpl() throws Exception{
  577.             target.unblock();
  578.             target.teleToLocation(loc);}}
  579.  
  580.     private static void loosePlayer(Player player){
  581.         if(player != null){
  582.             live_list.remove(player.getStoredId());
  583.             player.setTeam(TeamType.NONE);
  584.             show(new CustomMessage("scripts.events.LastHero.YouLose", player), player);}}
  585.  
  586.     private static void removePlayer(Player player){
  587.         if(player != null)
  588.         {
  589.             live_list.remove(player.getStoredId());
  590.             players_list.remove(player.getStoredId());
  591.             player.setTeam(TeamType.NONE);
  592.             player.unsetVar("isPvPevents");
  593.         }
  594.     }
  595.  
  596.     private static List<Player> getPlayers(List<Long> list){
  597.         List<Player> result = new ArrayList<Player>(list.size());
  598.         for(Long storeId : list){
  599.             Player player = GameObjectsStorage.getAsPlayer(storeId);
  600.             if(player != null)
  601.                 result.add(player);}
  602.         return result;}
  603.  
  604.     public static void preLoad(){
  605.         int day;
  606.         if(EventsConfig.getBoolean("LastHero_Allow_Calendar_Day"))
  607.             day = 4;
  608.         else
  609.             day = 3;
  610.         for(int i = 0; i < EventsConfig.getIntArray("LastHero_Time_Start").length; i += day){
  611.             if(EventsConfig.getBoolean("LastHero_Allow_Calendar_Day")){
  612.                 _date.set(Calendar.DAY_OF_MONTH, EventsConfig.getIntArray("LastHero_Time_Start")[i]);
  613.                 _date.set(Calendar.HOUR_OF_DAY, EventsConfig.getIntArray("LastHero_Time_Start")[i + 1]);
  614.                 _date.set(Calendar.MINUTE, EventsConfig.getIntArray("LastHero_Time_Start")[i + 2]);}else{
  615.                 _date.set(Calendar.HOUR_OF_DAY, EventsConfig.getIntArray("LastHero_Time_Start")[i]);
  616.                 _date.set(Calendar.MINUTE, EventsConfig.getIntArray("LastHero_Time_Start")[i + 1]);}
  617.             if(_date.getTimeInMillis() > System.currentTimeMillis()){
  618.                 if(EventsConfig.getBoolean("LastHero_Allow_Calendar_Day"))
  619.                     _pre_category = EventsConfig.getIntArray("LastHero_Time_Start")[i + 3];
  620.                 else
  621.                     _pre_category = EventsConfig.getIntArray("LastHero_Time_Start")[i + 2];
  622.  
  623.                 _active = true;
  624.                 executeTask("events.lastHero.LastHero", "preStartTask", new Object[0], (int)getMillisToStart() - 20000);
  625.                 return;}}}
  626.  
  627.     private static long getMillisToStart(){
  628.         return _date.getTimeInMillis() > System.currentTimeMillis() ? _date.getTimeInMillis() - System.currentTimeMillis() : 10;}
  629.  
  630.     public void preStartTask(){
  631.         start(_pre_category);}
  632. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement