Advertisement
horato

Subclass event

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