Advertisement
Guest User

Untitled

a guest
Jul 27th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package net.sf.odinms.tools;
  2.  
  3. import java.rmi.RemoteException;
  4. import java.util.ArrayList;
  5. import java.util.LinkedList;
  6. import java.util.Random;
  7. import net.sf.odinms.client.IItem;
  8. import net.sf.odinms.client.MapleCharacter;
  9. import net.sf.odinms.net.channel.ChannelServer;
  10. import net.sf.odinms.net.channel.handler.ChangeChannelHandler;
  11. import net.sf.odinms.net.world.remote.WorldChannelInterface;
  12. import net.sf.odinms.server.MapleInventoryManipulator;
  13. import net.sf.odinms.server.MapleItemInformationProvider;
  14. import net.sf.odinms.server.MaplePortal;
  15. import net.sf.odinms.server.TimerManager;
  16. import net.sf.odinms.server.maps.MapleMap;
  17.  
  18. /**
  19.  *
  20.  * @author Hugo
  21.  */
  22. public class ChaseyEvent {
  23.  
  24.     private LinkedList<MapleCharacter> players = new LinkedList<MapleCharacter>();
  25.     private static final int[] itemids = {1, 2, 3};
  26.     //   private final static ArrayList<MapleMap> maps = new ArrayList<MapleMap>();
  27.     private boolean on = false;
  28.     private boolean open = false;
  29.     private ChannelServer c = ChannelServer.getInstance(1);
  30.     private WorldChannelInterface wci = c.getWorldInterface();
  31.  
  32.     public ChaseyEvent() {
  33.         schedule();
  34.     }
  35.  
  36.     private void schedule() {
  37.         on = false;
  38.         TimerManager.getInstance().schedule(new Runnable() {
  39.  
  40.             @Override
  41.             public void run() {
  42.                 open();
  43.             }
  44.         }, 2 * 60 * 60 * 1000);
  45.     }
  46.  
  47.     private void rest() {
  48.         TimerManager.getInstance().schedule(new Runnable() {
  49.  
  50.             @Override
  51.             public void run() {
  52.                 start();
  53.             }
  54.         }, 1 * 60 * 1000);
  55.     }
  56.  
  57.     private void time() {
  58.         TimerManager.getInstance().schedule(new Runnable() {
  59.  
  60.             @Override
  61.             public void run() {
  62.                 endShort();
  63.             }
  64.         }, 20 * 60 * 1000);
  65.  
  66.  
  67.     }
  68.  
  69.     private void start() {
  70.         on = true;
  71.         open = false;
  72.         if (players.size() < 4) {
  73.             try {
  74.                 wci.broadcastMessage(null, MaplePacketCreator.serverNotice(5, "[Chasey Event] The event was cancelled. Not enough players joined. Better luck next time.").getBytes());
  75.             } catch (RemoteException ex) {
  76.                 c.reconnectWorld();
  77.             }
  78.             end();
  79.         } else {
  80.             try {
  81.                 wci.broadcastMessage(null, MaplePacketCreator.serverNotice(5, "[Chasey Event] The event has started! You will no longer be allowed to join").getBytes());
  82.             } catch (RemoteException ex) {
  83.                 c.reconnectWorld();
  84.             }
  85.             time();
  86.         }
  87.     }
  88.  
  89.     private void open() {
  90.         on = true;
  91.         open = true;
  92.         try {
  93.             wci.broadcastMessage(null, MaplePacketCreator.serverNotice(5, "[Chasey Event] The event is going to start in one minute! Use @chasey to get in!").getBytes());
  94.         } catch (RemoteException ex) {
  95.             c.reconnectWorld();
  96.         }
  97.         rest();
  98.     }
  99.  
  100.     public boolean addPlayer(String name) {
  101.         if (on && open) {
  102.             MapleCharacter player = c.getPlayerStorage().getCharacterByName(name);
  103.             boolean xChannel = false;
  104.             if (player == null) {
  105.                 try {
  106.                     int channel = wci.find(name);
  107.                     if (channel > -1) {
  108.                         ChannelServer pserv = ChannelServer.getInstance(channel);
  109.                         final MapleCharacter world_victim = pserv.getPlayerStorage().getCharacterByName(name);
  110.                         if (world_victim != null) {
  111.                             world_victim.dropMessage("[Chasey Event] You are being warped cross channels. This might take a few seconds");
  112.                             ChangeChannelHandler.changeChannel(1, world_victim.getClient());
  113.                         }
  114.                         xChannel = true;
  115.                     } else {
  116.                         return false;
  117.                     }
  118.                 } catch (RemoteException e) {
  119.                     c.reconnectWorld();
  120.                 }
  121.             }
  122.             if (xChannel) {
  123.                 final MapleCharacter victim = c.getPlayerStorage().getCharacterByName(name);
  124.                 TimerManager.getInstance().schedule(new Runnable() {
  125.  
  126.                     public void run() {
  127.                         warpIn(victim);
  128.  
  129.                     }
  130.                 }, 1 * 1000);
  131.             } else {
  132.                 warpIn(player);
  133.             }
  134.             return true;
  135.         } else {
  136.             return false;
  137.         }
  138.     }
  139.  
  140.     public boolean hasChaser() {
  141.         boolean b = false;
  142.         for (MapleCharacter player : players) {
  143.             if (player == null) {
  144.                 players.remove(player);
  145.             } else {
  146.                 if (player.isChaser()) {
  147.                     b = true;
  148.                 }
  149.             }
  150.         }
  151.         if (b) {
  152.             return false;
  153.         } else {
  154.             assignChaser();
  155.             return true;
  156.         }
  157.     }
  158.  
  159.     private void warpIn(MapleCharacter player) {
  160.         MapleMap target = c.getMapFactory().getMap(109050001);
  161.         Random rand = new Random();
  162.         MaplePortal portal = target.getPortal(rand.nextInt(target.getPortals().size()));
  163.         player.changeMap(target, portal);
  164.         players.add(player);
  165.         sendMessage(player.getName() + " has joined the chasey event");
  166.     }
  167.  
  168.     public void removePlayer(MapleCharacter player) {
  169.         players.remove(player);
  170.         player.changeMap(109050001);
  171.         sendMessage(player.getName() + " has left the chasey event");
  172.     }
  173.  
  174.     private void assignChaser() {
  175.         Random rand = new Random();
  176.         MapleCharacter chaser = players.get(rand.nextInt(players.size()));
  177.         if (chaser == null) {
  178.             assignChaser();
  179.             return;
  180.         } else {
  181.             chaser.setChaser();
  182.             sendMessage(chaser.getName() + " has just been randomly assigned as the first chaser");
  183.         }
  184.     }
  185.  
  186.     private void givePrize(MapleCharacter player) {
  187.         MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
  188.         Random rand = new Random();
  189.         int itemid = itemids[rand.nextInt(itemids.length)];
  190.         IItem item = ii.getEquipById(itemid);
  191.         MapleInventoryManipulator.addFromDrop(player.getClient(), item, true);
  192.         end();
  193.     }
  194.  
  195.     public void setChaser(MapleCharacter player, MapleCharacter victim) {
  196.         int count = 0;
  197.         if (player == null) {
  198.             players.remove(player);
  199.         } else if (victim == null) {
  200.             players.remove(victim);
  201.         } else {
  202.             for (MapleCharacter chars : players) {
  203.                 if (!chars.isChaser()) {
  204.                     count++;
  205.                 }
  206.             }
  207.             if (!victim.isChaser()) {
  208.                 victim.setChaser();
  209.                 sendMessage(player.getName() + " has just caught " + victim.getName());
  210.             }
  211.             if (count < 2) {
  212.                 for (MapleCharacter chars : players) {
  213.                     if (!chars.isChaser()) {
  214.                         givePrize(player);
  215.                     }
  216.                 }
  217.             }
  218.         }
  219.     }
  220.  
  221.     public boolean isChaser(MapleCharacter player) {
  222.         if (player == null) {
  223.             players.remove(player);
  224.             return false;
  225.         } else {
  226.             return player.isChaser();
  227.         }
  228.     }
  229.  
  230.     public boolean isOn() {
  231.         return on == true;
  232.     }
  233.  
  234.     public boolean isOpen() {
  235.         return open == true;
  236.     }
  237.  
  238.     private void sendMessage(String txt) {
  239.         for (MapleCharacter player : players) {
  240.             if (player == null) {
  241.                 players.remove(player);
  242.             } else {
  243.                 player.dropMessage("[Chasey Event] " + txt);
  244.             }
  245.         }
  246.     }
  247.  
  248.     private void endShort() {
  249.         ArrayList<MapleCharacter> winners = new ArrayList<MapleCharacter>();
  250.         for (MapleCharacter chars : players) {
  251.             if (!chars.isChaser()) {
  252.                 winners.add(chars);
  253.             }
  254.         }
  255.         Random rand = new Random();
  256.         MapleCharacter winner = winners.get(rand.nextInt(winners.size()));
  257.         MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
  258.         int itemid = itemids[rand.nextInt(itemids.length)];
  259.         IItem item = ii.getEquipById(itemid);
  260.         MapleInventoryManipulator.addFromDrop(winner.getClient(), item, true);
  261.         try {
  262.             wci.broadcastMessage(null, MaplePacketCreator.serverNotice(5, "[Chasey Event] Time is over. " + winner.getName() + " was randomly selected as the winner!").getBytes());
  263.         } catch (RemoteException ex) {
  264.             c.reconnectWorld();
  265.         }
  266.         end();
  267.     }
  268.  
  269.     public void end() {
  270.         sendMessage("Event is over. You will be warped out shortly.");
  271.         TimerManager.getInstance().schedule(new Runnable() {
  272.  
  273.             @Override
  274.             public void run() {
  275.                 for (MapleCharacter player : players) {
  276.                     player.unSetChaser();
  277.                     if (player != null) {
  278.                         player.changeMap(109050001);
  279.                     }
  280.                 }
  281.                 players.clear();
  282.                 on = false;
  283.                 open = false;
  284.                 schedule();
  285.             }
  286.         }, 30 * 1000);
  287.  
  288.     }
  289. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement