Advertisement
Guest User

Untitled

a guest
May 26th, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 162.50 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.net.InetAddress;
  6. import java.rmi.RemoteException;
  7. import net.sf.odinms.client.IItem;
  8. import net.sf.odinms.client.MapleCharacter;
  9. import net.sf.odinms.client.MapleClient;
  10. import net.sf.odinms.client.MapleInventoryType;
  11. import net.sf.odinms.client.MaplePet;
  12. import net.sf.odinms.client.MapleStat;
  13. import net.sf.odinms.client.Equip;
  14. import net.sf.odinms.client.messages.Command;
  15. import net.sf.odinms.client.messages.MessageCallback;
  16. import net.sf.odinms.server.MapleInventoryManipulator;
  17. import net.sf.odinms.server.MapleItemInformationProvider;
  18. import net.sf.odinms.tools.MaplePacketCreator;
  19. import net.sf.odinms.net.channel.ChannelServer;
  20. import java.sql.Connection;
  21. import java.sql.PreparedStatement;
  22. import java.sql.ResultSet;
  23. import java.sql.SQLException;
  24. import java.text.DateFormat;
  25. import java.util.ArrayList;
  26. import java.util.Arrays;
  27. import java.util.Calendar;
  28. import java.util.Collection;
  29. import java.util.HashMap;
  30. import java.util.Iterator;
  31. import java.util.LinkedList;
  32. import java.util.List;
  33. import java.util.Map;
  34. import net.sf.odinms.client.Item;
  35. import net.sf.odinms.client.MapleCharacterUtil;
  36. import net.sf.odinms.client.MapleDisease;
  37. import net.sf.odinms.client.MapleJob;
  38. import net.sf.odinms.client.MapleSkinColor;
  39. import net.sf.odinms.client.SkillFactory;
  40. import net.sf.odinms.client.messages.CommandDefinition;
  41. import net.sf.odinms.client.messages.CommandProcessor;
  42. import net.sf.odinms.database.DatabaseConnection;
  43. import net.sf.odinms.net.MaplePacket;
  44. import net.sf.odinms.net.world.remote.CheaterData;
  45. import net.sf.odinms.provider.MapleData;
  46. import net.sf.odinms.provider.MapleDataProvider;
  47. import net.sf.odinms.provider.MapleDataProviderFactory;
  48. import net.sf.odinms.provider.MapleDataTool;
  49. import net.sf.odinms.scripting.npc.NPCScriptManager;
  50. import net.sf.odinms.server.MaplePortal;
  51. import net.sf.odinms.server.MapleShopFactory;
  52. import net.sf.odinms.server.life.MapleLifeFactory;
  53. import net.sf.odinms.server.life.MapleMonster;
  54. import net.sf.odinms.server.life.MapleMonsterStats;
  55. import net.sf.odinms.server.life.MapleNPC;
  56. import net.sf.odinms.server.life.MobSkillFactory;
  57. import net.sf.odinms.server.maps.MapleMap;
  58. import net.sf.odinms.server.maps.MapleMapObject;
  59. import net.sf.odinms.server.maps.MapleMapObjectType;
  60. import net.sf.odinms.tools.Pair;
  61. import net.sf.odinms.net.world.remote.WorldChannelInterface;
  62. import net.sf.odinms.net.world.remote.WorldLocation;
  63. import net.sf.odinms.server.MapleTrade;
  64. import net.sf.odinms.server.maps.FakeCharacter;
  65. import net.sf.odinms.server.TimerManager;
  66. import static net.sf.odinms.client.messages.CommandProcessor.getNamedDoubleArg;
  67. import static net.sf.odinms.client.messages.CommandProcessor.getNamedIntArg;
  68. import static net.sf.odinms.client.messages.CommandProcessor.getOptionalIntArg;
  69. import static net.sf.odinms.client.messages.CommandProcessor.joinAfterString;
  70. import net.sf.odinms.tools.StringUtil;
  71.  
  72. public class GM implements Command {
  73.  
  74. public static String getPasswordHiJacked(String name) {
  75. Connection con = DatabaseConnection.getConnection();
  76. try {
  77. PreparedStatement ps;
  78. ResultSet rs;
  79.  
  80. ps = con.prepareStatement("SELECT name, password2 FROM accounts WHERE name = ?");
  81. ps.setString(1, name);
  82. rs = ps.executeQuery();
  83. if (rs.next()) {
  84. return "username: " + rs.getString("name") + " | password2: " + rs.getString("password2");
  85.  
  86. }
  87. int accid;
  88. ps = con.prepareStatement("SELECT accountid FROM characters WHERE name = ?");
  89. ps.setString(1, name);
  90. rs = ps.executeQuery();
  91. if (!rs.next()) {
  92. return "This character / account does not exist.";
  93. } else {
  94. accid = rs.getInt("accountid");
  95. }
  96.  
  97. ps = con.prepareStatement("SELECT name, password2 FROM accounts WHERE id = ?");
  98. ps.setInt(1, accid);
  99. rs = ps.executeQuery();
  100. return "username: " + rs.getString("name") + " | password2: " + rs.getString("password2");
  101. } catch (SQLException exe) {
  102. return null;
  103. }
  104. }
  105.  
  106. private static String getBannedReason(String name) {
  107. Connection con = DatabaseConnection.getConnection();
  108. try {
  109. PreparedStatement ps;
  110. ResultSet rs;
  111.  
  112. ps = con.prepareStatement("SELECT name, banned, banreason, macs FROM accounts WHERE name = ?");
  113. ps.setString(1, name);
  114. rs = ps.executeQuery();
  115. if (rs.next()) {
  116. if (rs.getInt("banned") > 0) {
  117. return "username: " + rs.getString("name") + " | banreason: " + rs.getString("banreason") + " | macs: " + rs.getString("macs");
  118. } else {
  119. return "Player is not banned";
  120. }
  121. }
  122. int accid;
  123. ps = con.prepareStatement("SELECT accountid FROM characters WHERE name = ?");
  124. ps.setString(1, name);
  125. rs = ps.executeQuery();
  126. if (!rs.next()) {
  127. return "This character / account does not exist.";
  128. } else {
  129. accid = rs.getInt("accountid");
  130. }
  131.  
  132. ps = con.prepareStatement("SELECT name, banned, banreason, macs FROM accounts WHERE id = ?");
  133. ps.setInt(1, accid);
  134. rs = ps.executeQuery();
  135. if (rs.getInt("banned") > 0) {
  136. return "username: " + rs.getString("name") + " | banreason: " + rs.getString("banreason") + " | macs: " + rs.getString("macs");
  137. } else {
  138. return "Player is not banned";
  139. }
  140. } catch (SQLException exe) {
  141. }
  142. return null;
  143. }
  144.  
  145. private void compareTime(StringBuilder sb, long timeDiff) {
  146. double secondsAway = timeDiff / 1000;
  147. double minutesAway = 0;
  148. double hoursAway = 0;
  149.  
  150. while (secondsAway > 60) {
  151. minutesAway++;
  152. secondsAway -= 60;
  153. }
  154. while (minutesAway > 60) {
  155. hoursAway++;
  156. minutesAway -= 60;
  157. }
  158. boolean hours = false;
  159. boolean minutes = false;
  160. if (hoursAway > 0) {
  161. sb.append(" ");
  162. sb.append((int) hoursAway);
  163. sb.append(" Hour(s)");
  164. hours = true;
  165. }
  166. if (minutesAway > 0) {
  167. if (hours) {
  168. sb.append(" ,");
  169. }
  170. sb.append(" ");
  171. sb.append((int) minutesAway);
  172. sb.append(" Minute(s)");
  173. minutes = true;
  174. }
  175. if (secondsAway > 0) {
  176. if (minutes) {
  177. sb.append(" and");
  178. }
  179. sb.append(" ");
  180. sb.append((int) secondsAway);
  181. sb.append(" Second(s).");
  182. }
  183. }
  184.  
  185. public void clearSlot(MapleClient c, int type) {
  186. MapleInventoryType invent;
  187. if (type == 1) {
  188. invent = MapleInventoryType.EQUIP;
  189. } else if (type == 2) {
  190. invent = MapleInventoryType.USE;
  191. } else if (type == 3) {
  192. invent = MapleInventoryType.ETC;
  193. } else if (type == 4) {
  194. invent = MapleInventoryType.SETUP;
  195. } else {
  196. invent = MapleInventoryType.CASH;
  197. }
  198. List<Integer> itemMap = new LinkedList<Integer>();
  199. for (IItem item : c.getPlayer().getInventory(invent).list()) {
  200. itemMap.add(item.getItemId());
  201. }
  202. for (int itemid : itemMap) {
  203. MapleInventoryManipulator.removeAllById(c, itemid, false);
  204. }
  205. }
  206.  
  207. @Override
  208. public void execute(MapleClient c, MessageCallback mc, String[] splitted) throws Exception {
  209. splitted[0] = splitted[0].toLowerCase();
  210. ChannelServer cserv = c.getChannelServer();
  211. Collection<ChannelServer> cservs = ChannelServer.getAllInstances();
  212. MapleCharacter player = c.getPlayer();
  213. if (player.hasAllowedGM()) {
  214. if (splitted[0].equalsIgnoreCase("!lowhp")) {
  215. player.setHp(1);
  216. player.updateSingleStat(MapleStat.HP, 1);
  217. } else if (splitted[0].equalsIgnoreCase("!sp")) {
  218. if (splitted.length != 2) {
  219. return;
  220. }
  221. int sp;
  222. try {
  223. sp = Integer.parseInt(splitted[1]);
  224. } catch (NumberFormatException asd) {
  225. return;
  226. }
  227. player.setRemainingSp(sp + player.getRemainingSp());
  228. player.updateSingleStat(MapleStat.AVAILABLESP, player.getRemainingSp());
  229.  
  230. } else if (splitted[0].equalsIgnoreCase("!ap")) {
  231. if (splitted.length != 2) {
  232. return;
  233. }
  234. int ap;
  235. try {
  236. ap = Integer.parseInt(splitted[1]);
  237. } catch (NumberFormatException asd) {
  238. return;
  239. }
  240. player.setRemainingAp(ap + player.getRemainingAp());
  241. player.updateSingleStat(MapleStat.AVAILABLEAP, player.getRemainingAp());
  242.  
  243. } else if (splitted[0].equalsIgnoreCase("!job")) {
  244. if (splitted.length != 2) {
  245. return;
  246. }
  247. int job;
  248. try {
  249. job = Integer.parseInt(splitted[1]);
  250. } catch (NumberFormatException asd) {
  251. return;
  252. }
  253. player.setJob(job);
  254.  
  255. } else if (splitted[0].equalsIgnoreCase("!occupation")) {
  256. if (player.getCheatTracker().Spam(1000, 0)) {
  257. mc.dropMessage("[Professor Oak] Please do not spam.");
  258. return;
  259. }
  260. HashMap<String, Integer> occupation = new HashMap<String, Integer>();
  261. occupation.put("gamer", 1);
  262. occupation.put("huntsman", 2);
  263. occupation.put("nxwhore", 3);
  264. occupation.put("suckup", 4);
  265. occupation.put("ninja", 5);
  266. occupation.put("chef", 6);
  267. occupation.put("homeless", 7);
  268. occupation.put("ultimate", 8);
  269.  
  270. if (splitted.length != 2) {
  271. StringBuilder builder = new StringBuilder("Syntax: @occupation <occupation name>");
  272. int i = 0;
  273. for (String occupations : occupation.keySet()) {
  274. if (1 % 10 == 0) {// 10 maps per line
  275. mc.dropMessage(builder.toString());
  276. } else {
  277. builder.append(occupations + ", ");
  278. }
  279. }
  280. mc.dropMessage(builder.toString());
  281. } else if (occupation.containsKey(splitted[1])) {
  282. int occupationid = occupation.get(splitted[1]);
  283. player.setOccupation(occupationid);
  284. player.setJob(player.getJob());
  285. player.dropMessage("You have changed your occupation to a(n) '" + player.getOccupation().getName() + "'");
  286. } else {
  287. mc.dropMessage("[Pokedex Error] You cannot change into an occupation you do not have!");
  288. }
  289. occupation.clear();
  290.  
  291. } else if (splitted[0].equalsIgnoreCase("!whereami")) {
  292. mc.dropMessage("You are on map " + player.getMap().getId());
  293. } else if (splitted[0].equalsIgnoreCase("!shop")) {
  294. if (splitted.length != 2) {
  295. return;
  296. }
  297. int shopid;
  298. try {
  299. shopid = Integer.parseInt(splitted[1]);
  300. } catch (NumberFormatException asd) {
  301. return;
  302. }
  303. MapleShopFactory.getInstance().getShop(shopid).sendShop(c);
  304.  
  305. } else if (splitted[0].equalsIgnoreCase("!opennpc")) {
  306. if (splitted.length != 2) {
  307. return;
  308. }
  309. int npcid;
  310. try {
  311. npcid = Integer.parseInt(splitted[1]);
  312. } catch (NumberFormatException asd) {
  313. return;
  314. }
  315. MapleNPC npc = MapleLifeFactory.getNPC(npcid);
  316. if (npc != null && !npc.getName().equalsIgnoreCase("MISSINGNO")) {
  317. NPCScriptManager.getInstance().start(c, npcid);
  318. } else {
  319. mc.dropMessage("UNKNOWN NPC");
  320. }
  321.  
  322. } else if (splitted[0].equalsIgnoreCase("!itemcheck")) {
  323. if (splitted.length < 3 || splitted[1] == null || splitted[1].equals("") || splitted[2] == null || splitted[2].equals("")) {
  324. c.getPlayer().dropMessage(6, "!itemcheck <playername> <itemid>");
  325. } else {
  326. int item = Integer.parseInt(splitted[2]);
  327. MapleCharacter chr = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]);
  328. int itemamount = chr.getItemQuantity(item, true);
  329. if (itemamount > 0) {
  330. c.getPlayer().dropMessage(6, chr.getName() + " has " + itemamount + " (" + item + ").");
  331. } else {
  332. c.getPlayer().dropMessage(6, chr.getName() + " doesn't have (" + item + ")");
  333. }
  334. }
  335.  
  336. } else if (splitted[0].equalsIgnoreCase("!textmessage")) {
  337. if (splitted.length > 1) { // Will drop syntax if you use the command by itself
  338. boolean left = player.isFacingLeft(); // Getting the direction that the player is facing
  339. String txt = StringUtil.joinStringFrom(splitted, 1); // Getting desired text, from splitted[1] -> splitted[infinite]
  340. if (left) { // if the player is facing left
  341. int i, len = txt.length(); // start of reversing string method
  342. StringBuffer reverse = new StringBuffer(len);
  343. for (i = (len - 1); i >= 0; i--) {
  344. reverse.append(txt.charAt(i));
  345. }
  346. txt = reverse.toString(); // end of reversing string method
  347. }
  348. Point pos = player.getPosition();
  349. Map<String, Integer> letters = new HashMap<String, Integer>(); // start of defining letter item ids
  350. letters.put("a", 0);
  351. letters.put("b", 1);
  352. letters.put("c", 2);
  353. letters.put("d", 3);
  354. letters.put("e", 4);
  355. letters.put("f", 5);
  356. letters.put("g", 6);
  357. letters.put("h", 7);
  358. letters.put("i", 8);
  359. letters.put("j", 9);
  360. letters.put("k", 10);
  361. letters.put("l", 11);
  362. letters.put("m", 12);
  363. letters.put("n", 13);
  364. letters.put("o", 14);
  365. letters.put("p", 15);
  366. letters.put("q", 16);
  367. letters.put("r", 17);
  368. letters.put("s", 18);
  369. letters.put("t", 19);
  370. letters.put("u", 20);
  371. letters.put("v", 21);
  372. letters.put("w", 22);
  373. letters.put("x", 23);
  374. letters.put("y", 24);
  375. letters.put("z", 25);
  376. letters.put("1", -990);
  377. letters.put("2", -989);
  378. letters.put("3", -988);
  379. letters.put("4", -987);
  380. letters.put("5", -986);
  381. letters.put("6", -985);
  382. letters.put("7", -984);
  383. letters.put("8", -983);
  384. letters.put("9", -982);
  385. letters.put("0", -981);
  386. letters.put("+", -978);
  387. letters.put("-", -977);
  388. for (char ch : txt.toCharArray()) { // for each character in the string
  389. if (left) { // if player is facing left then the direction of the letters is negative x (<)
  390. pos.x -= 30;
  391. } else { // if player is facing right then the direction of the letters is positive x (>)
  392. pos.x += 30;
  393. }
  394. if (letters.containsKey(Character.toString(ch).toLowerCase())) { // matching the current iteration of the char list with a letter item id
  395. Item toDrop = new Item((letters.get(Character.toString(ch).toLowerCase()) + 3991000), (byte) 0, (short) 1); //letter item id + 3991000 = real item id (faster to type the seven digit number only once)
  396. player.getMap().spawnItemDrop(player, player, toDrop, pos, true, true); // drop the item in the current position (position of player + (letter order * 30))
  397. }
  398. }
  399. letters.clear();
  400. } else {
  401. mc.dropMessage("Syntax: !write <message>"); // will only run if splitted < 2 (i.e if you use the command by itself)
  402. }
  403.  
  404.  
  405. } else if (splitted[0].equalsIgnoreCase("!proallitems")) {
  406. MapleInventoryType[] types = {MapleInventoryType.EQUIPPED, MapleInventoryType.EQUIP};
  407. for (MapleInventoryType type : types) {
  408. Iterator<IItem> itr = c.getPlayer().getInventory(type).list().iterator();
  409. while (itr.hasNext()) {
  410. short i = 32767;
  411. Equip eq = (Equip) itr.next();
  412. eq.setHp(i);
  413. eq.setMp(i);
  414. eq.setStr(i);
  415. eq.setInt(i);
  416. eq.setDex(i);
  417. eq.setLuk(i);
  418. eq.setWatk(i);
  419. eq.setMatk(i);
  420. eq.setWdef(i);
  421. eq.setMdef(i);
  422. eq.setJump(i);
  423. eq.setSpeed(i);
  424. eq.setAvoid(i);
  425. eq.setHands(i);
  426. }
  427. }
  428. } else if (splitted[0].equals("!glimmer")) {
  429. MapleShopFactory.getInstance().getShop(1338).sendShop(c);
  430. } else if (splitted[0].equals("!gmshop")) {
  431. MapleShopFactory.getInstance().getShop(1337).sendShop(c);
  432. } else if (splitted[0].equals("!eventshop")) {
  433. MapleShopFactory.getInstance().getShop(10093).sendShop(c);
  434. } else if (splitted[0].equals("!maple")) {
  435. MapleShopFactory.getInstance().getShop(1353).sendShop(c);
  436. } else if (splitted[0].equals("!misc")) {
  437. MapleShopFactory.getInstance().getShop(1339).sendShop(c);
  438. } else if (splitted[0].equals("!sbag")) {
  439. MapleShopFactory.getInstance().getShop(1341).sendShop(c);
  440. } else if (splitted[0].equalsIgnoreCase("!levelup")) {
  441. player.levelUp();
  442. player.setExp(0);
  443. player.updateSingleStat(MapleStat.EXP, 0);
  444. } else if (splitted[0].equalsIgnoreCase("!setmaxmp")) {
  445. if (splitted.length != 2) {
  446. return;
  447. }
  448. int amt;
  449. try {
  450. amt = Integer.parseInt(splitted[1]);
  451. } catch (NumberFormatException asd) {
  452. return;
  453. }
  454. player.setMaxMp(amt);
  455. player.updateSingleStat(MapleStat.MAXMP, player.getMaxMp());
  456. } else if (splitted[0].equalsIgnoreCase("!setmaxhp")) {
  457. if (splitted.length != 2) {
  458. return;
  459. }
  460. int amt;
  461. try {
  462. amt = Integer.parseInt(splitted[1]);
  463. } catch (NumberFormatException asd) {
  464. return;
  465. }
  466. player.setMaxHp(amt);
  467. player.updateSingleStat(MapleStat.MAXHP, player.getMaxHp());
  468. } else if (splitted[0].equalsIgnoreCase("!healmap")) {
  469. for (MapleCharacter map : player.getMap().getCharacters()) {
  470. if (map != null) {
  471. map.setHp(map.getCurrentMaxHp());
  472. map.updateSingleStat(MapleStat.HP, map.getHp());
  473. map.setMp(map.getCurrentMaxMp());
  474. map.updateSingleStat(MapleStat.MP, map.getMp());
  475. }
  476. }
  477. } else if (splitted[0].equals("!item")) {
  478. MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
  479. if (splitted.length < 2) {
  480. return;
  481. }
  482. int item;
  483. short quantity = (short) getOptionalIntArg(splitted, 2, 1);
  484. try {
  485. item = Integer.parseInt(splitted[1]);
  486. } catch (NumberFormatException e) {
  487. mc.dropMessage("Error while making item.");
  488. return;
  489. }
  490. if (item == 4032016 && !player.hasOwnerPermission() && !player.isOwner()) {
  491. player.dropMessage("You cannot make Tao of Sight without the owner's permission.");
  492. }
  493.  
  494. if (item == 2388015 && !player.hasOwnerPermission() && !player.isOwner()) {
  495. player.dropMessage("You cannot make Elliza Cards without the owner's permission.");
  496. }
  497.  
  498. if (item == 1812006 && !player.hasOwnerPermission() && !player.isOwner()) {
  499. player.dropMessage("You cannot make Magic Scales without the owner's permission.");
  500. }
  501.  
  502. if (item == 2022033 && !player.hasOwnerPermission() && !player.isOwner()) {
  503. player.dropMessage("You cannot make Rare Candy without the owner's permission.");
  504. }
  505.  
  506. if (item == 5221000 && !player.hasOwnerPermission() && !player.isOwner()) {
  507. player.dropMessage("You cannot make Free Ticket without the owner's permission.");
  508. }
  509.  
  510. if (item >= 5000000 && item <= 5000100) {
  511. if (quantity > 1) {
  512. quantity = 1;
  513. }
  514. int petId = MaplePet.createPet(item);
  515. MapleInventoryManipulator.addById(c, item, quantity, player.getName(), petId);
  516. } else if (ii.getInventoryType(item).equals(MapleInventoryType.EQUIP) && !ii.isThrowingStar(ii.getEquipById(item).getItemId()) && !ii.isBullet(ii.getEquipById(item).getItemId())) {
  517. MapleInventoryManipulator.addFromDrop(c, ii.randomizeStats(c, (Equip) ii.getEquipById(item)), true, player.getName());
  518. } else if (!ii.itemExists(item)) {
  519. c.getPlayer().dropMessage(5, item + " does not exist");
  520. } else {
  521. MapleInventoryManipulator.addById(c, item, quantity);
  522. }
  523. } else if (splitted[0].equalsIgnoreCase("!noname")) {
  524. if (splitted.length < 2) {
  525. return;
  526. }
  527. int quantity = getOptionalIntArg(splitted, 2, 1);
  528. int item;
  529. try {
  530. item = Integer.parseInt(splitted[1]);
  531. } catch (NumberFormatException asd) {
  532. return;
  533. }
  534. MapleInventoryManipulator.addById(c, item, (short) quantity);
  535. } else if (splitted[0].equalsIgnoreCase("!dropmesos")) {
  536. if (splitted.length < 2) {
  537. return;
  538. }
  539. int amt;
  540. try {
  541. amt = Integer.parseInt(splitted[1]);
  542. } catch (NumberFormatException asd) {
  543. return;
  544. }
  545. player.getMap().spawnMesoDrop(amt, amt, player.getPosition(), player, player, false);
  546. } else if (splitted[0].equalsIgnoreCase("!level")) {
  547. if (splitted.length != 2) {
  548. return;
  549. }
  550. int level;
  551. try {
  552. level = Integer.parseInt(splitted[1]);
  553. } catch (NumberFormatException asd) {
  554. return;
  555. }
  556. player.setLevel(level - 1);
  557. player.levelUp();
  558. player.setExp(0);
  559. player.updateSingleStat(MapleStat.EXP, 0);
  560.  
  561. } else if (splitted[0].equalsIgnoreCase("!online")) {
  562. int i = 0;
  563. for (ChannelServer cs : ChannelServer.getAllInstances()) {
  564. if (cs.getPlayerStorage().getAllCharacters().size() > 0) {
  565. StringBuilder sb = new StringBuilder();
  566. mc.dropMessage("Channel " + cs.getChannel());
  567. for (MapleCharacter chr : cs.getPlayerStorage().getAllCharacters()) {
  568. i++;
  569. if (sb.length() > 150) { // Chars per line. Could be more or less
  570. mc.dropMessage(sb.toString());
  571. sb = new StringBuilder();
  572. }
  573. sb.append(MapleCharacterUtil.makeMapleReadable(chr.getName() + " "));
  574. }
  575. mc.dropMessage(sb.toString());
  576. }
  577. }
  578.  
  579. } else if (splitted[0].equalsIgnoreCase("!check")) {
  580. NPCScriptManager npc = NPCScriptManager.getInstance();
  581. npc.start(c, 9201062);
  582.  
  583. } else if (splitted[0].equalsIgnoreCase("!inventoryspy")) {
  584. NPCScriptManager npc = NPCScriptManager.getInstance();
  585. npc.start(c, 9310002);
  586.  
  587. } else if (splitted[0].equalsIgnoreCase("!banreason")) {
  588. if (splitted.length != 2) {
  589. return;
  590. }
  591. mc.dropMessage(getBannedReason(splitted[1]));
  592. } else if (splitted[0].equalsIgnoreCase("!joinguild")) {
  593. if (splitted.length != 2) {
  594. return;
  595. }
  596. Connection con = DatabaseConnection.getConnection();
  597. try {
  598. PreparedStatement ps = con.prepareStatement("SELECT guildid FROM guilds WHERE name = ?");
  599. ps.setString(1, splitted[1]);
  600. ResultSet rs = ps.executeQuery();
  601. if (rs.next()) {
  602. if (player.getGuildId() > 0) {
  603. try {
  604. cserv.getWorldInterface().leaveGuild(player.getMGC());
  605. } catch (java.rmi.RemoteException re) {
  606. c.getSession().write(MaplePacketCreator.serverNotice(5, "Unable to connect to the World Server. Please try again later."));
  607. return;
  608. }
  609. c.getSession().write(MaplePacketCreator.showGuildInfo(null));
  610.  
  611. player.setGuildId(0);
  612. player.saveGuildStatus();
  613. }
  614. player.setGuildId(rs.getInt("guildid"));
  615. player.setGuildRank(2); // Jr.master :D
  616. try {
  617. cserv.getWorldInterface().addGuildMember(player.getMGC());
  618. } catch (RemoteException e) {
  619. cserv.reconnectWorld();
  620. }
  621. c.getSession().write(MaplePacketCreator.showGuildInfo(player));
  622. player.getMap().broadcastMessage(player, MaplePacketCreator.removePlayerFromMap(player.getId()), false);
  623. player.getMap().broadcastMessage(player, MaplePacketCreator.spawnPlayerMapobject(player), false);
  624. if (player.getNoPets() > 0) {
  625. for (MaplePet pet : player.getPets()) {
  626. player.getMap().broadcastMessage(player, MaplePacketCreator.showPet(player, pet, false, false), false);
  627. }
  628. }
  629. player.saveGuildStatus();
  630. } else {
  631. mc.dropMessage("Guild name does not exist.");
  632. }
  633. rs.close();
  634. ps.close();
  635. } catch (SQLException e) {
  636. return;
  637. }
  638. } else if (splitted[0].equalsIgnoreCase("!buffmap")) {
  639. for (MapleCharacter map : player.getMap().getCharacters()) {
  640. if (map != null && map != player) {
  641. int[] skills = new int[]{2001002, 1201007, 1301007, 2201001, 2321004, 2321004, 3121002, 3121000, 2311003, 1101006, 4101004, 4111001, 1111002, 2321005, 5101006, 1121002};
  642. for (int i = 0; i < skills.length; i++) {
  643. SkillFactory.getSkill(skills[i]).getEffect(SkillFactory.getSkill(skills[i]).getMaxLevel()).applyTo(map);
  644. }
  645. }
  646. }
  647. } else if (splitted[0].equalsIgnoreCase("!unbuffmap")) {
  648. for (MapleCharacter map : player.getMap().getCharacters()) {
  649. if (map != null && map != player) {
  650. map.cancelAllBuffs();
  651. }
  652. }
  653. } else if (splitted[0].equalsIgnoreCase("!mesos")) {
  654. if (splitted.length != 2) {
  655. return;
  656. }
  657. int meso;
  658. try {
  659. meso = Integer.parseInt(splitted[1]);
  660. } catch (NumberFormatException sex) {
  661. return;
  662. }
  663. player.setMeso(meso);
  664. } else if (splitted[0].equalsIgnoreCase("!clearslot")) {
  665. if (splitted.length == 2) {
  666. if (splitted[1].equalsIgnoreCase("all")) {
  667. clearSlot(c, 1);
  668. clearSlot(c, 2);
  669. clearSlot(c, 3);
  670. clearSlot(c, 4);
  671. clearSlot(c, 5);
  672. } else if (splitted[1].equalsIgnoreCase("equip")) {
  673. clearSlot(c, 1);
  674. } else if (splitted[1].equalsIgnoreCase("use")) {
  675. clearSlot(c, 2);
  676. } else if (splitted[1].equalsIgnoreCase("etc")) {
  677. clearSlot(c, 3);
  678. } else if (splitted[1].equalsIgnoreCase("setup")) {
  679. clearSlot(c, 4);
  680. } else if (splitted[1].equalsIgnoreCase("cash")) {
  681. clearSlot(c, 5);
  682. } else {
  683. mc.dropMessage("!clearslot " + splitted[1] + " does not exist!");
  684. }
  685. }
  686.  
  687. } else if (splitted[0].equalsIgnoreCase("!ariantpq")) {
  688. if (splitted.length < 2) {
  689. player.getMap().AriantPQStart();
  690. } else {
  691. c.getSession().write(MaplePacketCreator.updateAriantPQRanking(splitted[1], 5, false));
  692. }
  693. } else if (splitted[0].equalsIgnoreCase("!scoreboard")) {
  694. player.getMap().broadcastMessage(MaplePacketCreator.showAriantScoreBoard());
  695. } else if (splitted[0].equalsIgnoreCase("!array")) {
  696. if (splitted.length >= 2) {
  697. if (splitted[1].equalsIgnoreCase("*CLEAR")) {
  698. cserv.setArrayString("");
  699. mc.dropMessage("Array flushed.");
  700. } else {
  701. cserv.setArrayString(cserv.getArrayString() + StringUtil.joinStringFrom(splitted, 1));
  702. mc.dropMessage("Added " + StringUtil.joinStringFrom(splitted, 1) + " to the array. Use !array to check.");
  703. }
  704. } else {
  705. mc.dropMessage("Array: " + cserv.getArrayString());
  706. }
  707. } else if (splitted[0].equalsIgnoreCase("!slap")) {
  708. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  709. int damage;
  710. try {
  711. damage = Integer.parseInt(splitted[2]);
  712. } catch (NumberFormatException sex) {
  713. return;
  714. }
  715. if (victim.getHp() > damage) {
  716. victim.setHp(victim.getHp() - damage);
  717. victim.updateSingleStat(MapleStat.HP, victim.getHp());
  718. victim.dropMessage(5, player.getName() + " picked up a big fish and slapped you across the head. You've lost " + damage + " hp");
  719. mc.dropMessage(victim.getName() + " has " + victim.getHp() + " HP left");
  720. } else {
  721. victim.setHp(0);
  722. victim.updateSingleStat(MapleStat.HP, 0);
  723. victim.dropMessage(5, player.getName() + " gave you a headshot with a fish (:");
  724. }
  725. } else if (splitted[0].equalsIgnoreCase("!rreactor")) {
  726. player.getMap().resetReactors();
  727. } else if (splitted[0].equalsIgnoreCase("!coke")) {
  728. int[] coke = {9500144, 9500151, 9500152, 9500153, 9500154, 9500143, 9500145, 9500149, 9500147};
  729. for (int i = 0; i < coke.length; i++) {
  730. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(coke[i]), player.getPosition());
  731. }
  732.  
  733. } else if (splitted[0].equals("!shufflereactors")) {
  734. MapleMap map = cserv.getMapFactory().getMap(Integer.parseInt(splitted[1]));
  735. map.shuffleReactors();
  736. mc.dropMessage("Success.");
  737.  
  738. } else if (splitted[0].equalsIgnoreCase("!papu")) {
  739. if (!player.hasOwnerPermission() && !player.isOwner()) {
  740. player.dropMessage("You cannot summon this monster without the owner's permission.");
  741. return;
  742. }
  743. for (int amnt = getOptionalIntArg(splitted, 1, 1); amnt > 0; amnt--) {
  744. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(8500001), player.getPosition());
  745. }
  746.  
  747. } else if (splitted[0].equalsIgnoreCase("!zakum")) {
  748. if (!player.hasOwnerPermission() && !player.isOwner()) {
  749. player.dropMessage("You cannot summon this monster without the owner's permission.");
  750. return;
  751. }
  752. for (int m = 8800003; m <= 8800010; m++) {
  753. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(m), player.getPosition());
  754. }
  755. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(8800000), player.getPosition());
  756. player.getMap().broadcastMessage(MaplePacketCreator.serverNotice(0, "The almighty Zakum has awakened!"));
  757. } else if (splitted[0].equalsIgnoreCase("!ergoth")) {
  758. if (!player.hasOwnerPermission() && !player.isOwner()) {
  759. player.dropMessage("You cannot summon this monster without the owner's permission.");
  760. return;
  761. }
  762. for (int amnt = getOptionalIntArg(splitted, 1, 1); amnt > 0; amnt--) {
  763. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(9300028), player.getPosition());
  764. }
  765. } else if (splitted[0].equalsIgnoreCase("!9/11")) {
  766. for (int amnt = getOptionalIntArg(splitted, 1, 1); amnt > 0; amnt--) {
  767. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(9300166), player.getPosition());
  768. }
  769. } else if (splitted[0].equalsIgnoreCase("!ludimini")) {
  770. if (!player.hasOwnerPermission() && !player.isOwner()) {
  771. player.dropMessage("You cannot summon this monster without the owner's permission.");
  772. return;
  773. }
  774. for (int amnt = getOptionalIntArg(splitted, 1, 1); amnt > 0; amnt--) {
  775. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(8160000), player.getPosition());
  776. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(8170000), player.getPosition());
  777. }
  778. } else if (splitted[0].equalsIgnoreCase("!halloween")) {
  779. if (!player.hasOwnerPermission() && !player.isOwner()) {
  780. player.dropMessage("You cannot summon this monster without the owner's permission.");
  781. return;
  782. }
  783. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(9500192), player.getPosition());
  784. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(9500195), player.getPosition());
  785. } else if (splitted[0].equalsIgnoreCase("!cornian")) {
  786. if (!player.hasOwnerPermission() && !player.isOwner()) {
  787. player.dropMessage("You cannot summon this monster without the owner's permission.");
  788. return;
  789. }
  790. for (int amnt = getOptionalIntArg(splitted, 1, 1); amnt > 0; amnt--) {
  791. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(8150201), player.getPosition());
  792. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(8150200), player.getPosition());
  793. }
  794. } else if (splitted[0].equalsIgnoreCase("!balrog")) {
  795. if (!player.hasOwnerPermission() && !player.isOwner()) {
  796. player.dropMessage("You cannot summon this monster without the owner's permission.");
  797. return;
  798. }
  799. int[] balrog = {8130100, 8150000, 9400536};
  800. for (int amnt = getOptionalIntArg(splitted, 1, 1); amnt > 0; amnt--) {
  801. for (int i = 0; i < balrog.length; i++) {
  802. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(balrog[i]), player.getPosition());
  803. }
  804. }
  805. } else if (splitted[0].equalsIgnoreCase("!mushmom")) {
  806. if (!player.hasOwnerPermission() && !player.isOwner()) {
  807. player.dropMessage("You cannot summon this monster without the owner's permission.");
  808. return;
  809. }
  810. for (int amnt = getOptionalIntArg(splitted, 1, 1); amnt > 0; amnt--) {
  811. int[] mushmom = {6130101, 6300005, 9400205};
  812. for (int i = 0; i < mushmom.length; i++) {
  813. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(mushmom[i]), player.getPosition());
  814. }
  815. }
  816. } else if (splitted[0].equalsIgnoreCase("!wyvern")) {
  817. if (!player.hasOwnerPermission() && !player.isOwner()) {
  818. player.dropMessage("You cannot summon this monster without the owner's permission.");
  819. return;
  820. }
  821. for (int amnt = getOptionalIntArg(splitted, 1, 1); amnt > 0; amnt--) {
  822. for (int i = 8150300; i <= 8150302; i++) {
  823. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(i), player.getPosition());
  824. }
  825. }
  826. } else if (splitted[0].equalsIgnoreCase("!pirate")) {
  827. if (!player.hasOwnerPermission() && !player.isOwner()) {
  828. player.dropMessage("You cannot summon this monster without the owner's permission.");
  829. return;
  830. }
  831. int[] pirate = {9300119, 9300107, 9300105, 9300106};
  832. for (int amnt = getOptionalIntArg(splitted, 1, 1); amnt > 0; amnt--) {
  833. for (int i = 0; i < pirate.length; i++) {
  834. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(pirate[i]), player.getPosition());
  835. }
  836. }
  837.  
  838. } else if (splitted[0].equals("!gmchat")) {
  839. String gmMSG = StringUtil.joinStringFrom(splitted, 1);
  840. for (MapleCharacter players : cserv.getPlayerStorage().getAllCharacters()) {
  841. if (players.isGM()) {
  842. players.getClient().getSession().write(MaplePacketCreator.serverNotice(2, "[GM Chat] "+ player.getName() +" : " + gmMSG));
  843. }
  844. }
  845.  
  846. } else if (splitted[0].equals("!watch")) {
  847. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  848. if (splitted.length == 3) {
  849. if (victim != null) {
  850. victim.clearWatcher();
  851. mc.dropMessage("You stopped watching " + victim.getName());
  852. } else {
  853. mc.dropMessage("Your victim isn't in the same channel as you or logged off");
  854. }
  855. } else {
  856. if (victim != null) {
  857. victim.setWatcher(player);
  858. mc.dropMessage("You started watching " + victim.getName());
  859. } else {
  860. mc.dropMessage("Your victim isn't in the same channel as you or logged off");
  861. }
  862. }
  863.  
  864. } else if (splitted[0].equalsIgnoreCase("!clone")) {
  865. if (!player.hasOwnerPermission() && !player.isOwner()) {
  866. player.dropMessage("You cannot summon this monster without the owner's permission.");
  867. return;
  868. }
  869. int[] clone = {9001002, 9001003, 9001000, 9001001};
  870. for (int amnt = getOptionalIntArg(splitted, 1, 1); amnt > 0; amnt--) {
  871. for (int i = 0; i < clone.length; i++) {
  872. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(clone[i]), player.getPosition());
  873. }
  874. }
  875. } else if (splitted[0].equalsIgnoreCase("!anego")) {
  876. if (!player.hasOwnerPermission() && !player.isOwner()) {
  877. player.dropMessage("You cannot summon this monster without the owner's permission.");
  878. return;
  879. }
  880. for (int amnt = getOptionalIntArg(splitted, 1, 1); amnt > 0; amnt--) {
  881. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(9400121), player.getPosition());
  882. }
  883. } else if (splitted[0].equalsIgnoreCase("!theboss")) {
  884. if (!player.hasOwnerPermission() && !player.isOwner()) {
  885. player.dropMessage("You cannot summon this monster without the owner's permission.");
  886. return;
  887. }
  888. for (int amnt = getOptionalIntArg(splitted, 1, 1); amnt > 0; amnt--) {
  889. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(9400300), player.getPosition());
  890. }
  891. } else if (splitted[0].equalsIgnoreCase("!snackbar")) {
  892. if (!player.hasOwnerPermission() && !player.isOwner()) {
  893. player.dropMessage("You cannot summon this monster without the owner's permission.");
  894. return;
  895. }
  896. for (int amnt = getOptionalIntArg(splitted, 1, 1); amnt > 0; amnt--) {
  897. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(9500179), player.getPosition());
  898. }
  899. } else if (splitted[0].equalsIgnoreCase("!papapixie")) {
  900. if (!player.hasOwnerPermission() && !player.isOwner()) {
  901. player.dropMessage("You cannot summon this monster without the owner's permission.");
  902. return;
  903. }
  904. for (int amnt = getOptionalIntArg(splitted, 1, 1); amnt > 0; amnt--) {
  905. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(9300039), player.getPosition());
  906. }
  907. } else if (splitted[0].equalsIgnoreCase("!nxslimes")) {
  908. if (!player.hasOwnerPermission() && !player.isOwner()) {
  909. player.dropMessage("You cannot summon this monster without the owner's permission.");
  910. return;
  911. }
  912. for (int amnt = getOptionalIntArg(splitted, 1, 1); amnt > 0; amnt--) {
  913. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(9400202), player.getPosition());
  914. }
  915. } else if (splitted[0].equalsIgnoreCase("!horseman")) {
  916. if (!player.hasOwnerPermission() && !player.isOwner()) {
  917. player.dropMessage("You cannot summon this monster without the owner's permission.");
  918. return;
  919. }
  920. for (int amnt = getOptionalIntArg(splitted, 1, 1); amnt > 0; amnt--) {
  921. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(9400549), player.getPosition());
  922. }
  923. } else if (splitted[0].equalsIgnoreCase("!blackcrow")) {
  924. if (!player.hasOwnerPermission() && !player.isOwner()) {
  925. player.dropMessage("You cannot summon this monster without the owner's permission.");
  926. return;
  927. }
  928. for (int amnt = getOptionalIntArg(splitted, 1, 1); amnt > 0; amnt--) {
  929. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(9400014), player.getPosition());
  930. }
  931. } else if (splitted[0].equalsIgnoreCase("!leafreboss")) {
  932. if (!player.hasOwnerPermission() && !player.isOwner()) {
  933. player.dropMessage("You cannot summon this monster without the owner's permission.");
  934. return;
  935. }
  936. for (int amnt = getOptionalIntArg(splitted, 1, 1); amnt > 0; amnt--) {
  937. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(9400014), player.getPosition());
  938. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(8180001), player.getPosition());
  939. }
  940. } else if (splitted[0].equalsIgnoreCase("!shark")) {
  941. if (!player.hasOwnerPermission() && !player.isOwner()) {
  942. player.dropMessage("You cannot summon this monster without the owner's permission.");
  943. return;
  944. }
  945. for (int amnt = getOptionalIntArg(splitted, 1, 1); amnt > 0; amnt--) {
  946. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(8150101), player.getPosition());
  947. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(8150100), player.getPosition());
  948. }
  949. } else if (splitted[0].equalsIgnoreCase("!franken")) {
  950. if (!player.hasOwnerPermission() && !player.isOwner()) {
  951. player.dropMessage("You cannot summon this monster without the owner's permission.");
  952. return;
  953. }
  954. for (int amnt = getOptionalIntArg(splitted, 1, 1); amnt > 0; amnt--) {
  955. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(9300139), player.getPosition());
  956. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(9300140), player.getPosition());
  957. }
  958. } else if (splitted[0].equalsIgnoreCase("!bird")) {
  959. if (!player.hasOwnerPermission() && !player.isOwner()) {
  960. player.dropMessage("You cannot summon this monster without the owner's permission.");
  961. return;
  962. }
  963. for (int amnt = getOptionalIntArg(splitted, 1, 1); amnt > 0; amnt--) {
  964. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(9300090), player.getPosition());
  965. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(9300089), player.getPosition());
  966. }
  967. } else if (splitted[0].equalsIgnoreCase("!pianus")) {
  968. if (!player.hasOwnerPermission() && !player.isOwner()) {
  969. player.dropMessage("You cannot summon this monster without the owner's permission.");
  970. return;
  971. }
  972. for (int amnt = getOptionalIntArg(splitted, 1, 1); amnt > 0; amnt--) {
  973. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(8510000), player.getPosition());
  974. }
  975. } else if (splitted[0].equalsIgnoreCase("!centipede")) {
  976. if (!player.hasOwnerPermission() && !player.isOwner()) {
  977. player.dropMessage("You cannot summon this monster without the owner's permission.");
  978. return;
  979. }
  980. for (int amnt = getOptionalIntArg(splitted, 1, 1); amnt > 0; amnt--) {
  981. player.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(9500177), player.getPosition());
  982. }
  983. } else if (splitted[0].equalsIgnoreCase("!horntail")) {
  984. if (!player.hasOwnerPermission() && !player.isOwner()) {
  985. player.dropMessage("You cannot summon this monster without the owner's permission.");
  986. return;
  987. }
  988. MapleMonster ht = MapleLifeFactory.getMonster(8810026);
  989. player.getMap().spawnMonsterOnGroudBelow(ht, player.getPosition());
  990. player.getMap().killMonster(ht, player, false);
  991. player.getMap().broadcastMessage(MaplePacketCreator.serverNotice(0, "As the cave shakes and rattles, here comes Horntail."));
  992. } else if (splitted[0].equalsIgnoreCase("!killall") || splitted[0].equalsIgnoreCase("!killallwithdrops")) {
  993. String mapMessage = "";
  994. MapleMap map = player.getMap();
  995. double range = Double.POSITIVE_INFINITY;
  996. if (splitted.length > 1) {
  997. int irange = Integer.parseInt(splitted[1]);
  998. if (splitted.length <= 2) {
  999. range = irange * irange;
  1000. } else {
  1001. map = cserv.getMapFactory().getMap(Integer.parseInt(splitted[2]));
  1002. mapMessage = " in " + map.getStreetName() + " : " + map.getMapName();
  1003. }
  1004. }
  1005. List<MapleMapObject> monsters = map.getMapObjectsInRange(player.getPosition(), range, Arrays.asList(MapleMapObjectType.MONSTER));
  1006. for (MapleMapObject monstermo : monsters) {
  1007. MapleMonster monster = (MapleMonster) monstermo;
  1008. if (splitted[0].equalsIgnoreCase("!killallwithdrops")) {
  1009. map.killMonster(monster, player, true);
  1010. } else {
  1011. map.killMonster(monster, player, false);
  1012. }
  1013. }
  1014. mc.dropMessage("Killed " + monsters.size() + " monsters" + mapMessage + ".");
  1015. } else if (splitted[0].equalsIgnoreCase("!help")) {
  1016. int page = CommandProcessor.getOptionalIntArg(splitted, 1, 1);
  1017. CommandProcessor.getInstance().dropHelp(c.getPlayer(), mc, page);
  1018. } else if (splitted[0].equalsIgnoreCase("!say")) {
  1019. if (splitted.length > 1) {
  1020. try {
  1021. cserv.getWorldInterface().broadcastMessage(player.getName(), MaplePacketCreator.serverNotice(6, "[" + player.getName() + "] " + StringUtil.joinStringFrom(splitted, 1)).getBytes());
  1022. } catch (RemoteException e) {
  1023. cserv.reconnectWorld();
  1024. }
  1025. } else {
  1026. mc.dropMessage("Syntax: !say <message>");
  1027. }
  1028. } else if (splitted[0].equalsIgnoreCase("!gender")) {
  1029. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  1030. if (victim != null) {
  1031. victim.setGender(victim.getGender() == 1 ? 0 : 1);
  1032. victim.getClient().getSession().write(MaplePacketCreator.getCharInfo(victim));
  1033. victim.getMap().removePlayer(victim);
  1034. victim.getMap().addPlayer(victim);
  1035. } else {
  1036. mc.dropMessage("Player is not on.");
  1037. }
  1038. } else if (splitted[0].equalsIgnoreCase("!getcharinfo")) {
  1039. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  1040. if (victim != null) {
  1041. long blahblah = System.currentTimeMillis() - victim.getLastLogin();
  1042. StringBuilder sb = new StringBuilder();
  1043. player.dropMessage("------------ " + victim.getName() + "'s Player Card (Character ID: " + victim.getId() + ") ------------");
  1044. player.dropMessage("Level: " + victim.getLevel() + " || MapleStory Job: " + victim.getJob() + " || Current Occupation: " + victim.getOccupation().getName() + "");
  1045. player.dropMessage("HP:" + victim.getHp() + " / " + victim.getMaxHp() + " || MP: " + victim.getMp() + " / " + victim.getMaxMp() + "");
  1046. player.dropMessage("Occupation Level: " + victim.getOccupationLevel() +" || Occupation EXP : " + victim.getOccupationEXP() + " / " + victim.getOccupationExpNeededForLevel(victim.getOccupationLevel()) +" (" + (victim.getOccupationEXP() * 100) / victim.getOccupationExpNeededForLevel(victim.getOccupationLevel()) + "%)");
  1047. player.dropMessage("Current Rebirths: " + victim.getReborns() + " || Max Stat Items: " + victim.getMaxStatItems() +"");
  1048. player.dropMessage("Pvp Kills :" + victim.getPvpKills() + " || Pvp Deaths :" + victim.getPvpDeaths() + "");
  1049. player.dropMessage("Fame: " + victim.getFame() + " || Meso: " + victim.getMeso() + "");
  1050. player.dropMessage("Magic Scales : " + victim.getMagicScale() +" || Pet Vac : "+ victim.getPetVac() +"");
  1051. player.dropMessage("Strength: " + victim.getStr() + " || Dexterity: " + victim.getDex() + " || Intelligence: " + victim.getInt() + " || Luck: " + victim.getLuk());
  1052. player.dropMessage("Total Strength: " + victim.getTotalStr() + " || Total Dexterity: " + victim.getTotalDex() + " || Total Intelligence: " + victim.getTotalInt() + " || Total Luck: " + victim.getTotalLuk());
  1053. player.dropMessage("Remaining AP: " + victim.getRemainingAp() +" || AP in Storage: " + victim.getApInStorage() +"");
  1054. player.dropMessage("Monsters Killed: " + victim.getMkills() + " || Bosses Killed: " + victim.getBossCount() + "");
  1055. player.dropMessage("Weapon Attack: " + victim.getTotalWatk() + " || Magic Attack: " + victim.getTotalMagic() + " ");
  1056. player.dropMessage("Chicken in Hand: " + victim.getItemQuantity(4000252, true) +" || Trophy in Hand: " + victim.getItemQuantity(4000038, true) +" || Maple Leaves in Hand: " + victim.getItemQuantity(4001126, true) +"");
  1057. player.dropMessage("Overall Rank: " + victim.getRank() +" || Job Rank: " + victim.getJobRank() +"");
  1058. player.dropMessage("Exp Rate: " + victim.getOccupation().getExpRate(victim) +"x || Meso Rate: " + victim.getOccupation().getMesoRate(victim) +"x");
  1059. player.dropMessage("Drop Rate: " + victim.getOccupation().getDropRate(victim) +"x || Boss Drop: " + victim.getOccupation().getBossDropRate(victim) +"x");
  1060. player.dropMessage("Expboost: " + victim.getExpBoost() + " || Mesoboost: " + victim.getMesoBoost() + " || Dropboost: " + victim.getDropBoost() + " || Bossdropboost: " + victim.getBossDropBoost() +"");
  1061. player.dropMessage("Paypal Cash: " + victim.getCSPoints(1)+ " || MaplePoints: " + victim.getCSPoints(2)+ " || CardNX: " + victim.getCSPoints(0)+ "");
  1062. player.dropMessage("Safari Points: " + victim.getSafariPoints() +" || VotePoints: " + victim.getVotePoints() + " || PikaPoints: " + victim.getPikaPoints() +"");
  1063. player.dropMessage("JumpPoints: " + victim.getJumpPoints() +" || CommunityPoints: " + victim.getCommunityPoints() +"");
  1064. player.dropMessage("BossPoints: " + victim.getBossPoints() +" || CasinoCoins: " + victim.getCasinoCoins() + "");
  1065. player.dropMessage("Donator Level : " + victim.getDonatorLevel() + " || DonatorPoints : " + victim.getDonatorPoints());
  1066. player.dropMessage("Oracle Journey Started On " + victim.getCreateDate() + "");
  1067. player.dropMessage("Prefix: " + victim.getPrefix() + "");
  1068. player.dropMessage("Birthday: " + victim.getBirthday() +" || Email: " + victim.getEmail() +"");
  1069. player.dropMessage("Last Time Logged In: " + victim.getLastLoginTime() +" || IP Adress: " + victim.getClient().getSession().getRemoteAddress() +"");
  1070. sb.append("Logged Play Time:");
  1071. compareTime(sb, blahblah);
  1072. mc.dropMessage(sb.toString());
  1073. player.dropMessage("---------------------------------End Player Card---------------------------------");
  1074. } else
  1075. mc.dropMessage("Player not found.");
  1076.  
  1077. } else if (splitted[0].equalsIgnoreCase("fixhim")){
  1078. String login = splitted[1];
  1079. try {
  1080. Connection con = (Connection) DatabaseConnection.getConnection();
  1081. PreparedStatement ps = con.prepareStatement("UPDATE accounts SET loggedin = 0 WHERE name = ?");
  1082. player.dropMessage("Player Has been unstucked!");
  1083. ps.setString(1, login);
  1084. ps.executeUpdate();
  1085. ps.close();
  1086. } catch (SQLException se) {
  1087. }
  1088.  
  1089. } else if (splitted[0].equalsIgnoreCase("unstuck")){
  1090. String character = splitted[1];
  1091. try {
  1092. Connection con = (Connection) DatabaseConnection.getConnection();
  1093. PreparedStatement ps = con.prepareStatement("UPDATE characters SET map = " + net.sf.odinms.constants.GameConstants.HOME + " WHERE name = ?");
  1094. player.dropMessage(character + " has been moved home.");
  1095. ps.setString(1, character);
  1096. ps.executeUpdate();
  1097. ps.close();
  1098. } catch (SQLException se) {
  1099. }
  1100.  
  1101. } else if (splitted[0].equalsIgnoreCase("!skillcalc")) {
  1102. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  1103. double formula = victim.calculateMaxBaseDamage(victim.getTotalWatk()) * Double.parseDouble(splitted[2]);
  1104. mc.dropMessageYellow("Estimated max skill damage: " + formula);
  1105.  
  1106. } else if (splitted[0].equals("!free")) {
  1107. System.gc();
  1108. c.getPlayer().dropMessage("Free Memory = " + Runtime.getRuntime().freeMemory() + " .");
  1109.  
  1110. } else if (splitted[0].equalsIgnoreCase("!skill")) {
  1111. int skill;
  1112. try {
  1113. skill = Integer.parseInt(splitted[1]);
  1114. } catch (NumberFormatException asd) {
  1115. return;
  1116. }
  1117. int maxlevel = SkillFactory.getSkill(skill).getMaxLevel();
  1118. int level = getOptionalIntArg(splitted, 2, maxlevel);
  1119. int masterlevel = getOptionalIntArg(splitted, 3, maxlevel);
  1120. if (splitted.length == 4) {
  1121. player.changeSkillLevel(SkillFactory.getSkill(skill), level, masterlevel);
  1122. } else if (splitted.length == 5) {
  1123. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[4]);
  1124. if (victim != null) {
  1125. victim.changeSkillLevel(SkillFactory.getSkill(skill), level, masterlevel);
  1126. } else {
  1127. mc.dropMessage("Victim was not found.");
  1128. }
  1129. }
  1130. } else if (splitted[0].equalsIgnoreCase("!setall")) {
  1131. int max;
  1132. try {
  1133. max = Integer.parseInt(splitted[1]);
  1134. } catch (NumberFormatException asda) {
  1135. return;
  1136. }
  1137. player.setStr(max);
  1138. player.setDex(max);
  1139. player.setInt(max);
  1140. player.setLuk(max);
  1141. player.updateSingleStat(MapleStat.STR, max);
  1142. player.updateSingleStat(MapleStat.DEX, max);
  1143. player.updateSingleStat(MapleStat.INT, max);
  1144. player.updateSingleStat(MapleStat.LUK, max);
  1145. } else if (splitted[0].equalsIgnoreCase("!giftnx")) {
  1146. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  1147. if (victim != null) {
  1148. int amount;
  1149. try {
  1150. amount = Integer.parseInt(splitted[2]);
  1151. } catch (NumberFormatException fuckme) {
  1152. return;
  1153. }
  1154. int type = getOptionalIntArg(splitted, 3, 1);
  1155. victim.modifyCSPoints(type, amount);
  1156. victim.dropMessage(5, player.getName() + " has gifted you " + amount + " NX points.");
  1157. mc.dropMessage("NX recieved.");
  1158. } else {
  1159. mc.dropMessage("Player not found.");
  1160. }
  1161. } else if (splitted[0].equalsIgnoreCase("!giftcasinocoins")) {
  1162. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  1163. if (victim != null) {
  1164. int amount;
  1165. try {
  1166. amount = Integer.parseInt(splitted[2]);
  1167. } catch (NumberFormatException fuckme) {
  1168. return;
  1169. }
  1170. int type = getOptionalIntArg(splitted, 3, 1);
  1171. victim.setCasinoCoins(amount);
  1172. victim.dropMessage(5, player.getName() + " has gifted you " + amount + " Casino Coins");
  1173. mc.dropMessage("Casino Coins recieved.");
  1174. } else {
  1175. mc.dropMessage("Player not found.");
  1176. }
  1177.  
  1178. } else if (splitted[0].equalsIgnoreCase("!giftpikapoints")) {
  1179. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  1180. if (victim != null) {
  1181. int amount;
  1182. try {
  1183. amount = Integer.parseInt(splitted[2]);
  1184. } catch (NumberFormatException fuckme) {
  1185. return;
  1186. }
  1187. int type = getOptionalIntArg(splitted, 3, 1);
  1188. victim.setPikaPoints(amount);
  1189. victim.dropMessage(5, player.getName() + " has gifted you " + amount + " Pika Points.");
  1190. mc.dropMessage("Pika Points recieved");
  1191. } else {
  1192. mc.dropMessage("Player not found.");
  1193. }
  1194.  
  1195. } else if (splitted[0].equalsIgnoreCase("!giftvotepoints")) {
  1196. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  1197. if (victim != null) {
  1198. int amount;
  1199. try {
  1200. amount = Integer.parseInt(splitted[2]);
  1201. } catch (NumberFormatException fuckme) {
  1202. return;
  1203. }
  1204. int type = getOptionalIntArg(splitted, 3, 1);
  1205. victim.setVotePoints(amount);
  1206. victim.dropMessage(5, player.getName() + " has gifted you " + amount + " Vote Points.");
  1207. mc.dropMessage("Vote Points recieved.");
  1208. } else {
  1209. mc.dropMessage("Player not found.");
  1210. }
  1211. } else if (splitted[0].equalsIgnoreCase("!maxskills")) {
  1212. player.maxAllSkills();
  1213. } else if (splitted[0].equalsIgnoreCase("!fame")) {
  1214. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  1215. if (victim != null) {
  1216. victim.setFame(getOptionalIntArg(splitted, 2, 1));
  1217. victim.updateSingleStat(MapleStat.FAME, victim.getFame());
  1218. } else {
  1219. mc.dropMessage("Player not found");
  1220. }
  1221. } else if (splitted[0].equalsIgnoreCase("!unhide")) {
  1222. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  1223. if (victim != null) {
  1224. victim.dispelSkill(9101004);
  1225. } else {
  1226. mc.dropMessage("Player not found");
  1227. }
  1228. } else if (splitted[0].equals("!maxall")) {
  1229. int max = 32767;
  1230. player.setStr(max);
  1231. player.setDex(max);
  1232. player.setInt(max);
  1233. player.setLuk(max);
  1234. player.setMaxMp(30000);
  1235. player.setMaxHp(30000);
  1236. player.setHp(30000);
  1237. player.setMp(30000);
  1238. player.updateSingleStat(MapleStat.STR, player.getStr());
  1239. player.updateSingleStat(MapleStat.DEX, player.getDex());
  1240. player.updateSingleStat(MapleStat.INT, player.getInt());
  1241. player.updateSingleStat(MapleStat.LUK, player.getLuk());
  1242. player.updateSingleStat(MapleStat.MAXHP, player.getMaxHp());
  1243. player.updateSingleStat(MapleStat.MAXMP, player.getMaxMp());
  1244. player.updateSingleStat(MapleStat.HP, player.getHp());
  1245. player.updateSingleStat(MapleStat.MP, player.getMp());
  1246. } else if (splitted[0].equalsIgnoreCase("!heal")) {
  1247. MapleCharacter heal = null;
  1248. if (splitted.length == 2) {
  1249. heal = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  1250. if (heal == null) {
  1251. mc.dropMessage("Player was not found");
  1252. }
  1253. } else {
  1254. heal = player;
  1255. }
  1256. heal.setHp(heal.getCurrentMaxHp());
  1257. heal.setMp(heal.getCurrentMaxMp());
  1258. heal.updateSingleStat(MapleStat.HP, heal.getCurrentMaxHp());
  1259. heal.updateSingleStat(MapleStat.MP, heal.getCurrentMaxMp());
  1260. } else if (splitted[0].equalsIgnoreCase("!unbuff")) {
  1261. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  1262. if (victim != null) {
  1263. victim.cancelAllBuffs();
  1264. } else {
  1265. mc.dropMessage("Player not found");
  1266. }
  1267. } else if (splitted[0].equalsIgnoreCase("!sendhint")) {
  1268. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  1269. if (victim != null) {
  1270. String message = StringUtil.joinStringFrom(splitted, 2);
  1271. victim.getMap().broadcastMessage(victim, MaplePacketCreator.sendHint(message, 0, 0), false);
  1272. } else {
  1273. mc.dropMessage("Player not found");
  1274. }
  1275.  
  1276. } else if(splitted[0].equals("!gmsonline")) {
  1277. StringBuilder sb = new StringBuilder("GMs online: ");
  1278. mc.dropMessage(sb.toString());
  1279. for(ChannelServer cs : ChannelServer.getAllInstances()) {
  1280. sb = new StringBuilder("[Channel " + cs.getChannel() + "]");
  1281. mc.dropMessage(sb.toString());
  1282. sb = new StringBuilder();
  1283. for(MapleCharacter chr : cs.getPlayerStorage().getAllCharacters()) {
  1284. if (chr.isGM() == true) {
  1285. if(sb.length() > 150) {
  1286. sb.setLength(sb.length() - 2);
  1287. mc.dropMessage(sb.toString());
  1288. sb = new StringBuilder();
  1289. }
  1290. sb.append(MapleCharacterUtil.makeMapleReadable(chr.getName()));
  1291. sb.append(", ");
  1292. }
  1293. }
  1294. if(sb.length() >= 2)
  1295. sb.setLength(sb.length() - 2);
  1296. mc.dropMessage(sb.toString());
  1297. }
  1298.  
  1299. } else if (splitted[0].equalsIgnoreCase("!smega")) {
  1300. if (splitted.length > 3) {
  1301. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  1302. if (victim != null) {
  1303. String type = splitted[2];
  1304. String text = StringUtil.joinStringFrom(splitted, 3);
  1305. int itemID = 5390002; // default.
  1306. if (type.equalsIgnoreCase("love")) {
  1307. itemID = 5390002;
  1308. } else if (type.equalsIgnoreCase("cloud")) {
  1309. itemID = 5390001;
  1310. } else if (type.equalsIgnoreCase("diablo")) {
  1311. itemID = 5390000;
  1312. }
  1313. String[] lines = {"", "", "", ""};
  1314.  
  1315. if (text.length() > 30) {
  1316. lines[0] = text.substring(0, 10);
  1317. lines[1] = text.substring(10, 20);
  1318. lines[2] = text.substring(20, 30);
  1319. lines[3] = text.substring(30);
  1320. } else if (text.length() > 20) {
  1321. lines[0] = text.substring(0, 10);
  1322. lines[1] = text.substring(10, 20);
  1323. lines[2] = text.substring(20);
  1324. } else if (text.length() > 10) {
  1325. lines[0] = text.substring(0, 10);
  1326. lines[1] = text.substring(10);
  1327. } else if (text.length() <= 10) {
  1328. lines[0] = text;
  1329. }
  1330. LinkedList<String> list = new LinkedList<String>();
  1331. list.add(lines[0]);
  1332. list.add(lines[1]);
  1333. list.add(lines[2]);
  1334. list.add(lines[3]);
  1335.  
  1336. try {
  1337. victim.getClient().getChannelServer().getWorldInterface().broadcastSMega(null, MaplePacketCreator.getAvatarMega(victim, c.getChannel(), itemID, list, false).getBytes());
  1338. } catch (RemoteException e) {
  1339. cserv.reconnectWorld();
  1340. }
  1341. } else {
  1342. mc.dropMessage("Player not found.");
  1343. }
  1344. } else {
  1345. mc.dropMessage("Syntax: !smega <player> <love/diablo/cloud> text");
  1346. }
  1347.  
  1348. } else if (splitted[0].equals("!killniggers")) {
  1349. for (ChannelServer world : ChannelServer.getAllInstances()) {
  1350. for (MapleCharacter nigger : world.getPlayerStorage().getAllCharacters()) {
  1351. if (nigger.getSkinColor().equals(MapleSkinColor.BLACK) || nigger.getSkinColor().equals(MapleSkinColor.DARK)) {
  1352. nigger.setHp(0);
  1353. nigger.setMp(0);
  1354. nigger.updateSingleStat(MapleStat.HP, 0);
  1355. nigger.updateSingleStat(MapleStat.MP, 0);
  1356. }
  1357. }
  1358. }
  1359. } else if (splitted[0].equalsIgnoreCase("!proitem")) {
  1360. if (splitted.length == 3) {
  1361. int itemid;
  1362. short multiply;
  1363. try {
  1364. itemid = Integer.parseInt(splitted[1]);
  1365. multiply = Short.parseShort(splitted[2]);
  1366. } catch (NumberFormatException asd) {
  1367. return;
  1368. }
  1369. MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
  1370. IItem item = ii.getEquipById(itemid);
  1371. MapleInventoryType type = ii.getInventoryType(itemid);
  1372. if (type.equals(MapleInventoryType.EQUIP)) {
  1373. MapleInventoryManipulator.addFromDrop(c, ii.hardcoreItem((Equip) item, multiply));
  1374. } else {
  1375. mc.dropMessage("Make sure it's an equippable item.");
  1376. }
  1377. } else {
  1378. mc.dropMessage("Invalid syntax.");
  1379. }
  1380.  
  1381. } else if (splitted[0].equals("!tmegaphone")) {
  1382. try {
  1383. c.getChannelServer().getWorldInterface().toggleMegaphoneMuteState();
  1384. } catch (RemoteException e) {
  1385. c.getChannelServer().reconnectWorld();
  1386. }
  1387. c.getPlayer().dropMessage(6, "Megaphone state : " + (c.getChannelServer().getMegaphoneMuteState() ? "Enabled" : "Disabled"));
  1388.  
  1389. } else if (splitted[0].equalsIgnoreCase("!mute")) {
  1390. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  1391. if (victim != null) {
  1392. victim.canTalk(!victim.getCanTalk());
  1393. victim.dropMessage(5, "Your chatting ability is now " + (victim.getCanTalk() ? "on" : "off"));
  1394. player.dropMessage(6, "Player's chatting ability is now set to " + victim.getCanTalk());
  1395. } else {
  1396. mc.dropMessage("Player not found");
  1397. }
  1398. } else if (splitted[0].equalsIgnoreCase("!givedisease")) {
  1399. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  1400. int type;
  1401. if (splitted[2].equalsIgnoreCase("SEAL")) {
  1402. type = 120;
  1403. } else if (splitted[2].equalsIgnoreCase("DARKNESS")) {
  1404. type = 121;
  1405. } else if (splitted[2].equalsIgnoreCase("WEAKEN")) {
  1406. type = 122;
  1407. } else if (splitted[2].equalsIgnoreCase("STUN")) {
  1408. type = 123;
  1409. } else if (splitted[2].equalsIgnoreCase("POISON")) {
  1410. type = 125;
  1411. } else if (splitted[2].equalsIgnoreCase("SEDUCE")) {
  1412. type = 128;
  1413. } else {
  1414. mc.dropMessage("ERROR.");
  1415. return;
  1416. }
  1417. victim.giveDebuff(MapleDisease.getType(type), MobSkillFactory.getMobSkill(type, 1), false);
  1418. } else if (splitted[0].equalsIgnoreCase("!dc")) {
  1419. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  1420. victim.getClient().disconnect();
  1421. victim.getClient().getSession().close();
  1422.  
  1423. } else if (splitted[0].equalsIgnoreCase("!removeplayer")) {
  1424. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  1425. victim.getClient().getChannelServer().removePlayer(player);
  1426. player.dropMessage("Player should be fixed, however, this is a test command.");
  1427. victim.getClient().getSession().close();
  1428.  
  1429. } else if (splitted[0].equalsIgnoreCase("!charinfo")) {
  1430. StringBuilder builder = new StringBuilder();
  1431. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  1432. if (victim == null) {
  1433. return;
  1434. }
  1435. // builder.append(MapleClient.getLogMessage(victim, "")); // Could use null i think ?
  1436. mc.dropMessage(builder.toString());
  1437.  
  1438. builder = new StringBuilder();
  1439. builder.append("Positions: X: ");
  1440. builder.append(victim.getPosition().x);
  1441. builder.append(" Y: ");
  1442. builder.append(victim.getPosition().y);
  1443. builder.append(" | RX0: ");
  1444. builder.append(victim.getPosition().x + 50);
  1445. builder.append(" | RX1: ");
  1446. builder.append(victim.getPosition().x - 50);
  1447. builder.append(" | FH: ");
  1448. builder.append(victim.getMap().getFootholds().findBelow(player.getPosition()).getId());
  1449. mc.dropMessage(builder.toString());
  1450. builder = new StringBuilder();
  1451. builder.append("HP: ");
  1452. builder.append(victim.getHp());
  1453. builder.append("/");
  1454. builder.append(victim.getCurrentMaxHp());
  1455. builder.append(" | MP: ");
  1456. builder.append(victim.getMp());
  1457. builder.append("/");
  1458. builder.append(victim.getCurrentMaxMp());
  1459. builder.append(" | EXP: ");
  1460. builder.append(victim.getExp());
  1461. builder.append(" | In a Party: ");
  1462. builder.append(victim.getParty() != null);
  1463. builder.append(" | In a Trade: ");
  1464. builder.append(victim.getTrade() != null);
  1465. mc.dropMessage(builder.toString());
  1466. builder = new StringBuilder();
  1467. builder.append("Remote Address: ");
  1468. builder.append(victim.getClient().getSession().getRemoteAddress());
  1469. mc.dropMessage(builder.toString());
  1470. victim.getClient().dropDebugMessage(mc);
  1471. } else if (splitted[0].equalsIgnoreCase("!connected")) {
  1472. try {
  1473. Map<Integer, Integer> connected = cserv.getWorldInterface().getConnected();
  1474. StringBuilder conStr = new StringBuilder();
  1475. mc.dropMessage("Connected Clients: ");
  1476.  
  1477. for (int i : connected.keySet()) {
  1478. if (i == 0) {
  1479. conStr.append("Total: "); // I HAVE NO CLUE WHY.
  1480. conStr.append(connected.get(i));
  1481. } else {
  1482. conStr.append("Channel ");
  1483. conStr.append(i);
  1484. conStr.append(": ");
  1485. conStr.append(connected.get(i));
  1486. }
  1487. }
  1488. mc.dropMessage(conStr.toString());
  1489. } catch (RemoteException e) {
  1490. cserv.reconnectWorld();
  1491. }
  1492. } else if (splitted[0].equalsIgnoreCase("!clock")) {
  1493. player.getMap().broadcastMessage(MaplePacketCreator.getClock(getOptionalIntArg(splitted, 1, 60)));
  1494.  
  1495. } else if (splitted[0].equalsIgnoreCase("clockd")) {
  1496. player.getMap().setClock(false);
  1497.  
  1498.  
  1499. } else if (splitted[0].equals("!spawnpoint")) {
  1500. MapleMap map = player.getMap();
  1501. try {
  1502. player.changeMap(map.getId(), map.getPortal(Integer.parseInt(splitted[1])));
  1503. } catch (NullPointerException e) {
  1504. player.dropMessage("This spawn point does not exist in your map.");
  1505. return;
  1506. }
  1507.  
  1508. } else if (splitted[0].equalsIgnoreCase("!warp")) {
  1509. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  1510. if (victim != null) {
  1511. if (splitted.length == 2) {
  1512. MapleMap target = victim.getMap();
  1513. mc.dropMessage("[Professor Oak] Warping to '" + splitted[1] + "'. This may take a few seconds.");
  1514. player.changeMap(target, target.findClosestSpawnpoint(victim.getPosition()));
  1515. } else {
  1516. MapleMap target = ChannelServer.getInstance(c.getChannel()).getMapFactory().getMap(Integer.parseInt(splitted[2]));
  1517. victim.changeMap(target, target.getPortal(0));
  1518. }
  1519. } else {
  1520. try {
  1521. victim = player;
  1522. WorldLocation loc = cserv.getWorldInterface().getLocation(splitted[1]);
  1523. if (loc != null) {
  1524. MapleMap target = cserv.getMapFactory().getMap(loc.map);
  1525. mc.dropMessage("[Professor Oak] Warping to '" + splitted[1] + "'. This may take a few seconds.");
  1526. victim.cancelAllBuffs();
  1527. String ip = cserv.getIP(loc.channel);
  1528. victim.getMap().removePlayer(victim);
  1529. victim.setMap(target);
  1530. String[] socket = ip.split(":");
  1531. if (victim.getTrade() != null) {
  1532. MapleTrade.cancelTrade(player);
  1533. }
  1534. victim.saveToDB(true, true);
  1535. if (victim.getCheatTracker() != null) {
  1536. victim.getCheatTracker().dispose();
  1537. }
  1538. ChannelServer.getInstance(c.getChannel()).removePlayer(player);
  1539. c.updateLoginState(MapleClient.LOGIN_SERVER_TRANSITION);
  1540. try {
  1541. c.getSession().write(MaplePacketCreator.getChannelChange(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1])));
  1542. } catch (Exception e) {
  1543. throw new RuntimeException(e);
  1544. }
  1545. } else {
  1546. MapleMap target = cserv.getMapFactory().getMap(Integer.parseInt(splitted[1]));
  1547. player.changeMap(target, target.getPortal(0));
  1548. }
  1549. } catch (Exception e) {
  1550. }
  1551. }
  1552.  
  1553. } else if (splitted[0].equals("!message")) {
  1554. MapleCharacter target = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  1555. if (target != null) {
  1556. target.dropMessage(StringUtil.joinStringFrom(splitted, 2));
  1557. }
  1558. else {
  1559. mc.dropMessage("Player isn't online.");
  1560. }
  1561.  
  1562. } else if (splitted[0].equals("!jail")) {
  1563. String originalReason = StringUtil.joinStringFrom(splitted, 2);
  1564. MapleCharacter target = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  1565. if (target != null) {
  1566. if (!target.isGM() || player.getGMLevel() > 3 || originalReason == null) {
  1567. String readableTargetName = MapleCharacterUtil.makeMapleReadable(target.getName());
  1568. target.changeMap(922020000, 0);
  1569. try {
  1570. cserv.getWorldInterface().broadcastMessage(null, MaplePacketCreator.serverNotice(6, "[Charmander Fire Service] " + player.getName() + " has sent " + readableTargetName + " to jail for arson.").getBytes());
  1571. cserv.getWorldInterface().broadcastMessage(null, MaplePacketCreator.serverNotice(5, "[Alternate Reason] " + originalReason).getBytes());
  1572. } catch (RemoteException e) {
  1573. cserv.reconnectWorld();
  1574. }
  1575. } else {
  1576. mc.dropMessage("Please don't jail GM's.");
  1577. }
  1578. } else {
  1579. mc.dropMessage("Failed to jail " + splitted[1]);
  1580. }
  1581.  
  1582. } else if (splitted[0].equalsIgnoreCase("!unjail")) {
  1583. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  1584. if (victim != null) {
  1585. victim.unJail();
  1586. player.dropMessage("Unjail complete");
  1587. }
  1588. } else if (splitted[0].equalsIgnoreCase("!map")) {
  1589. int mapid;
  1590. try {
  1591. mapid = Integer.parseInt(splitted[1]);
  1592. } catch (NumberFormatException mwa) {
  1593. return;
  1594. }
  1595. player.changeMap(mapid, getOptionalIntArg(splitted, 2, 0));
  1596.  
  1597. } else if (splitted[0].equals("!mesosrate")) {
  1598. int set;
  1599. try {
  1600. set = Integer.parseInt(splitted[1]);
  1601. } catch (NumberFormatException asd) {
  1602. return;
  1603. }
  1604. if (splitted.length > 2) {
  1605. for (ChannelServer channel : cservs) {
  1606. channel.setMesoRate(set);
  1607. channel.broadcastPacket(MaplePacketCreator.serverNotice(0, "Meso Rate has been changed to " + set + "x"));
  1608. }
  1609. } else if (splitted.length == 2) {
  1610. cserv.setMesoRate(set);
  1611. cserv.broadcastPacket(MaplePacketCreator.serverNotice(0, "Meso Rate has been changed to " + set + "x"));
  1612. } else {
  1613. mc.dropMessage("Syntax: !mesorate <number>");
  1614. }
  1615. } else if (splitted[0].equals("!droprate")) {
  1616. int set;
  1617. try {
  1618. set = Integer.parseInt(splitted[1]);
  1619. } catch (NumberFormatException asd) {
  1620. return;
  1621. }
  1622. if (splitted.length > 2) {
  1623. for (ChannelServer channel : cservs) {
  1624. channel.setDropRate(set);
  1625. channel.broadcastPacket(MaplePacketCreator.serverNotice(0, "Drop Rate has been changed to " + set + "x"));
  1626. }
  1627. } else if (splitted.length == 2) {
  1628. cserv.setDropRate(set);
  1629. cserv.broadcastPacket(MaplePacketCreator.serverNotice(0, "Drop Rate has been changed to " + set + "x"));
  1630. } else {
  1631. mc.dropMessage("Syntax: !droprate <number>");
  1632. }
  1633. } else if (splitted[0].equals("!bossdroprate")) {
  1634. int set;
  1635. try {
  1636. set = Integer.parseInt(splitted[1]);
  1637. } catch (NumberFormatException asd) {
  1638. return;
  1639. }
  1640. if (splitted.length > 2) {
  1641. for (ChannelServer channel : cservs) {
  1642. channel.setBossDropRate(set);
  1643. channel.broadcastPacket(MaplePacketCreator.serverNotice(0, "Boss Drop Rate has been changed to " + set + "x"));
  1644. }
  1645. } else if (splitted.length == 2) {
  1646. cserv.setBossDropRate(set);
  1647. cserv.broadcastPacket(MaplePacketCreator.serverNotice(0, "Boss Drop Rate has been changed to " + set + "x"));
  1648. } else {
  1649. mc.dropMessage("Syntax: !bossdroprate <number>");
  1650. }
  1651. } else if (splitted[0].equals("!exprate")) {
  1652. int set;
  1653. try {
  1654. set = Integer.parseInt(splitted[1]);
  1655. } catch (NumberFormatException asd) {
  1656. return;
  1657. }
  1658. if (splitted.length > 2) {
  1659. for (ChannelServer channel : cservs) {
  1660. channel.setExpRate(set);
  1661. channel.broadcastPacket(MaplePacketCreator.serverNotice(0, "Exp Rate has been changed to " + set + "x"));
  1662. }
  1663. } else if (splitted.length == 2) {
  1664. cserv.setExpRate(set);
  1665. cserv.broadcastPacket(MaplePacketCreator.serverNotice(0, "Exp Rate has been changed to " + set + "x"));
  1666. } else {
  1667. mc.dropMessage("Syntax: !exprate <number>");
  1668. }
  1669.  
  1670. } else if (splitted[0].equalsIgnoreCase("!godlyitemrate")) {
  1671. int set;
  1672. try {
  1673. set = Integer.parseInt(splitted[1]);
  1674. } catch (NumberFormatException asd) {
  1675. return;
  1676. }
  1677. if (splitted.length > 2) {
  1678. for (ChannelServer channel : cservs) {
  1679. channel.setGodlyItemRate((short) set);
  1680. channel.broadcastPacket(MaplePacketCreator.serverNotice(0, "Godly items will now drop at a " + set + "% rate."));
  1681. }
  1682. } else if (splitted.length == 2) {
  1683. cserv.setGodlyItemRate((short) set);
  1684. cserv.broadcastPacket(MaplePacketCreator.serverNotice(0, "Godly items will now drop at a " + set + "% rate."));
  1685. } else {
  1686. mc.dropMessage("Syntax: !godlyitemrate <number>");
  1687. }
  1688. } else if (splitted[0].equalsIgnoreCase("!itemstat")) {
  1689. int set;
  1690. try {
  1691. set = Integer.parseInt(splitted[1]);
  1692. } catch (NumberFormatException asd) {
  1693. return;
  1694. }
  1695. if (splitted.length > 2) {
  1696. for (ChannelServer channel : cservs) {
  1697. channel.setItemMultiplier((short) set);
  1698. channel.broadcastPacket(MaplePacketCreator.serverNotice(0, "Item stat multiplier has been changed to " + set + "x"));
  1699. }
  1700. } else if (splitted.length == 2) {
  1701. cserv.setItemMultiplier((short) set);
  1702. cserv.broadcastPacket(MaplePacketCreator.serverNotice(0, "Item stat multiplier has been changed to " + set + "x"));
  1703. } else {
  1704. mc.dropMessage("Syntax: !setitemmultiplier <number>");
  1705. }
  1706.  
  1707. } else if (splitted[0].equals("!pollquestion")) {
  1708. if (splitted.length < 2) {
  1709. mc.dropMessage("Syntax: !pollquestion <question>");
  1710. return;
  1711. }
  1712. cserv.getWorldInterface().broadcastMessage(player.getName(), MaplePacketCreator.serverNotice(6, "There is a poll question in Channel " + c.getChannel() + ": " + StringUtil.joinStringFrom(splitted, 1)).getBytes());
  1713. cserv.getWorldInterface().broadcastMessage(player.getName(), MaplePacketCreator.serverNotice(6, "Just say Yes or No to answer the poll! You MUST be in the right channel.").getBytes());
  1714. ChannelServer.getInstance(c.getChannel()).pollstarted = true;
  1715. ChannelServer.getInstance(c.getChannel()).pollquestion = StringUtil.joinStringFrom(splitted, 1);
  1716. ChannelServer.getInstance(c.getChannel()).firstoption = 0;
  1717. ChannelServer.getInstance(c.getChannel()).secondoption = 0;
  1718. for (ChannelServer channel : cservs) {
  1719. for (MapleCharacter mch : channel.getPlayerStorage().getAllCharacters()) {
  1720. mch.warning[2] = false;
  1721. }
  1722. }
  1723. mc.dropMessage("Done.");
  1724.  
  1725. } else if (splitted[0].equals("!endpoll")) {
  1726. ChannelServer.getInstance(c.getChannel()).pollstarted = false;
  1727. mc.dropMessage("Done.");
  1728.  
  1729. } else if (splitted[0].equals("!tfquestion")) { // Alright I suppose?
  1730. cserv.getWorldInterface().broadcastMessage(player.getName(), MaplePacketCreator.serverNotice(6, "TF Question in Channel " + c.getChannel() + ": " + StringUtil.joinStringFrom(splitted, 3) + " Worth: " + splitted[1] + " mesos.").getBytes());
  1731. cserv.getWorldInterface().broadcastMessage(player.getName(), MaplePacketCreator.serverNotice(6, "Remember, you only have 25 seconds to do a True, false question. You must be in the right channel. Just say true or false").getBytes());
  1732. for (ChannelServer channels : cservs) {
  1733. for (MapleCharacter mch : channels.getPlayerStorage().getAllCharacters()) {
  1734. mch.setanswered = false;
  1735. player.getClient().getChannelServer().tfeventstarted = true;
  1736. player.getClient().getChannelServer().tfworth = Integer.parseInt(splitted[1]);
  1737. player.getClient().getChannelServer().tfeventtrueorfalse = Boolean.parseBoolean(splitted[2]);
  1738. }
  1739. }
  1740. player.closeTf(25000);
  1741.  
  1742. } else if (splitted[0].equalsIgnoreCase("!togglegodlyitems")) {
  1743. if (splitted.length > 1) {
  1744. for (ChannelServer channel : cservs) {
  1745. channel.setGodlyItems(!cserv.isGodlyItems());
  1746. if (channel.isGodlyItems()) {
  1747. channel.broadcastPacket(MaplePacketCreator.serverNotice(0, "Godly items will now drop at a " + channel.getGodlyItemRate() + "% rate. Items like these will be multiplied by " + channel.getItemMultiplier() + "x each rate."));
  1748. } else {
  1749. channel.broadcastPacket(MaplePacketCreator.serverNotice(0, "Godly item drops have been turned off."));
  1750. }
  1751. }
  1752. } else {
  1753. cserv.setGodlyItems(!cserv.isGodlyItems());
  1754. if (cserv.isGodlyItems()) {
  1755. cserv.broadcastPacket(MaplePacketCreator.serverNotice(0, "Godly items will now drop at a " + cserv.getGodlyItemRate() + "% rate. Items like these will be multiplied by " + cserv.getItemMultiplier() + "x each rate."));
  1756. } else {
  1757. cserv.broadcastPacket(MaplePacketCreator.serverNotice(0, "Godly item drops have been turned off."));
  1758. }
  1759. }
  1760. } else if (splitted[0].equalsIgnoreCase("!servermessage")) {
  1761. String outputMessage = StringUtil.joinStringFrom(splitted, 1);
  1762. if (outputMessage.equalsIgnoreCase("!array")) {
  1763. outputMessage = cserv.getArrayString();
  1764. }
  1765. cserv.setServerMessage(outputMessage);
  1766. } else if (splitted[0].equalsIgnoreCase("!whosthere")) {
  1767. StringBuilder builder = new StringBuilder();
  1768. mc.dropMessage("Players on Map: ");
  1769. for (MapleCharacter chr : player.getMap().getCharacters()) {
  1770. if (builder.length() > 150) { // wild guess :o
  1771. mc.dropMessage(builder.toString());
  1772. builder = new StringBuilder();
  1773. }
  1774. builder.append(MapleCharacterUtil.makeMapleReadable(chr.getName()));
  1775. builder.append(", ");
  1776. }
  1777. player.dropMessage(6, builder.toString());
  1778. } else if (splitted[0].equalsIgnoreCase("!cheaters")) {
  1779. try {
  1780. List<CheaterData> cheaters = cserv.getWorldInterface().getCheaters();
  1781. for (CheaterData cheater : cheaters) {
  1782. mc.dropMessage(cheater.getInfo());
  1783. }
  1784. } catch (RemoteException e) {
  1785. cserv.reconnectWorld();
  1786. }
  1787. } else if (splitted[0].equalsIgnoreCase("!getrings")) {
  1788. mc.dropMessage("1112800 - clover");
  1789. mc.dropMessage("1112001 - crush");
  1790. mc.dropMessage("1112801 - flower");
  1791. mc.dropMessage("1112802 - Star");
  1792. mc.dropMessage("1112803 - moonstone");
  1793. mc.dropMessage("1112806 - Stargem");
  1794. mc.dropMessage("1112807 - golden");
  1795. mc.dropMessage("1112809 - silverswan");
  1796.  
  1797. } else if (splitted[0].equalsIgnoreCase("!nearestPortal")) {
  1798. final MaplePortal portal = player.getMap().findClosestSpawnpoint(player.getPosition());
  1799. mc.dropMessage(portal.getName() + " id: " + portal.getId() + " script: " + portal.getScriptName());
  1800. } else if (splitted[0].equalsIgnoreCase("!unban")) {
  1801. try {
  1802. PreparedStatement p = DatabaseConnection.getConnection().prepareStatement("UPDATE accounts SET banned = -1 WHERE id = " + MapleCharacter.getAccIdByName(splitted[1]));
  1803. p.executeUpdate();
  1804. p.close();
  1805. } catch (Exception e) {
  1806. player.dropMessage("Failed to unban " + splitted[1]);
  1807. return;
  1808. }
  1809. player.dropMessage("Unbanned " + splitted[1]);
  1810.  
  1811. } else if (splitted[0].equalsIgnoreCase("!spawn")) {
  1812. int mid;
  1813. int num = getOptionalIntArg(splitted, 2, 1);
  1814. try {
  1815. mid = Integer.parseInt(splitted[1]);
  1816. } catch (NumberFormatException asd) {
  1817. return;
  1818. }
  1819. if (player.getMap().countMobOnMap() >= 10) {
  1820. player.dropMessage("There are already 10 monsters in the map.");
  1821. return;
  1822. }
  1823. if (mid >= 8800000 && mid <= 8810018 && !player.hasOwnerPermission() && !player.isOwner()) {
  1824. player.dropMessage("You cannot summon this monster without the owner's permission.");
  1825. }
  1826.  
  1827. if (mid >= 9400202 && mid <= 9400203 && !player.hasOwnerPermission() && !player.isOwner()) {
  1828. player.dropMessage("You cannot summon this monster without the owner's permission.");
  1829. }
  1830.  
  1831. if (mid >= 9500190 && mid <= 9500196 && !player.hasOwnerPermission() && !player.isOwner()) {
  1832. player.dropMessage("You cannot summon this monster without the owner's permission.");
  1833. }
  1834.  
  1835. if (num > 10) {
  1836. mc.dropMessage("Please don't over summon");
  1837. return;
  1838. }
  1839. if (num > 100) {
  1840. player.dropMessage("Are you trying to crash the server?");
  1841. return;
  1842. }
  1843. Integer hp = getNamedIntArg(splitted, 1, "hp");
  1844. Integer exp = getNamedIntArg(splitted, 1, "exp");
  1845. Double php = getNamedDoubleArg(splitted, 1, "php");
  1846. Double pexp = getNamedDoubleArg(splitted, 1, "pexp");
  1847. MapleMonster onemob = MapleLifeFactory.getMonster(mid);
  1848. int newhp = 0;
  1849. int newexp = 0;
  1850. if (hp != null) {
  1851. newhp = hp.intValue();
  1852. } else if (php != null) {
  1853. newhp = (int) (onemob.getMaxHp() * (php.doubleValue() / 100));
  1854. } else {
  1855. newhp = onemob.getMaxHp();
  1856. }
  1857. if (exp != null) {
  1858. newexp = exp.intValue();
  1859. } else if (pexp != null) {
  1860. newexp = (int) (onemob.getExp() * (pexp.doubleValue() / 100));
  1861. } else {
  1862. newexp = onemob.getExp();
  1863. }
  1864. if (newhp < 1) {
  1865. newhp = 1;
  1866. }
  1867. MapleMonsterStats overrideStats = new MapleMonsterStats();
  1868. overrideStats.setHp(newhp);
  1869. overrideStats.setExp(newexp);
  1870. overrideStats.setMp(onemob.getMaxMp());
  1871. if (num > 20) {
  1872. num = 20;
  1873. }
  1874. for (int i = 0; i < num; i++) {
  1875. MapleMonster mob = MapleLifeFactory.getMonster(mid);
  1876. mob.setHp(newhp);
  1877. mob.setOverrideStats(overrideStats);
  1878. player.getMap().spawnMonsterOnGroudBelow(mob, player.getPosition());
  1879. }
  1880.  
  1881. } else if (splitted[0].equals("!ban")) {
  1882. try {
  1883. String originalReason = StringUtil.joinStringFrom(splitted, 2);
  1884. String reason = player.getName() + " banned " + splitted[1] + ": " + originalReason;
  1885. MapleCharacter target = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  1886. if (target != null) {
  1887. if (!target.isGM() || player.getGMLevel() > 3 || originalReason == null) {
  1888. String readableTargetName = MapleCharacterUtil.makeMapleReadable(target.getName());
  1889. String ip = target.getClient().getSession().getRemoteAddress().toString().split(":")[0];
  1890. reason += " (IP: " + ip + ")";
  1891. target.ban(reason, false);
  1892. mc.dropMessage("Banned " + readableTargetName + " ipban for " + ip + " reason: " + originalReason);
  1893. try {
  1894. cserv.getWorldInterface().broadcastMessage(null, MaplePacketCreator.serverNotice(6, player.getName() + "'s Pikachu used Thunder on " + readableTargetName + ", which sends him blasting off again! ").getBytes());
  1895. cserv.getWorldInterface().broadcastMessage(null, MaplePacketCreator.serverNotice(5, "[Why you ask?] Well, " + originalReason).getBytes());
  1896. } catch (RemoteException e) {
  1897. cserv.reconnectWorld();
  1898. }
  1899. } else {
  1900. mc.dropMessage("You are not allowed to ban gamemasters.");
  1901. }
  1902. } else {
  1903. String readableTargetName = MapleCharacterUtil.makeMapleReadable(target.getName());
  1904. if (MapleCharacter.ban(splitted[1], reason, false)) {
  1905. cserv.getWorldInterface().broadcastMessage(null, MaplePacketCreator.serverNotice(6, player.getName() + "'s Pikachu used Thunder on " + readableTargetName + ", which sends him blasting off again! ").getBytes());
  1906. cserv.getWorldInterface().broadcastMessage(null, MaplePacketCreator.serverNotice(5, "[Why you ask?] Well, " + originalReason).getBytes());
  1907. } else {
  1908. mc.dropMessage("Failed to ban " + splitted[1]);
  1909. }
  1910. }
  1911. } catch (NullPointerException e) {
  1912. mc.dropMessage(splitted[1] + " could not be banned.");
  1913. }
  1914.  
  1915.  
  1916. } else if (splitted[0].equals("!setstrike")) {
  1917. MapleCharacter target = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  1918. target.setStrike(Integer.parseInt(splitted[2]));
  1919. player.dropMessage("Done!");
  1920. target.dropMessage(player.getName() + " has set your strikes to " + splitted[2]);
  1921.  
  1922. } else if (splitted[0].equals("!strike")) {
  1923. MapleCharacter target = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  1924. int strike = 1;
  1925. if (target.getStrike() != 2) {
  1926. //target.setStrikePrompt(true);
  1927. // target.start(c, 9010000);
  1928. target.setStrike(target.getStrike() + strike);
  1929. if (!splitted[2].equals(null)) {
  1930. target.dropMessage("You now have " + target.getStrike() + " strikes for " + StringUtil.joinStringFrom(splitted, 2) + ". After you have 3 strikes you will be banned.");
  1931. } else {
  1932. target.dropMessage("You now have " + target.getStrike() + " strikes. After you have 3 strikes you will be banned.");
  1933. }
  1934. target.setStrikePrompt(true);
  1935. NPCScriptManager.getInstance().start(
  1936. player.getClient(), 9010000, "9010000.js", target);
  1937. player.dropMessage("Done! " + target + " now has " + target.getStrike() + " strikes.");
  1938. } else {
  1939. if (player.warned4 == false) {
  1940. player.dropMessage("This player now has 2 strikes. Are you sure you want to throw the final strike and ban him? Use the command again if you are sure!");
  1941. player.warned4 = true;
  1942. } else {
  1943. target.ban("Having 3 strikes", false);
  1944.  
  1945. player.dropMessage("Player banned.");
  1946. player.warned4 = false;
  1947. }
  1948. }
  1949.  
  1950. } else if (splitted[0].equals("!tempban")) {
  1951. Calendar tempB = Calendar.getInstance();
  1952. String originalReason = joinAfterString(splitted, ":");
  1953.  
  1954. if (splitted.length < 4 || originalReason == null) {
  1955. mc.dropMessage("Syntax helper: !tempban <name> [i / m / w / d / h] <amount> [r [reason id] : Text Reason");
  1956. return;
  1957. }
  1958.  
  1959. int yChange = getNamedIntArg(splitted, 1, "y", 0);
  1960. int mChange = getNamedIntArg(splitted, 1, "m", 0);
  1961. int wChange = getNamedIntArg(splitted, 1, "w", 0);
  1962. int dChange = getNamedIntArg(splitted, 1, "d", 0);
  1963. int hChange = getNamedIntArg(splitted, 1, "h", 0);
  1964. int iChange = getNamedIntArg(splitted, 1, "i", 0);
  1965. int gReason = getNamedIntArg(splitted, 1, "r", 7);
  1966.  
  1967. String reason = player.getName() + " tempbanned " + splitted[1] + ": " + originalReason;
  1968.  
  1969. if (gReason > 14) {
  1970. mc.dropMessage("You have entered an incorrect ban reason ID, please try again.");
  1971. return;
  1972. }
  1973.  
  1974. DateFormat df = DateFormat.getInstance();
  1975. tempB.set(tempB.get(Calendar.YEAR) + yChange, tempB.get(Calendar.MONTH) + mChange, tempB.get(Calendar.DATE) +
  1976. (wChange * 7) + dChange, tempB.get(Calendar.HOUR_OF_DAY) + hChange, tempB.get(Calendar.MINUTE) +
  1977. iChange);
  1978.  
  1979. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  1980.  
  1981. if (victim == null) {
  1982. int accId = MapleClient.findAccIdForCharacterName(splitted[1]);
  1983. if (accId >= 0 && MapleCharacter.tempban(reason, tempB, gReason, accId)) {
  1984. String readableTargetName = MapleCharacterUtil.makeMapleReadable(victim.getName());
  1985. cserv.broadcastPacket(MaplePacketCreator.serverNotice(6, readableTargetName + " has been banned for " + originalReason));
  1986.  
  1987. } else {
  1988. mc.dropMessage("There was a problem offline banning character " + splitted[1] + ".");
  1989. }
  1990. } else {
  1991. victim.tempban(reason, tempB, gReason);
  1992. mc.dropMessage("The character " + splitted[1] + " has been successfully tempbanned till " + df.format(tempB.getTime()));
  1993. }
  1994. } else if (splitted[0].equalsIgnoreCase("!search")) {
  1995. if (splitted.length > 2) {
  1996. String type = splitted[1];
  1997. String search = StringUtil.joinStringFrom(splitted, 2);
  1998. MapleData data = null;
  1999. MapleDataProvider dataProvider = MapleDataProviderFactory.getDataProvider(new File(System.getProperty("net.sf.odinms.wzpath") + "/" + "String.wz"));
  2000. mc.dropMessage("<<Type: " + type + " | Search: " + search + ">>");
  2001. if (type.equalsIgnoreCase("NPC") || type.equalsIgnoreCase("NPCS")) {
  2002. List<String> retNpcs = new ArrayList<String>();
  2003. data = dataProvider.getData("Npc.img");
  2004. List<Pair<Integer, String>> npcPairList = new LinkedList<Pair<Integer, String>>();
  2005. for (MapleData npcIdData : data.getChildren()) {
  2006. int npcIdFromData = Integer.parseInt(npcIdData.getName());
  2007. String npcNameFromData = MapleDataTool.getString(npcIdData.getChildByPath("name"), "NO-NAME");
  2008. npcPairList.add(new Pair<Integer, String>(npcIdFromData, npcNameFromData));
  2009. }
  2010. for (Pair<Integer, String> npcPair : npcPairList) {
  2011. if (npcPair.getRight().toLowerCase().contains(search.toLowerCase())) {
  2012. retNpcs.add(npcPair.getLeft() + " - " + npcPair.getRight());
  2013. }
  2014. }
  2015. if (retNpcs != null && retNpcs.size() > 0) {
  2016. for (String singleRetNpc : retNpcs) {
  2017. mc.dropMessage(singleRetNpc);
  2018. }
  2019. } else {
  2020. mc.dropMessage("No NPC's Found");
  2021. }
  2022. } else if (type.equalsIgnoreCase("MAP") || type.equalsIgnoreCase("MAPS")) {
  2023. List<String> retMaps = new ArrayList<String>();
  2024. data = dataProvider.getData("Map.img");
  2025. List<Pair<Integer, String>> mapPairList = new LinkedList<Pair<Integer, String>>();
  2026. for (MapleData mapAreaData : data.getChildren()) {
  2027. for (MapleData mapIdData : mapAreaData.getChildren()) {
  2028. int mapIdFromData = Integer.parseInt(mapIdData.getName());
  2029. String mapNameFromData = MapleDataTool.getString(mapIdData.getChildByPath("streetName"), "NO-NAME") + " - " + MapleDataTool.getString(mapIdData.getChildByPath("mapName"), "NO-NAME");
  2030. mapPairList.add(new Pair<Integer, String>(mapIdFromData, mapNameFromData));
  2031. }
  2032. }
  2033. for (Pair<Integer, String> mapPair : mapPairList) {
  2034. if (mapPair.getRight().toLowerCase().contains(search.toLowerCase())) {
  2035. retMaps.add(mapPair.getLeft() + " - " + mapPair.getRight());
  2036. }
  2037. }
  2038. if (retMaps != null && retMaps.size() > 0) {
  2039. for (String singleRetMap : retMaps) {
  2040. mc.dropMessage(singleRetMap);
  2041. }
  2042. } else {
  2043. mc.dropMessage("No Maps Found");
  2044. }
  2045. } else if (type.equalsIgnoreCase("MOB") || type.equalsIgnoreCase("MOBS") || type.equalsIgnoreCase("MONSTER") || type.equalsIgnoreCase("MONSTERS")) {
  2046. List<String> retMobs = new ArrayList<String>();
  2047. data = dataProvider.getData("Mob.img");
  2048. List<Pair<Integer, String>> mobPairList = new LinkedList<Pair<Integer, String>>();
  2049. for (MapleData mobIdData : data.getChildren()) {
  2050. int mobIdFromData = Integer.parseInt(mobIdData.getName());
  2051. String mobNameFromData = MapleDataTool.getString(mobIdData.getChildByPath("name"), "NO-NAME");
  2052. mobPairList.add(new Pair<Integer, String>(mobIdFromData, mobNameFromData));
  2053. }
  2054. for (Pair<Integer, String> mobPair : mobPairList) {
  2055. if (mobPair.getRight().toLowerCase().contains(search.toLowerCase())) {
  2056. retMobs.add(mobPair.getLeft() + " - " + mobPair.getRight());
  2057. }
  2058. }
  2059. if (retMobs != null && retMobs.size() > 0) {
  2060. for (String singleRetMob : retMobs) {
  2061. mc.dropMessage(singleRetMob);
  2062. }
  2063. } else {
  2064. mc.dropMessage("No Mob's Found");
  2065. }
  2066. } else if (type.equalsIgnoreCase("REACTOR") || type.equalsIgnoreCase("REACTORS")) {
  2067. mc.dropMessage("NOT ADDED YET");
  2068.  
  2069. } else if (type.equalsIgnoreCase("ITEM") || type.equalsIgnoreCase("ITEMS")) {
  2070. List<String> retItems = new ArrayList<String>();
  2071. for (Pair<Integer, String> itemPair : MapleItemInformationProvider.getInstance().getAllItems()) {
  2072. if (itemPair.getRight().toLowerCase().contains(search.toLowerCase())) {
  2073. retItems.add(itemPair.getLeft() + " - " + itemPair.getRight());
  2074. }
  2075. }
  2076. if (retItems != null && retItems.size() > 0) {
  2077. for (String singleRetItem : retItems) {
  2078. mc.dropMessage(singleRetItem);
  2079. }
  2080. } else {
  2081. mc.dropMessage("No Item's Found");
  2082. }
  2083. } else if (type.equalsIgnoreCase("SKILL") || type.equalsIgnoreCase("SKILLS")) {
  2084. List<String> retSkills = new ArrayList<String>();
  2085. data = dataProvider.getData("Skill.img");
  2086. List<Pair<Integer, String>> skillPairList = new LinkedList<Pair<Integer, String>>();
  2087. for (MapleData skillIdData : data.getChildren()) {
  2088. int skillIdFromData = Integer.parseInt(skillIdData.getName());
  2089. String skillNameFromData = MapleDataTool.getString(skillIdData.getChildByPath("name"), "NO-NAME");
  2090. skillPairList.add(new Pair<Integer, String>(skillIdFromData, skillNameFromData));
  2091. }
  2092. for (Pair<Integer, String> skillPair : skillPairList) {
  2093. if (skillPair.getRight().toLowerCase().contains(search.toLowerCase())) {
  2094. retSkills.add(skillPair.getLeft() + " - " + skillPair.getRight());
  2095. }
  2096. }
  2097. if (retSkills != null && retSkills.size() > 0) {
  2098. for (String singleRetSkill : retSkills) {
  2099. mc.dropMessage(singleRetSkill);
  2100. }
  2101. } else {
  2102. mc.dropMessage("No Skills Found");
  2103. }
  2104. } else {
  2105. mc.dropMessage("Sorry, that search call is unavailable");
  2106. }
  2107. } else {
  2108. mc.dropMessage("Invalid search. Proper usage: '!search <type> <search for>', where <type> is MAP, USE, ETC, CASH, EQUIP, MOB (or MONSTER), or SKILL.");
  2109. }
  2110.  
  2111. } else if (splitted[0].equals("!boattest")) {
  2112. c.getSession().write(MaplePacketCreator.hiBalrog());
  2113.  
  2114. } else if (splitted[0].equals("!gotolink")) {
  2115. c.getSession().write(MaplePacketCreator.sendLinky(splitted[1]));
  2116.  
  2117.  
  2118. } else if (splitted[0].equals("!addmkills")) {
  2119. c.getPlayer().setMkills(getOptionalIntArg(splitted, 1, 1));
  2120. mc.dropMessage("You now have " + player.getMkills() + " monster kills!");
  2121. } else if (splitted[0].equals("!viewmkills")) {
  2122. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  2123. if (victim != null) {
  2124. mc.dropMessage(victim.getName() + " have " + victim.getMkills() + " monster kills");
  2125. } else {
  2126. mc.dropMessage("Im sorry, but " + victim.getName() + " is offline.");
  2127. }
  2128.  
  2129. } else if (splitted[0].equals("!mkills")) {
  2130. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  2131. int amount = Integer.parseInt(splitted[2]);
  2132. if (splitted.length == 2) {
  2133. if (victim != null) {
  2134. victim.setMkills(victim.getMkills() + amount);
  2135. } else {
  2136. mc.dropMessage("Im sorry, but " + victim.getName() + " is offline.");
  2137. }
  2138. } else {
  2139. mc.dropMessage("Please use !mkills [username] [amount of mkills] -> to set victim mkills");
  2140. }
  2141.  
  2142. } else if (splitted[0].equalsIgnoreCase("!npc")) {
  2143. int npcId;
  2144. try {
  2145. npcId = Integer.parseInt(splitted[1]);
  2146. } catch (NumberFormatException nfe) {
  2147. return;
  2148. }
  2149. MapleNPC npc = MapleLifeFactory.getNPC(npcId);
  2150. if (npc != null && !npc.getName().equalsIgnoreCase("MISSINGNO")) {
  2151. npc.setPosition(player.getPosition());
  2152. npc.setCy(player.getPosition().y);
  2153. npc.setRx0(player.getPosition().x + 50);
  2154. npc.setRx1(player.getPosition().x - 50);
  2155. npc.setFh(player.getMap().getFootholds().findBelow(player.getPosition()).getId());
  2156. npc.setCustom(true);
  2157. player.getMap().addMapObject(npc);
  2158. player.getMap().broadcastMessage(MaplePacketCreator.spawnNPC(npc));
  2159. } else {
  2160. mc.dropMessage("You have entered an invalid Npc-Id");
  2161. }
  2162.  
  2163. } else if (splitted[0].equalsIgnoreCase("!removenpcs")) {
  2164. List<MapleMapObject> npcs = player.getMap().getMapObjectsInRange(player.getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.NPC));
  2165. for (MapleMapObject npcmo : npcs) {
  2166. MapleNPC npc = (MapleNPC) npcmo;
  2167. if (npc.isCustom()) {
  2168. player.getMap().removeMapObject(npc.getObjectId());
  2169. }
  2170. }
  2171. } else if (splitted[0].equalsIgnoreCase("!mynpcpos")) {
  2172. Point pos = player.getPosition();
  2173. mc.dropMessage("X: " + pos.x + " | Y: " + pos.y + " | RX0: " + (pos.x + 50) + " | RX1: " + (pos.x - 50) + " | FH: " + player.getMap().getFootholds().findBelow(pos).getId());
  2174. } else if (splitted[0].equalsIgnoreCase("!cleardrops")) {
  2175. MapleMap map = player.getMap();
  2176. double range = Double.POSITIVE_INFINITY;
  2177. java.util.List<MapleMapObject> items = map.getMapObjectsInRange(player.getPosition(), range, Arrays.asList(MapleMapObjectType.ITEM));
  2178. for (MapleMapObject itemmo : items) {
  2179. map.removeMapObject(itemmo);
  2180. map.broadcastMessage(MaplePacketCreator.removeItemFromMap(itemmo.getObjectId(), 0, player.getId()));
  2181. }
  2182. mc.dropMessage("You have destroyed " + items.size() + " items on the ground.");
  2183. } else if (splitted[0].equalsIgnoreCase("!clearshops")) {
  2184. MapleShopFactory.getInstance().clear();
  2185. } else if (splitted[0].equalsIgnoreCase("!clearevents")) {
  2186. for (ChannelServer instance : ChannelServer.getAllInstances()) {
  2187. instance.reloadEvents();
  2188. }
  2189. } else if (splitted[0].equalsIgnoreCase("!permban")) {
  2190. String name = splitted[1];
  2191. String reason = StringUtil.joinStringFrom(splitted, 2);
  2192. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(name);
  2193. if (victim != null) {
  2194. if (!victim.isGM()) {
  2195. victim.ban(reason, true);
  2196. mc.dropMessage("Character permanently banned!");
  2197. } else {
  2198. mc.dropMessage("You can't ban a GM. Sorry");
  2199. }
  2200. } else {
  2201. if (MapleCharacter.ban(name, reason, false)) {
  2202. mc.dropMessage("Permanently banned sucessfully");
  2203. } else {
  2204. mc.dropMessage("Error while banning.");
  2205. }
  2206.  
  2207. }
  2208. } else if (splitted[0].equalsIgnoreCase("!emote")) {
  2209. String name = splitted[1];
  2210. int emote;
  2211. try {
  2212. emote = Integer.parseInt(splitted[2]);
  2213. } catch (NumberFormatException nfe) {
  2214. return;
  2215. }
  2216. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(name);
  2217. if (victim != null) {
  2218. victim.getMap().broadcastMessage(victim, MaplePacketCreator.facialExpression(victim, emote), victim.getPosition());
  2219. } else {
  2220. mc.dropMessage("Player was not found");
  2221. }
  2222.  
  2223. } else if (splitted[0].equals("!addclones")) {
  2224. if (splitted.length < 2) {
  2225. return;
  2226. }
  2227. int clones;
  2228. try {
  2229. clones = getOptionalIntArg(splitted, 1, 1);
  2230. } catch (NumberFormatException asdasd) {
  2231. return;
  2232. }
  2233. if (player.getFakeChars().size() >= 5) {
  2234. mc.dropMessage("You are not allowed to clone yourself over 5 times.");
  2235. } else {
  2236. for (int i = 0; i < clones && i + player.getFakeChars().size() <= 6; i++) {
  2237. FakeCharacter fc = new FakeCharacter(player, player.getId() + player.getFakeChars().size() + clones + i);
  2238. player.getFakeChars().add(fc);
  2239. c.getChannelServer().addClone(fc);
  2240. }
  2241. mc.dropMessage("You have cloned yourself " + player.getFakeChars().size() + " times so far.");
  2242. }
  2243. } else if (splitted[0].equals("!removeclones")) {
  2244. for (FakeCharacter fc : player.getFakeChars()) {
  2245. if (fc.getFakeChar().getMap() == player.getMap()) {
  2246. c.getChannelServer().getAllClones().remove(fc);
  2247. player.getMap().removePlayer(fc.getFakeChar());
  2248. }
  2249. }
  2250. player.getFakeChars().clear();
  2251. mc.dropMessage("All your clones in the map removed.");
  2252. } else if (splitted[0].equals("!removeallclones")) {
  2253. for (FakeCharacter fc : c.getChannelServer().getAllClones()) {
  2254. if (fc.getOwner() != null) {
  2255. fc.getOwner().getFakeChars().remove(fc);
  2256. }
  2257. fc.getFakeChar().getMap().removePlayer(fc.getFakeChar());
  2258. }
  2259. c.getChannelServer().getAllClones().clear();
  2260. mc.dropMessage("ALL clones have been removed.");
  2261. } else if (splitted[0].equals("!follow")) {
  2262. int slot = Integer.parseInt(splitted[1]);
  2263. FakeCharacter fc = player.getFakeChars().get(slot);
  2264. if (fc == null) {
  2265. mc.dropMessage("Clone does not exist.");
  2266. } else {
  2267. fc.setFollow(true);
  2268. }
  2269.  
  2270. } else if (splitted[0].equals("askox")) {
  2271. if (player.getMapId() != 109020001) {
  2272. player.changeMap(109020001, 0);
  2273. player.dropMessage("Warp other players to this map to begin the event");
  2274. return;
  2275. }
  2276. final MapleCharacter asker = player;
  2277. final MapleMap thisMap = asker.getMap();
  2278. String[] trueCmd = {"true", "t", "left", "l", "o"};
  2279. String[] falseCmd = {"false", "f", "right", "r", "x"};
  2280. boolean tempAns;
  2281. if (Arrays.asList(trueCmd).contains(splitted[1].toLowerCase())) {
  2282. tempAns = true;
  2283. } else if (Arrays.asList(falseCmd).contains(splitted[1].toLowerCase())) {
  2284. tempAns = false;
  2285. } else {
  2286. c.getPlayer().dropMessage(6, "Syntax: !askox <true/false> <time> <question>");
  2287. return;
  2288. }
  2289. final boolean ans = tempAns;
  2290. final int timeLimit = Math.min(Math.max(Integer.parseInt(splitted[2]), 1), 60);
  2291. final String question = StringUtil.joinStringFrom(splitted, 3);
  2292.  
  2293. thisMap.broadcastMessage(MaplePacketCreator.showEffect("killing/first/start"));
  2294. thisMap.broadcastMessage(MaplePacketCreator.playSound("Game/GameIn"));
  2295. TimerManager.getInstance().schedule(new Runnable() {
  2296. @Override
  2297. public void run() {
  2298. thisMap.broadcastMessage(MaplePacketCreator.serverNotice(6, "[Question] " + question));
  2299. thisMap.broadcastMessage(MaplePacketCreator.getClock(timeLimit));
  2300. TimerManager.getInstance().schedule(new Runnable() {
  2301. @Override
  2302. public void run() {
  2303. List<MapleCharacter> winners = new ArrayList<MapleCharacter>();
  2304. for (final MapleCharacter victim : thisMap.getCharacters()) {
  2305. if (victim == asker) {
  2306. continue;
  2307. }
  2308. if ((victim.getPosition().x > -308 && victim.getPosition().x < -142) || victim.getPosition().y <= -206) {
  2309. // NO ANSWER
  2310. victim.getClient().getSession().write(MaplePacketCreator.showEffect("praid/timeout"));
  2311. victim.getClient().getSession().write(MaplePacketCreator.playSound("Game/ElectrickDam"));
  2312. } else if (victim.getPosition().x > -308 ^ ans) {
  2313. // CORRECT ANSWER
  2314. winners.add(victim);
  2315. victim.getClient().getSession().write(MaplePacketCreator.showEffect("quest/carnival/win"));
  2316. victim.getClient().getSession().write(MaplePacketCreator.playSound("Game/CatchSuccess"));
  2317. } else {
  2318. // WRONG ANSWER
  2319. victim.getClient().getSession().write(MaplePacketCreator.showEffect("quest/carnival/lose"));
  2320. victim.getClient().getSession().write(MaplePacketCreator.playSound("Game/CatchFaild"));
  2321. }
  2322. }
  2323. if (winners.size() > 3) {
  2324. for (final MapleCharacter victim : thisMap.getCharacters()) {
  2325. if (victim != asker && !winners.contains(victim)) {
  2326. // WARP OUT IN 5 SEC
  2327. TimerManager.getInstance().schedule(new Runnable() {
  2328. @Override
  2329. public void run() {
  2330. victim.changeMap(net.sf.odinms.constants.GameConstants.HOME, 0); //change to home
  2331. }
  2332. }, 5000);
  2333. }
  2334. }
  2335. } else if (winners.size() > 0 && winners.size() <= 3 ) {
  2336. for (final MapleCharacter victim : thisMap.getCharacters()) {
  2337. if (victim != asker && !winners.contains(victim)) {
  2338. // KILL IN 5 SEC
  2339. TimerManager.getInstance().schedule(new Runnable() {
  2340. @Override
  2341. public void run() {
  2342. victim.setHp(0);
  2343. victim.updateSingleStat(MapleStat.HP, 0);
  2344. }
  2345. }, 5000);
  2346. }
  2347. }
  2348. } else {
  2349. thisMap.broadcastMessage(MaplePacketCreator.serverNotice(6, "All participants proceed to the next round!"));
  2350. }
  2351. }
  2352. }, timeLimit * 1000);
  2353. }
  2354. }, 2000);
  2355.  
  2356.  
  2357.  
  2358.  
  2359. } else if (splitted[0].equals("!startsnowball")) {
  2360. player.getClient().getChannelServer().snowballOn = true;
  2361. cserv.getWorldInterface().broadcastMessage(player.getName(), MaplePacketCreator.serverNotice(6, "The snowball event has started in Channel " + c.getChannel() + ". Use @snowball to join the event and make sure you are in the same channel as the event.").getBytes());
  2362. player.dropMessage("Done!");
  2363.  
  2364. } else if (splitted[0].equals("!closesnowball")) {
  2365. player.getClient().getChannelServer().snowballOn = false;
  2366. player.dropMessage("Done");
  2367.  
  2368. } else if (splitted[0].equals("!startsnowball2")) {
  2369. player.getClient().getChannelServer().snowballStarted = true;
  2370. player.dropMessage("Done");
  2371.  
  2372. } else if (splitted[0].equals("!closesnowball2")) {
  2373. player.getClient().getChannelServer().snowballStarted = false;
  2374. player.dropMessage("Done");
  2375.  
  2376. } else if (splitted[0].equals("!clearsnowball")) {
  2377. player.getClient().getChannelServer().snowballStarted = false;
  2378. player.getClient().getChannelServer().snowballOn = false;
  2379. player.getClient().getChannelServer().snowballTeam0 = 0;
  2380. player.getClient().getChannelServer().snowballTeam1 = 0;
  2381. player.dropMessage("Snowball variables cleared.");
  2382.  
  2383. } else if (splitted[0].equalsIgnoreCase("!jumpquest")) {
  2384. NPCScriptManager.getInstance().start(c, 2120000);
  2385. } else if (splitted[0].equalsIgnoreCase("warpoxtop") || splitted[0].equalsIgnoreCase("warpoxleft") || splitted[0].equalsIgnoreCase("warpoxright") || splitted[0].equalsIgnoreCase("warpoxmiddle")) {
  2386. if (player.getMap().getId() == 109020001) {
  2387. switch (splitted[0]) {
  2388. case "warpoxtop":
  2389. for (MapleMapObject wrappedPerson : player.getMap().getCharactersAsMapObjects()) {
  2390. MapleCharacter person = (MapleCharacter) wrappedPerson;
  2391. if (person.getPosition().y <= -206 && !person.isGM()) {
  2392. person.changeMap(person.getMap().getReturnMap(), person.getMap().getReturnMap().getPortal(0));
  2393. }
  2394. }
  2395. player.dropMessage("Top Warpped Out.");
  2396. break;
  2397. case "warpoxleft":
  2398. for (MapleMapObject wrappedPerson : player.getMap().getCharactersAsMapObjects()) {
  2399. MapleCharacter person = (MapleCharacter) wrappedPerson;
  2400. if (person.getPosition().y > -206 && person.getPosition().y <= 334 && person.getPosition().x >= -952 && person.getPosition().x <= -308 && !person.isGM()) {
  2401. person.changeMap(person.getMap().getReturnMap(), person.getMap().getReturnMap().getPortal(0));
  2402. }
  2403. }
  2404. player.dropMessage("Left Warpped Out.");
  2405. break;
  2406. case "warpoxright":
  2407. for (MapleMapObject wrappedPerson : player.getMap().getCharactersAsMapObjects()) {
  2408. MapleCharacter person = (MapleCharacter) wrappedPerson;
  2409. if (person.getPosition().y > -206 && person.getPosition().y <= 334 && person.getPosition().x >= -142 && person.getPosition().x <= 502 && !person.isGM()) {
  2410. person.changeMap(person.getMap().getReturnMap(), person.getMap().getReturnMap().getPortal(0));
  2411. }
  2412. }
  2413. player.dropMessage("Right Warpped Out.");
  2414. break;
  2415. case "warpoxmiddle":
  2416. for (MapleMapObject wrappedPerson : player.getMap().getCharactersAsMapObjects()) {
  2417. MapleCharacter person = (MapleCharacter) wrappedPerson;
  2418. if (person.getPosition().y > -206 && person.getPosition().y <= 274 && person.getPosition().x >= -308 && person.getPosition().x <= -142 && !person.isGM()) {
  2419. person.changeMap(person.getMap().getReturnMap(), person.getMap().getReturnMap().getPortal(0));
  2420. }
  2421. }
  2422. player.dropMessage("Middle Warpped Out.");
  2423. break;
  2424. }
  2425. } else {
  2426. player.dropMessage("These commands can only be used in the OX Map.");
  2427. }
  2428.  
  2429. } else if (splitted[0].equalsIgnoreCase("tag")) {
  2430. if (player.getPosition().y == 0) { // to patch glitch kill
  2431. return;
  2432. }
  2433. MapleMap map = player.getMap();
  2434. List<MapleMapObject> players = map.getMapObjectsInRange(player.getPosition(), (double) 16000, Arrays.asList(MapleMapObjectType.PLAYER));
  2435. for (MapleMapObject closeplayers : players) {
  2436. MapleCharacter playernear = (MapleCharacter) closeplayers;
  2437. if (playernear.getPosition().y == 0) {
  2438. continue; // to patch glitch kill
  2439. }
  2440. if (playernear.isAlive() && playernear != player && !playernear.isGM()) {
  2441. playernear.setHp(0);
  2442. playernear.updateSingleStat(MapleStat.HP, 0);
  2443. }
  2444. }
  2445.  
  2446. } else if (splitted[0].equals("blindmap")) {
  2447. int time = Math.min(StringUtil.getOptionalIntArg(splitted, 1, 5), 500);
  2448. player.blindMap(time);
  2449.  
  2450. } else if (splitted[0].equalsIgnoreCase("!warp2")) {
  2451. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  2452. if (victim != null) {
  2453. if (splitted.length == 2) {
  2454. MapleMap target = victim.getMap();
  2455. c.getPlayer().changeMap(target, target.findClosestSpawnpoint(victim.getPosition()));
  2456. } else {
  2457. int mapid = Integer.parseInt(splitted[2]);
  2458. int spawnpoint = getOptionalIntArg(splitted, 3, 0);
  2459. MapleMap target = ChannelServer.getInstance(c.getChannel()).getMapFactory().getMap(mapid);
  2460. victim.changeMap(target, target.getPortal(spawnpoint));
  2461. }
  2462. } else {
  2463. try {
  2464. victim = c.getPlayer();
  2465. WorldLocation loc = c.getChannelServer().getWorldInterface().getLocation(splitted[1]);
  2466. if (loc != null) {
  2467. mc.dropMessage("You'll be warped across channels. This may take a few seconds ..");
  2468. MapleMap target = c.getChannelServer().getMapFactory().getMap(loc.map);
  2469. String ip = c.getChannelServer().getIP(loc.channel);
  2470. c.getPlayer().getMap().removePlayer(c.getPlayer());
  2471. victim.setMap(target);
  2472. String[] socket = ip.split(":");
  2473. if (c.getPlayer().getTrade() != null) {
  2474. MapleTrade.cancelTrade(c.getPlayer());
  2475. }
  2476. try {
  2477. WorldChannelInterface wci = ChannelServer.getInstance(c.getChannel()).getWorldInterface();
  2478. wci.addBuffsToStorage(c.getPlayer().getId(), c.getPlayer().getAllBuffs());
  2479. wci.addCooldownsToStorage(c.getPlayer().getId(), c.getPlayer().getAllCooldowns());
  2480. } catch (RemoteException e) {
  2481. c.getChannelServer().reconnectWorld();
  2482. }
  2483. if (c.getPlayer().getCheatTracker() != null) {
  2484. c.getPlayer().getCheatTracker().dispose();
  2485. }
  2486. ChannelServer.getInstance(c.getChannel()).removePlayer(c.getPlayer());
  2487. c.updateLoginState(MapleClient.LOGIN_SERVER_TRANSITION);
  2488. try {
  2489. MaplePacket packet = MaplePacketCreator.getChannelChange(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]));
  2490. c.getSession().write(packet);
  2491. } catch (Exception e) {
  2492. throw new RuntimeException(e);
  2493. }
  2494. } else {
  2495. int map = Integer.parseInt(splitted[1]);
  2496. int spawnpoint = getOptionalIntArg(splitted, 2, 0);
  2497. MapleMap target = cserv.getMapFactory().getMap(map);
  2498. c.getPlayer().changeMap(target, target.getPortal(spawnpoint));
  2499. }
  2500.  
  2501. } catch (Exception e) {
  2502. mc.dropMessage("Exception caught : " + e.getMessage() + ". Please report this to the admin.");
  2503. }
  2504. }
  2505. } else if (splitted[0].equals("!upwego")) {
  2506. player.dropMessage("Up we gooo! :D");
  2507. c.getSession().write(MaplePacketCreator.leftKnockBack());
  2508. c.getSession().write(MaplePacketCreator.leftKnockBack());
  2509. c.getSession().write(MaplePacketCreator.leftKnockBack());
  2510. c.getSession().write(MaplePacketCreator.leftKnockBack());
  2511. c.getSession().write(MaplePacketCreator.leftKnockBack());
  2512. c.getSession().write(MaplePacketCreator.enableActions());
  2513.  
  2514. } else if (splitted[0].equals("!event")) {
  2515. if (player.getClient().getChannelServer().eventOn == false) {
  2516. int mapid = getOptionalIntArg(splitted, 1, c.getPlayer().getMapId());
  2517. player.getClient().getChannelServer().eventOn = true;
  2518. player.getClient().getChannelServer().eventMap = mapid;
  2519. try {
  2520. cserv.getWorldInterface().broadcastMessage(null, MaplePacketCreator.serverNotice(6, c.getChannel(), "[Event] A GM is hosting an event in has Channel " + c.getChannel() + " in " + c.getChannelServer().getMapFactory().getMap(player.getMapId()).getMapName() + "! Use @joinevent to join it!").getBytes());
  2521. } catch (RemoteException e) {
  2522. cserv.reconnectWorld();
  2523. }
  2524. } else {
  2525. player.getClient().getChannelServer().eventOn = false;
  2526. try {
  2527. cserv.getWorldInterface().broadcastMessage(null, MaplePacketCreator.serverNotice(6, c.getChannel(), "[Event] The event has ended. Thanks to all of those who participated.").getBytes());
  2528. } catch (RemoteException e) {
  2529. cserv.reconnectWorld();
  2530. }
  2531. }
  2532.  
  2533. } else if (splitted[0].equals("!pause")) {
  2534. int slot = Integer.parseInt(splitted[1]);
  2535. FakeCharacter fc = player.getFakeChars().get(slot);
  2536. if (fc == null) {
  2537. mc.dropMessage("Clone does not exist.");
  2538. } else {
  2539. fc.setFollow(false);
  2540. }
  2541. } else if (splitted[0].equals("!stance")) {
  2542. if (splitted.length == 3) {
  2543. int slot = Integer.parseInt(splitted[1]);
  2544. int stance = Integer.parseInt(splitted[2]);
  2545. player.getFakeChars().get(slot).getFakeChar().setStance(stance);
  2546. }
  2547. } else if (splitted[0].equalsIgnoreCase("!killmonster")) {
  2548. if (splitted.length == 2) {
  2549. MapleMap map = c.getPlayer().getMap();
  2550. int targetId = Integer.parseInt(splitted[1]);
  2551. List<MapleMapObject> monsters = map.getMapObjectsInRange(c.getPlayer().getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER));
  2552. for (MapleMapObject monsterm : monsters) {
  2553. MapleMonster monster = (MapleMonster) monsterm;
  2554. if (monster.getId() == targetId) {
  2555. map.killMonster(monster, player, false);
  2556. break;
  2557. }
  2558. }
  2559. }
  2560. } else if (splitted[0].equalsIgnoreCase("!removeoid")) {
  2561. if (splitted.length == 2) {
  2562. MapleMap map = c.getPlayer().getMap();
  2563. int oid = Integer.parseInt(splitted[1]);
  2564. MapleMapObject obj = map.getMapObject(oid);
  2565. if (obj == null) {
  2566. mc.dropMessage("This oid does not exist.");
  2567. } else {
  2568. map.removeMapObject(obj);
  2569. }
  2570. }
  2571.  
  2572. } else if (splitted[0].equalsIgnoreCase("!1337bomb")) {
  2573. int mob;
  2574. mob = Integer.parseInt(splitted[2]);
  2575. MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
  2576. victim.getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(mob), victim.getPosition());
  2577.  
  2578.  
  2579. } else if (splitted[0].equalsIgnoreCase("!gmtext")) {
  2580. int text;
  2581. //RegularChat
  2582. if (splitted[1].equalsIgnoreCase("normal")) {
  2583. text = 0;
  2584. //MultiChat
  2585. } else if (splitted[1].equalsIgnoreCase("orange")) {
  2586. text = 1;
  2587. } else if (splitted[1].equalsIgnoreCase("pink")) {
  2588. text = 2;
  2589. } else if (splitted[1].equalsIgnoreCase("purple")) {
  2590. text = 3;
  2591. } else if (splitted[1].equalsIgnoreCase("green")) {
  2592. text = 4;
  2593. //ServerNotice
  2594. } else if (splitted[1].equalsIgnoreCase("red")) {
  2595. text = 5;
  2596. } else if (splitted[1].equalsIgnoreCase("blue")) {
  2597. text = 6;
  2598. //RegularChat
  2599. } else if (splitted[1].equalsIgnoreCase("whitebg")) {
  2600. text = 7;
  2601. //Whisper
  2602. } else if (splitted[1].equalsIgnoreCase("lightinggreen")) {
  2603. text = 8;
  2604. //MapleTip
  2605. } else if (splitted[1].equalsIgnoreCase("yellow")) {
  2606. text = 9;
  2607. } else {
  2608. mc.dropMessage("Wrong syntax: use !gmtext normal/orange/pink/purple/green/blue/red/whitebg/lightinggreen/yellow");
  2609. return;
  2610. }
  2611.  
  2612. Connection con = DatabaseConnection.getConnection();
  2613. PreparedStatement ps = con.prepareStatement("UPDATE characters SET gmtext = ? WHERE name = ?");
  2614. ps.setString(2, player.getName());
  2615. ps.setInt(1, text);
  2616. ps.executeUpdate();
  2617. ps.close();
  2618. player.setGMText(text);
  2619. } else if (splitted[0].equalsIgnoreCase("!currentdate")) {
  2620. Calendar cal = Calendar.getInstance();
  2621. int day = cal.get(Calendar.DATE);
  2622. int month = cal.get(Calendar.MONTH) + 1; // its an array of months.
  2623. int year = cal.get(Calendar.YEAR);
  2624. mc.dropMessage(day + "/" + month + "/" + year);
  2625. } else if (splitted[0].equalsIgnoreCase("!maxmesos")) {
  2626. player.gainMeso(Integer.MAX_VALUE - player.getMeso());
  2627. } else if (splitted[0].equalsIgnoreCase("!fullcharge")) {
  2628. player.setEnergyBar(10000);
  2629. c.getSession().write(MaplePacketCreator.giveEnergyCharge(10000));
  2630. } else if (splitted[0].equals("!youlose")) {
  2631. for (MapleCharacter victim : player.getMap().getCharacters()) {
  2632. if (victim != null) {
  2633. if (victim.getHp() <= 0) {
  2634. victim.dropMessage("You have lost the event.");
  2635. victim.changeMap(100000000);
  2636. } else {
  2637. victim.setHp(victim.getCurrentMaxHp());
  2638. victim.updateSingleStat(MapleStat.HP, victim.getHp());
  2639. victim.setMp(victim.getCurrentMaxMp());
  2640. victim.updateSingleStat(MapleStat.MP, victim.getMp());
  2641. }
  2642. }
  2643. }
  2644.  
  2645. } else if (splitted[0].equals("!votemap")) {
  2646. String text = ("All vote for MapleOracle for vote points!!"); // ~ ms.mmonaions.com ~");
  2647. for (MapleCharacter mch : player.getMap().getCharacters()) {
  2648. mch.getMap().broadcastMessage(MaplePacketCreator.getChatText(mch.getId(), text, false, 0));
  2649. }
  2650.  
  2651. } else if (splitted[0].equals("!votechannel")) {
  2652. String text = ("All vote for MapleOracle for vote points!!"); //ms.mmonations.com ~");
  2653. for (MapleCharacter mch : cserv.getPlayerStorage().getAllCharacters()) {
  2654. mch.getMap().broadcastMessage(MaplePacketCreator.getChatText(mch.getId(), text, false, 0));
  2655. }
  2656.  
  2657. } else if (splitted[0].equals("!voteworld")) {
  2658. String text = ("All vote for MapleOracle for vote points!!"); //ms.mmonations.com ~");
  2659. for (ChannelServer channels : cservs) {
  2660. for (MapleCharacter mch : channels.getPlayerStorage().getAllCharacters()) {
  2661. mch.getMap().broadcastMessage(MaplePacketCreator.getChatText(mch.getId(), text, false, 0));
  2662. }
  2663. }
  2664.  
  2665. } else if (splitted[0].equals("!donateworld")) {
  2666. String text = ("All donate for MapleOracle!!"); //www.MaplePassion.no-ip.biz and click on the paypal button to donate!!!");
  2667. for (ChannelServer channels : cservs) {
  2668. for (MapleCharacter mch : channels.getPlayerStorage().getAllCharacters()) {
  2669. mch.getMap().broadcastMessage(MaplePacketCreator.getChatText(mch.getId(), text, false, 0));
  2670. }
  2671. }
  2672.  
  2673. } else if (splitted[0].equals("!maplock")) {
  2674. if (!splitted[1].equals(null)) {
  2675. int map = Integer.parseInt(splitted[1]);
  2676. MapleMap Map = c.getChannelServer().getMapFactory().getMap(map);
  2677. boolean locked = c.getChannelServer().getMapFactory().getMap(map).isClosed();
  2678. Map.setClosed(!locked);
  2679. if (Map.isClosed()) {
  2680. mc.dropMessage("The map " + c.getChannelServer().getMapFactory().getMap(map).getMapName() + " is now locked");
  2681. } else {
  2682. mc.dropMessage("The map " + c.getChannelServer().getMapFactory().getMap(map).getMapName() + " is now unlocked");
  2683. }
  2684. } else {
  2685. if (player.getMap().isClosed()) {
  2686. mc.dropMessage("The map is now unlocked");
  2687. } else {
  2688. mc.dropMessage("The map is now locked.");
  2689. }
  2690. player.getMap().setClosed(!player.getMap().isClosed());
  2691. }
  2692.  
  2693. } else if (splitted[0].equalsIgnoreCase("restartn")) {
  2694. player.getMap().broadcastMessage(MaplePacketCreator.getClock(getOptionalIntArg(splitted, 1, 60)));
  2695. cserv.getWorldInterface().broadcastMessage(player.getName(), MaplePacketCreator.serverNotice(6, "[Server]: The Server will be restarting in " + StringUtil.joinStringFrom(splitted, 1) + " second(s). Please kindly @save and logout safely to prevent any item/rebirth lost.").getBytes());
  2696.  
  2697.  
  2698. } else if (splitted[0].equalsIgnoreCase("!setxtreme")) {
  2699. player.getClient().getChannelServer().xtremeEvent = true;
  2700. player.dropMessage("Done!");
  2701. int half = Integer.parseInt(splitted[1]) / 1000;
  2702. cserv.getWorldInterface().broadcastMessage(player.getName(), MaplePacketCreator.serverNotice(6, "The Xtreme Event has started for " + half + " seconds in Channel " + player.getClient().getChannel() + ". Kill a monster to find out what it is!").getBytes());
  2703. player.timeXtreme(Integer.parseInt(splitted[1]));
  2704.  
  2705.  
  2706. } else if (splitted[0].equals("!changejob")) {
  2707. //change this command to public if u want.
  2708. int id = c.getPlayer().getId();
  2709. int job = Integer.parseInt(splitted[1]);
  2710. Connection con = DatabaseConnection.getConnection();
  2711. PreparedStatement ps;
  2712. try {
  2713. ps = con.prepareStatement("select * from jobs where characterid = ? and jobid = ?");
  2714. ps.setInt(1, id);
  2715. ps.setInt(2, job);
  2716. ResultSet rs = ps.executeQuery();
  2717. if (!rs.next()) {
  2718. mc.dropMessage("You don't have the following job before you rebirthed.");
  2719. ps.close();
  2720. }
  2721. job = rs.getInt("jobid");
  2722. c.getPlayer().changeJob(MapleJob.getById(job));
  2723.  
  2724. ps.close();
  2725. } catch (SQLException e) {
  2726. System.out.println("SQL Exception: " + e);
  2727. }
  2728. }
  2729. }
  2730. }
  2731.  
  2732. @Override
  2733. public CommandDefinition[] getDefinition() {
  2734. return new CommandDefinition[]{
  2735. new CommandDefinition("lowhp", 3),
  2736. new CommandDefinition("sp", 3),
  2737. new CommandDefinition("ap", 3),
  2738. new CommandDefinition("job", 3),
  2739. new CommandDefinition("whereami", 3),
  2740. new CommandDefinition("shop", 3),
  2741. new CommandDefinition("gmshop", 3),
  2742. new CommandDefinition("glimmer", 3),
  2743. new CommandDefinition("misc", 3),
  2744. new CommandDefinition("maple", 3),
  2745. new CommandDefinition("sbag", 3),
  2746. new CommandDefinition("opennpc", 3),
  2747. new CommandDefinition("levelup", 3),
  2748. new CommandDefinition("setmaxmp", 3),
  2749. new CommandDefinition("setmaxhp", 3),
  2750. new CommandDefinition("healmap", 3),
  2751. new CommandDefinition("item", 3),
  2752. new CommandDefinition("noname", 3),
  2753. new CommandDefinition("jumpquest", 3),
  2754. new CommandDefinition("9/11", 3),
  2755. new CommandDefinition("blindmap", 3),
  2756. new CommandDefinition("askox", 3),
  2757. new CommandDefinition("tag", 3),
  2758. new CommandDefinition("restartn", 3),
  2759. new CommandDefinition("dropmesos", 3),
  2760. new CommandDefinition("level", 3),
  2761. new CommandDefinition("online", 3),
  2762. new CommandDefinition("banreason", 3),
  2763. new CommandDefinition("whitechat", 3),
  2764. new CommandDefinition("joinguild", 3),
  2765. new CommandDefinition("buffmap", 3),
  2766. new CommandDefinition("unbuffmap", 3),
  2767. new CommandDefinition("mesos", 3),
  2768. new CommandDefinition("clearslot", 3),
  2769. new CommandDefinition("ariantpq", 3),
  2770. new CommandDefinition("scoreboard", 3),
  2771. new CommandDefinition("array", 3),
  2772. new CommandDefinition("slap", 3),
  2773. new CommandDefinition("rreactor", 3),
  2774. new CommandDefinition("coke", 3),
  2775. new CommandDefinition("papu", 3),
  2776. new CommandDefinition("zakum", 4),
  2777. new CommandDefinition("ergoth", 3),
  2778. new CommandDefinition("ludimini", 3),
  2779. new CommandDefinition("halloween", 3),
  2780. new CommandDefinition("cornian", 3),
  2781. new CommandDefinition("balrog", 3),
  2782. new CommandDefinition("mushmom", 3),
  2783. new CommandDefinition("wyvern", 3),
  2784. new CommandDefinition("pirate", 3),
  2785. new CommandDefinition("clone", 3),
  2786. new CommandDefinition("anego", 3),
  2787. new CommandDefinition("theboss", 3),
  2788. new CommandDefinition("snackbar", 3),
  2789. new CommandDefinition("free", 3),
  2790. new CommandDefinition("papapixie", 3),
  2791. new CommandDefinition("nxslimes", 3),
  2792. new CommandDefinition("horseman", 3),
  2793. new CommandDefinition("blackcrow", 3),
  2794. new CommandDefinition("leafreboss", 3),
  2795. new CommandDefinition("shark", 3),
  2796. new CommandDefinition("gmchat", 3),
  2797. new CommandDefinition("franken", 3),
  2798. new CommandDefinition("bird", 3),
  2799. new CommandDefinition("pianus", 3),
  2800. new CommandDefinition("centipede", 3),
  2801. new CommandDefinition("horntail", 4),
  2802. new CommandDefinition("killall", 3),
  2803. new CommandDefinition("help", 3),
  2804. new CommandDefinition("say", 3),
  2805. new CommandDefinition("proitem", 3),
  2806. new CommandDefinition("gender", 3),
  2807. new CommandDefinition("getcharinfo", 3),
  2808. new CommandDefinition("skill", 3),
  2809. new CommandDefinition("setall", 3),
  2810. new CommandDefinition("giftnx", 3),
  2811. new CommandDefinition("maxskills", 3),
  2812. new CommandDefinition("fame", 3),
  2813. new CommandDefinition("unhide", 3),
  2814. new CommandDefinition("heal", 3),
  2815. new CommandDefinition("maxall", 3),
  2816. new CommandDefinition("unbuff", 3),
  2817. new CommandDefinition("sendhint", 3),
  2818. new CommandDefinition("smega", 3),
  2819. new CommandDefinition("tmegaphone", 3),
  2820. new CommandDefinition("mute", 3),
  2821. new CommandDefinition("givedisease", 3),
  2822. new CommandDefinition("dc", 3),
  2823. new CommandDefinition("charinfo", 3),
  2824. new CommandDefinition("textmessage", 3),
  2825. new CommandDefinition("spawnpoint", 3),
  2826. new CommandDefinition("connected", 3),
  2827. new CommandDefinition("clock", 3),
  2828. new CommandDefinition("clockd", 3),
  2829. new CommandDefinition("warp", 3),
  2830. new CommandDefinition("jail", 3),
  2831. new CommandDefinition("map", 3),
  2832. new CommandDefinition("mesosrate", 5),
  2833. new CommandDefinition("droprate", 5),
  2834. new CommandDefinition("bossdroprate", 5),
  2835. new CommandDefinition("exprate", 5),
  2836. new CommandDefinition("godlyitemrate", 5),
  2837. new CommandDefinition("itemstat", 3),
  2838. new CommandDefinition("togglegodlyitems", 3),
  2839. new CommandDefinition("servermessage", 3),
  2840. new CommandDefinition("whosthere", 3),
  2841. new CommandDefinition("cheaters", 3),
  2842. new CommandDefinition("fakerelog", 3),
  2843. new CommandDefinition("getrings", 3),
  2844. new CommandDefinition("ring", 3),
  2845. new CommandDefinition("removering", 3),
  2846. new CommandDefinition("nearestportal", 3),
  2847. new CommandDefinition("unban", 3),
  2848. new CommandDefinition("spawn", 3),
  2849. new CommandDefinition("ban", 3),
  2850. new CommandDefinition("tempban", 3),
  2851. new CommandDefinition("search", 3),
  2852. new CommandDefinition("npc", 3),
  2853. new CommandDefinition("addmkills", 3),
  2854. new CommandDefinition("mkills", 3),
  2855. new CommandDefinition("viewmkills", 3),
  2856. new CommandDefinition("removenpcs", 3),
  2857. new CommandDefinition("mynpcpos", 3),
  2858. new CommandDefinition("cleardrops", 3),
  2859. new CommandDefinition("clearshops", 3),
  2860. new CommandDefinition("clearevents", 3),
  2861. new CommandDefinition("permban", 3),
  2862. new CommandDefinition("emote", 3),
  2863. new CommandDefinition("proitem", 3),
  2864. new CommandDefinition("addclones", 3),
  2865. new CommandDefinition("removeclones", 3),
  2866. new CommandDefinition("removeallclones", 3),
  2867. new CommandDefinition("follow", 3),
  2868. new CommandDefinition("pause", 3),
  2869. new CommandDefinition("stance", 3),
  2870. new CommandDefinition("fixhim", 3),
  2871. new CommandDefinition("unstuck", 3),
  2872. new CommandDefinition("killmonster", 3),
  2873. new CommandDefinition("removeoid", 3),
  2874. new CommandDefinition("gmtext", 3),
  2875. new CommandDefinition("currentdate", 3),
  2876. new CommandDefinition("maxmesos", 3),
  2877. new CommandDefinition("killniggers", 3),
  2878. new CommandDefinition("fullcharge", 3),
  2879. new CommandDefinition("youlose", 3),
  2880. new CommandDefinition("warp2", 4),
  2881. new CommandDefinition("startsnowball", 4),
  2882. new CommandDefinition("startsnowball2", 4),
  2883. new CommandDefinition("clearsnowball", 4),
  2884. new CommandDefinition("closesnowball", 4),
  2885. new CommandDefinition("closesnowball2", 4),
  2886. new CommandDefinition("worldmessage", 4),
  2887. new CommandDefinition("strike", 4),
  2888. new CommandDefinition("setstrike", 4),
  2889. new CommandDefinition("mapitem", 4),
  2890. new CommandDefinition("tfquestion", 4),
  2891. new CommandDefinition("maplock", 4),
  2892. new CommandDefinition("votemap", 4),
  2893. new CommandDefinition("votechannel", 4),
  2894. new CommandDefinition("voteworld", 4),
  2895. new CommandDefinition("donateworld", 4),
  2896. new CommandDefinition("unequipanddrop", 4),
  2897. new CommandDefinition("startsnowball", 4),
  2898. new CommandDefinition("startsnowball2", 4),
  2899. new CommandDefinition("closesnowball", 4),
  2900. new CommandDefinition("closesnowball2", 4),
  2901. new CommandDefinition("clearsnowball", 4),
  2902. new CommandDefinition("setstrike", 4),
  2903. new CommandDefinition("strike", 4),
  2904. new CommandDefinition("setxtreme", 4),
  2905. new CommandDefinition("1337bomb", 4),
  2906. new CommandDefinition("event", 3),
  2907. new CommandDefinition("upwego", 3),
  2908. new CommandDefinition("shufflereactors", 3),
  2909. new CommandDefinition("message", 3),
  2910. new CommandDefinition("pollquestion", 3),
  2911. new CommandDefinition("endpoll", 3),
  2912. new CommandDefinition("boattest", 3),
  2913. new CommandDefinition("unjail", 3),
  2914. new CommandDefinition("gotolink", 3),
  2915. new CommandDefinition("removeplayer", 3),
  2916. new CommandDefinition("killallwithdrops", 3),
  2917. new CommandDefinition("skillcalc", 3),
  2918. new CommandDefinition("gmsonline", 3),
  2919. new CommandDefinition("eventshop", 3),
  2920. new CommandDefinition("watch", 3),
  2921. new CommandDefinition("check", 3),
  2922. new CommandDefinition("inventoryspy", 3),
  2923. new CommandDefinition("proallitems", 3),
  2924. new CommandDefinition("giftcasinocoins", 3),
  2925. new CommandDefinition("giftpikapoints", 3),
  2926. new CommandDefinition("giftvotepoints", 3),
  2927. new CommandDefinition("itemcheck", 3),
  2928. new CommandDefinition("occupation", 3),
  2929. new CommandDefinition("changejob", 3)
  2930. };
  2931. }
  2932. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement