Advertisement
horato

Subclass event

May 17th, 2011
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.65 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.eventmodSubclass;
  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.datatables.DoorTable;
  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.L2DoorInstance;
  38. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  39. import com.l2jserver.gameserver.model.quest.Event;
  40. import com.l2jserver.gameserver.model.quest.Quest;
  41. import com.l2jserver.gameserver.model.quest.QuestState;
  42. import com.l2jserver.gameserver.network.serverpackets.ExCubeGameChangePoints;
  43. import com.l2jserver.gameserver.network.serverpackets.ExCubeGameEnd;
  44.  
  45.  
  46. public class eventmodSubclass extends Event
  47. {
  48.     // Is event active?
  49.     private static boolean _isActive = false;
  50.     // Start npc ID
  51.     private static final int _npc_id = 31212;
  52.     // Initialize players list
  53.     private List<L2PcInstance> _players;
  54.     // Npc
  55.     private L2Npc _npc;
  56.     // Event Task
  57.     ScheduledFuture<?> _eventTask = null;
  58.     // Teams; Team1 is red, Team2 is blue
  59.     List<L2PcInstance> _team1 = new FastList<L2PcInstance>();
  60.     List<L2PcInstance> _team2 = new FastList<L2PcInstance>();
  61.     // Teams score
  62.     private static int _team1_score = 0;
  63.     private static int _team2_score = 0;
  64.    
  65.    
  66.     public static void main(String[] args)
  67.     {
  68.         new eventmodSubclass(-1, "eventmodSubclass", "mods");
  69.     }
  70.    
  71.     public eventmodSubclass(int questId, String name, String descr)
  72.     {
  73.         super(questId, name, descr);
  74.        
  75.         addStartNpc(_npc_id);
  76.         addFirstTalkId(_npc_id);
  77.         addTalkId(_npc_id);
  78.        
  79.         // Initialize players list
  80.         _players = new FastList<L2PcInstance>();
  81.        
  82.     }
  83.    
  84.     @Override
  85.     public boolean eventStart()
  86.     {
  87.         // Don't start event if its active
  88.         if (_isActive)
  89.             return false;
  90.        
  91.         // Set active
  92.         _isActive = true;
  93.         // Spawn event manager
  94.         _npc = addSpawn(_npc_id,82798,148650,-3464,0,false,0);
  95.        
  96.         // Announce event start
  97.         Announcements.getInstance().announceToAll("Subclass event started");
  98.         Announcements.getInstance().announceToAll("Visit event manager in Giran castle town for register");
  99.        
  100.           _eventTask = ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
  101.           {
  102.             public void run()
  103.             {
  104.                 Announcements.getInstance().announceToAll("5 minutes left");
  105.                 try
  106.                 {
  107.                     Thread.sleep(60000); //1 min
  108.                     Announcements.getInstance().announceToAll("4 minutes left");
  109.                     //Thread.sleep(60000); //1 min
  110.                     Announcements.getInstance().announceToAll("3 minutes left");
  111.                     //Thread.sleep(60000); //1 min
  112.                     Announcements.getInstance().announceToAll("2 minutes left");
  113.                     //Thread.sleep(60000); //1 min
  114.                     Announcements.getInstance().announceToAll("1 minutes left");
  115.                     //Thread.sleep(60000); //1 min
  116.                     StartEvent();
  117.                 }
  118.                 catch (InterruptedException e)
  119.                 {
  120.                     Announcements.getInstance().announceToAll("Event error");
  121.                     eventStop();
  122.                 }
  123.             }
  124.           },1);
  125.        
  126.        
  127.        
  128.         return true;
  129.     }
  130.    
  131.     @Override
  132.     public boolean eventStop()
  133.     {
  134.         // Don't stop inactive event
  135.         if(!_isActive)
  136.             return false;
  137.        
  138.         // Set inactive
  139.         _isActive = false;
  140.         // Thread stop
  141.         if(!_eventTask.isDone())
  142.         _eventTask.cancel(true);
  143.        
  144.         // Announce winner, remove team marker, give reward and teleport back
  145.         for (L2PcInstance player : _players)
  146.         {
  147.             if(_team1_score > _team2_score)
  148.             {
  149.                 Announcements.getInstance().announceToAll("Red team won");
  150.                 player.sendPacket(new ExCubeGameEnd(true));
  151.                 if(_team1.contains(player))
  152.                 player.addItem("eventmodSubclass", 6673, 10, _npc, true);
  153.             }else if(_team1_score < _team2_score){
  154.                 Announcements.getInstance().announceToAll("Blue team won");
  155.                 player.sendPacket(new ExCubeGameEnd(false));
  156.                 if(_team2.contains(player))
  157.                 player.addItem("eventmodSubclass", 6673, 10, _npc, true);
  158.             }else if(_team1_score == _team2_score){
  159.                 Announcements.getInstance().announceToAll("Both teams had same score, no winner this time");
  160.             }
  161.             if(player.isDead())
  162.                 player.doRevive();
  163.            
  164.                 player.removeNotifyQuestOfDeath(player.getQuestState(getName()));
  165.                 player.setTeam(0);
  166.                 player.teleToLocation(83478, 148628, -3405);
  167.         }
  168.        
  169.         // Open doors in coliseum
  170.         openDoors(24190001);
  171.         openDoors(24190002);
  172.         openDoors(24190003);
  173.         openDoors(24190004);
  174.        
  175.         // Clear teams
  176.         _team1.clear();
  177.         _team2.clear();
  178.         // Clear player list
  179.         _players.clear();
  180.        
  181.         Announcements.getInstance().announceToAll("Subclass event finished");
  182.        
  183.         return true;
  184.     }
  185.    
  186.     @Override
  187.     public boolean eventBypass(L2PcInstance activeChar, String bypass)
  188.     {  
  189.         return false;
  190.     }
  191.    
  192.     @Override
  193.     public String onFirstTalk(L2Npc npc, L2PcInstance player)
  194.     {
  195.         QuestState st = player.getQuestState(getName());
  196.         if (st == null)
  197.         {
  198.             Quest q = QuestManager.getInstance().getQuest(getName());
  199.             st = q.newQuestState(player);
  200.         }
  201.         if (npc.getNpcId() == _npc_id)
  202.         {
  203.             return _npc_id+".htm";
  204.         }
  205.         return npc.getNpcId()+".htm";
  206.     }
  207.    
  208.     @Override
  209.     public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  210.     {      
  211.         // Registering
  212.         if (event.startsWith("signup"))
  213.         {   //level check
  214.             if(player.getLevel() == 40)
  215.             {   // Subclass check
  216.                 if(player.isSubClassActive())
  217.                 {
  218.                     if (_players.contains(player))
  219.                     {
  220.                         return _npc_id+"-onlist.htm";
  221.                     }
  222.                     _players.add(player);
  223.                     return _npc_id+"-signed.htm";
  224.                 }
  225.             }
  226.         }
  227.        
  228.         // Unregistering
  229.         if (event.startsWith("signdown"))
  230.         {
  231.             if (!_players.contains(player))
  232.             {
  233.                 return _npc_id+"-notreg.htm";
  234.             }
  235.             _players.remove(player);
  236.             return _npc_id+"-unsigned.htm";
  237.         }
  238.        
  239.         return "";
  240.     }
  241.    
  242.     private void StartEvent()
  243.     {
  244.        
  245.         // Check for empty reg list
  246.         if (_players.size() < 2)
  247.         {
  248.             Announcements.getInstance().announceToAll("Not enough players to start event");
  249.             eventStop();
  250.             return;
  251.         }
  252.  
  253.         Announcements.getInstance().announceToAll("Subclass event started");
  254.        
  255.         // Remove registration NPC
  256.         if(_npc != null)
  257.             _npc.deleteMe();
  258.        
  259.         // Close doors in coliseum
  260.         closeDoors(24190001);
  261.         closeDoors(24190002);
  262.         closeDoors(24190003);
  263.         closeDoors(24190004);
  264.        
  265.         // Make teams
  266.         for (L2PcInstance player : _players)
  267.         {
  268.             if (player != null)
  269.             {
  270.                 if(player.getLevel() == 40 && player.isSubClassActive())
  271.                 {
  272.                     player.addNotifyQuestOfDeath(player.getQuestState(getName()));
  273.                     if(_team1.size() > _team2.size())
  274.                     {
  275.                         player.setTeam(1);
  276.                         _team2.add(player);
  277.  
  278.                     }else{
  279.                         player.setTeam(2);
  280.                         _team1.add(player);
  281.                     }
  282.                 }else{
  283.                     player.sendMessage("You have been kicked from event because your level is not 40 or you dont have subclass active");
  284.                     _players.remove(player);
  285.                 }
  286.             }
  287.         }
  288.            
  289.        
  290.             // Teleport players, remove buffs, remove summons, ressurect and full heal
  291.         for (L2PcInstance player : _team1)
  292.             {
  293.                 player.stopAllEffectsExceptThoseThatLastThroughDeath();
  294.                 L2Summon summon = player.getPet();
  295.                 if (summon != null)
  296.                     summon.unSummon(player);
  297.                 if(player.isDead())
  298.                     player.doRevive();
  299.                 player.setCurrentCp(player.getMaxCp());
  300.                 player.setCurrentMp(player.getMaxMp());
  301.                 player.setCurrentHp(player.getMaxHp());
  302.                 player.teleToLocation(150437,47397,-3413);
  303.             }
  304.            
  305.         for (L2PcInstance player : _team2)
  306.             {
  307.                 player.stopAllEffectsExceptThoseThatLastThroughDeath();
  308.                 L2Summon summon = player.getPet();
  309.                 if (summon != null)
  310.                     summon.unSummon(player);
  311.                 if(player.isDead())
  312.                     player.doRevive();
  313.                 player.setCurrentCp(player.getMaxCp());
  314.                 player.setCurrentMp(player.getMaxMp());
  315.                 player.setCurrentHp(player.getMaxHp());
  316.                 player.teleToLocation(148513,46122,-3408);
  317.             }
  318.        
  319.         _eventTask = ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
  320.           {
  321.             public void run()
  322.             {
  323.                 eventStop();
  324.             }
  325.           },20*60*1000);
  326.  
  327.        
  328.     }
  329.  
  330. @Override
  331. public String onDeath(final L2Character killer, final L2Character victim, QuestState qs)
  332. {
  333.     if(_team1.contains(killer))
  334.     {
  335.         _team1_score++;
  336.         ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
  337.           {
  338.             public void run()
  339.             {
  340.                 victim.doRevive();
  341.                 victim.teleToLocation(148513,46122,-3408); 
  342.             }
  343.           },2*1000);
  344.        
  345.     }else if(_team2.contains(killer)){
  346.         _team2_score++;
  347.         ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
  348.           {
  349.             public void run()
  350.             {
  351.                 victim.doRevive();
  352.                 victim.teleToLocation(150437,47397,-3413);
  353.             }
  354.           },2*1000);
  355.        
  356.  
  357.     }else{
  358.         ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
  359.           {
  360.             public void run()
  361.             {
  362.                 victim.doRevive();
  363.                 if(_team1.contains(killer))
  364.                 {
  365.                     victim.teleToLocation(148513,46122,-3408);
  366.                 }else
  367.                 {
  368.                     victim.teleToLocation(150437,47397,-3413);
  369.                 }
  370.             }
  371.           },2*1000);   
  372.     }
  373.    
  374.     for (L2PcInstance player : _players)
  375.     {
  376.         player.sendPacket(new ExCubeGameChangePoints((int)_eventTask.getDelay(TimeUnit.SECONDS), _team2_score, _team1_score));
  377.     }
  378.     return super.onDeath(killer, victim, qs);
  379. }
  380.  
  381. private static void openDoors(int doorId)
  382. {
  383.         L2DoorInstance doorInstance = DoorTable.getInstance().getDoor(doorId);
  384.         if (doorInstance != null)
  385.         {
  386.             doorInstance.openMe();
  387.         }
  388. }
  389.  
  390. private static void closeDoors(int doorId)
  391. {
  392.         L2DoorInstance doorInstance = DoorTable.getInstance().getDoor(doorId);
  393.         if (doorInstance != null)
  394.         {
  395.             doorInstance.closeMe();
  396.         }
  397. }
  398. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement