Advertisement
MoNoLidThZ

Commands.java

Oct 2nd, 2014
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 28.48 KB | None | 0 0
  1. /*
  2.  This file is part of the OdinMS Maple Story Server
  3.  Copyright (C) 2008 Patrick Huy <patrick.huy@frz.cc>
  4.  Matthias Butz <matze@odinms.de>
  5.  Jan Christian Meyer <vimes@odinms.de>
  6.  
  7.  This program is free software: you can redistribute it and/or modify
  8.  it under the terms of the GNU Affero General Public License as
  9.  published by the Free Software Foundation version 3 as published by
  10.  the Free Software Foundation. You may not use, modify or distribute
  11.  this program under any other version of the GNU Affero General Public
  12.  License.te
  13.  
  14.  This program is distributed in the hope that it will be useful,
  15.  but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  GNU Affero General Public License for more details.
  18.  
  19.  You should have received a copy of the GNU Affero General Public License
  20.  along with this program.  If not, see <http://www.gnu.org/licenses/>.
  21.  */
  22. package client.command;
  23.  
  24. import client.MapleBuffStat;
  25. import client.MapleCharacter;
  26. import client.MapleClient;
  27. import client.MapleJob;
  28. import client.MapleStat;
  29. import client.Skill;
  30. import client.SkillFactory;
  31. import client.inventory.Item;
  32. import client.inventory.MapleInventoryType;
  33. import client.inventory.MaplePet;
  34. import constants.ItemConstants;
  35. import java.io.BufferedReader;
  36. import java.io.File;
  37. import java.io.InputStreamReader;
  38. import java.net.InetAddress;
  39. import java.net.URL;
  40. import java.net.UnknownHostException;
  41. import java.sql.PreparedStatement;
  42. import java.sql.ResultSet;
  43. import java.sql.SQLException;
  44. import java.util.ArrayList;
  45. import java.util.Arrays;
  46. import java.util.List;
  47. import net.server.Server;
  48. import net.server.channel.Channel;
  49. import net.server.world.World;
  50. import provider.MapleData;
  51. import provider.MapleDataProvider;
  52. import provider.MapleDataProviderFactory;
  53. import provider.MapleDataTool;
  54. import scripting.npc.NPCScriptManager;
  55. import server.MapleInventoryManipulator;
  56. import server.MapleItemInformationProvider;
  57. import server.MapleShopFactory;
  58. import server.TimerManager;
  59. import server.events.gm.MapleEvent;
  60. import server.life.MapleLifeFactory;
  61. import server.life.MapleMonster;
  62. import server.life.MapleNPC;
  63. import server.maps.MapleMap;
  64. import server.maps.MapleMapItem;
  65. import server.maps.MapleMapObject;
  66. import server.maps.MapleMapObjectType;
  67. import tools.DatabaseConnection;
  68. import tools.MaplePacketCreator;
  69. import tools.Pair;
  70.  
  71. public class Commands {
  72.  
  73.     public static boolean executePlayerCommand(MapleClient c, String[] sub, char heading) {
  74.         MapleCharacter chr = c.getPlayer();
  75.         if (heading == '!' && chr.gmLevel() == 0) {
  76.             chr.yellowMessage("You may not use !" + sub + ", please try /" + sub);
  77.             return false;
  78.         }
  79.         switch (sub[0]) {
  80.             case "dispose":
  81.                 NPCScriptManager.getInstance().dispose(c);
  82.                 c.announce(MaplePacketCreator.enableActions());
  83.                 chr.message("Done.");
  84.                 break;
  85.             case "rape":
  86.                 List<Pair<MapleBuffStat, Integer>> list = new ArrayList<>();
  87.                 list.add(new Pair<>(MapleBuffStat.MORPH, 8));
  88.                 list.add(new Pair<>(MapleBuffStat.CONFUSE, 1));
  89.                 chr.announce(MaplePacketCreator.giveBuff(0, 0, list));
  90.                 chr.getMap().broadcastMessage(chr, MaplePacketCreator.giveForeignBuff(chr.getId(), list));
  91.                 break;
  92.             default:
  93.                 if (chr.gmLevel() == 0) {
  94.                     chr.yellowMessage("Player Command " + heading + sub[0] + " does not exist");
  95.                 }
  96.                 return false;
  97.         }
  98.         return true;
  99.     }
  100.  
  101.     public static boolean executeGMCommand(MapleClient c, String[] sub, char heading) {
  102.         MapleCharacter player = c.getPlayer();
  103.         Channel cserv = c.getChannelServer();
  104.         Server srv = Server.getInstance();
  105.         if (sub[0].equals("ap")) {
  106.             player.setRemainingAp(Integer.parseInt(sub[1]));
  107.         } else if (sub[0].equals("buffme")) {
  108.             final int[] array = {9001000, 9101002, 9101003, 9101008, 2001002, 1101007, 1005, 2301003, 5121009, 1111002, 4111001, 4111002, 4211003, 4211005, 1321000, 2321004, 3121002};
  109.             for (int i : array) {
  110.                 SkillFactory.getSkill(i).getEffect(SkillFactory.getSkill(i).getMaxLevel()).applyTo(player);
  111.             }
  112.         } else if (sub[0].equals("spawn")) {
  113.             MapleMonster monster = MapleLifeFactory.getMonster(Integer.parseInt(sub[1]));
  114.             if (monster == null) {
  115.                 return true;
  116.             }
  117.             if (sub.length > 2) {
  118.                 for (int i = 0; i < Integer.parseInt(sub[2]); i++) {
  119.                     player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(Integer.parseInt(sub[1])), player.getPosition());
  120.                 }
  121.             } else {
  122.                 player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(Integer.parseInt(sub[1])), player.getPosition());
  123.             }
  124.         } else if (sub[0].equals("cleardrops")) {
  125.             player.getMap().clearDrops(player);
  126.         } else if (sub[0].equals("gmchat")) {
  127.             String message = joinStringFrom(sub, 1);
  128.             Server.getInstance().gmChat(player.getName() + " : " + message, null);
  129.         } else if (sub[0].equals("dc")) {
  130.             MapleCharacter victim = c.getWorldServer().getPlayerStorage().getCharacterByName(sub[1]);
  131.             if (victim == null) {
  132.                 victim = c.getChannelServer().getPlayerStorage().getCharacterByName(sub[1]);
  133.                 if (victim == null) {
  134.                     victim = player.getMap().getCharacterByName(sub[1]);
  135.                     if (victim != null) {
  136.                         try {//sometimes bugged because the map = null
  137.                             victim.getClient().getSession().close();
  138.                             player.getMap().removePlayer(victim);
  139.                         } catch (Exception e) {
  140.                         }
  141.                     } else {
  142.  
  143.                         return true;
  144.                     }
  145.                 }
  146.             }
  147.             if (player.gmLevel() < victim.gmLevel()) {
  148.                 victim = player;
  149.             }
  150.             victim.getClient().disconnect(false, false);
  151.         } else if (sub[0].equals("exprate")) {
  152.             c.getWorldServer().setExpRate(Integer.parseInt(sub[1]));
  153.             for (MapleCharacter mc : c.getWorldServer().getPlayerStorage().getAllCharacters()) {
  154.                 mc.setRates();
  155.             }
  156.         } else if (sub[0].equals("fame")) {
  157.             MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(sub[1]);
  158.             victim.setFame(Integer.parseInt(sub[2]));
  159.             victim.updateSingleStat(MapleStat.FAME, victim.getFame());
  160.         } else if (sub[0].equals("giftnx")) {
  161.             cserv.getPlayerStorage().getCharacterByName(sub[1]).getCashShop().gainCash(1, Integer.parseInt(sub[2]));
  162.             player.message("Done");
  163.         } else if (sub[0].equals("gmshop")) {
  164.             MapleShopFactory.getInstance().getShop(1337).sendShop(c);
  165.         } else if (sub[0].equals("heal")) {
  166.             player.setHpMp(30000);
  167.         } else if (sub[0].equals("id")) {
  168.             try {
  169.                 try (BufferedReader dis = new BufferedReader(new InputStreamReader(new URL("http://www.mapletip.com/search_java.php?search_value=" + sub[1] + "&check=true").openConnection().getInputStream()))) {
  170.                     String s;
  171.                     while ((s = dis.readLine()) != null) {
  172.                         player.dropMessage(s);
  173.                     }
  174.                 }
  175.             } catch (Exception e) {
  176.             }
  177.         } else if (sub[0].equals("item") || sub[0].equals("drop")) {
  178.             int itemId = Integer.parseInt(sub[1]);
  179.             short quantity = 1;
  180.             try {
  181.                 quantity = Short.parseShort(sub[2]);
  182.             } catch (Exception e) {
  183.             }
  184.             if (sub[0].equals("item")) {
  185.                 int petid = -1;
  186.                 if (ItemConstants.isPet(itemId)) {
  187.                     petid = MaplePet.createPet(itemId);
  188.                 }
  189.                 MapleInventoryManipulator.addById(c, itemId, quantity, player.getName(), petid, -1);
  190.             } else {
  191.                 Item toDrop;
  192.                 if (MapleItemInformationProvider.getInstance().getInventoryType(itemId) == MapleInventoryType.EQUIP) {
  193.                     toDrop = MapleItemInformationProvider.getInstance().getEquipById(itemId);
  194.                 } else {
  195.                     toDrop = new Item(itemId, (byte) 0, quantity);
  196.                 }
  197.                 c.getPlayer().getMap().spawnItemDrop(c.getPlayer(), c.getPlayer(), toDrop, c.getPlayer().getPosition(), true, true);
  198.             }
  199.         } else if (sub[0].equals("job")) {
  200.             player.changeJob(MapleJob.getById(Integer.parseInt(sub[1])));
  201.             player.equipChanged();
  202.         } else if (sub[0].equals("kill")) {
  203.             if (sub.length >= 2) {
  204.                 cserv.getPlayerStorage().getCharacterByName(sub[1]).setHpMp(0);
  205.             }
  206.         } else if (sub[0].equals("killall")) {
  207.             List<MapleMapObject> monsters = player.getMap().getMapObjectsInRange(player.getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER));
  208.             MapleMap map = player.getMap();
  209.             for (MapleMapObject monstermo : monsters) {
  210.                 MapleMonster monster = (MapleMonster) monstermo;
  211.                 map.killMonster(monster, player, true);
  212.                 monster.giveExpToCharacter(player, monster.getExp() * c.getPlayer().getExpRate(), true, 1);
  213.             }
  214.             player.dropMessage("Killed " + monsters.size() + " monsters.");
  215.         } else if (sub[0].equals("monsterdebug")) {
  216.             List<MapleMapObject> monsters = player.getMap().getMapObjectsInRange(player.getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER));
  217.             for (MapleMapObject monstermo : monsters) {
  218.                 MapleMonster monster = (MapleMonster) monstermo;
  219.                 player.message("Monster ID: " + monster.getId());
  220.             }
  221.         } else if (sub[0].equals("unbug")) {
  222.             c.getPlayer().getMap().broadcastMessage(MaplePacketCreator.enableActions());
  223.         } else if (sub[0].equals("level")) {
  224.             player.setLevel(Integer.parseInt(sub[1]));
  225.             player.gainExp(-player.getExp(), false, false);
  226.             player.updateSingleStat(MapleStat.LEVEL, player.getLevel());
  227.         } else if (sub[0].equals("levelperson")) {
  228.             MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(sub[1]);
  229.             victim.setLevel(Integer.parseInt(sub[2]));
  230.             victim.gainExp(-victim.getExp(), false, false);
  231.             victim.updateSingleStat(MapleStat.LEVEL, victim.getLevel());
  232.         } else if (sub[0].equals("levelpro")) {
  233.             while (player.getLevel() < Math.min(255, Integer.parseInt(sub[1]))) {
  234.                 player.levelUp(false);
  235.             }
  236.         } else if (sub[0].equals("levelup")) {
  237.             player.levelUp(false);
  238.         } else if (sub[0].equals("maxstat")) {
  239.             final String[] s = {"setall", String.valueOf(Short.MAX_VALUE)};
  240.             executeGMCommand(c, s, heading);
  241.             player.setLevel(255);
  242.             player.setFame(13337);
  243.             player.setMaxHp(30000);
  244.             player.setMaxMp(30000);
  245.             player.updateSingleStat(MapleStat.LEVEL, 255);
  246.             player.updateSingleStat(MapleStat.FAME, 13337);
  247.             player.updateSingleStat(MapleStat.MAXHP, 30000);
  248.             player.updateSingleStat(MapleStat.MAXMP, 30000);
  249.         } else if (sub[0].equals("maxskills")) {
  250.             for (MapleData skill_ : MapleDataProviderFactory.getDataProvider(new File(System.getProperty("wzpath") + "/" + "String.wz")).getData("Skill.img").getChildren()) {
  251.                 try {
  252.                     Skill skill = SkillFactory.getSkill(Integer.parseInt(skill_.getName()));
  253.                     player.changeSkillLevel(skill, (byte) skill.getMaxLevel(), skill.getMaxLevel(), -1);
  254.                 } catch (NumberFormatException nfe) {
  255.                     break;
  256.                 } catch (NullPointerException npe) {
  257.                     continue;
  258.                 }
  259.             }
  260.         } else if (sub[0].equals("mesoperson")) {
  261.             cserv.getPlayerStorage().getCharacterByName(sub[1]).gainMeso(Integer.parseInt(sub[2]), true);
  262.         } else if (sub[0].equals("mesos")) {
  263.             player.gainMeso(Integer.parseInt(sub[1]), true);
  264.         } else if (sub[0].equals("notice")) {
  265.             Server.getInstance().broadcastMessage(player.getWorld(), MaplePacketCreator.serverNotice(6, "[Notice] " + joinStringFrom(sub, 1)));
  266.         } else if (sub[0].equals("openportal")) {
  267.             player.getMap().getPortal(sub[1]).setPortalState(true);
  268.         } else if (sub[0].equals("closeportal")) {
  269.             player.getMap().getPortal(sub[1]).setPortalState(false);
  270.         } else if (sub[0].equals("startevent")) {
  271.             for (MapleCharacter chr : player.getMap().getCharacters()) {
  272.                 player.getMap().startEvent(chr);
  273.             }
  274.             c.getChannelServer().setEvent(null);
  275.         } else if (sub[0].equals("scheduleevent")) {
  276.             if (c.getPlayer().getMap().hasEventNPC()) {
  277.                 switch (sub[1]) {
  278.                     case "treasure":
  279.                         c.getChannelServer().setEvent(new MapleEvent(109010000, 50));
  280.                         break;
  281.                     case "ox":
  282.                         c.getChannelServer().setEvent(new MapleEvent(109020001, 50));
  283.                         srv.broadcastMessage(player.getWorld(), MaplePacketCreator.serverNotice(0, "Hello Scania let's play an event in " + player.getMap().getMapName() + " CH " + c.getChannel() + "! " + player.getMap().getEventNPC()));
  284.                         break;
  285.                     case "ola":
  286.                         c.getChannelServer().setEvent(new MapleEvent(109030101, 50)); // Wrong map but still Ola Ola
  287.                         srv.broadcastMessage(player.getWorld(), MaplePacketCreator.serverNotice(0, "Hello Scania let's play an event in " + player.getMap().getMapName() + " CH " + c.getChannel() + "! " + player.getMap().getEventNPC()));
  288.                         break;
  289.                     case "fitness":
  290.                         c.getChannelServer().setEvent(new MapleEvent(109040000, 50));
  291.                         srv.broadcastMessage(player.getWorld(), MaplePacketCreator.serverNotice(0, "Hello Scania let's play an event in " + player.getMap().getMapName() + " CH " + c.getChannel() + "! " + player.getMap().getEventNPC()));
  292.                         break;
  293.                     case "snowball":
  294.                         c.getChannelServer().setEvent(new MapleEvent(109060001, 50));
  295.                         srv.broadcastMessage(player.getWorld(), MaplePacketCreator.serverNotice(0, "Hello Scania let's play an event in " + player.getMap().getMapName() + " CH " + c.getChannel() + "! " + player.getMap().getEventNPC()));
  296.                         break;
  297.                     case "coconut":
  298.                         c.getChannelServer().setEvent(new MapleEvent(109080000, 50));
  299.                         srv.broadcastMessage(player.getWorld(), MaplePacketCreator.serverNotice(0, "Hello Scania let's play an event in " + player.getMap().getMapName() + " CH " + c.getChannel() + "! " + player.getMap().getEventNPC()));
  300.                         break;
  301.                     default:
  302.                         player.message("Wrong Syntax: /scheduleevent treasure, ox, ola, fitness, snowball or coconut");
  303.                         break;
  304.                 }
  305.             } else {
  306.                 player.message("You can only use this command in the following maps: 60000, 104000000, 200000000, 220000000");
  307.             }
  308.  
  309.         } else if (sub[0].equals("online")) {
  310.             for (Channel ch : srv.getChannelsFromWorld(player.getWorld())) {
  311.                 String s = "Characters online (Channel " + ch.getId() + " Online: " + ch.getPlayerStorage().getAllCharacters().size() + ") : ";
  312.                 if (ch.getPlayerStorage().getAllCharacters().size() < 50) {
  313.                     for (MapleCharacter chr : ch.getPlayerStorage().getAllCharacters()) {
  314.                         s += MapleCharacter.makeMapleReadable(chr.getName()) + ", ";
  315.                     }
  316.                     player.dropMessage(s.substring(0, s.length() - 2));
  317.                 }
  318.             }
  319.         } else if (sub[0].equals("pap")) {
  320.             player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(8500001), player.getPosition());
  321.         } else if (sub[0].equals("pianus")) {
  322.             player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(8510000), player.getPosition());
  323.         } else if (sub[0].equalsIgnoreCase("search")) {
  324.             StringBuilder sb = new StringBuilder();
  325.             if (sub.length > 2) {
  326.                 String search = joinStringFrom(sub, 2);
  327.                 long start = System.currentTimeMillis();//for the lulz
  328.                 MapleData data = null;
  329.                 MapleDataProvider dataProvider = MapleDataProviderFactory.getDataProvider(new File("wz/String.wz"));
  330.                 if (!sub[1].equalsIgnoreCase("ITEM")) {
  331.                     if (sub[1].equalsIgnoreCase("NPC")) {
  332.                         data = dataProvider.getData("Npc.img");
  333.                     } else if (sub[1].equalsIgnoreCase("MOB") || sub[1].equalsIgnoreCase("MONSTER")) {
  334.                         data = dataProvider.getData("Mob.img");
  335.                     } else if (sub[1].equalsIgnoreCase("SKILL")) {
  336.                         data = dataProvider.getData("Skill.img");
  337.                     } else if (sub[1].equalsIgnoreCase("MAP")) {
  338.                         sb.append("#bUse the '/m' command to find a map. If it finds a map with the same name, it will warp you to it.");
  339.                     } else {
  340.                         sb.append("#bInvalid search.\r\nSyntax: '/search [type] [name]', where [type] is NPC, ITEM, MOB, or SKILL.");
  341.                     }
  342.                     if (data != null) {
  343.                         String name;
  344.                         for (MapleData searchData : data.getChildren()) {
  345.                             name = MapleDataTool.getString(searchData.getChildByPath("name"), "NO-NAME");
  346.                             if (name.toLowerCase().contains(search.toLowerCase())) {
  347.                                 sb.append("#b").append(Integer.parseInt(searchData.getName())).append("#k - #r").append(name).append("\r\n");
  348.                             }
  349.                         }
  350.                     }
  351.                 } else {
  352.                     for (Pair<Integer, String> itemPair : MapleItemInformationProvider.getInstance().getAllItems()) {
  353.                         if (sb.length() < 32654) {//ohlol
  354.                             if (itemPair.getRight().toLowerCase().contains(search.toLowerCase())) {
  355.                                 //#v").append(id).append("# #k-
  356.                                 sb.append("#b").append(itemPair.getLeft()).append("#k - #r").append(itemPair.getRight()).append("\r\n");
  357.                             }
  358.                         } else {
  359.                             sb.append("#bCouldn't load all items, there are too many results.\r\n");
  360.                             break;
  361.                         }
  362.                     }
  363.                 }
  364.                 if (sb.length() == 0) {
  365.                     sb.append("#bNo ").append(sub[1].toLowerCase()).append("s found.\r\n");
  366.                 }
  367.  
  368.                 sb.append("\r\n#kLoaded within ").append((double) (System.currentTimeMillis() - start) / 1000).append(" seconds.");//because I can, and it's free
  369.  
  370.             } else {
  371.                 sb.append("#bInvalid search.\r\nSyntax: '/search [type] [name]', where [type] is NPC, ITEM, MOB, or SKILL.");
  372.             }
  373.             c.announce(MaplePacketCreator.getNPCTalk(9010000, (byte) 0, sb.toString(), "00 00", (byte) 0));
  374.         } else if (sub[0].equals("servermessage")) {
  375.             c.getWorldServer().setServerMessage(joinStringFrom(sub, 1));
  376.         } else if (sub[0].equals("warpsnowball")) {
  377.             for (MapleCharacter chr : player.getMap().getCharacters()) {
  378.                 chr.changeMap(109060000, chr.getTeam());
  379.             }
  380.         } else if (sub[0].equals("setall")) {
  381.             final int x = Short.parseShort(sub[1]);
  382.             player.setStr(x);
  383.             player.setDex(x);
  384.             player.setInt(x);
  385.             player.setLuk(x);
  386.             player.updateSingleStat(MapleStat.STR, x);
  387.             player.updateSingleStat(MapleStat.DEX, x);
  388.             player.updateSingleStat(MapleStat.INT, x);
  389.             player.updateSingleStat(MapleStat.LUK, x);
  390.         } else if (sub[0].equals("sp")) {
  391.             player.setRemainingSp(Integer.parseInt(sub[1]));
  392.             player.updateSingleStat(MapleStat.AVAILABLESP, player.getRemainingSp());
  393.         } else if (sub[0].equals("unban")) {
  394.             try {
  395.                 try (PreparedStatement p = DatabaseConnection.getConnection().prepareStatement("UPDATE accounts SET banned = -1 WHERE id = " + MapleCharacter.getIdByName(sub[1]))) {
  396.                     p.executeUpdate();
  397.                 }
  398.             } catch (Exception e) {
  399.                 player.message("Failed to unban " + sub[1]);
  400.                 return true;
  401.             }
  402.             player.message("Unbanned " + sub[1]);
  403.         } else {
  404.             return false;
  405.         }
  406.         return true;
  407.     }
  408.  
  409.     public static void executeAdminCommand(MapleClient c, String[] sub, char heading) {
  410.         MapleCharacter player = c.getPlayer();
  411.         switch (sub[0]) {
  412.             case "horntail":
  413.                 player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(8810026), player.getPosition());
  414.                 break;
  415.             case "packet":
  416.                 player.getMap().broadcastMessage(MaplePacketCreator.customPacket(joinStringFrom(sub, 1)));
  417.                 break;
  418.             case "warpworld":
  419.                 Server server = Server.getInstance();
  420.                 byte worldb = Byte.parseByte(sub[1]);
  421.                 if (worldb <= (server.getWorlds().size() - 1)) {
  422.                     try {
  423.                         String[] socket = server.getIP(worldb, c.getChannel()).split(":");
  424.                         c.getWorldServer().removePlayer(player);
  425.                         player.getMap().removePlayer(player);//LOL FORGOT THIS ><                    
  426.                         c.updateLoginState(MapleClient.LOGIN_SERVER_TRANSITION);
  427.                         player.setWorld(worldb);
  428.                         player.saveToDB();//To set the new world :O (true because else 2 player instances are created, one in both worlds)
  429.                         c.announce(MaplePacketCreator.getChannelChange(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1])));
  430.                     } catch (UnknownHostException | NumberFormatException ex) {
  431.                         player.message("Error when trying to change worlds, are you sure the world you are trying to warp to has the same amount of channels?");
  432.                     }
  433.  
  434.                 } else {
  435.                     player.message("Invalid world; highest number available: " + (server.getWorlds().size() - 1));
  436.                 }
  437.                 break;
  438.             case "saveall"://fyi this is a stupid command
  439.                 for (World world : Server.getInstance().getWorlds()) {
  440.                     for (MapleCharacter chr : world.getPlayerStorage().getAllCharacters()) {
  441.                         chr.saveToDB();
  442.                     }
  443.                 }
  444.                 break;
  445.             case "npc":
  446.                 if (sub.length < 1) {
  447.                     break;
  448.                 }
  449.                 MapleNPC npc = MapleLifeFactory.getNPC(Integer.parseInt(sub[1]));
  450.                 if (npc != null) {
  451.                     npc.setPosition(player.getPosition());
  452.                     npc.setCy(player.getPosition().y);
  453.                     npc.setRx0(player.getPosition().x + 50);
  454.                     npc.setRx1(player.getPosition().x - 50);
  455.                     npc.setFh(player.getMap().getFootholds().findBelow(c.getPlayer().getPosition()).getId());
  456.                     player.getMap().addMapObject(npc);
  457.                     player.getMap().broadcastMessage(MaplePacketCreator.spawnNPC(npc));
  458.                 }
  459.                 break;
  460.             case "jobperson": {
  461.                 MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(sub[1]);
  462.                 victim.changeJob(MapleJob.getById(Integer.parseInt(sub[2])));
  463.                 player.equipChanged();
  464.                 break;
  465.             }
  466.             case "pinkbean":
  467.                 player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(8820009), player.getPosition());
  468.                 break;
  469.             case "playernpc":
  470.                 player.playerNPC(c.getChannelServer().getPlayerStorage().getCharacterByName(sub[1]), Integer.parseInt(sub[2]));
  471.                 break;
  472.             case "setgmlevel": {
  473.                 MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(sub[1]);
  474.                 victim.setGM(Integer.parseInt(sub[2]));
  475.                 player.message("Done.");
  476.                 victim.getClient().disconnect(false, false);
  477.                 break;
  478.             }
  479.             case "shutdown":
  480.             case "shutdownnow":
  481.                 int time = 60000;
  482.                 if (sub[0].equals("shutdownnow")) {
  483.                     time = 1;
  484.                 } else if (sub.length > 1) {
  485.                     time *= Integer.parseInt(sub[1]);
  486.                 }
  487.                 TimerManager.getInstance().schedule(Server.getInstance().shutdown(false), time);
  488.                 break;
  489.             case "sql": {
  490.                 final String query = Commands.joinStringFrom(sub, 1);
  491.                 try {
  492.                     try (PreparedStatement ps = DatabaseConnection.getConnection().prepareStatement(query)) {
  493.                         ps.executeUpdate();
  494.                     }
  495.                     player.message("Done " + query);
  496.                 } catch (SQLException e) {
  497.                     player.message("Query Failed: " + query);
  498.                 }
  499.                 break;
  500.             }
  501.             case "sqlwithresult": {
  502.                 String name = sub[1];
  503.                 final String query = Commands.joinStringFrom(sub, 2);
  504.                 try {
  505.                     try (PreparedStatement ps = DatabaseConnection.getConnection().prepareStatement(query); ResultSet rs = ps.executeQuery()) {
  506.                         while (rs.next()) {
  507.                             player.dropMessage(String.valueOf(rs.getObject(name)));
  508.                         }
  509.                     }
  510.                 } catch (SQLException e) {
  511.                     player.message("Query Failed: " + query);
  512.                 }
  513.                 break;
  514.             }
  515.             case "itemvac":
  516.                 List<MapleMapObject> items = player.getMap().getMapObjectsInRange(player.getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.ITEM));
  517.                 for (MapleMapObject item : items) {
  518.                     MapleMapItem mapitem = (MapleMapItem) item;
  519.                     if (!MapleInventoryManipulator.addFromDrop(c, mapitem.getItem(), true)) {
  520.                         continue;
  521.                     }
  522.                     mapitem.setPickedUp(true);
  523.                     player.getMap().broadcastMessage(MaplePacketCreator.removeItemFromMap(mapitem.getObjectId(), 2, player.getId()), mapitem.getPosition());
  524.                     player.getMap().removeMapObject(item);
  525.  
  526.                 }
  527.                 break;
  528.             case "zakum":
  529.                 player.getMap().spawnFakeMonsterOnGroundBelow(MapleLifeFactory.getMonster(8800000), player.getPosition());
  530.                 for (int x = 8800003; x < 8800011; x++) {
  531.                     player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(x), player.getPosition());
  532.                 }
  533.                 break;
  534.             default:
  535.                 player.yellowMessage("Command " + heading + sub[0] + " does not exist.");
  536.                 break;
  537.         }
  538.     }
  539.  
  540.     private static String joinStringFrom(String arr[], int start) {
  541.         StringBuilder builder = new StringBuilder();
  542.         for (int i = start; i < arr.length; i++) {
  543.             builder.append(arr[i]);
  544.             if (i != arr.length - 1) {
  545.                 builder.append(" ");
  546.             }
  547.         }
  548.         return builder.toString();
  549.     }
  550. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement