Advertisement
horato

2v2 korean event

May 24th, 2011
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.97 KB | None | 0 0
  1. /**************************************************************************************************************
  2.  *                                                                                                            *
  3.  *                                      @author horato                                                *
  4.  *                                       Made for L2world.org                                                 *
  5.  *                                                                                                            *
  6.  **************************************************************************************************************/
  7. /*
  8.  * This program is free software: you can redistribute it and/or modify it under
  9.  * the terms of the GNU General Public License as published by the Free Software
  10.  * Foundation, either version 3 of the License, or (at your option) any later
  11.  * version.
  12.  *
  13.  * This program is distributed in the hope that it will be useful, but WITHOUT
  14.  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  15.  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  16.  * details.
  17.  *
  18.  * You should have received a copy of the GNU General Public License along with
  19.  * this program. If not, see <http://www.gnu.org/licenses/>.
  20.  */
  21. package mods.eventmodKorea;
  22.  
  23. import java.util.List;
  24. import java.util.Random;
  25. import java.util.concurrent.ScheduledFuture;
  26.  
  27. import javolution.util.FastList;
  28.  
  29. import com.l2jserver.Config;
  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.QuestManager;
  34. import com.l2jserver.gameserver.model.L2Party;
  35. import com.l2jserver.gameserver.model.actor.L2Character;
  36. import com.l2jserver.gameserver.model.actor.L2Npc;
  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.skills.AbnormalEffect;
  42.  
  43. public class eventmodKorea extends Event
  44. {
  45.     // Event state
  46.     //private static boolean _isActive = false;
  47.    
  48.     enum EventState
  49.     {
  50.         INACTIVE, ACTIVE, FIGHT, WAIT
  51.     }
  52.    
  53.     public static EventState _state = EventState.INACTIVE;
  54.     // Start npc ID
  55.     private static final int _npc_id = 900105;
  56.     // Initialize team list
  57.     private List<L2Party> _teams = new FastList<L2Party>();
  58.     // Event Task
  59.     ScheduledFuture<?> _eventTask = null;
  60.     // Npc
  61.     private L2Npc _npc;
  62.     // 2 Currently fighting party
  63.     private L2Party _team1;
  64.     private L2Party _team2;
  65.     // Random for chosing teams
  66.     Random rnd = new Random();
  67.     // Winners and losers from matches
  68.     private List<L2Party> _winners = new FastList<L2Party>();
  69.     private List<L2Party> _losers = new FastList<L2Party>();
  70.    
  71.     public static void main(String[] args)
  72.     {
  73.         new eventmodKorea(-1, "eventmodKorea", "mods");
  74.     }
  75.    
  76.     public eventmodKorea(int questId, String name, String descr)
  77.     {
  78.         super(questId, name, descr);
  79.        
  80.         addStartNpc(_npc_id);
  81.         addFirstTalkId(_npc_id);
  82.         addTalkId(_npc_id);
  83.     }
  84.    
  85.     @Override
  86.     public boolean eventStart()
  87.     {
  88.         // Don't start event if its active
  89.         if (_state == EventState.ACTIVE)
  90.             return false;
  91.         if (!Config.CUSTOM_NPC_TABLE)
  92.             return false;
  93.         // Set active
  94.         _state = EventState.ACTIVE;
  95.         //Clear player list, npc lists and score
  96.         _npc = null;
  97.         if (!_teams.isEmpty())
  98.             _teams.clear();
  99.        
  100.         // Spawn event manager
  101.         _npc = addSpawn(_npc_id, 82798, 148650, -3464, 0, false, 0);
  102.        
  103.         Announcements.getInstance().announceToAll("Korean 2v2 event started");
  104.        
  105.         _eventTask = ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
  106.         {
  107.             public void run()
  108.             {
  109.                 Announcements.getInstance().announceToAll("Korean 2v2 Event: 10 minutes left");
  110.                 try
  111.                 {
  112.                     Thread.sleep(/*5*/1 * 60 * 1000); //1 min
  113.                     /*Announcements.getInstance().announceToAll("Korean 2v2 Event: 5 minutes left");
  114.                     Thread.sleep(2 * 60 * 1000); //1 min
  115.                     Announcements.getInstance().announceToAll("Korean 2v2 Event: 3 minutes left");
  116.                     Thread.sleep(2 * 60 * 1000); //1 min
  117.                     Announcements.getInstance().announceToAll("Korean 2v2 Event: 1 minutes left");
  118.                     Thread.sleep(1 * 60 * 1000); //1 min*/
  119.                     StartEvent();
  120.                 }
  121.                 catch (InterruptedException e)
  122.                 {
  123.                     Announcements.getInstance().announceToAll("Event error");
  124.                     eventStop();
  125.                 }
  126.             }
  127.         }, 1);
  128.        
  129.         return true;
  130.     }
  131.    
  132.     @Override
  133.     public boolean eventStop()
  134.     {
  135.         // Don't stop inactive event
  136.         if (_state == EventState.INACTIVE)
  137.             return false;
  138.         // Thread stop
  139.         if (!_eventTask.isDone())
  140.             _eventTask.cancel(true);
  141.         // Set inactive
  142.         _state = EventState.INACTIVE;
  143.         //TODO: event end
  144.         for (L2Party party : _teams)
  145.         {
  146.             for (L2PcInstance player : party.getPartyMembers())
  147.             {
  148.                 player.removeNotifyQuestOfDeath(player.getQuestState(getName()));
  149.                 player.stopAbnormalEffect(AbnormalEffect.HOLD_2);
  150.                 player.setIsParalyzed(false);
  151.                 player.stopParalyze(false);
  152.                 player.teleToLocation(83478, 148628, -3405);
  153.                
  154.             }
  155.            
  156.         }
  157.        
  158.         // Remove NPC
  159.         if (_npc != null)
  160.             _npc.deleteMe();
  161.         // Clear teams
  162.         if (!_teams.isEmpty())
  163.             _teams.clear();
  164.        
  165.         Announcements.getInstance().announceToAll("Korean 2v2 event finished");
  166.        
  167.         return true;
  168.     }
  169.    
  170.     @Override
  171.     public boolean eventBypass(L2PcInstance activeChar, String bypass)
  172.     {
  173.         return false;
  174.     }
  175.    
  176.     @Override
  177.     public String onFirstTalk(L2Npc npc, L2PcInstance player)
  178.     {
  179.         QuestState st = player.getQuestState(getName());
  180.         if (st == null)
  181.         {
  182.             Quest q = QuestManager.getInstance().getQuest(getName());
  183.             st = q.newQuestState(player);
  184.         }
  185.         if (npc.getNpcId() == _npc_id)
  186.         {
  187.             for(L2Party _party : _teams)
  188.             {
  189.                 System.out.println(_party.getPartyMembers().get(0));
  190.                 System.out.println(_party.getPartyMembers().getFirst());
  191.                 System.out.println(_party.getLeader());
  192.             }
  193.             return "korean.htm";
  194.         }
  195.         return npc.getNpcId() + ".htm";
  196.     }
  197.    
  198.     @Override
  199.     public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  200.     {
  201.         // Registering
  202.         if (event.startsWith("signup"))
  203.         {
  204.             if (!player.isInParty())
  205.                 return "korean-fail.htm";
  206.             if (_teams.contains(player.getParty()))
  207.                 return "korean-onlist.htm";
  208.             if (player.getParty().getMemberCount() != 2)
  209.                 return "korean-fail.htm";
  210.             if (player.getParty().getLeader() != player)
  211.                 return "korean-notleader.htm";
  212.            
  213.             _teams.add(player.getParty());
  214.             return "korean-signed.htm";
  215.         }
  216.        
  217.         // Unregistering
  218.         if (event.startsWith("signdown"))
  219.         {
  220.             if (!_teams.contains(player.getParty()))
  221.                 return "korean-notreg.htm";
  222.             if (player.getParty().getLeader() != player)
  223.                 return "korean-notleader.htm";
  224.             if (player.getParty().getLeader() == player)
  225.             {
  226.                 _teams.remove(player.getParty());
  227.                 return "korean-unsigned.htm";
  228.             }
  229.         }
  230.        
  231.         return "";
  232.     }
  233.    
  234.     private void StartEvent()
  235.     {
  236.         // Remove registration NPC
  237.         if (_npc != null)
  238.             _npc.deleteMe();
  239.        
  240.         for (L2Party party : _teams)
  241.         {
  242.             if (party.getMemberCount() < 2)
  243.             {
  244.                 _teams.remove(party);
  245.             }
  246.         }
  247.         //TODO: start event
  248.         // Teleport players to wait location.
  249.         for (L2Party party : _teams)
  250.         {
  251.             for (L2PcInstance player : party.getPartyMembers())
  252.             {
  253.                 player.addNotifyQuestOfDeath(player.getQuestState(getName()));
  254.                 player.stopAllEffectsExceptThoseThatLastThroughDeath();
  255.                 player.setCurrentCp(player.getMaxCp());
  256.                 player.setCurrentMp(player.getMaxMp());
  257.                 player.setCurrentHp(player.getMaxHp());
  258.                 player.startAbnormalEffect(AbnormalEffect.HOLD_2);
  259.                 player.setIsParalyzed(true);
  260.                 player.startParalyze();
  261.                 player.teleToLocation(149375, 47544, -3413);
  262.             }
  263.         }
  264.        
  265.         // Chose 2 teams and start fight
  266.         while (_teams.size() > 1)
  267.         {
  268.             choseTeamsAndStartFight();
  269.         }
  270.        
  271.         if (_teams.size() == 1)
  272.         {
  273.             _winners.add(_teams.get(0));
  274.         }
  275.        
  276.         try
  277.         {
  278.             Thread.sleep(1 * 60 * 1000);
  279.         }
  280.         catch (InterruptedException e)
  281.         {
  282.             eventStop();
  283.         }
  284.        
  285.         eventStop();
  286.     }
  287.    
  288.     private void choseTeamsAndStartFight()
  289.     {
  290.        
  291.         while (_team1 == null || _team2 == null)
  292.         {
  293.             _team1 = _teams.get(rnd.nextInt(_teams.size()));
  294.             _team2 = _teams.get(rnd.nextInt(_teams.size()));
  295.             if (_team2 == _team1)
  296.                 _team2 = null;
  297.             if (_winners.contains(_team1) || _losers.contains(_team1))
  298.                 _team1 = null;
  299.             if (_winners.contains(_team2) || _losers.contains(_team2))
  300.                 _team2 = null;
  301.         }
  302.        
  303.         for (L2PcInstance player : _team1.getPartyMembers())
  304.         {
  305.             player.stopAllEffectsExceptThoseThatLastThroughDeath();
  306.             player.teleToLocation(148839 + rnd.nextInt(5), 46741 + rnd.nextInt(5), -3413);
  307.            
  308.         }
  309.         for (L2PcInstance player : _team2.getPartyMembers())
  310.         {
  311.             player.stopAllEffectsExceptThoseThatLastThroughDeath();
  312.             player.teleToLocation(149847 + rnd.nextInt(5), 46684 + rnd.nextInt(5), -3413);
  313.            
  314.         }
  315.         _team1.getPartyMembers().get(0).stopAbnormalEffect(AbnormalEffect.HOLD_2);
  316.         _team2.getPartyMembers().get(0).stopAbnormalEffect(AbnormalEffect.HOLD_2);
  317.    
  318.         _state = EventState.FIGHT;
  319.        
  320.         while (_state == EventState.FIGHT)
  321.         {
  322.            
  323.         }
  324.        
  325.     }
  326.    
  327.     @Override
  328.     public String onDeath(L2Character killer, L2Character victim, QuestState qs)
  329.     {
  330.         // Team 1 win
  331.         if (_team1.getPartyMembers().contains(killer))
  332.         {
  333.             for (final L2Character _char : _team2.getPartyMembers())
  334.             {
  335.                 if (!_char.isDead())
  336.                 {
  337.                     _team2.getPartyMembers().get(1).stopAbnormalEffect(AbnormalEffect.HOLD_2);
  338.                     return "";
  339.                 }
  340.             }
  341.            
  342.             ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
  343.             {
  344.                 public void run()
  345.                 {
  346.                     for (final L2Character _char : _team1.getPartyMembers())
  347.                     {
  348.                        
  349.                         if (_char.isDead())
  350.                             _char.doRevive();
  351.                        
  352.                         _char.startAbnormalEffect(AbnormalEffect.HOLD_2);
  353.                         _char.setIsParalyzed(true);
  354.                         _char.startParalyze();
  355.                         _char.teleToLocation(149375, 47544, -3413);
  356.                         SkillTable.getInstance().getInfo(1323, 1).getEffects(null, _char);
  357.                        
  358.                     }
  359.                     _teams.remove(_team2);
  360.                     _teams.remove(_team1);
  361.                     _losers.add(_team2);
  362.                     _winners.add(_team1);
  363.                 }
  364.             }, 2 * 1000);
  365.            
  366.         }
  367.        
  368.         // Team 2 win
  369.         if (_team2.getPartyMembers().contains(killer))
  370.         {
  371.             for (final L2Character _char : _team1.getPartyMembers())
  372.             {
  373.                 if (!_char.isDead())
  374.                 {
  375.                     _team1.getPartyMembers().get(1).stopAbnormalEffect(AbnormalEffect.HOLD_2);
  376.                     return "";
  377.                 }
  378.             }
  379.            
  380.             ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
  381.             {
  382.                 public void run()
  383.                 {
  384.                     for (final L2Character _char : _team2.getPartyMembers())
  385.                     {
  386.                        
  387.                         if (_char.isDead())
  388.                             _char.doRevive();
  389.                        
  390.                         _char.startAbnormalEffect(AbnormalEffect.HOLD_2);
  391.                         _char.setIsParalyzed(true);
  392.                         _char.startParalyze();
  393.                         _char.teleToLocation(149375, 47544, -3413);
  394.                         SkillTable.getInstance().getInfo(1323, 1).getEffects(null, _char);
  395.                        
  396.                     }
  397.                     _teams.remove(_team1);
  398.                     _teams.remove(_team2);
  399.                     _losers.add(_team1);
  400.                     _winners.add(_team2);
  401.                 }
  402.             }, 2 * 1000);
  403.            
  404.         }
  405.        
  406.        
  407.        
  408.        
  409.         _state = EventState.WAIT;
  410.         return super.onDeath(killer, victim, qs);
  411.     }
  412.    
  413. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement