Guest User

Untitled

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