Advertisement
Guest User

Untitled

a guest
Jun 1st, 2017
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 41.43 KB | None | 0 0
  1. package net.sf.odinms.client.messages.commands;
  2.  
  3. import java.awt.Point;
  4. import java.io.File;
  5. import java.io.FileWriter;
  6. import java.io.IOException;
  7. import java.rmi.RemoteException;
  8. import java.sql.Connection;
  9. import java.sql.PreparedStatement;
  10. import java.sql.ResultSet;
  11. import java.sql.SQLException;
  12. import java.util.Arrays;
  13. import java.util.List;
  14. import net.sf.odinms.client.IItem;
  15. import net.sf.odinms.client.Item;
  16. import net.sf.odinms.client.MapleCharacter;
  17. import net.sf.odinms.client.messages.CommandDefinition;
  18. import net.sf.odinms.client.messages.Command;
  19. import net.sf.odinms.client.MapleClient;
  20. import net.sf.odinms.client.MapleInventoryType;
  21. import net.sf.odinms.client.MaplePet;
  22. import net.sf.odinms.client.MapleStat;
  23. import net.sf.odinms.client.anticheat.CheatingOffense;
  24. import net.sf.odinms.client.messages.CommandProcessor;
  25. import net.sf.odinms.client.messages.MessageCallback;
  26. import net.sf.odinms.database.DatabaseConnection;
  27. import net.sf.odinms.net.ExternalCodeTableGetter;
  28. import net.sf.odinms.net.MaplePacket;
  29. import net.sf.odinms.net.PacketProcessor;
  30. import net.sf.odinms.server.MapleInventoryManipulator;
  31. import net.sf.odinms.net.RecvPacketOpcode;
  32. import net.sf.odinms.net.SendPacketOpcode;
  33. import net.sf.odinms.net.channel.ChannelServer;
  34. import net.sf.odinms.net.channel.handler.ChangeChannelHandler;
  35. import net.sf.odinms.scripting.portal.PortalScriptManager;
  36. import net.sf.odinms.scripting.reactor.ReactorScriptManager;
  37. import net.sf.odinms.server.MapleItemInformationProvider;
  38. import net.sf.odinms.server.MapleShopFactory;
  39. import net.sf.odinms.server.ShutdownServer;
  40. import net.sf.odinms.server.TimerManager;
  41. import net.sf.odinms.server.life.MapleLifeFactory;
  42. import net.sf.odinms.server.life.MobSkill;
  43. import net.sf.odinms.server.life.MobSkillFactory;
  44. import net.sf.odinms.server.life.MapleMonster;
  45. import net.sf.odinms.server.life.MapleMonsterInformationProvider;
  46. import net.sf.odinms.server.life.MapleNPC;
  47. import net.sf.odinms.server.maps.MapleMap;
  48. import net.sf.odinms.server.maps.MapleMapObject;
  49. import net.sf.odinms.server.maps.MapleMapObjectType;
  50. import net.sf.odinms.server.maps.MapleReactor;
  51. import net.sf.odinms.server.maps.MapleMapItem;
  52. import net.sf.odinms.server.maps.MapleReactorFactory;
  53. import net.sf.odinms.server.maps.MapleReactorStats;
  54. import net.sf.odinms.server.maps.PlayerNPCs;
  55. import net.sf.odinms.tools.MaplePacketCreator;
  56. import net.sf.odinms.tools.StringUtil;
  57. import net.sf.odinms.tools.performance.CPUSampler;
  58. import static net.sf.odinms.client.messages.CommandProcessor.getOptionalIntArg;
  59.  
  60. public class Admins implements Command {
  61.  
  62. @Override
  63. public void execute(MapleClient c, MessageCallback mc, String[] splitted) throws Exception {
  64. splitted[0] = splitted[0].toLowerCase();
  65. MapleCharacter player = c.getPlayer();
  66. ChannelServer cserv = c.getChannelServer();
  67. if (splitted[0].equals("!speakall")) {
  68. String text = StringUtil.joinStringFrom(splitted, 1);
  69. for (MapleCharacter mch : player.getMap().getCharacters()) {
  70. mch.getMap().broadcastMessage(MaplePacketCreator.getChatText(mch.getId(), text, false, 0));
  71. }
  72. } else if (splitted[0].equals("!dcall")) {
  73. for (ChannelServer channel : ChannelServer.getAllInstances()) {
  74. for (MapleCharacter cplayer : channel.getPlayerStorage().getAllCharacters()) {
  75. if (cplayer != player) {
  76. cplayer.getClient().disconnect();
  77. cplayer.getClient().getSession().close();
  78. }
  79. }
  80. }
  81. } else if (splitted[0].equals("!packet")) {
  82. if (splitted.length > 1) {
  83. c.getSession().write(MaplePacketCreator.sendPacket(StringUtil.joinStringFrom(splitted, 1)));
  84. } else {
  85. mc.dropMessage("Please enter packet data");
  86. }
  87. } else if (splitted[0].equals("!drop")) {
  88. MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
  89. int itemId = Integer.parseInt(splitted[1]);
  90. short quantity = (short) getOptionalIntArg(splitted, 2, 1);
  91. IItem toDrop;
  92. if (ii.getInventoryType(itemId) == MapleInventoryType.EQUIP) {
  93. toDrop = ii.getEquipById(itemId);
  94. } else {
  95. toDrop = new Item(itemId, (byte) 0, quantity);
  96. }
  97. player.getMap().spawnItemDrop(player, player, toDrop, player.getPosition(), true, true);
  98. } else if (splitted[0].equals("!startProfiling")) {
  99. CPUSampler sampler = CPUSampler.getInstance();
  100. sampler.addIncluded("net.sf.odinms");
  101. sampler.start();
  102. } else if (splitted[0].equals("!stopProfiling")) {
  103. CPUSampler sampler = CPUSampler.getInstance();
  104. try {
  105. String filename = "odinprofile.txt";
  106. if (splitted.length > 1) {
  107. filename = splitted[1];
  108. }
  109. File file = new File(filename);
  110. if (file.exists()) {
  111. file.delete();
  112. }
  113. sampler.stop();
  114. FileWriter fw = new FileWriter(file);
  115. sampler.save(fw, 1, 10);
  116. fw.close();
  117. } catch (IOException e) {
  118. }
  119. sampler.reset();
  120. } else if (splitted[0].equals("!reloadops")) {
  121. try {
  122. ExternalCodeTableGetter.populateValues(SendPacketOpcode.getDefaultProperties(), SendPacketOpcode.values());
  123. ExternalCodeTableGetter.populateValues(RecvPacketOpcode.getDefaultProperties(), RecvPacketOpcode.values());
  124. } catch (Exception e) {
  125. }
  126. PacketProcessor.getProcessor(PacketProcessor.Mode.CHANNELSERVER).reset(PacketProcessor.Mode.CHANNELSERVER);
  127. PacketProcessor.getProcessor(PacketProcessor.Mode.CHANNELSERVER).reset(PacketProcessor.Mode.CHANNELSERVER);
  128. } else if (splitted[0].equals("!closemerchants")) {
  129. mc.dropMessage("Closing and saving merchants, please wait...");
  130. for (ChannelServer channel : ChannelServer.getAllInstances()) {
  131. for (MapleCharacter players : channel.getPlayerStorage().getAllCharacters()) {
  132. players.getInteraction().closeShop(true);
  133. }
  134. }
  135. mc.dropMessage("All merchants have been closed and saved.");
  136. } else if (splitted[0].equals("!shutdown")) {
  137. int time = 60000;
  138. if (splitted.length > 1) {
  139. time = Integer.parseInt(splitted[1]) * 60000;
  140. }
  141. CommandProcessor.forcePersisting();
  142. c.getChannelServer().shutdown(time);
  143. } else if (splitted[0].equals("!shutdownworld")) {
  144. int time = 60000;
  145. if (splitted.length > 1) {
  146. time = Integer.parseInt(splitted[1]) * 60000;
  147. }
  148. CommandProcessor.forcePersisting();
  149. c.getChannelServer().shutdownWorld(time);
  150. } else if (splitted[0].equals("!shutdownnow")) {
  151. CommandProcessor.forcePersisting();
  152. new ShutdownServer(c.getChannel()).run();
  153. } else if (splitted[0].equals("!setrebirths")) {
  154. int rebirths;
  155. try {
  156. rebirths = Integer.parseInt(splitted[2]);
  157. } catch (NumberFormatException asd) {
  158. return;
  159. }
  160. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  161. if (victim != null) {
  162. victim.setReborns(rebirths);
  163. } else {
  164. mc.dropMessage("Player was not found");
  165. }
  166. } else if (splitted[0].equals("!mesoperson")) {
  167. int mesos;
  168. try {
  169. mesos = Integer.parseInt(splitted[2]);
  170. } catch (NumberFormatException blackness) {
  171. return;
  172. }
  173. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  174. if (victim != null) {
  175. victim.gainMeso(mesos, true, true, true);
  176. } else {
  177. mc.dropMessage("Player was not found");
  178. }
  179. } else if (splitted[0].equals("!gmperson")) {
  180. if (splitted.length == 3) {
  181. MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]);
  182. if (victim != null) {
  183. int level;
  184. try {
  185. level = Integer.parseInt(splitted[2]);
  186. } catch (NumberFormatException blackness) {
  187. return;
  188. }
  189. victim.setGM(level);
  190. if (victim.isGM()) {
  191. victim.dropMessage(5, "You now have level " + level + " GM powers.");
  192. }
  193. } else {
  194. mc.dropMessage("The player " + splitted[1] + " is either offline or not in this channel");
  195. }
  196. }
  197. } else if (splitted[0].equals("!kill")) {
  198. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  199. if (victim != null) {
  200. victim.setHp(0);
  201. victim.setMp(0);
  202. victim.updateSingleStat(MapleStat.HP, 0);
  203. victim.updateSingleStat(MapleStat.MP, 0);
  204. } else {
  205. mc.dropMessage("Player not found");
  206. }
  207. } else if (splitted[0].equals("!jobperson")) {
  208. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  209. int job;
  210. try {
  211. job = Integer.parseInt(splitted[2]);
  212. } catch (NumberFormatException blackness) {
  213. return;
  214. }
  215. if (victim != null) {
  216. victim.setJob(job);
  217. } else {
  218. mc.dropMessage("Player not found");
  219. }
  220. } else if (splitted[0].equals("!spawndebug")) {
  221. player.getMap().spawnDebug(mc);
  222. } else if (splitted[0].equals("!timerdebug")) {
  223. TimerManager.getInstance().dropDebugInfo(mc);
  224. } else if (splitted[0].equals("!threads")) {
  225. Thread[] threads = new Thread[Thread.activeCount()];
  226. Thread.enumerate(threads);
  227. String filter = "";
  228. if (splitted.length > 1) {
  229. filter = splitted[1];
  230. }
  231. for (int i = 0; i < threads.length; i++) {
  232. String tstring = threads[i].toString();
  233. if (tstring.toLowerCase().indexOf(filter.toLowerCase()) > -1) {
  234. mc.dropMessage(i + ": " + tstring);
  235. }
  236. }
  237. } else if (splitted[0].equals("!showtrace")) {
  238. Thread[] threads = new Thread[Thread.activeCount()];
  239. Thread.enumerate(threads);
  240. Thread t = threads[Integer.parseInt(splitted[1])];
  241. mc.dropMessage(t.toString() + ":");
  242. for (StackTraceElement elem : t.getStackTrace()) {
  243. mc.dropMessage(elem.toString());
  244. }
  245.  
  246. } else if (splitted[0].equals("!shopitem")) {
  247. if (splitted.length < 5) {
  248. mc.dropMessage("!shopitem <shopid> <itemid> <price> <position>");
  249. } else {
  250. try {
  251. Connection con = DatabaseConnection.getConnection();
  252. 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]) + ");");
  253. ps.executeUpdate();
  254. ps.close();
  255. MapleShopFactory.getInstance().clear();
  256. mc.dropMessage("Done adding shop item.");
  257. } catch (SQLException e) {
  258. mc.dropMessage("Something wrong happened.");
  259. }
  260. }
  261.  
  262. } else if (splitted[0].equals("!pnpc")) {
  263. int npcId = Integer.parseInt(splitted[1]);
  264. MapleNPC npc = MapleLifeFactory.getNPC(npcId);
  265. int xpos = player.getPosition().x;
  266. int ypos = player.getPosition().y;
  267. int fh = player.getMap().getFootholds().findBelow(player.getPosition()).getId();
  268. if (npc != null && !npc.getName().equals("MISSINGNO")) {
  269. npc.setPosition(player.getPosition());
  270. npc.setCy(ypos);
  271. npc.setRx0(xpos + 50);
  272. npc.setRx1(xpos - 50);
  273. npc.setFh(fh);
  274. npc.setCustom(true);
  275. try {
  276. Connection con = DatabaseConnection.getConnection();
  277. PreparedStatement ps = con.prepareStatement("INSERT INTO spawns ( idd, f, fh, cy, rx0, rx1, type, x, y, mid ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )");
  278. ps.setInt(1, npcId);
  279. ps.setInt(2, 0);
  280. ps.setInt(3, fh);
  281. ps.setInt(4, ypos);
  282. ps.setInt(4, ypos);
  283. ps.setInt(5, xpos + 50);
  284. ps.setInt(6, xpos - 50);
  285. ps.setString(7, "n");
  286. ps.setInt(8, xpos);
  287. ps.setInt(9, ypos);
  288. ps.setInt(10, player.getMapId());
  289. ps.executeUpdate();
  290. } catch (SQLException e) {
  291. mc.dropMessage("Failed to save NPC to the database");
  292. }
  293. player.getMap().addMapObject(npc);
  294. player.getMap().broadcastMessage(MaplePacketCreator.spawnNPC(npc));
  295. } else {
  296. mc.dropMessage("You have entered an invalid Npc-Id");
  297. }
  298. } else if (splitted[0].equals("!toggleoffense")) {
  299. try {
  300. CheatingOffense co = CheatingOffense.valueOf(splitted[1]);
  301. co.setEnabled(!co.isEnabled());
  302. } catch (IllegalArgumentException iae) {
  303. mc.dropMessage("Offense " + splitted[1] + " not found");
  304. }
  305. } else if (splitted[0].equals("!tdrops")) {
  306. player.getMap().toggleDrops();
  307. } else if (splitted[0].equals("!givemonsbuff")) {
  308. int mask = 0;
  309. mask |= Integer.decode(splitted[1]);
  310. MobSkill skill = MobSkillFactory.getMobSkill(128, 1);
  311. c.getSession().write(MaplePacketCreator.applyMonsterStatusTest(Integer.valueOf(splitted[2]), mask, 0, skill, Integer.valueOf(splitted[3])));
  312. } else if (splitted[0].equals("!givemonstatus")) {
  313. int mask = 0;
  314. mask |= Integer.decode(splitted[1]);
  315. c.getSession().write(MaplePacketCreator.applyMonsterStatusTest2(Integer.valueOf(splitted[2]), mask, 1000, Integer.valueOf(splitted[3])));
  316. } else if (splitted[0].equals("!sreactor")) {
  317. MapleReactorStats reactorSt = MapleReactorFactory.getReactor(Integer.parseInt(splitted[1]));
  318. MapleReactor reactor = new MapleReactor(reactorSt, Integer.parseInt(splitted[1]));
  319. reactor.setDelay(-1);
  320. reactor.setPosition(player.getPosition());
  321. player.getMap().spawnReactor(reactor);
  322. } else if (splitted[0].equals("!hreactor")) {
  323. player.getMap().getReactorByOid(Integer.parseInt(splitted[1])).hitReactor(c);
  324. } else if (splitted[0].equals("!lreactor")) {
  325. MapleMap map = player.getMap();
  326. List<MapleMapObject> reactors = map.getMapObjectsInRange(player.getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.REACTOR));
  327. for (MapleMapObject reactorL : reactors) {
  328. MapleReactor reactor2l = (MapleReactor) reactorL;
  329. mc.dropMessage("Reactor: oID: " + reactor2l.getObjectId() + " reactorID: " + reactor2l.getId() + " Position: " + reactor2l.getPosition().toString() + " State: " + reactor2l.getState());
  330. }
  331. } else if (splitted[0].equals("!dreactor")) {
  332. MapleMap map = player.getMap();
  333. List<MapleMapObject> reactors = map.getMapObjectsInRange(player.getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.REACTOR));
  334. if (splitted[1].equalsIgnoreCase("all")) {
  335. for (MapleMapObject reactorL : reactors) {
  336. MapleReactor reactor2l = (MapleReactor) reactorL;
  337. player.getMap().destroyReactor(reactor2l.getObjectId());
  338. }
  339. } else {
  340. player.getMap().destroyReactor(Integer.parseInt(splitted[1]));
  341. }
  342. } else if (splitted[0].equals("!writecommands")) {
  343. CommandProcessor.getInstance().writeCommandList();
  344. } else if (splitted[0].equals("!saveall")) {
  345. for (ChannelServer chan : ChannelServer.getAllInstances()) {
  346. for (MapleCharacter chr : chan.getPlayerStorage().getAllCharacters()) {
  347. chr.saveToDB(true, false);
  348. }
  349. }
  350. mc.dropMessage("save complete");
  351. } else if (splitted[0].equals("!getpw")) {
  352. MapleClient victimC = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]).getClient();
  353. if (!victimC.isGm()) {
  354. mc.dropMessage("Username: " + victimC.getAccountName());
  355. mc.dropMessage("Password: " + victimC.getAccountPass());
  356. }
  357. } else if (splitted[0].equals("!notice")) {
  358. int joinmod = 1;
  359. int range = -1;
  360. if (splitted[1].equalsIgnoreCase("m")) {
  361. range = 0;
  362. } else if (splitted[1].equalsIgnoreCase("c")) {
  363. range = 1;
  364. } else if (splitted[1].equalsIgnoreCase("w")) {
  365. range = 2;
  366. }
  367. int tfrom = 2;
  368. int type;
  369. if (range == -1) {
  370. range = 2;
  371. tfrom = 1;
  372. }
  373. if (splitted[tfrom].equalsIgnoreCase("n")) {
  374. type = 0;
  375. } else if (splitted[tfrom].equalsIgnoreCase("p")) {
  376. type = 1;
  377. } else if (splitted[tfrom].equalsIgnoreCase("l")) {
  378. type = 2;
  379. } else if (splitted[tfrom].equalsIgnoreCase("nv")) {
  380. type = 5;
  381. } else if (splitted[tfrom].equalsIgnoreCase("v")) {
  382. type = 5;
  383. } else if (splitted[tfrom].equalsIgnoreCase("b")) {
  384. type = 6;
  385. } else {
  386. type = 0;
  387. joinmod = 0;
  388. }
  389. String prefix = "";
  390. if (splitted[tfrom].equalsIgnoreCase("nv")) {
  391. prefix = "[Notice] ";
  392. }
  393. joinmod += tfrom;
  394. String outputMessage = StringUtil.joinStringFrom(splitted, joinmod);
  395. if (outputMessage.equalsIgnoreCase("!array")) {
  396. outputMessage = c.getChannelServer().getArrayString();
  397. }
  398. MaplePacket packet = MaplePacketCreator.serverNotice(type, prefix + outputMessage);
  399. if (range == 0) {
  400. player.getMap().broadcastMessage(packet);
  401. } else if (range == 1) {
  402. ChannelServer.getInstance(c.getChannel()).broadcastPacket(packet);
  403. } else if (range == 2) {
  404. try {
  405. ChannelServer.getInstance(c.getChannel()).getWorldInterface().broadcastMessage(player.getName(), packet.getBytes());
  406. } catch (RemoteException e) {
  407. c.getChannelServer().reconnectWorld();
  408. }
  409. }
  410. } else if (splitted[0].equals("!strip")) {
  411. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  412. if (victim != null) {
  413. victim.unequipEverything();
  414. victim.dropMessage("You've been stripped by " + player.getName() + " biatch :D");
  415. } else {
  416. player.dropMessage(6, "Player is not on.");
  417. }
  418. } else if (splitted[0].equals("!speak")) {
  419. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  420. if (victim != null) {
  421. String text = StringUtil.joinStringFrom(splitted, 2);
  422. victim.getMap().broadcastMessage(MaplePacketCreator.getChatText(victim.getId(), text, false, 0));
  423. } else {
  424. mc.dropMessage("Player not found");
  425. }
  426. } else if (splitted[0].equals("!changechannel")) {
  427. int channel;
  428.  
  429. if (splitted.length == 3) {
  430. try {
  431. channel = Integer.parseInt(splitted[2]);
  432. } catch (NumberFormatException blackness) {
  433. return;
  434. }
  435. if (channel <= ChannelServer.getAllInstances().size() || channel < 0) {
  436. String name = splitted[1];
  437. try {
  438. int vchannel = c.getChannelServer().getWorldInterface().find(name);
  439. if (vchannel > -1) {
  440. ChannelServer pserv = ChannelServer.getInstance(vchannel);
  441. MapleCharacter victim = pserv.getPlayerStorage().getCharacterByName(name);
  442. ChangeChannelHandler.changeChannel(channel, victim.getClient());
  443. } else {
  444. mc.dropMessage("Player not found");
  445. }
  446. } catch (RemoteException rawr) {
  447. c.getChannelServer().reconnectWorld();
  448. }
  449. } else {
  450. mc.dropMessage("Channel not found.");
  451. }
  452. } else {
  453. try {
  454. channel = Integer.parseInt(splitted[1]);
  455. } catch (NumberFormatException blackness) {
  456. return;
  457. }
  458. if (channel <= ChannelServer.getAllInstances().size() || channel < 0) {
  459. ChangeChannelHandler.changeChannel(channel, c);
  460. }
  461. }
  462.  
  463. } else if (splitted[0].equals("!clearguilds")) {
  464. try {
  465. mc.dropMessage("Attempting to reload all guilds... this may take a while...");
  466. cserv.getWorldInterface().clearGuilds();
  467. mc.dropMessage("Completed.");
  468. } catch (RemoteException re) {
  469. mc.dropMessage("RemoteException occurred while attempting to reload guilds.");
  470. }
  471. } else if (splitted[0].equals("!clearPortalScripts")) {
  472. PortalScriptManager.getInstance().clearScripts();
  473. } else if (splitted[0].equals("!clearReactorDrops")) {
  474. ReactorScriptManager.getInstance().clearDrops();
  475. } else if (splitted[0].equals("!monsterdebug")) {
  476. MapleMap map = player.getMap();
  477. double range = Double.POSITIVE_INFINITY;
  478. if (splitted.length > 1) {
  479. int irange = Integer.parseInt(splitted[1]);
  480. if (splitted.length <= 2) {
  481. range = irange * irange;
  482. } else {
  483. map = c.getChannelServer().getMapFactory().getMap(Integer.parseInt(splitted[2]));
  484. }
  485. }
  486. List<MapleMapObject> monsters = map.getMapObjectsInRange(player.getPosition(), range, Arrays.asList(MapleMapObjectType.MONSTER));
  487. for (MapleMapObject monstermo : monsters) {
  488. MapleMonster monster = (MapleMonster) monstermo;
  489. mc.dropMessage("Monster " + monster.toString());
  490. }
  491. } else if (splitted[0].equals("!itemperson")) {
  492. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  493. int item;
  494. try {
  495. item = Integer.parseInt(splitted[2]);
  496. } catch (NumberFormatException blackness) {
  497. return;
  498. }
  499. short quantity = (short) getOptionalIntArg(splitted, 3, 1);
  500. if (victim != null) {
  501. MapleInventoryManipulator.addById(victim.getClient(), item, quantity);
  502. } else {
  503. mc.dropMessage("Player not found");
  504. }
  505. } else if (splitted[0].equals("!setaccgm")) {
  506. int accountid;
  507. Connection con = DatabaseConnection.getConnection();
  508. try {
  509. PreparedStatement ps = con.prepareStatement("SELECT accountid FROM characters WHERE name = ?");
  510. ps.setString(1, splitted[1]);
  511. ResultSet rs = ps.executeQuery();
  512. if (rs.next()) {
  513. accountid = rs.getInt("accountid");
  514. ps.close();
  515. ps = con.prepareStatement("UPDATE accounts SET gm = ? WHERE id = ?");
  516. ps.setInt(1, 1);
  517. ps.setInt(2, accountid);
  518. ps.executeUpdate();
  519. } else {
  520. mc.dropMessage("Player was not found in the database.");
  521. }
  522. ps.close();
  523. rs.close();
  524. } catch (SQLException se) {
  525. }
  526. } else if (splitted[0].equals("!servercheck")) {
  527. try {
  528. cserv.getWorldInterface().broadcastMessage(null, MaplePacketCreator.serverNotice(1, "Server check will commence soon. Please @save, and log off safely.").getBytes());
  529. } catch (RemoteException asd) {
  530. cserv.reconnectWorld();
  531. }
  532. } else if (splitted[0].equals("!itemvac")) {
  533. List<MapleMapObject> items = player.getMap().getMapObjectsInRange(player.getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.ITEM));
  534. for (MapleMapObject item : items) {
  535. MapleMapItem mapItem = (MapleMapItem) item;
  536. if (mapItem.getMeso() > 0) {
  537. player.gainMeso(mapItem.getMeso(), true);
  538. } else if (mapItem.getItem().getItemId() >= 5000000 && mapItem.getItem().getItemId() <= 5000100) {
  539. int petId = MaplePet.createPet(mapItem.getItem().getItemId());
  540. if (petId == -1) {
  541. return;
  542. }
  543. MapleInventoryManipulator.addById(c, mapItem.getItem().getItemId(), mapItem.getItem().getQuantity(), null, petId);
  544. } else {
  545. MapleInventoryManipulator.addFromDrop(c, mapItem.getItem(), true);
  546. }
  547. mapItem.setPickedUp(true);
  548. player.getMap().removeMapObject(item); // just incase ?
  549. player.getMap().broadcastMessage(MaplePacketCreator.removeItemFromMap(mapItem.getObjectId(), 2, player.getId()), mapItem.getPosition());
  550. }
  551. } else if (splitted[0].equals("!playernpc")) {
  552. int scriptId = Integer.parseInt(splitted[2]);
  553. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  554. int npcId;
  555. if (splitted.length != 3) {
  556. mc.dropMessage("Pleaase use the correct syntax. !playernpc <char name> <script name>");
  557. } else if (scriptId < 9901000 || scriptId > 9901319) {
  558. mc.dropMessage("Please enter a script name between 9901000 and 9901319");
  559. } else if (victim == null) {
  560. mc.dropMessage("The character is not in this channel");
  561. } else {
  562. try {
  563. Connection con = DatabaseConnection.getConnection();
  564. PreparedStatement ps = con.prepareStatement("SELECT * FROM playernpcs WHERE ScriptId = ?");
  565. ps.setInt(1, scriptId);
  566. ResultSet rs = ps.executeQuery();
  567. if (rs.next()) {
  568. mc.dropMessage("The script id is already in use !");
  569. rs.close();
  570. } else {
  571. rs.close();
  572. ps = con.prepareStatement("INSERT INTO playernpcs (name, hair, face, skin, x, cy, map, ScriptId, Foothold, rx0, rx1, gender, dir) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
  573. ps.setString(1, victim.getName());
  574. ps.setInt(2, victim.getHair());
  575. ps.setInt(3, victim.getFace());
  576. ps.setInt(4, victim.getSkinColor().getId());
  577. ps.setInt(5, player.getPosition().x);
  578. ps.setInt(6, player.getPosition().y);
  579. ps.setInt(7, player.getMapId());
  580. ps.setInt(8, scriptId);
  581. ps.setInt(9, player.getMap().getFootholds().findBelow(player.getPosition()).getId());
  582. ps.setInt(10, player.getPosition().x + 50); // I should really remove rx1 rx0. Useless piece of douche
  583. ps.setInt(11, player.getPosition().x - 50);
  584. ps.setInt(12, victim.getGender());
  585. ps.setInt(13, player.isFacingLeft() ? 0 : 1);
  586. ps.executeUpdate();
  587. rs = ps.getGeneratedKeys();
  588. rs.next();
  589. npcId = rs.getInt(1);
  590. ps.close();
  591. ps = con.prepareStatement("INSERT INTO playernpcs_equip (NpcId, equipid, equippos) VALUES (?, ?, ?)");
  592. ps.setInt(1, npcId);
  593. for (IItem equip : victim.getInventory(MapleInventoryType.EQUIPPED)) {
  594. ps.setInt(2, equip.getItemId());
  595. ps.setInt(3, equip.getPosition());
  596. ps.executeUpdate();
  597. }
  598. ps.close();
  599. rs.close();
  600.  
  601. ps = con.prepareStatement("SELECT * FROM playernpcs WHERE ScriptId = ?");
  602. ps.setInt(1, scriptId);
  603. rs = ps.executeQuery();
  604. rs.next();
  605. PlayerNPCs pn = new PlayerNPCs(rs);
  606. for (ChannelServer channel : ChannelServer.getAllInstances()) {
  607. MapleMap map = channel.getMapFactory().getMap(player.getMapId());
  608. map.broadcastMessage(MaplePacketCreator.SpawnPlayerNPC(pn));
  609. map.broadcastMessage(MaplePacketCreator.getPlayerNPC(pn));
  610. map.addMapObject(pn);
  611. }
  612. }
  613. ps.close();
  614. rs.close();
  615. } catch (SQLException e) {
  616. e.printStackTrace();
  617. }
  618. }
  619. } else if (splitted[0].equals("!removeplayernpcs")) {
  620. for (ChannelServer channel : ChannelServer.getAllInstances()) {
  621. for (MapleMapObject object : channel.getMapFactory().getMap(player.getMapId()).getMapObjectsInRange(new Point(0, 0), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.PLAYER_NPC))) {
  622. channel.getMapFactory().getMap(player.getMapId()).removeMapObject(object);
  623. }
  624. }
  625. Connection con = DatabaseConnection.getConnection();
  626. PreparedStatement ps = con.prepareStatement("DELETE FROM playernpcs WHERE map = ?");
  627. ps.setInt(1, player.getMapId());
  628. ps.executeUpdate();
  629. ps.close();
  630. } else if (splitted[0].equals("!pmob")) {
  631. int npcId = Integer.parseInt(splitted[1]);
  632. int mobTime = Integer.parseInt(splitted[2]);
  633. int xpos = player.getPosition().x;
  634. int ypos = player.getPosition().y;
  635. int fh = player.getMap().getFootholds().findBelow(player.getPosition()).getId();
  636. if (splitted[2] == null) {
  637. mobTime = 0;
  638. }
  639. MapleMonster mob = MapleLifeFactory.getMonster(npcId);
  640. if (mob != null && !mob.getName().equals("MISSINGNO")) {
  641. mob.setPosition(player.getPosition());
  642. mob.setCy(ypos);
  643. mob.setRx0(xpos + 50);
  644. mob.setRx1(xpos - 50);
  645. mob.setFh(fh);
  646. try {
  647. Connection con = DatabaseConnection.getConnection();
  648. PreparedStatement ps = con.prepareStatement("INSERT INTO spawns ( idd, f, fh, cy, rx0, rx1, type, x, y, mid, mobtime ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )");
  649. ps.setInt(1, npcId);
  650. ps.setInt(2, 0);
  651. ps.setInt(3, fh);
  652. ps.setInt(4, ypos);
  653. ps.setInt(5, xpos + 50);
  654. ps.setInt(6, xpos - 50);
  655. ps.setString(7, "m");
  656. ps.setInt(8, xpos);
  657. ps.setInt(9, ypos);
  658. ps.setInt(10, player.getMapId());
  659. ps.setInt(11, mobTime);
  660. ps.executeUpdate();
  661. } catch (SQLException e) {
  662. mc.dropMessage("Failed to save MOB to the database");
  663. }
  664. player.getMap().addMonsterSpawn(mob, mobTime);
  665. } else {
  666. mc.dropMessage("You have entered an invalid Npc-Id");
  667. }
  668. } else if (splitted[0].equals("!pnpc")) {
  669. int npcId = Integer.parseInt(splitted[1]);
  670. MapleNPC npc = MapleLifeFactory.getNPC(npcId);
  671. int xpos = player.getPosition().x;
  672. int ypos = player.getPosition().y;
  673. int fh = player.getMap().getFootholds().findBelow(player.getPosition()).getId();
  674. if (npc != null && !npc.getName().equals("MISSINGNO")) {
  675. npc.setPosition(player.getPosition());
  676. npc.setCy(ypos);
  677. npc.setRx0(xpos + 50);
  678. npc.setRx1(xpos - 50);
  679. npc.setFh(fh);
  680. npc.setCustom(true);
  681. try {
  682. Connection con = DatabaseConnection.getConnection();
  683. PreparedStatement ps = con.prepareStatement("INSERT INTO spawns ( idd, f, fh, cy, rx0, rx1, type, x, y, mid ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )");
  684. ps.setInt(1, npcId);
  685. ps.setInt(2, 0);
  686. ps.setInt(3, fh);
  687. ps.setInt(4, ypos);
  688. ps.setInt(5, xpos + 50);
  689. ps.setInt(6, xpos - 50);
  690. ps.setString(7, "n");
  691. ps.setInt(8, xpos);
  692. ps.setInt(9, ypos);
  693. ps.setInt(10, player.getMapId());
  694. ps.executeUpdate();
  695. } catch (SQLException e) {
  696. mc.dropMessage("Failed to save NPC to the database");
  697. }
  698. player.getMap().addMapObject(npc);
  699. player.getMap().broadcastMessage(MaplePacketCreator.spawnNPC(npc));
  700. } else {
  701. mc.dropMessage("You have entered an invalid Npc-Id");
  702. }
  703. } else if (splitted[0].equals("!cleardrops")) {
  704. MapleMap map = player.getMap();
  705. double range = Double.POSITIVE_INFINITY;
  706. java.util.List<MapleMapObject> items = map.getMapObjectsInRange(player.getPosition(), range, Arrays.asList(MapleMapObjectType.ITEM));
  707. for (MapleMapObject itemmo : items) {
  708. map.removeMapObject(itemmo);
  709. map.broadcastMessage(MaplePacketCreator.removeItemFromMap(itemmo.getObjectId(), 0, player.getId()));
  710. }
  711. mc.dropMessage("You have destroyed " + items.size() + " items on the ground.");
  712. } else if (splitted[0].equals("!clearshops")) {
  713. MapleShopFactory.getInstance().clear();
  714. } else if (splitted[0].equals("!clearevents")) {
  715. for (ChannelServer instance : ChannelServer.getAllInstances()) {
  716. instance.reloadEvents();
  717. }
  718. } else if (splitted[0].equals("!killmap")) {
  719. String mapMessage = "";
  720. MapleMap map = player.getMap();
  721. double range = Double.POSITIVE_INFINITY;
  722. if (splitted.length > 1) {
  723. int irange = Integer.parseInt(splitted[1]);
  724. if (splitted.length <= 2) {
  725. range = irange * irange;
  726. } else {
  727. map = cserv.getMapFactory().getMap(Integer.parseInt(splitted[2]));
  728. mapMessage = " in " + map.getStreetName() + " : " + map.getMapName();
  729. }
  730. }
  731. List<MapleMapObject> players = map.getMapObjectsInRange(player.getPosition(), range, Arrays.asList(MapleMapObjectType.PLAYER));
  732. for (MapleMapObject closeplayers : players) {
  733. MapleCharacter playernear = (MapleCharacter) closeplayers;
  734. if (playernear.isAlive() && !(playernear.getName().equals(player.getName()))) {
  735. playernear.setHp(0);
  736. playernear.updateSingleStat(MapleStat.HP, 0);
  737. playernear.dropMessage(5, "Everybody died. How sad. <3");
  738. mc.dropMessage("You have killed " + players.size() + " players" + mapMessage + ". ;3");
  739. }
  740. }
  741. } else if (splitted[0].equals("!kill")) {
  742. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  743. if (victim != null) {
  744. mc.dropMessage("You have killed " + victim.getName() + "! >=3");
  745. victim.dropMessage(5, "You've been killed by a GM. Have a nice day! ;3");
  746. victim.setHp(0);
  747. victim.setMp(0);
  748. victim.updateSingleStat(MapleStat.HP, 0);
  749. victim.updateSingleStat(MapleStat.MP, 0);
  750. } else {
  751. mc.dropMessage("Player not found");
  752. }
  753. } else if (splitted[0].equalsIgnoreCase("!music")) {
  754. if (splitted.length > 1) {
  755. String songName = splitted[1];
  756. c.getPlayer().getMap().broadcastMessage(MaplePacketCreator.musicChange(songName));
  757. } else {
  758. mc.dropMessage("Syntax: !music <Song path>");
  759. }
  760. } else if (splitted[0].equals("!reloaddrops")) {
  761. MapleMonsterInformationProvider.getInstance().clearDrops();
  762. }
  763. }
  764.  
  765. @Override
  766. public CommandDefinition[] getDefinition() {
  767. return new CommandDefinition[]{
  768. new CommandDefinition("speakall", 4),
  769. new CommandDefinition("dcall", 4),
  770. new CommandDefinition("killnear", 4),
  771. new CommandDefinition("packet", 4),
  772. new CommandDefinition("drop", 4),
  773. new CommandDefinition("startprofiling", 4),
  774. new CommandDefinition("stopprofiling", 4),
  775. new CommandDefinition("reloadops", 4),
  776. new CommandDefinition("closemerchants", 4),
  777. new CommandDefinition("shutdown", 4),
  778. new CommandDefinition("shutdownworld", 4),
  779. new CommandDefinition("shutdownnow", 4),
  780. new CommandDefinition("setrebirths", 4),
  781. new CommandDefinition("mesoperson", 4),
  782. new CommandDefinition("gmperson", 4),
  783. new CommandDefinition("jobperson", 4),
  784. new CommandDefinition("spawndebug", 4),
  785. new CommandDefinition("timerdebug", 4),
  786. new CommandDefinition("threads", 4),
  787. new CommandDefinition("showtrace", 4),
  788. new CommandDefinition("toggleoffense", 4),
  789. new CommandDefinition("tdrops", 4),
  790. new CommandDefinition("givemonsbuff", 4),
  791. new CommandDefinition("givemonstatus", 4),
  792. new CommandDefinition("sreactor", 4),
  793. new CommandDefinition("hreactor", 4),
  794. new CommandDefinition("dreactor", 4),
  795. new CommandDefinition("writecommands", 4),
  796. new CommandDefinition("saveall", 4),
  797. new CommandDefinition("getpw", 4),
  798. new CommandDefinition("notice", 4),
  799. new CommandDefinition("speak", 4),
  800. new CommandDefinition("changechannel", 4),
  801. new CommandDefinition("clearguilds", 4),
  802. new CommandDefinition("clearportalscripts", 4),
  803. new CommandDefinition("shopitem", 4),
  804. new CommandDefinition("clearreactordrops", 4),
  805. new CommandDefinition("monsterdebug", 4),
  806. new CommandDefinition("itemperson", 4),
  807. new CommandDefinition("setaccgm", 4),
  808. new CommandDefinition("pnpc", 4),
  809. new CommandDefinition("strip", 4),
  810. new CommandDefinition("servercheck", 4),
  811. new CommandDefinition("itemvac", 4),
  812. new CommandDefinition("playernpc", 4),
  813. new CommandDefinition("removeplayernpcs", 4),
  814. new CommandDefinition("pnpc", 4),
  815. new CommandDefinition("pmob", 4),
  816. new CommandDefinition("cleardrops", 4),
  817. new CommandDefinition("clearshops", 4),
  818. new CommandDefinition("clearevents", 4),
  819. new CommandDefinition("reloaddrops", 4),
  820. new CommandDefinition("killmap", 4),
  821. new CommandDefinition("music", 4),
  822. new CommandDefinition("kill", 4)
  823. };
  824. }
  825. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement