/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package client.messages.commands; import client.MapleCharacter; import client.MapleCharacterUtil; import client.MapleClient; import client.MapleStat; import client.Skill; import client.SkillFactory; import client.inventory.Equip; import client.inventory.Item; import client.inventory.ItemFlag; import client.inventory.MapleInventoryType; import client.messages.CommandProcessorUtil; import client.messages.commands.InternCommand.Ban; import client.messages.commands.InternCommand.TempBan; import constants.GameConstants; import constants.ServerConstants.PlayerGMRank; import handling.channel.ChannelServer; import handling.world.World; import scripting.EventInstanceManager; import scripting.EventManager; import server.MapleCarnivalChallenge; import server.MapleInventoryManipulator; import server.MapleItemInformationProvider; import server.MapleShopFactory; import server.life.MapleMonster; import server.maps.MapleMap; import tools.packet.CField; import tools.StringUtil; import tools.packet.CWvsContext; import tools.packet.CWvsContext.InventoryPacket; /** * * @author Emilyx3 */ public class GMCommand { public static PlayerGMRank getPlayerLevelRequired() { return PlayerGMRank.GM; } public static class GetSkill extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { Skill skill = SkillFactory.getSkill(Integer.parseInt(splitted[1])); byte level = (byte) CommandProcessorUtil.getOptionalIntArg(splitted, 2, 1); byte masterlevel = (byte) CommandProcessorUtil.getOptionalIntArg(splitted, 3, 1); if (level > skill.getMaxLevel()) { level = (byte) skill.getMaxLevel(); } if (masterlevel > skill.getMaxLevel()) { masterlevel = (byte) skill.getMaxLevel(); } c.getPlayer().changeSingleSkillLevel(skill, level, masterlevel); return 1; } } public static class Fame extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { MapleCharacter player = c.getPlayer(); if (splitted.length < 2) { c.getPlayer().dropMessage(6, "Syntax: !fame <player> <amount>"); return 0; } MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]); int fame = 0; try { fame = Integer.parseInt(splitted[2]); } catch (NumberFormatException nfe) { c.getPlayer().dropMessage(6, "Invalid Number..."); return 0; } if (victim != null && player.allowedToTarget(victim)) { victim.addFame(fame); victim.updateSingleStat(MapleStat.FAME, victim.getFame()); } return 1; } } public static class Invincible extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { MapleCharacter player = c.getPlayer(); if (player.isInvincible()) { player.setInvincible(false); player.dropMessage(6, "Invincibility deactivated."); } else { player.setInvincible(true); player.dropMessage(6, "Invincibility activated."); } return 1; } } public static class SP extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { c.getPlayer().setRemainingSp(CommandProcessorUtil.getOptionalIntArg(splitted, 1, 1)); c.getPlayer().updateSingleStat(MapleStat.AVAILABLESP, 0); // we don't care the value here return 1; } } public static class spawnDebug extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { c.getPlayer().dropMessage(5, c.getPlayer().getMap().spawnDebug()); return 1; } } public static class Shop extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { MapleShopFactory shop = MapleShopFactory.getInstance(); int shopId = Integer.parseInt(splitted[1]); if (shop.getShop(shopId) != null) { shop.getShop(shopId).sendShop(c); } return 1; } } public static class Job extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { if (MapleCarnivalChallenge.getJobNameById(Integer.parseInt(splitted[1])).length() == 0) { c.getPlayer().dropMessage(5, "Invalid Job"); return 0; } c.getPlayer().changeJob((short) Integer.parseInt(splitted[1])); c.getPlayer().resetSP(0); return 1; } } public static class LevelUp extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { if (c.getPlayer().getLevel() < 200) { c.getPlayer().gainExp(500000000, true, false, true); } return 1; } } public static class GetItem extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { final int itemId = Integer.parseInt(splitted[1]); final short quantity = (short) CommandProcessorUtil.getOptionalIntArg(splitted, 2, 1); if (!c.getPlayer().isAdmin()) { for (int i : GameConstants.itemBlock) { if (itemId == i) { c.getPlayer().dropMessage(5, "Sorry but this item is blocked for your GM level."); return 0; } } } MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); if (GameConstants.isPet(itemId)) { c.getPlayer().dropMessage(5, "Please purchase a pet from the cash shop instead."); } else if (!ii.itemExists(itemId)) { c.getPlayer().dropMessage(5, itemId + " does not exist"); } else { Item item; short flag = (short) ItemFlag.LOCK.getValue(); if (GameConstants.getInventoryType(itemId) == MapleInventoryType.EQUIP) { item = ii.randomizeStats((Equip) ii.getEquipById(itemId)); } else { item = new client.inventory.Item(itemId, (byte) 0, quantity, (byte) 0); } if (!c.getPlayer().isSuperGM()) { item.setFlag(flag); } if (!c.getPlayer().isAdmin()) { item.setOwner(c.getPlayer().getName()); item.setGMLog(c.getPlayer().getName() + " used !getitem"); } MapleInventoryManipulator.addbyItem(c, item); } return 1; } } public static class Level extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { c.getPlayer().setLevel(Short.parseShort(splitted[1])); c.getPlayer().levelUp(); if (c.getPlayer().getExp() < 0) { c.getPlayer().gainExp((int) -c.getPlayer().getExp(), false, false, true); } return 1; } } public static class RemoveItem extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { if (splitted.length < 3) { c.getPlayer().dropMessage(6, "Need <name> <itemid>"); return 0; } MapleCharacter chr = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]); if (chr == null) { c.getPlayer().dropMessage(6, "This player does not exist"); return 0; } chr.removeAll(Integer.parseInt(splitted[2]), false); c.getPlayer().dropMessage(6, "All items with the ID " + splitted[2] + " has been removed from the inventory of " + splitted[1] + "."); return 1; } } public static class LockItem extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { if (splitted.length < 3) { c.getPlayer().dropMessage(6, "Need <name> <itemid>"); return 0; } MapleCharacter chr = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]); if (chr == null) { c.getPlayer().dropMessage(6, "This player does not exist"); return 0; } int itemid = Integer.parseInt(splitted[2]); MapleInventoryType type = GameConstants.getInventoryType(itemid); for (Item item : chr.getInventory(type).listById(itemid)) { item.setFlag((byte) (item.getFlag() | ItemFlag.LOCK.getValue())); chr.getClient().getSession().write(InventoryPacket.updateSpecialItemUse(item, type.getType(), item.getPosition(), true, chr)); } if (type == MapleInventoryType.EQUIP) { type = MapleInventoryType.EQUIPPED; for (Item item : chr.getInventory(type).listById(itemid)) { item.setFlag((byte) (item.getFlag() | ItemFlag.LOCK.getValue())); //chr.getClient().getSession().write(CField.updateSpecialItemUse(item, type.getType())); } } c.getPlayer().dropMessage(6, "All items with the ID " + splitted[2] + " has been locked from the inventory of " + splitted[1] + "."); return 1; } } public static class KillMap extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { for (MapleCharacter map : c.getPlayer().getMap().getCharactersThreadsafe()) { if (map != null && !map.isGM()) { map.getStat().setHp((short) 0, map); map.getStat().setMp((short) 0, map); map.updateSingleStat(MapleStat.HP, 0); map.updateSingleStat(MapleStat.MP, 0); } } return 1; } } public static class SpeakMega extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]); World.Broadcast.broadcastSmega(CWvsContext.serverNotice(3, victim == null ? c.getChannel() : victim.getClient().getChannel(), victim == null ? splitted[1] : victim.getName() + " : " + StringUtil.joinStringFrom(splitted, 2), true)); return 1; } } public static class Speak extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]); if (victim == null) { c.getPlayer().dropMessage(5, "unable to find '" + splitted[1]); return 0; } else { victim.getMap().broadcastMessage(CField.getChatText(victim.getId(), StringUtil.joinStringFrom(splitted, 2), victim.isGM(), 0)); } return 1; } } public static class Disease extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { if (splitted.length < 3) { c.getPlayer().dropMessage(6, "!disease <type> [charname] <level> where type = SEAL/DARKNESS/WEAKEN/STUN/CURSE/POISON/SLOW/SEDUCE/REVERSE/ZOMBIFY/POTION/SHADOW/BLIND/FREEZE/POTENTIAL"); return 0; } int type = 0; if (splitted[1].equalsIgnoreCase("SEAL")) { type = 120; } else if (splitted[1].equalsIgnoreCase("DARKNESS")) { type = 121; } else if (splitted[1].equalsIgnoreCase("WEAKEN")) { type = 122; } else if (splitted[1].equalsIgnoreCase("STUN")) { type = 123; } else if (splitted[1].equalsIgnoreCase("CURSE")) { type = 124; } else if (splitted[1].equalsIgnoreCase("POISON")) { type = 125; } else if (splitted[1].equalsIgnoreCase("SLOW")) { type = 126; } else if (splitted[1].equalsIgnoreCase("SEDUCE")) { type = 128; } else if (splitted[1].equalsIgnoreCase("REVERSE")) { type = 132; } else if (splitted[1].equalsIgnoreCase("ZOMBIFY")) { type = 133; } else if (splitted[1].equalsIgnoreCase("POTION")) { type = 134; } else if (splitted[1].equalsIgnoreCase("SHADOW")) { type = 135; } else if (splitted[1].equalsIgnoreCase("BLIND")) { type = 136; } else if (splitted[1].equalsIgnoreCase("FREEZE")) { type = 137; } else if (splitted[1].equalsIgnoreCase("POTENTIAL")) { type = 138; } else { c.getPlayer().dropMessage(6, "!disease <type> [charname] <level> where type = SEAL/DARKNESS/WEAKEN/STUN/CURSE/POISON/SLOW/SEDUCE/REVERSE/ZOMBIFY/POTION/SHADOW/BLIND/FREEZE/POTENTIAL"); return 0; } if (splitted.length == 4) { MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[2]); if (victim == null) { c.getPlayer().dropMessage(5, "Not found."); return 0; } victim.disease(type, CommandProcessorUtil.getOptionalIntArg(splitted, 3, 1)); } else { for (MapleCharacter victim : c.getPlayer().getMap().getCharactersThreadsafe()) { victim.disease(type, CommandProcessorUtil.getOptionalIntArg(splitted, 3, 1)); } } return 1; } } public static class CloneMe extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { c.getPlayer().cloneLook(); return 1; } } public static class DisposeClones extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { c.getPlayer().dropMessage(6, c.getPlayer().getCloneSize() + " clones disposed."); c.getPlayer().disposeClones(); return 1; } } public static class SetInstanceProperty extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { EventManager em = c.getChannelServer().getEventSM().getEventManager(splitted[1]); if (em == null || em.getInstances().size() <= 0) { c.getPlayer().dropMessage(5, "none"); } else { em.setProperty(splitted[2], splitted[3]); for (EventInstanceManager eim : em.getInstances()) { eim.setProperty(splitted[2], splitted[3]); } } return 1; } } public static class ListInstanceProperty extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { EventManager em = c.getChannelServer().getEventSM().getEventManager(splitted[1]); if (em == null || em.getInstances().size() <= 0) { c.getPlayer().dropMessage(5, "none"); } else { for (EventInstanceManager eim : em.getInstances()) { c.getPlayer().dropMessage(5, "Event " + eim.getName() + ", eventManager: " + em.getName() + " iprops: " + eim.getProperty(splitted[2]) + ", eprops: " + em.getProperty(splitted[2])); } } return 0; } } public static class LeaveInstance extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { if (c.getPlayer().getEventInstance() == null) { c.getPlayer().dropMessage(5, "You are not in one"); } else { c.getPlayer().getEventInstance().unregisterPlayer(c.getPlayer()); } return 1; } } public static class WhosThere extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { StringBuilder builder = new StringBuilder("Players on Map: ").append(c.getPlayer().getMap().getCharactersThreadsafe().size()).append(", "); for (MapleCharacter chr : c.getPlayer().getMap().getCharactersThreadsafe()) { if (builder.length() > 150) { // wild guess :o builder.setLength(builder.length() - 2); c.getPlayer().dropMessage(6, builder.toString()); builder = new StringBuilder(); } builder.append(MapleCharacterUtil.makeMapleReadable(chr.getName())); builder.append(", "); } builder.setLength(builder.length() - 2); c.getPlayer().dropMessage(6, builder.toString()); return 1; } } public static class StartInstance extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { if (c.getPlayer().getEventInstance() != null) { c.getPlayer().dropMessage(5, "You are in one"); } else if (splitted.length > 2) { EventManager em = c.getChannelServer().getEventSM().getEventManager(splitted[1]); if (em == null || em.getInstance(splitted[2]) == null) { c.getPlayer().dropMessage(5, "Not exist"); } else { em.getInstance(splitted[2]).registerPlayer(c.getPlayer()); } } else { c.getPlayer().dropMessage(5, "!startinstance [eventmanager] [eventinstance]"); } return 1; } } public static class ResetMobs extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { c.getPlayer().getMap().killAllMonsters(false); return 1; } } public static class KillMonsterByOID extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { MapleMap map = c.getPlayer().getMap(); int targetId = Integer.parseInt(splitted[1]); MapleMonster monster = map.getMonsterByOid(targetId); if (monster != null) { map.killMonster(monster, c.getPlayer(), false, false, (byte) 1); } return 1; } } public static class RemoveNPCs extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { c.getPlayer().getMap().resetNPCs(); return 1; } } public static class Notice extends CommandExecute { protected static int getNoticeType(String typestring) { if (typestring.equals("n")) { return 0; } else if (typestring.equals("p")) { return 1; } else if (typestring.equals("l")) { return 2; } else if (typestring.equals("nv")) { return 5; } else if (typestring.equals("v")) { return 5; } else if (typestring.equals("b")) { return 6; } return -1; } @Override public int execute(MapleClient c, String[] splitted) { int joinmod = 1; int range = -1; if (splitted[1].equals("m")) { range = 0; } else if (splitted[1].equals("c")) { range = 1; } else if (splitted[1].equals("w")) { range = 2; } int tfrom = 2; if (range == -1) { range = 2; tfrom = 1; } int type = getNoticeType(splitted[tfrom]); if (type == -1) { type = 0; joinmod = 0; } StringBuilder sb = new StringBuilder(); if (splitted[tfrom].equals("nv")) { sb.append("[Notice]"); } else { sb.append(""); } joinmod += tfrom; sb.append(StringUtil.joinStringFrom(splitted, joinmod)); byte[] packet = CWvsContext.serverNotice(type, sb.toString()); if (range == 0) { c.getPlayer().getMap().broadcastMessage(packet); } else if (range == 1) { ChannelServer.getInstance(c.getChannel()).broadcastPacket(packet); } else if (range == 2) { World.Broadcast.broadcastMessage(packet); } return 1; } } public static class Yellow extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { int range = -1; if (splitted[1].equals("m")) { range = 0; } else if (splitted[1].equals("c")) { range = 1; } else if (splitted[1].equals("w")) { range = 2; } if (range == -1) { range = 2; } byte[] packet = CWvsContext.yellowChat((splitted[0].equals("!y") ? ("[" + c.getPlayer().getName() + "] ") : "") + StringUtil.joinStringFrom(splitted, 2)); if (range == 0) { c.getPlayer().getMap().broadcastMessage(packet); } else if (range == 1) { ChannelServer.getInstance(c.getChannel()).broadcastPacket(packet); } else if (range == 2) { World.Broadcast.broadcastMessage(packet); } return 1; } } public static class Y extends Yellow { } public static class WhatsMyIP extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { c.getPlayer().dropMessage(5, "IP: " + c.getSession().getRemoteAddress().toString().split(":")[0]); return 1; } } public static class TempBanIP extends TempBan { public TempBanIP() { ipBan = true; } } public static class BanIP extends Ban { public BanIP() { ipBan = true; } } public static class TDrops extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { c.getPlayer().getMap().toggleDrops(); return 1; } } }