Advertisement
horato

Subclass event

May 17th, 2011
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 11.51 KB | None | 0 0
  1. /*
  2.  * This program is free software: you can redistribute it and/or modify it under
  3.  * the terms of the GNU General Public License as published by the Free Software
  4.  * Foundation, either version 3 of the License, or (at your option) any later
  5.  * version.
  6.  *
  7.  * This program is distributed in the hope that it will be useful, but WITHOUT
  8.  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  9.  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  10.  * details.
  11.  *
  12.  * You should have received a copy of the GNU General Public License along with
  13.  * this program. If not, see <http://www.gnu.org/licenses/>.
  14.  */
  15.  
  16. package mods.eventmodSubclassTvT;
  17.  
  18. /**************************************************************************************************************
  19.  *                                                                                                            *
  20.  *                                      @author horato, Nik                                                   *
  21.  *                                       Made for L2world.org                                                 *
  22.  *                                                                                                            *
  23.  **************************************************************************************************************/
  24. import java.util.List;
  25. import java.util.concurrent.ScheduledFuture;
  26. import java.util.concurrent.TimeUnit;
  27.  
  28. import javolution.util.FastList;
  29.  
  30. import com.l2jserver.gameserver.Announcements;
  31. import com.l2jserver.gameserver.ThreadPoolManager;
  32. import com.l2jserver.gameserver.instancemanager.InstanceManager;
  33. import com.l2jserver.gameserver.instancemanager.QuestManager;
  34. import com.l2jserver.gameserver.model.actor.L2Character;
  35. import com.l2jserver.gameserver.model.actor.L2Npc;
  36. import com.l2jserver.gameserver.model.actor.L2Summon;
  37. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  38. import com.l2jserver.gameserver.model.quest.Event;
  39. import com.l2jserver.gameserver.model.quest.Quest;
  40. import com.l2jserver.gameserver.model.quest.QuestState;
  41. import com.l2jserver.gameserver.network.serverpackets.ExCubeGameChangePoints;
  42. import com.l2jserver.gameserver.network.serverpackets.ExCubeGameEnd;
  43.  
  44. public class eventmodSubclassTvT extends Event
  45. {
  46.     // Is event active?
  47.     private static boolean _isActive = false;
  48.     // Start npc ID
  49.     private static final int _npc_id = 31212;
  50.     // Initialize players list
  51.     private List<L2PcInstance> _players;
  52.     // Npc
  53.     private L2Npc _npc;
  54.     // Event Task
  55.     ScheduledFuture<?> _eventTask = null;
  56.     // Teams; Team1 is red, Team2 is blue
  57.     List<L2PcInstance> _team1 = new FastList<L2PcInstance>();
  58.     List<L2PcInstance> _team2 = new FastList<L2PcInstance>();
  59.     // Teams score
  60.     private static int _team1_score = 0;
  61.     private static int _team2_score = 0;
  62.     // Instance ID
  63.     int _instance_id = 0;
  64.    
  65.     public static void main(String[] args)
  66.     {
  67.         new eventmodSubclassTvT(-1, "eventmodSubclassTvT", "mods");
  68.     }
  69.    
  70.     public eventmodSubclassTvT(int questId, String name, String descr)
  71.     {
  72.         super(questId, name, descr);
  73.        
  74.         addStartNpc(_npc_id);
  75.         addFirstTalkId(_npc_id);
  76.         addTalkId(_npc_id);
  77.        
  78.         // Initialize players list
  79.         _players = new FastList<L2PcInstance>();
  80.        
  81.     }
  82.    
  83.     @Override
  84.     public boolean eventStart()
  85.     {
  86.         // Don't start event if its active
  87.         if (_isActive)
  88.             return false;
  89.         //Clear player list, npc lists and score
  90.         _team1_score = 0;
  91.         _team2_score = 0;
  92.         _npc = null;
  93.         _team1.clear();
  94.         _team2.clear();
  95.         _players.clear();
  96.        
  97.         // Create instance for event
  98.         try
  99.         {
  100.             _instance_id = InstanceManager.getInstance().createDynamicInstance("subclass.xml");
  101.         }
  102.         catch (Exception e)
  103.         {
  104.             Announcements.getInstance().announceToAll("Event error");
  105.             eventStop();
  106.             e.printStackTrace();
  107.         }
  108.        
  109.         // Set active
  110.         _isActive = true;
  111.         // Spawn event manager
  112.         _npc = addSpawn(_npc_id, 82798, 148650, -3464, 0, false, 0);
  113.        
  114.         // Announce event start
  115.         Announcements.getInstance().announceToAll("Subclass TvT event started");
  116.         Announcements.getInstance().announceToAll("Visit event manager in Giran castle town for register");
  117.        
  118.         _eventTask = ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
  119.         {
  120.             public void run()
  121.             {
  122.                 Announcements.getInstance().announceToAll("10 minutes left");
  123.                 try
  124.                 {
  125.                     Thread.sleep(60000); //1 min
  126.                     Announcements.getInstance().announceToAll("9 minutes left");
  127.                     Thread.sleep(60000); //1 min
  128.                     Announcements.getInstance().announceToAll("8 minutes left");
  129.                     Thread.sleep(60000); //1 min
  130.                     Announcements.getInstance().announceToAll("7 minutes left");
  131.                     Thread.sleep(60000); //1 min
  132.                     Announcements.getInstance().announceToAll("6 minutes left");
  133.                     Thread.sleep(60000); //1 min
  134.                     Announcements.getInstance().announceToAll("5 minutes left");
  135.                     Thread.sleep(60000); //1 min
  136.                     Announcements.getInstance().announceToAll("4 minutes left");
  137.                     Thread.sleep(60000); //1 min
  138.                     Announcements.getInstance().announceToAll("3 minutes left");
  139.                     Thread.sleep(60000); //1 min
  140.                     Announcements.getInstance().announceToAll("2 minutes left");
  141.                     Thread.sleep(60000); //1 min
  142.                     Announcements.getInstance().announceToAll("1 minutes left");
  143.                     Thread.sleep(60000); //1 min
  144.                     StartEvent();
  145.                 }
  146.                 catch (InterruptedException e)
  147.                 {
  148.                     Announcements.getInstance().announceToAll("Event error");
  149.                     eventStop();
  150.                 }
  151.             }
  152.         }, 1);
  153.        
  154.         return true;
  155.     }
  156.    
  157.     @Override
  158.     public boolean eventStop()
  159.     {
  160.         // Don't stop inactive event
  161.         if (!_isActive)
  162.             return false;
  163.        
  164.         // Set inactive
  165.         _isActive = false;
  166.         // Thread stop
  167.         if (!_eventTask.isDone())
  168.             _eventTask.cancel(true);
  169.         // Remove instance
  170.         InstanceManager.getInstance().destroyInstance(_instance_id);
  171.         // Remove NPC
  172.         if (_npc != null)
  173.             _npc.deleteMe();
  174.        
  175.         // Announce winning team
  176.         if (_team1_score > _team2_score)
  177.         {
  178.             Announcements.getInstance().announceToAll("Red team won");
  179.         }
  180.         else if (_team1_score < _team2_score)
  181.         {
  182.             Announcements.getInstance().announceToAll("Blue team won");
  183.         }
  184.         else if (_team1_score == _team2_score)
  185.         {
  186.             Announcements.getInstance().announceToAll("No winner this time");
  187.         }
  188.        
  189.         // Remove team marker, give reward and teleport back
  190.         for (L2PcInstance player : _players)
  191.         {
  192.             if (_team1_score > _team2_score)
  193.             {
  194.                 player.sendPacket(new ExCubeGameEnd(true));
  195.                 if (_team1.contains(player))
  196.                     player.addItem("eventmodSubclassTvT", 6673, 10, _npc, true);
  197.             }
  198.             else if (_team1_score < _team2_score)
  199.             {
  200.                 player.sendPacket(new ExCubeGameEnd(false));
  201.                 if (_team2.contains(player))
  202.                     player.addItem("eventmodSubclassTvT", 6673, 10, _npc, true);
  203.             }
  204.             if (player.isDead())
  205.                 player.doRevive();
  206.             player.removeNotifyQuestOfDeath(player.getQuestState(getName()));
  207.             player.setTeam(0);
  208.             player.setInstanceId(0);
  209.             player.teleToLocation(83478, 148628, -3405);
  210.         }
  211.        
  212.         // Clear teams
  213.         _team1.clear();
  214.         _team2.clear();
  215.         // Clear player list
  216.         _players.clear();
  217.        
  218.         Announcements.getInstance().announceToAll("Subclass TvT event finished");
  219.        
  220.         return true;
  221.     }
  222.    
  223.     @Override
  224.     public boolean eventBypass(L2PcInstance activeChar, String bypass)
  225.     {
  226.         return false;
  227.     }
  228.    
  229.     @Override
  230.     public String onFirstTalk(L2Npc npc, L2PcInstance player)
  231.     {
  232.         QuestState st = player.getQuestState(getName());
  233.         if (st == null)
  234.         {
  235.             Quest q = QuestManager.getInstance().getQuest(getName());
  236.             st = q.newQuestState(player);
  237.         }
  238.         if (npc.getNpcId() == _npc_id)
  239.         {
  240.             return _npc_id + ".htm";
  241.         }
  242.         return npc.getNpcId() + ".htm";
  243.     }
  244.    
  245.     @Override
  246.     public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  247.     {
  248.         // Registering
  249.         if (event.startsWith("signup"))
  250.         { //level check
  251.             if (player.getLevel() == 40)
  252.             { // Subclass check
  253.                 if (player.isSubClassActive())
  254.                 {
  255.                     if (_players.contains(player))
  256.                     {
  257.                         return _npc_id + "-onlist.htm";
  258.                     }
  259.                     _players.add(player);
  260.                     return _npc_id + "-signed.htm";
  261.                 }
  262.                 else
  263.                 {
  264.                     return _npc_id + "-fail.htm";
  265.                 }
  266.             }
  267.             else
  268.             {
  269.                 return _npc_id + "-fail.htm";
  270.             }
  271.            
  272.         }
  273.        
  274.         // Unregistering
  275.         if (event.startsWith("signdown"))
  276.         {
  277.             if (!_players.contains(player))
  278.             {
  279.                 return _npc_id + "-notreg.htm";
  280.             }
  281.             _players.remove(player);
  282.             return _npc_id + "-unsigned.htm";
  283.         }
  284.        
  285.         return "";
  286.     }
  287.    
  288.     private void StartEvent()
  289.     {
  290.        
  291.         // Check for empty reg list
  292.         if (_players.size() < 2)
  293.         {
  294.             Announcements.getInstance().announceToAll("Not enough players to start event");
  295.             eventStop();
  296.             return;
  297.         }
  298.        
  299.         Announcements.getInstance().announceToAll("Subclass TvT event started");
  300.        
  301.         // Remove registration NPC
  302.         if (_npc != null)
  303.             _npc.deleteMe();
  304.        
  305.         // Make teams
  306.         for (L2PcInstance player : _players)
  307.         {
  308.             if (player != null)
  309.             {
  310.                 if (player.getLevel() == 40 && player.isSubClassActive())
  311.                 {
  312.                     player.addNotifyQuestOfDeath(player.getQuestState(getName()));
  313.                     if (_team1.size() > _team2.size())
  314.                     {
  315.                         player.setTeam(1);
  316.                         _team2.add(player);
  317.                        
  318.                     }
  319.                     else
  320.                     {
  321.                         player.setTeam(2);
  322.                         _team1.add(player);
  323.                     }
  324.                 }
  325.                 else
  326.                 {
  327.                     player.sendMessage("You have been kicked from event because your level is not 40 or you dont have subclass active");
  328.                     _players.remove(player);
  329.                 }
  330.             }
  331.         }
  332.        
  333.         // Teleport players, remove buffs, remove summons, ressurect and full heal
  334.         for (L2PcInstance player : _team1)
  335.         {
  336.             player.stopAllEffectsExceptThoseThatLastThroughDeath();
  337.             L2Summon summon = player.getPet();
  338.             if (summon != null)
  339.                 summon.unSummon(player);
  340.             if (player.isDead())
  341.                 player.doRevive();
  342.             player.setCurrentCp(player.getMaxCp());
  343.             player.setCurrentMp(player.getMaxMp());
  344.             player.setCurrentHp(player.getMaxHp());
  345.             player.setInstanceId(_instance_id);
  346.             player.teleToLocation(150437, 47397, -3413);
  347.         }
  348.        
  349.         for (L2PcInstance player : _team2)
  350.         {
  351.             player.stopAllEffectsExceptThoseThatLastThroughDeath();
  352.             L2Summon summon = player.getPet();
  353.             if (summon != null)
  354.                 summon.unSummon(player);
  355.             if (player.isDead())
  356.                 player.doRevive();
  357.             player.setCurrentCp(player.getMaxCp());
  358.             player.setCurrentMp(player.getMaxMp());
  359.             player.setCurrentHp(player.getMaxHp());
  360.             player.setInstanceId(_instance_id);
  361.             player.teleToLocation(148513, 46122, -3408);
  362.         }
  363.        
  364.         _eventTask = ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
  365.         {
  366.             public void run()
  367.             {
  368.                 eventStop();
  369.             }
  370.         }, 20 * 60 * 1000);
  371.        
  372.     }
  373.    
  374.     @Override
  375.     public String onDeath(final L2Character killer, final L2Character victim, QuestState qs)
  376.     {
  377.         if (_team1.contains(killer))
  378.         {
  379.             _team1_score++;
  380.             ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
  381.             {
  382.                 public void run()
  383.                 {
  384.                     victim.doRevive();
  385.                     victim.teleToLocation(148513, 46122, -3408);
  386.                 }
  387.             }, 2 * 1000);
  388.            
  389.         }
  390.         else if (_team2.contains(killer))
  391.         {
  392.             _team2_score++;
  393.             ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
  394.             {
  395.                 public void run()
  396.                 {
  397.                     victim.doRevive();
  398.                     victim.teleToLocation(150437, 47397, -3413);
  399.                 }
  400.             }, 2 * 1000);
  401.            
  402.         }
  403.         else
  404.         {
  405.             ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
  406.             {
  407.                 public void run()
  408.                 {
  409.                     victim.doRevive();
  410.                     if (_team1.contains(killer))
  411.                     {
  412.                         victim.teleToLocation(148513, 46122, -3408);
  413.                     }
  414.                     else
  415.                     {
  416.                         victim.teleToLocation(150437, 47397, -3413);
  417.                     }
  418.                 }
  419.             }, 2 * 1000);
  420.         }
  421.        
  422.         for (L2PcInstance player : _players)
  423.         {
  424.             player.sendPacket(new ExCubeGameChangePoints((int) _eventTask.getDelay(TimeUnit.SECONDS), _team2_score, _team1_score));
  425.         }
  426.         return super.onDeath(killer, victim, qs);
  427.     }
  428. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement