Advertisement
Guest User

Untitled

a guest
May 26th, 2019
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 46.92 KB | None | 0 0
  1. package net.sf.odinms.client.messages.commands;
  2.  
  3. import net.sf.odinms.net.world.remote.WorldChannelInterface;
  4. import java.text.SimpleDateFormat;
  5. import java.util.Calendar;
  6. import java.awt.Rectangle;
  7. import net.sf.odinms.server.MapleStatEffect;
  8. import net.sf.odinms.server.maps.MapleMist;
  9. import net.sf.odinms.server.movement.RelativeLifeMovement;
  10. import net.sf.odinms.server.movement.LifeMovementFragment;
  11. import java.util.ArrayList;
  12. import java.awt.Point;
  13. import java.io.File;
  14. import java.io.FileWriter;
  15. import java.io.IOException;
  16. import java.rmi.RemoteException;
  17. import java.sql.Connection;
  18. import java.sql.PreparedStatement;
  19. import java.sql.ResultSet;
  20. import java.sql.SQLException;
  21. import java.util.Arrays;
  22. import java.util.Collection;
  23. import java.util.List;
  24. import net.sf.odinms.client.IItem;
  25. import net.sf.odinms.client.Item;
  26. import net.sf.odinms.client.MapleCharacter;
  27. import net.sf.odinms.client.messages.CommandDefinition;
  28. import net.sf.odinms.client.messages.Command;
  29. import net.sf.odinms.client.MapleClient;
  30. import net.sf.odinms.client.MapleDisease;
  31. import net.sf.odinms.client.MapleInventoryType;
  32. import net.sf.odinms.client.MaplePet;
  33. import net.sf.odinms.client.MapleStat;
  34. import net.sf.odinms.client.anticheat.CheatingOffense;
  35. import net.sf.odinms.client.messages.CommandProcessor;
  36. import net.sf.odinms.client.messages.MessageCallback;
  37. import net.sf.odinms.database.DatabaseConnection;
  38. import net.sf.odinms.net.ExternalCodeTableGetter;
  39. import net.sf.odinms.net.MaplePacket;
  40. import net.sf.odinms.net.PacketProcessor;
  41. import net.sf.odinms.server.MapleInventoryManipulator;
  42. import net.sf.odinms.net.RecvPacketOpcode;
  43. import net.sf.odinms.net.SendPacketOpcode;
  44. import net.sf.odinms.net.channel.ChannelServer;
  45. import net.sf.odinms.net.channel.handler.ChangeChannelHandler;
  46. import net.sf.odinms.scripting.portal.PortalScriptManager;
  47. import net.sf.odinms.scripting.reactor.ReactorScriptManager;
  48. import net.sf.odinms.server.MapleItemInformationProvider;
  49. import net.sf.odinms.server.MapleShopFactory;
  50. import net.sf.odinms.server.PlayerInteraction.HiredMerchant;
  51. import net.sf.odinms.server.ShutdownServer;
  52. import net.sf.odinms.server.TimerManager;
  53. import net.sf.odinms.server.life.MobSkill;
  54. import net.sf.odinms.server.life.MobSkillFactory;
  55. import net.sf.odinms.server.life.MapleMonster;
  56. import net.sf.odinms.server.maps.MapleMap;
  57. import net.sf.odinms.server.maps.MapleMapObject;
  58. import net.sf.odinms.server.maps.MapleMapObjectType;
  59. import net.sf.odinms.server.maps.MapleReactor;
  60. import net.sf.odinms.server.maps.MapleMapItem;
  61. import net.sf.odinms.server.maps.MapleReactorFactory;
  62. import net.sf.odinms.server.maps.MapleReactorStats;
  63. import net.sf.odinms.tools.MaplePacketCreator;
  64. import net.sf.odinms.tools.StringUtil;
  65. import net.sf.odinms.tools.performance.CPUSampler;
  66. import static net.sf.odinms.client.messages.CommandProcessor.getOptionalIntArg;
  67.  
  68. public class Admins implements Command {
  69.  
  70. @Override
  71. public void execute(MapleClient c, MessageCallback mc, String[] splitted) throws Exception {
  72. splitted[0] = splitted[0].toLowerCase();
  73. MapleCharacter player = c.getPlayer();
  74. if (player.hasAllowedGM()) {
  75. ChannelServer cserv = c.getChannelServer();
  76. Collection<ChannelServer> cservs = ChannelServer.getAllInstances();
  77. if (splitted[0].equals("!speakall")) {
  78. String text = StringUtil.joinStringFrom(splitted, 1);
  79. for (MapleCharacter mch : player.getMap().getCharacters()) {
  80. mch.getMap().broadcastMessage(MaplePacketCreator.getChatText(mch.getId(), text, false, 0));
  81. }
  82. // } else if (splitted[0].equals("!killnear")) {
  83. // MapleMap map = player.getMap();
  84. // List<MapleMapObject> players = map.getMapObjectsInRange(player.getPosition(), (double) 50000, Arrays.asList(MapleMapObjectType.PLAYER));
  85. // for (MapleMapObject closeplayers : players) {
  86. // MapleCharacter playernear = (MapleCharacter) closeplayers;
  87. // if (playernear.isAlive() && playernear != player) {
  88. // }
  89. // playernear.setHp(0);
  90. // playernear.updateSingleStat(MapleStat.HP, 0);
  91. // player.setHp(30000);
  92. // player.updateSingleStat(MapleStat.HP, 30000);
  93. // playernear.dropMessage(5, "You were too close to a GM.");
  94. // }
  95.  
  96.  
  97.  
  98. } else if (splitted[0].equals("!packet")) {
  99. if (splitted.length > 1) {
  100. c.getSession().write(MaplePacketCreator.sendPacket(StringUtil.joinStringFrom(splitted, 1)));
  101. } else {
  102. mc.dropMessage("Please enter packet data");
  103. }
  104. } else if (splitted[0].equals("!reloadmap")) {
  105. int map = Integer.parseInt(splitted[1]);
  106. for (MapleCharacter players : c.getChannelServer().getMapFactory().getMap(map).getCharacters())
  107. players.changeMap(100000000);
  108. c.getChannelServer().getMapFactory().disposeMap(map);
  109. c.getChannelServer().getMapFactory().getMap(map);
  110.  
  111. } else if (splitted[0].equals("!drop")) {
  112. MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
  113. int itemId = Integer.parseInt(splitted[1]);
  114. if (itemId == 4000252 && player.hasOwnerPermission() && !player.isOwner()) {
  115. player.dropMessage("You need the owner's permission to drop a Chicken.");
  116. return;
  117. }
  118. if (itemId == 2388015 && !player.hasOwnerPermission() && !player.isOwner()) {
  119. player.dropMessage("You cannot make Elliza Cards without the owner's permission.");
  120. }
  121.  
  122. if (itemId == 1812006 && !player.hasOwnerPermission() && !player.isOwner()) {
  123. player.dropMessage("You cannot make Magic Scales without the owner's permission.");
  124. }
  125.  
  126. if (itemId == 2022033 && !player.hasOwnerPermission() && !player.isOwner()) {
  127. player.dropMessage("You cannot make Rare Candy without the owner's permission.");
  128. }
  129.  
  130. if (itemId == 5221000 && !player.hasOwnerPermission() && !player.isOwner()) {
  131. player.dropMessage("You cannot make Free Ticket without the owner's permission.");
  132. }
  133. if (!ii.itemExists(itemId)) {
  134. c.getPlayer().dropMessage(5, itemId + " does not exist");
  135. }
  136. short quantity = (short) getOptionalIntArg(splitted, 2, 1);
  137. IItem toDrop;
  138. if (ii.getInventoryType(itemId) == MapleInventoryType.EQUIP) {
  139. toDrop = ii.getEquipById(itemId);
  140. } else {
  141. toDrop = new Item(itemId, (byte) 0, quantity);
  142. }
  143. player.getMap().spawnItemDrop(player, player, toDrop, player.getPosition(), true, true);
  144. } else if (splitted[0].equalsIgnoreCase("!startProfiling")) {
  145. CPUSampler sampler = CPUSampler.getInstance();
  146. sampler.addIncluded("net.sf.odinms");
  147. sampler.start();
  148. } else if (splitted[0].equalsIgnoreCase("!stopProfiling")) {
  149. CPUSampler sampler = CPUSampler.getInstance();
  150. try {
  151. String filename = "odinprofile.txt";
  152. if (splitted.length > 1) {
  153. filename = splitted[1];
  154. }
  155. File file = new File(filename);
  156. if (file.exists()) {
  157. file.delete();
  158. }
  159. sampler.stop();
  160. FileWriter fw = new FileWriter(file);
  161. sampler.save(fw, 1, 10);
  162. fw.close();
  163. } catch (IOException e) {
  164. }
  165. sampler.reset();
  166. } else if (splitted[0].equalsIgnoreCase("!reloadops")) {
  167. try {
  168. ExternalCodeTableGetter.populateValues(SendPacketOpcode.getDefaultProperties(), SendPacketOpcode.values());
  169. ExternalCodeTableGetter.populateValues(RecvPacketOpcode.getDefaultProperties(), RecvPacketOpcode.values());
  170. } catch (Exception e) {
  171. }
  172. PacketProcessor.getProcessor(PacketProcessor.Mode.CHANNELSERVER).reset(PacketProcessor.Mode.CHANNELSERVER);
  173. PacketProcessor.getProcessor(PacketProcessor.Mode.CHANNELSERVER).reset(PacketProcessor.Mode.CHANNELSERVER);
  174. } else if (splitted[0].equals("!closemerchants")) {
  175. mc.dropMessage("Closing and saving merchants, please wait...");
  176. for (ChannelServer channel : ChannelServer.getAllInstances()) {
  177. for (MapleCharacter players : channel.getPlayerStorage().getAllCharacters()) {
  178. players.getInteraction().closeShop(true);
  179. }
  180. }
  181. mc.dropMessage("All merchants have been closed and saved.");
  182.  
  183. } else if (splitted[0].equals("!dance")) {
  184. List<LifeMovementFragment> res = new ArrayList<LifeMovementFragment>();
  185. res.add(new RelativeLifeMovement(6, c.getPlayer().getPosition(), 10, 3));
  186. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  187. int chid = victim.getId();
  188. MaplePacket packet = MaplePacketCreator.movePlayer(chid, res);
  189. c.getPlayer().getMap().broadcastMessage(c.getPlayer(), packet, false);
  190.  
  191. } else if (splitted[0].equalsIgnoreCase("!levelmap")) {
  192. for (MapleCharacter map : player.getMap().getCharacters()) {
  193. if (map != null && map.isGM() == false) {
  194. map.setLevel(getOptionalIntArg(splitted, 2, map.getLevel() + 1));
  195. map.levelUp();
  196. map.setExp(0);
  197. map.updateSingleStat(MapleStat.EXP, map.getExp());
  198. }
  199. }
  200.  
  201. } else if (splitted[0].equalsIgnoreCase("!fartperson")) {
  202. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  203. Rectangle bounds = new Rectangle((int) victim.getPosition().getX(), (int) victim.getPosition().getY(), 1, 1);
  204. MapleStatEffect mse = new MapleStatEffect();
  205. mse.setSourceId(2111003);
  206. MapleMist mist = new MapleMist(bounds, c.getPlayer(), mse);
  207. victim.getMap().spawnMist(mist, 10000, false, true);
  208. victim.getMap().broadcastMessage(MaplePacketCreator.getChatText(victim.getId(), "Oh no, I farted!", false, 1));
  209.  
  210. } else if (splitted[0].equals("!maphint")) {
  211. String hint = StringUtil.joinStringFrom(splitted, 1);
  212. MaplePacket cbp = MaplePacketCreator.sendHint(hint);
  213. c.getPlayer().getMap().broadcastMessage(cbp);
  214. } else if (splitted[0].equals("!worldhint")) {
  215. String hint = StringUtil.joinStringFrom(splitted, 1);
  216. try {
  217. c.getChannelServer().getWorldInterface().broadcastMessage(null, MaplePacketCreator.sendHint(hint).getBytes());
  218. } catch (RemoteException e) {
  219. mc.dropMessage("Error while using this command");
  220. }
  221.  
  222. } else if (splitted[0].equals("!shutdown")) {
  223. int time = 60000;
  224. if (splitted.length > 1) {
  225. time = Integer.parseInt(splitted[1]) * 60000;
  226. }
  227. if (time < 180000) {
  228. mc.dropMessage("Please allow at least 3 minutes before shutting down, this ensures everything shuts down smoothly!");
  229. return;
  230. }
  231. MaplePacketCreator.serverNotice(1, "Server shut down in " + splitted[1] +" minute(s).\r\n \r\nPlease type @save and log off safely.");
  232. CommandProcessor.forcePersisting();
  233. c.getChannelServer().shutdown(time);
  234.  
  235.  
  236. } else if (splitted[0].equals("!shutdownworld")) {
  237. int time = 60000;
  238. if (splitted.length > 1) {
  239. time = Integer.parseInt(splitted[1]) * 60000;
  240. }
  241. if (time < 180000) {
  242. mc.dropMessage("Please allow at least 3 minutes before shutting down, this ensures everything shuts down smoothly!");
  243. return;
  244. }
  245. MaplePacketCreator.serverNotice(1, "Server shut down in " + splitted[1] +" minute(s).\r\n \r\nPlease type @save and log off safely.");
  246. CommandProcessor.forcePersisting();
  247. c.getChannelServer().shutdownWorld(time);
  248.  
  249. } else if (splitted[0].equals("!shutdownnow")) {
  250. CommandProcessor.forcePersisting();
  251. new ShutdownServer(c.getChannel()).run();
  252. } else if (splitted[0].equalsIgnoreCase("!mesoperson")) {
  253. int mesos;
  254. try {
  255. mesos = Integer.parseInt(splitted[2]);
  256. } catch (NumberFormatException blackness) {
  257. return;
  258. }
  259. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  260. if (!player.hasOwnerPermission() && !player.isOwner()) {
  261. player.dropMessage("You need the owner's permission to give mesos to someone");
  262. return;
  263. }
  264. if (victim != null) {
  265. victim.gainMeso(mesos, true, true, true);
  266. } else {
  267. mc.dropMessage("Player was not found");
  268. }
  269.  
  270. } else if (splitted[0].equalsIgnoreCase("!levelperson")) {
  271. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  272. victim.setLevel(getOptionalIntArg(splitted, 2, victim.getLevel() + 1));
  273. victim.levelUp();
  274. victim.setExp(0);
  275. victim.updateSingleStat(MapleStat.EXP, 0);
  276.  
  277. } else if (splitted[0].equalsIgnoreCase("!kill")) {
  278. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  279. if (victim != null) {
  280. victim.setHp(0);
  281. victim.setMp(0);
  282. victim.updateSingleStat(MapleStat.HP, 0);
  283. victim.updateSingleStat(MapleStat.MP, 0);
  284. } else {
  285. mc.dropMessage("Player not found");
  286. }
  287.  
  288. } else if (splitted[0].equalsIgnoreCase("!killmap")) {
  289. for (MapleCharacter map : player.getMap().getCharacters()) {
  290. if (map != null && map.isGM() == false) {
  291. map.setHp(0);
  292. map.setMp(0);
  293. map.updateSingleStat(MapleStat.HP, 0);
  294. map.updateSingleStat(MapleStat.MP, 0);
  295. }
  296. }
  297.  
  298. } else if (splitted[0].equalsIgnoreCase("!seducemap")) {
  299. for (MapleCharacter map : player.getMap().getCharacters()) {
  300. if (map != null && map.isGM() == false) {
  301. map.giveDebuff(MapleDisease.getType(128), MobSkillFactory.getMobSkill(128, 1), false);
  302. }
  303. }
  304.  
  305. } else if (splitted[0].equals("!worldtrip")) {
  306. int[] mapIds = {200000000, 102000000, 103000000, 100000000, 200000000, 211000000, 230000000, 222000000, 251000000, 220000000, 221000000, 240000000, 600000000, 800000000, 680000000, 105040300, 990000000, 100000001};
  307. for (int i = 0; i < 10; i++)
  308. for (int map : mapIds) {
  309. MapleMap target = c.getChannelServer().getMapFactory().getMap(map);
  310. c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]).changeMap(target, target.getPortal(0));
  311. }
  312.  
  313. } else if (splitted[0].equalsIgnoreCase("!jobperson")) {
  314. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  315. int job;
  316. try {
  317. job = Integer.parseInt(splitted[2]);
  318. } catch (NumberFormatException blackness) {
  319. return;
  320. }
  321. if (!player.hasOwnerPermission() && !player.isOwner()) {
  322. player.dropMessage("You need the owner's permission to change someone's job.");
  323. }
  324. if (victim != null) {
  325. victim.setJob(job);
  326. } else {
  327. mc.dropMessage("Player not found");
  328. }
  329. } else if (splitted[0].equalsIgnoreCase("!spawndebug")) {
  330. player.getMap().spawnDebug(mc);
  331. } else if (splitted[0].equalsIgnoreCase("!timerdebug")) {
  332. TimerManager.getInstance().dropDebugInfo(mc);
  333. } else if (splitted[0].equalsIgnoreCase("!threads")) {
  334. Thread[] threads = new Thread[Thread.activeCount()];
  335. Thread.enumerate(threads);
  336. String filter = "";
  337. if (splitted.length > 1) {
  338. filter = splitted[1];
  339. }
  340. for (int i = 0; i < threads.length; i++) {
  341. String tstring = threads[i].toString();
  342. if (tstring.toLowerCase().indexOf(filter.toLowerCase()) > -1) {
  343. mc.dropMessage(i + ": " + tstring);
  344. }
  345. }
  346. } else if (splitted[0].equalsIgnoreCase("!showtrace")) {
  347. Thread[] threads = new Thread[Thread.activeCount()];
  348. Thread.enumerate(threads);
  349. Thread t = threads[Integer.parseInt(splitted[1])];
  350. mc.dropMessage(t.toString() + ":");
  351. for (StackTraceElement elem : t.getStackTrace()) {
  352. mc.dropMessage(elem.toString());
  353. }
  354.  
  355. } else if (splitted[0].equalsIgnoreCase("!shopitem")) {
  356. if (splitted.length < 5) {
  357. mc.dropMessage("!shopitem <shopid> <itemid> <price> <position>");
  358. } else {
  359. try {
  360. Connection con = DatabaseConnection.getConnection();
  361. PreparedStatement ps = con.prepareStatement("INSERT INTO shopitems (shopid, itemid, price, position) VALUES (" + Integer.parseInt(splitted[1]) + ", " + Integer.parseInt(splitted[2]) + ", " + Integer.parseInt(splitted[3]) + ", " + Integer.parseInt(splitted[4]) + ");");
  362. ps.executeUpdate();
  363. ps.close();
  364. MapleShopFactory.getInstance().clear();
  365. mc.dropMessage("Done adding shop item.");
  366. } catch (SQLException e) {
  367. mc.dropMessage("Something wrong happened.");
  368. }
  369. }
  370.  
  371.  
  372. } else if (splitted[0].equalsIgnoreCase("!warphere")) {
  373. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  374. MapleMap pmap = player.getMap();
  375. if (victim != null) {
  376. victim.changeMap(pmap, player.getPosition());
  377. } else {
  378. try {
  379. String name = splitted[1];
  380. WorldChannelInterface wci = cserv.getWorldInterface();
  381. int channel = wci.find(name);
  382. if (channel > -1) {
  383. ChannelServer pserv = ChannelServer.getInstance(channel);
  384. MapleCharacter world_victim = pserv.getPlayerStorage().getCharacterByName(name);
  385. if (world_victim != null) {
  386. ChangeChannelHandler.changeChannel(c.getChannel(), world_victim.getClient());
  387. world_victim.changeMap(pmap, player.getPosition());
  388. }
  389. } else {
  390. mc.dropMessage("Player not online.");
  391. }
  392. } catch (RemoteException e) {
  393. cserv.reconnectWorld();
  394. }
  395. }
  396. } else if (splitted[0].equalsIgnoreCase("!warpthismap")) {
  397. for (MapleCharacter ipwn : cserv.getPlayerStorage().getAllCharacters()) {
  398. if (ipwn.getMapId() == player.getMapId()) {
  399. ipwn.changeMap(Integer.parseInt(splitted[1]));
  400. }
  401. else {
  402. mc.dropMessage("Syntax : !warpthismap <map>");
  403. return;
  404. }
  405. }
  406. } else if (splitted[0].equalsIgnoreCase("!warpmap")) {
  407. for (MapleCharacter ipwn : cserv.getPlayerStorage().getAllCharacters()) {
  408. if (ipwn.getMapId() == Integer.parseInt(splitted[1])) {
  409. ipwn.changeMap(Integer.parseInt(splitted[2]));
  410. } else {
  411. mc.dropMessage("Syntax : !warpmap <from> <to>");
  412. return;
  413. }
  414. }
  415.  
  416. } else if (splitted[0].equalsIgnoreCase("!toggleoffense")) {
  417. try {
  418. CheatingOffense co = CheatingOffense.valueOf(splitted[1]);
  419. co.setEnabled(!co.isEnabled());
  420. } catch (IllegalArgumentException iae) {
  421. mc.dropMessage("Offense " + splitted[1] + " not found");
  422. }
  423. } else if (splitted[0].equalsIgnoreCase("!tdrops")) {
  424. player.getMap().toggleDrops();
  425.  
  426. } else if (splitted[0].equalsIgnoreCase("!givemonsbuff")) {
  427. int mask = 0;
  428. mask |= Integer.decode(splitted[1]);
  429. MobSkill skill = MobSkillFactory.getMobSkill(128, 1);
  430. c.getSession().write(MaplePacketCreator.applyMonsterStatusTest(Integer.valueOf(splitted[2]), mask, 0, skill, Integer.valueOf(splitted[3])));
  431. } else if (splitted[0].equalsIgnoreCase("!givemonstatus")) {
  432. int mask = 0;
  433. mask |= Integer.decode(splitted[1]);
  434. c.getSession().write(MaplePacketCreator.applyMonsterStatusTest2(Integer.valueOf(splitted[2]), mask, 1000, Integer.valueOf(splitted[3])));
  435. } else if (splitted[0].equalsIgnoreCase("!sreactor")) {
  436. MapleReactorStats reactorSt = MapleReactorFactory.getReactor(Integer.parseInt(splitted[1]));
  437. MapleReactor reactor = new MapleReactor(reactorSt, Integer.parseInt(splitted[1]));
  438. reactor.setDelay(-1);
  439. reactor.setPosition(player.getPosition());
  440. player.getMap().spawnReactor(reactor);
  441. } else if (splitted[0].equalsIgnoreCase("!hreactor")) {
  442. player.getMap().getReactorByOid(Integer.parseInt(splitted[1])).hitReactor(c);
  443. } else if (splitted[0].equalsIgnoreCase("!lreactor")) {
  444. MapleMap map = player.getMap();
  445. List<MapleMapObject> reactors = map.getMapObjectsInRange(player.getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.REACTOR));
  446. for (MapleMapObject reactorL : reactors) {
  447. MapleReactor reactor2l = (MapleReactor) reactorL;
  448. mc.dropMessage("Reactor: oID: " + reactor2l.getObjectId() + " reactorID: " + reactor2l.getId() + " Position: " + reactor2l.getPosition().toString() + " State: " + reactor2l.getState());
  449. }
  450. } else if (splitted[0].equalsIgnoreCase("!dreactor")) {
  451. MapleMap map = player.getMap();
  452. List<MapleMapObject> reactors = map.getMapObjectsInRange(player.getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.REACTOR));
  453. if (splitted[1].equalsIgnoreCase("all")) {
  454. for (MapleMapObject reactorL : reactors) {
  455. MapleReactor reactor2l = (MapleReactor) reactorL;
  456. player.getMap().destroyReactor(reactor2l.getObjectId());
  457. }
  458. } else {
  459. player.getMap().destroyReactor(Integer.parseInt(splitted[1]));
  460. }
  461. } else if (splitted[0].equalsIgnoreCase("!writecommands")) {
  462. CommandProcessor.getInstance().writeCommandList();
  463.  
  464. } else if (splitted[0].equalsIgnoreCase("!saveall")) {
  465. for (ChannelServer chan : ChannelServer.getAllInstances()) {
  466. for (MapleCharacter chr : chan.getPlayerStorage().getAllCharacters()) {
  467. chr.saveToDB(true, false);
  468. }
  469. }
  470. mc.dropMessage("save complete");
  471. } else if (splitted[0].equalsIgnoreCase("!saveevery")) {
  472. for (ChannelServer chan : ChannelServer.getAllInstances()) {
  473. for (MapleCharacter chr : chan.getPlayerStorage().getAllCharacters()) {
  474. chr.saveToDB(true, false);
  475. }
  476. }
  477. mc.dropMessage("save complete");
  478. } else if (splitted[0].equalsIgnoreCase("!reloadnews")) {
  479. for (ChannelServer channels : cservs) {
  480. for (MapleCharacter mch : channels.getPlayerStorage().getAllCharacters()) {
  481. mch.reloadNews();
  482. }
  483. }
  484. player.dropMessage("News reloaded.");
  485.  
  486. } else if (splitted[0].equalsIgnoreCase("!preactor")) {
  487. if (splitted.length < 4) {
  488. mc.dropMessage("Syntax: !preactor <ID> <Name> <Delay>");
  489. } else {
  490. try {
  491. MapleReactor newReactor = new MapleReactor(MapleReactorFactory.getReactor(Integer.parseInt(splitted[1])), Integer.parseInt(splitted[1]));
  492. Point pos = new Point();
  493. pos.setLocation(c.getPlayer().getPosition().x, c.getPlayer().getPosition().y-12);
  494. newReactor.setPosition(pos);
  495. newReactor.setDelay(Integer.parseInt(splitted[3]) * 1);
  496. newReactor.setState((byte) 0);
  497. newReactor.setName(splitted[2]);
  498. c.getPlayer().getMap().spawnReactor(newReactor);
  499. Connection con = DatabaseConnection.getConnection();
  500. PreparedStatement ps = con.prepareStatement("INSERT INTO reactors (mapid, rid, x, y, name, delay) VALUES (?,?,?,?,?,?);");
  501. ps.setInt(1, c.getPlayer().getMapId());
  502. ps.setInt(2, newReactor.getReactorId());
  503. ps.setInt(3, newReactor.getPosition().x);
  504. ps.setInt(4, newReactor.getPosition().y);
  505. ps.setString(5, newReactor.getName());
  506. ps.setInt(6, newReactor.getDelay());
  507. ps.executeUpdate();
  508. ps.close();
  509. } catch (Exception e) {
  510. mc.dropMessage(e.toString());
  511. }
  512. }
  513. } else if (splitted[0].equalsIgnoreCase("!addnews")) {
  514. Connection con = DatabaseConnection.getConnection();
  515. PreparedStatement ps;
  516. ps = con.prepareStatement("INSERT INTO news(lmao, news) VALUES(0, ?)");
  517. ps.setString(1, StringUtil.joinStringFrom(splitted, 1));
  518. ps.executeUpdate();
  519. ps.close();
  520. for (ChannelServer channels : cservs) {
  521. for (MapleCharacter mch : channels.getPlayerStorage().getAllCharacters()) {
  522. mch.reloadNews();
  523. }
  524. }
  525.  
  526. } else if (splitted[0].equalsIgnoreCase("!notice")) {
  527. int joinmod = 1;
  528. int range = -1;
  529. if (splitted[1].equalsIgnoreCase("m")) {
  530. range = 0;
  531. } else if (splitted[1].equalsIgnoreCase("c")) {
  532. range = 1;
  533. } else if (splitted[1].equalsIgnoreCase("w")) {
  534. range = 2;
  535. }
  536. int tfrom = 2;
  537. int type;
  538. if (range == -1) {
  539. range = 2;
  540. tfrom = 1;
  541. }
  542. if (splitted[tfrom].equalsIgnoreCase("n")) {
  543. type = 0;
  544. } else if (splitted[tfrom].equalsIgnoreCase("p")) {
  545. type = 1;
  546. } else if (splitted[tfrom].equalsIgnoreCase("l")) {
  547. type = 2;
  548. } else if (splitted[tfrom].equalsIgnoreCase("nv")) {
  549. type = 5;
  550. } else if (splitted[tfrom].equalsIgnoreCase("v")) {
  551. type = 5;
  552. } else if (splitted[tfrom].equalsIgnoreCase("b")) {
  553. type = 6;
  554. } else {
  555. type = 0;
  556. joinmod = 0;
  557. }
  558. String prefix = "";
  559. if (splitted[tfrom].equalsIgnoreCase("nv")) {
  560. prefix = "[Notice] ";
  561. }
  562. joinmod += tfrom;
  563. String outputMessage = StringUtil.joinStringFrom(splitted, joinmod);
  564. if (outputMessage.equalsIgnoreCase("!array")) {
  565. outputMessage = c.getChannelServer().getArrayString();
  566. }
  567. MaplePacket packet = MaplePacketCreator.serverNotice(type, prefix + outputMessage);
  568. if (range == 0) {
  569. player.getMap().broadcastMessage(packet);
  570. } else if (range == 1) {
  571. ChannelServer.getInstance(c.getChannel()).broadcastPacket(packet);
  572. } else if (range == 2) {
  573. try {
  574. ChannelServer.getInstance(c.getChannel()).getWorldInterface().broadcastMessage(player.getName(), packet.getBytes());
  575. } catch (RemoteException e) {
  576. c.getChannelServer().reconnectWorld();
  577. }
  578. }
  579. } else if (splitted[0].equalsIgnoreCase("!noteall")) {
  580. for (ChannelServer channels : cservs) {
  581. for (MapleCharacter mch : channels.getPlayerStorage().getAllCharacters()) {
  582. c.getPlayer().sendNote2(mch.getId(), StringUtil.joinStringFrom(splitted, 1));
  583. mch.showNote();
  584. }
  585. player.dropMessage("Done");
  586. }
  587.  
  588. } else if (splitted[0].equalsIgnoreCase("!setdonatorlvl")) {
  589. MapleCharacter donator = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  590. if (donator != null) {
  591. donator.setDonatorLevel(Integer.parseInt(splitted[2]));
  592. donator.dropMessage(5, "You are now a level " + splitted[2] + " Donator");
  593. player.dropMessage("The player " + donator.getName() + " is now a donator of level " + splitted[2] + ".");
  594. } else {
  595. player.dropMessage("That player is offline");
  596. }
  597. } else if (splitted[0].equalsIgnoreCase("!getdonatorlvl")) {
  598. MapleCharacter donator = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  599. if (donator != null) {
  600. player.dropMessage(5, donator.getName() + " is a level " + donator.getDonatorLevel() + " donator.");
  601. } else {
  602. player.dropMessage("That player is offline");
  603. }
  604.  
  605. } else if (splitted[0].equalsIgnoreCase("!strip")) {
  606. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  607. if (victim != null && victim.isGM() == false) {
  608. victim.unequipEverything();
  609. victim.dropMessage("You've been stripped");
  610. } else {
  611. player.dropMessage(6, "Player is not on.");
  612. }
  613. } else if (splitted[0].equalsIgnoreCase("!speak")) {
  614. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  615. if (victim != null && victim.isGM() == false) {
  616. String text = StringUtil.joinStringFrom(splitted, 2);
  617. victim.getMap().broadcastMessage(MaplePacketCreator.getChatText(victim.getId(), text, false, 0));
  618. } else {
  619. mc.dropMessage("Player not found");
  620. }
  621. } else if (splitted[0].equalsIgnoreCase("!changechannel")) {
  622. int channel;
  623.  
  624. if (splitted.length == 3) {
  625. try {
  626. channel = Integer.parseInt(splitted[2]);
  627. } catch (NumberFormatException blackness) {
  628. return;
  629. }
  630. if (channel <= ChannelServer.getAllInstances().size() || channel < 0) {
  631. String name = splitted[1];
  632. try {
  633. int vchannel = c.getChannelServer().getWorldInterface().find(name);
  634. if (vchannel > -1) {
  635. ChannelServer pserv = ChannelServer.getInstance(vchannel);
  636. MapleCharacter victim = pserv.getPlayerStorage().getCharacterByName(name);
  637. ChangeChannelHandler.changeChannel(channel, victim.getClient());
  638. } else {
  639. mc.dropMessage("Player not found");
  640. }
  641. } catch (RemoteException rawr) {
  642. c.getChannelServer().reconnectWorld();
  643. }
  644. } else {
  645. mc.dropMessage("Channel not found.");
  646. }
  647. } else {
  648. try {
  649. channel = Integer.parseInt(splitted[1]);
  650. } catch (NumberFormatException blackness) {
  651. return;
  652. }
  653. if (channel <= ChannelServer.getAllInstances().size() || channel < 0) {
  654. ChangeChannelHandler.changeChannel(channel, c);
  655. }
  656. }
  657.  
  658. } else if (splitted[0].equalsIgnoreCase("!clearguilds")) {
  659. try {
  660. mc.dropMessage("Attempting to reload all guilds... this may take a while...");
  661. cserv.getWorldInterface().clearGuilds();
  662. mc.dropMessage("Completed.");
  663. } catch (RemoteException re) {
  664. mc.dropMessage("RemoteException occurred while attempting to reload guilds.");
  665. }
  666. } else if (splitted[0].equalsIgnoreCase("!clearPortalScripts")) {
  667. PortalScriptManager.getInstance().clearScripts();
  668. } else if (splitted[0].equalsIgnoreCase("!clearReactorDrops")) {
  669. ReactorScriptManager.getInstance().clearDrops();
  670. } else if (splitted[0].equalsIgnoreCase("!monsterdebug")) {
  671. MapleMap map = player.getMap();
  672. double range = Double.POSITIVE_INFINITY;
  673. if (splitted.length > 1) {
  674. int irange = Integer.parseInt(splitted[1]);
  675. if (splitted.length <= 2) {
  676. range = irange * irange;
  677. } else {
  678. map = c.getChannelServer().getMapFactory().getMap(Integer.parseInt(splitted[2]));
  679. }
  680. }
  681. List<MapleMapObject> monsters = map.getMapObjectsInRange(player.getPosition(), range, Arrays.asList(MapleMapObjectType.MONSTER));
  682. for (MapleMapObject monstermo : monsters) {
  683. MapleMonster monster = (MapleMonster) monstermo;
  684. mc.dropMessage("Monster " + monster.toString());
  685. }
  686. } else if (splitted[0].equalsIgnoreCase("!itemperson")) {
  687. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  688. int item;
  689. try {
  690. item = Integer.parseInt(splitted[2]);
  691. if (item == 4001126 && !player.hasOwnerPermission() && !player.isOwner()) {
  692. player.dropMessage("You need the owner's permission to give a maple leaf.");
  693. return;
  694. }
  695. } catch (NumberFormatException blackness) {
  696. return;
  697. }
  698. short quantity = (short) getOptionalIntArg(splitted, 3, 1);
  699. if (victim != null) {
  700. MapleInventoryManipulator.addById(victim.getClient(), item, quantity);
  701. } else {
  702. mc.dropMessage("Player not found");
  703. }
  704.  
  705. } else if (splitted[0].equals("!pausemap") || splitted[0].equals("!unpause")) {
  706. for (MapleCharacter chr : c.getPlayer().getMap().getCharacters()) {
  707. if (splitted[0].equals("!pausemap")) {
  708. if (chr.isGM()) {
  709. } else {
  710. MobSkill ms = new MobSkill(123, 1);
  711. ms.setDuration((long) Double.POSITIVE_INFINITY);
  712. chr.giveDebuff(MapleDisease.STUN, ms, false);
  713. }
  714. } else {
  715. if (chr.isGM()) {
  716. } else {
  717. chr.cancelAllDebuffs();
  718. }
  719. }
  720. }
  721. mc.dropMessage("Done.");
  722.  
  723. } else if (splitted[0].equalsIgnoreCase("!setaccgm")) {
  724. int accountid;
  725. Connection con = DatabaseConnection.getConnection();
  726. try {
  727. PreparedStatement ps = con.prepareStatement("SELECT accountid FROM characters WHERE name = ?");
  728. ps.setString(1, splitted[1]);
  729. ResultSet rs = ps.executeQuery();
  730. if (rs.next()) {
  731. accountid = rs.getInt("accountid");
  732. ps.close();
  733. ps = con.prepareStatement("UPDATE accounts SET gm = ? WHERE id = ?");
  734. ps.setInt(1, 1);
  735. ps.setInt(2, accountid);
  736. ps.executeUpdate();
  737. } else {
  738. mc.dropMessage("Player was not found in the database.");
  739. }
  740. ps.close();
  741. rs.close();
  742. } catch (SQLException se) {
  743. }
  744. } else if (splitted[0].equals("!servercheck")) {
  745. try {
  746. cserv.getWorldInterface().broadcastMessage(null, MaplePacketCreator.serverNotice(1, "Server check will commence soon. Please @save, and log off safely.").getBytes());
  747. } catch (RemoteException asd) {
  748. cserv.reconnectWorld();
  749. }
  750. } else if (splitted[0].equalsIgnoreCase("!itemvac")) {
  751. List<MapleMapObject> items = player.getMap().getMapObjectsInRange(player.getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.ITEM));
  752. for (MapleMapObject item : items) {
  753. MapleMapItem mapItem = (MapleMapItem) item;
  754. if (mapItem.getMeso() > 0) {
  755. player.gainMeso(mapItem.getMeso(), true);
  756. } else if (mapItem.getItem().getItemId() >= 5000000 && mapItem.getItem().getItemId() <= 5000100) {
  757. int petId = MaplePet.createPet(mapItem.getItem().getItemId());
  758. if (petId == -1) {
  759. return;
  760. }
  761. MapleInventoryManipulator.addById(c, mapItem.getItem().getItemId(), mapItem.getItem().getQuantity(), null, petId);
  762. } else {
  763. MapleInventoryManipulator.addFromDrop(c, mapItem.getItem(), true);
  764. }
  765. mapItem.setPickedUp(true);
  766. player.getMap().removeMapObject(item); // just incase ?
  767. player.getMap().broadcastMessage(MaplePacketCreator.removeItemFromMap(mapItem.getObjectId(), 2, player.getId()), mapItem.getPosition());
  768. }
  769.  
  770. } else if (splitted[0].equalsIgnoreCase("!merchantsave")) {
  771. for (ChannelServer channel : ChannelServer.getAllInstances()) {
  772. for (ChannelServer channels : cservs) {
  773. for (MapleCharacter mch : channels.getPlayerStorage().getAllCharacters()) {
  774. for (int i = 910000001; i <= 910000022; i++) {
  775. for (MapleMapObject obj : channel.getMapFactory().getMap(i).getMapObjectsInRange(new Point(0, 0), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.HIRED_MERCHANT))) {
  776. HiredMerchant hm = (HiredMerchant) obj;
  777. hm.closeShop(true);
  778. player.setHasMerchant(false);
  779. }
  780. }
  781. }
  782. }
  783. }
  784. player.dropMessage("Done! Remember this has closed all shops....");
  785. }
  786. }
  787. }
  788.  
  789. public static String now(String dateFormat) {
  790. Calendar cal = Calendar.getInstance();
  791. SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
  792. return sdf.format(cal.getTime());
  793.  
  794. }
  795.  
  796. private void compareTime(StringBuilder sb, long timeDiff) {
  797. double secondsAway = timeDiff / 1000;
  798. double minutesAway = 0;
  799. double hoursAway = 0;
  800.  
  801. while (secondsAway > 60) {
  802. minutesAway++;
  803. secondsAway -= 60;
  804. }
  805. while (minutesAway > 60) {
  806. hoursAway++;
  807. minutesAway -= 60;
  808. }
  809. boolean hours = false;
  810. boolean minutes = false;
  811. if (hoursAway > 0) {
  812. sb.append(" ");
  813. sb.append((int) hoursAway);
  814. sb.append(" Hour(s)");
  815. hours = true;
  816. }
  817. if (minutesAway > 0) {
  818. if (hours) {
  819. sb.append(" ,");
  820. }
  821. sb.append(" ");
  822. sb.append((int) minutesAway);
  823. sb.append(" Minute(s)");
  824. minutes = true;
  825. }
  826. if (secondsAway > 0) {
  827. if (minutes) {
  828. sb.append(" and");
  829. }
  830. sb.append(" ");
  831. sb.append((int) secondsAway);
  832. sb.append(" Second(s).");
  833. }
  834. }
  835.  
  836. @Override
  837. public CommandDefinition[] getDefinition() {
  838. return new CommandDefinition[]{
  839. new CommandDefinition("speakall", 4),
  840. new CommandDefinition("killnear", 4),
  841. new CommandDefinition("packet", 4),
  842. new CommandDefinition("drop", 4),
  843. new CommandDefinition("startprofiling", 4),
  844. new CommandDefinition("stopprofiling", 4),
  845. new CommandDefinition("reloadops", 4),
  846. new CommandDefinition("closemerchants", 4),
  847. new CommandDefinition("shutdown", 4),
  848. new CommandDefinition("shutdownworld", 4),
  849. new CommandDefinition("shutdownnow", 4),
  850. new CommandDefinition("setrebirths", 4),
  851. new CommandDefinition("mesoperson", 4),
  852. new CommandDefinition("kill", 4),
  853. new CommandDefinition("jobperson", 4),
  854. new CommandDefinition("spawndebug", 4),
  855. new CommandDefinition("timerdebug", 4),
  856. new CommandDefinition("threads", 4),
  857. new CommandDefinition("showtrace", 4),
  858. new CommandDefinition("toggleoffense", 4),
  859. new CommandDefinition("tdrops", 4),
  860. new CommandDefinition("givemonsbuff", 4),
  861. new CommandDefinition("givemonstatus", 4),
  862. new CommandDefinition("sreactor", 4),
  863. new CommandDefinition("hreactor", 4),
  864. new CommandDefinition("dreactor", 4),
  865. new CommandDefinition("warphere", 4),
  866. new CommandDefinition("warpmap", 4),
  867. new CommandDefinition("warpthismap", 4),
  868. new CommandDefinition("writecommands", 4),
  869. new CommandDefinition("saveall", 4),
  870. new CommandDefinition("notice", 4),
  871. new CommandDefinition("speak", 4),
  872. new CommandDefinition("fartperson", 4),
  873. new CommandDefinition("levelmap", 4),
  874. new CommandDefinition("changechannel", 4),
  875. new CommandDefinition("clearguilds", 4),
  876. new CommandDefinition("clearportalscripts", 4),
  877. new CommandDefinition("shopitem", 4),
  878. new CommandDefinition("clearreactordrops", 4),
  879. new CommandDefinition("monsterdebug", 4),
  880. new CommandDefinition("itemperson", 4),
  881. new CommandDefinition("setaccgm", 4),
  882. new CommandDefinition("strip", 4),
  883. new CommandDefinition("killmap", 4),
  884. new CommandDefinition("seducemap", 4),
  885. new CommandDefinition("servercheck", 4),
  886. new CommandDefinition("itemvac", 4),
  887. new CommandDefinition("merchantsave", 4),
  888. new CommandDefinition("preactor", 4),
  889. new CommandDefinition("addnews", 4),
  890. new CommandDefinition("reloadnews", 4),
  891. new CommandDefinition("reloadmap", 4),
  892. new CommandDefinition("pausemap", 4),
  893. new CommandDefinition("saveevery", 4),
  894. new CommandDefinition("maphint", 4),
  895. new CommandDefinition("worldhint", 4),
  896. new CommandDefinition("setdonatorlvl", 4),
  897. new CommandDefinition("getdonatorlvl", 4),
  898. new CommandDefinition("noteall", 4),
  899. new CommandDefinition("dance", 4),
  900. new CommandDefinition("levelperson", 4),
  901. new CommandDefinition("worldtrip", 4),
  902. new CommandDefinition("unpause", 4),};
  903. }
  904. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement