Advertisement
horato

2v2 korean event

May 24th, 2011
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.36 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. package mods.eventmodKorea;
  16.  
  17. import java.util.List;
  18. import java.util.Random;
  19. import java.util.concurrent.ScheduledFuture;
  20.  
  21. import javolution.util.FastList;
  22.  
  23. import com.l2jserver.Config;
  24. import com.l2jserver.gameserver.Announcements;
  25. import com.l2jserver.gameserver.ThreadPoolManager;
  26. import com.l2jserver.gameserver.instancemanager.QuestManager;
  27. import com.l2jserver.gameserver.model.L2Party;
  28. import com.l2jserver.gameserver.model.actor.L2Character;
  29. import com.l2jserver.gameserver.model.actor.L2Npc;
  30. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  31. import com.l2jserver.gameserver.model.quest.Event;
  32. import com.l2jserver.gameserver.model.quest.Quest;
  33. import com.l2jserver.gameserver.model.quest.QuestState;
  34. import com.l2jserver.gameserver.skills.AbnormalEffect;
  35.  
  36. public class eventmodKorea extends Event
  37. {
  38.    
  39.     private static boolean _isActive = false;
  40.     // Start npc ID
  41.     private static final int _npc_id = 900105;
  42.     // Initialize team list
  43.     private List<L2Party> _teams = new FastList<L2Party>();
  44.     // Event Task
  45.     ScheduledFuture<?> _eventTask = null;
  46.     // Npc
  47.     private L2Npc _npc;
  48.     // 2 Currently fighting party
  49.     private L2Party _team1;
  50.     private L2Party _team2;
  51.     // Random for chosing teams
  52.     Random rnd = new Random();
  53.     // Winners and losers from matches
  54.     private List<L2Party> _winners = new FastList<L2Party>();
  55.     private List<L2Party> _losers = new FastList<L2Party>();
  56.    
  57.     public static void main(String[] args)
  58.     {
  59.         new eventmodKorea(-1, "eventmodKorea", "mods");
  60.     }
  61.    
  62.     public eventmodKorea(int questId, String name, String descr)
  63.     {
  64.         super(questId, name, descr);
  65.        
  66.         addStartNpc(_npc_id);
  67.         addFirstTalkId(_npc_id);
  68.         addTalkId(_npc_id);
  69.     }
  70.    
  71.     @Override
  72.     public boolean eventStart()
  73.     {
  74.         // Don't start event if its active
  75.         if (_isActive)
  76.             return false;
  77.         if (!Config.CUSTOM_NPC_TABLE)
  78.             return false;
  79.         // Set active
  80.         _isActive = true;
  81.         //Clear player list, npc lists and score
  82.         _npc = null;
  83.         if (!_teams.isEmpty())
  84.             _teams.clear();
  85.        
  86.         // Spawn event manager
  87.         _npc = addSpawn(_npc_id, 82798, 148650, -3464, 0, false, 0);
  88.        
  89.         Announcements.getInstance().announceToAll("Korean 2v2 event started");
  90.        
  91.         _eventTask = ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
  92.         {
  93.             public void run()
  94.             {
  95.                 Announcements.getInstance().announceToAll("Korean 2v2 Event: 10 minutes left");
  96.                 try
  97.                 {
  98.                     Thread.sleep(/*5*/1 * 60 * 1000); //1 min
  99.                     /*Announcements.getInstance().announceToAll("Korean 2v2 Event: 5 minutes left");
  100.                     Thread.sleep(2 * 60 * 1000); //1 min
  101.                     Announcements.getInstance().announceToAll("Korean 2v2 Event: 3 minutes left");
  102.                     Thread.sleep(2 * 60 * 1000); //1 min
  103.                     Announcements.getInstance().announceToAll("Korean 2v2 Event: 1 minutes left");
  104.                     Thread.sleep(1 * 60 * 1000); //1 min*/
  105.                     StartEvent();
  106.                 }
  107.                 catch (InterruptedException e)
  108.                 {
  109.                     Announcements.getInstance().announceToAll("Event error");
  110.                     eventStop();
  111.                 }
  112.             }
  113.         }, 1);
  114.        
  115.         return true;
  116.     }
  117.    
  118.     @Override
  119.     public boolean eventStop()
  120.     {
  121.         // Don't stop inactive event
  122.         if (!_isActive)
  123.             return false;
  124.         // Thread stop
  125.         if (!_eventTask.isDone())
  126.             _eventTask.cancel(true);
  127.         // Set inactive
  128.         _isActive = false;
  129.         //TODO: event end
  130.         for (L2Party party : _teams)
  131.         {
  132.             for (L2PcInstance player : party.getPartyMembers())
  133.             {
  134.                 player.removeNotifyQuestOfDeath(player.getQuestState(getName()));
  135.                 player.stopAbnormalEffect(AbnormalEffect.HOLD_1);
  136.                 player.setIsParalyzed(false);
  137.                 player.stopParalyze(false);
  138.                 player.teleToLocation(83478, 148628, -3405);
  139.                
  140.             }
  141.            
  142.         }
  143.        
  144.         // Remove NPC
  145.         if (_npc != null)
  146.             _npc.deleteMe();
  147.         // Clear teams
  148.         if (!_teams.isEmpty())
  149.             _teams.clear();
  150.        
  151.         Announcements.getInstance().announceToAll("Korean 2v2 event finished");
  152.        
  153.         return true;
  154.     }
  155.    
  156.     @Override
  157.     public boolean eventBypass(L2PcInstance activeChar, String bypass)
  158.     {
  159.         return false;
  160.     }
  161.    
  162.     @Override
  163.     public String onFirstTalk(L2Npc npc, L2PcInstance player)
  164.     {
  165.         QuestState st = player.getQuestState(getName());
  166.         if (st == null)
  167.         {
  168.             Quest q = QuestManager.getInstance().getQuest(getName());
  169.             st = q.newQuestState(player);
  170.         }
  171.         if (npc.getNpcId() == _npc_id)
  172.         {
  173.             System.out.println(_teams);
  174.             return "korean.htm";
  175.         }
  176.         return npc.getNpcId() + ".htm";
  177.     }
  178.    
  179.     @Override
  180.     public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  181.     {
  182.         // Registering
  183.         if (event.startsWith("signup"))
  184.         {
  185.             if (!player.isInParty())
  186.                 return "korean-fail.htm";
  187.             if (_teams.contains(player.getParty()))
  188.                 return "korean-onlist.htm";
  189.             if (player.getParty().getMemberCount() != 2)
  190.                 return "korean-fail.htm";
  191.             if (player.getParty().getLeader() != player)
  192.                 return "korean-notleader.htm";
  193.            
  194.             _teams.add(player.getParty());
  195.             return "korean-signed.htm";
  196.         }
  197.        
  198.         // Unregistering
  199.         if (event.startsWith("signdown"))
  200.         {
  201.             if (!_teams.contains(player.getParty()))
  202.                 return "korean-notreg.htm";
  203.             if (player.getParty().getLeader() != player)
  204.                 return "korean-notleader.htm";
  205.             if (player.getParty().getLeader() == player)
  206.             {
  207.                 _teams.remove(player.getParty());
  208.                 return "korean-unsigned.htm";
  209.             }
  210.         }
  211.        
  212.         return "";
  213.     }
  214.    
  215.     private void StartEvent()
  216.     {
  217.         // Remove registration NPC
  218.         if (_npc != null)
  219.             _npc.deleteMe();
  220.        
  221.         for (L2Party party : _teams)
  222.         {
  223.             if (party.getMemberCount() < 2)
  224.             {
  225.                 _teams.remove(party);
  226.             }
  227.         }
  228.         //TODO: start event
  229.         // Teleport players to wait location.
  230.         for (L2Party party : _teams)
  231.         {
  232.             for (L2PcInstance player : party.getPartyMembers())
  233.             {
  234.                 player.addNotifyQuestOfDeath(player.getQuestState(getName()));
  235.                 player.startAbnormalEffect(AbnormalEffect.HOLD_1);
  236.                 player.setIsParalyzed(true);
  237.                 player.startParalyze();
  238.                 player.teleToLocation(149375, 47544, -3413);
  239.             }
  240.         }
  241.        
  242.         // Chose 2 teams and start fight
  243.         while (_teams.size() > 1)
  244.             choseTeamsAndStartFight();
  245.         if(_teams.size() == 1)
  246.         {
  247.         _winners.add(_teams.get(_teams.size()));
  248.         }
  249.         try
  250.         {
  251.             Thread.sleep(1 * 60 * 1000);
  252.         }
  253.         catch (InterruptedException e)
  254.         {
  255.             eventStop();
  256.         }
  257.        
  258.         eventStop();
  259.     }
  260.    
  261.     private void choseTeamsAndStartFight()
  262.     {
  263.         while (_team1 == null || _team2 == null)
  264.         {
  265.             _team1 = _teams.get(rnd.nextInt(_teams.size()));
  266.             _team2 = _teams.get(rnd.nextInt(_teams.size()));
  267.             if (_team2 == _team1)
  268.                 _team2 = null;
  269.             if (_winners.contains(_team1) || _losers.contains(_team1))
  270.                 _team1 = null;
  271.             if (_winners.contains(_team2) || _losers.contains(_team2))
  272.                 _team2 = null;
  273.         }
  274.        
  275.     }
  276.    
  277.     @Override
  278.     public String onDeath(L2Character killer, L2Character victim, QuestState qs)
  279.     {
  280.        
  281.         return super.onDeath(killer, victim, qs);
  282.     }
  283.    
  284. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement