Advertisement
Guest User

Untitled

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