Advertisement
horato

Subclass event

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