/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package server.commands;
import client.*;
import client.anticheat.ReportType;
import client.inventory.*;
import constants.GameConstants;
import constants.ServerConstants.PlayerGMRank;
import handling.channel.ChannelServer;
import handling.world.CheaterData;
import handling.world.World;
import java.awt.Point;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;
import scripting.EventInstanceManager;
import scripting.EventManager;
import scripting.NPCScriptManager;
import server.MapleInventoryManipulator;
import server.MapleItemInformationProvider;
import server.MaplePortal;
import server.commands.GMCommand.Ban;
import server.commands.GMCommand.TempBan;
import server.events.MapleEvent;
import server.events.MapleEventType;
import server.life.MapleLifeFactory;
import server.life.MapleMonster;
import server.life.MapleMonsterInformationProvider;
import server.life.MapleNPC;
import server.life.OverrideMonsterStats;
import server.maps.MapleMap;
import server.maps.MapleMapObject;
import server.maps.MapleMapObjectType;
import server.maps.MapleReactor;
import server.quest.MapleQuest;
import server.shops.MapleShopFactory;
import tools.Pair;
import tools.StringUtil;
import tools.packet.CField;
import tools.packet.CWvsContext;
import tools.packet.CWvsContext.InventoryPacket;
/**
*
* @author Emilyx3
*/
public class GMCommand {
public static PlayerGMRank getPlayerLevelRequired() {
return PlayerGMRank.GM;
}
public static class Reports extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
List<CheaterData> cheaters = World.getReports();
for (int x = cheaters.size() - 1; x >= 0; x--) {
CheaterData cheater = cheaters.get(x);
c.getPlayer().dropMessage(6, cheater.getInfo());
}
return 1;
}
}
public static class ClearReport extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 3) {
StringBuilder ret = new StringBuilder("report [ign] [all/");
for (ReportType type : ReportType.values()) {
ret.append(type.theId).append('/');
}
ret.setLength(ret.length() - 1);
c.getPlayer().dropMessage(6, ret.append(']').toString());
return 0;
}
final MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]);
if (victim == null) {
c.getPlayer().dropMessage(5, "Does not exist");
return 0;
}
final ReportType type = ReportType.getByString(splitted[2]);
if (type != null) {
victim.clearReports(type);
} else {
victim.clearReports();
}
c.getPlayer().dropMessage(5, "Done.");
return 1;
}
}
public static class ClearDrops extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
c.getPlayer().getMap().removeDrops();
return 1;
}
}
public static class Job extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
int jobid = Integer.parseInt(splitted[1]);
if (!MapleJob.isExist(jobid)) {
c.getPlayer().dropMessage(5, "Invalid Job");
return 0;
}
c.getPlayer().changeJob((short) jobid);
c.getPlayer().setSubcategory(c.getPlayer().getSubcategory());
return 1;
}
}
public static class KillNear extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
MapleMap map = c.getPlayer().getMap();
List<MapleMapObject> players = map.getMapObjectsInRange(c.getPlayer().getPosition(), (double) 25000, Arrays.asList(MapleMapObjectType.PLAYER));
for (MapleMapObject closeplayers : players) {
MapleCharacter playernear = (MapleCharacter) closeplayers;
if (playernear.isAlive() && playernear != c.getPlayer() && playernear.getJob() != 910) {
playernear.setHp(0);
playernear.updateSingleStat(MapleStat.HP, 0);
playernear.dropMessage(5, "You were too close to the MapleGM.");
}
}
return 1;
}
}
public static class ManualEvent extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (c.getChannelServer().manualEvent(c.getPlayer())) {
for (MapleCharacter chrs : c.getChannelServer().getPlayerStorage().getAllCharacters()) {
//chrs.dropMessage(0, "MapleGM is hosting an event! Use the @joinevent command to join the event!");
//chrs.dropMessage(0, "Event Map: " + c.getPlayer().getMap().getMapName());
//World.Broadcast.broadcastMessage(CWvsContext.broadcastMsg(25, 0, "MapleGM is hosting an event! Use the @joinevent command to join the event!"));
//World.Broadcast.broadcastMessage(CWvsContext.broadcastMsg(26, 0, "Event Map: " + c.getPlayer().getMap().getMapName()));
chrs.getClient().getSession().write(CWvsContext.broadcastMsg(GameConstants.isEventMap(chrs.getMapId()) ? 0 : 25, c.getChannel(), "Event : MapleGM is hosting an event! Use the @joinevent command to join the event!"));
chrs.getClient().getSession().write(CWvsContext.broadcastMsg(GameConstants.isEventMap(chrs.getMapId()) ? 0 : 26, c.getChannel(), "Event : Event Channel: " + c.getChannel() + " Event Map: " + c.getPlayer().getMap().getMapName()));
}
} else {
for (MapleCharacter chrs : c.getChannelServer().getPlayerStorage().getAllCharacters()) {
//World.Broadcast.broadcastMessage(CWvsContext.broadcastMsg(22, 0, "Enteries to the GM event are closed. The event has began!"));
chrs.getClient().getSession().write(CWvsContext.broadcastMsg(GameConstants.isEventMap(chrs.getMapId()) ? 0 : 22, c.getChannel(), "Event : Enteries to the GM event are closed. The event has began!"));
}
}
return 1;
}
}
public static class WarpMap extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
try {
final MapleMap target = c.getChannelServer().getMapFactory().getMap(Integer.parseInt(splitted[1]));
if (target == null) {
c.getPlayer().dropMessage(6, "Map does not exist");
return 0;
}
final MapleMap from = c.getPlayer().getMap();
for (MapleCharacter chr : from.getCharactersThreadsafe()) {
chr.changeMap(target, target.getPortal(0));
}
} catch (NumberFormatException e) {
c.getPlayer().dropMessage(5, "Error: " + e.getMessage());
return 0; //assume drunk GM
}
return 1;
}
}
public static class KillAll extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
MapleMap map = c.getPlayer().getMap();
double range = Double.POSITIVE_INFINITY;
if (splitted.length > 1) {
int irange = Integer.parseInt(splitted[1]);
if (splitted.length <= 2) {
range = irange * irange;
} else {
map = c.getChannelServer().getMapFactory().getMap(Integer.parseInt(splitted[2]));
}
}
if (map == null) {
c.getPlayer().dropMessage(6, "Map does not exist");
return 0;
}
MapleMonster mob;
for (MapleMapObject monstermo : map.getMapObjectsInRange(c.getPlayer().getPosition(), range, Arrays.asList(MapleMapObjectType.MONSTER))) {
mob = (MapleMonster) monstermo;
if (!mob.getStats().isBoss() || mob.getStats().isPartyBonus() || c.getPlayer().isGM()) {
map.killMonster(mob, c.getPlayer(), false, false, (byte) 1);
}
}
return 1;
}
}
public static class KillAllDrops extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
MapleMap map = c.getPlayer().getMap();
double range = Double.POSITIVE_INFINITY;
if (splitted.length > 1) {
int irange = Integer.parseInt(splitted[1]);
if (splitted.length <= 2) {
range = irange * irange;
} else {
map = c.getChannelServer().getMapFactory().getMap(Integer.parseInt(splitted[2]));
}
}
if (map == null) {
c.getPlayer().dropMessage(6, "Map does not exist");
return 0;
}
MapleMonster mob;
for (MapleMapObject monstermo : map.getMapObjectsInRange(c.getPlayer().getPosition(), range, Arrays.asList(MapleMapObjectType.MONSTER))) {
mob = (MapleMonster) monstermo;
if (!mob.getStats().isBoss() || mob.getStats().isPartyBonus() || c.getPlayer().isGM()) {
map.killMonster(mob, c.getPlayer(), true, false, (byte) 1);
}
}
return 1;
}
}
public static class WarpHere extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]);
if (victim != null) {
if (c.getPlayer().inPVP() || (!c.getPlayer().isGM() && (victim.isInBlockedMap() || victim.isGM()))) {
c.getPlayer().dropMessage(5, "Try again later.");
return 0;
}
victim.changeMap(c.getPlayer().getMap(), c.getPlayer().getMap().findClosestPortal(c.getPlayer().getTruePosition()));
} else {
int ch = World.Find.findChannel(splitted[1]);
if (ch < 0) {
c.getPlayer().dropMessage(5, "Not found.");
return 0;
}
victim = ChannelServer.getInstance(ch).getPlayerStorage().getCharacterByName(splitted[1]);
if (victim == null || victim.inPVP() || (!c.getPlayer().isGM() && (victim.isInBlockedMap() || victim.isGM()))) {
c.getPlayer().dropMessage(5, "Try again later.");
return 0;
}
c.getPlayer().dropMessage(5, "Victim is cross changing channel.");
victim.dropMessage(5, "Cross changing channel.");
if (victim.getMapId() != c.getPlayer().getMapId()) {
final MapleMap mapp = victim.getClient().getChannelServer().getMapFactory().getMap(c.getPlayer().getMapId());
victim.changeMap(mapp, mapp.findClosestPortal(c.getPlayer().getTruePosition()));
}
victim.changeChannel(c.getChannel());
}
return 1;
}
}
public static class Position extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
Point position = c.getPlayer().getPosition();
c.getPlayer().dropMessage(6, "Your position is: " + position + ".");
return 1;
}
}
public static class Warp extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]);
if (victim != null && c.getPlayer().getGMLevel() >= victim.getGMLevel() && !victim.inPVP() && !c.getPlayer().inPVP()) {
if (splitted.length == 2) {
c.getPlayer().changeMap(victim.getMap(), victim.getMap().findClosestSpawnpoint(victim.getTruePosition()));
} else {
MapleMap target = ChannelServer.getInstance(c.getChannel()).getMapFactory().getMap(Integer.parseInt(splitted[2]));
if (target == null) {
c.getPlayer().dropMessage(6, "Map does not exist");
return 0;
}
MaplePortal targetPortal = null;
if (splitted.length > 3) {
try {
targetPortal = target.getPortal(Integer.parseInt(splitted[3]));
} catch (IndexOutOfBoundsException e) {
// noop, assume the gm didn't know how many portals there are
c.getPlayer().dropMessage(5, "Invalid portal selected.");
} catch (NumberFormatException a) {
// noop, assume that the gm is drunk
}
}
if (targetPortal == null) {
targetPortal = target.getPortal(0);
}
victim.changeMap(target, targetPortal);
}
} else {
try {
int ch = World.Find.findChannel(splitted[1]);
if (ch < 0) {
MapleMap target = c.getChannelServer().getMapFactory().getMap(Integer.parseInt(splitted[1]));
if (target == null) {
c.getPlayer().dropMessage(6, "Map does not exist");
return 0;
}
MaplePortal targetPortal = null;
if (splitted.length > 2) {
try {
targetPortal = target.getPortal(Integer.parseInt(splitted[2]));
} catch (IndexOutOfBoundsException e) {
// noop, assume the gm didn't know how many portals there are
c.getPlayer().dropMessage(5, "Invalid portal selected.");
} catch (NumberFormatException a) {
// noop, assume that the gm is drunk
}
}
if (targetPortal == null) {
targetPortal = target.getPortal(0);
}
c.getPlayer().changeMap(target, targetPortal);
} else {
victim = ChannelServer.getInstance(ch).getPlayerStorage().getCharacterByName(splitted[1]);
c.getPlayer().dropMessage(6, "Cross changing channel. Please wait.");
if (victim.getMapId() != c.getPlayer().getMapId()) {
final MapleMap mapp = c.getChannelServer().getMapFactory().getMap(victim.getMapId());
c.getPlayer().changeMap(mapp, mapp.findClosestPortal(victim.getTruePosition()));
}
c.getPlayer().changeChannel(ch);
}
} catch (NumberFormatException e) {
c.getPlayer().dropMessage(6, "Something went wrong " + e.getMessage());
return 0;
}
}
return 1;
}
}
public static class TempBan extends CommandExecute {
protected boolean ipBan = false;
private final String[] types = {"HACK", "BOT", "AD", "HARASS", "CURSE", "SCAM", "MISCONDUCT", "SELL", "ICASH", "TEMP", "GM", "IPROGRAM", "MEGAPHONE"};
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 4) {
c.getPlayer().dropMessage(6, "Tempban [name] [REASON] [hours]");
StringBuilder s = new StringBuilder("Tempban reasons: ");
for (int i = 0; i < types.length; i++) {
s.append(i + 1).append(" - ").append(types[i]).append(", ");
}
c.getPlayer().dropMessage(6, s.toString());
return 0;
}
final MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]);
final int reason = Integer.parseInt(splitted[2]);
final int numHour = Integer.parseInt(splitted[3]);
final Calendar cal = Calendar.getInstance();
cal.add(Calendar.HOUR, numHour);
final DateFormat df = DateFormat.getInstance();
if (victim == null || reason < 0 || reason >= types.length) {
c.getPlayer().dropMessage(6, "Unable to find character or reason was not valid, type tempban to see reasons");
return 0;
}
victim.tempban("Temp banned by " + c.getPlayer().getName() + " for " + types[reason] + " reason", cal, reason, ipBan);
c.getPlayer().dropMessage(6, "The character " + splitted[1] + " has been successfully tempbanned till " + df.format(cal.getTime()));
return 1;
}
}
public static class Ban extends CommandExecute {
protected boolean hellban = false, ipBan = false;
private String getCommand() {
if (hellban) {
return "HellBan";
} else {
return "Ban";
}
}
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 3) {
c.getPlayer().dropMessage(5, "[Syntax] !" + getCommand() + " <IGN> <Reason>");
c.getPlayer().dropMessage(5, "If you want to consider this ban as an autoban, set the reason \"AutoBan\"");
return 0;
}
StringBuilder sb = new StringBuilder();
if (hellban) {
sb/*.append("Banned ").append(splitted[1]).append(": ")*/.append(StringUtil.joinStringFrom(splitted, 2));
} else {
sb/*.append(c.getPlayer().getName()).append(" banned ").append(splitted[1]).append(": ")*/.append(StringUtil.joinStringFrom(splitted, 2));
}
MapleCharacter target = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]);
if (target != null) {
if ((c.getPlayer().getGMLevel() > target.getGMLevel() || c.getPlayer().isAdmin()) && !target.getClient().isGm() && !target.isAdmin()) {
//sb.append(" (IP: ").append(target.getClient().getSessionIPAddress()).append(")");
if (target.ban(sb.toString(), hellban || ipBan, false, hellban)) {
c.getPlayer().dropMessage(6, "[" + getCommand() + "] Successfully banned " + splitted[1] + ".");
return 1;
} else {
c.getPlayer().dropMessage(6, "[" + getCommand() + "] Failed to ban.");
return 0;
}
} else {
c.getPlayer().dropMessage(6, "[" + getCommand() + "] May not ban GMs...");
return 1;
}
} else {
if (MapleCharacter.ban(splitted[1], sb.toString(), false, c.getPlayer().isAdmin() ? 250 : c.getPlayer().getGMLevel(), hellban)) {
c.getPlayer().dropMessage(6, "[" + getCommand() + "] Successfully offline banned " + splitted[1] + ".");
return 1;
} else {
c.getPlayer().dropMessage(6, "[" + getCommand() + "] Failed to ban " + splitted[1]);
return 0;
}
}
}
}
public static class DC extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[splitted.length - 1]);
if (victim != null && c.getPlayer().getGMLevel() >= victim.getGMLevel()) {
victim.getClient().getSession().close();
victim.getClient().disconnect(true, false);
return 1;
} else {
c.getPlayer().dropMessage(6, "The victim does not exist.");
return 0;
}
}
}
public static class Kill extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
MapleCharacter player = c.getPlayer();
if (splitted.length < 2) {
c.getPlayer().dropMessage(6, "Syntax: !kill <list player names>");
return 0;
}
MapleCharacter victim = null;
for (int i = 1; i < splitted.length; i++) {
try {
victim = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[i]);
} catch (Exception e) {
c.getPlayer().dropMessage(6, "Player " + splitted[i] + " not found.");
}
if (player.allowedToTarget(victim) && player.getGMLevel() >= victim.getGMLevel()) {
victim.getStat().setHp((short) 0, victim);
victim.getStat().setMp((short) 0, victim);
victim.updateSingleStat(MapleStat.HP, 0);
victim.updateSingleStat(MapleStat.MP, 0);
}
}
return 1;
}
}
public static class Fly extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
SkillFactory.getSkill(1146).getEffect(1).applyTo(c.getPlayer());
SkillFactory.getSkill(1142).getEffect(1).applyTo(c.getPlayer());
c.getPlayer().dispelBuff(1146);
return 1;
}
}
public static class FlyPerson extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
MapleCharacter chr = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]);
SkillFactory.getSkill(1146).getEffect(1).applyTo(chr);
SkillFactory.getSkill(1142).getEffect(1).applyTo(chr);
chr.dispelBuff(1146);
return 1;
}
}
public static class FlyMap extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
for (MapleCharacter mch : c.getChannelServer().getPlayerStorage().getAllCharacters()) {
SkillFactory.getSkill(1146).getEffect(1).applyTo(mch);
SkillFactory.getSkill(1142).getEffect(1).applyTo(mch);
mch.dispelBuff(1146);
}
return 1;
}
}
public static class GivePet extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 6) {
c.getPlayer().dropMessage(0, splitted[0] + " <character name> <petid> <petname> <petlevel> <petcloseness> <petfullness>");
return 0;
}
MapleCharacter petowner = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]);
int id = Integer.parseInt(splitted[2]);
String name = splitted[3];
int level = Integer.parseInt(splitted[4]);
int closeness = Integer.parseInt(splitted[5]);
int fullness = Integer.parseInt(splitted[6]);
long period = 20000;
short flags = 0;
if (id >= 5001000 || id < 5000000) {
c.getPlayer().dropMessage(0, "Invalid pet id.");
return 0;
}
if (level > 30) {
level = 30;
}
if (closeness > 30000) {
closeness = 30000;
}
if (fullness > 100) {
fullness = 100;
}
if (level < 1) {
level = 1;
}
if (closeness < 0) {
closeness = 0;
}
if (fullness < 0) {
fullness = 0;
}
try {
MapleInventoryManipulator.addById(petowner.getClient(), id, (short) 1, "", MaplePet.createPet(id, name, level, closeness, fullness, MapleInventoryIdentifier.getInstance(), id == 5000054 ? (int) period : 0, flags), 45, false, null);
} catch (NullPointerException ex) {
}
return 1;
}
}
public static class OpenNpc extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
NPCScriptManager.getInstance().start(c, Integer.parseInt(splitted[1]), splitted.length > 2 ? StringUtil.joinStringFrom(splitted, 2) : splitted[1]);
return 1;
}
}
public static class OpenShop extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
MapleShopFactory.getInstance().getShop(Integer.parseInt(splitted[1]));
return 1;
}
}
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;
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 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);
return 1;
}
}
public static class SP2 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
c.getPlayer().setRemainingSp(CommandProcessorUtil.getOptionalIntArg(splitted, 2, 1), Integer.parseInt(splitted[1]));
c.getPlayer().updateSingleStat(MapleStat.AVAILABLESP, 0);
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.isIntern()) {
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 JobPerson extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]);
if (!MapleJob.isExist(Integer.parseInt(splitted[2]))) {
c.getPlayer().dropMessage(5, "Invalid Job");
return 0;
}
victim.changeJob((short) Integer.parseInt(splitted[2]));
c.getPlayer().setSubcategory(c.getPlayer().getSubcategory());
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 LevelUp extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
c.getPlayer().levelUp();
return 1;
}
}
public static class LevelUpTill extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
//for (int i = 0; i < Integer.parseInt(splitted[1]) - c.getPlayer().getLevel(); i++) {
while (c.getPlayer().getLevel() < Integer.parseInt(splitted[1])) {
if (c.getPlayer().getLevel() < 255) {
c.getPlayer().levelUp();
}
}
//}
return 1;
}
}
public static class LevelUpPersonTill extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]);
//for (int i = 0; i < Integer.parseInt(splitted[2]) - victim.getLevel(); i++) {
while (victim.getLevel() < Integer.parseInt(splitted[2])) {
if (victim.getLevel() < 255) {
victim.levelUp();
}
}
//}
return 1;
}
}
public static class ITEM 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 (!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.getEquipById(itemId);
} else {
item = new 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 PotentialItem extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
final int itemId = Integer.parseInt(splitted[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 (itemId >= 2000000) {
c.getPlayer().dropMessage(5, "You can only get equips.");
} else if (!ii.itemExists(itemId)) {
c.getPlayer().dropMessage(5, itemId + " does not exist");
} else {
Equip equip;
equip = ii.randomizeStats((Equip) ii.getEquipById(itemId));
equip.setPotential1(Integer.parseInt(splitted[2]));
equip.setPotential2(Integer.parseInt(splitted[3]));
equip.setPotential3(Integer.parseInt(splitted[4]));
equip.setBonusPotential1(Integer.parseInt(splitted[5]));
equip.setBonusPotential2(Integer.parseInt(splitted[6]));
equip.setBonusPotential3(Integer.parseInt(splitted[7]));
equip.setOwner(c.getPlayer().getName());
MapleInventoryManipulator.addbyItem(c, equip);
}
return 1;
}
}
public static class ProItem extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (!c.getPlayer().isAdmin()) {
return 0;
}
if (splitted.length < 3) {
c.getPlayer().dropMessage(5, "!proitem id stats potential stats");
return 0;
}
final int itemId = Integer.parseInt(splitted[1]);
MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
if (itemId >= 2000000) {
c.getPlayer().dropMessage(5, "You can only get equips.");
} else if (!ii.itemExists(itemId)) {
c.getPlayer().dropMessage(5, itemId + " does not exist");
} else {
Equip equip;
equip = ii.randomizeStats((Equip) ii.getEquipById(itemId));
equip.setStr(Short.parseShort(splitted[2]));
equip.setDex(Short.parseShort(splitted[2]));
equip.setInt(Short.parseShort(splitted[2]));
equip.setLuk(Short.parseShort(splitted[2]));
equip.setWatk(Short.parseShort(splitted[2]));
equip.setMatk(Short.parseShort(splitted[2]));
equip.setPotential1(Integer.parseInt(splitted[3]));
equip.setPotential2(Integer.parseInt(splitted[3]));
equip.setPotential3(Integer.parseInt(splitted[3]));
equip.setOwner(c.getPlayer().getName());
MapleInventoryManipulator.addbyItem(c, equip);
}
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().updateSingleStat(MapleStat.LEVEL, Integer.parseInt(splitted[1]));
c.getPlayer().setExp(0);
return 1;
}
}
public static class LevelPerson extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]);
victim.setLevel(Short.parseShort(splitted[2]));
victim.updateSingleStat(MapleStat.LEVEL, Integer.parseInt(splitted[2]));
victim.setExp(0);
return 1;
}
}
public static class StartAutoEvent extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
final EventManager em = c.getChannelServer().getEventSM().getEventManager("AutomatedEvent");
if (em != null) {
em.setWorldEvent();
em.scheduleRandomEvent();
System.out.println("Scheduling Random Automated Event.");
} else {
System.out.println("Could not locate Automated Event script.");
}
return 1;
}
}
public static class SetEvent extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
MapleEvent.onStartEvent(c.getPlayer());
return 1;
}
}
public static class AutoEvent extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
MapleEvent.onStartEvent(c.getPlayer());
return 1;
}
}
public static class StartEvent extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (c.getChannelServer().getEvent() == c.getPlayer().getMapId()) {
MapleEvent.setEvent(c.getChannelServer(), false);
c.getPlayer().dropMessage(5, "Started the event and closed off");
return 1;
} else {
c.getPlayer().dropMessage(5, "!event must've been done first, and you must be in the event map.");
return 0;
}
}
}
public static class Event extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
final MapleEventType type = MapleEventType.getByString(splitted[1]);
if (type == null) {
final StringBuilder sb = new StringBuilder("Wrong syntax: ");
for (MapleEventType t : MapleEventType.values()) {
sb.append(t.name()).append(",");
}
c.getPlayer().dropMessage(5, sb.toString().substring(0, sb.toString().length() - 1));
return 0;
}
final String msg = MapleEvent.scheduleEvent(type, c.getChannelServer());
if (msg.length() > 0) {
c.getPlayer().dropMessage(5, msg);
return 0;
}
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 Smega extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
World.Broadcast.broadcastSmega(CWvsContext.broadcastMsg(3, c.getPlayer() == null ? c.getChannel() : c.getPlayer().getClient().getChannel(), c.getPlayer() == null ? c.getPlayer().getName() : c.getPlayer().getName() + " : " + StringUtil.joinStringFrom(splitted, 1), true));
/*if (splitted.length < 2) {
c.getPlayer().dropMessage(0, "!smega <itemid> <message>");
return 0;
}
final List<String> lines = new LinkedList<>();
for (int i = 0; i < 4; i++) {
final String text = StringUtil.joinStringFrom(splitted, 2);
if (text.length() > 55) {
continue;
}
lines.add(text);
}
final boolean ear = true;
World.Broadcast.broadcastSmega(CWvsContext.getAvatarMega(c.getPlayer(), c.getChannel(), Integer.parseInt(splitted[1]), lines, ear)); */
return 1;
}
}
public static class SpeakMega extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]);
if (victim == null) {
c.getPlayer().dropMessage(0, "The person isn't login, or doesn't exists.");
return 0;
}
World.Broadcast.broadcastSmega(CWvsContext.broadcastMsg(3, victim.getClient().getChannel(), victim.getName() + " : " + StringUtil.joinStringFrom(splitted, 2), true));
/*
if (splitted.length < 2) {
c.getPlayer().dropMessage(0, "!smega <itemid> <victim> <message>");
return 0;
}
final List<String> lines = new LinkedList<>();
for (int i = 0; i < 4; i++) {
final String text = StringUtil.joinStringFrom(splitted, 3);
if (text.length() > 55) {
continue;
}
lines.add(text);
}
final boolean ear = true;
World.Broadcast.broadcastSmega(CWvsContext.getAvatarMega(victim, victim.getClient().getChannel(), Integer.parseInt(splitted[1]), lines, ear));
*/
return 1;
}
}
public static class SpeakAll extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
for (MapleCharacter mch : c.getChannelServer().getPlayerStorage().getAllCharacters()) {
if (mch == null) {
return 0;
} else {
mch.getMap().broadcastMessage(CField.getChatText(mch.getId(), StringUtil.joinStringFrom(splitted, 1), mch.isGM(), 0));
}
}
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 DiseaseMap extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 3) {
c.getPlayer().dropMessage(6, "!disease <type> <level> where type = SEAL/DARKNESS/WEAKEN/STUN/CURSE/POISON/SLOW/SEDUCE/REVERSE/ZOMBIFY/POTION/SHADOW/BLIND/FREEZE/POTENTIAL");
return 0;
}
int type;
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")) { //24, 289 and 29 are cool.
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 if (splitted[1].equalsIgnoreCase("SLOW2")) {
type = 172;
} else if (splitted[1].equalsIgnoreCase("TORNADO")) {
type = 173;
} else if (splitted[1].equalsIgnoreCase("FLAG")) {
type = 799;
} else {
c.getPlayer().dropMessage(6, "!disease <type> <level> where type = SEAL/DARKNESS/WEAKEN/STUN/CURSE/POISON/SLOW/SEDUCE/REVERSE/ZOMBIFY/POTION/SHADOW/BLIND/FREEZE/POTENTIAL/SLOW2/TORNADO/FLAG");
return 0;
}
for (MapleCharacter mch : c.getChannelServer().getPlayerStorage().getAllCharacters()) {
if (mch.getMapId() == c.getPlayer().getMapId()) {
if (splitted.length == 4) {
if (mch == null) {
c.getPlayer().dropMessage(5, "Not found.");
return 0;
}
mch.disease(type, CommandProcessorUtil.getOptionalIntArg(splitted, 2, 1));
} else {
mch.disease(type, CommandProcessorUtil.getOptionalIntArg(splitted, 2, 1));
}
}
}
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;
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 if (splitted[1].equalsIgnoreCase("SLOW2")) {
type = 172;
} else if (splitted[1].equalsIgnoreCase("TORNADO")) {
type = 173;
} else if (splitted[1].equalsIgnoreCase("FLAG")) {
type = 799;
} 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/SLOW2/TORNADO/FLAG");
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 GMChatNotice extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
for (MapleCharacter all : c.getChannelServer().getPlayerStorage().getAllCharacters()) {
all.dropMessage(-6, StringUtil.joinStringFrom(splitted, 1));
}
return 1;
}
}
public static class Notice extends CommandExecute {
protected static int getNoticeType(String typestring) {
switch (typestring) {
case "1":
return -1;
case "2":
return -2;
case "3":
return -3;
case "4":
return -4;
case "5":
return -5;
case "6":
return -6;
case "7":
return -7;
case "8":
return -8;
case "n":
return 0;
case "p":
return 1;
case "l":
return 2;
case "nv":
return 5;
case "v":
return 5;
case "b":
return 6;
}
return -1;
}
@Override
public int execute(MapleClient c, String[] splitted) {
int joinmod = 1;
int range = -1;
switch (splitted[1]) {
case "m":
range = 0;
break;
case "c":
range = 1;
break;
case "w":
range = 2;
break;
}
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.broadcastMsg(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;
switch (splitted[1]) {
case "m":
range = 0;
break;
case "c":
range = 1;
break;
case "w":
range = 2;
break;
}
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;
}
}
public static class Jail extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 3) {
c.getPlayer().dropMessage(6, "jail [name] [minutes, 0 = forever]");
return 0;
}
MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]);
final int minutes = Math.max(0, Integer.parseInt(splitted[2]));
if (victim != null && c.getPlayer().getGMLevel() >= victim.getGMLevel()) {
MapleMap target = ChannelServer.getInstance(c.getChannel()).getMapFactory().getMap(GameConstants.JAIL);
victim.getQuestNAdd(MapleQuest.getInstance(GameConstants.JAIL_QUEST)).setCustomData(String.valueOf(minutes * 60));
victim.changeMap(target, target.getPortal(0));
} else {
c.getPlayer().dropMessage(6, "Please be on their channel.");
return 0;
}
return 1;
}
}
public static class LookNPC extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
for (MapleMapObject reactor1l : c.getPlayer().getMap().getAllNPCsThreadsafe()) {
MapleNPC reactor2l = (MapleNPC) reactor1l;
c.getPlayer().dropMessage(5, "NPC: oID: " + reactor2l.getObjectId() + " npcID: " + reactor2l.getId() + " Position: " + reactor2l.getPosition().toString() + " Name: " + reactor2l.getName());
}
return 0;
}
}
public static class LookReactor extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
for (MapleMapObject reactor1l : c.getPlayer().getMap().getAllReactorsThreadsafe()) {
MapleReactor reactor2l = (MapleReactor) reactor1l;
c.getPlayer().dropMessage(5, "Reactor: oID: " + reactor2l.getObjectId() + " reactorID: " + reactor2l.getReactorId() + " Position: " + reactor2l.getPosition().toString() + " State: " + reactor2l.getState() + " Name: " + reactor2l.getName());
}
return 0;
}
}
public static class LookPortals extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
for (MaplePortal portal : c.getPlayer().getMap().getPortals()) {
c.getPlayer().dropMessage(5, "Portal: ID: " + portal.getId() + " script: " + portal.getScriptName() + " name: " + portal.getName() + " pos: " + portal.getPosition().x + "," + portal.getPosition().y + " target: " + portal.getTargetMapId() + " / " + portal.getTarget());
}
return 0;
}
}
public static class MyNPCPos extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
Point pos = c.getPlayer().getPosition();
c.getPlayer().dropMessage(6, "X: " + pos.x + " | Y: " + pos.y + " | RX0: " + (pos.x + 50) + " | RX1: " + (pos.x - 50) + " | FH: " + c.getPlayer().getFH());
return 1;
}
}
public static class Letter extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 3) {
c.getPlayer().dropMessage(6, "syntax: !letter <color (green/red)> <word>");
return 0;
}
int start;
int nstart;
if (splitted[1].equalsIgnoreCase("green")) {
start = 3991026;
nstart = 3990019;
} else if (splitted[1].equalsIgnoreCase("red")) {
start = 3991000;
nstart = 3990009;
} else {
c.getPlayer().dropMessage(6, "Unknown color!");
return 0;
}
String splitString = StringUtil.joinStringFrom(splitted, 2);
List<Integer> chars = new ArrayList();
splitString = splitString.toUpperCase();
for (int i = 0; i < splitString.length(); ++i) {
char chr = splitString.charAt(i);
if (chr == ' ') {
chars.add(Integer.valueOf(-1));
} else if ((chr >= 'A') && (chr <= 'Z')) {
chars.add(Integer.valueOf(chr));
} else if ((chr >= '0') && (chr <= '9')) {
chars.add(Integer.valueOf(chr + 200));
}
}
int w = 32;
int dStart = c.getPlayer().getPosition().x - (splitString.length() / 2 * 32);
for (Integer i : chars) {
if (i.intValue() == -1) {
dStart += 32;
} else {
int val;
Item item;
if (i.intValue() < 200) {
val = start + i.intValue() - 65;
item = new Item(val, (byte) 0, (short) 1);
c.getPlayer().getMap().spawnItemDrop(c.getPlayer(), c.getPlayer(), item, new Point(dStart, c.getPlayer().getPosition().y), false, false);
dStart += 32;
} else if ((i.intValue() >= 200) && (i.intValue() <= 300)) {
val = nstart + i.intValue() - 48 - 200;
item = new Item(val, (byte) 0, (short) 1);
c.getPlayer().getMap().spawnItemDrop(c.getPlayer(), c.getPlayer(), item, new Point(dStart, c.getPlayer().getPosition().y), false, false);
dStart += 32;
}
}
}
return 1;
}
}
public static class Spawn extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
final int mid = Integer.parseInt(splitted[1]);
final int num = Math.min(CommandProcessorUtil.getOptionalIntArg(splitted, 2, 1), 500);
Integer level = CommandProcessorUtil.getNamedIntArg(splitted, 1, "lvl");
Long hp = CommandProcessorUtil.getNamedLongArg(splitted, 1, "hp");
Integer exp = CommandProcessorUtil.getNamedIntArg(splitted, 1, "exp");
Double php = CommandProcessorUtil.getNamedDoubleArg(splitted, 1, "php");
Double pexp = CommandProcessorUtil.getNamedDoubleArg(splitted, 1, "pexp");
MapleMonster onemob;
try {
onemob = MapleLifeFactory.getMonster(mid);
} catch (RuntimeException e) {
c.getPlayer().dropMessage(5, "Error: " + e.getMessage());
return 0;
}
if (onemob == null) {
c.getPlayer().dropMessage(5, "Mob does not exist");
return 0;
}
long newhp;
int newexp;
if (hp != null) {
newhp = hp.longValue();
} else if (php != null) {
newhp = (long) (onemob.getMobMaxHp() * (php.doubleValue() / 100));
} else {
newhp = onemob.getMobMaxHp();
}
if (exp != null) {
newexp = exp.intValue();
} else if (pexp != null) {
newexp = (int) (onemob.getMobExp() * (pexp.doubleValue() / 100));
} else {
newexp = onemob.getMobExp();
}
if (newhp < 1) {
newhp = 1;
}
final OverrideMonsterStats overrideStats = new OverrideMonsterStats(newhp, onemob.getMobMaxMp(), newexp, false);
for (int i = 0; i < num; i++) {
MapleMonster mob = MapleLifeFactory.getMonster(mid);
mob.setHp(newhp);
if (level != null) {
mob.changeLevel(level.intValue(), false);
} else {
mob.setOverrideStats(overrideStats);
}
c.getPlayer().getMap().spawnMonsterOnGroundBelow(mob, c.getPlayer().getPosition());
}
return 1;
}
}
public static class SpawnMob extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
final String mname = splitted[2];
final int num = Integer.parseInt(splitted[1]);
int mid = 0;
for (Pair<Integer, String> mob : MapleMonsterInformationProvider.getInstance().getAllMonsters()) {
if (mob.getRight().toLowerCase().equals(mname.toLowerCase())) {
mid = mob.getLeft();
break;
}
}
MapleMonster onemob;
try {
onemob = MapleLifeFactory.getMonster(mid);
} catch (RuntimeException e) {
c.getPlayer().dropMessage(5, "Error: " + e.getMessage());
return 0;
}
if (onemob == null) {
c.getPlayer().dropMessage(5, "Mob does not exist");
return 0;
}
for (int i = 0; i < num; i++) {
MapleMonster mob = MapleLifeFactory.getMonster(mid);
c.getPlayer().getMap().spawnMonsterOnGroundBelow(mob, c.getPlayer().getPosition());
}
return 1;
}
}
public static class Mute extends CommandExecute {
@Override
public int execute(MapleClient c, String splitted[]) {
MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]);
victim.canTalk(false);
return 1;
}
}
public static class UnMute extends CommandExecute {
@Override
public int execute(MapleClient c, String splitted[]) {
MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]);
victim.canTalk(true);
return 1;
}
}
public static class MuteMap extends CommandExecute {
@Override
public int execute(MapleClient c, String splitted[]) {
for (MapleCharacter chr : c.getPlayer().getMap().getCharactersThreadsafe()) {
chr.canTalk(false);
}
return 1;
}
}
public static class UnMuteMap extends CommandExecute {
@Override
public int execute(MapleClient c, String splitted[]) {
for (MapleCharacter chr : c.getPlayer().getMap().getCharactersThreadsafe()) {
chr.canTalk(true);
}
return 1;
}
}
}