Advertisement
Guest User

Untitled

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