Advertisement
Guest User

Untitled

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