Advertisement
Guest User

Untitled

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