Advertisement
Guest User

Untitled

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